From 161791d4a5759878f53e4ef2e397502d621a8e81 Mon Sep 17 00:00:00 2001 From: Christian Bender Date: Wed, 25 Jul 2018 17:07:34 +0200 Subject: [PATCH 001/521] fixed bug in method gcd(int, int) --- Others/GCD.java | 52 ++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/Others/GCD.java b/Others/GCD.java index 08da3805e9d8..58a2b5eef5aa 100644 --- a/Others/GCD.java +++ b/Others/GCD.java @@ -2,29 +2,37 @@ //This is Euclid's algorithm which is used to find the greatest common denominator //Overide function name gcd -public class GCD{ - - public static int gcd(int num1, int num2) { - - int gcdValue = num1 % num2; - while (gcdValue != 0) { - num2 = gcdValue; - gcdValue = num2 % gcdValue; +public class GCD { + + public static int gcd(int num1, int num2) { + + if (num1 == 0) + return num2; + + while (num2 != 0) { + if (num1 > num2) + num1 -= num2; + else + num2 -= num1; } - return num2; + + return num1; } - public static int gcd(int[] number) { - int result = number[0]; - for(int i = 1; i < number.length; i++) - //call gcd function (input two value) - result = gcd(result, number[i]); - - return result; - } - - public static void main(String[] args) { - int[] myIntArray = {4,16,32}; - //call gcd function (input array) - System.out.println(gcd(myIntArray)); + + public static int gcd(int[] number) { + int result = number[0]; + for (int i = 1; i < number.length; i++) + // call gcd function (input two value) + result = gcd(result, number[i]); + + return result; + } + + public static void main(String[] args) { + int[] myIntArray = { 4, 16, 32 }; + + // call gcd function (input array) + System.out.println(gcd(myIntArray)); // => 4 + System.out.printf("gcd(40,24)=%d gcd(24,40)=%d\n", gcd(40, 24), gcd(24, 40)); // => 8 } } From 871793bed18823a3aa93a8e86a4100c19946895a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 25 Jul 2018 09:16:16 -0700 Subject: [PATCH 002/521] Deleted conflict file for hahsmap --- DataStructures/HashMap/HashMap.java | 283 ---------------------------- 1 file changed, 283 deletions(-) delete mode 100644 DataStructures/HashMap/HashMap.java diff --git a/DataStructures/HashMap/HashMap.java b/DataStructures/HashMap/HashMap.java deleted file mode 100644 index 1cce6260e52c..000000000000 --- a/DataStructures/HashMap/HashMap.java +++ /dev/null @@ -1,283 +0,0 @@ -<<<<<<< HEAD:Data Structures/HashMap/HashMap.java - - -import java.util.ArrayList; -import java.util.LinkedList; - -public class HashMap { - public class hmnodes{ //HashMap nodes - K key; - V value; - } - - private int size=0; //size of hashmap - private LinkedList buckets[]; //array of addresses of list - - public HashMap(){ - buckets=new LinkedList[4]; //initially create bucket of any size - for(int i=0;i<4;i++) - buckets[i]=new LinkedList<>(); - } - - public void put(K key,V value) throws Exception{ - int bi=bucketIndex(key); //find the index,the new key will be inserted in linklist at that index - int fountAt=find(bi,key); //check if key already exists or not - if(fountAt==-1){ - hmnodes temp=new hmnodes(); //if doesn't exist create new node and insert - temp.key=key; - temp.value=value; - buckets[bi].addLast(temp); - this.size++; - }else{ - buckets[bi].get(fountAt).value=value;//if already exist modify the value - } - - double lambda = (this.size*1.0)/this.buckets.length; - if(lambda>2.0){ - rehash(); //rehashing function which will increase the size of bucket as soon as lambda exceeds 2.0 - } - - return; - } - - - public V get(K key) throws Exception{ - int bi=bucketIndex(key); - int fountAt=find(bi,key); - if(fountAt==-1){ - return null; - }else{ - return buckets[bi].get(fountAt).value; - } - } - - public V remove(K key) throws Exception{ - int bi=bucketIndex(key); - int fountAt=find(bi,key); - if(fountAt==-1){ - return null; - }else{ - this.size--; - return buckets[bi].remove(fountAt).value; - } - } - - public boolean containskey(K key) throws Exception{ - int bi=bucketIndex(key); - int fountAt=find(bi,key); - if(fountAt==-1){ - return false; - }else{ - return true; - } - } - - public int size(){ - return this.size; - } - - - public boolean isempty(){ - return this.size==0; - } - - public ArrayList keyset() throws Exception{ - ArrayList arr=new ArrayList<>(); - for(int i=0;i valueset() throws Exception{ - ArrayList arr=new ArrayList<>(); - for(int i=0;i"+temp.value+"]"); - } - System.out.println(); - } - } - - public int find(int bi,K key) throws Exception{ - for(int i=0;i ob[]= buckets; - buckets=new LinkedList[ob.length*2]; - for(int i=0;i(); - - size = 0; - for(int i=0;i { - public class hmnodes{ //HashMap nodes - K key; - V value; - } - - private int size=0; //size of hashmap - private LinkedList buckets[]; //array of addresses of list - - public HashMap(){ - buckets=new LinkedList[4]; //initially create bucket of any size - for(int i=0;i<4;i++) - buckets[i]=new LinkedList<>(); - } - - public void put(K key,V value) throws Exception{ - int bi=bucketIndex(key); //find the index,the new key will be inserted in linklist at that index - int fountAt=find(bi,key); //check if key already exists or not - if(fountAt==-1){ - hmnodes temp=new hmnodes(); //if doesn't exist create new node and insert - temp.key=key; - temp.value=value; - buckets[bi].addLast(temp); - this.size++; - }else{ - buckets[bi].get(fountAt).value=value;//if already exist modify the value - } - - double lambda = (this.size*1.0)/this.buckets.length; - if(lambda>2.0){ - rehash(); //rehashing function which will increase the size of bucket as soon as lambda exceeds 2.0 - } - - return; - } - - - public V get(K key) throws Exception{ - int bi=bucketIndex(key); - int fountAt=find(bi,key); - if(fountAt==-1){ - return null; - }else{ - return buckets[bi].get(fountAt).value; - } - } - - public V remove(K key) throws Exception{ - int bi=bucketIndex(key); - int fountAt=find(bi,key); - if(fountAt==-1){ - return null; - }else{ - this.size--; - return buckets[bi].remove(fountAt).value; - } - } - - public boolean containskey(K key) throws Exception{ - int bi=bucketIndex(key); - int fountAt=find(bi,key); - if(fountAt==-1){ - return false; - }else{ - return true; - } - } - - public int size(){ - return this.size; - } - - - public boolean isempty(){ - return this.size==0; - } - - public ArrayList keyset() throws Exception{ - ArrayList arr=new ArrayList<>(); - for(int i=0;i valueset() throws Exception{ - ArrayList arr=new ArrayList<>(); - for(int i=0;i"+temp.value+"]"); - } - System.out.println(); - } - } - - public int find(int bi,K key) throws Exception{ - for(int i=0;i ob[]= buckets; - buckets=new LinkedList[ob.length*2]; - for(int i=0;i(); - - size = 0; - for(int i=0;i>>>>>> 7e3a8c55c865471a33f6932a022a1059c5243fc3:data_structures/HashMap/HashMap.java From 69279375d40bcfc315071ee7b97a926ca105ad43 Mon Sep 17 00:00:00 2001 From: Keshav Date: Mon, 30 Jul 2018 11:16:40 +0800 Subject: [PATCH 003/521] Add method for minimum number of coins required for given amount --- Dynamic Programming/CoinChange.java | 39 +++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/Dynamic Programming/CoinChange.java b/Dynamic Programming/CoinChange.java index f4cda7203b7c..e9d3689d9952 100644 --- a/Dynamic Programming/CoinChange.java +++ b/Dynamic Programming/CoinChange.java @@ -10,9 +10,11 @@ public class CoinChange { public static void main(String[] args) { int amount = 12; - int[] coins = {1, 2, 5}; + int[] coins = {2, 4, 5}; System.out.println("Number of combinations of getting change for " + amount + " is: " + change(coins, amount)); + System.out.println("Minimum number of coins required for amount :" + amount + " is: " + minimumCoins(coins, amount)); + } /** @@ -29,7 +31,7 @@ public static int change(int[] coins, int amount) { for (int coin : coins) { for (int i=coin; i Date: Wed, 1 Aug 2018 14:55:26 +0100 Subject: [PATCH 004/521] Remove Tracis CI badge from README.md Removing the Travis CI badge as it points to a dead URL. As this repository has [very few tests](https://github.com/TheAlgorithms/Java/search?q=Test&unscoped_q=Test), maybe a CI build might be a bit too much. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ce2cdec5e76a..2bf743208910 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# The Algorithms - Java [![Build Status](https://travis-ci.org/TheAlgorithms/Java.svg)](https://travis-ci.org/TheAlgorithms/Java) +# The Algorithms - Java ### All algorithms implemented in Java (for education) From 199220db7c291cba01d80f9b6a648575a75e1c48 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 23 Aug 2018 14:16:56 -0700 Subject: [PATCH 005/521] Deleted irrelevant file --- myfile.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 myfile.txt diff --git a/myfile.txt b/myfile.txt deleted file mode 100644 index d1b1c0a7ad80..000000000000 --- a/myfile.txt +++ /dev/null @@ -1 +0,0 @@ -ÇÏÀÌ~ \ No newline at end of file From 0a373b5c101ee0cad5912ecbdfab389a7b02f2fa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 23 Aug 2018 14:20:01 -0700 Subject: [PATCH 006/521] Delete ClosestPair.java --- ClosestPair/ClosestPair.java | 211 ----------------------------------- 1 file changed, 211 deletions(-) delete mode 100644 ClosestPair/ClosestPair.java diff --git a/ClosestPair/ClosestPair.java b/ClosestPair/ClosestPair.java deleted file mode 100644 index 760ef7fd0c5d..000000000000 --- a/ClosestPair/ClosestPair.java +++ /dev/null @@ -1,211 +0,0 @@ -import java.io.*; -import java.util.*; - -public class ClosestPair { - static int count = 0;// array length - static int secondCount = 0;// array length - static Location array[] = new Location[10000]; - static Location point1 = null; // Minimum point coordinate - static Location point2 = null; // Minimum point coordinate - static double minNum = Double.MAX_VALUE;// Minimum point length - - private static class Location { // Location class - double x = 0, y = 0; - - public Location(double x, double y) { //Save x, y coordinates - this.x = x; - this.y = y; - } - } - - public static int xPartition(Location[] a, int first, int last) { // x-axis Quick Sorting - Location pivot = a[last]; // pivot - int pIndex = last; - int i = first - 1; - Location temp; // Temporarily store the value for position transformation - for (int j = first; j <= last - 1; j++) { - if (a[j].x <= pivot.x) { // Less than or less than pivot - i++; - temp = a[i]; // array[i] <-> array[j] - a[i] = a[j]; - a[j] = temp; - } - } - i++; - temp = a[i];// array[pivot] <-> array[i] - a[i] = a[pIndex]; - a[pIndex] = temp; - return i;// pivot index - } - public static int yPartition(Location[] a, int first, int last) { //y-axis Quick Sorting - Location pivot = a[last]; // pivot - int pIndex = last; - int i = first - 1; - Location temp; // Temporarily store the value for position transformation - for (int j = first; j <= last - 1; j++) { - if (a[j].y <= pivot.y) { // Less than or less than pivot - i++; - temp = a[i]; // array[i] <-> array[j] - a[i] = a[j]; - a[j] = temp; - } - } - i++; - temp = a[i];// array[pivot] <-> array[i] - a[i] = a[pIndex]; - a[pIndex] = temp; - return i;// pivot index - } - - public static void xQuickSort(Location[] a, int first, int last) { //x-axis Quick Sorting - if (first < last) { - int q = xPartition(a, first, last); // pivot - xQuickSort(a, first, q - 1); // Left - xQuickSort(a, q + 1, last); // Right - } - } - - public static void yQuickSort(Location[] a, int first, int last) { //y-axis Quick Sorting - if (first < last) { - int q = yPartition(a, first, last); // pivot - yQuickSort(a, first, q - 1); // Left - yQuickSort(a, q + 1, last); // Right - } - } - - public static double closestPair(Location[] a, int indexNum, int first, int last) {// closestPair - Location divideArray[] = new Location[indexNum]; // array stored before divide - System.arraycopy(a, 0, divideArray, 0, indexNum); // Copy from previous array - - int totalNum = indexNum; // number of coordinates in the divideArray array - int divideX = indexNum / 2; // Intermediate value for divide - Location leftArray[] = new Location[divideX]; //divide - left array - Location rightArray[] = new Location[totalNum - divideX]; //divide - right array - - if (indexNum <= 3) { // If the number of coordinates is 3 or less - return bruteForce(divideArray); - } - System.arraycopy(divideArray, 0, leftArray, 0, divideX); //divide - left array - System.arraycopy(divideArray, divideX, rightArray, 0, totalNum - divideX); //divide - right array - - double minLeftArea = 0; //Minimum length of left array - double minRightArea = 0; //Minimum length of right array - double minValue = 0; //Minimum lengt - - minLeftArea = closestPair(leftArray, divideX, 0, divideX - 1); // recursive closestPair - minRightArea = closestPair(rightArray, totalNum - divideX, divideX, totalNum - divideX - 1); - minValue = Math.min(minLeftArea, minRightArea);// window size (= minimum length) - - // Create window - for (int i = 0; i < totalNum; i++) { // Set the size for creating a window and creating a new array for the coordinates in the window - double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); - if (xGap < minValue) { - secondCount++; // size of the array - } else { - if (divideArray[i].x > divideArray[divideX].x) { - break; - } - } - } - Location firstWindow[] = new Location[secondCount]; // new array for coordinates in window - int k = 0; - for (int i = 0; i < totalNum; i++) { - double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); - if (xGap < minValue) { // if it's inside a window - firstWindow[k] = divideArray[i]; // put in an array - k++; - } else { - if (divideArray[i].x > divideArray[divideX].x) { - break; - } - } - } - yQuickSort(firstWindow, 0, secondCount - 1);// Sort by y coordinates - / * Coordinates in Window * / - double length = 0; - for (int i = 0; i < secondCount - 1; i++) { // size comparison within window - for (int j = (i + 1); j < secondCount; j++) { - double xGap = Math.abs(firstWindow[i].x - firstWindow[j].x); - double yGap = Math.abs(firstWindow[i].y - firstWindow[j].y); - if (yGap < minValue) { - length = (double) Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); - if (length < minValue) { // If the measured distance is less than the current minimum distance - minValue = length;// Change minimum distance to current distance - if (length < minNum) { // Conditional statement for registering final coordinate - minNum = length; - point1 = firstWindow[i]; - point2 = firstWindow[j]; - } - } - } - else - break; - } - } - secondCount = 0; - return minValue; - } - - public static double bruteForce(Location[] array) { // When the number of coordinates is less than 3 - double minValue = Double.MAX_VALUE; // minimum distance - double length = 0; - double xGap = 0, yGap = 0; // Difference between x, y coordinates - if (array.length == 2) { // When there are two coordinates - xGap = (array[0].x - array[1].x); // Difference between x coordinates - yGap = (array[0].y - array[1].y); // Difference between y coordinates - length = (double) Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); // distance between coordinates - if (length < minNum) { // Conditional statement for registering final coordinate - minNum = length; - point1 = array[0]; - point2 = array[1]; - } - return length; - } else if (array.length == 3) { // When there are 3 coordinates - for (int i = 0; i < array.length - 1; i++) { - for (int j = (i + 1); j < array.length; j++) { - xGap = (array[i].x - array[j].x); // Difference between x coordinates - yGap = (array[i].y - array[j].y); // Difference between y coordinates - length = (double) Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); // distance between coordinates - if (length < minValue) { // If the measured distance is less than the current minimum distance - minValue = length; // Change minimum distance to current distance - if (length < minNum) { // Conditional statement for registering final coordinate - minNum = length; - point1 = array[i]; - point2 = array[j]; - } - } - } - } - return minValue; - } - return minValue; - } - - public static void main(String[] args) throws IOException { - // TODO Auto-generated method stub - StringTokenizer token; - - BufferedReader in = new BufferedReader(new FileReader("closest_data.txt")); - //Input data consists of one x-coordinate and one y-coordinate - String ch; - - System.out.println("Input data"); - while ((ch = in.readLine()) != null) { - token = new StringTokenizer(ch, " "); - - array[count] = new Location(Double.parseDouble(token.nextToken()), Double.parseDouble(token.nextToken())); // put in an array - count++; // the number of coordinates actually in the array - System.out.println("x: "+array[count - 1].x + ", y: " + array[count - 1].y); - } - - xQuickSort(array, 0, count - 1); // Sorting by x value - - double result; // minimum distance - result = closestPair(array, count, 0, count - 1); // ClosestPair start - System.out.println("Output Data");// minimum distance coordinates and distance output - System.out.println("(" + point1.x + ", " + point1.y + ")"); - System.out.println("(" + point2.x + ", " + point2.y + ")"); - System.out.println("Minimum Distance : " + result); - - } -} From 5eaf920106343f4311b4c0f58063d8f634701372 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 23 Aug 2018 14:20:09 -0700 Subject: [PATCH 007/521] Delete closest_data.txt --- ClosestPair/closest_data.txt | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 ClosestPair/closest_data.txt diff --git a/ClosestPair/closest_data.txt b/ClosestPair/closest_data.txt deleted file mode 100644 index 8ebef63f4a66..000000000000 --- a/ClosestPair/closest_data.txt +++ /dev/null @@ -1,12 +0,0 @@ -2 3 -2 16 -3 9 -6 3 -7 7 -9 12 -10 11 -15 2 -15 19 -16 11 -17 13 -19 4 From a1cbd6542fdedb968a9b4b1759b29bd3169ce8e5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 24 Aug 2018 10:37:35 -0700 Subject: [PATCH 008/521] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2bf743208910..c11c573e3d53 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # The Algorithms - Java +## A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. + ### All algorithms implemented in Java (for education) These are for demonstration purposes only. There are many implementations of sorts in the Java standard library that are much better for performance reasons. From 890b9df9e5c96d7872689dcc38282f7f30d59a97 Mon Sep 17 00:00:00 2001 From: JayH2018 <42029911+JayH2018@users.noreply.github.com> Date: Mon, 27 Aug 2018 15:54:52 +0800 Subject: [PATCH 009/521] className is error Bring fileName into correspondence with className which is marked as public --- DataStructures/Trees/GenericTree.Java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DataStructures/Trees/GenericTree.Java b/DataStructures/Trees/GenericTree.Java index 16ab5fb53b1e..cc592e04082e 100644 --- a/DataStructures/Trees/GenericTree.Java +++ b/DataStructures/Trees/GenericTree.Java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.Scanner; -public class treeclass { +public class GenericTree { private class Node { int data; ArrayList child = new ArrayList<>(); @@ -22,7 +22,7 @@ public class treeclass { I have done this, while calling from main one have to give minimum parameters. */ - public treeclass() { //Constructor + public GenericTree() { //Constructor Scanner scn = new Scanner(System.in); root = create_treeG(null, 0, scn); } From 28deddd5d78064274b76df56126c9a72163ad361 Mon Sep 17 00:00:00 2001 From: JayH2018 <42029911+JayH2018@users.noreply.github.com> Date: Tue, 28 Aug 2018 14:36:56 +0800 Subject: [PATCH 010/521] source coding is a little complex --- DataStructures/Trees/LevelOrderTraversal.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/DataStructures/Trees/LevelOrderTraversal.java b/DataStructures/Trees/LevelOrderTraversal.java index 8cb304f18c8f..e20753638212 100644 --- a/DataStructures/Trees/LevelOrderTraversal.java +++ b/DataStructures/Trees/LevelOrderTraversal.java @@ -37,14 +37,10 @@ int height(Node root) return 0; else { - /* compute height of each subtree */ - int lheight = height(root.left); - int rheight = height(root.right); - - /* use the larger one */ - if (lheight > rheight) - return(lheight+1); - else return(rheight+1); + /** + * return the larger one; + */ + return Math.max(height(root.left),height(root.right)) + 1; } } @@ -75,4 +71,4 @@ public static void main(String args[]) System.out.println("Level order traversal of binary tree is "); tree.printLevelOrder(); } -} \ No newline at end of file +} From 2dc86b6a04eaa57dfbea7bac3e80b5d9995b4545 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 28 Aug 2018 06:25:55 -0700 Subject: [PATCH 011/521] Update LevelOrderTraversal.java --- DataStructures/Trees/LevelOrderTraversal.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Trees/LevelOrderTraversal.java b/DataStructures/Trees/LevelOrderTraversal.java index e20753638212..1f657d92be97 100644 --- a/DataStructures/Trees/LevelOrderTraversal.java +++ b/DataStructures/Trees/LevelOrderTraversal.java @@ -38,7 +38,7 @@ int height(Node root) else { /** - * return the larger one; + * Return the height of larger subtree */ return Math.max(height(root.left),height(root.right)) + 1; } From f713a5ff9c5fbf2a2ee2b08c9de75a43b800ada7 Mon Sep 17 00:00:00 2001 From: DDullahan Date: Thu, 30 Aug 2018 16:47:17 +0800 Subject: [PATCH 012/521] Added MatrixFastPower.java --- DataStructures/Matrix/MatrixFastPower.java | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 DataStructures/Matrix/MatrixFastPower.java diff --git a/DataStructures/Matrix/MatrixFastPower.java b/DataStructures/Matrix/MatrixFastPower.java new file mode 100644 index 000000000000..c2bdcf7cb47d --- /dev/null +++ b/DataStructures/Matrix/MatrixFastPower.java @@ -0,0 +1,139 @@ +import java.util.*; + +/** + * + * Java implementation of Matrix fast power + * It can calculate the high power of constant Matrix with O( log(K) ) + * where K is the power of the Matrix + * + * In order to do that, Matrix must be square Matrix ( columns equals rows) + * + * Notice : large power of Matrix may cause overflow + * + * + * other Matrix basic operator is based on @author Kyler Smith, 2017 + * + * @author DDullahan, 2018 + * + */ + +class Matrix { + private int[][] data; + + /** + * Constructor for the matrix takes in a 2D array + * + * @param pData + */ + public Matrix(int[][] pData) { + + /** Make a deep copy of the data */ + if(pData.length != 0) { + int[][] newData = new int[pData.length][pData[0].length]; + + for(int i = 0; i < pData.length; i++) + for(int j = 0; j < pData[0].length; j++) + newData[i][j] = pData[i][j]; + + this.data = newData; + } else { + this.data = null; + } + } + + /** + * Returns the element specified by the given location + * + * @param x : x cooridinate + * @param y : y cooridinate + * @return int : value at location + */ + public int getElement(int x, int y) { + return data[x][y]; + } + + /** + * Returns the number of rows in the Matrix + * + * @return rows + */ + public int getRows() { + if(this.data == null) + return 0; + + return data.length; + } + + /** + * Returns the number of rows in the Matrix + * + * @return columns + */ + public int getColumns() { + if(this.data == null) + return 0; + + return data[0].length; + } + + /** + * Multiplies this matrix with another matrix. + * + * @param other : Matrix to be multiplied with + * @return product + */ + public Matrix multiply(Matrix other) throws RuntimeException { + + int[][] newData = new int[this.data.length][other.getColumns()]; + + if(this.getColumns() != other.getRows()) + throw new RuntimeException("The two matrices cannot be multiplied."); + + int sum; + + for (int i = 0; i < this.getRows(); ++i) + for(int j = 0; j < other.getColumns(); ++j) { + sum = 0; + + for(int k = 0; k < this.getColumns(); ++k) { + sum += this.data[i][k] * other.getElement(k, j); + } + + newData[i][j] = sum; + } + + return new Matrix(newData); + } + + /** + * Matrix Fast Power + * + * @param k : power of Matrix + * @return product + */ + public Matrix MatrixFastPower(int k) throws RuntimeException { + + if(this.getColumns() != this.getRows()) + throw new RuntimeException("Matrix is not square Matrix."); + + int[][] newData = new int[this.getColumns()][this.getRows()]; + + for(int i = 0; i < this.getColumns(); i++) + newData[i][i] = 1; + + Matrix newMatrix = new Matrix(newData), + coMatrix = new Matrix(this.data); + + while(k != 0) { + + if((k & 1) != 0) + newMatrix = newMatrix.multiply(coMatrix); + + k >>= 1; + coMatrix = coMatrix.multiply(coMatrix); + + } + + return newMatrix; + } +} From 55c179bf19ddcb1c3fcf5e1d6ec56ff6a1788309 Mon Sep 17 00:00:00 2001 From: DDullahan Date: Thu, 30 Aug 2018 21:52:20 +0800 Subject: [PATCH 013/521] Added MatrixFastPower.java with changes --- DataStructures/Matrix/MatrixFastPower.java | 112 +++++++++++++++------ 1 file changed, 82 insertions(+), 30 deletions(-) diff --git a/DataStructures/Matrix/MatrixFastPower.java b/DataStructures/Matrix/MatrixFastPower.java index c2bdcf7cb47d..19f8528a36ec 100644 --- a/DataStructures/Matrix/MatrixFastPower.java +++ b/DataStructures/Matrix/MatrixFastPower.java @@ -1,5 +1,3 @@ -import java.util.*; - /** * * Java implementation of Matrix fast power @@ -14,11 +12,67 @@ * other Matrix basic operator is based on @author Kyler Smith, 2017 * * @author DDullahan, 2018 - * + * */ +class MatrixFastPower { + + /** + * Matrix Fast Power + * + * @param matrix : square Matrix + * @param k : power of Matrix + * @return product + */ + public static Matrix FastPower(Matrix matrix, int k) throws RuntimeException { + + if(matrix.getColumns() != matrix.getRows()) + throw new RuntimeException("Matrix is not square Matrix."); + + int[][] newData = new int[matrix.getColumns()][matrix.getRows()]; + + for(int i = 0; i < matrix.getColumns(); i++) + newData[i][i] = 1; + + Matrix newMatrix = new Matrix(newData), + coMatrix = new Matrix(matrix.data); + + while(k != 0) { + + if((k & 1) != 0) + newMatrix = newMatrix.multiply(coMatrix); + + k >>= 1; + coMatrix = coMatrix.multiply(coMatrix); + + } + + return newMatrix; + } + + public static void main(String[] argv) { + + int[][] data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; + Matrix matrix = new Matrix(data); + + System.out.println("original matrix : "); + System.out.println(matrix.toString()); + + matrix = MatrixFastPower.FastPower(matrix, 5); + + System.out.println("after power : "); + System.out.println(matrix.toString()); + + matrix = MatrixFastPower.FastPower(matrix, 1000000); + + System.out.println("notice, large power may cause overflow : "); + System.out.print(matrix.toString()); + System.out.println("you can use mod to fix that :-) "); + + } +} class Matrix { - private int[][] data; + public int[][] data; /** * Constructor for the matrix takes in a 2D array @@ -106,34 +160,32 @@ public Matrix multiply(Matrix other) throws RuntimeException { } /** - * Matrix Fast Power - * - * @param k : power of Matrix - * @return product - */ - public Matrix MatrixFastPower(int k) throws RuntimeException { - - if(this.getColumns() != this.getRows()) - throw new RuntimeException("Matrix is not square Matrix."); - - int[][] newData = new int[this.getColumns()][this.getRows()]; - - for(int i = 0; i < this.getColumns(); i++) - newData[i][i] = 1; - - Matrix newMatrix = new Matrix(newData), - coMatrix = new Matrix(this.data); - - while(k != 0) { - - if((k & 1) != 0) - newMatrix = newMatrix.multiply(coMatrix); - - k >>= 1; - coMatrix = coMatrix.multiply(coMatrix); + * Returns the Matrix as a String in the following format + * + * [ a b c ] ... + * [ x y z ] ... + * [ i j k ] ... + * ... + * + * @return Matrix as String + * TODO: Work formatting for different digit sizes + */ + public String toString() { + String str = ""; + + for(int i = 0; i < this.data.length; i++) { + str += "[ "; + + for(int j = 0; j < this.data[0].length; j++) { + str += data[i][j]; + str += " "; + } + str += "]"; + str += "\n"; } - return newMatrix; + return str; } + } From 88f815545832d68ba443a10f3cc0dd8b69f3334f Mon Sep 17 00:00:00 2001 From: Marisa Afuera Date: Thu, 30 Aug 2018 19:36:00 +0200 Subject: [PATCH 014/521] Refactorized ClosestPair.java in order to be compliant with java sun rules commit divideconquer\ClosesPair.java Refactorized ClosestPair.java. Finding nearest cartesian points. Refactorized ClosestPair.java. Finding nearest cartesian points. --- divideconquer/ClosestPair.java | 348 +++++++++++++++++++++++++++++++++ 1 file changed, 348 insertions(+) create mode 100644 divideconquer/ClosestPair.java diff --git a/divideconquer/ClosestPair.java b/divideconquer/ClosestPair.java new file mode 100644 index 000000000000..93a5d164dd88 --- /dev/null +++ b/divideconquer/ClosestPair.java @@ -0,0 +1,348 @@ +package divideconquer; + +/** + +* For a set of points in a coordinates system (10000 maximum), +* ClosestPair class calculates the two closest points. + +* @author: anonymous +* @author: Marisa Afuera +*/ + + public final class ClosestPair { + + + /** Number of points */ + int numberPoints = 0; + /** Input data, maximum 10000. */ + private Location[] array; + /** Minimum point coordinate. */ + Location point1 = null; + /** Minimum point coordinate. */ + Location point2 = null; + /** Minimum point length. */ + private static double minNum = Double.MAX_VALUE; + /** secondCount */ + private static int secondCount = 0; + + /** + * Constructor. + */ + ClosestPair(int points) { + numberPoints = points; + array = new Location[numberPoints]; + } + + /** + Location class is an auxiliary type to keep points coordinates. + */ + + public static class Location { + + double x = 0; + double y = 0; + + /** + * @param xpar (IN Parameter) x coordinate
+ * @param ypar (IN Parameter) y coordinate
+ */ + + Location(final double xpar, final double ypar) { //Save x, y coordinates + this.x = xpar; + this.y = ypar; + } + + } + + public Location[] createLocation(int numberValues) { + return new Location[numberValues]; + + } + + public Location buildLocation(double x, double y){ + return new Location(x,y); + } + + + /** xPartition function: arrange x-axis. + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ * @return pivot index + */ + + public int xPartition( + final Location[] a, final int first, final int last) { + + Location pivot = a[last]; // pivot + int pIndex = last; + int i = first - 1; + Location temp; // Temporarily store value for position transformation + for (int j = first; j <= last - 1; j++) { + if (a[j].x <= pivot.x) { // Less than or less than pivot + i++; + temp = a[i]; // array[i] <-> array[j] + a[i] = a[j]; + a[j] = temp; + } + } + i++; + temp = a[i]; // array[pivot] <-> array[i] + a[i] = a[pIndex]; + a[pIndex] = temp; + return i; // pivot index + } + + /** yPartition function: arrange y-axis. + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ * @return pivot index + */ + + public int yPartition( + final Location[] a, final int first, final int last) { + + Location pivot = a[last]; // pivot + int pIndex = last; + int i = first - 1; + Location temp; // Temporarily store value for position transformation + for (int j = first; j <= last - 1; j++) { + if (a[j].y <= pivot.y) { // Less than or less than pivot + i++; + temp = a[i]; // array[i] <-> array[j] + a[i] = a[j]; + a[j] = temp; + } + } + i++; + temp = a[i]; // array[pivot] <-> array[i] + a[i] = a[pIndex]; + a[pIndex] = temp; + return i; // pivot index + } + + /** xQuickSort function: //x-axis Quick Sorting. + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ */ + + public void xQuickSort( + final Location[] a, final int first, final int last) { + + if (first < last) { + int q = xPartition(a, first, last); // pivot + xQuickSort(a, first, q - 1); // Left + xQuickSort(a, q + 1, last); // Right + } + } + + /** yQuickSort function: //y-axis Quick Sorting. + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ */ + + public void yQuickSort( + final Location[] a, final int first, final int last) { + + if (first < last) { + int q = yPartition(a, first, last); // pivot + yQuickSort(a, first, q - 1); // Left + yQuickSort(a, q + 1, last); // Right + } + } + + /** closestPair function: find closest pair. + * @param a (IN Parameter) array stored before divide
+ * @param indexNum (IN Parameter) number coordinates divideArray
+ * @return minimum distance
+ */ + + public double closestPair(final Location[] a, final int indexNum) { + + Location[] divideArray = new Location[indexNum]; + System.arraycopy(a, 0, divideArray, 0, indexNum); // Copy previous array + int totalNum = indexNum; // number of coordinates in the divideArray + int divideX = indexNum / 2; // Intermediate value for divide + Location[] leftArray = new Location[divideX]; //divide - left array + //divide-right array + Location[] rightArray = new Location[totalNum - divideX]; + if (indexNum <= 3) { // If the number of coordinates is 3 or less + return bruteForce(divideArray); + } + //divide-left array + System.arraycopy(divideArray, 0, leftArray, 0, divideX); + //divide-right array + System.arraycopy( + divideArray, divideX, rightArray, 0, totalNum - divideX); + + double minLeftArea = 0; //Minimum length of left array + double minRightArea = 0; //Minimum length of right array + double minValue = 0; //Minimum lengt + + minLeftArea = closestPair(leftArray, divideX); // recursive closestPair + minRightArea = closestPair(rightArray, totalNum - divideX); + // window size (= minimum length) + minValue = Math.min(minLeftArea, minRightArea); + + // Create window. Set the size for creating a window + // and creating a new array for the coordinates in the window + for (int i = 0; i < totalNum; i++) { + double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); + if (xGap < minValue) { + secondCount++; // size of the array + } else { + if (divideArray[i].x > divideArray[divideX].x) { + break; + } + } + } + // new array for coordinates in window + Location[] firstWindow = new Location[secondCount]; + int k = 0; + for (int i = 0; i < totalNum; i++) { + double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); + if (xGap < minValue) { // if it's inside a window + firstWindow[k] = divideArray[i]; // put in an array + k++; + } else { + if (divideArray[i].x > divideArray[divideX].x) { + break; + } + } + } + yQuickSort(firstWindow, 0, secondCount - 1); // Sort by y coordinates + /* Coordinates in Window */ + double length = 0; + // size comparison within window + for (int i = 0; i < secondCount - 1; i++) { + for (int j = (i + 1); j < secondCount; j++) { + double xGap = Math.abs(firstWindow[i].x - firstWindow[j].x); + double yGap = Math.abs(firstWindow[i].y - firstWindow[j].y); + if (yGap < minValue) { + length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // If measured distance is less than current min distance + if (length < minValue) { + // Change minimum distance to current distance + minValue = length; + // Conditional for registering final coordinate + if (length < minNum) { + minNum = length; + point1 = firstWindow[i]; + point2 = firstWindow[j]; + } + } + } + else { + break; + } + } + } + secondCount = 0; + return minValue; + } + + /** bruteForce function: When the number of coordinates is less than 3. + * @param arrayParam (IN Parameter) array stored before divide
+ * @return
+ */ + + public double bruteForce(final Location[] arrayParam) { + + double minValue = Double.MAX_VALUE; // minimum distance + double length = 0; + double xGap = 0; // Difference between x coordinates + double yGap = 0; // Difference between y coordinates + double result = 0; + + if (arrayParam.length == 2) { + // Difference between x coordinates + xGap = (arrayParam[0].x - arrayParam[1].x); + // Difference between y coordinates + yGap = (arrayParam[0].y - arrayParam[1].y); + // distance between coordinates + length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // Conditional statement for registering final coordinate + if (length < minNum) { + minNum = length; + + } + point1 = arrayParam[0]; + point2 = arrayParam[1]; + result = length; + } + if (arrayParam.length == 3) { + for (int i = 0; i < arrayParam.length - 1; i++) { + for (int j = (i + 1); j < arrayParam.length; j++) { + // Difference between x coordinates + xGap = (arrayParam[i].x - arrayParam[j].x); + // Difference between y coordinates + yGap = (arrayParam[i].y - arrayParam[j].y); + // distance between coordinates + length = + Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // If measured distance is less than current min distance + if (length < minValue) { + // Change minimum distance to current distance + minValue = length; + if (length < minNum) { + // Registering final coordinate + minNum = length; + point1 = arrayParam[i]; + point2 = arrayParam[j]; + } + } + } + } + result = minValue; + + } + return result; // If only one point returns 0. + } + + /** main function: execute class. + * @param args (IN Parameter)
+ * @throws IOException If an input or output + * exception occurred + */ + + public static void main(final String[] args) { + + //Input data consists of one x-coordinate and one y-coordinate + + ClosestPair cp = new ClosestPair(12); + cp.array[0]=cp.buildLocation(2,3); + cp.array[1]=cp.buildLocation(2,16); + cp.array[2]=cp.buildLocation(3,9); + cp.array[3]=cp.buildLocation(6,3); + cp.array[4]=cp.buildLocation(7,7); + cp.array[5]=cp.buildLocation(19,4); + cp.array[6]=cp.buildLocation(10,11); + cp.array[7]=cp.buildLocation(15,2); + cp.array[8]=cp.buildLocation(15,19); + cp.array[9]=cp.buildLocation(16,11); + cp.array[10]=cp.buildLocation(17,13); + cp.array[11]=cp.buildLocation(9,12); + + System.out.println("Input data"); + System.out.println("Number of points: "+ cp.array.length); + for (int i=0;i Date: Fri, 5 Oct 2018 00:24:14 +0530 Subject: [PATCH 015/521] Minimum priority queue added alongside heap sort implementation --- DataStructures/Heaps/MinPriorityQueue.java | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 DataStructures/Heaps/MinPriorityQueue.java diff --git a/DataStructures/Heaps/MinPriorityQueue.java b/DataStructures/Heaps/MinPriorityQueue.java new file mode 100644 index 000000000000..3dc2bd28083c --- /dev/null +++ b/DataStructures/Heaps/MinPriorityQueue.java @@ -0,0 +1,131 @@ + +/* Minimum Priority Queue +* It is a part of heap data structure +* A heap is a specific tree based data structure +* in which all the nodes of tree are in a specific order. +* that is the children are arranged in some +* respect of their parents, can either be greater +* or less than the parent. This makes it a min priority queue +* or max priority queue. +*/ + +// Functions: insert, delete, peek, isEmpty, print, heapSort, sink + +public class MinPriorityQueue { + private int[] heap; + private int capacity; + private int size; + + // calss the constructor and initializes the capacity + MinPriorityQueue(int c) { + this.capacity = c; + this.size = 0; + this.heap = new int[c + 1]; + } + + // inserts the key at the end and rearranges it + // so that the binary heap is in appropriate order + public void insert(int key) { + if (this.isFull()) + return; + this.heap[this.size + 1] = key; + int k = this.size + 1; + while (k > 1) { + if (this.heap[k] < this.heap[k / 2]) { + int temp = this.heap[k]; + this.heap[k] = this.heap[k / 2]; + this.heap[k / 2] = temp; + } + k = k / 2; + } + this.size++; + } + + // returns the highest priority value + public int peek() { + return this.heap[1]; + } + + // returns boolean value whether the heap is empty or not + public boolean isEmpty() { + if (0 == this.size) + return true; + return false; + } + + // returns boolean value whether the heap is full or not + public boolean isFull() { + if (this.size == this.capacity) + return true; + return false; + } + + // prints the heap + public void print() { + for (int i = 1; i <= this.capacity; i++) + System.out.print(this.heap[i] + " "); + System.out.println(); + } + + // heap sorting can be done by performing + // delete function to the number of times of the size of the heap + // it returns reverse sort because it is a min priority queue + public void heapSort() { + for (int i = 1; i < this.capacity; i++) + this.delete(); + } + + // this function reorders the heap after every delete function + private void sink() { + int k = 1; + while (2 * k <= this.size || 2 * k + 1 <= this.size) { + int minIndex; + if (this.heap[2 * k] >= this.heap[k]) { + if (2 * k + 1 <= this.size && this.heap[2 * k + 1] >= this.heap[k]) { + break; + } else if (2 * k + 1 > this.size) { + break; + } + } + if (2 * k + 1 > this.size) { + minIndex = this.heap[2 * k] < this.heap[k] ? 2 * k : k; + } else { + if (this.heap[k] > this.heap[2 * k] || this.heap[k] > this.heap[2 * k + 1]) { + minIndex = this.heap[2 * k] < this.heap[2 * k + 1] ? 2 * k : 2 * k + 1; + } else { + minIndex = k; + } + } + int temp = this.heap[k]; + this.heap[k] = this.heap[minIndex]; + this.heap[minIndex] = temp; + k = minIndex; + } + } + + // deletes the highest priority value from the heap + public int delete() { + int min = this.heap[1]; + this.heap[1] = this.heap[this.size]; + this.heap[this.size] = min; + this.size--; + this.sink(); + return min; + } + + public static void main(String[] args) { + // testing + MinPriorityQueue q = new MinPriorityQueue(8); + q.insert(5); + q.insert(2); + q.insert(4); + q.insert(1); + q.insert(7); + q.insert(6); + q.insert(3); + q.insert(8); + q.print(); // [ 1, 2, 3, 5, 7, 6, 4, 8 ] + q.heapSort(); + q.print(); // [ 8, 7, 6, 5, 4, 3, 2, 1 ] + } +} \ No newline at end of file From 18b30402beb79f9f0dad05961c4306241edbca4c Mon Sep 17 00:00:00 2001 From: yanglbme Date: Fri, 5 Oct 2018 17:21:05 +0800 Subject: [PATCH 016/521] Add Longest Valid Parentheses algorithm(DP) --- .../LongestValidParentheses.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Dynamic Programming/LongestValidParentheses.java diff --git a/Dynamic Programming/LongestValidParentheses.java b/Dynamic Programming/LongestValidParentheses.java new file mode 100644 index 000000000000..14c98020a126 --- /dev/null +++ b/Dynamic Programming/LongestValidParentheses.java @@ -0,0 +1,63 @@ + +import java.util.Scanner; + +/** + * Given a string containing just the characters '(' and ')', find the length of + * the longest valid (well-formed) parentheses substring. + * + * + * @author Libin Yang (https://github.com/yanglbme) + * @since 2018/10/5 + */ + +public class LongestValidParentheses { + + public static int getLongestValidParentheses(String s) { + if (s == null || s.length() < 2) { + return 0; + } + char[] chars = s.toCharArray(); + int n = chars.length; + int[] res = new int[n]; + res[0] = 0; + res[1] = chars[1] == ')' && chars[0] == '(' ? 2 : 0; + + int max = res[1]; + + for (int i = 2; i < n; ++i) { + if (chars[i] == ')') { + if (chars[i - 1] == '(') { + res[i] = res[i - 2] + 2; + } else { + int index = i - res[i - 1] - 1; + if (index >= 0 && chars[index] == '(') { + // ()(()) + res[i] = res[i - 1] + 2 + (index - 1 >= 0 ? res[index - 1] : 0); + } + } + } + max = Math.max(max, res[i]); + } + + return max; + + } + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + + while (true) { + String str = sc.nextLine(); + if ("quit".equals(str)) { + break; + } + int len = getLongestValidParentheses(str); + System.out.println(len); + + } + + sc.close(); + + } + +} From eb01780ae61066dc2b86094464eab2daf0584f8b Mon Sep 17 00:00:00 2001 From: Doru Kesriyeli Date: Sun, 7 Oct 2018 16:55:52 -0700 Subject: [PATCH 017/521] fixed spelling mistakes --- DataStructures/Lists/SinglyLinkedList.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 32747cf2830f..d7d721b2ec1c 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -2,10 +2,10 @@ * This class implements a SinglyLinked List. This is done * using SinglyLinkedList class and a LinkForLinkedList Class. * - * A linked list is implar to an array, it hold values. + * A linked list is similar to an array, it hold values. * However, links in a linked list do not have indexes. With * a linked list you do not need to predetermine it's size as - * it gorws and shrinks as it is edited. This is an example of + * it grows and shrinks as it is edited. This is an example of * a singly linked list. Elements can only be added/removed * at the head/front of the list. * @@ -120,7 +120,7 @@ public static void main(String args[]){ /** * This class is the nodes of the SinglyLinked List. - * They consist of a vlue and a pointer to the node + * They consist of a value and a pointer to the node * after them. * * @author Unknown From ae2029424b99a997c584b388be96c30b7d5a765a Mon Sep 17 00:00:00 2001 From: Doru Kesriyeli Date: Sun, 7 Oct 2018 17:20:32 -0700 Subject: [PATCH 018/521] removed unused return values --- DataStructures/Lists/DoublyLinkedList.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index c3229d9c336d..1d15e495b53b 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -60,13 +60,12 @@ public void insertTail(int x){ * * @return The new head */ - public Link deleteHead(){ + public void deleteHead(){ Link temp = head; head = head.next; // oldHead <--> 2ndElement(head) head.previous = null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed if(head == null) tail = null; - return temp; } /** @@ -74,11 +73,11 @@ public Link deleteHead(){ * * @return The new tail */ - public Link deleteTail(){ + public void deleteTail(){ Link temp = tail; tail = tail.previous; // 2ndLast(tail) <--> oldTail --> null tail.next = null; // 2ndLast(tail) --> null - return temp; + } /** @@ -87,7 +86,7 @@ public Link deleteTail(){ * @param x element to be deleted * @return Link deleted */ - public Link delete(int x){ + public void delete(int x){ Link current = head; while(current.value != x) //Find the position to delete @@ -102,8 +101,7 @@ else if(current == tail) else{ //Before: 1 <--> 2(current) <--> 3 current.previous.next = current.next; // 1 --> 3 current.next.previous = current.previous; // 1 <--> 3 - } - return current; + } } /** @@ -211,4 +209,4 @@ public static void main(String args[]){ myList.insertOrdered(3); myList.display(); // <-- 3(head) <--> 10 <--> 13 <--> 23 <--> 67(tail) --> } -} \ No newline at end of file +} From 3562e8398510390703afc27b7457cf5eb07aba66 Mon Sep 17 00:00:00 2001 From: Doru Kesriyeli Date: Sun, 7 Oct 2018 17:28:50 -0700 Subject: [PATCH 019/521] added constructor --- DataStructures/Lists/DoublyLinkedList.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index 1d15e495b53b..d236fe68e9e5 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -20,12 +20,24 @@ class DoublyLinkedList{ private Link tail; /** - * Constructor + * Default Constructor */ public DoublyLinkedList(){ head = null; tail = null; } + + /** + * Constructs a list containing the elements of the array + * @param array the array whose elements are to be placed into this list + * @throws NullPointerException if the specified collection is null + */ + public DoublyLinkedList(int[] array){ + if (array == null) throw new NullPointerException(); + for (int i:array) { + insertTail(i); + } + } /** * Insert an element at the head From cc0980c23d2e400caf16d5878068ff4cbcff048c Mon Sep 17 00:00:00 2001 From: Doru Kesriyeli Date: Sun, 7 Oct 2018 17:29:23 -0700 Subject: [PATCH 020/521] Update DoublyLinkedList.java --- DataStructures/Lists/DoublyLinkedList.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index d236fe68e9e5..27c1a1a24580 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -34,9 +34,9 @@ public DoublyLinkedList(){ */ public DoublyLinkedList(int[] array){ if (array == null) throw new NullPointerException(); - for (int i:array) { - insertTail(i); - } + for (int i:array) { + insertTail(i); + } } /** From 7ed62a9930101c5e685a0ae275392dafea0435d2 Mon Sep 17 00:00:00 2001 From: Lucas Contini Date: Mon, 8 Oct 2018 10:13:08 -0300 Subject: [PATCH 021/521] Improved readability --- Others/Dijkshtra.java | 116 +++++++++++++++++++++++++----------------- 1 file changed, 69 insertions(+), 47 deletions(-) diff --git a/Others/Dijkshtra.java b/Others/Dijkshtra.java index 05011dd4212f..e0bd6737a462 100644 --- a/Others/Dijkshtra.java +++ b/Others/Dijkshtra.java @@ -3,7 +3,6 @@ */ - import java.io.IOException; import java.util.Arrays; import java.util.Scanner; @@ -11,51 +10,74 @@ public class Dijkshtra { -public static void main(String[] args) throws IOException { - Scanner in =new Scanner(System.in); - - int n=in.nextInt(); //n = Number of nodes or vertices - int m=in.nextInt(); //m = Number of Edges - long w[][]=new long [n+1][n+1]; //Adjacency Matrix - - //Initializing Matrix with Certain Maximum Value for path b/w any two vertices - for (long[] row: w) - Arrays.fill(row, 1000000l); - //From above,we Have assumed that,initially path b/w any two Pair of vertices is Infinite such that Infinite = 1000000l - //For simplicity , We can also take path Value = Long.MAX_VALUE , but i have taken Max Value = 1000000l . - - //Taking Input as Edge Location b/w a pair of vertices - for(int i=0;icmp){ //Comparing previous edge value with current value - Cycle Case - w[x][y]=cmp; w[y][x]=cmp; - } + public static void main(String[] args) throws IOException { + Scanner in = new Scanner(System.in); + + // n = Number of nodes or vertices + int n = in.nextInt(); + // m = Number of Edges + int m = in.nextInt(); + + // Adjacency Matrix + long w[][] = new long [n+1][n+1]; + + //Initializing Matrix with Certain Maximum Value for path b/w any two vertices + for (long[] row : w) { + Arrays.fill(row, 1000000l); + } + + /* From above,we Have assumed that,initially path b/w any two Pair of vertices is Infinite such that Infinite = 1000000l + For simplicity , We can also take path Value = Long.MAX_VALUE , but i have taken Max Value = 1000000l */ + + // Taking Input as Edge Location b/w a pair of vertices + for(int i = 0; i < m; i++) { + int x = in.nextInt(),y=in.nextInt(); + long cmp = in.nextLong(); + + //Comparing previous edge value with current value - Cycle Case + if(w[x][y] > cmp) { + w[x][y] = cmp; w[y][x] = cmp; + } + } + + // Implementing Dijkshtra's Algorithm + Stack t = new Stack(); + int src = in.nextInt(); + + for(int i = 1; i <= n; i++) { + if(i != src) { + t.push(i); + } + } + + Stack p = new Stack(); + p.push(src); + w[src][src] = 0; + + while(!t.isEmpty()) { + int min = 989997979; + int loc = -1; + + for(int i = 0; i < t.size(); i++) { + w[src][t.elementAt(i)] = Math.min(w[src][t.elementAt(i)], w[src][p.peek()] + w[p.peek()][t.elementAt(i)]); + if(w[src][t.elementAt(i)] <= min) { + min = (int) w[src][t.elementAt(i)]; + loc = i; + } + } + p.push(t.elementAt(loc)); + t.removeElementAt(loc); + } + + // Printing shortest path from the given source src + for(int i = 1; i <= n; i++) { + if(i != src && w[src][i] != 1000000l) { + System.out.print(w[src][i] + " "); + } + // Printing -1 if there is no path b/w given pair of edges + else if(i != src) { + System.out.print("-1" + " "); + } + } } - - //Implementing Dijkshtra's Algorithm - - Stack t=new Stack(); - int src=in.nextInt(); - for(int i=1;i<=n;i++){ - if(i!=src){t.push(i);}} - Stack p=new Stack(); - p.push(src); - w[src][src]=0; - while(!t.isEmpty()){int min=989997979,loc=-1; - for(int i=0;i Date: Mon, 8 Oct 2018 17:09:50 +0300 Subject: [PATCH 022/521] There was no explanation for the SkylineProblem algorithm. Added and explanation to SkylineProblem. --- SkylineProblem/SkylineProblem.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/SkylineProblem/SkylineProblem.java b/SkylineProblem/SkylineProblem.java index a0b70631a527..121116e16685 100644 --- a/SkylineProblem/SkylineProblem.java +++ b/SkylineProblem/SkylineProblem.java @@ -1,3 +1,9 @@ +/** + * Given n rectangular buildings in a 2-dimensional city, computes the skyline of these buildings, + * eliminating hidden lines. The main task is to view buildings from a side and remove all sections + * that are not visible. + * Source for explanation: https://www.geeksforgeeks.org/the-skyline-problem-using-divide-and-conquer-algorithm/ + */ import java.util.ArrayList; import java.util.Iterator; import java.util.Scanner; From c7ca13b9610eeac969dd50d0b7afd2473821c930 Mon Sep 17 00:00:00 2001 From: rmakynen Date: Mon, 8 Oct 2018 19:13:19 +0300 Subject: [PATCH 023/521] Added a new Dijkstra's algorithm. The code and comments should be more readable. --- Others/Dijkstra.java | 178 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 Others/Dijkstra.java diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java new file mode 100644 index 000000000000..0591445012e0 --- /dev/null +++ b/Others/Dijkstra.java @@ -0,0 +1,178 @@ +package Others; + +/** + * Dijkstra's algorithm,is a graph search algorithm that solves the single-source + * shortest path problem for a graph with nonnegative edge path costs, producing + * a shortest path tree. + * + * NOTE: The inputs to Dijkstra's algorithm are a directed and weighted graph consisting + * of 2 or more nodes, generally represented by an adjacency matrix or list, and a start node. + * + * Original source of code: https://rosettacode.org/wiki/Dijkstra%27s_algorithm#Java + * Also most of the comments are from RosettaCode. + * + */ + +//import java.io.*; +import java.util.*; +public class Dijkstra { + private static final Graph.Edge[] GRAPH = { + new Graph.Edge("a", "b", 7), //Distance from node "a" to node "b" is 7. In the current Graph there is no way to move the other way (e,g, from "b" to "a"), a new edge would be needed for that + new Graph.Edge("a", "c", 9), + new Graph.Edge("a", "f", 14), + new Graph.Edge("b", "c", 10), + new Graph.Edge("b", "d", 15), + new Graph.Edge("c", "d", 11), + new Graph.Edge("c", "f", 2), + new Graph.Edge("d", "e", 6), + new Graph.Edge("e", "f", 9), + }; + private static final String START = "a"; + private static final String END = "e"; + + /** + * main function + * Will run the code with "GRAPH" that was defined above. + */ + public static void main(String[] args) { + Graph g = new Graph(GRAPH); + g.dijkstra(START); + g.printPath(END); + //g.printAllPaths(); + } +} + +class Graph { + private final Map graph; // mapping of vertex names to Vertex objects, built from a set of Edges + + /** One edge of the graph (only used by Graph constructor) */ + public static class Edge { + public final String v1, v2; + public final int dist; + public Edge(String v1, String v2, int dist) { + this.v1 = v1; + this.v2 = v2; + this.dist = dist; + } + } + + /** One vertex of the graph, complete with mappings to neighbouring vertices */ + public static class Vertex implements Comparable{ + public final String name; + public int dist = Integer.MAX_VALUE; // MAX_VALUE assumed to be infinity + public Vertex previous = null; + public final Map neighbours = new HashMap<>(); + + public Vertex(String name) + { + this.name = name; + } + + private void printPath() + { + if (this == this.previous) + { + System.out.printf("%s", this.name); + } + else if (this.previous == null) + { + System.out.printf("%s(unreached)", this.name); + } + else + { + this.previous.printPath(); + System.out.printf(" -> %s(%d)", this.name, this.dist); + } + } + + public int compareTo(Vertex other) + { + if (dist == other.dist) + return name.compareTo(other.name); + + return Integer.compare(dist, other.dist); + } + + @Override public String toString() + { + return "(" + name + ", " + dist + ")"; + } +} + + /** Builds a graph from a set of edges */ + public Graph(Edge[] edges) { + graph = new HashMap<>(edges.length); + + //one pass to find all vertices + for (Edge e : edges) { + if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); + if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); + } + + //another pass to set neighbouring vertices + for (Edge e : edges) { + graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); + //graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected graph + } + } + + /** Runs dijkstra using a specified source vertex */ + public void dijkstra(String startName) { + if (!graph.containsKey(startName)) { + System.err.printf("Graph doesn't contain start vertex \"%s\"\n", startName); + return; + } + final Vertex source = graph.get(startName); + NavigableSet q = new TreeSet<>(); + + // set-up vertices + for (Vertex v : graph.values()) { + v.previous = v == source ? source : null; + v.dist = v == source ? 0 : Integer.MAX_VALUE; + q.add(v); + } + + dijkstra(q); + } + + /** Implementation of dijkstra's algorithm using a binary heap. */ + private void dijkstra(final NavigableSet q) { + Vertex u, v; + while (!q.isEmpty()) { + + u = q.pollFirst(); // vertex with shortest distance (first iteration will return source) + if (u.dist == Integer.MAX_VALUE) break; // we can ignore u (and any other remaining vertices) since they are unreachable + + //look at distances to each neighbour + for (Map.Entry a : u.neighbours.entrySet()) { + v = a.getKey(); //the neighbour in this iteration + + final int alternateDist = u.dist + a.getValue(); + if (alternateDist < v.dist) { // shorter path to neighbour found + q.remove(v); + v.dist = alternateDist; + v.previous = u; + q.add(v); + } + } + } + } + + /** Prints a path from the source to the specified vertex */ + public void printPath(String endName) { + if (!graph.containsKey(endName)) { + System.err.printf("Graph doesn't contain end vertex \"%s\"\n", endName); + return; + } + + graph.get(endName).printPath(); + System.out.println(); + } + /** Prints the path from the source to every vertex (output order is not guaranteed) */ + public void printAllPaths() { + for (Vertex v : graph.values()) { + v.printPath(); + System.out.println(); + } + } +} \ No newline at end of file From 6cfc760e30d513401f718f005b6d221ca067a8f5 Mon Sep 17 00:00:00 2001 From: rmakynen Date: Mon, 8 Oct 2018 19:14:47 +0300 Subject: [PATCH 024/521] Added a new Dijkstra's algorithm. --- Others/Dijkstra.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index 0591445012e0..ae9d35f08884 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -12,7 +12,6 @@ * Also most of the comments are from RosettaCode. * */ - //import java.io.*; import java.util.*; public class Dijkstra { From d2d0b785c37ab3b07631552cab39ebb8674078d8 Mon Sep 17 00:00:00 2001 From: rmakynen Date: Mon, 8 Oct 2018 19:16:15 +0300 Subject: [PATCH 025/521] test --- Others/Dijkstra.java | 177 ------------------------------------------- 1 file changed, 177 deletions(-) delete mode 100644 Others/Dijkstra.java diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java deleted file mode 100644 index ae9d35f08884..000000000000 --- a/Others/Dijkstra.java +++ /dev/null @@ -1,177 +0,0 @@ -package Others; - -/** - * Dijkstra's algorithm,is a graph search algorithm that solves the single-source - * shortest path problem for a graph with nonnegative edge path costs, producing - * a shortest path tree. - * - * NOTE: The inputs to Dijkstra's algorithm are a directed and weighted graph consisting - * of 2 or more nodes, generally represented by an adjacency matrix or list, and a start node. - * - * Original source of code: https://rosettacode.org/wiki/Dijkstra%27s_algorithm#Java - * Also most of the comments are from RosettaCode. - * - */ -//import java.io.*; -import java.util.*; -public class Dijkstra { - private static final Graph.Edge[] GRAPH = { - new Graph.Edge("a", "b", 7), //Distance from node "a" to node "b" is 7. In the current Graph there is no way to move the other way (e,g, from "b" to "a"), a new edge would be needed for that - new Graph.Edge("a", "c", 9), - new Graph.Edge("a", "f", 14), - new Graph.Edge("b", "c", 10), - new Graph.Edge("b", "d", 15), - new Graph.Edge("c", "d", 11), - new Graph.Edge("c", "f", 2), - new Graph.Edge("d", "e", 6), - new Graph.Edge("e", "f", 9), - }; - private static final String START = "a"; - private static final String END = "e"; - - /** - * main function - * Will run the code with "GRAPH" that was defined above. - */ - public static void main(String[] args) { - Graph g = new Graph(GRAPH); - g.dijkstra(START); - g.printPath(END); - //g.printAllPaths(); - } -} - -class Graph { - private final Map graph; // mapping of vertex names to Vertex objects, built from a set of Edges - - /** One edge of the graph (only used by Graph constructor) */ - public static class Edge { - public final String v1, v2; - public final int dist; - public Edge(String v1, String v2, int dist) { - this.v1 = v1; - this.v2 = v2; - this.dist = dist; - } - } - - /** One vertex of the graph, complete with mappings to neighbouring vertices */ - public static class Vertex implements Comparable{ - public final String name; - public int dist = Integer.MAX_VALUE; // MAX_VALUE assumed to be infinity - public Vertex previous = null; - public final Map neighbours = new HashMap<>(); - - public Vertex(String name) - { - this.name = name; - } - - private void printPath() - { - if (this == this.previous) - { - System.out.printf("%s", this.name); - } - else if (this.previous == null) - { - System.out.printf("%s(unreached)", this.name); - } - else - { - this.previous.printPath(); - System.out.printf(" -> %s(%d)", this.name, this.dist); - } - } - - public int compareTo(Vertex other) - { - if (dist == other.dist) - return name.compareTo(other.name); - - return Integer.compare(dist, other.dist); - } - - @Override public String toString() - { - return "(" + name + ", " + dist + ")"; - } -} - - /** Builds a graph from a set of edges */ - public Graph(Edge[] edges) { - graph = new HashMap<>(edges.length); - - //one pass to find all vertices - for (Edge e : edges) { - if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); - if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); - } - - //another pass to set neighbouring vertices - for (Edge e : edges) { - graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); - //graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected graph - } - } - - /** Runs dijkstra using a specified source vertex */ - public void dijkstra(String startName) { - if (!graph.containsKey(startName)) { - System.err.printf("Graph doesn't contain start vertex \"%s\"\n", startName); - return; - } - final Vertex source = graph.get(startName); - NavigableSet q = new TreeSet<>(); - - // set-up vertices - for (Vertex v : graph.values()) { - v.previous = v == source ? source : null; - v.dist = v == source ? 0 : Integer.MAX_VALUE; - q.add(v); - } - - dijkstra(q); - } - - /** Implementation of dijkstra's algorithm using a binary heap. */ - private void dijkstra(final NavigableSet q) { - Vertex u, v; - while (!q.isEmpty()) { - - u = q.pollFirst(); // vertex with shortest distance (first iteration will return source) - if (u.dist == Integer.MAX_VALUE) break; // we can ignore u (and any other remaining vertices) since they are unreachable - - //look at distances to each neighbour - for (Map.Entry a : u.neighbours.entrySet()) { - v = a.getKey(); //the neighbour in this iteration - - final int alternateDist = u.dist + a.getValue(); - if (alternateDist < v.dist) { // shorter path to neighbour found - q.remove(v); - v.dist = alternateDist; - v.previous = u; - q.add(v); - } - } - } - } - - /** Prints a path from the source to the specified vertex */ - public void printPath(String endName) { - if (!graph.containsKey(endName)) { - System.err.printf("Graph doesn't contain end vertex \"%s\"\n", endName); - return; - } - - graph.get(endName).printPath(); - System.out.println(); - } - /** Prints the path from the source to every vertex (output order is not guaranteed) */ - public void printAllPaths() { - for (Vertex v : graph.values()) { - v.printPath(); - System.out.println(); - } - } -} \ No newline at end of file From c9d0aa129048d065e3f8c8e2522d249a65bc5d8f Mon Sep 17 00:00:00 2001 From: rmakynen Date: Mon, 8 Oct 2018 19:17:56 +0300 Subject: [PATCH 026/521] New Dijkstra's algorithm with better comments. --- Others/Dijkstra.java | 178 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 Others/Dijkstra.java diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java new file mode 100644 index 000000000000..dd671547c51a --- /dev/null +++ b/Others/Dijkstra.java @@ -0,0 +1,178 @@ +package Others; + + +/** + * Dijkstra's algorithm,is a graph search algorithm that solves the single-source + * shortest path problem for a graph with nonnegative edge path costs, producing + * a shortest path tree. + * + * NOTE: The inputs to Dijkstra's algorithm are a directed and weighted graph consisting + * of 2 or more nodes, generally represented by an adjacency matrix or list, and a start node. + * + * Original source of code: https://rosettacode.org/wiki/Dijkstra%27s_algorithm#Java + * Also most of the comments are from RosettaCode. + * + */ +//import java.io.*; +import java.util.*; +public class Dijkstra { + private static final Graph.Edge[] GRAPH = { + new Graph.Edge("a", "b", 7), //Distance from node "a" to node "b" is 7. In the current Graph there is no way to move the other way (e,g, from "b" to "a"), a new edge would be needed for that + new Graph.Edge("a", "c", 9), + new Graph.Edge("a", "f", 14), + new Graph.Edge("b", "c", 10), + new Graph.Edge("b", "d", 15), + new Graph.Edge("c", "d", 11), + new Graph.Edge("c", "f", 2), + new Graph.Edge("d", "e", 6), + new Graph.Edge("e", "f", 9), + }; + private static final String START = "a"; + private static final String END = "e"; + + /** + * main function + * Will run the code with "GRAPH" that was defined above. + */ + public static void main(String[] args) { + Graph g = new Graph(GRAPH); + g.dijkstra(START); + g.printPath(END); + //g.printAllPaths(); + } +} + +class Graph { + private final Map graph; // mapping of vertex names to Vertex objects, built from a set of Edges + + /** One edge of the graph (only used by Graph constructor) */ + public static class Edge { + public final String v1, v2; + public final int dist; + public Edge(String v1, String v2, int dist) { + this.v1 = v1; + this.v2 = v2; + this.dist = dist; + } + } + + /** One vertex of the graph, complete with mappings to neighbouring vertices */ + public static class Vertex implements Comparable{ + public final String name; + public int dist = Integer.MAX_VALUE; // MAX_VALUE assumed to be infinity + public Vertex previous = null; + public final Map neighbours = new HashMap<>(); + + public Vertex(String name) + { + this.name = name; + } + + private void printPath() + { + if (this == this.previous) + { + System.out.printf("%s", this.name); + } + else if (this.previous == null) + { + System.out.printf("%s(unreached)", this.name); + } + else + { + this.previous.printPath(); + System.out.printf(" -> %s(%d)", this.name, this.dist); + } + } + + public int compareTo(Vertex other) + { + if (dist == other.dist) + return name.compareTo(other.name); + + return Integer.compare(dist, other.dist); + } + + @Override public String toString() + { + return "(" + name + ", " + dist + ")"; + } +} + + /** Builds a graph from a set of edges */ + public Graph(Edge[] edges) { + graph = new HashMap<>(edges.length); + + //one pass to find all vertices + for (Edge e : edges) { + if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); + if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); + } + + //another pass to set neighbouring vertices + for (Edge e : edges) { + graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); + //graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected graph + } + } + + /** Runs dijkstra using a specified source vertex */ + public void dijkstra(String startName) { + if (!graph.containsKey(startName)) { + System.err.printf("Graph doesn't contain start vertex \"%s\"\n", startName); + return; + } + final Vertex source = graph.get(startName); + NavigableSet q = new TreeSet<>(); + + // set-up vertices + for (Vertex v : graph.values()) { + v.previous = v == source ? source : null; + v.dist = v == source ? 0 : Integer.MAX_VALUE; + q.add(v); + } + + dijkstra(q); + } + + /** Implementation of dijkstra's algorithm using a binary heap. */ + private void dijkstra(final NavigableSet q) { + Vertex u, v; + while (!q.isEmpty()) { + + u = q.pollFirst(); // vertex with shortest distance (first iteration will return source) + if (u.dist == Integer.MAX_VALUE) break; // we can ignore u (and any other remaining vertices) since they are unreachable + + //look at distances to each neighbour + for (Map.Entry a : u.neighbours.entrySet()) { + v = a.getKey(); //the neighbour in this iteration + + final int alternateDist = u.dist + a.getValue(); + if (alternateDist < v.dist) { // shorter path to neighbour found + q.remove(v); + v.dist = alternateDist; + v.previous = u; + q.add(v); + } + } + } + } + + /** Prints a path from the source to the specified vertex */ + public void printPath(String endName) { + if (!graph.containsKey(endName)) { + System.err.printf("Graph doesn't contain end vertex \"%s\"\n", endName); + return; + } + + graph.get(endName).printPath(); + System.out.println(); + } + /** Prints the path from the source to every vertex (output order is not guaranteed) */ + public void printAllPaths() { + for (Vertex v : graph.values()) { + v.printPath(); + System.out.println(); + } + } +} \ No newline at end of file From 66c6353705723932f5e80fdeae185302da843d9e Mon Sep 17 00:00:00 2001 From: rmakynen <43169683+rmakynen@users.noreply.github.com> Date: Tue, 9 Oct 2018 09:05:59 +0300 Subject: [PATCH 027/521] Update Dijkstra.java --- Others/Dijkstra.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index dd671547c51a..5df11f0274fa 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -63,13 +63,11 @@ public static class Vertex implements Comparable{ public Vertex previous = null; public final Map neighbours = new HashMap<>(); - public Vertex(String name) - { + public Vertex(String name){ this.name = name; } - private void printPath() - { + private void printPath(){ if (this == this.previous) { System.out.printf("%s", this.name); @@ -85,16 +83,14 @@ else if (this.previous == null) } } - public int compareTo(Vertex other) - { + public int compareTo(Vertex other){ if (dist == other.dist) return name.compareTo(other.name); return Integer.compare(dist, other.dist); } - @Override public String toString() - { + @Override public String toString(){ return "(" + name + ", " + dist + ")"; } } @@ -175,4 +171,4 @@ public void printAllPaths() { System.out.println(); } } -} \ No newline at end of file +} From 57fbbcd83608de76562a4eebded4513809cce15a Mon Sep 17 00:00:00 2001 From: rmakynen <43169683+rmakynen@users.noreply.github.com> Date: Tue, 9 Oct 2018 09:07:56 +0300 Subject: [PATCH 028/521] Updated the format of brackets --- Others/Dijkstra.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index 5df11f0274fa..4ae2daa58fad 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -57,7 +57,7 @@ public Edge(String v1, String v2, int dist) { } /** One vertex of the graph, complete with mappings to neighbouring vertices */ - public static class Vertex implements Comparable{ + public static class Vertex implements Comparable { public final String name; public int dist = Integer.MAX_VALUE; // MAX_VALUE assumed to be infinity public Vertex previous = null; @@ -67,7 +67,7 @@ public Vertex(String name){ this.name = name; } - private void printPath(){ + private void printPath() { if (this == this.previous) { System.out.printf("%s", this.name); @@ -83,14 +83,14 @@ else if (this.previous == null) } } - public int compareTo(Vertex other){ + public int compareTo(Vertex other) { if (dist == other.dist) return name.compareTo(other.name); return Integer.compare(dist, other.dist); } - @Override public String toString(){ + @Override public String toString() { return "(" + name + ", " + dist + ")"; } } From f98e3c06bdf37fa8614b5ebd63ad55fbc39fc1c6 Mon Sep 17 00:00:00 2001 From: rmakynen <43169683+rmakynen@users.noreply.github.com> Date: Tue, 9 Oct 2018 09:09:38 +0300 Subject: [PATCH 029/521] Updated brackets --- Others/Dijkstra.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index 4ae2daa58fad..0fe461348b45 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -63,7 +63,7 @@ public static class Vertex implements Comparable { public Vertex previous = null; public final Map neighbours = new HashMap<>(); - public Vertex(String name){ + public Vertex(String name) { this.name = name; } From efae9fb3179b076d134dba7f82d932f085d0ea8f Mon Sep 17 00:00:00 2001 From: rmakynen <43169683+rmakynen@users.noreply.github.com> Date: Tue, 9 Oct 2018 09:16:00 +0300 Subject: [PATCH 030/521] Updated brackets --- Others/Dijkstra.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index 0fe461348b45..b3df65bfd2e3 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -68,16 +68,13 @@ public Vertex(String name) { } private void printPath() { - if (this == this.previous) - { + if (this == this.previous) { System.out.printf("%s", this.name); } - else if (this.previous == null) - { + else if (this.previous == null) { System.out.printf("%s(unreached)", this.name); } - else - { + else { this.previous.printPath(); System.out.printf(" -> %s(%d)", this.name, this.dist); } From c75fce171bf3b9fda951e3b665d2ee2cef31824d Mon Sep 17 00:00:00 2001 From: rmakynen Date: Tue, 9 Oct 2018 15:29:40 +0300 Subject: [PATCH 031/521] Updated comments for the Fibonacci sequence --- Others/FibToN.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Others/FibToN.java b/Others/FibToN.java index 1d1efdc1e753..ae2de417aa50 100644 --- a/Others/FibToN.java +++ b/Others/FibToN.java @@ -1,14 +1,22 @@ +/** + * + * Fibonacci sequence, and characterized by the fact that every number + * after the first two is the sum of the two preceding ones. + * + * Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21,... + * + * Source for the explanation: https://en.wikipedia.org/wiki/Fibonacci_number + */ + import java.util.Scanner; public class FibToN { - public static void main(String[] args) { //take input Scanner scn = new Scanner(System.in); int N = scn.nextInt(); - // print fibonacci sequence less than N + // print all Fibonacci numbers that are smaller than your given input N int first = 0, second = 1; - //first fibo and second fibonacci are 0 and 1 respectively scn.close(); while(first <= N){ //print first fibo 0 then add second fibo into it while updating second as well From 7e0ddb3fdae4123ada8dfea9f3b48d1fe46ca36d Mon Sep 17 00:00:00 2001 From: Shruti Sheoran Date: Thu, 11 Oct 2018 11:25:26 +0530 Subject: [PATCH 032/521] Add Median Of Running Array --- Misc/MedianOfRunningArray.java | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Misc/MedianOfRunningArray.java diff --git a/Misc/MedianOfRunningArray.java b/Misc/MedianOfRunningArray.java new file mode 100644 index 000000000000..113f19c72b9b --- /dev/null +++ b/Misc/MedianOfRunningArray.java @@ -0,0 +1,50 @@ +import java.util.Collections; +import java.util.PriorityQueue; + +/********************** +author: shrutisheoran +***********************/ + +public class MedianOfRunningArray { + private PriorityQueue p1; + private PriorityQueue p2; + + //Constructor + public MedianOfRunningArray() { + this.p1 = new PriorityQueue<>(Collections.reverseOrder()); //Max Heap + this.p2 = new PriorityQueue<>(); //Min Heap + } + + /* + Inserting lower half of array to max Heap + and upper half to min heap + */ + public void insert(Integer e) { + p2.add(e); + if(p2.size() - p1.size() > 1) + p1.add(p2.remove()); + } + + /* + Returns median at any given point + */ + public Integer median() { + if(p1.size()==p2.size()) + return (p1.peek() + p2.peek())/2; + return p1.size()>p2.size() ? p1.peek() : p2.peek(); + } + + public static void main(String[] args) { + /* + Testing the median function + */ + + MedianOfRunningArray p = new MedianOfRunningArray(); + int arr[] = {10, 7, 4, 9, 2, 3, 11, 17, 14}; + for(int i = 0 ; i < 9 ; i++) { + p.insert(arr[i]); + System.out.print(p.median() + " "); + } + } + +} \ No newline at end of file From c6e66109094228e2effd86c1e81b8ee0579dfa34 Mon Sep 17 00:00:00 2001 From: rmakynen Date: Mon, 15 Oct 2018 09:21:30 +0300 Subject: [PATCH 033/521] Fixed Compiler warnings, closed the scanned and fixed some typos --- Others/Huffman.java | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Others/Huffman.java b/Others/Huffman.java index f3ab6c6b5800..0d937271112f 100644 --- a/Others/Huffman.java +++ b/Others/Huffman.java @@ -1,4 +1,3 @@ - import java.util.Comparator; import java.util.Iterator; import java.util.LinkedList; @@ -14,24 +13,24 @@ Enter number of distinct letters 6 -Enter letters with its frequncy to encode +Enter letters with its frequency to encode Enter letter : a -Enter frequncy : 45 +Enter frequency : 45 Enter letter : b -Enter frequncy : 13 +Enter frequency : 13 Enter letter : c -Enter frequncy : 12 +Enter frequency : 12 Enter letter : d -Enter frequncy : 16 +Enter frequency : 16 Enter letter : e -Enter frequncy : 9 +Enter frequency : 9 Enter letter : f -Enter frequncy : 5 +Enter frequency : 5 Letter Encoded Form a 0 @@ -64,17 +63,17 @@ public class Huffman { // A simple function to print a given list //I just made it for debugging - public static void print_list(List li){ + public static void print_list(List li){ Iterator it=li.iterator(); while(it.hasNext()){Node n=it.next();System.out.print(n.freq+" ");}System.out.println(); } //Function for making tree (Huffman Tree) - public static Node make_huffmann_tree(List li){ + public static Node make_huffmann_tree(List li){ //Sorting list in increasing order of its letter frequency li.sort(new comp()); Node temp=null; - Iterator it=li.iterator(); + Iterator it=li.iterator(); //System.out.println(li.size()); //Loop for making huffman tree till only single node remains in list while(true){ @@ -89,7 +88,7 @@ public static Node make_huffmann_tree(List li){ //Below condition is to check either list has 2nd node or not to combine //If this condition will be false, then it means construction of huffman tree is completed if(it.hasNext()){b=(Node)it.next();} - //Combining first two smallest nodes in list to make its parent whose frequncy + //Combining first two smallest nodes in list to make its parent whose frequency //will be equals to sum of frequency of these two nodes if(b!=null){ temp.freq=a.freq+b.freq;a.data=0;b.data=1;//assigining 0 and 1 to left and right nodes @@ -109,7 +108,7 @@ public static Node make_huffmann_tree(List li){ //Function for finding path between root and given letter ch public static void dfs(Node n,String ch){ - Stack st=new Stack(); // stack for storing path + Stack st=new Stack(); // stack for storing path int freq=n.freq; // recording root freq to avoid it adding in path encoding find_path_and_encode(st,n,ch,freq); } @@ -140,15 +139,16 @@ public static void main(String args[]){ System.out.println("Enter number of distinct letters "); int n=in.nextInt(); String s[]=new String[n]; - System.out.print("Enter letters with its frequncy to encode\n"); + System.out.print("Enter letters with its frequency to encode\n"); for(int i=0;i Date: Mon, 15 Oct 2018 11:52:08 +0300 Subject: [PATCH 034/521] The function had cryptic variable names. Now it's more readable. --- Others/KMP.java | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/Others/KMP.java b/Others/KMP.java index c97c248b480a..597f69373bf2 100644 --- a/Others/KMP.java +++ b/Others/KMP.java @@ -1,25 +1,26 @@ - /* Implementation of Knuth–Morris–Pratt algorithm -Usage: -final String T = "AAAAABAAABA"; -final String P = "AAAA"; -KMPmatcher(T, P); +Usage: see the main function for an example */ public class KMP { - - // find the starting index in string T[] that matches the search word P[] - public void KMPmatcher(final String T, final String P) { - final int m = T.length(); - final int n = P.length(); - final int[] pi = computePrefixFunction(P); + //a working example + public static void main(String[] args) { + final String haystack = "AAAAABAAABA"; //This is the full string + final String needle = "AAAA"; //This is the substring that we want to find + KMPmatcher(haystack, needle); + } + // find the starting index in string haystack[] that matches the search word P[] + public static void KMPmatcher(final String haystack, final String needle) { + final int m = haystack.length(); + final int n = needle.length(); + final int[] pi = computePrefixFunction(needle); int q = 0; for (int i = 0; i < m; i++) { - while (q > 0 && T.charAt(i) != P.charAt(q)) { + while (q > 0 && haystack.charAt(i) != needle.charAt(q)) { q = pi[q - 1]; } - if (T.charAt(i) == P.charAt(q)) { + if (haystack.charAt(i) == needle.charAt(q)) { q++; } @@ -28,11 +29,9 @@ public void KMPmatcher(final String T, final String P) { q = pi[q - 1]; } } - } - // return the prefix function - private int[] computePrefixFunction(final String P) { + private static int[] computePrefixFunction(final String P) { final int n = P.length(); final int[] pi = new int[n]; pi[0] = 0; @@ -49,7 +48,6 @@ private int[] computePrefixFunction(final String P) { pi[i] = q; } - return pi; } -} +} \ No newline at end of file From 5eaa57983250bbd1f134064f2794f81593032a86 Mon Sep 17 00:00:00 2001 From: shivg7706 Date: Thu, 18 Oct 2018 15:47:00 +0530 Subject: [PATCH 035/521] all cycles present in a graph --- DataStructures/Graphs/Cycles.java | 89 +++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 DataStructures/Graphs/Cycles.java diff --git a/DataStructures/Graphs/Cycles.java b/DataStructures/Graphs/Cycles.java new file mode 100644 index 000000000000..429dd8de41db --- /dev/null +++ b/DataStructures/Graphs/Cycles.java @@ -0,0 +1,89 @@ +import java.util.Scanner; +import java.util.ArrayList; + + +class Cycle { + + private int nodes, edges; + private int [][] adjacencyMatrix; + private boolean [] visited; + ArrayList> cycles = new ArrayList>(); + private boolean [] finalCycles; + + public Cycle() { + Scanner in = new Scanner(System.in); + System.out.print("Enter the no. of nodes: "); + nodes = in.nextInt(); + System.out.print("Enter the no. of Edges: "); + edges = in.nextInt(); + + adjacencyMatrix = new int [nodes][nodes]; + visited = new boolean [nodes]; + + for (int i = 0; i < nodes; i++) { + visited[i] = false; + } + + System.out.println("Enter the details of each edges "); + + for(int i = 0; i < edges; i++) { + int start, end; + start = in.nextInt(); + end = in.nextInt(); + adjacencyMatrix[start][end] = 1; + } + + } + + public void start() { + for (int i = 0; i < nodes; i++) { + ArrayList temp = new ArrayList<>(); + dfs(i, i, temp); + for (int j = 0; j < nodes; j++) { + adjacencyMatrix[i][j] = 0; + adjacencyMatrix[j][i] = 0; + } + } + } + + private void dfs(Integer start, Integer curr, ArrayList temp) { + temp.add(curr); + visited[curr] = true; + for (int i = 0; i < nodes; i++) { + if(adjacencyMatrix[curr][i] == 1) { + if (i == start) { + cycles.add(new ArrayList(temp)); + } else { + if (!visited[i]) { + dfs(start, i, temp); + } + } + } + } + + if(temp.size() > 0) { + temp.remove(temp.size() - 1); + } + visited[curr] = false; + } + + public void printAll() { + for (int i = 0; i < cycles.size(); i++) { + for (int j = 0; j < cycles.get(i).size(); j++) { + System.out.print(cycles.get(i).get(j) + " -> "); + } + System.out.println(cycles.get(i).get(0)); + System.out.println(); + } + + } + +} + +public class Cycles { + public static void main(String[] args) { + Cycle c = new Cycle(); + c.start(); + c.printAll(); + } +} \ No newline at end of file From e89e0295166aefd452beabc465da62ff5c83e995 Mon Sep 17 00:00:00 2001 From: Emily Gong Date: Sun, 21 Oct 2018 16:50:09 -0700 Subject: [PATCH 036/521] update README style and fixed minor issues --- README.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c11c573e3d53..bd13231f6f92 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # The Algorithms - Java -## A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. +NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. ### All algorithms implemented in Java (for education) @@ -19,7 +19,7 @@ __Properties__ * Best case performance O(n) * Average case performance O(n^2) -###### View the algorithm in [action][bubble-toptal] +##### View the algorithm in [action][bubble-toptal] @@ -34,7 +34,7 @@ __Properties__ * Best case performance O(n) * Average case performance O(n^2) -###### View the algorithm in [action][insertion-toptal] +##### View the algorithm in [action][insertion-toptal] ### Merge @@ -48,7 +48,7 @@ __Properties__ * Average case performance O(n log n) -###### View the algorithm in [action][merge-toptal] +##### View the algorithm in [action][merge-toptal] ### Quick ![alt text][quick-image] @@ -60,7 +60,7 @@ __Properties__ * Best case performance O(n log n) or O(n) with three-way partition * Average case performance O(n^2) -###### View the algorithm in [action][quick-toptal] +##### View the algorithm in [action][quick-toptal] ### Selection ![alt text][selection-image] @@ -72,7 +72,7 @@ __Properties__ * Best case performance O(n^2) * Average case performance O(n^2) -###### View the algorithm in [action][selection-toptal] +##### View the algorithm in [action][selection-toptal] ### Shell ![alt text][shell-image] @@ -84,7 +84,7 @@ __Properties__ * Best case performance O(n log n) * Average case performance depends on gap sequence -###### View the algorithm in [action][shell-toptal] +##### View the algorithm in [action][shell-toptal] ### Time-Compexity Graphs @@ -119,6 +119,7 @@ __Properties__ * Average case performance O(log n) * Worst case space complexity O(1) +### Shell From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. __Properties__ @@ -126,7 +127,7 @@ __Properties__ * Best case performance O(n log n) * Average case performance depends on gap sequence -###### View the algorithm in [action][shell-toptal] +##### View the algorithm in [action][shell-toptal] [bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort [bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort From 88b772c50ed62adabf525030a30f0624e7ebf164 Mon Sep 17 00:00:00 2001 From: Mojtaba Rahimy Date: Mon, 22 Oct 2018 15:35:15 +0330 Subject: [PATCH 037/521] Update README.md The folder "Data Structures" was renamed to "DataStructures" but the links was not. fixed that. --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index c11c573e3d53..bb08f7586247 100644 --- a/README.md +++ b/README.md @@ -177,20 +177,20 @@ and much more...| and more... ### Data Structures Graphs|Heaps|Lists|Queues| ------|-----|-----|------| -[BFS](Data%20Structures/Graphs/BFS.java)|[Empty Heap Exception](Data%20Structures/Heaps/EmptyHeapException.java)|[Circle Linked List](Data%20Structures/Lists/CircleLinkedList.java)|[Generic Array List Queue](Data%20Structures/Queues/GenericArrayListQueue.java)| -[DFS](Data%20Structures/Graphs/DFS.java)|[Heap](Data%20Structures/Heaps/Heap.java)|[Doubly Linked List](Data%20Structures/Lists/DoublyLinkedList.java)|[Queues](Data%20Structures/Queues/Queues.java)| -[Graphs](Data%20Structures/Graphs/Graphs.java)|[Heap Element](Data%20Structures/Heaps/HeapElement.java)|[Singly Linked List](Data%20Structures/Lists/SinglyLinkedList.java)| -[Kruskals Algorithm](Data%20Structures/Graphs/KruskalsAlgorithm.java)|[Max Heap](Data%Structures/Heaps/MaxHeap.java)| -[Matrix Graphs](Data%20Structures/Graphs/MatrixGraphs.java)|[Min Heap](Data%20Structures/Heaps/MinHeap.java)| -[PrimMST](Data%20Structures/Graphs/PrimMST.java)| +[BFS](DataStructures/Graphs/BFS.java)|[Empty Heap Exception](DataStructures/Heaps/EmptyHeapException.java)|[Circle Linked List](DataStructures/Lists/CircleLinkedList.java)|[Generic Array List Queue](DataStructures/Queues/GenericArrayListQueue.java)| +[DFS](DataStructures/Graphs/DFS.java)|[Heap](DataStructures/Heaps/Heap.java)|[Doubly Linked List](DataStructures/Lists/DoublyLinkedList.java)|[Queues](DataStructures/Queues/Queues.java)| +[Graphs](DataStructures/Graphs/Graphs.java)|[Heap Element](DataStructures/Heaps/HeapElement.java)|[Singly Linked List](DataStructures/Lists/SinglyLinkedList.java)| +[Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](Data%Structures/Heaps/MaxHeap.java)| +[Matrix Graphs](DataStructures/Graphs/MatrixGraphs.java)|[Min Heap](DataStructures/Heaps/MinHeap.java)| +[PrimMST](DataStructures/Graphs/PrimMST.java)| Stacks|Trees| ------|-----| -[Node Stack](Data%20Structures/Stacks/NodeStack.java)|[AVL Tree](Data%20Structures/Trees/AVLTree.java)| -[Stack of Linked List](Data%20Structures/Stacks/StackOfLinkedList.java)|[Binary Tree](Data%20Structures/Trees/BinaryTree.java)| -[Stacks](Data%20Structures/Stacks/Stacks.java)|And much more...| - -* [Bags](Data%20Structures/Bags/Bag.java) -* [Buffer](Data%20Structures/Buffers/CircularBuffer.java) -* [HashMap](Data%20Structures/HashMap/HashMap.java) -* [Matrix](Data%20Structures/Matrix/Matrix.java) +[Node Stack](DataStructures/Stacks/NodeStack.java)|[AVL Tree](DataStructures/Trees/AVLTree.java)| +[Stack of Linked List](DataStructures/Stacks/StackOfLinkedList.java)|[Binary Tree](DataStructures/Trees/BinaryTree.java)| +[Stacks](DataStructures/Stacks/Stacks.java)|And much more...| + +* [Bags](DataStructures/Bags/Bag.java) +* [Buffer](DataStructures/Buffers/CircularBuffer.java) +* [HashMap](DataStructures/HashMap/HashMap.java) +* [Matrix](DataStructures/Matrix/Matrix.java) From 174b83f764639793ff4eb0d97261ca9325975789 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 22 Oct 2018 20:35:07 +0100 Subject: [PATCH 038/521] Clean Java BinarySearch Cleans the Java implementation of binary search to be more consistent with styles and to avoid unnecessary boxing of int types --- Searches/src/search/BinarySearch.java | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Searches/src/search/BinarySearch.java b/Searches/src/search/BinarySearch.java index c560ca1a1220..239bc98c6f2a 100644 --- a/Searches/src/search/BinarySearch.java +++ b/Searches/src/search/BinarySearch.java @@ -2,7 +2,8 @@ import java.util.Arrays; import java.util.Random; -import java.util.stream.Stream; +import java.util.concurrent.ThreadLocalRandom +import java.util.stream.IntStream; import static java.lang.String.format; @@ -70,23 +71,24 @@ private > int search(T array[], T key, int left, int rig // Driver Program public static void main(String[] args) { - - //just generate data - Random r = new Random(); + // Just generate data + Random random = ThreadLocalRandom.current(); + int size = 100; int maxElement = 100000; - Integer[] integers = Stream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(Integer[]::new); - + + int[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(); - //the element that should be found - Integer shouldBeFound = integers[r.nextInt(size - 1)]; + // The element that should be found + int shouldBeFound = integers[r.nextInt(size - 1)]; BinarySearch search = new BinarySearch(); int atIndex = search.find(integers, shouldBeFound); - System.out.println(String.format("Should be found: %d. Found %d at index %d. An array length %d" - , shouldBeFound, integers[atIndex], atIndex, size)); - + System.out.println(format( + "Should be found: %d. Found %d at index %d. An array length %d", + shouldBeFound, integers[atIndex], atIndex, size + )); int toCheck = Arrays.binarySearch(integers, shouldBeFound); System.out.println(format("Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); From 203f006e9686f5c4948f38a53599ed072fac4e51 Mon Sep 17 00:00:00 2001 From: shivg7706 Date: Fri, 26 Oct 2018 17:32:49 +0530 Subject: [PATCH 039/521] added scheduling algorithm --- Others/SJF.java | 168 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 Others/SJF.java diff --git a/Others/SJF.java b/Others/SJF.java new file mode 100644 index 000000000000..baa8a8fd01f0 --- /dev/null +++ b/Others/SJF.java @@ -0,0 +1,168 @@ +import java.util.Scanner; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.*; + +class Process { + + public int pid; + public int arrivalTime; + public int burstTime; + public int priority; + public int turnAroundTime; + public int waitTime; + public int remainingTime; +} + + +class Schedule { + + private int noOfProcess; + private int timer = 0; + private ArrayList processes; + private ArrayList remainingProcess; + private ArrayList gantChart; + private float burstAll; + private Map> arrivals; + + Schedule() { + Scanner in = new Scanner(System.in); + + processes = new ArrayList(); + remainingProcess = new ArrayList(); + + gantChart = new ArrayList(); + arrivals = new HashMap>(); + + System.out.print("Enter the no. of processes: "); + noOfProcess = in.nextInt(); + System.out.println("Enter the arrival, burst and priority of processes"); + for (int i = 0; i < noOfProcess; i++) { + Process p = new Process(); + p.pid = i; + p.arrivalTime = in.nextInt(); + p.burstTime = in.nextInt(); + p.priority = in.nextInt(); + p.turnAroundTime = 0; + p.waitTime = 0; + p.remainingTime = p.burstTime; + + if (arrivals.get(p.arrivalTime) == null) { + arrivals.put(p.arrivalTime, new ArrayList()); + } + arrivals.get(p.arrivalTime).add(p); + processes.add(p); + burstAll += p.burstTime; + } + + } + + + void startScheduling() { + + + processes.sort(new Comparator() { + @Override + public int compare (Process a, Process b) { + return a.arrivalTime - b.arrivalTime; + } + }); + + while(!(arrivals.size() == 0 && remainingProcess.size() == 0)) { + removeFinishedProcess(); + if(arrivals.get(timer) != null) { + remainingProcess.addAll(arrivals.get(timer)); + arrivals.remove(timer); + } + + remainingProcess.sort(new Comparator() { + private int alpha = 6; + private int beta = 1; + + @Override + public int compare (Process a, Process b) { + int aRem = a.remainingTime; + int bRem = b.remainingTime; + int aprior = a.priority; + int bprior = b.priority; + return (alpha*aRem + beta*aprior) - (alpha*bRem + beta*bprior); + } + }); + + int k = timeElapsed(timer); + ageing(k); + timer++; + } + + System.out.println("Total time required: " + (timer-1)); + } + + void removeFinishedProcess() { + ArrayList completed = new ArrayList(); + for (int i = 0; i < remainingProcess.size(); i++) { + if(remainingProcess.get(i).remainingTime == 0) { + completed.add(i); + } + } + + for (int i = 0; i < completed.size(); i++) { + int pid = remainingProcess.get(completed.get(i)).pid; + processes.get(pid).waitTime = remainingProcess.get(completed.get(i)).waitTime; + remainingProcess.remove(remainingProcess.get(completed.get(i))); + } + + + } + + public int timeElapsed(int i) { + if(!remainingProcess.isEmpty()) { + gantChart.add(i, remainingProcess.get(0).pid); + remainingProcess.get(0).remainingTime--; + return 1; + } + return 0; + } + + public void ageing(int k) { + for (int i = k; i < remainingProcess.size(); i++) { + remainingProcess.get(i).waitTime++; + if (remainingProcess.get(i).waitTime % 7 == 0) { + remainingProcess.get(i).priority--; + } + } + } + + + public void solve() { + System.out.println("Gant chart "); + for (int i = 0; i < gantChart.size(); i++) { + System.out.print(gantChart.get(i) + " "); + } + System.out.println(); + + float waitTimeTot = 0; + float tatTime = 0; + + for (int i = 0; i < noOfProcess; i++) { + processes.get(i).turnAroundTime = processes.get(i).waitTime + processes.get(i).burstTime; + + waitTimeTot += processes.get(i).waitTime; + tatTime += processes.get(i).turnAroundTime; + + System.out.println("Process no.: " + i + " Wait time: " + processes.get(i).waitTime + " Turn Around Time: " + processes.get(i).turnAroundTime); + } + + System.out.println("Average Waiting Time: " + waitTimeTot/noOfProcess); + System.out.println("Average TAT Time: " + tatTime/noOfProcess); + System.out.println("Throughput: " + (float)noOfProcess/(timer - 1)); + } + +} + +public class SJF { + public static void main(String[] args) { + Schedule s = new Schedule(); + s.startScheduling(); + s.solve(); + } +} \ No newline at end of file From 7fc41e87d74f7bde837678e21618f75ed631792c Mon Sep 17 00:00:00 2001 From: shivg7706 Date: Sat, 27 Oct 2018 08:24:42 +0530 Subject: [PATCH 040/521] chnages --- Others/SJF.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Others/SJF.java b/Others/SJF.java index baa8a8fd01f0..3bc510d6c15f 100644 --- a/Others/SJF.java +++ b/Others/SJF.java @@ -31,8 +31,8 @@ class Schedule { processes = new ArrayList(); remainingProcess = new ArrayList(); - gantChart = new ArrayList(); - arrivals = new HashMap>(); + gantChart = new ArrayList<>(); + arrivals = new HashMap<>(); System.out.print("Enter the no. of processes: "); noOfProcess = in.nextInt(); From 6092dfca7954f9b21364b668fba9d8fa731d3c4f Mon Sep 17 00:00:00 2001 From: shivg7706 Date: Sat, 27 Oct 2018 08:29:09 +0530 Subject: [PATCH 041/521] added description about algorithm --- Others/SJF.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Others/SJF.java b/Others/SJF.java index 3bc510d6c15f..244365da4bf6 100644 --- a/Others/SJF.java +++ b/Others/SJF.java @@ -1,3 +1,15 @@ +// Shortest job first. + +// Shortest job first (SJF) or shortest job next, is a scheduling policy +// that selects the waiting process with the smallest execution time to execute next +// Shortest Job first has the advantage of having minimum average waiting +// time among all scheduling algorithms. +// It is a Greedy Algorithm. +// It may cause starvation if shorter processes keep coming. +// This problem has been solved using the concept of aging. + + + import java.util.Scanner; import java.util.ArrayList; import java.util.Comparator; From 1e27a5d0b1e8329aa45470085f680c2e42ecef88 Mon Sep 17 00:00:00 2001 From: shivg7706 Date: Sat, 27 Oct 2018 12:59:00 +0530 Subject: [PATCH 042/521] documentation --- Others/SJF.java | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Others/SJF.java b/Others/SJF.java index 244365da4bf6..923ece654939 100644 --- a/Others/SJF.java +++ b/Others/SJF.java @@ -1,14 +1,14 @@ -// Shortest job first. - -// Shortest job first (SJF) or shortest job next, is a scheduling policy -// that selects the waiting process with the smallest execution time to execute next -// Shortest Job first has the advantage of having minimum average waiting -// time among all scheduling algorithms. -// It is a Greedy Algorithm. -// It may cause starvation if shorter processes keep coming. -// This problem has been solved using the concept of aging. - - +/** +*

Shortest job first.

+*

Shortest job first (SJF) or shortest job next, is a scheduling policy +* that selects the waiting process with the smallest execution time to execute next +* Shortest Job first has the advantage of having minimum average waiting time among all scheduling algorithms. +* It is a Greedy Algorithm. +* It may cause starvation if shorter processes keep coming. +* This problem has been solved using the concept of aging.

+* @author shivg7706 +* @since 2018/10/27 +*/ import java.util.Scanner; import java.util.ArrayList; @@ -26,7 +26,6 @@ class Process { public int remainingTime; } - class Schedule { private int noOfProcess; From a9502c276e55a7d0ecf5dfa36e10f834deecdc06 Mon Sep 17 00:00:00 2001 From: Hector S Date: Sat, 27 Oct 2018 21:30:33 -0300 Subject: [PATCH 043/521] Update README.md Update average case of quicksort: n log n #607 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bb08f7586247..4d08658198c6 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ From [Wikipedia][quick-wiki]: Quicksort (sometimes called partition-exchange sor __Properties__ * Worst case performance O(n^2) * Best case performance O(n log n) or O(n) with three-way partition -* Average case performance O(n^2) +* Average case performance O(n log n) ###### View the algorithm in [action][quick-toptal] From 819b7fd3da89967b25ea14f85eda94119d9f545f Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 13 Nov 2018 09:15:47 -0800 Subject: [PATCH 044/521] Restructured the repo --- .classpath | 7 - .gitignore | 4 + .project | 17 --- Searches/{src/search => }/BinarySearch.java | 2 +- .../{src/search => }/InterpolationSearch.java | 2 +- .../search => }/IterativeBinarySearch.java | 2 +- .../search => }/IterativeTernarySearch.java | 2 +- Searches/{src/search => }/LinearSearch.java | 2 +- .../{src/search => }/SaddlebackSearch.java | 2 +- .../{src/search => }/SearchAlgorithm.java | 2 +- Searches/{src/search => }/TernarySearch.java | 2 +- SkylineProblem/SkylineProblem.java | 137 ------------------ Sorts/{src/sort => }/BinaryTreeSort.java | 6 +- Sorts/{src/sort => }/BogoSort.java | 12 +- Sorts/{src/sort => }/BubbleSort.java | 4 +- Sorts/{src/sort => }/CocktailShakerSort.java | 16 +- Sorts/{src/sort => }/CombSort.java | 4 +- Sorts/{src/sort => }/CountingSort.java | 4 +- Sorts/{src/sort => }/CycleSort.java | 6 +- Sorts/{src/sort => }/GnomeSort.java | 4 +- Sorts/{src/sort => }/HeapSort.java | 4 +- Sorts/{src/sort => }/InsertionSort.java | 6 +- Sorts/{src/sort => }/MergeSort.java | 4 +- Sorts/{src/sort => }/PancakeSort.java | 4 +- Sorts/{src/sort => }/QuickSort.java | 4 +- Sorts/{src/sort => }/RadixSort.java | 2 +- Sorts/{src/sort => }/SelectionSort.java | 12 +- Sorts/{src/sort => }/ShellSort.java | 4 +- Sorts/{src/sort => }/SortAlgorithm.java | 2 +- Sorts/{src/sort => }/SortUtils.java | 2 +- 30 files changed, 59 insertions(+), 222 deletions(-) delete mode 100644 .classpath delete mode 100644 .project rename Searches/{src/search => }/BinarySearch.java (99%) rename Searches/{src/search => }/InterpolationSearch.java (99%) rename Searches/{src/search => }/IterativeBinarySearch.java (99%) rename Searches/{src/search => }/IterativeTernarySearch.java (99%) rename Searches/{src/search => }/LinearSearch.java (98%) rename Searches/{src/search => }/SaddlebackSearch.java (99%) rename Searches/{src/search => }/SearchAlgorithm.java (96%) rename Searches/{src/search => }/TernarySearch.java (99%) delete mode 100644 SkylineProblem/SkylineProblem.java rename Sorts/{src/sort => }/BinaryTreeSort.java (95%) rename Sorts/{src/sort => }/BogoSort.java (82%) rename Sorts/{src/sort => }/BubbleSort.java (96%) rename Sorts/{src/sort => }/CocktailShakerSort.java (79%) rename Sorts/{src/sort => }/CombSort.java (97%) rename Sorts/{src/sort => }/CountingSort.java (98%) rename Sorts/{src/sort => }/CycleSort.java (95%) rename Sorts/{src/sort => }/GnomeSort.java (95%) rename Sorts/{src/sort => }/HeapSort.java (98%) rename Sorts/{src/sort => }/InsertionSort.java (93%) rename Sorts/{src/sort => }/MergeSort.java (98%) rename Sorts/{src/sort => }/PancakeSort.java (95%) rename Sorts/{src/sort => }/QuickSort.java (97%) rename Sorts/{src/sort => }/RadixSort.java (98%) rename Sorts/{src/sort => }/SelectionSort.java (87%) rename Sorts/{src/sort => }/ShellSort.java (94%) rename Sorts/{src/sort => }/SortAlgorithm.java (98%) rename Sorts/{src/sort => }/SortUtils.java (99%) diff --git a/.classpath b/.classpath deleted file mode 100644 index 67d5f6d35842..000000000000 --- a/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/.gitignore b/.gitignore index ae3c1726048c..bf2ba9450292 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ /bin/ +.idea/* +.classpath* +.project* +*.iml diff --git a/.project b/.project deleted file mode 100644 index ea54703d8788..000000000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - Java - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/Searches/src/search/BinarySearch.java b/Searches/BinarySearch.java similarity index 99% rename from Searches/src/search/BinarySearch.java rename to Searches/BinarySearch.java index 239bc98c6f2a..f655c074f279 100644 --- a/Searches/src/search/BinarySearch.java +++ b/Searches/BinarySearch.java @@ -1,4 +1,4 @@ -package search; +package Searches; import java.util.Arrays; import java.util.Random; diff --git a/Searches/src/search/InterpolationSearch.java b/Searches/InterpolationSearch.java similarity index 99% rename from Searches/src/search/InterpolationSearch.java rename to Searches/InterpolationSearch.java index 06313d13ce9c..b2395797c207 100644 --- a/Searches/src/search/InterpolationSearch.java +++ b/Searches/InterpolationSearch.java @@ -1,4 +1,4 @@ -package search; +package Searches; import java.util.Arrays; import java.util.Random; diff --git a/Searches/src/search/IterativeBinarySearch.java b/Searches/IterativeBinarySearch.java similarity index 99% rename from Searches/src/search/IterativeBinarySearch.java rename to Searches/IterativeBinarySearch.java index 17bfe3950e94..c6f8e7f1a8d9 100644 --- a/Searches/src/search/IterativeBinarySearch.java +++ b/Searches/IterativeBinarySearch.java @@ -1,4 +1,4 @@ -package search; +package Searches; import java.util.Arrays; import java.util.Random; diff --git a/Searches/src/search/IterativeTernarySearch.java b/Searches/IterativeTernarySearch.java similarity index 99% rename from Searches/src/search/IterativeTernarySearch.java rename to Searches/IterativeTernarySearch.java index c3538e69f00a..598b3b3eb366 100644 --- a/Searches/src/search/IterativeTernarySearch.java +++ b/Searches/IterativeTernarySearch.java @@ -1,4 +1,4 @@ -package search; +package Searches; import java.util.Arrays; import java.util.Random; diff --git a/Searches/src/search/LinearSearch.java b/Searches/LinearSearch.java similarity index 98% rename from Searches/src/search/LinearSearch.java rename to Searches/LinearSearch.java index 6e96da0f43bb..7664d7debb99 100644 --- a/Searches/src/search/LinearSearch.java +++ b/Searches/LinearSearch.java @@ -1,4 +1,4 @@ -package search; +package Searches; import java.util.Random; import java.util.stream.Stream; diff --git a/Searches/src/search/SaddlebackSearch.java b/Searches/SaddlebackSearch.java similarity index 99% rename from Searches/src/search/SaddlebackSearch.java rename to Searches/SaddlebackSearch.java index 68779db8f79f..ed9c9108c480 100644 --- a/Searches/src/search/SaddlebackSearch.java +++ b/Searches/SaddlebackSearch.java @@ -1,4 +1,4 @@ -package search; +package Searches; import java.util.Scanner; diff --git a/Searches/src/search/SearchAlgorithm.java b/Searches/SearchAlgorithm.java similarity index 96% rename from Searches/src/search/SearchAlgorithm.java rename to Searches/SearchAlgorithm.java index ca3bf59ba552..d1a93fb7eacc 100644 --- a/Searches/src/search/SearchAlgorithm.java +++ b/Searches/SearchAlgorithm.java @@ -1,4 +1,4 @@ -package search; +package Searches; /** * The common interface of most searching algorithms diff --git a/Searches/src/search/TernarySearch.java b/Searches/TernarySearch.java similarity index 99% rename from Searches/src/search/TernarySearch.java rename to Searches/TernarySearch.java index 7e60edf3aad7..cefd374098cc 100644 --- a/Searches/src/search/TernarySearch.java +++ b/Searches/TernarySearch.java @@ -1,4 +1,4 @@ -package search; +package Searches; import java.util.Arrays; diff --git a/SkylineProblem/SkylineProblem.java b/SkylineProblem/SkylineProblem.java deleted file mode 100644 index 121116e16685..000000000000 --- a/SkylineProblem/SkylineProblem.java +++ /dev/null @@ -1,137 +0,0 @@ -/** - * Given n rectangular buildings in a 2-dimensional city, computes the skyline of these buildings, - * eliminating hidden lines. The main task is to view buildings from a side and remove all sections - * that are not visible. - * Source for explanation: https://www.geeksforgeeks.org/the-skyline-problem-using-divide-and-conquer-algorithm/ - */ -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Scanner; - -public class SkylineProblem { - Building[] building; - int count; - - public void run() { - Scanner sc = new Scanner(System.in); - - int num = sc.nextInt(); - this.building = new Building[num]; - - for(int i = 0; i < num; i++) { - String input = sc.next(); - String[] data = input.split(","); - this.add(Integer.parseInt(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2])); - } - this.print(this.findSkyline(0, num - 1)); - - sc.close(); - } - - public void add(int left, int height, int right) { - building[count++] = new Building(left, height, right); - } - - public void print(ArrayList skyline) { - Iterator it = skyline.iterator(); - - while(it.hasNext()) { - Skyline temp = it.next(); - System.out.print(temp.coordinates + "," + temp.height); - if(it.hasNext()) { - System.out.print(","); - } - } - - } - - public ArrayList findSkyline(int start, int end) { - if(start == end) { - ArrayList list = new ArrayList<>(); - list.add(new Skyline(building[start].left, building[start].height)); - list.add(new Skyline(building[end].right, 0)); - - return list; - } - - int mid = (start + end) / 2; - - ArrayList sky1 = this.findSkyline(start, mid); - ArrayList sky2 = this.findSkyline(mid + 1, end); - - return this.mergeSkyline(sky1, sky2); - } - - public ArrayList mergeSkyline(ArrayList sky1, ArrayList sky2) { - int currentH1 = 0, currentH2 = 0; - ArrayList skyline = new ArrayList<>(); - int maxH = 0; - - while(!sky1.isEmpty() && !sky2.isEmpty()) { - if(sky1.get(0).coordinates < sky2.get(0).coordinates) { - int currentX = sky1.get(0).coordinates; - currentH1 = sky1.get(0).height; - - if(currentH1 < currentH2) { - sky1.remove(0); - if(maxH != currentH2) skyline.add(new Skyline(currentX, currentH2)); - } else { - maxH = currentH1; - sky1.remove(0); - skyline.add(new Skyline(currentX, currentH1)); - } - } else { - int currentX = sky2.get(0).coordinates; - currentH2 = sky2.get(0).height; - - if(currentH2 < currentH1) { - sky2.remove(0); - if(maxH != currentH1) skyline.add(new Skyline(currentX, currentH1)); - } else { - maxH = currentH2; - sky2.remove(0); - skyline.add(new Skyline(currentX, currentH2)); - } - } - } - - while(!sky1.isEmpty()) { - skyline.add(sky1.get(0)); - sky1.remove(0); - } - - while(!sky2.isEmpty()) { - skyline.add(sky2.get(0)); - sky2.remove(0); - } - - return skyline; - } - - public class Skyline { - public int coordinates; - public int height; - - public Skyline(int coordinates, int height) { - this.coordinates = coordinates; - this.height = height; - } - } - - public class Building { - public int left; - public int height; - public int right; - - public Building(int left, int height, int right) { - this.left = left; - this.height = height; - this.right = right; - } - } - - public static void main(String[] args) { - SkylineProblem skylineProblem = new SkylineProblem(); - skylineProblem.run(); - } -} diff --git a/Sorts/src/sort/BinaryTreeSort.java b/Sorts/BinaryTreeSort.java similarity index 95% rename from Sorts/src/sort/BinaryTreeSort.java rename to Sorts/BinaryTreeSort.java index 59d58ab61987..26942754f910 100644 --- a/Sorts/src/sort/BinaryTreeSort.java +++ b/Sorts/BinaryTreeSort.java @@ -1,7 +1,7 @@ -package sort; +package Sorts; -import static sort.SortUtils.less; -import static sort.SortUtils.print; +import static Sorts.SortUtils.less; +import static Sorts.SortUtils.print; /** * diff --git a/Sorts/src/sort/BogoSort.java b/Sorts/BogoSort.java similarity index 82% rename from Sorts/src/sort/BogoSort.java rename to Sorts/BogoSort.java index 1079ca21c27a..f3f923d32edf 100644 --- a/Sorts/src/sort/BogoSort.java +++ b/Sorts/BogoSort.java @@ -1,9 +1,7 @@ -package sort; +package Sorts; import java.util.Random; -import static sort.SortUtils.*; - /** * @@ -19,7 +17,7 @@ public class BogoSort implements SortAlgorithm { private static > boolean isSorted(T array[]){ for(int i = 0; i void nextPermutation(T array[]){ for (int i = 0; i < array.length; i++) { int randomIndex = i + random.nextInt(length - i); - swap(array, randomIndex, i); + SortUtils.swap(array, randomIndex, i); } } @@ -49,11 +47,11 @@ public static void main(String[] args) { BogoSort bogoSort = new BogoSort(); // print a sorted array - print(bogoSort.sort(integers)); + SortUtils.print(bogoSort.sort(integers)); // String Input String[] strings = {"c", "a", "e", "b","d"}; - print(bogoSort.sort(strings)); + SortUtils.print(bogoSort.sort(strings)); } } diff --git a/Sorts/src/sort/BubbleSort.java b/Sorts/BubbleSort.java similarity index 96% rename from Sorts/src/sort/BubbleSort.java rename to Sorts/BubbleSort.java index 1173245fcabf..274979a456b1 100644 --- a/Sorts/src/sort/BubbleSort.java +++ b/Sorts/BubbleSort.java @@ -1,6 +1,6 @@ -package sort; +package Sorts; -import static sort.SortUtils.*; +import static Sorts.SortUtils.*; /** * diff --git a/Sorts/src/sort/CocktailShakerSort.java b/Sorts/CocktailShakerSort.java similarity index 79% rename from Sorts/src/sort/CocktailShakerSort.java rename to Sorts/CocktailShakerSort.java index 7982b8fcfcae..5f4b89942645 100644 --- a/Sorts/src/sort/CocktailShakerSort.java +++ b/Sorts/CocktailShakerSort.java @@ -1,6 +1,4 @@ -package sort; - -import static sort.SortUtils.*; +package Sorts; /** * @@ -29,8 +27,8 @@ public > T[] sort(T[] array) { // front swappedRight = 0; for (int i = left; i < right; i++) { - if (less(array[i + 1], array[i])) { - swap(array, i, i + 1); + if (SortUtils.less(array[i + 1], array[i])) { + SortUtils.swap(array, i, i + 1); swappedRight = i; } } @@ -38,8 +36,8 @@ public > T[] sort(T[] array) { right = swappedRight; swappedLeft = length - 1; for (int j = right; j > left; j--) { - if (less(array[j], array[j - 1])) { - swap(array, j - 1, j); + if (SortUtils.less(array[j], array[j - 1])) { + SortUtils.swap(array, j - 1, j); swappedLeft = j; } } @@ -56,11 +54,11 @@ public static void main(String[] args) { CocktailShakerSort shakerSort = new CocktailShakerSort(); // Output => 1 4 6 9 12 23 54 78 231 - print(shakerSort.sort(integers)); + SortUtils.print(shakerSort.sort(integers)); // String Input String[] strings = { "c", "a", "e", "b", "d" }; - print(shakerSort.sort(strings)); + SortUtils.print(shakerSort.sort(strings)); } diff --git a/Sorts/src/sort/CombSort.java b/Sorts/CombSort.java similarity index 97% rename from Sorts/src/sort/CombSort.java rename to Sorts/CombSort.java index 492605ca56e7..83e24edaec9c 100644 --- a/Sorts/src/sort/CombSort.java +++ b/Sorts/CombSort.java @@ -1,6 +1,6 @@ -package sort; +package Sorts; -import static sort.SortUtils.*; +import static Sorts.SortUtils.*; /** diff --git a/Sorts/src/sort/CountingSort.java b/Sorts/CountingSort.java similarity index 98% rename from Sorts/src/sort/CountingSort.java rename to Sorts/CountingSort.java index 39442a00fbb8..7243a27a9dd4 100644 --- a/Sorts/src/sort/CountingSort.java +++ b/Sorts/CountingSort.java @@ -1,4 +1,4 @@ -package sort; +package Sorts; import java.util.*; import java.util.stream.IntStream; @@ -6,7 +6,7 @@ import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; -import static sort.SortUtils.print; +import static Sorts.SortUtils.print; /** * diff --git a/Sorts/src/sort/CycleSort.java b/Sorts/CycleSort.java similarity index 95% rename from Sorts/src/sort/CycleSort.java rename to Sorts/CycleSort.java index ea4f05535c7a..eba541a061e8 100644 --- a/Sorts/src/sort/CycleSort.java +++ b/Sorts/CycleSort.java @@ -1,7 +1,7 @@ -package sort; +package Sorts; -import static sort.SortUtils.less; -import static sort.SortUtils.print; +import static Sorts.SortUtils.less; +import static Sorts.SortUtils.print; /** * @author Podshivalov Nikita (https://github.com/nikitap492) diff --git a/Sorts/src/sort/GnomeSort.java b/Sorts/GnomeSort.java similarity index 95% rename from Sorts/src/sort/GnomeSort.java rename to Sorts/GnomeSort.java index 14af67c65bb6..ef5dca141436 100644 --- a/Sorts/src/sort/GnomeSort.java +++ b/Sorts/GnomeSort.java @@ -1,6 +1,6 @@ -package sort; +package Sorts; -import static sort.SortUtils.*; +import static Sorts.SortUtils.*; /** * Implementation of gnome sort diff --git a/Sorts/src/sort/HeapSort.java b/Sorts/HeapSort.java similarity index 98% rename from Sorts/src/sort/HeapSort.java rename to Sorts/HeapSort.java index 6fab3747fd2f..9be2c2e70345 100644 --- a/Sorts/src/sort/HeapSort.java +++ b/Sorts/HeapSort.java @@ -1,10 +1,10 @@ -package sort; +package Sorts; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import static sort.SortUtils.*; +import static Sorts.SortUtils.*; /** * Heap Sort Algorithm diff --git a/Sorts/src/sort/InsertionSort.java b/Sorts/InsertionSort.java similarity index 93% rename from Sorts/src/sort/InsertionSort.java rename to Sorts/InsertionSort.java index 593614304c5b..f29c3537ce0d 100644 --- a/Sorts/src/sort/InsertionSort.java +++ b/Sorts/InsertionSort.java @@ -1,7 +1,7 @@ -package sort; +package Sorts; -import static sort.SortUtils.less; -import static sort.SortUtils.print; +import static Sorts.SortUtils.less; +import static Sorts.SortUtils.print; /** * diff --git a/Sorts/src/sort/MergeSort.java b/Sorts/MergeSort.java similarity index 98% rename from Sorts/src/sort/MergeSort.java rename to Sorts/MergeSort.java index 2c7a141bdc32..3c4fa4a2b99a 100644 --- a/Sorts/src/sort/MergeSort.java +++ b/Sorts/MergeSort.java @@ -1,6 +1,6 @@ -package sort; +package Sorts; -import static sort.SortUtils.print; +import static Sorts.SortUtils.print; /** * This method implements the Generic Merge Sort diff --git a/Sorts/src/sort/PancakeSort.java b/Sorts/PancakeSort.java similarity index 95% rename from Sorts/src/sort/PancakeSort.java rename to Sorts/PancakeSort.java index 902db4b39cb8..395b75f93a75 100644 --- a/Sorts/src/sort/PancakeSort.java +++ b/Sorts/PancakeSort.java @@ -1,6 +1,6 @@ -package sort; +package Sorts; -import static sort.SortUtils.*; +import static Sorts.SortUtils.*; /** * Implementation of gnome sort diff --git a/Sorts/src/sort/QuickSort.java b/Sorts/QuickSort.java similarity index 97% rename from Sorts/src/sort/QuickSort.java rename to Sorts/QuickSort.java index 4159fc829881..36b042c13821 100644 --- a/Sorts/src/sort/QuickSort.java +++ b/Sorts/QuickSort.java @@ -1,6 +1,6 @@ -package sort; +package Sorts; -import static sort.SortUtils.*; +import static Sorts.SortUtils.*; /** * diff --git a/Sorts/src/sort/RadixSort.java b/Sorts/RadixSort.java similarity index 98% rename from Sorts/src/sort/RadixSort.java rename to Sorts/RadixSort.java index 0d1e6966101a..9fd1ab7b8356 100644 --- a/Sorts/src/sort/RadixSort.java +++ b/Sorts/RadixSort.java @@ -1,4 +1,4 @@ -package sort; +package Sorts; import java.util.Arrays; diff --git a/Sorts/src/sort/SelectionSort.java b/Sorts/SelectionSort.java similarity index 87% rename from Sorts/src/sort/SelectionSort.java rename to Sorts/SelectionSort.java index 960215a686d2..7ab599f943f2 100644 --- a/Sorts/src/sort/SelectionSort.java +++ b/Sorts/SelectionSort.java @@ -1,6 +1,4 @@ -package sort; - -import static sort.SortUtils.*; +package Sorts; /** * @@ -27,14 +25,14 @@ public > T[] sort(T[] arr) { int min = i; for (int j = i +1 ; j < n; j++) { - if (less(arr[j], arr[min])) { + if (SortUtils.less(arr[j], arr[min])) { min = j; } } // Swapping if index of min is changed if (min != i) { - swap(arr, i , min); + SortUtils.swap(arr, i , min); } } @@ -51,13 +49,13 @@ public static void main(String[] args) { Integer[] sorted = selectionSort.sort(arr); // Output => 1 4 6 9 12 23 54 78 231 - print(sorted); + SortUtils.print(sorted); // String Input String[] strings = {"c", "a", "e", "b","d"}; String[] sortedStrings = selectionSort.sort(strings); //Output => a b c d e - print(sortedStrings); + SortUtils.print(sortedStrings); } } diff --git a/Sorts/src/sort/ShellSort.java b/Sorts/ShellSort.java similarity index 94% rename from Sorts/src/sort/ShellSort.java rename to Sorts/ShellSort.java index bafd19b145d7..31c2c6077897 100644 --- a/Sorts/src/sort/ShellSort.java +++ b/Sorts/ShellSort.java @@ -1,6 +1,6 @@ -package sort; +package Sorts; -import static sort.SortUtils.*; +import static Sorts.SortUtils.*; /** diff --git a/Sorts/src/sort/SortAlgorithm.java b/Sorts/SortAlgorithm.java similarity index 98% rename from Sorts/src/sort/SortAlgorithm.java rename to Sorts/SortAlgorithm.java index 46b1f58e128f..e6004156559b 100644 --- a/Sorts/src/sort/SortAlgorithm.java +++ b/Sorts/SortAlgorithm.java @@ -1,4 +1,4 @@ -package sort; +package Sorts; import java.util.Arrays; import java.util.List; diff --git a/Sorts/src/sort/SortUtils.java b/Sorts/SortUtils.java similarity index 99% rename from Sorts/src/sort/SortUtils.java rename to Sorts/SortUtils.java index 8766e9d0e4d7..b3392352becd 100644 --- a/Sorts/src/sort/SortUtils.java +++ b/Sorts/SortUtils.java @@ -1,4 +1,4 @@ -package sort; +package Sorts; import java.util.Arrays; import java.util.List; From c4f7a45ed236fb1dd2d733b4a5d1863a2ff57145 Mon Sep 17 00:00:00 2001 From: 1700022814 <512620936@qq.com> Date: Sun, 18 Nov 2018 16:22:08 +0800 Subject: [PATCH 045/521] fix BinaryTree.java put method#644 --- DataStructures/Trees/BinaryTree.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DataStructures/Trees/BinaryTree.java b/DataStructures/Trees/BinaryTree.java index a20d24eebc35..0c6e89cd36ae 100644 --- a/DataStructures/Trees/BinaryTree.java +++ b/DataStructures/Trees/BinaryTree.java @@ -69,8 +69,12 @@ public Node find(int key) { Node current = root; while (current != null) { if(key < current.data) { + if(current.left == null) + return current; //The key isn't exist, returns the parent current = current.left; } else if(key > current.data) { + if(current.right == null) + return current; current = current.right; } else { // If you find the value return it return current; From 21d8937baa0198563cd545639eaa20b298c63229 Mon Sep 17 00:00:00 2001 From: Shoaib Rayeen Date: Wed, 21 Nov 2018 05:22:24 +0530 Subject: [PATCH 046/521] Optimized Version [Without Hashmap & recursion] --- Dynamic Programming/Fibonacci.java | 34 ++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/Dynamic Programming/Fibonacci.java b/Dynamic Programming/Fibonacci.java index b2524b4db471..d177b5bb9c5d 100644 --- a/Dynamic Programming/Fibonacci.java +++ b/Dynamic Programming/Fibonacci.java @@ -29,6 +29,10 @@ public static void main(String[] args) throws Exception { * Outputs the nth fibonacci number **/ + + + + private static int fibMemo(int n) { if (map.containsKey(n)) { return map.get(n); @@ -71,5 +75,35 @@ private static int fibBotUp(int n) { return fib.get(n); } + + + + /** + * This method finds the nth fibonacci number using bottom up + * + * @author Shoaib Rayeen (https://github.com/shoaibrayeen) + * @param n The input n for which we have to determine the fibonacci number + * Outputs the nth fibonacci number + * + * This is optimized version of Fibonacci Program. Without using Hashmap and recursion. + * It saves both memory and time. + * Space Complexity will be O(1) + * Time Complexity will be O(n) + * + * Whereas , the above functions will take O(n) Space. + **/ + private static int fibOptimized(int n) { + + if (n == 0) { + return 0; + } + int prev = 0 , res = 1 , next; + for ( int i = 2; i < n; i++) { + next = prev + res; + prev = res; + res = next; + } + return res; + } } From 80674d128dba62f281bda14aa3050d5e27af90e1 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Thu, 6 Dec 2018 23:05:01 +0900 Subject: [PATCH 047/521] translate readme into korean language To help Korean Student Study Algorithm easier --- README-ko.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README-ko.md diff --git a/README-ko.md b/README-ko.md new file mode 100644 index 000000000000..aac05a0a7e0d --- /dev/null +++ b/README-ko.md @@ -0,0 +1 @@ +한글 리드미 만들기 From 915410078442be230736ccbd7b7bc3b82bd9f9a1 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Thu, 6 Dec 2018 23:14:58 +0900 Subject: [PATCH 048/521] README-kor update 1 --- README-ko.md | 197 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 196 insertions(+), 1 deletion(-) diff --git a/README-ko.md b/README-ko.md index aac05a0a7e0d..3b2a44c63184 100644 --- a/README-ko.md +++ b/README-ko.md @@ -1 +1,196 @@ -한글 리드미 만들기 +# 알고리즘 - ìžë°” + +## ì´ [개발브런치](https://github.com/TheAlgorithms/Java/tree/Development)는 기존 프로ì íŠ¸ë¥¼ Java 프로ì íЏ 구조로 재개발하기 위해 작성ë˜ì—ˆë‹¤. 기여ë„를 위해 개발 지사로 전환할 수 있다. ìžì„¸í•œ ë‚´ìš©ì€ ì´ ë¬¸ì œë¥¼ 참조하십시오. ì»¨íŠ¸ë¦¬ë·°ì…˜ì„ ìœ„í•´ [개발브런치](https://github.com/TheAlgorithms/Java/tree/Development)로 전환할 수 있다. ìžì„¸í•œ ë‚´ìš©ì€ [ì´ ì´ìŠˆ](https://github.com/TheAlgorithms/Java/issues/474)를 참고하십시오. + +### All algorithms implemented in Java (for education) + +These are for demonstration purposes only. There are many implementations of sorts in the Java standard library that are much better for performance reasons. + +## Sort Algorithms + + +### Bubble +![alt text][bubble-image] + +From [Wikipedia][bubble-wiki]: Bubble sort, sometimes referred to as sinking sort, is a simple sorting algorithm that repeatedly steps through the list to be sorted, compares each pair of adjacent items and swaps them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. + +__Properties__ +* Worst case performance O(n^2) +* Best case performance O(n) +* Average case performance O(n^2) + +###### View the algorithm in [action][bubble-toptal] + + + +### Insertion +![alt text][insertion-image] + +From [Wikipedia][insertion-wiki]: Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. +In the figure, each bar represents an element of an array that needs to be sorted. What happens at the first intersection of the top most and second top most bars is to swap these elements, represented by bars, because the second element has a higher precedence than the first element does. By repeating this method, insertion sort completes sorting. + +__Properties__ +* Worst case performance O(n^2) +* Best case performance O(n) +* Average case performance O(n^2) + +###### View the algorithm in [action][insertion-toptal] + + +### Merge +![alt text][merge-image] + +From [Wikipedia][merge-wiki]: In computer science, merge sort (also commonly spelt mergesort) is an efficient, general-purpose, comparison-based sorting algorithm. Most implementations produce a stable sort, which means that the implementation preserves the input order of equal elements in the sorted output. Mergesort is a divide and conquer algorithm that was invented by John von Neumann in 1945. + +__Properties__ +* Worst case performance O(n log n) (typical) +* Best case performance O(n log n) +* Average case performance O(n log n) + + +###### View the algorithm in [action][merge-toptal] + +### Quick +![alt text][quick-image] + +From [Wikipedia][quick-wiki]: Quicksort (sometimes called partition-exchange sort) is an efficient sorting algorithm, serving as a systematic method for placing the elements of an array in order. + +__Properties__ +* Worst case performance O(n^2) +* Best case performance O(n log n) or O(n) with three-way partition +* Average case performance O(n log n) + +###### View the algorithm in [action][quick-toptal] + +### Selection +![alt text][selection-image] + +From [Wikipedia][selection-wiki]: The algorithm divides the input list into two parts: the sublist of items already sorted, which is built up from left to right at the front (left) of the list, and the sublist of items remaining to be sorted that occupy the rest of the list. Initially, the sorted sublist is empty and the unsorted sublist is the entire input list. The algorithm proceeds by finding the smallest (or largest, depending on sorting order) element in the unsorted sublist, exchanging (swapping) it with the leftmost unsorted element (putting it in sorted order), and moving the sublist boundaries one element to the right. + +__Properties__ +* Worst case performance O(n^2) +* Best case performance O(n^2) +* Average case performance O(n^2) + +###### View the algorithm in [action][selection-toptal] + +### Shell +![alt text][shell-image] + +From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. + +__Properties__ +* Worst case performance O(nlog2 2n) +* Best case performance O(n log n) +* Average case performance depends on gap sequence + +###### View the algorithm in [action][shell-toptal] + +### Time-Compexity Graphs + +Comparing the complexity of sorting algorithms (Bubble Sort, Insertion Sort, Selection Sort) + +[Complexity Graphs](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) + +---------------------------------------------------------------------------------- + +## Search Algorithms + +### Linear +![alt text][linear-image] + +From [Wikipedia][linear-wiki]: linear search or sequential search is a method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched. + The linear search runs in at the worst linear time and makes at most n comparisons, where n is the length of the list. + +__Properties__ +* Worst case performance O(n) +* Best case performance O(1) +* Average case performance O(n) +* Worst case space complexity O(1) iterative + +### Binary +![alt text][binary-image] + +From [Wikipedia][binary-wiki]: Binary search, also known as half-interval search or logarithmic search, is a search algorithm that finds the position of a target value within a sorted array. It compares the target value to the middle element of the array; if they are unequal, the half in which the target cannot lie is eliminated and the search continues on the remaining half until it is successful. + +__Properties__ +* Worst case performance O(log n) +* Best case performance O(1) +* Average case performance O(log n) +* Worst case space complexity O(1) + +From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. + +__Properties__ +* Worst case performance O(nlog2 2n) +* Best case performance O(n log n) +* Average case performance depends on gap sequence + +###### View the algorithm in [action][shell-toptal] + +[bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort +[bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort +[bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" + +[insertion-toptal]: https://www.toptal.com/developers/sorting-algorithms/insertion-sort +[insertion-wiki]: https://en.wikipedia.org/wiki/Insertion_sort +[insertion-image]: https://upload.wikimedia.org/wikipedia/commons/7/7e/Insertionsort-edited.png "Insertion Sort" + +[quick-toptal]: https://www.toptal.com/developers/sorting-algorithms/quick-sort +[quick-wiki]: https://en.wikipedia.org/wiki/Quicksort +[quick-image]: https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif "Quick Sort" + +[merge-toptal]: https://www.toptal.com/developers/sorting-algorithms/merge-sort +[merge-wiki]: https://en.wikipedia.org/wiki/Merge_sort +[merge-image]: https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif "Merge Sort" + +[selection-toptal]: https://www.toptal.com/developers/sorting-algorithms/selection-sort +[selection-wiki]: https://en.wikipedia.org/wiki/Selection_sort +[selection-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/250px-Selection_sort_animation.gif "Selection Sort Sort" + +[shell-toptal]: https://www.toptal.com/developers/sorting-algorithms/shell-sort +[shell-wiki]: https://en.wikipedia.org/wiki/Shellsort +[shell-image]: https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif "Shell Sort" + +[linear-wiki]: https://en.wikipedia.org/wiki/Linear_search +[linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif + +[binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm +[binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png + + +-------------------------------------------------------------------- +## Links to the rest of the algorithms + +Conversions | Dynamic Programming |Ciphers|Miscellaneous| +----------- |----------------------------------------------------------------|-------|-------------| +[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](Dynamic%20Programming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| +[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](Dynamic%20Programming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| +[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](Dynamic%20Programming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| +[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](Dynamic%20Programming/KadaneAlgorithm.java)|more coming soon...| +[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](Dynamic%20Programming/Knapsack.java)| +[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](Dynamic%20Programming/LongestCommonSubsequence.java)| +[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](Dynamic%20Programming/LongestIncreasingSubsequence.java)| +[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](Dynamic%20Programming/RodCutting.java)| +and much more...| and more...| + +### Data Structures +Graphs|Heaps|Lists|Queues| +------|-----|-----|------| +[BFS](DataStructures/Graphs/BFS.java)|[Empty Heap Exception](DataStructures/Heaps/EmptyHeapException.java)|[Circle Linked List](DataStructures/Lists/CircleLinkedList.java)|[Generic Array List Queue](DataStructures/Queues/GenericArrayListQueue.java)| +[DFS](DataStructures/Graphs/DFS.java)|[Heap](DataStructures/Heaps/Heap.java)|[Doubly Linked List](DataStructures/Lists/DoublyLinkedList.java)|[Queues](DataStructures/Queues/Queues.java)| +[Graphs](DataStructures/Graphs/Graphs.java)|[Heap Element](DataStructures/Heaps/HeapElement.java)|[Singly Linked List](DataStructures/Lists/SinglyLinkedList.java)| +[Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](Data%Structures/Heaps/MaxHeap.java)| +[Matrix Graphs](DataStructures/Graphs/MatrixGraphs.java)|[Min Heap](DataStructures/Heaps/MinHeap.java)| +[PrimMST](DataStructures/Graphs/PrimMST.java)| + +Stacks|Trees| +------|-----| +[Node Stack](DataStructures/Stacks/NodeStack.java)|[AVL Tree](DataStructures/Trees/AVLTree.java)| +[Stack of Linked List](DataStructures/Stacks/StackOfLinkedList.java)|[Binary Tree](DataStructures/Trees/BinaryTree.java)| +[Stacks](DataStructures/Stacks/Stacks.java)|And much more...| + +* [Bags](DataStructures/Bags/Bag.java) +* [Buffer](DataStructures/Buffers/CircularBuffer.java) +* [HashMap](DataStructures/HashMap/HashMap.java) +* [Matrix](DataStructures/Matrix/Matrix.java) From 52961998f6451f276ed862d40eb829851f38b8d5 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Thu, 6 Dec 2018 23:25:57 +0900 Subject: [PATCH 049/521] README-kor translated till bubble sort --- README-ko.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README-ko.md b/README-ko.md index 3b2a44c63184..b075dc09f403 100644 --- a/README-ko.md +++ b/README-ko.md @@ -2,22 +2,22 @@ ## ì´ [개발브런치](https://github.com/TheAlgorithms/Java/tree/Development)는 기존 프로ì íŠ¸ë¥¼ Java 프로ì íЏ 구조로 재개발하기 위해 작성ë˜ì—ˆë‹¤. 기여ë„를 위해 개발 지사로 전환할 수 있다. ìžì„¸í•œ ë‚´ìš©ì€ ì´ ë¬¸ì œë¥¼ 참조하십시오. ì»¨íŠ¸ë¦¬ë·°ì…˜ì„ ìœ„í•´ [개발브런치](https://github.com/TheAlgorithms/Java/tree/Development)로 전환할 수 있다. ìžì„¸í•œ ë‚´ìš©ì€ [ì´ ì´ìŠˆ](https://github.com/TheAlgorithms/Java/issues/474)를 참고하십시오. -### All algorithms implemented in Java (for education) +### ìžë°”로 êµ¬í˜„ëœ ëª¨ë“  알고리즘들 (êµìœ¡ìš©) -These are for demonstration purposes only. There are many implementations of sorts in the Java standard library that are much better for performance reasons. +ì´ê²ƒë“¤ì€ 단지 ì‹œë²”ì„ ìœ„í•œ 것ì´ë‹¤. 표준 ìžë°” ë¼ì´ë¸ŒëŸ¬ë¦¬ì—는 성능ìƒì˜ ì´ìœ ë¡œ ë” ë‚˜ì€ ê²ƒë“¤ì´ êµ¬í˜„ë˜ì–´ìžˆë‹¤ -## Sort Algorithms +## ì •ë ¬ 알고리즘 -### Bubble +### Bubble(버블 소트) ![alt text][bubble-image] -From [Wikipedia][bubble-wiki]: Bubble sort, sometimes referred to as sinking sort, is a simple sorting algorithm that repeatedly steps through the list to be sorted, compares each pair of adjacent items and swaps them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. +From [Wikipedia][bubble-wiki]: 버블 소트(sinking sorë¼ê³ ë„ 불리움)는 리스트를 반복ì ì¸ 단계로 접근하여 정렬한다. ê°ê°ì˜ ì§ì„ 비êµí•˜ë©°, 순서가 ìž˜ëª»ëœ ê²½ìš° 그접한 ì•„ì´í…œë“¤ì„ 스왑하는 알고리즘ì´ë‹¤. ë” ì´ìƒ 스왑할 ê²ƒì´ ì—†ì„ ë•Œê¹Œì§€ 반복하며, ë°˜ë³µì´ ëë‚¨ìŒ ë¦¬ìŠ¤íŠ¸ê°€ ì •ë ¬ë˜ì—ˆìŒì„ ì˜ë¯¸í•œë‹¤. -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n) -* Average case performance O(n^2) +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n) +* í‰ê·  성능 O(n^2) ###### View the algorithm in [action][bubble-toptal] From 3167e87049eb5847f02a52586a94a2fe3d9e5848 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Thu, 6 Dec 2018 23:32:07 +0900 Subject: [PATCH 050/521] README-ko translatie ~insertion sort --- README-ko.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/README-ko.md b/README-ko.md index b075dc09f403..f28bbb2c502b 100644 --- a/README-ko.md +++ b/README-ko.md @@ -9,7 +9,7 @@ ## ì •ë ¬ 알고리즘 -### Bubble(버블 소트) +### Bubble(버블 ì •ë ¬) ![alt text][bubble-image] From [Wikipedia][bubble-wiki]: 버블 소트(sinking sorë¼ê³ ë„ 불리움)는 리스트를 반복ì ì¸ 단계로 접근하여 정렬한다. ê°ê°ì˜ ì§ì„ 비êµí•˜ë©°, 순서가 ìž˜ëª»ëœ ê²½ìš° 그접한 ì•„ì´í…œë“¤ì„ 스왑하는 알고리즘ì´ë‹¤. ë” ì´ìƒ 스왑할 ê²ƒì´ ì—†ì„ ë•Œê¹Œì§€ 반복하며, ë°˜ë³µì´ ëë‚¨ìŒ ë¦¬ìŠ¤íŠ¸ê°€ ì •ë ¬ë˜ì—ˆìŒì„ ì˜ë¯¸í•œë‹¤. @@ -23,16 +23,15 @@ __ì†ì„±__ -### Insertion +### Insertion(삽입 ì •ë ¬) ![alt text][insertion-image] -From [Wikipedia][insertion-wiki]: Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. -In the figure, each bar represents an element of an array that needs to be sorted. What happens at the first intersection of the top most and second top most bars is to swap these elements, represented by bars, because the second element has a higher precedence than the first element does. By repeating this method, insertion sort completes sorting. +From [Wikipedia][insertion-wiki]: 삽입 ì •ë ¬ì€ ìµœì¢… ì •ë ¬ëœ ë°°ì—´(ë˜ëŠ” 리스트)ì„ í•œë²ˆì— í•˜ë‚˜ì”© 구축하는 알고리즘ì´ë‹¤. ì´ê²ƒì€ í° ë¦¬ìŠ¤íŠ¸ì—서 ë” ë‚˜ì€ ì•Œê³ ë¦¬ì¦˜ì¸ í€µ 소트, íž™ 소트, ë˜ëŠ” 머지 소트보다 훨씬 ì•ˆì¢‹ì€ íš¨ìœ¨ì„ ê°€ì§„ë‹¤. 그림ì—서 ê° ë§‰ëŒ€ëŠ” 정렬해야 하는 ë°°ì—´ì˜ ìš”ì†Œë¥¼ 나타낸다. ìƒë‹¨ê³¼ ë‘ ë²ˆì§¸ ìƒë‹¨ ë§‰ëŒ€ì˜ ì²« 번째 êµì°¨ì ì—서 ë°œìƒí•˜ëŠ” ê²ƒì€ ë‘ ë²ˆì§¸ 요소가 첫 번째 요소보다 ë” ë†’ì€ ìš°ì„  순위를 가지기 ë–„ë¬¸ì— ë§‰ëŒ€ë¡œ 표시ë˜ëŠ” ì´ëŸ¬í•œ 요소를 êµí™˜í•œ 것ì´ë‹¤. ì´ ë°©ë²•ì„ ë°˜ë³µí•˜ë©´ 삽입 ì •ë ¬ì´ ì™„ë£Œëœë‹¤. -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n) -* Average case performance O(n^2) +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n) +* í‰ê·  O(n^2) ###### View the algorithm in [action][insertion-toptal] From a607bb956118e5862455ad70669fdeddcef47f46 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 06:24:03 +0900 Subject: [PATCH 051/521] Update README-ko.md ~merge --- README-ko.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README-ko.md b/README-ko.md index f28bbb2c502b..6282a5bf1b55 100644 --- a/README-ko.md +++ b/README-ko.md @@ -36,15 +36,15 @@ __ì†ì„±__ ###### View the algorithm in [action][insertion-toptal] -### Merge +### Merge(합병 ì •ë ¬) ![alt text][merge-image] -From [Wikipedia][merge-wiki]: In computer science, merge sort (also commonly spelt mergesort) is an efficient, general-purpose, comparison-based sorting algorithm. Most implementations produce a stable sort, which means that the implementation preserves the input order of equal elements in the sorted output. Mergesort is a divide and conquer algorithm that was invented by John von Neumann in 1945. +From [Wikipedia][merge-wiki]: 컴퓨터 과학ì—서, 합병 ì •ë ¬ì€ íš¨ìœ¨ì ì¸, 범용ì ì¸, ë¹„êµ ê¸°ë°˜ ì •ë ¬ 알고리즘ì´ë‹¤. ëŒ€ë¶€ë¶„ì˜ êµ¬í˜„ì€ ì•ˆì •ì ì¸ 분류를 ì´ë£¨ëŠ”ë°, ì´ê²ƒì€ êµ¬í˜„ì´ ì •ë ¬ëœ ì¶œë ¥ì— ë™ì¼í•œ ìš”ì†Œì˜ ìž…ë ¥ 순서를 유지한다는 ê²ƒì„ ì˜ë¯¸í•œë‹¤. 합병 ì •ë ¬ì€ 1945ë…„ì— John von Neumannì´ ë°œëª…í•œ ë¶„í•  ì •ë³µ 알고리즘ì´ë‹¤. __Properties__ -* Worst case performance O(n log n) (typical) -* Best case performance O(n log n) -* Average case performance O(n log n) +* ìµœì•…ì˜ ì„±ëŠ¥ O(n log n) (ì¼ë°˜ì ) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) +* í‰ê·  O(n log n) ###### View the algorithm in [action][merge-toptal] From 4723e5fbe7eb877c75286be1e84c12ad0616535c Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 06:33:01 +0900 Subject: [PATCH 052/521] Update README-ko.md ~selection sort --- README-ko.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README-ko.md b/README-ko.md index 6282a5bf1b55..0173c0f0a68c 100644 --- a/README-ko.md +++ b/README-ko.md @@ -41,7 +41,7 @@ __ì†ì„±__ From [Wikipedia][merge-wiki]: 컴퓨터 과학ì—서, 합병 ì •ë ¬ì€ íš¨ìœ¨ì ì¸, 범용ì ì¸, ë¹„êµ ê¸°ë°˜ ì •ë ¬ 알고리즘ì´ë‹¤. ëŒ€ë¶€ë¶„ì˜ êµ¬í˜„ì€ ì•ˆì •ì ì¸ 분류를 ì´ë£¨ëŠ”ë°, ì´ê²ƒì€ êµ¬í˜„ì´ ì •ë ¬ëœ ì¶œë ¥ì— ë™ì¼í•œ ìš”ì†Œì˜ ìž…ë ¥ 순서를 유지한다는 ê²ƒì„ ì˜ë¯¸í•œë‹¤. 합병 ì •ë ¬ì€ 1945ë…„ì— John von Neumannì´ ë°œëª…í•œ ë¶„í•  ì •ë³µ 알고리즘ì´ë‹¤. -__Properties__ +__ì†ì„±__ * ìµœì•…ì˜ ì„±ëŠ¥ O(n log n) (ì¼ë°˜ì ) * ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) * í‰ê·  O(n log n) @@ -49,25 +49,25 @@ __Properties__ ###### View the algorithm in [action][merge-toptal] -### Quick +### Quick(퀵 ì •ë ¬) ![alt text][quick-image] -From [Wikipedia][quick-wiki]: Quicksort (sometimes called partition-exchange sort) is an efficient sorting algorithm, serving as a systematic method for placing the elements of an array in order. +From [Wikipedia][quick-wiki]: 퀵 ì •ë ¬sometimes called partition-exchange sort)ì€ íš¨ìœ¨ì ì¸ ì •ë ¬ 알고리즘으로, ë°°ì—´ì˜ ìš”ì†Œë¥¼ 순서대로 정렬하는 체계ì ì¸ 방법 ì—­í™œì„ í•œë‹¤. -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n log n) or O(n) with three-way partition -* Average case performance O(n log n) +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) or O(n) with three-way partition +* í‰ê·  O(n log n) ###### View the algorithm in [action][quick-toptal] -### Selection +### Selection(ì„ íƒ ì •ë ¬) ![alt text][selection-image] -From [Wikipedia][selection-wiki]: The algorithm divides the input list into two parts: the sublist of items already sorted, which is built up from left to right at the front (left) of the list, and the sublist of items remaining to be sorted that occupy the rest of the list. Initially, the sorted sublist is empty and the unsorted sublist is the entire input list. The algorithm proceeds by finding the smallest (or largest, depending on sorting order) element in the unsorted sublist, exchanging (swapping) it with the leftmost unsorted element (putting it in sorted order), and moving the sublist boundaries one element to the right. +From [Wikipedia][selection-wiki]: 알고리즘 ìž…ë ¥ 리스트를 ë‘ ë¶€ë¶„ìœ¼ë¡œ 나눈다 : 첫 ë¶€ë¶„ì€ ì•„ì´í…œë“¤ì´ ì´ë¯¸ 왼쪽ì—서 오른쪽으로 ì •ë ¬ë˜ì—ˆë‹¤. 그리고 ë‚¨ì€ ë¶€ë¶„ì˜ ì•„ì´í…œë“¤ì€ 나머지 í•­ëª©ì„ ì°¨ì§€í•˜ëŠ” 리스트ì´ë‹¤. 처ìŒì—는 ì •ë ¬ëœ ë¦¬ìŠ¤íŠ¸ëŠ” 공백ì´ê³  나머지가 ì „ë¶€ì´ë‹¤. 오르차순(ë˜ëŠ” 내림차순) ì•Œê³ ë¦¬ì¦˜ì€ ê°€ìž¥ ìž‘ì€ ìš”ì†Œë¥¼ ì •ë ¬ë˜ì§€ ì•Šì€ ë¦¬ìŠ¤íŠ¸ì—서 찾고 ì •ë ¬ì´ ì•ˆëœ ê°€ìž¥ 왼쪽(ì •ë ¬ëœ ë¦¬ìŠ¤íŠ¸) 리스트와 바꾼다. ì´ë ‡ê²Œ 오른쪽으로 나아간다. -__Properties__ -* Worst case performance O(n^2) +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) * Best case performance O(n^2) * Average case performance O(n^2) From cbd3ac6ea9a17728743feb292dc83aa07969728a Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 06:36:51 +0900 Subject: [PATCH 053/521] Update README-ko.md ~shell --- README-ko.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README-ko.md b/README-ko.md index 0173c0f0a68c..7cf4863b2729 100644 --- a/README-ko.md +++ b/README-ko.md @@ -68,19 +68,19 @@ From [Wikipedia][selection-wiki]: 알고리즘 ìž…ë ¥ 리스트를 ë‘ ë¶€ë¶„ìœ¼ __ì†ì„±__ * ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* Best case performance O(n^2) -* Average case performance O(n^2) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n^2) +* í‰ê·  O(n^2) ###### View the algorithm in [action][selection-toptal] -### Shell +### Shell(쉘 ì •ë ¬) ![alt text][shell-image] -From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. +From [Wikipedia][shell-wiki]: 쉘 ì •ë ¬ì€ ë©€ë¦¬ 떨어져 있는 í•­ëª©ì˜ êµí™˜ì„ 허용하는 삽입 ì¢…ë¥˜ì˜ ì¼ë°˜í™”ì´ë‹¤. ê·¸ ì•„ì´ë””어는 모든 n번째 요소가 ì •ë ¬ëœ ëª©ë¡ì„ 제공한다는 ê²ƒì„ ê³ ë ¤í•˜ì—¬ ì–´ëŠ ê³³ì—서든지 시작하ë„ë¡ ìš”ì†Œì˜ ëª©ë¡ì„ 배열하는 것ì´ë‹¤. ì´ëŸ¬í•œ 목ë¡ì€ h-sorted로 알려져 있다. 마찬가지로, ê°ê° 개별ì ìœ¼ë¡œ ì •ë ¬ëœ h ì¸í„°ë¦¬ë¸Œ 목ë¡ìœ¼ë¡œ ê°„ì£¼ë  ìˆ˜ 있다. -__Properties__ -* Worst case performance O(nlog2 2n) -* Best case performance O(n log n) +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(nlog2 2n) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) * Average case performance depends on gap sequence ###### View the algorithm in [action][shell-toptal] From 23f0342499a78119b42710fb3b80ebb0b425d708 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 06:38:43 +0900 Subject: [PATCH 054/521] Update README.md fix word --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d08658198c6..3d589a2f79c2 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ __Properties__ ###### View the algorithm in [action][shell-toptal] -### Time-Compexity Graphs +### Time-Complexity Graphs Comparing the complexity of sorting algorithms (Bubble Sort, Insertion Sort, Selection Sort) From c3bce80b14c85580f23beda2664d00c0b5b92118 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 07:32:53 +0900 Subject: [PATCH 055/521] Update README-ko.md ~linear sesarch --- README-ko.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README-ko.md b/README-ko.md index 7cf4863b2729..058705ca938b 100644 --- a/README-ko.md +++ b/README-ko.md @@ -85,29 +85,29 @@ __ì†ì„±__ ###### View the algorithm in [action][shell-toptal] -### Time-Compexity Graphs +### 시간 복잡성 그래프 -Comparing the complexity of sorting algorithms (Bubble Sort, Insertion Sort, Selection Sort) +ì •ë ¬ ì•Œê³ ë¦¬ì¦˜ì˜ ë³µìž¡ì„± ë¹„êµ (버블 ì •ë ¬, 삽입 ì •ë ¬, ì„ íƒ ì •ë ¬) -[Complexity Graphs](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) +[복잡성 그래프](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) ---------------------------------------------------------------------------------- -## Search Algorithms +## 검색 알고리즘 -### Linear +### Linear (선형 íƒìƒ‰) ![alt text][linear-image] -From [Wikipedia][linear-wiki]: linear search or sequential search is a method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched. - The linear search runs in at the worst linear time and makes at most n comparisons, where n is the length of the list. +From [Wikipedia][linear-wiki]: 선형 íƒìƒ‰ ë˜ëŠ” 순차 íƒìƒ‰ì€ ëª©ë¡ ë‚´ì—서 ëª©í‘œê°’ì„ ì°¾ëŠ” 방법ì´ë‹¤. ì¼ì¹˜ í•­ëª©ì´ ë°œê²¬ë˜ê±°ë‚˜ 모든 요소가 íƒìƒ‰ë  때까지 목ë¡ì˜ ê° ìš”ì†Œì— ëŒ€í•´ ëª©í‘œê°’ì„ ìˆœì°¨ì ìœ¼ë¡œ 검사한다. + 선형 ê²€ìƒ‰ì€ ìµœì•…ì˜ ì„ í˜• 시간으로 실행ë˜ë©° 최대 nê°œì˜ ë¹„êµì—서 ì´ë£¨ì–´ì§„다. 여기서 nì€ ëª©ë¡ì˜ 길ì´ë‹¤. -__Properties__ -* Worst case performance O(n) -* Best case performance O(1) -* Average case performance O(n) -* Worst case space complexity O(1) iterative +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n) +* ìµœê³ ì˜ ì„±ëŠ¥ O(1) +* í‰ê·  O(n) +* ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) iterative -### Binary +### Binary (ì´ì§„ íƒìƒ‰) ![alt text][binary-image] From [Wikipedia][binary-wiki]: Binary search, also known as half-interval search or logarithmic search, is a search algorithm that finds the position of a target value within a sorted array. It compares the target value to the middle element of the array; if they are unequal, the half in which the target cannot lie is eliminated and the search continues on the remaining half until it is successful. From 377d9de301e08003a4b3458dcbd97264ec3f5327 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 07:38:38 +0900 Subject: [PATCH 056/521] Update README-ko.md ~binary search --- README-ko.md | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/README-ko.md b/README-ko.md index 058705ca938b..fb2525c32a9c 100644 --- a/README-ko.md +++ b/README-ko.md @@ -110,20 +110,13 @@ __ì†ì„±__ ### Binary (ì´ì§„ íƒìƒ‰) ![alt text][binary-image] -From [Wikipedia][binary-wiki]: Binary search, also known as half-interval search or logarithmic search, is a search algorithm that finds the position of a target value within a sorted array. It compares the target value to the middle element of the array; if they are unequal, the half in which the target cannot lie is eliminated and the search continues on the remaining half until it is successful. +From [Wikipedia][binary-wiki]: ì´ì§„ íƒìƒ‰, (also known as half-interval search or logarithmic search), ì€ ì •ë ¬ëœ ë°°ì—´ ë‚´ì—서 ëª©í‘œê°’ì˜ ìœ„ì¹˜ë¥¼ 찾는 검색 알고리즘ì´ë‹¤. ëª©í‘œê°’ì„ ë°°ì—´ì˜ ì¤‘ê°„ 요소와 비êµí•œë‹¤; 만약 ëª©í‘œê°’ì´ ë™ì¼í•˜ì§€ 않으면, ëª©í‘œë¬¼ì˜ ì ˆë°˜ì´ ì œê±°ë˜ê³  ê²€ìƒ‰ì´ ì„±ê³µí•  때까지 나머지 절반ì—서 게ì†ëœë‹¤. -__Properties__ -* Worst case performance O(log n) -* Best case performance O(1) -* Average case performance O(log n) -* Worst case space complexity O(1) - -From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. - -__Properties__ -* Worst case performance O(nlog2 2n) -* Best case performance O(n log n) -* Average case performance depends on gap sequence +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(log n) +* ìµœê³ ì˜ ì„±ëŠ¥ O(1) +* í‰ê·  O(log n) +* ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) ###### View the algorithm in [action][shell-toptal] From 88f992f6021bebf73883b4b571f27a751b8f584f Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 07:45:45 +0900 Subject: [PATCH 057/521] Update README-ko.md --- README-ko.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README-ko.md b/README-ko.md index fb2525c32a9c..8c2e72928aa6 100644 --- a/README-ko.md +++ b/README-ko.md @@ -118,7 +118,6 @@ __ì†ì„±__ * í‰ê·  O(log n) * ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) -###### View the algorithm in [action][shell-toptal] [bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort [bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort @@ -152,9 +151,9 @@ __ì†ì„±__ -------------------------------------------------------------------- -## Links to the rest of the algorithms +## 나머지 ì•Œê³ ë¦¬ì¦˜ì— ëŒ€í•œ ë§í¬ -Conversions | Dynamic Programming |Ciphers|Miscellaneous| +전환 | 다ì´ë‚˜ë¯¹í”„로그래ë°(DP) |암호|ê·¸ 외 것들| ----------- |----------------------------------------------------------------|-------|-------------| [Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](Dynamic%20Programming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| [Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](Dynamic%20Programming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| From 1d531d1ca5782f2c41bbc886ce2b72ec108e4114 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 07:46:34 +0900 Subject: [PATCH 058/521] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 3d589a2f79c2..ee9b9e9e899e 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,6 @@ __Properties__ * Best case performance O(n log n) * Average case performance depends on gap sequence -###### View the algorithm in [action][shell-toptal] [bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort [bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort From 68e704d3922435048e7ce585a1ad5237c663241d Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 07:47:36 +0900 Subject: [PATCH 059/521] Update README.md delete duplicate description about shell sort --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index ee9b9e9e899e..9ac45b9ba1b2 100644 --- a/README.md +++ b/README.md @@ -119,14 +119,6 @@ __Properties__ * Average case performance O(log n) * Worst case space complexity O(1) -From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. - -__Properties__ -* Worst case performance O(nlog2 2n) -* Best case performance O(n log n) -* Average case performance depends on gap sequence - - [bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort [bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort [bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" From 4f0e0edbfb10fbc9374056b210713c0b285cb1de Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 08:04:59 +0900 Subject: [PATCH 060/521] Update README-ko.md tranlation finish --- README-ko.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README-ko.md b/README-ko.md index 8c2e72928aa6..0c15ded78e5f 100644 --- a/README-ko.md +++ b/README-ko.md @@ -165,21 +165,21 @@ __ì†ì„±__ [Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](Dynamic%20Programming/RodCutting.java)| and much more...| and more...| -### Data Structures -Graphs|Heaps|Lists|Queues| +### ìžë£Œ 구조 +그래프|íž™|리스트|í| ------|-----|-----|------| -[BFS](DataStructures/Graphs/BFS.java)|[Empty Heap Exception](DataStructures/Heaps/EmptyHeapException.java)|[Circle Linked List](DataStructures/Lists/CircleLinkedList.java)|[Generic Array List Queue](DataStructures/Queues/GenericArrayListQueue.java)| -[DFS](DataStructures/Graphs/DFS.java)|[Heap](DataStructures/Heaps/Heap.java)|[Doubly Linked List](DataStructures/Lists/DoublyLinkedList.java)|[Queues](DataStructures/Queues/Queues.java)| -[Graphs](DataStructures/Graphs/Graphs.java)|[Heap Element](DataStructures/Heaps/HeapElement.java)|[Singly Linked List](DataStructures/Lists/SinglyLinkedList.java)| -[Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](Data%Structures/Heaps/MaxHeap.java)| -[Matrix Graphs](DataStructures/Graphs/MatrixGraphs.java)|[Min Heap](DataStructures/Heaps/MinHeap.java)| -[PrimMST](DataStructures/Graphs/PrimMST.java)| - -Stacks|Trees| +[너비우선íƒìƒ‰](DataStructures/Graphs/BFS.java)|[빈 íž™ 예외처리](DataStructures/Heaps/EmptyHeapException.java)|[ì›í˜• 연결리스트](DataStructures/Lists/CircleLinkedList.java)|[제너릭 ì–´ë ˆì´ ë¦¬ìŠ¤íŠ¸ í](DataStructures/Queues/GenericArrayListQueue.java)| +[깊ì´ìš°ì„ íƒìƒ‰](DataStructures/Graphs/DFS.java)|[íž™](DataStructures/Heaps/Heap.java)|[ì´ì¤‘ 연결리스트](DataStructures/Lists/DoublyLinkedList.java)|[í](DataStructures/Queues/Queues.java)| +[그래프](DataStructures/Graphs/Graphs.java)|[íž™ 요소](DataStructures/Heaps/HeapElement.java)|[단순 연결리스트](DataStructures/Lists/SinglyLinkedList.java)| +[í¬ë£¨ìŠ¤ì¹¼ 알고리즘](DataStructures/Graphs/KruskalsAlgorithm.java)|[최대힙](Data%Structures/Heaps/MaxHeap.java)| +[행렬 그래프](DataStructures/Graphs/MatrixGraphs.java)|[최소힙](DataStructures/Heaps/MinHeap.java)| +[프림 최소신장트리](DataStructures/Graphs/PrimMST.java)| + +스íƒ|트리| ------|-----| -[Node Stack](DataStructures/Stacks/NodeStack.java)|[AVL Tree](DataStructures/Trees/AVLTree.java)| -[Stack of Linked List](DataStructures/Stacks/StackOfLinkedList.java)|[Binary Tree](DataStructures/Trees/BinaryTree.java)| -[Stacks](DataStructures/Stacks/Stacks.java)|And much more...| +[노드 스íƒ](DataStructures/Stacks/NodeStack.java)|[AVL 트리](DataStructures/Trees/AVLTree.java)| +[연결리스트 스íƒ](DataStructures/Stacks/StackOfLinkedList.java)|[ì´ì§„ 트리](DataStructures/Trees/BinaryTree.java)| +[스íƒ](DataStructures/Stacks/Stacks.java)|And much more...| * [Bags](DataStructures/Bags/Bag.java) * [Buffer](DataStructures/Buffers/CircularBuffer.java) From 15e1ae94298310537c3bbe21083cb2acf44a77d7 Mon Sep 17 00:00:00 2001 From: SunggyuLee <37533101+SunggyuLee@users.noreply.github.com> Date: Sun, 16 Dec 2018 17:17:46 +0900 Subject: [PATCH 061/521] Update README.md duplicate description about shell sort and deleted one. --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index 959f676eafe2..f0fcdd663cbe 100644 --- a/README.md +++ b/README.md @@ -119,14 +119,6 @@ __Properties__ * Average case performance O(log n) * Worst case space complexity O(1) -### Shell -From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. - -__Properties__ -* Worst case performance O(nlog2 2n) -* Best case performance O(n log n) -* Average case performance depends on gap sequence - ##### View the algorithm in [action][shell-toptal] [bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort From eb67cca42b307b3cd46a51a3cea687851339028e Mon Sep 17 00:00:00 2001 From: Mihir Hindocha Date: Sun, 16 Dec 2018 02:44:01 -0600 Subject: [PATCH 062/521] update README.md The link to the HashMap.java was broken. Directory changed from DataStructures/Hashmap/HashMap.java to DataStructures/Hashmap/Hashing/HashMap.java --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f0fcdd663cbe..a8eb9970cfae 100644 --- a/README.md +++ b/README.md @@ -185,5 +185,5 @@ Stacks|Trees| * [Bags](DataStructures/Bags/Bag.java) * [Buffer](DataStructures/Buffers/CircularBuffer.java) -* [HashMap](DataStructures/HashMap/HashMap.java) +* [HashMap](DataStructures/HashMap/Hashing/HashMap.java) * [Matrix](DataStructures/Matrix/Matrix.java) From 4f07881c425585bbe1fae9b2438146bfe9fd07c1 Mon Sep 17 00:00:00 2001 From: SunggyuLee Date: Wed, 19 Dec 2018 23:02:39 +0900 Subject: [PATCH 063/521] recommand scanner method --- Others/Armstrong.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Others/Armstrong.java b/Others/Armstrong.java index 9267d9eaf648..9bdb31918d19 100644 --- a/Others/Armstrong.java +++ b/Others/Armstrong.java @@ -9,10 +9,10 @@ * */ public class Armstrong { + static Scanner scan; public static void main(String[] args) { - Scanner scan = new Scanner(System.in); - System.out.println("please enter the number"); - int n = scan.nextInt(); + scan = new Scanner(System.in); + int n = inputInt("please enter the number"); boolean isArmstrong = checkIfANumberIsAmstrongOrNot(n); if (isArmstrong) { System.out.println("the number is armstrong"); @@ -42,6 +42,9 @@ public static boolean checkIfANumberIsAmstrongOrNot(int number) { } else { return false; } - + } + private static int inputInt(String string) { + System.out.print(string); + return Integer.parseInt(scan.nextLine()); } } \ No newline at end of file From 42bed5719557512012a13b23b691a571be8ffc86 Mon Sep 17 00:00:00 2001 From: SunggyuLee Date: Wed, 19 Dec 2018 23:24:50 +0900 Subject: [PATCH 064/521] add Ford_Fulkerson Algorithm using dp --- Dynamic Programming/Ford_Fulkerson.java | 71 +++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Dynamic Programming/Ford_Fulkerson.java diff --git a/Dynamic Programming/Ford_Fulkerson.java b/Dynamic Programming/Ford_Fulkerson.java new file mode 100644 index 000000000000..534a9dc9a7df --- /dev/null +++ b/Dynamic Programming/Ford_Fulkerson.java @@ -0,0 +1,71 @@ +import java.util.LinkedList; +import java.util.Queue; +import java.util.Scanner; +import java.util.Vector; + +public class Ford_Fulkerson { + Scanner scan = new Scanner(System.in); + final static int INF = 987654321; + static int V; // edges + static int[][] capacity, flow; + + public static void main(String[] args) { + System.out.println("V : 6"); + V = 6; + capacity = new int[V][V]; + + capacity[0][1] = 12; + capacity[0][3] = 13; + capacity[1][2] = 10; + capacity[2][3] = 13; + capacity[2][4] = 3; + capacity[2][5] = 15; + capacity[3][2] = 7; + capacity[3][4] = 15; + capacity[4][5] = 17; + + System.out.println("Max capacity in networkFlow : " + networkFlow(0, 5)); + } + + private static int networkFlow(int source, int sink) { + flow = new int[V][V]; + int totalFlow = 0; + while (true) { + Vector parent = new Vector<>(V); + for (int i = 0; i < V; i++) + parent.add(-1); + Queue q = new LinkedList<>(); + parent.set(source, source); + q.add(source); + while (!q.isEmpty() && parent.get(sink) == -1) { + int here = q.peek(); + q.poll(); + for (int there = 0; there < V; ++there) + if (capacity[here][there] - flow[here][there] > 0 && parent.get(there) == -1) { + q.add(there); + parent.set(there, here); + } + } + if (parent.get(sink) == -1) + break; + + int amount = INF; + String printer = "path : "; + StringBuilder sb = new StringBuilder(); + for (int p = sink; p != source; p = parent.get(p)) { + amount = Math.min(capacity[parent.get(p)][p] - flow[parent.get(p)][p], amount); + sb.append(p + "-"); + } + sb.append(source); + for (int p = sink; p != source; p = parent.get(p)) { + flow[parent.get(p)][p] += amount; + flow[p][parent.get(p)] -= amount; + } + totalFlow += amount; + printer += sb.reverse() + " / max flow : " + totalFlow; + System.out.println(printer); + } + + return totalFlow; + } +} From 2da7d89123520702c38fbbcb5fee53f88ee2152a Mon Sep 17 00:00:00 2001 From: SunggyuLee Date: Wed, 19 Dec 2018 23:42:15 +0900 Subject: [PATCH 065/521] add Matrix chain multiplication algorithm --- .../MatrixChainMultiplication.java | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 Dynamic Programming/MatrixChainMultiplication.java diff --git a/Dynamic Programming/MatrixChainMultiplication.java b/Dynamic Programming/MatrixChainMultiplication.java new file mode 100644 index 000000000000..b22312355aec --- /dev/null +++ b/Dynamic Programming/MatrixChainMultiplication.java @@ -0,0 +1,120 @@ +import java.util.ArrayList; +import java.util.Scanner; + +public class MatrixChainMultiplicationTest { + private static Scanner scan = new Scanner(System.in); + private static ArrayList mArray = new ArrayList<>(); + private static int size; + private static int[][] m; + private static int[][] s; + private static int[] p; + + public static void main(String[] args) { + int count = 1; + while(true) { + String [] mSize = input("input size of matrix A("+count+") ( ex. 10 20 ) : "); + int col = Integer.parseInt(mSize[0]); + if (col==0) break; + int row = Integer.parseInt(mSize[1]); + + Matrix matrix = new Matrix(count, col, row); + mArray.add(matrix); + count++; + } + for(Matrix m : mArray) { + System.out.format("A(%d) = %2d x %2d\n", m.count(), m.col(), m.row()); + } + + size = mArray.size(); + m = new int[size + 1][size + 1]; + s = new int[size + 1][size + 1]; + p = new int[size + 1]; + + for (int i=0; i Date: Fri, 21 Dec 2018 09:51:26 +0800 Subject: [PATCH 066/521] Update MatrixChainMultiplication.java --- .../MatrixChainMultiplication.java | 240 +++++++++--------- 1 file changed, 127 insertions(+), 113 deletions(-) diff --git a/Dynamic Programming/MatrixChainMultiplication.java b/Dynamic Programming/MatrixChainMultiplication.java index b22312355aec..d84ecf2299b6 100644 --- a/Dynamic Programming/MatrixChainMultiplication.java +++ b/Dynamic Programming/MatrixChainMultiplication.java @@ -1,120 +1,134 @@ import java.util.ArrayList; +import java.util.Arrays; import java.util.Scanner; -public class MatrixChainMultiplicationTest { - private static Scanner scan = new Scanner(System.in); - private static ArrayList mArray = new ArrayList<>(); - private static int size; - private static int[][] m; - private static int[][] s; - private static int[] p; - - public static void main(String[] args) { - int count = 1; - while(true) { - String [] mSize = input("input size of matrix A("+count+") ( ex. 10 20 ) : "); - int col = Integer.parseInt(mSize[0]); - if (col==0) break; - int row = Integer.parseInt(mSize[1]); - - Matrix matrix = new Matrix(count, col, row); - mArray.add(matrix); - count++; - } - for(Matrix m : mArray) { - System.out.format("A(%d) = %2d x %2d\n", m.count(), m.col(), m.row()); - } - - size = mArray.size(); - m = new int[size + 1][size + 1]; - s = new int[size + 1][size + 1]; - p = new int[size + 1]; - - for (int i=0; i mArray = new ArrayList<>(); + private static int size; + private static int[][] m; + private static int[][] s; + private static int[] p; + + public static void main(String[] args) { + int count = 1; + while (true) { + String[] mSize = input("input size of matrix A(" + count + ") ( ex. 10 20 ) : "); + int col = Integer.parseInt(mSize[0]); + if (col == 0) break; + int row = Integer.parseInt(mSize[1]); + + Matrix matrix = new Matrix(count, col, row); + mArray.add(matrix); + count++; + } + for (Matrix m : mArray) { + System.out.format("A(%d) = %2d x %2d\n", m.count(), m.col(), m.row()); + } + + size = mArray.size(); + m = new int[size + 1][size + 1]; + s = new int[size + 1][size + 1]; + p = new int[size + 1]; + + for (int i = 0; i < size + 1; i++) { + Arrays.fill(m[i], -1); + Arrays.fill(s[i], -1); + } + + for (int i = 0; i < p.length; i++) { + p[i] = i == 0 ? mArray.get(i).col() : mArray.get(i - 1).row(); + } + + matrixChainOrder(); + for (int i = 0; i < size; i++) { + System.out.print("-------"); + } + System.out.println(); + printArray(m); + for (int i = 0; i < size; i++) { + System.out.print("-------"); + } + System.out.println(); + printArray(s); + for (int i = 0; i < size; i++) { + System.out.print("-------"); + } + System.out.println(); + + System.out.println("Optimal solution : " + m[1][size]); + System.out.print("Optimal parens : "); + printOptimalParens(1, size); + } + + private static void printOptimalParens(int i, int j) { + if (i == j) { + System.out.print("A" + i); + } else { + System.out.print("("); + printOptimalParens(i, s[i][j]); + printOptimalParens(s[i][j] + 1, j); + System.out.print(")"); + } + } + + private static void printArray(int[][] array) { + for (int i = 1; i < size + 1; i++) { + for (int j = 1; j < size + 1; j++) { + System.out.print(String.format("%7d", array[i][j])); + } + System.out.println(); + } + } + + private static void matrixChainOrder() { + for (int i = 1; i < size + 1; i++) { + m[i][i] = 0; + } + + for (int l = 2; l < size + 1; l++) { + for (int i = 1; i < size - l + 2; i++) { + int j = i + l - 1; + m[i][j] = Integer.MAX_VALUE; + + for (int k = i; k < j; k++) { + int q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j]; + if (q < m[i][j]) { + m[i][j] = q; + s[i][j] = k; + } + } + } + } + } + + private static String[] input(String string) { + System.out.print(string); + return (scan.nextLine().split(" ")); + } } + class Matrix { - private int count; - private int col; - private int row; - public Matrix(int count, int col, int row) { - this.count = count; - this.col = col; - this.row = row; - } - public int count() { return this.count; } - public int col() { return this.col; } - public int row() { return this.row; } + private int count; + private int col; + private int row; + + Matrix(int count, int col, int row) { + this.count = count; + this.col = col; + this.row = row; + } + + int count() { + return count; + } + + int col() { + return col; + } + + int row() { + return row; + } } From a5bf69fcbd6eff2858581d07b013d79ad68fa0ce Mon Sep 17 00:00:00 2001 From: jasonptong <43040084+jasonptong@users.noreply.github.com> Date: Sat, 22 Dec 2018 17:27:31 -0800 Subject: [PATCH 067/521] Update Palindrome.java Test cases where String x is null or has a length of 0 or 1 for FirstWay method. --- Others/Palindrome.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Others/Palindrome.java b/Others/Palindrome.java index 0bbddb7544c8..52062c6c4666 100644 --- a/Others/Palindrome.java +++ b/Others/Palindrome.java @@ -1,6 +1,6 @@ class Palindrome { - private String reverseString(String x){ //*helper method + private String reverseString(String x){ //*helper method String output = ""; for(int i=x.length()-1; i>=0; i--){ output += x.charAt(i); //addition of chars create String @@ -10,7 +10,9 @@ private String reverseString(String x){ //*helper method public Boolean FirstWay(String x){ //*palindrome method, returns true if palindrome - return (x.equalsIgnoreCase(reverseString(x))); + if(x == null || x.length() <= 1) + return true; + return (x.equalsIgnoreCase(reverseString(x))); } public boolean SecondWay(String x) From 2d383bf48e7f058ec6d20b668e7a89edb3d51d43 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Mon, 24 Dec 2018 10:01:45 +0800 Subject: [PATCH 068/521] Update Palindrome.java --- Others/Palindrome.java | 45 +++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/Others/Palindrome.java b/Others/Palindrome.java index 52062c6c4666..d482dfd01bce 100644 --- a/Others/Palindrome.java +++ b/Others/Palindrome.java @@ -1,28 +1,23 @@ class Palindrome { - - private String reverseString(String x){ //*helper method - String output = ""; - for(int i=x.length()-1; i>=0; i--){ - output += x.charAt(i); //addition of chars create String - } - return output; - } - - - public Boolean FirstWay(String x){ //*palindrome method, returns true if palindrome - if(x == null || x.length() <= 1) - return true; - return (x.equalsIgnoreCase(reverseString(x))); - } - - public boolean SecondWay(String x) - { - if (x.length() == 0 || x.length() == 1) - return true; - if (x.charAt(0) != x.charAt(x.length() - 1)) - return false; + private String reverseString(String x) { // *helper method + StringBuilder output = new StringBuilder(x); + return output.reverse().toString(); + } - return SecondWay(x.substring(1 , x.length() - 1)); - } - } + public boolean FirstWay(String x) { // *palindrome method, returns true if palindrome + if (x == null || x.length() <= 1) + return true; + return x.equalsIgnoreCase(reverseString(x)); + } + + public boolean SecondWay(String x) { + if (x.length() == 0 || x.length() == 1) + return true; + + if (x.charAt(0) != x.charAt(x.length() - 1)) + return false; + + return SecondWay(x.substring(1, x.length() - 1)); + } +} From 4bbc39f93b6f038182f2f4217e966d209f8cac62 Mon Sep 17 00:00:00 2001 From: Hayder Hassan Date: Fri, 4 Jan 2019 22:10:02 +0000 Subject: [PATCH 069/521] Move code for Stack Array from Stacks.java to StackArray.java --- DataStructures/Stacks/StackArray.java | 146 ++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 DataStructures/Stacks/StackArray.java diff --git a/DataStructures/Stacks/StackArray.java b/DataStructures/Stacks/StackArray.java new file mode 100644 index 000000000000..795958e8a0d7 --- /dev/null +++ b/DataStructures/Stacks/StackArray.java @@ -0,0 +1,146 @@ +/** + * This class implements a Stack using a regular array. + * + * A stack is exactly what it sounds like. An element gets added to the top of + * the stack and only the element on the top may be removed. This is an example + * of an array implementation of a Stack. So an element can only be added/removed + * from the end of the array. In theory stack have no fixed size, but with an + * array implementation it does. + * + * @author Unknown + * + */ +public class StackArray{ + + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + StackArray myStackArray = new StackArray(4); //Declare a stack of maximum size 4 + //Populate the stack + myStackArray.push(5); + myStackArray.push(8); + myStackArray.push(2); + myStackArray.push(9); + + System.out.println("*********************Stack Array Implementation*********************"); + System.out.println(myStackArray.isEmpty()); //will print false + System.out.println(myStackArray.isFull()); //will print true + System.out.println(myStackArray.peek()); //will print 9 + System.out.println(myStackArray.pop()); //will print 9 + System.out.println(myStackArray.peek()); // will print 2 + } + + /** The max size of the Stack */ + private int maxSize; + + /** The array representation of the Stack */ + private int[] stackArray; + + /** The top of the stack */ + private int top; + + /** + * Constructor + * + * @param size Size of the Stack + */ + public StackArray(int size){ + maxSize = size; + stackArray = new int[maxSize]; + top = -1; + } + + /** + * Adds an element to the top of the stack + * + * @param value The element added + */ + public void push(int value){ + if(!isFull()){ //Checks for a full stack + top++; + stackArray[top] = value; + }else{ + resize(maxSize*2); + push(value);// don't forget push after resizing + } + } + + /** + * Removes the top element of the stack and returns the value you've removed + * + * @return value popped off the Stack + */ + public int pop(){ + if(!isEmpty()){ //Checks for an empty stack + return stackArray[top--]; + } + + if(top < maxSize/4){ + resize(maxSize/2); + return pop();// don't forget pop after resizing + } + else{ + System.out.println("The stack is already empty"); + return -1; + } + } + + /** + * Returns the element at the top of the stack + * + * @return element at the top of the stack + */ + public int peek(){ + if(!isEmpty()){ //Checks for an empty stack + return stackArray[top]; + }else{ + System.out.println("The stack is empty, cant peek"); + return -1; + } + } + + private void resize(int newSize){ + //private int[] transferArray = new int[newSize]; we can't put modifires here ! + int[] transferArray = new int[newSize]; + + //for(int i = 0; i < stackArray.length(); i++){ the length isn't a method . + for(int i = 0; i < stackArray.length; i++){ + transferArray[i] = stackArray[i]; + stackArray = transferArray; + } + maxSize = newSize; + } + + /** + * Returns true if the stack is empty + * + * @return true if the stack is empty + */ + public boolean isEmpty(){ + return(top == -1); + } + + /** + * Returns true if the stack is full + * + * @return true if the stack is full + */ + public boolean isFull(){ + return(top+1 == maxSize); + } + + /** + * Deletes everything in the Stack + * + * Doesn't delete elements in the array + * but if you call push method after calling + * makeEmpty it will overwrite previous + * values + */ + public void makeEmpty(){ //Doesn't delete elements in the array but if you call + top = -1; //push method after calling makeEmpty it will overwrite previous values + } +} \ No newline at end of file From bbbf63c9a1303aabbde7a5bd060b466d12349339 Mon Sep 17 00:00:00 2001 From: Hayder Hassan Date: Fri, 4 Jan 2019 22:22:08 +0000 Subject: [PATCH 070/521] Move code for Stack ArrayList from Stacks.java to StackArrayList.java --- DataStructures/Stacks/StackArrayList.java | 94 +++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 DataStructures/Stacks/StackArrayList.java diff --git a/DataStructures/Stacks/StackArrayList.java b/DataStructures/Stacks/StackArrayList.java new file mode 100644 index 000000000000..5093b76f07b7 --- /dev/null +++ b/DataStructures/Stacks/StackArrayList.java @@ -0,0 +1,94 @@ +import java.util.ArrayList; + +/** + * This class implements a Stack using an ArrayList. + * + * A stack is exactly what it sounds like. An element gets added to the top of + * the stack and only the element on the top may be removed. + * + * This is an ArrayList Implementation of a stack, where size is not + * a problem we can extend the stack as much as we want. + * + * @author Unknown + * + */ +public class StackArrayList{ + + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + StackArrayList myStackArrayList = new StackArrayList(); //Declare a stack of maximum size 4 + //Populate the stack + myStackArrayList.push(5); + myStackArrayList.push(8); + myStackArrayList.push(2); + myStackArrayList.push(9); + + System.out.println("*********************Stack List Implementation*********************"); + System.out.println(myStackArrayList.isEmpty()); //will print false + System.out.println(myStackArrayList.peek()); //will print 9 + System.out.println(myStackArrayList.pop()); //will print 9 + System.out.println(myStackArrayList.peek()); // will print 2 + System.out.println(myStackArrayList.pop()); //will print 2 + } + + /** ArrayList representation of the stack */ + private ArrayList stackList; + + /** + * Constructor + */ + public StackArrayList(){ + stackList = new ArrayList<>(); + } + + /** + * Adds value to the end of list which + * is the top for stack + * + * @param value value to be added + */ + public void push(int value){ + stackList.add(value); + } + + /** + * Pops last element of list which is indeed + * the top for Stack + * + * @return Element popped + */ + public int pop(){ + + if(!isEmpty()){ // checks for an empty Stack + + int popValue=stackList.get(stackList.size()-1); + stackList.remove(stackList.size()-1); //removes the poped element from the list + return popValue; + } + + System.out.print("The stack is already empty "); + return -1; + } + + /** + * Checks for empty Stack + * + * @return true if stack is empty + */ + public boolean isEmpty(){ + return stackList.isEmpty(); + } + + /** + * Top element of stack + * + * @return top element of stack + */ + public int peek(){ + return stackList.get(stackList.size()-1); + } +} \ No newline at end of file From 787a9fa0caab16e40ca4380abc6803b98d03f26b Mon Sep 17 00:00:00 2001 From: Hayder Hassan Date: Fri, 4 Jan 2019 22:29:37 +0000 Subject: [PATCH 071/521] Update link to StackArray and StackArrayList classes The Stacks link in the Korean readme takes user to the Stacks directory rather than a specific Java file. Will need a Korean translator to help with the new links. --- README-ko.md | 2 +- README.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README-ko.md b/README-ko.md index 0c15ded78e5f..c53868cc1310 100644 --- a/README-ko.md +++ b/README-ko.md @@ -179,7 +179,7 @@ and much more...| and more... ------|-----| [노드 스íƒ](DataStructures/Stacks/NodeStack.java)|[AVL 트리](DataStructures/Trees/AVLTree.java)| [연결리스트 스íƒ](DataStructures/Stacks/StackOfLinkedList.java)|[ì´ì§„ 트리](DataStructures/Trees/BinaryTree.java)| -[스íƒ](DataStructures/Stacks/Stacks.java)|And much more...| +[스íƒ](DataStructures/Stacks)|And much more...| * [Bags](DataStructures/Bags/Bag.java) * [Buffer](DataStructures/Buffers/CircularBuffer.java) diff --git a/README.md b/README.md index a8eb9970cfae..08c79b28baf3 100644 --- a/README.md +++ b/README.md @@ -181,7 +181,8 @@ Stacks|Trees| ------|-----| [Node Stack](DataStructures/Stacks/NodeStack.java)|[AVL Tree](DataStructures/Trees/AVLTree.java)| [Stack of Linked List](DataStructures/Stacks/StackOfLinkedList.java)|[Binary Tree](DataStructures/Trees/BinaryTree.java)| -[Stacks](DataStructures/Stacks/Stacks.java)|And much more...| +[Array Stack](DataStructures/Stacks/StackArray.java)|And much more...| +[ArrayList Stack](DataStructures/Stacks/StackArrayList.java)|| * [Bags](DataStructures/Bags/Bag.java) * [Buffer](DataStructures/Buffers/CircularBuffer.java) From 29b7ad43d10c3ed63a1974a27bc2dc9b432ed8e1 Mon Sep 17 00:00:00 2001 From: Hayder Hassan Date: Fri, 4 Jan 2019 22:36:37 +0000 Subject: [PATCH 072/521] Remove Stacks.java which has been replaced by two new files StackArray.java & StackArrayList.java --- DataStructures/Stacks/Stacks.java | 240 ------------------------------ 1 file changed, 240 deletions(-) delete mode 100644 DataStructures/Stacks/Stacks.java diff --git a/DataStructures/Stacks/Stacks.java b/DataStructures/Stacks/Stacks.java deleted file mode 100644 index 2861ef5c17e8..000000000000 --- a/DataStructures/Stacks/Stacks.java +++ /dev/null @@ -1,240 +0,0 @@ -import java.util.ArrayList; - -/** - * This class implements a Stack using two different implementations. - * Stack is used with a regular array and Stack2 uses an ArrayList. - * - * A stack is exactly what it sounds like. An element gets added to the top of - * the stack and only the element on the top may be removed. This is an example - * of an array implementation of a Stack. So an element can only be added/removed - * from the end of the array. In theory stack have no fixed size, but with an - * array implementation it does. - * - * @author Unknown - * - */ -class Stack{ - /** The max size of the Stack */ - private int maxSize; - /** The array representation of the Stack */ - private int[] stackArray; - /** The top of the stack */ - private int top; - - /** - * Constructor - * - * @param size Size of the Stack - */ - public Stack(int size){ - maxSize = size; - stackArray = new int[maxSize]; - top = -1; - } - - /** - * Adds an element to the top of the stack - * - * @param value The element added - */ - public void push(int value){ - if(!isFull()){ //Checks for a full stack - top++; - stackArray[top] = value; - }else{ - resize(maxSize*2); - push(value);// don't forget push after resizing - } - } - - /** - * Removes the top element of the stack and returns the value you've removed - * - * @return value popped off the Stack - */ - public int pop(){ - if(!isEmpty()){ //Checks for an empty stack - return stackArray[top--]; - } - - if(top < maxSize/4){ - resize(maxSize/2); - return pop();// don't forget pop after resizing - } - else{ - System.out.println("The stack is already empty"); - return -1; - } - } - - /** - * Returns the element at the top of the stack - * - * @return element at the top of the stack - */ - public int peek(){ - if(!isEmpty()){ //Checks for an empty stack - return stackArray[top]; - }else{ - System.out.println("The stack is empty, cant peek"); - return -1; - } - } - - private void resize(int newSize){ - //private int[] transferArray = new int[newSize]; we can't put modifires here ! - int[] transferArray = new int[newSize]; - - //for(int i = 0; i < stackArray.length(); i++){ the length isn't a method . - for(int i = 0; i < stackArray.length; i++){ - transferArray[i] = stackArray[i]; - stackArray = transferArray; - } - maxSize = newSize; - } - - /** - * Returns true if the stack is empty - * - * @return true if the stack is empty - */ - public boolean isEmpty(){ - return(top == -1); - } - - /** - * Returns true if the stack is full - * - * @return true if the stack is full - */ - public boolean isFull(){ - return(top+1 == maxSize); - } - - /** - * Deletes everything in the Stack - * - * Doesn't delete elements in the array - * but if you call push method after calling - * makeEmpty it will overwrite previous - * values - */ - public void makeEmpty(){ //Doesn't delete elements in the array but if you call - top = -1; //push method after calling makeEmpty it will overwrite previous values - } -} - -/** - * This is an ArrayList Implementation of stack, Where size is not - * a problem we can extend the stack as much as we want. - * - * @author Unknown - * - */ -class Stack2{ - /** ArrayList representation of the stack */ - ArrayList stackList; - - /** - * Constructor - */ - Stack2(){ - stackList=new ArrayList<>(); - } - - /** - * Adds value to the end of list which - * is the top for stack - * - * @param value value to be added - */ - void push(int value){ - stackList.add(value); - } - - /** - * Pops last element of list which is indeed - * the top for Stack - * - * @return Element popped - */ - int pop(){ - - if(!isEmpty()){ // checks for an empty Stack - - int popValue=stackList.get(stackList.size()-1); - stackList.remove(stackList.size()-1); //removes the poped element from the list - return popValue; - } - else{ - System.out.print("The stack is already empty "); - return -1; - } - - } - - /** - * Checks for empty Stack - * - * @return true if stack is empty - */ - boolean isEmpty(){ - if(stackList.isEmpty()) - return true; - - else return false; - - } - - /** - * Top element of stack - * - * @return top element of stack - */ - int peek(){ - return stackList.get(stackList.size()-1); - } - } - -/** - * This class implements the Stack and Stack2 created above - * - * @author Unknown - * - */ -public class Stacks{ - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String args[]){ - Stack myStack = new Stack(4); //Declare a stack of maximum size 4 - //Populate the stack - myStack.push(5); - myStack.push(8); - myStack.push(2); - myStack.push(9); - - System.out.println("*********************Stack Array Implementation*********************"); - System.out.println(myStack.isEmpty()); //will print false - System.out.println(myStack.isFull()); //will print true - System.out.println(myStack.peek()); //will print 9 - System.out.println(myStack.pop()); //will print 9 - System.out.println(myStack.peek()); // will print 2 - - Stack2 myStack2 = new Stack2(); //Declare a stack of maximum size 4 - //Populate the stack - myStack2.push(5); - myStack2.push(8); - myStack2.push(2); - myStack2.push(9); - - System.out.println("*********************Stack List Implementation*********************"); - System.out.println(myStack2.isEmpty()); //will print false - System.out.println(myStack2.peek()); //will print 9 - System.out.println(myStack2.pop()); //will print 9 - System.out.println(myStack2.peek()); // will print 2 - System.out.println(myStack2.pop()); //will print 2 - } -} From fc64d05b5c803d6b723d463e25dc600d9e9ede6e Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sun, 6 Jan 2019 08:56:51 +0800 Subject: [PATCH 073/521] Format code in StackArray --- DataStructures/Stacks/StackArray.java | 260 +++++++++++++------------- 1 file changed, 133 insertions(+), 127 deletions(-) diff --git a/DataStructures/Stacks/StackArray.java b/DataStructures/Stacks/StackArray.java index 795958e8a0d7..6e580918fabc 100644 --- a/DataStructures/Stacks/StackArray.java +++ b/DataStructures/Stacks/StackArray.java @@ -1,6 +1,6 @@ /** * This class implements a Stack using a regular array. - * + *

* A stack is exactly what it sounds like. An element gets added to the top of * the stack and only the element on the top may be removed. This is an example * of an array implementation of a Stack. So an element can only be added/removed @@ -8,139 +8,145 @@ * array implementation it does. * * @author Unknown - * */ -public class StackArray{ - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - StackArray myStackArray = new StackArray(4); //Declare a stack of maximum size 4 - //Populate the stack - myStackArray.push(5); - myStackArray.push(8); - myStackArray.push(2); - myStackArray.push(9); - - System.out.println("*********************Stack Array Implementation*********************"); - System.out.println(myStackArray.isEmpty()); //will print false - System.out.println(myStackArray.isFull()); //will print true - System.out.println(myStackArray.peek()); //will print 9 - System.out.println(myStackArray.pop()); //will print 9 - System.out.println(myStackArray.peek()); // will print 2 - } - - /** The max size of the Stack */ - private int maxSize; - - /** The array representation of the Stack */ - private int[] stackArray; - - /** The top of the stack */ - private int top; - - /** - * Constructor - * - * @param size Size of the Stack - */ - public StackArray(int size){ - maxSize = size; - stackArray = new int[maxSize]; - top = -1; - } - - /** - * Adds an element to the top of the stack - * - * @param value The element added - */ - public void push(int value){ - if(!isFull()){ //Checks for a full stack - top++; - stackArray[top] = value; - }else{ - resize(maxSize*2); - push(value);// don't forget push after resizing +public class StackArray { + + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + // Declare a stack of maximum size 4 + StackArray myStackArray = new StackArray(4); + + // Populate the stack + myStackArray.push(5); + myStackArray.push(8); + myStackArray.push(2); + myStackArray.push(9); + + System.out.println("*********************Stack Array Implementation*********************"); + System.out.println(myStackArray.isEmpty()); // will print false + System.out.println(myStackArray.isFull()); // will print true + System.out.println(myStackArray.peek()); // will print 9 + System.out.println(myStackArray.pop()); // will print 9 + System.out.println(myStackArray.peek()); // will print 2 + } + + /** + * The max size of the Stack + */ + private int maxSize; + + /** + * The array representation of the Stack + */ + private int[] stackArray; + + /** + * The top of the stack + */ + private int top; + + /** + * Constructor + * + * @param size Size of the Stack + */ + public StackArray(int size) { + maxSize = size; + stackArray = new int[maxSize]; + top = -1; } - } - - /** - * Removes the top element of the stack and returns the value you've removed - * - * @return value popped off the Stack - */ - public int pop(){ - if(!isEmpty()){ //Checks for an empty stack - return stackArray[top--]; + + /** + * Adds an element to the top of the stack + * + * @param value The element added + */ + public void push(int value) { + if (!isFull()) { // Checks for a full stack + top++; + stackArray[top] = value; + } else { + resize(maxSize * 2); + push(value); // don't forget push after resizing + } } - if(top < maxSize/4){ - resize(maxSize/2); - return pop();// don't forget pop after resizing + /** + * Removes the top element of the stack and returns the value you've removed + * + * @return value popped off the Stack + */ + public int pop() { + if (!isEmpty()) { // Checks for an empty stack + return stackArray[top--]; + } + + if (top < maxSize / 4) { + resize(maxSize / 2); + return pop();// don't forget pop after resizing + } else { + System.out.println("The stack is already empty"); + return -1; + } } - else{ - System.out.println("The stack is already empty"); - return -1; + + /** + * Returns the element at the top of the stack + * + * @return element at the top of the stack + */ + public int peek() { + if (!isEmpty()) { // Checks for an empty stack + return stackArray[top]; + } else { + System.out.println("The stack is empty, cant peek"); + return -1; + } } - } - - /** - * Returns the element at the top of the stack - * - * @return element at the top of the stack - */ - public int peek(){ - if(!isEmpty()){ //Checks for an empty stack - return stackArray[top]; - }else{ - System.out.println("The stack is empty, cant peek"); - return -1; + + private void resize(int newSize) { + // private int[] transferArray = new int[newSize]; we can't put modifiers here ! + int[] transferArray = new int[newSize]; + + // for(int i = 0; i < stackArray.length(); i++){ the length isn't a method . + for (int i = 0; i < stackArray.length; i++) { + transferArray[i] = stackArray[i]; + stackArray = transferArray; + } + maxSize = newSize; + } + + /** + * Returns true if the stack is empty + * + * @return true if the stack is empty + */ + public boolean isEmpty() { + return (top == -1); } - } - private void resize(int newSize){ - //private int[] transferArray = new int[newSize]; we can't put modifires here ! - int[] transferArray = new int[newSize]; + /** + * Returns true if the stack is full + * + * @return true if the stack is full + */ + public boolean isFull() { + return (top + 1 == maxSize); + } - //for(int i = 0; i < stackArray.length(); i++){ the length isn't a method . - for(int i = 0; i < stackArray.length; i++){ - transferArray[i] = stackArray[i]; - stackArray = transferArray; + /** + * Deletes everything in the Stack + *

+ * Doesn't delete elements in the array + * but if you call push method after calling + * makeEmpty it will overwrite previous + * values + */ + public void makeEmpty() { // Doesn't delete elements in the array but if you call + top = -1; // push method after calling makeEmpty it will overwrite previous values } - maxSize = newSize; - } - - /** - * Returns true if the stack is empty - * - * @return true if the stack is empty - */ - public boolean isEmpty(){ - return(top == -1); - } - - /** - * Returns true if the stack is full - * - * @return true if the stack is full - */ - public boolean isFull(){ - return(top+1 == maxSize); - } - - /** - * Deletes everything in the Stack - * - * Doesn't delete elements in the array - * but if you call push method after calling - * makeEmpty it will overwrite previous - * values - */ - public void makeEmpty(){ //Doesn't delete elements in the array but if you call - top = -1; //push method after calling makeEmpty it will overwrite previous values - } -} \ No newline at end of file +} From 7c33d2e3132f7dfaa41dc1b2728df85926811c67 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sun, 6 Jan 2019 09:01:33 +0800 Subject: [PATCH 074/521] Update StackArrayList.java --- DataStructures/Stacks/StackArrayList.java | 145 +++++++++++----------- 1 file changed, 73 insertions(+), 72 deletions(-) diff --git a/DataStructures/Stacks/StackArrayList.java b/DataStructures/Stacks/StackArrayList.java index 5093b76f07b7..afc804440403 100644 --- a/DataStructures/Stacks/StackArrayList.java +++ b/DataStructures/Stacks/StackArrayList.java @@ -2,93 +2,94 @@ /** * This class implements a Stack using an ArrayList. - * + *

* A stack is exactly what it sounds like. An element gets added to the top of * the stack and only the element on the top may be removed. - * + *

* This is an ArrayList Implementation of a stack, where size is not * a problem we can extend the stack as much as we want. * * @author Unknown - * */ -public class StackArrayList{ +public class StackArrayList { - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - StackArrayList myStackArrayList = new StackArrayList(); //Declare a stack of maximum size 4 - //Populate the stack - myStackArrayList.push(5); - myStackArrayList.push(8); - myStackArrayList.push(2); - myStackArrayList.push(9); + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + + StackArrayList myStackArrayList = new StackArrayList(); + + myStackArrayList.push(5); + myStackArrayList.push(8); + myStackArrayList.push(2); + myStackArrayList.push(9); - System.out.println("*********************Stack List Implementation*********************"); - System.out.println(myStackArrayList.isEmpty()); //will print false - System.out.println(myStackArrayList.peek()); //will print 9 - System.out.println(myStackArrayList.pop()); //will print 9 - System.out.println(myStackArrayList.peek()); // will print 2 - System.out.println(myStackArrayList.pop()); //will print 2 - } + System.out.println("*********************Stack List Implementation*********************"); + System.out.println(myStackArrayList.isEmpty()); // will print false + System.out.println(myStackArrayList.peek()); // will print 9 + System.out.println(myStackArrayList.pop()); // will print 9 + System.out.println(myStackArrayList.peek()); // will print 2 + System.out.println(myStackArrayList.pop()); // will print 2 + } - /** ArrayList representation of the stack */ - private ArrayList stackList; + /** + * ArrayList representation of the stack + */ + private ArrayList stackList; - /** - * Constructor - */ - public StackArrayList(){ - stackList = new ArrayList<>(); - } + /** + * Constructor + */ + public StackArrayList() { + stackList = new ArrayList<>(); + } - /** - * Adds value to the end of list which - * is the top for stack - * - * @param value value to be added - */ - public void push(int value){ - stackList.add(value); - } + /** + * Adds value to the end of list which + * is the top for stack + * + * @param value value to be added + */ + public void push(int value) { + stackList.add(value); + } - /** - * Pops last element of list which is indeed - * the top for Stack - * - * @return Element popped - */ - public int pop(){ + /** + * Pops last element of list which is indeed + * the top for Stack + * + * @return Element popped + */ + public int pop() { - if(!isEmpty()){ // checks for an empty Stack + if (!isEmpty()) { // checks for an empty Stack + int popValue = stackList.get(stackList.size() - 1); + stackList.remove(stackList.size() - 1); // removes the poped element from the list + return popValue; + } - int popValue=stackList.get(stackList.size()-1); - stackList.remove(stackList.size()-1); //removes the poped element from the list - return popValue; + System.out.print("The stack is already empty!"); + return -1; } - System.out.print("The stack is already empty "); - return -1; - } - - /** - * Checks for empty Stack - * - * @return true if stack is empty - */ - public boolean isEmpty(){ - return stackList.isEmpty(); - } + /** + * Checks for empty Stack + * + * @return true if stack is empty + */ + public boolean isEmpty() { + return stackList.isEmpty(); + } - /** - * Top element of stack - * - * @return top element of stack - */ - public int peek(){ - return stackList.get(stackList.size()-1); - } -} \ No newline at end of file + /** + * Top element of stack + * + * @return top element of stack + */ + public int peek() { + return stackList.get(stackList.size() - 1); + } +} From 928a5fed1577204a7216d1bc568128ea9f4d6c79 Mon Sep 17 00:00:00 2001 From: dimgrichr <32580033+dimgrichr@users.noreply.github.com> Date: Wed, 9 Jan 2019 14:11:48 +0200 Subject: [PATCH 075/521] Add files via upload SkyLine Algorithm --- divideconquer/SkylineAlgorithm.java | 241 ++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 divideconquer/SkylineAlgorithm.java diff --git a/divideconquer/SkylineAlgorithm.java b/divideconquer/SkylineAlgorithm.java new file mode 100644 index 000000000000..a1d4918ce326 --- /dev/null +++ b/divideconquer/SkylineAlgorithm.java @@ -0,0 +1,241 @@ + +package skylinealgorithm; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Scanner; + +/** + * + * @author Dimitrios Panagiotis Grigoriou / dimgrichr + * + * Space complexity: O(n) + * Time complexity: O(nlogn), because it is a divide and conquer algorithm + */ +public class SkylineAlgorithm { + private Scanner scanner; + private File file; + private ArrayList points; + private int tableSize; + + + /** + * Main constructor of the application. + * ArrayList points gets created, which represents the sum of all edges, + * which are read from input file. + * File's(built-in class) object file is created, + * and gets combined with Scanner's(built-in class) object scanner, + * so that the points are read. + * @param name , the name of the input file. + * @throws FileNotFoundException , if input file is not found. + */ + public SkylineAlgorithm(String name) throws FileNotFoundException{ + File file = new File(name); + scanner = new Scanner(file); + points = new ArrayList<>(); + tableSize=scanner.nextInt(); + } + + + /** + * ArrayList points is filled with all points that are included + * in the input file. + * Points are sorted based on the x-value, using a Comparator. + * @see XComparator + */ + public void fillMass(){ + for(int i=0;scanner.hasNextInt();i++){ + //points get added to the ArrayList + points.add(new Point(scanner.nextInt(),scanner.nextInt())); + } + //ArrayList points gets sorted + Collections.sort(points,new XComparator()); + } + + + /** + * @return points, the ArrayList that includes all points. + */ + public ArrayList getPoints(){ + return points; + } + + + /** + * The main divide and conquer, and also recursive algorithm. + * It gets an ArrayList full of points as an argument. + * If the size of that ArrayList is 1 or 2, + * the ArrayList is returned as it is, or with one less point + * (if the initial size is 2 and one of it's points, is dominated by the other one). + * On the other hand, if the ArrayList's size is bigger than 2, + * the function is called again, twice, + * with arguments the corresponding half of the initial ArrayList each time. + * Once the flashback has ended, the function produceFinalSkyLine gets called, + * in order to produce the final skyline, and return it. + * @param list, the initial list of points + * @return leftSkyLine, the combination of first half's and second half's skyline + * @see Point + * @see produceFinalSkyLine + */ + public ArrayList produceSubSkyLines(ArrayList list){ + + //part where function exits flashback + int size = list.size(); + if(size == 1){ + return list; + } + else if(size==2){ + if(list.get(0).dominates(list.get(1))){ + list.remove(1); + } + else{ + if(list.get(1).dominates(list.get(0))){ + list.remove(0); + } + } + return list; + } + + //recursive part of the function + ArrayList leftHalf=new ArrayList<>(); + ArrayList rightHalf=new ArrayList<>(); + for (int i=0;i leftSubSkyLine=new ArrayList<>(); + ArrayList rightSubSkyLine=new ArrayList<>(); + leftSubSkyLine=produceSubSkyLines(leftHalf); + rightSubSkyLine=produceSubSkyLines(rightHalf); + + //skyline is produced + return produceFinalSkyLine(leftSubSkyLine,rightSubSkyLine); + } + + + /** + * The first half's skyline gets cleared + * from some points that are not part of the final skyline + * (Points with same x-value and different y=values. The point with the smallest y-value is kept). + * Then, the minimum y-value of the points of first half's skyline is found. + * That helps us to clear the second half's skyline, because, the points + * of second half's skyline that have greater y-value of the minimum y-value that we found before, + * are dominated, so they are not part of the final skyline. + * Finally, the "cleaned" first half's and second half's skylines, are combined, + * producing the final skyline, which is returned. + * @param left the skyline of the left part of points + * @param right the skyline of the right part of points + * @return left the final skyline + */ + public ArrayList produceFinalSkyLine(ArrayList left, ArrayList right){ + + //dominated points of ArrayList left are removed + for(int i=0;ileft.get(i+1).y){ + left.remove(i); + i--; + } + } + + //minimum y-value is found + int min=left.get(0).y; + for(int i=1;ileft.get(i).y){ + min = left.get(i).y; + if(min==1){ + i=left.size(); + } + } + } + + //dominated points of ArrayList right are removed + for(int i=0;i=min){ + right.remove(i); + i--; + } + } + + //final skyline found and returned + left.addAll(right); + return left; + } + + + + public static class Point{ + private int x; + private int y; + /** + * The main constructor of Point Class, used to represent the 2 Dimension points. + * @param x the point's x-value. + * @param y the point's y-value. + */ + public Point(int x, int y){ + this.x=x; + this.y=y; + } + /** + * @return x, the x-value + */ + public int getX(){ + return x; + } + /** + * @return y, the y-value + */ + public int getY(){ + return y; + } + /** + * Based on the skyline theory, + * it checks if the point that calls the function dominates the argument point. + * @param p1 the point that is compared + * @return true if the point wich calls the function dominates p1 + * false otherwise. + */ + public boolean dominates(Point p1){ + + //checks if p1 is dominated + if((this.x { + @Override + public int compare(Point a, Point b) { + return a.x < b.x ? -1 : a.x == b.x ? 0 : 1; + } + } + + + //main function + public static void main(String[] args) throws FileNotFoundException { + if (args.length != 1) + { + System.out.println("Insert the input file"); + return; + } + SkylineAlgorithm skyline = new SkylineAlgorithm(args[0]); + skyline.fillMass(); + ArrayList list = skyline.produceSubSkyLines(skyline.getPoints()); + for(Point x: list){ + System.out.println(x.getX() + " " + x.getY()); + } + } +} From a85b36db9557b4abe1b39b3be7a6c8425793fde8 Mon Sep 17 00:00:00 2001 From: dimgrichr <32580033+dimgrichr@users.noreply.github.com> Date: Wed, 9 Jan 2019 14:22:34 +0200 Subject: [PATCH 076/521] Add files via upload --- Dynamic Programming/TaskCosts.java | 118 +++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Dynamic Programming/TaskCosts.java diff --git a/Dynamic Programming/TaskCosts.java b/Dynamic Programming/TaskCosts.java new file mode 100644 index 000000000000..10e5457b626c --- /dev/null +++ b/Dynamic Programming/TaskCosts.java @@ -0,0 +1,118 @@ +package projectb; + +import java.io.File; +import java.io.FileNotFoundException; +import java.util.Scanner; + +/** + * + * @author dimig + */ +public class TaskCosts { + + private Scanner scanner; + private File file; + + private int tasks; + private int vms; + + private int[][] vmsPer; + private int[][] vmsCom; + private int[][] costs; + + + private TaskCosts(String nameOfInputFile) throws FileNotFoundException{ + File file = new File(nameOfInputFile); + scanner = new Scanner(file); + tasks = scanner.nextInt(); + vms = scanner.nextInt(); + costs = new int[tasks][vms]; + vmsPer = new int[tasks][vms]; + vmsCom = new int[vms][vms]; + for(int i=0;i Date: Fri, 11 Jan 2019 20:33:50 +0800 Subject: [PATCH 077/521] Update BinarySearch.java fix --- Searches/BinarySearch.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Searches/BinarySearch.java b/Searches/BinarySearch.java index f655c074f279..6877a55f1d95 100644 --- a/Searches/BinarySearch.java +++ b/Searches/BinarySearch.java @@ -72,7 +72,7 @@ private > int search(T array[], T key, int left, int rig // Driver Program public static void main(String[] args) { // Just generate data - Random random = ThreadLocalRandom.current(); + Random r = ThreadLocalRandom.current(); int size = 100; int maxElement = 100000; From 21a7b9db58b085f1fcaaa70c0d20d7d379f71a78 Mon Sep 17 00:00:00 2001 From: Guo_1_9 Date: Sun, 13 Jan 2019 05:13:09 +0800 Subject: [PATCH 078/521] Update MergeSort.java --- Sorts/MergeSort.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/Sorts/MergeSort.java b/Sorts/MergeSort.java index 3c4fa4a2b99a..e14334b163bf 100644 --- a/Sorts/MergeSort.java +++ b/Sorts/MergeSort.java @@ -70,26 +70,19 @@ private static > void merge(T[] arr, T[] temp, int left, while (i <= mid && j <= right) { if (temp[i].compareTo(temp[j]) <= 0) { - arr[k] = temp[i]; - i++; + arr[k++] = temp[i++]; } else { - arr[k] = temp[j]; - j++; + arr[k++] = temp[j++]; } - k++; } while (i <= mid) { - arr[k] = temp[i]; - i++; - k++; + arr[k++] = temp[i++]; } while (j <= right) { - arr[k] = temp[j]; - j++; - k++; + arr[k++] = temp[j++]; } } From d55d1e4d0e8ce9b11035c804f63e41258cc8cc20 Mon Sep 17 00:00:00 2001 From: dimgrichr <32580033+dimgrichr@users.noreply.github.com> Date: Tue, 15 Jan 2019 12:39:14 +0200 Subject: [PATCH 079/521] Delete SkylineAlgorithm.java --- divideconquer/SkylineAlgorithm.java | 241 ---------------------------- 1 file changed, 241 deletions(-) delete mode 100644 divideconquer/SkylineAlgorithm.java diff --git a/divideconquer/SkylineAlgorithm.java b/divideconquer/SkylineAlgorithm.java deleted file mode 100644 index a1d4918ce326..000000000000 --- a/divideconquer/SkylineAlgorithm.java +++ /dev/null @@ -1,241 +0,0 @@ - -package skylinealgorithm; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Scanner; - -/** - * - * @author Dimitrios Panagiotis Grigoriou / dimgrichr - * - * Space complexity: O(n) - * Time complexity: O(nlogn), because it is a divide and conquer algorithm - */ -public class SkylineAlgorithm { - private Scanner scanner; - private File file; - private ArrayList points; - private int tableSize; - - - /** - * Main constructor of the application. - * ArrayList points gets created, which represents the sum of all edges, - * which are read from input file. - * File's(built-in class) object file is created, - * and gets combined with Scanner's(built-in class) object scanner, - * so that the points are read. - * @param name , the name of the input file. - * @throws FileNotFoundException , if input file is not found. - */ - public SkylineAlgorithm(String name) throws FileNotFoundException{ - File file = new File(name); - scanner = new Scanner(file); - points = new ArrayList<>(); - tableSize=scanner.nextInt(); - } - - - /** - * ArrayList points is filled with all points that are included - * in the input file. - * Points are sorted based on the x-value, using a Comparator. - * @see XComparator - */ - public void fillMass(){ - for(int i=0;scanner.hasNextInt();i++){ - //points get added to the ArrayList - points.add(new Point(scanner.nextInt(),scanner.nextInt())); - } - //ArrayList points gets sorted - Collections.sort(points,new XComparator()); - } - - - /** - * @return points, the ArrayList that includes all points. - */ - public ArrayList getPoints(){ - return points; - } - - - /** - * The main divide and conquer, and also recursive algorithm. - * It gets an ArrayList full of points as an argument. - * If the size of that ArrayList is 1 or 2, - * the ArrayList is returned as it is, or with one less point - * (if the initial size is 2 and one of it's points, is dominated by the other one). - * On the other hand, if the ArrayList's size is bigger than 2, - * the function is called again, twice, - * with arguments the corresponding half of the initial ArrayList each time. - * Once the flashback has ended, the function produceFinalSkyLine gets called, - * in order to produce the final skyline, and return it. - * @param list, the initial list of points - * @return leftSkyLine, the combination of first half's and second half's skyline - * @see Point - * @see produceFinalSkyLine - */ - public ArrayList produceSubSkyLines(ArrayList list){ - - //part where function exits flashback - int size = list.size(); - if(size == 1){ - return list; - } - else if(size==2){ - if(list.get(0).dominates(list.get(1))){ - list.remove(1); - } - else{ - if(list.get(1).dominates(list.get(0))){ - list.remove(0); - } - } - return list; - } - - //recursive part of the function - ArrayList leftHalf=new ArrayList<>(); - ArrayList rightHalf=new ArrayList<>(); - for (int i=0;i leftSubSkyLine=new ArrayList<>(); - ArrayList rightSubSkyLine=new ArrayList<>(); - leftSubSkyLine=produceSubSkyLines(leftHalf); - rightSubSkyLine=produceSubSkyLines(rightHalf); - - //skyline is produced - return produceFinalSkyLine(leftSubSkyLine,rightSubSkyLine); - } - - - /** - * The first half's skyline gets cleared - * from some points that are not part of the final skyline - * (Points with same x-value and different y=values. The point with the smallest y-value is kept). - * Then, the minimum y-value of the points of first half's skyline is found. - * That helps us to clear the second half's skyline, because, the points - * of second half's skyline that have greater y-value of the minimum y-value that we found before, - * are dominated, so they are not part of the final skyline. - * Finally, the "cleaned" first half's and second half's skylines, are combined, - * producing the final skyline, which is returned. - * @param left the skyline of the left part of points - * @param right the skyline of the right part of points - * @return left the final skyline - */ - public ArrayList produceFinalSkyLine(ArrayList left, ArrayList right){ - - //dominated points of ArrayList left are removed - for(int i=0;ileft.get(i+1).y){ - left.remove(i); - i--; - } - } - - //minimum y-value is found - int min=left.get(0).y; - for(int i=1;ileft.get(i).y){ - min = left.get(i).y; - if(min==1){ - i=left.size(); - } - } - } - - //dominated points of ArrayList right are removed - for(int i=0;i=min){ - right.remove(i); - i--; - } - } - - //final skyline found and returned - left.addAll(right); - return left; - } - - - - public static class Point{ - private int x; - private int y; - /** - * The main constructor of Point Class, used to represent the 2 Dimension points. - * @param x the point's x-value. - * @param y the point's y-value. - */ - public Point(int x, int y){ - this.x=x; - this.y=y; - } - /** - * @return x, the x-value - */ - public int getX(){ - return x; - } - /** - * @return y, the y-value - */ - public int getY(){ - return y; - } - /** - * Based on the skyline theory, - * it checks if the point that calls the function dominates the argument point. - * @param p1 the point that is compared - * @return true if the point wich calls the function dominates p1 - * false otherwise. - */ - public boolean dominates(Point p1){ - - //checks if p1 is dominated - if((this.x { - @Override - public int compare(Point a, Point b) { - return a.x < b.x ? -1 : a.x == b.x ? 0 : 1; - } - } - - - //main function - public static void main(String[] args) throws FileNotFoundException { - if (args.length != 1) - { - System.out.println("Insert the input file"); - return; - } - SkylineAlgorithm skyline = new SkylineAlgorithm(args[0]); - skyline.fillMass(); - ArrayList list = skyline.produceSubSkyLines(skyline.getPoints()); - for(Point x: list){ - System.out.println(x.getX() + " " + x.getY()); - } - } -} From 96ad920ce5975e17ac4c644819dc3e204b8e772b Mon Sep 17 00:00:00 2001 From: dimgrichr <32580033+dimgrichr@users.noreply.github.com> Date: Tue, 15 Jan 2019 12:41:26 +0200 Subject: [PATCH 080/521] Addition of the Skyline Algorithm Implementation of the skyline algorithm --- divideconquer/SkylineAlgorithm.java | 190 ++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 divideconquer/SkylineAlgorithm.java diff --git a/divideconquer/SkylineAlgorithm.java b/divideconquer/SkylineAlgorithm.java new file mode 100644 index 000000000000..f1b1f44c7433 --- /dev/null +++ b/divideconquer/SkylineAlgorithm.java @@ -0,0 +1,190 @@ +package skylinealgorithm; + +import java.util.ArrayList; +import java.util.Comparator; + +/** + * + * @author dimgrichr + * + * Space complexity: O(n) + * Time complexity: O(nlogn), because it is a divide and conquer algorithm + */ +public class SkylineAlgorithm { + private ArrayList points; + + + /** + * Main constructor of the application. + * ArrayList points gets created, which represents the sum of all edges. + */ + public SkylineAlgorithm(){ + points = new ArrayList<>(); + } + + + /** + * @return points, the ArrayList that includes all points. + */ + public ArrayList getPoints(){ + return points; + } + + + /** + * The main divide and conquer, and also recursive algorithm. + * It gets an ArrayList full of points as an argument. + * If the size of that ArrayList is 1 or 2, + * the ArrayList is returned as it is, or with one less point + * (if the initial size is 2 and one of it's points, is dominated by the other one). + * On the other hand, if the ArrayList's size is bigger than 2, + * the function is called again, twice, + * with arguments the corresponding half of the initial ArrayList each time. + * Once the flashback has ended, the function produceFinalSkyLine gets called, + * in order to produce the final skyline, and return it. + * @param list, the initial list of points + * @return leftSkyLine, the combination of first half's and second half's skyline + * @see Point + * @see produceFinalSkyLine + */ + public ArrayList produceSubSkyLines(ArrayList list){ + + //part where function exits flashback + int size = list.size(); + if(size == 1){ + return list; + } + else if(size==2){ + if(list.get(0).dominates(list.get(1))){ + list.remove(1); + } + else{ + if(list.get(1).dominates(list.get(0))){ + list.remove(0); + } + } + return list; + } + + //recursive part of the function + ArrayList leftHalf=new ArrayList<>(); + ArrayList rightHalf=new ArrayList<>(); + for (int i=0;i leftSubSkyLine=new ArrayList<>(); + ArrayList rightSubSkyLine=new ArrayList<>(); + leftSubSkyLine=produceSubSkyLines(leftHalf); + rightSubSkyLine=produceSubSkyLines(rightHalf); + + //skyline is produced + return produceFinalSkyLine(leftSubSkyLine,rightSubSkyLine); + } + + + /** + * The first half's skyline gets cleared + * from some points that are not part of the final skyline + * (Points with same x-value and different y=values. The point with the smallest y-value is kept). + * Then, the minimum y-value of the points of first half's skyline is found. + * That helps us to clear the second half's skyline, because, the points + * of second half's skyline that have greater y-value of the minimum y-value that we found before, + * are dominated, so they are not part of the final skyline. + * Finally, the "cleaned" first half's and second half's skylines, are combined, + * producing the final skyline, which is returned. + * @param left the skyline of the left part of points + * @param right the skyline of the right part of points + * @return left the final skyline + */ + public ArrayList produceFinalSkyLine(ArrayList left, ArrayList right){ + + //dominated points of ArrayList left are removed + for(int i=0;ileft.get(i+1).y){ + left.remove(i); + i--; + } + } + + //minimum y-value is found + int min=left.get(0).y; + for(int i=1;ileft.get(i).y){ + min = left.get(i).y; + if(min==1){ + i=left.size(); + } + } + } + + //dominated points of ArrayList right are removed + for(int i=0;i=min){ + right.remove(i); + i--; + } + } + + //final skyline found and returned + left.addAll(right); + return left; + } + + + + public static class Point{ + private int x; + private int y; + /** + * The main constructor of Point Class, used to represent the 2 Dimension points. + * @param x the point's x-value. + * @param y the point's y-value. + */ + public Point(int x, int y){ + this.x=x; + this.y=y; + } + /** + * @return x, the x-value + */ + public int getX(){ + return x; + } + /** + * @return y, the y-value + */ + public int getY(){ + return y; + } + /** + * Based on the skyline theory, + * it checks if the point that calls the function dominates the argument point. + * @param p1 the point that is compared + * @return true if the point wich calls the function dominates p1 + * false otherwise. + */ + public boolean dominates(Point p1){ + + //checks if p1 is dominated + if((this.x { + @Override + public int compare(Point a, Point b) { + return a.x < b.x ? -1 : a.x == b.x ? 0 : 1; + } + } +} From 8f78a3fe6cbd79029f5213c783880b6308890132 Mon Sep 17 00:00:00 2001 From: dimgrichr <32580033+dimgrichr@users.noreply.github.com> Date: Tue, 15 Jan 2019 12:44:48 +0200 Subject: [PATCH 081/521] Delete TaskCosts.java --- Dynamic Programming/TaskCosts.java | 118 ----------------------------- 1 file changed, 118 deletions(-) delete mode 100644 Dynamic Programming/TaskCosts.java diff --git a/Dynamic Programming/TaskCosts.java b/Dynamic Programming/TaskCosts.java deleted file mode 100644 index 10e5457b626c..000000000000 --- a/Dynamic Programming/TaskCosts.java +++ /dev/null @@ -1,118 +0,0 @@ -package projectb; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.Scanner; - -/** - * - * @author dimig - */ -public class TaskCosts { - - private Scanner scanner; - private File file; - - private int tasks; - private int vms; - - private int[][] vmsPer; - private int[][] vmsCom; - private int[][] costs; - - - private TaskCosts(String nameOfInputFile) throws FileNotFoundException{ - File file = new File(nameOfInputFile); - scanner = new Scanner(file); - tasks = scanner.nextInt(); - vms = scanner.nextInt(); - costs = new int[tasks][vms]; - vmsPer = new int[tasks][vms]; - vmsCom = new int[vms][vms]; - for(int i=0;i Date: Tue, 15 Jan 2019 19:54:43 +0800 Subject: [PATCH 082/521] Update SkylineAlgorithm.java --- divideconquer/SkylineAlgorithm.java | 153 ++++++++++++++-------------- 1 file changed, 74 insertions(+), 79 deletions(-) diff --git a/divideconquer/SkylineAlgorithm.java b/divideconquer/SkylineAlgorithm.java index f1b1f44c7433..51bce90c98d2 100644 --- a/divideconquer/SkylineAlgorithm.java +++ b/divideconquer/SkylineAlgorithm.java @@ -1,36 +1,32 @@ -package skylinealgorithm; - import java.util.ArrayList; import java.util.Comparator; /** - * * @author dimgrichr - * + *

* Space complexity: O(n) * Time complexity: O(nlogn), because it is a divide and conquer algorithm */ public class SkylineAlgorithm { private ArrayList points; - - + /** * Main constructor of the application. * ArrayList points gets created, which represents the sum of all edges. */ - public SkylineAlgorithm(){ + public SkylineAlgorithm() { points = new ArrayList<>(); } - - + + /** * @return points, the ArrayList that includes all points. */ - public ArrayList getPoints(){ + public ArrayList getPoints() { return points; } - - + + /** * The main divide and conquer, and also recursive algorithm. * It gets an ArrayList full of points as an argument. @@ -38,55 +34,51 @@ public ArrayList getPoints(){ * the ArrayList is returned as it is, or with one less point * (if the initial size is 2 and one of it's points, is dominated by the other one). * On the other hand, if the ArrayList's size is bigger than 2, - * the function is called again, twice, + * the function is called again, twice, * with arguments the corresponding half of the initial ArrayList each time. * Once the flashback has ended, the function produceFinalSkyLine gets called, * in order to produce the final skyline, and return it. + * * @param list, the initial list of points * @return leftSkyLine, the combination of first half's and second half's skyline * @see Point * @see produceFinalSkyLine */ - public ArrayList produceSubSkyLines(ArrayList list){ - - //part where function exits flashback + public ArrayList produceSubSkyLines(ArrayList list) { + + // part where function exits flashback int size = list.size(); - if(size == 1){ + if (size == 1) { return list; - } - else if(size==2){ - if(list.get(0).dominates(list.get(1))){ + } else if (size == 2) { + if (list.get(0).dominates(list.get(1))) { list.remove(1); - } - else{ - if(list.get(1).dominates(list.get(0))){ + } else { + if (list.get(1).dominates(list.get(0))) { list.remove(0); } } return list; } - - //recursive part of the function - ArrayList leftHalf=new ArrayList<>(); - ArrayList rightHalf=new ArrayList<>(); - for (int i=0;i leftHalf = new ArrayList<>(); + ArrayList rightHalf = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + if (i < list.size() / 2) { leftHalf.add(list.get(i)); - } - else{ + } else { rightHalf.add(list.get(i)); } } - ArrayList leftSubSkyLine=new ArrayList<>(); - ArrayList rightSubSkyLine=new ArrayList<>(); - leftSubSkyLine=produceSubSkyLines(leftHalf); - rightSubSkyLine=produceSubSkyLines(rightHalf); - - //skyline is produced - return produceFinalSkyLine(leftSubSkyLine,rightSubSkyLine); + ArrayList leftSubSkyLine = produceSubSkyLines(leftHalf); + ArrayList rightSubSkyLine= produceSubSkyLines(rightHalf); + + // skyline is produced + return produceFinalSkyLine(leftSubSkyLine, rightSubSkyLine); } - - + + /** * The first half's skyline gets cleared * from some points that are not part of the final skyline @@ -97,94 +89,97 @@ else if(size==2){ * are dominated, so they are not part of the final skyline. * Finally, the "cleaned" first half's and second half's skylines, are combined, * producing the final skyline, which is returned. - * @param left the skyline of the left part of points + * + * @param left the skyline of the left part of points * @param right the skyline of the right part of points * @return left the final skyline */ - public ArrayList produceFinalSkyLine(ArrayList left, ArrayList right){ - - //dominated points of ArrayList left are removed - for(int i=0;ileft.get(i+1).y){ + public ArrayList produceFinalSkyLine(ArrayList left, ArrayList right) { + + // dominated points of ArrayList left are removed + for (int i = 0; i < left.size() - 1; i++) { + if (left.get(i).x == left.get(i + 1).x && left.get(i).y > left.get(i + 1).y) { left.remove(i); i--; } } - - //minimum y-value is found - int min=left.get(0).y; - for(int i=1;ileft.get(i).y){ + + // minimum y-value is found + int min = left.get(0).y; + for (int i = 1; i < left.size(); i++) { + if (min > left.get(i).y) { min = left.get(i).y; - if(min==1){ - i=left.size(); + if (min == 1) { + i = left.size(); } } } - - //dominated points of ArrayList right are removed - for(int i=0;i=min){ + + // dominated points of ArrayList right are removed + for (int i = 0; i < right.size(); i++) { + if (right.get(i).y >= min) { right.remove(i); i--; } } - - //final skyline found and returned + + // final skyline found and returned left.addAll(right); return left; } - - - public static class Point{ + + public static class Point { private int x; private int y; + /** * The main constructor of Point Class, used to represent the 2 Dimension points. + * * @param x the point's x-value. * @param y the point's y-value. */ - public Point(int x, int y){ - this.x=x; - this.y=y; + public Point(int x, int y) { + this.x = x; + this.y = y; } + /** * @return x, the x-value */ - public int getX(){ + public int getX() { return x; } + /** * @return y, the y-value */ - public int getY(){ + public int getY() { return y; } + /** * Based on the skyline theory, * it checks if the point that calls the function dominates the argument point. + * * @param p1 the point that is compared * @return true if the point wich calls the function dominates p1 - * false otherwise. + * false otherwise. */ - public boolean dominates(Point p1){ - - //checks if p1 is dominated - if((this.x { - @Override - public int compare(Point a, Point b) { - return a.x < b.x ? -1 : a.x == b.x ? 0 : 1; - } + @Override + public int compare(Point a, Point b) { + return Integer.compare(a.x, b.x); + } } } From d4b67256993d155c374170b283fd3d6f0eb64cf7 Mon Sep 17 00:00:00 2001 From: dimgrichr <32580033+dimgrichr@users.noreply.github.com> Date: Tue, 15 Jan 2019 14:27:31 +0200 Subject: [PATCH 083/521] Cyclic redundancy check Algorithm Implementation of an CRC Algorithm, used in order to examine already received packets/messages. --- Others/CRCAlgorithm.java | 209 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 Others/CRCAlgorithm.java diff --git a/Others/CRCAlgorithm.java b/Others/CRCAlgorithm.java new file mode 100644 index 000000000000..f26763db892a --- /dev/null +++ b/Others/CRCAlgorithm.java @@ -0,0 +1,209 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package crcalgorithm; + +import java.util.ArrayList; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +/** + * + * @author dimig + */ +public class CRCAlgorithm { + + private int correctMess; + + private int wrongMess; + + private int wrongMessCaught; + + private int wrongMessNotCaught; + + private int messSize; + + private double ber; + + private boolean messageChanged; + + private ArrayList message; + + private ArrayList dividedMessage; + + private ArrayList p; + + private Random randomGenerator; + + + /** + * The algorithm's main constructor. + * The most significant variables, used in the algorithm, + * are set in their initial values. + * @param str The binary number P, in a string form, which is used by the CRC algorithm + * @param size The size of every transmitted message + * @param ber The Bit Error Rate + */ + public CRCAlgorithm(String str, int size, double ber){ + messageChanged=false; + message = new ArrayList<>(); + messSize = size; + dividedMessage = new ArrayList<>(); + p = new ArrayList<>(); + for(int i=0;i(); + dividedMessage = new ArrayList<>(); + } + + /** + * Random messages, consisted of 0's and 1's, + * are generated, so that they can later be transmitted + */ + public void generateRandomMess(){ + for(int i=0;i is created. + * If check == true, the dividedMessaage is examined, in order to see if it contains any 1's. + * If it does, the message is considered to be wrong by the receiver,so the variable wrongMessCaught changes. + * If it does not, it is accepted, so one of the variables correctMess, wrongMessNotCaught, changes. + * If check == false, the diviided Message is added at the end of the ArrayList message. + * @param check the variable used to determine, if the message is going to be checked from the receiver + * if true, it is checked + * otherwise, it is not + */ + public void divideMessageWithP(boolean check){ + ArrayList x = new ArrayList<>(); + ArrayList k = (ArrayList) message.clone(); + if(!check){ + for(int i=0;i) x.clone(); + if(!check){ + for(int z:dividedMessage){ + message.add(z); + } + } + else{ + if(dividedMessage.contains(1) && messageChanged){ + wrongMessCaught++; + } + else if(!dividedMessage.contains(1) && messageChanged){ + wrongMessNotCaught++; + } + else if(!messageChanged){ + correctMess++; + } + } + } + + /** + * Once the message is transmitted, some of it's elements, + * is possible to change from 1 to 0, or from 0 to 1, + * because of the Bit Error Rate (ber). + * For every element of the message, a random double number is created. + * If that number is smaller than ber, then the spesific element changes. + * On the other hand, if it's bigger than ber, it does not. + * Based on these changes. the boolean variable messageChanged, gets the value: + * true, or false. + */ + public void changeMess(){ + for(int y : message){ + double x = randomGenerator.nextDouble(); + while(x<0.0000 || x>1.00000){ + x = randomGenerator.nextDouble(); + } + if(x Date: Tue, 15 Jan 2019 14:28:47 +0200 Subject: [PATCH 084/521] Delete CRCAlgorithm.java --- Others/CRCAlgorithm.java | 209 --------------------------------------- 1 file changed, 209 deletions(-) delete mode 100644 Others/CRCAlgorithm.java diff --git a/Others/CRCAlgorithm.java b/Others/CRCAlgorithm.java deleted file mode 100644 index f26763db892a..000000000000 --- a/Others/CRCAlgorithm.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package crcalgorithm; - -import java.util.ArrayList; -import java.util.Random; -import java.util.concurrent.ThreadLocalRandom; - -/** - * - * @author dimig - */ -public class CRCAlgorithm { - - private int correctMess; - - private int wrongMess; - - private int wrongMessCaught; - - private int wrongMessNotCaught; - - private int messSize; - - private double ber; - - private boolean messageChanged; - - private ArrayList message; - - private ArrayList dividedMessage; - - private ArrayList p; - - private Random randomGenerator; - - - /** - * The algorithm's main constructor. - * The most significant variables, used in the algorithm, - * are set in their initial values. - * @param str The binary number P, in a string form, which is used by the CRC algorithm - * @param size The size of every transmitted message - * @param ber The Bit Error Rate - */ - public CRCAlgorithm(String str, int size, double ber){ - messageChanged=false; - message = new ArrayList<>(); - messSize = size; - dividedMessage = new ArrayList<>(); - p = new ArrayList<>(); - for(int i=0;i(); - dividedMessage = new ArrayList<>(); - } - - /** - * Random messages, consisted of 0's and 1's, - * are generated, so that they can later be transmitted - */ - public void generateRandomMess(){ - for(int i=0;i is created. - * If check == true, the dividedMessaage is examined, in order to see if it contains any 1's. - * If it does, the message is considered to be wrong by the receiver,so the variable wrongMessCaught changes. - * If it does not, it is accepted, so one of the variables correctMess, wrongMessNotCaught, changes. - * If check == false, the diviided Message is added at the end of the ArrayList message. - * @param check the variable used to determine, if the message is going to be checked from the receiver - * if true, it is checked - * otherwise, it is not - */ - public void divideMessageWithP(boolean check){ - ArrayList x = new ArrayList<>(); - ArrayList k = (ArrayList) message.clone(); - if(!check){ - for(int i=0;i) x.clone(); - if(!check){ - for(int z:dividedMessage){ - message.add(z); - } - } - else{ - if(dividedMessage.contains(1) && messageChanged){ - wrongMessCaught++; - } - else if(!dividedMessage.contains(1) && messageChanged){ - wrongMessNotCaught++; - } - else if(!messageChanged){ - correctMess++; - } - } - } - - /** - * Once the message is transmitted, some of it's elements, - * is possible to change from 1 to 0, or from 0 to 1, - * because of the Bit Error Rate (ber). - * For every element of the message, a random double number is created. - * If that number is smaller than ber, then the spesific element changes. - * On the other hand, if it's bigger than ber, it does not. - * Based on these changes. the boolean variable messageChanged, gets the value: - * true, or false. - */ - public void changeMess(){ - for(int y : message){ - double x = randomGenerator.nextDouble(); - while(x<0.0000 || x>1.00000){ - x = randomGenerator.nextDouble(); - } - if(x Date: Tue, 15 Jan 2019 14:32:01 +0200 Subject: [PATCH 085/521] Cyclic Redundancy Check Algorithm Implementation of a CRC algorithm, used in order to examine received messages/packets for any errors. This type of algorithms, is widely used in networks. --- Others/CRCAlgorithm.java | 204 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 Others/CRCAlgorithm.java diff --git a/Others/CRCAlgorithm.java b/Others/CRCAlgorithm.java new file mode 100644 index 000000000000..f932a9b74a73 --- /dev/null +++ b/Others/CRCAlgorithm.java @@ -0,0 +1,204 @@ +package crcalgorithm; + +import java.util.ArrayList; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +/** + * + * @author dimgrichr + */ +public class CRCAlgorithm { + + private int correctMess; + + private int wrongMess; + + private int wrongMessCaught; + + private int wrongMessNotCaught; + + private int messSize; + + private double ber; + + private boolean messageChanged; + + private ArrayList message; + + private ArrayList dividedMessage; + + private ArrayList p; + + private Random randomGenerator; + + + /** + * The algorithm's main constructor. + * The most significant variables, used in the algorithm, + * are set in their initial values. + * @param str The binary number P, in a string form, which is used by the CRC algorithm + * @param size The size of every transmitted message + * @param ber The Bit Error Rate + */ + public CRCAlgorithm(String str, int size, double ber){ + messageChanged=false; + message = new ArrayList<>(); + messSize = size; + dividedMessage = new ArrayList<>(); + p = new ArrayList<>(); + for(int i=0;i(); + dividedMessage = new ArrayList<>(); + } + + /** + * Random messages, consisted of 0's and 1's, + * are generated, so that they can later be transmitted + */ + public void generateRandomMess(){ + for(int i=0;i is created. + * If check == true, the dividedMessaage is examined, in order to see if it contains any 1's. + * If it does, the message is considered to be wrong by the receiver,so the variable wrongMessCaught changes. + * If it does not, it is accepted, so one of the variables correctMess, wrongMessNotCaught, changes. + * If check == false, the diviided Message is added at the end of the ArrayList message. + * @param check the variable used to determine, if the message is going to be checked from the receiver + * if true, it is checked + * otherwise, it is not + */ + public void divideMessageWithP(boolean check){ + ArrayList x = new ArrayList<>(); + ArrayList k = (ArrayList) message.clone(); + if(!check){ + for(int i=0;i) x.clone(); + if(!check){ + for(int z:dividedMessage){ + message.add(z); + } + } + else{ + if(dividedMessage.contains(1) && messageChanged){ + wrongMessCaught++; + } + else if(!dividedMessage.contains(1) && messageChanged){ + wrongMessNotCaught++; + } + else if(!messageChanged){ + correctMess++; + } + } + } + + /** + * Once the message is transmitted, some of it's elements, + * is possible to change from 1 to 0, or from 0 to 1, + * because of the Bit Error Rate (ber). + * For every element of the message, a random double number is created. + * If that number is smaller than ber, then the spesific element changes. + * On the other hand, if it's bigger than ber, it does not. + * Based on these changes. the boolean variable messageChanged, gets the value: + * true, or false. + */ + public void changeMess(){ + for(int y : message){ + double x = randomGenerator.nextDouble(); + while(x<0.0000 || x>1.00000){ + x = randomGenerator.nextDouble(); + } + if(x Date: Thu, 17 Jan 2019 13:43:12 -0200 Subject: [PATCH 086/521] Correction of a RuntimeException Uncompilable source code --- DataStructures/Trees/AVLTree.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DataStructures/Trees/AVLTree.java b/DataStructures/Trees/AVLTree.java index 4bcf402dc0b7..720d46fd51df 100644 --- a/DataStructures/Trees/AVLTree.java +++ b/DataStructures/Trees/AVLTree.java @@ -176,9 +176,10 @@ private int height(Node n) { } private void setBalance(Node... nodes) { - for (Node n : nodes) + for (Node n : nodes) { reheight(n); n.balance = height(n.right) - height(n.left); + } } public void printBalance() { From 6cc1414a2aadb5de5c97d1e8a5f26898bb573971 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Wed, 23 Jan 2019 14:03:30 +0800 Subject: [PATCH 087/521] docs(Others): rename GuassLegendre to fix #689 - Fix #689 - Thank you @SebastianOner --- Others/{GuassLengendre.java => GuassLegendre.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Others/{GuassLengendre.java => GuassLegendre.java} (100%) diff --git a/Others/GuassLengendre.java b/Others/GuassLegendre.java similarity index 100% rename from Others/GuassLengendre.java rename to Others/GuassLegendre.java From b123975b56287baf1e0b453b875f621dfc9c7c05 Mon Sep 17 00:00:00 2001 From: ulvi Date: Sun, 27 Jan 2019 02:26:01 +0400 Subject: [PATCH 088/521] added new field and modified some methods --- DataStructures/Lists/SinglyLinkedList.java | 64 +++++++++++++--------- 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index d7d721b2ec1c..e1eef01f5563 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -1,14 +1,14 @@ /** * This class implements a SinglyLinked List. This is done * using SinglyLinkedList class and a LinkForLinkedList Class. - * + * * A linked list is similar to an array, it hold values. * However, links in a linked list do not have indexes. With * a linked list you do not need to predetermine it's size as * it grows and shrinks as it is edited. This is an example of * a singly linked list. Elements can only be added/removed * at the head/front of the list. - * + * * @author Unknown * */ @@ -25,15 +25,23 @@ public SinglyLinkedList(){ /** * This method inserts an element at the head - * + * * @param x Element to be added */ public void insertHead(int x){ Node newNode = new Node(x); //Create a new link with a value attached to it newNode.next = head; //Set the new link to point to the current head head = newNode; //Now set the new link to be the head + Node.indexCount++; //Count the all indexes of inserted values } - + /** + * Insert values at spesific position + * @param number inserted value + * @param position spesific position of inserted value + */ + public void addToSpecifiedPosition(int number, int position) { + InsertNth(head, number, position); + } /** * Inserts a new node at a specified position @@ -44,40 +52,37 @@ public void insertHead(int x){ */ Node InsertNth(Node head, int data, int position) { - - Node newNode = new Node(); - newNode.data = data; - - if (position == 0) { - newNode.next = head; - return newNode; - } + Node newNode = new Node(data); Node current = head; + int temp = position - Node.getIndexCount(); - while (--position > 0) { - current = current.next; + while (temp-- > 0) { + insertHead(0); + System.out.println("Do something " + Node.indexCount); } - - newNode.next = current.next; - current.next = newNode; + + newNode.next = current; + head = newNode; + insertHead(newNode.value); return head; } - + /** * This method deletes an element at the head - * + * * @return The element deleted */ public Node deleteHead(){ Node temp = head; head = head.next; //Make the second element in the list the new head, the Java garbage collector will later remove the old head + --Node.indexCount; return temp; } /** * Checks if the list is empty - * + * * @return true is list is empty */ public boolean isEmpty(){ @@ -95,10 +100,10 @@ public void display(){ } System.out.println(); } - + /** * Main method - * + * * @param args Command line arguments */ public static void main(String args[]){ @@ -122,19 +127,23 @@ public static void main(String args[]){ * This class is the nodes of the SinglyLinked List. * They consist of a value and a pointer to the node * after them. - * + * * @author Unknown * */ class Node{ /** The value of the node */ public int value; + /** + * The count of Indexes + */ + public static int indexCount; /** Point to the next node */ public Node next; //This is what the link will point to /** * Constructor - * + * * @param valuein Value to be put in the node */ public Node(int valuein){ @@ -147,5 +156,10 @@ public Node(int valuein){ public int getValue(){ return value; } - + /** + * @return the count of indexes + */ + public static int getIndexCount() { + return indexCount; + } } From f348e1832b1e0232c44539ad09203cf5348618c6 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sun, 27 Jan 2019 09:46:48 +0800 Subject: [PATCH 089/521] Update SinglyLinkedList.java --- DataStructures/Lists/SinglyLinkedList.java | 236 ++++++++++----------- 1 file changed, 110 insertions(+), 126 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index e1eef01f5563..1d61e31b2ad0 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -1,7 +1,7 @@ /** * This class implements a SinglyLinked List. This is done * using SinglyLinkedList class and a LinkForLinkedList Class. - * + *

* A linked list is similar to an array, it hold values. * However, links in a linked list do not have indexes. With * a linked list you do not need to predetermine it's size as @@ -9,118 +9,115 @@ * a singly linked list. Elements can only be added/removed * at the head/front of the list. * - * @author Unknown - * + * @author yanglbme */ -class SinglyLinkedList{ - /**Head refered to the front of the list */ - private Node head; - - /** - * Constructor of SinglyLinkedList - */ - public SinglyLinkedList(){ - head = null; - } - - /** - * This method inserts an element at the head - * - * @param x Element to be added - */ - public void insertHead(int x){ - Node newNode = new Node(x); //Create a new link with a value attached to it - newNode.next = head; //Set the new link to point to the current head - head = newNode; //Now set the new link to be the head - Node.indexCount++; //Count the all indexes of inserted values - } +class SinglyLinkedList { + /** + * Head refer to the front of the list + */ + private Node head; + /** - * Insert values at spesific position - * @param number inserted value - * @param position spesific position of inserted value + * Count of nodes */ - public void addToSpecifiedPosition(int number, int position) { - InsertNth(head, number, position); + private int count; + + /** + * This method inserts an element at the head + * + * @param x Element to be added + */ + public void insertHead(int x) { + Node newNode = new Node(x); + newNode.next = head; + head = newNode; + ++count; } - /** + /** * Inserts a new node at a specified position - * @param head head node of the linked list + * * @param data data to be stored in a new node * @param position position at which a new node is to be inserted - * @return reference of the head of the linked list */ - Node InsertNth(Node head, int data, int position) { - - Node newNode = new Node(data); - Node current = head; - int temp = position - Node.getIndexCount(); + public void insertNth(int data, int position) { + if (position < 0 || position > count) { + throw new RuntimeException("position less than zero or position more than the count of list"); + } + Node node = new Node(data); + Node dummy = new Node(-1); + dummy.next = head; + Node cur = dummy; + for (int i = 0; i < position; ++i) { + cur = cur.next; + } + node.next = cur.next; + cur.next = node; + ++count; + } - while (temp-- > 0) { - insertHead(0); - System.out.println("Do something " + Node.indexCount); + /** + * This method deletes an element at the head + * + * @return The element deleted + */ + public Node deleteHead() { + if (isEmpty()) { + throw new RuntimeException("The list is empty!"); } - newNode.next = current; - head = newNode; - insertHead(newNode.value); - return head; + Node temp = head; + head = head.next; + --count; + return temp; + } + + /** + * Checks if the list is empty + * + * @return true is list is empty + */ + public boolean isEmpty() { + return count == 0; } - /** - * This method deletes an element at the head - * - * @return The element deleted - */ - public Node deleteHead(){ - Node temp = head; - head = head.next; //Make the second element in the list the new head, the Java garbage collector will later remove the old head - --Node.indexCount; - return temp; - } - - /** - * Checks if the list is empty - * - * @return true is list is empty - */ - public boolean isEmpty(){ - return(head == null); - } - - /** - * Prints contents of the list - */ - public void display(){ - Node current = head; - while(current!=null){ - System.out.print(current.getValue()+" "); - current = current.next; - } - System.out.println(); - } - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String args[]){ - SinglyLinkedList myList = new SinglyLinkedList(); - - System.out.println(myList.isEmpty()); //Will print true - - myList.insertHead(5); - myList.insertHead(7); - myList.insertHead(10); - - myList.display(); // 10(head) --> 7 --> 5 - - myList.deleteHead(); - - myList.display(); // 7(head) --> 5 - } + /** + * Prints contents of the list + */ + public void display() { + Node current = head; + while (current != null) { + System.out.print(current.value + " "); + current = current.next; + } + System.out.println(); + } + + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + SinglyLinkedList myList = new SinglyLinkedList(); + + assert myList.isEmpty(); + + myList.insertHead(5); + myList.insertHead(7); + myList.insertHead(10); + + myList.display(); // 10 -> 7 -> 5 + + myList.deleteHead(); + + myList.display(); // 7 -> 5 + + myList.insertNth(11, 2); + + myList.display(); // 7 -> 5 -> 11 + } } /** @@ -128,38 +125,25 @@ public static void main(String args[]){ * They consist of a value and a pointer to the node * after them. * - * @author Unknown - * + * @author yanglbme */ -class Node{ - /** The value of the node */ - public int value; +class Node { /** - * The count of Indexes + * The value of the node */ - public static int indexCount; - /** Point to the next node */ - public Node next; //This is what the link will point to - - /** - * Constructor - * - * @param valuein Value to be put in the node - */ - public Node(int valuein){ - value = valuein; - } - - /** - * Returns value of the node - */ - public int getValue(){ - return value; - } + int value; + + /** + * Point to the next node + */ + Node next; + /** - * @return the count of indexes + * Constructor + * + * @param value Value to be put in the node */ - public static int getIndexCount() { - return indexCount; + Node(int value) { + this.value = value; } } From d4f05e3af10f92d55c7e297c82bf0334d565ac24 Mon Sep 17 00:00:00 2001 From: saeed jinat Date: Wed, 30 Jan 2019 03:14:57 +0200 Subject: [PATCH 090/521] CursorLinkedList added CursorLinkedList basic implementation --- DataStructures/Lists/CursorLinkedList.java | 215 +++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 DataStructures/Lists/CursorLinkedList.java diff --git a/DataStructures/Lists/CursorLinkedList.java b/DataStructures/Lists/CursorLinkedList.java new file mode 100644 index 000000000000..04e2115df82b --- /dev/null +++ b/DataStructures/Lists/CursorLinkedList.java @@ -0,0 +1,215 @@ +public class CursorLinkedList { + + private static class Node { + + T element; + int next; + + Node(T element, int next) { + this.element = element; + this.next = next; + } + + boolean isEmpty() { + return element == null; + } + } + + + private final int os; + private int head; + private final Node[] cursorSpace; + private int count; + private final static int CURSOR_SPACE_SIZE = 100; + + + { + // init at loading time + cursorSpace = new Node[CURSOR_SPACE_SIZE]; + for (int i = 0; i < CURSOR_SPACE_SIZE; i++) { + cursorSpace[i] = new Node<>(null, i + 1); + } + cursorSpace[CURSOR_SPACE_SIZE - 1].next = 0; + } + + + public CursorLinkedList() { + os = 0; + count = 0; + head = -1; + } + + public void printList() { + + if (head != -1) { + + + int start = head; + while (start != -1) { + + T element = cursorSpace[start].element; + System.out.println(element.toString()); + start = cursorSpace[start].next; + } + } + + } + + + /** + * @return the logical index of the element within the list , not the actual + * index of the [cursorSpace] array + */ + public int indexOf(T element) { + + + Objects.requireNonNull(element); + Node iterator = cursorSpace[head]; + for (int i = 0; i < count; i++) { + if (iterator.element.equals(element)) { + return i; + } + iterator = cursorSpace[iterator.next]; + } + + + return -1; + } + + + /** + * @param position , the logical index of the element , not the actual one + * within the [cursorSpace] array . + * this method should be used to get the index give by indexOf() method. + * @return + */ + + public T get(int position) { + + if (position >= 0 && position < count) { + + int start = head; + int counter = 0; + while (start != -1) { + + T element = cursorSpace[start].element; + if (counter == position){ + return element; + } + + start = cursorSpace[start].next; + counter++; + } + + } + + return null; + } + + + public void removeByIndex(int index){ + + if(index >= 0 && index < count){ + + T element = get(index); + remove(element); + } + + } + + public void remove(T element) { + + + Objects.requireNonNull(element); + + // case element is in the head + T temp_element = cursorSpace[head].element; + int temp_next = cursorSpace[head].next; + if (temp_element.equals(element)) { + free(head); + head = temp_next; + } else { // otherwise cases + + int prev_index = head; + int current_index = cursorSpace[prev_index].next; + + while (current_index != -1 ) { + + T current_element = cursorSpace[current_index].element; + if(current_element.equals(element)){ + cursorSpace[prev_index].next = cursorSpace[current_index].next; + free(current_index); + break; + } + + prev_index = current_index; + current_index = cursorSpace[prev_index].next; + } + + } + + + count--; + + } + + private void free(int index) { + + Node os_node = cursorSpace[os]; + int os_next = os_node.next; + cursorSpace[os].next = index; + cursorSpace[index].element = null; + cursorSpace[index].next = os_next; + + } + + + public void append(T element) { + + Objects.requireNonNull(element); + int availableIndex = alloc(); + cursorSpace[availableIndex].element = element; + + if (head == -1) { + head = availableIndex; + } + + int iterator = head; + while (cursorSpace[iterator].next != -1) { + iterator = cursorSpace[iterator].next; + } + + cursorSpace[iterator].next = availableIndex; + cursorSpace[availableIndex].next = -1; + + + count++; + } + + /** + * @return the index of the next available node + */ + private int alloc() { + + + //1- get the index at which the os is pointing + int availableNodeIndex = cursorSpace[os].next; + + if (availableNodeIndex == 0) { + throw new OutOfMemoryError(); + } + + //2- make the os point to the next of the @var{availableNodeIndex} + int availableNext = cursorSpace[availableNodeIndex].next; + cursorSpace[os].next = availableNext; + + // this to indicate an end of the list , helpful at testing since any err + // would throw an outOfBoundException + cursorSpace[availableNodeIndex].next = -1; + + return availableNodeIndex; + + } + + +} From 2c38098a1c008f2b2f7a5d2f20508d31ca74221d Mon Sep 17 00:00:00 2001 From: saeed jinat Date: Wed, 30 Jan 2019 12:09:35 +0200 Subject: [PATCH 091/521] Update README.md added Cursor Linked List to the table --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 08c79b28baf3..522a80e1b083 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,7 @@ Graphs|Heaps|Lists|Queues| [DFS](DataStructures/Graphs/DFS.java)|[Heap](DataStructures/Heaps/Heap.java)|[Doubly Linked List](DataStructures/Lists/DoublyLinkedList.java)|[Queues](DataStructures/Queues/Queues.java)| [Graphs](DataStructures/Graphs/Graphs.java)|[Heap Element](DataStructures/Heaps/HeapElement.java)|[Singly Linked List](DataStructures/Lists/SinglyLinkedList.java)| [Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](Data%Structures/Heaps/MaxHeap.java)| +[CursorLinkedList](DataStructures/Lists/CursorLinkedList.java)| [Matrix Graphs](DataStructures/Graphs/MatrixGraphs.java)|[Min Heap](DataStructures/Heaps/MinHeap.java)| [PrimMST](DataStructures/Graphs/PrimMST.java)| From 22e7f7f147b4fcd0e142d135aa35bb988aba54d4 Mon Sep 17 00:00:00 2001 From: Ivan Kuzaev Date: Sun, 3 Feb 2019 08:50:02 +0300 Subject: [PATCH 092/521] Update PalindromicPrime.java Method prime(num) uses only odd numbers from 3 to square root of num as divisors. In method functioning(y) we iterate over odd numbers as all even numbers (except of 2) are not prime. In method functioning(y) we check at first if the number is palindrome and then if it's prime, so we don't have to call the heavy prime() method for every number. The speed of searching palindromic primes is significantly increased. --- Misc/PalindromicPrime.java | 39 ++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/Misc/PalindromicPrime.java b/Misc/PalindromicPrime.java index 866467206456..bb2c82480634 100644 --- a/Misc/PalindromicPrime.java +++ b/Misc/PalindromicPrime.java @@ -1,15 +1,16 @@ import java.util.Scanner; + public class PalindromePrime { public static void main(String[] args) { // Main funtion Scanner in = new Scanner(System.in); System.out.println("Enter the quantity of First Palindromic Primes you want"); - int n = in.nextInt(); // Input of how mant first pallindromic prime we want - funtioning(n); // calling funtion - functioning + int n = in.nextInt(); // Input of how many first pallindromic prime we want + functioning(n); // calling function - functioning } public static boolean prime(int num) { // checking if number is prime or not - for (int divisor = 2; divisor <= num / 2; divisor++) { + for (int divisor = 3; divisor <= Math.sqrt(num); divisor += 2) { if (num % divisor == 0) { return false; // false if not prime } @@ -17,25 +18,27 @@ public static boolean prime(int num) { // checking if number is prime or not return true; // True if prime } - public static int reverse(int n){ // Returns the reverse of the number + public static int reverse(int n) { // Returns the reverse of the number int reverse = 0; - while(n!=0){ - reverse = reverse * 10; - reverse = reverse + n%10; - n = n/10; + while(n != 0) { + reverse *= 10; + reverse += n%10; + n /= 10; } return reverse; } - public static void funtioning(int y){ - int count =0; - int num = 2; - while(count < y){ - if(prime(num) && num == reverse(num)){ // number is prime and it's reverse is same - count++; // counts check when to terminate while loop - System.out.print(num + "\n"); // Print the Palindromic Prime - } - num++; // inrease iterator value by one + public static void functioning(int y) { + if (y == 0) return; + System.out.print(2 + "\n"); // print the first Palindromic Prime + int count = 1; + int num = 3; + while(count < y) { + if(num == reverse(num) && prime(num)) { // number is prime and it's reverse is same + count++; // counts check when to terminate while loop + System.out.print(num + "\n"); // print the Palindromic Prime } + num += 2; // inrease iterator value by two + } } -}; +} From 6351bf2efcb0a07623261c3a3cb4b3de193fcc56 Mon Sep 17 00:00:00 2001 From: Bolot Bekbolotov Date: Sun, 3 Feb 2019 20:48:44 +0600 Subject: [PATCH 093/521] Added Euler's totient Function --- Others/EulersFunction.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Others/EulersFunction.java diff --git a/Others/EulersFunction.java b/Others/EulersFunction.java new file mode 100644 index 000000000000..27f4f1f739f6 --- /dev/null +++ b/Others/EulersFunction.java @@ -0,0 +1,20 @@ +//You can read more about Euler's totient function https://en.wikipedia.org/wiki/Euler%27s_totient_function +public class EulersFunction { + //This method returns us number of x that (x < n) and gcd(x, n) == 1 in O(sqrt(n)) time complexity; + public static int getEuler(int n) { + int result = n; + for (int i = 2; i * i <= n; i++) { + if(n % i == 0) { + while (n % i == 0) n /= i; + result -= result / i; + } + } + if (n > 1) result -= result / n; + return result; + } + public static void main(String[] args) { + for(int i = 1; i < 100; i++) { + System.out.println(getEuler(i)); + } + } +} From 12215a11d3b77c45e074daf096fd1cf43a15cb93 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Mon, 4 Feb 2019 11:27:42 +0800 Subject: [PATCH 094/521] Update EulersFunction.java --- Others/EulersFunction.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Others/EulersFunction.java b/Others/EulersFunction.java index 27f4f1f739f6..01b7575d4dc5 100644 --- a/Others/EulersFunction.java +++ b/Others/EulersFunction.java @@ -1,6 +1,7 @@ -//You can read more about Euler's totient function https://en.wikipedia.org/wiki/Euler%27s_totient_function +// You can read more about Euler's totient function +// https://en.wikipedia.org/wiki/Euler%27s_totient_function public class EulersFunction { - //This method returns us number of x that (x < n) and gcd(x, n) == 1 in O(sqrt(n)) time complexity; + // This method returns us number of x that (x < n) and gcd(x, n) == 1 in O(sqrt(n)) time complexity; public static int getEuler(int n) { int result = n; for (int i = 2; i * i <= n; i++) { @@ -13,7 +14,7 @@ public static int getEuler(int n) { return result; } public static void main(String[] args) { - for(int i = 1; i < 100; i++) { + for (int i = 1; i < 100; i++) { System.out.println(getEuler(i)); } } From cbfa8875aa2f882688685b0f5b71ad96f6c16c61 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Mon, 4 Feb 2019 16:18:12 +0800 Subject: [PATCH 095/521] Update CSVFile.java to fix #705 - Fix wrong assignation --- DataStructures/CSVFile/src/CSVFile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/CSVFile/src/CSVFile.java b/DataStructures/CSVFile/src/CSVFile.java index 7bc6186c1daf..e838a24670ae 100644 --- a/DataStructures/CSVFile/src/CSVFile.java +++ b/DataStructures/CSVFile/src/CSVFile.java @@ -136,7 +136,7 @@ public CSVFile(char separator) { table = new ArrayList>(); trackList = new ArrayList(); pathCSVFile = ""; - this.seperator = seperator; + this.seperator = separator; } From f2f79821acde62c58671ad9990dca78e2bbbb1c0 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Tue, 5 Feb 2019 13:03:37 +0800 Subject: [PATCH 096/521] fix: remove unused imports to fix #699 - Fix #699 - Thanks @lprone --- Conversions/HexaDecimalToBinary.java | 15 +++----- Others/RootPrecision.java | 55 ++++++++++++++-------------- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/Conversions/HexaDecimalToBinary.java b/Conversions/HexaDecimalToBinary.java index 29608e1d6999..b6457beff2b6 100644 --- a/Conversions/HexaDecimalToBinary.java +++ b/Conversions/HexaDecimalToBinary.java @@ -1,18 +1,13 @@ -import java.lang.StringBuilder; -import java.util.*; -import java.util.Scanner; -import javax.swing.*; - public class HexaDecimalToBinary { - + private final int LONG_BITS = 8; public void convert(String numHex) { - //String a HexaDecimal: + // String a HexaDecimal: int conHex = Integer.parseInt(numHex, 16); - //Hex a Binary: + // Hex a Binary: String binary = Integer.toBinaryString(conHex); - //Presentation: + // Presentation: System.out.println(numHex + " = " + completeDigits(binary)); } @@ -27,7 +22,7 @@ public static void main(String[] args) { //Testing Numbers: String[] hexNums = {"1", "A1", "ef", "BA", "AA", "BB", - "19", "01", "02", "03", "04"}; + "19", "01", "02", "03", "04"}; HexaDecimalToBinary objConvert = new HexaDecimalToBinary(); for (String num : hexNums) { diff --git a/Others/RootPrecision.java b/Others/RootPrecision.java index b792d692f675..3e3b73b82836 100644 --- a/Others/RootPrecision.java +++ b/Others/RootPrecision.java @@ -1,33 +1,32 @@ -import java.io.*; -import java.util.*; -import java.text.*; -import java.math.*; -import java.util.regex.*; +import java.util.Scanner; public class RootPrecision { public static void main(String[] args) { - //take input - Scanner scn = new Scanner(System.in); - - int N = scn.nextInt(); //N is the input number - int P = scn.nextInt(); //P is precision value for eg - P is 3 in 2.564 and 5 in 3.80870. - - System.out.println(squareRoot(N, P)); - } - - public static double squareRoot(int N, int P) { - double rv = 0; //rv means return value - + // take input + Scanner scn = new Scanner(System.in); + + // N is the input number + int N = scn.nextInt(); + + // P is precision value for eg - P is 3 in 2.564 and 5 in 3.80870. + int P = scn.nextInt(); + System.out.println(squareRoot(N, P)); + } + + public static double squareRoot(int N, int P) { + // rv means return value + double rv; + double root = Math.pow(N, 0.5); - - //calculate precision to power of 10 and then multiply it with root value. - int precision = (int) Math.pow(10, P); - root = root * precision; - /*typecast it into integer then divide by precision and again typecast into double - so as to have decimal points upto P precision */ - - rv = (int)root; - return (double)rv/precision; - } -} + + // calculate precision to power of 10 and then multiply it with root value. + int precision = (int) Math.pow(10, P); + root = root * precision; + /*typecast it into integer then divide by precision and again typecast into double + so as to have decimal points upto P precision */ + + rv = (int) root; + return rv / precision; + } +} \ No newline at end of file From bb670a2cebd7f5af76957a5f46c962c82bf6995b Mon Sep 17 00:00:00 2001 From: yanglbme Date: Tue, 5 Feb 2019 13:10:40 +0800 Subject: [PATCH 097/521] fix: remove unnecesary assignation to fix #698 - Fix #698 - Thanks @lprone --- Dynamic Programming/Fibonacci.java | 72 +++++++++++++----------------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/Dynamic Programming/Fibonacci.java b/Dynamic Programming/Fibonacci.java index d177b5bb9c5d..8f9326ba9d94 100644 --- a/Dynamic Programming/Fibonacci.java +++ b/Dynamic Programming/Fibonacci.java @@ -4,14 +4,13 @@ import java.util.Map; /** - * * @author Varun Upadhyay (https://github.com/varunu28) - * + * @author yanglbme (https://github.com/yanglbme) */ public class Fibonacci { - private static Map map = new HashMap(); + private static Map map = new HashMap<>(); public static void main(String[] args) throws Exception { @@ -26,13 +25,8 @@ public static void main(String[] args) throws Exception { * This method finds the nth fibonacci number using memoization technique * * @param n The input n for which we have to determine the fibonacci number - * Outputs the nth fibonacci number + * Outputs the nth fibonacci number **/ - - - - - private static int fibMemo(int n) { if (map.containsKey(n)) { return map.get(n); @@ -42,10 +36,9 @@ private static int fibMemo(int n) { if (n <= 2) { f = 1; - } - else { - f = fibMemo(n-1) + fibMemo(n-2); - map.put(n,f); + } else { + f = fibMemo(n - 1) + fibMemo(n - 2); + map.put(n, f); } return f; @@ -55,55 +48,50 @@ private static int fibMemo(int n) { * This method finds the nth fibonacci number using bottom up * * @param n The input n for which we have to determine the fibonacci number - * Outputs the nth fibonacci number + * Outputs the nth fibonacci number **/ - private static int fibBotUp(int n) { - Map fib = new HashMap(); + Map fib = new HashMap<>(); - for (int i=1;i + * This is optimized version of Fibonacci Program. Without using Hashmap and recursion. + * It saves both memory and time. + * Space Complexity will be O(1) + * Time Complexity will be O(n) + *

+ * Whereas , the above functions will take O(n) Space. + * @author Shoaib Rayeen (https://github.com/shoaibrayeen) **/ private static int fibOptimized(int n) { - if (n == 0) { return 0; } - int prev = 0 , res = 1 , next; - for ( int i = 2; i < n; i++) { - next = prev + res; - prev = res; - res = next; + int prev = 0, res = 1, next; + for (int i = 2; i < n; i++) { + next = prev + res; + prev = res; + res = next; } return res; } -} - +} \ No newline at end of file From 8b92c3fdbeedb7ae0d3b5b6d79871af91cf7c2ea Mon Sep 17 00:00:00 2001 From: yanglbme Date: Wed, 6 Feb 2019 10:13:55 +0800 Subject: [PATCH 098/521] fix: remove unnecesary throw to fix #704 - Fix #704 - Thanks @lprone --- DataStructures/Heaps/EmptyHeapException.java | 7 +- DataStructures/Heaps/Heap.java | 25 +- DataStructures/Heaps/HeapElement.java | 58 ++-- DataStructures/Heaps/MaxHeap.java | 94 +++--- DataStructures/Heaps/MinHeap.java | 86 ++--- DataStructures/Heaps/MinPriorityQueue.java | 42 +-- .../LongestIncreasingSubsequence.java | 29 +- Others/Dijkshtra.java | 73 ++-- Others/Dijkstra.java | 319 +++++++++--------- 9 files changed, 369 insertions(+), 364 deletions(-) diff --git a/DataStructures/Heaps/EmptyHeapException.java b/DataStructures/Heaps/EmptyHeapException.java index b7d853c56845..01668e2c849a 100644 --- a/DataStructures/Heaps/EmptyHeapException.java +++ b/DataStructures/Heaps/EmptyHeapException.java @@ -1,16 +1,15 @@ /** - * + * */ -package heaps; +package Heaps; /** * @author Nicolas Renard * Exception to be thrown if the getElement method is used on an empty heap. - * */ @SuppressWarnings("serial") public class EmptyHeapException extends Exception { - + public EmptyHeapException(String message) { super(message); } diff --git a/DataStructures/Heaps/Heap.java b/DataStructures/Heaps/Heap.java index 02b2ba270918..fe87d72a1db2 100644 --- a/DataStructures/Heaps/Heap.java +++ b/DataStructures/Heaps/Heap.java @@ -1,4 +1,4 @@ -package heaps; +package Heaps; /** * Interface common to heap data structures.
@@ -10,32 +10,31 @@ * max-heap).

*

All heap-related operations (inserting or deleting an element, extracting the min or max) are performed in * O(log n) time.

+ * * @author Nicolas Renard - * - * */ public interface Heap { - + /** - * * @return the top element in the heap, the one with lowest key for min-heap or with * the highest key for max-heap - * @throws Exception if heap is empty + * @throws EmptyHeapException if heap is empty */ - public abstract HeapElement getElement() throws EmptyHeapException; + HeapElement getElement() throws EmptyHeapException; + /** * Inserts an element in the heap. Adds it to then end and toggle it until it finds its * right position. - * + * * @param element an instance of the HeapElement class. */ - public abstract void insertElement(HeapElement element); - + void insertElement(HeapElement element); + /** * Delete an element in the heap. - * + * * @param elementIndex int containing the position in the heap of the element to be deleted. */ - public abstract void deleteElement(int elementIndex); + void deleteElement(int elementIndex); -} +} \ No newline at end of file diff --git a/DataStructures/Heaps/HeapElement.java b/DataStructures/Heaps/HeapElement.java index e0cc93ccbfe0..60640346b3cc 100644 --- a/DataStructures/Heaps/HeapElement.java +++ b/DataStructures/Heaps/HeapElement.java @@ -1,7 +1,7 @@ /** - * + * */ -package heaps; +package Heaps; import java.lang.Double; import java.lang.Object; @@ -12,116 +12,110 @@ * or double, either primitive type or object) and any kind of IMMUTABLE object the user sees fit * to carry any information he/she likes. Be aware that the use of a mutable object might * jeopardize the integrity of this information.

- * @author Nicolas Renard * + * @author Nicolas Renard */ public class HeapElement { private final double key; private final Object additionalInfo; - + // Constructors /** - * - * @param key : a number of primitive type 'double' + * @param key : a number of primitive type 'double' * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry - * additional information of use for the user + * additional information of use for the user */ public HeapElement(double key, Object info) { this.key = key; this.additionalInfo = info; } - + /** - * - * @param key : a number of primitive type 'int' + * @param key : a number of primitive type 'int' * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry - * additional information of use for the user + * additional information of use for the user */ public HeapElement(int key, Object info) { this.key = key; this.additionalInfo = info; } - + /** - * - * @param key : a number of object type 'Integer' + * @param key : a number of object type 'Integer' * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry - * additional information of use for the user + * additional information of use for the user */ public HeapElement(Integer key, Object info) { this.key = key; this.additionalInfo = info; } - + /** - * - * @param key : a number of object type 'Double' + * @param key : a number of object type 'Double' * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry - * additional information of use for the user + * additional information of use for the user */ public HeapElement(Double key, Object info) { this.key = key; this.additionalInfo = info; } - + /** - * * @param key : a number of primitive type 'double' */ public HeapElement(double key) { this.key = key; this.additionalInfo = null; } - + /** - * * @param key : a number of primitive type 'int' */ public HeapElement(int key) { this.key = key; this.additionalInfo = null; } - + /** - * * @param key : a number of object type 'Integer' */ public HeapElement(Integer key) { this.key = key; this.additionalInfo = null; } - + /** - * * @param key : a number of object type 'Double' */ public HeapElement(Double key) { this.key = key; this.additionalInfo = null; } - + // Getters + /** * @return the object containing the additional info provided by the user. */ public Object getInfo() { return additionalInfo; } + /** * @return the key value of the element */ public double getKey() { return key; } - + // Overridden object methods - + public String toString() { - return "Key: " + key + " - " +additionalInfo.toString(); + return "Key: " + key + " - " + additionalInfo.toString(); } + /** - * * @param otherHeapElement * @return true if the keys on both elements are identical and the additional info objects * are identical. diff --git a/DataStructures/Heaps/MaxHeap.java b/DataStructures/Heaps/MaxHeap.java index 5f774e3534a8..302840c14d05 100644 --- a/DataStructures/Heaps/MaxHeap.java +++ b/DataStructures/Heaps/MaxHeap.java @@ -1,4 +1,4 @@ -package heaps; +package Heaps; import java.util.ArrayList; import java.util.List; @@ -6,66 +6,71 @@ /** * Heap tree where a node's key is higher than or equal to its parent's and lower than or equal * to its children's. - * @author Nicolas Renard * + * @author Nicolas Renard */ public class MaxHeap implements Heap { - + private final List maxHeap; - - public MaxHeap(List listElements) throws Exception { - maxHeap = new ArrayList(); + + public MaxHeap(List listElements) { + maxHeap = new ArrayList<>(); for (HeapElement heapElement : listElements) { if (heapElement != null) insertElement(heapElement); else System.out.println("Null element. Not added to heap"); } if (maxHeap.size() == 0) System.out.println("No element has been added, empty heap."); - } - - // Get the element at a given index. The key for the list is equal to index value - 1 + } + + /** + * Get the element at a given index. The key for the list is equal to index value - 1 + * + * @param elementIndex index + * @return heapElement + */ public HeapElement getElement(int elementIndex) { - if ((elementIndex <= 0) && (elementIndex > maxHeap.size())) throw new IndexOutOfBoundsException("Index out of heap range"); + if ((elementIndex <= 0) || (elementIndex > maxHeap.size())) + throw new IndexOutOfBoundsException("Index out of heap range"); return maxHeap.get(elementIndex - 1); } - + // Get the key of the element at a given index private double getElementKey(int elementIndex) { return maxHeap.get(elementIndex - 1).getKey(); } - + // Swaps two elements in the heap private void swap(int index1, int index2) { HeapElement temporaryElement = maxHeap.get(index1 - 1); maxHeap.set(index1 - 1, maxHeap.get(index2 - 1)); maxHeap.set(index2 - 1, temporaryElement); } - - // Toggle an element up to its right place as long as its key is lower than its parent's + + // Toggle an element up to its right place as long as its key is lower than its parent's private void toggleUp(int elementIndex) { double key = maxHeap.get(elementIndex - 1).getKey(); - while (getElementKey((int) Math.floor(elementIndex/2)) < key) { - swap(elementIndex, (int) Math.floor(elementIndex/2)); - elementIndex = (int) Math.floor(elementIndex/2); + while (getElementKey((int) Math.floor(elementIndex / 2)) < key) { + swap(elementIndex, (int) Math.floor(elementIndex / 2)); + elementIndex = (int) Math.floor(elementIndex / 2); } } - + // Toggle an element down to its right place as long as its key is higher - // than any of its children's + // than any of its children's private void toggleDown(int elementIndex) { double key = maxHeap.get(elementIndex - 1).getKey(); - boolean wrongOrder = (key < getElementKey(elementIndex*2)) || (key < getElementKey(Math.min(elementIndex*2, maxHeap.size()))); - while ((2*elementIndex <= maxHeap.size()) && wrongOrder) { + boolean wrongOrder = (key < getElementKey(elementIndex * 2)) || (key < getElementKey(Math.min(elementIndex * 2, maxHeap.size()))); + while ((2 * elementIndex <= maxHeap.size()) && wrongOrder) { // Check whether it shall swap the element with its left child or its right one if any. - if ((2*elementIndex < maxHeap.size()) && (getElementKey(elementIndex*2 + 1) > getElementKey(elementIndex*2))) { - swap(elementIndex, 2*elementIndex + 1); - elementIndex = 2*elementIndex + 1; + if ((2 * elementIndex < maxHeap.size()) && (getElementKey(elementIndex * 2 + 1) > getElementKey(elementIndex * 2))) { + swap(elementIndex, 2 * elementIndex + 1); + elementIndex = 2 * elementIndex + 1; + } else { + swap(elementIndex, 2 * elementIndex); + elementIndex = 2 * elementIndex; } - else { - swap(elementIndex, 2*elementIndex); - elementIndex = 2*elementIndex; - } - wrongOrder = (key < getElementKey(elementIndex*2)) || (key < getElementKey(Math.min(elementIndex*2, maxHeap.size()))); - + wrongOrder = (key < getElementKey(elementIndex * 2)) || (key < getElementKey(Math.min(elementIndex * 2, maxHeap.size()))); + } } @@ -84,21 +89,23 @@ public void insertElement(HeapElement element) { @Override public void deleteElement(int elementIndex) { - if (maxHeap.isEmpty()) - try { - throw new EmptyHeapException("Attempt to delete an element from an empty heap"); - } catch (EmptyHeapException e) { - e.printStackTrace(); - } - if ((elementIndex > maxHeap.size()) && (elementIndex <= 0)) throw new IndexOutOfBoundsException("Index out of heap range"); + if (maxHeap.isEmpty()) + try { + throw new EmptyHeapException("Attempt to delete an element from an empty heap"); + } catch (EmptyHeapException e) { + e.printStackTrace(); + } + if ((elementIndex > maxHeap.size()) || (elementIndex <= 0)) + throw new IndexOutOfBoundsException("Index out of heap range"); // The last element in heap replaces the one to be deleted maxHeap.set(elementIndex - 1, getElement(maxHeap.size())); maxHeap.remove(maxHeap.size()); // Shall the new element be moved up... - if (getElementKey(elementIndex) > getElementKey((int) Math.floor(elementIndex/2))) toggleUp(elementIndex); - // ... or down ? - else if (((2*elementIndex <= maxHeap.size()) && (getElementKey(elementIndex) < getElementKey(elementIndex*2))) || - ((2*elementIndex < maxHeap.size()) && (getElementKey(elementIndex) < getElementKey(elementIndex*2)))) toggleDown(elementIndex); + if (getElementKey(elementIndex) > getElementKey((int) Math.floor(elementIndex / 2))) toggleUp(elementIndex); + // ... or down ? + else if (((2 * elementIndex <= maxHeap.size()) && (getElementKey(elementIndex) < getElementKey(elementIndex * 2))) || + ((2 * elementIndex < maxHeap.size()) && (getElementKey(elementIndex) < getElementKey(elementIndex * 2)))) + toggleDown(elementIndex); } @Override @@ -109,7 +116,4 @@ public HeapElement getElement() throws EmptyHeapException { throw new EmptyHeapException("Heap is empty. Error retrieving element"); } } - -} - - +} \ No newline at end of file diff --git a/DataStructures/Heaps/MinHeap.java b/DataStructures/Heaps/MinHeap.java index fbf2b86ffc3e..5fca978f6549 100644 --- a/DataStructures/Heaps/MinHeap.java +++ b/DataStructures/Heaps/MinHeap.java @@ -1,7 +1,7 @@ /** - * + * */ -package heaps; +package Heaps; import java.util.ArrayList; import java.util.List; @@ -9,66 +9,66 @@ /** * Heap tree where a node's key is higher than or equal to its parent's and lower than or equal * to its children's. - * @author Nicolas Renard * + * @author Nicolas Renard */ public class MinHeap implements Heap { - + private final List minHeap; - - public MinHeap(List listElements) throws Exception { - minHeap = new ArrayList(); + + public MinHeap(List listElements) { + minHeap = new ArrayList<>(); for (HeapElement heapElement : listElements) { if (heapElement != null) insertElement(heapElement); else System.out.println("Null element. Not added to heap"); } if (minHeap.size() == 0) System.out.println("No element has been added, empty heap."); } - + // Get the element at a given index. The key for the list is equal to index value - 1 public HeapElement getElement(int elementIndex) { - if ((elementIndex <= 0) && (elementIndex > minHeap.size())) throw new IndexOutOfBoundsException("Index out of heap range"); + if ((elementIndex <= 0) || (elementIndex > minHeap.size())) + throw new IndexOutOfBoundsException("Index out of heap range"); return minHeap.get(elementIndex - 1); } - + // Get the key of the element at a given index private double getElementKey(int elementIndex) { return minHeap.get(elementIndex - 1).getKey(); } - + // Swaps two elements in the heap private void swap(int index1, int index2) { HeapElement temporaryElement = minHeap.get(index1 - 1); minHeap.set(index1 - 1, minHeap.get(index2 - 1)); minHeap.set(index2 - 1, temporaryElement); } - - // Toggle an element up to its right place as long as its key is lower than its parent's + + // Toggle an element up to its right place as long as its key is lower than its parent's private void toggleUp(int elementIndex) { double key = minHeap.get(elementIndex - 1).getKey(); - while (getElementKey((int) Math.floor(elementIndex/2)) > key) { - swap(elementIndex, (int) Math.floor(elementIndex/2)); - elementIndex = (int) Math.floor(elementIndex/2); + while (getElementKey((int) Math.floor(elementIndex / 2)) > key) { + swap(elementIndex, (int) Math.floor(elementIndex / 2)); + elementIndex = (int) Math.floor(elementIndex / 2); } } - + // Toggle an element down to its right place as long as its key is higher - // than any of its children's + // than any of its children's private void toggleDown(int elementIndex) { double key = minHeap.get(elementIndex - 1).getKey(); - boolean wrongOrder = (key > getElementKey(elementIndex*2)) || (key > getElementKey(Math.min(elementIndex*2, minHeap.size()))); - while ((2*elementIndex <= minHeap.size()) && wrongOrder) { + boolean wrongOrder = (key > getElementKey(elementIndex * 2)) || (key > getElementKey(Math.min(elementIndex * 2, minHeap.size()))); + while ((2 * elementIndex <= minHeap.size()) && wrongOrder) { // Check whether it shall swap the element with its left child or its right one if any. - if ((2*elementIndex < minHeap.size()) && (getElementKey(elementIndex*2 + 1) < getElementKey(elementIndex*2))) { - swap(elementIndex, 2*elementIndex + 1); - elementIndex = 2*elementIndex + 1; - } - else { - swap(elementIndex, 2*elementIndex); - elementIndex = 2*elementIndex; + if ((2 * elementIndex < minHeap.size()) && (getElementKey(elementIndex * 2 + 1) < getElementKey(elementIndex * 2))) { + swap(elementIndex, 2 * elementIndex + 1); + elementIndex = 2 * elementIndex + 1; + } else { + swap(elementIndex, 2 * elementIndex); + elementIndex = 2 * elementIndex; } - wrongOrder = (key > getElementKey(elementIndex*2)) || (key > getElementKey(Math.min(elementIndex*2, minHeap.size()))); - + wrongOrder = (key > getElementKey(elementIndex * 2)) || (key > getElementKey(Math.min(elementIndex * 2, minHeap.size()))); + } } @@ -87,23 +87,25 @@ public void insertElement(HeapElement element) { @Override public void deleteElement(int elementIndex) { - if (minHeap.isEmpty()) - try { - throw new EmptyHeapException("Attempt to delete an element from an empty heap"); - } catch (EmptyHeapException e) { - e.printStackTrace(); - } - if ((elementIndex > minHeap.size()) && (elementIndex <= 0)) throw new IndexOutOfBoundsException("Index out of heap range"); + if (minHeap.isEmpty()) + try { + throw new EmptyHeapException("Attempt to delete an element from an empty heap"); + } catch (EmptyHeapException e) { + e.printStackTrace(); + } + if ((elementIndex > minHeap.size()) || (elementIndex <= 0)) + throw new IndexOutOfBoundsException("Index out of heap range"); // The last element in heap replaces the one to be deleted minHeap.set(elementIndex - 1, getElement(minHeap.size())); minHeap.remove(minHeap.size()); // Shall the new element be moved up... - if (getElementKey(elementIndex) < getElementKey((int) Math.floor(elementIndex/2))) toggleUp(elementIndex); - // ... or down ? - else if (((2*elementIndex <= minHeap.size()) && (getElementKey(elementIndex) > getElementKey(elementIndex*2))) || - ((2*elementIndex < minHeap.size()) && (getElementKey(elementIndex) > getElementKey(elementIndex*2)))) toggleDown(elementIndex); + if (getElementKey(elementIndex) < getElementKey((int) Math.floor(elementIndex / 2))) toggleUp(elementIndex); + // ... or down ? + else if (((2 * elementIndex <= minHeap.size()) && (getElementKey(elementIndex) > getElementKey(elementIndex * 2))) || + ((2 * elementIndex < minHeap.size()) && (getElementKey(elementIndex) > getElementKey(elementIndex * 2)))) + toggleDown(elementIndex); } - + @Override public HeapElement getElement() throws EmptyHeapException { try { @@ -112,4 +114,4 @@ public HeapElement getElement() throws EmptyHeapException { throw new EmptyHeapException("Heap is empty. Error retrieving element"); } } -} +} \ No newline at end of file diff --git a/DataStructures/Heaps/MinPriorityQueue.java b/DataStructures/Heaps/MinPriorityQueue.java index 3dc2bd28083c..f117b932800b 100644 --- a/DataStructures/Heaps/MinPriorityQueue.java +++ b/DataStructures/Heaps/MinPriorityQueue.java @@ -1,13 +1,13 @@ - +package Heaps; /* Minimum Priority Queue -* It is a part of heap data structure -* A heap is a specific tree based data structure -* in which all the nodes of tree are in a specific order. -* that is the children are arranged in some -* respect of their parents, can either be greater -* or less than the parent. This makes it a min priority queue -* or max priority queue. -*/ + * It is a part of heap data structure + * A heap is a specific tree based data structure + * in which all the nodes of tree are in a specific order. + * that is the children are arranged in some + * respect of their parents, can either be greater + * or less than the parent. This makes it a min priority queue + * or max priority queue. + */ // Functions: insert, delete, peek, isEmpty, print, heapSort, sink @@ -16,15 +16,15 @@ public class MinPriorityQueue { private int capacity; private int size; - // calss the constructor and initializes the capacity + // calss the constructor and initializes the capacity MinPriorityQueue(int c) { this.capacity = c; this.size = 0; this.heap = new int[c + 1]; } - // inserts the key at the end and rearranges it - // so that the binary heap is in appropriate order + // inserts the key at the end and rearranges it + // so that the binary heap is in appropriate order public void insert(int key) { if (this.isFull()) return; @@ -41,41 +41,41 @@ public void insert(int key) { this.size++; } - // returns the highest priority value + // returns the highest priority value public int peek() { return this.heap[1]; } - // returns boolean value whether the heap is empty or not + // returns boolean value whether the heap is empty or not public boolean isEmpty() { if (0 == this.size) return true; return false; } - // returns boolean value whether the heap is full or not + // returns boolean value whether the heap is full or not public boolean isFull() { if (this.size == this.capacity) return true; return false; } - // prints the heap + // prints the heap public void print() { for (int i = 1; i <= this.capacity; i++) System.out.print(this.heap[i] + " "); System.out.println(); } - // heap sorting can be done by performing - // delete function to the number of times of the size of the heap - // it returns reverse sort because it is a min priority queue + // heap sorting can be done by performing + // delete function to the number of times of the size of the heap + // it returns reverse sort because it is a min priority queue public void heapSort() { for (int i = 1; i < this.capacity; i++) this.delete(); } - // this function reorders the heap after every delete function + // this function reorders the heap after every delete function private void sink() { int k = 1; while (2 * k <= this.size || 2 * k + 1 <= this.size) { @@ -103,7 +103,7 @@ private void sink() { } } - // deletes the highest priority value from the heap + // deletes the highest priority value from the heap public int delete() { int min = this.heap[1]; this.heap[1] = this.heap[this.size]; diff --git a/Dynamic Programming/LongestIncreasingSubsequence.java b/Dynamic Programming/LongestIncreasingSubsequence.java index eaa574a40989..ccbb88468bd3 100644 --- a/Dynamic Programming/LongestIncreasingSubsequence.java +++ b/Dynamic Programming/LongestIncreasingSubsequence.java @@ -1,12 +1,11 @@ import java.util.Scanner; /** - * * @author Afrizal Fikri (https://github.com/icalF) - * + * @author Libin Yang (https://github.com/yanglbme) */ public class LongestIncreasingSubsequence { - public static void main(String[] args) throws Exception { + public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); @@ -20,7 +19,7 @@ public static void main(String[] args) throws Exception { } private static int upperBound(int[] ar, int l, int r, int key) { - while (l < r-1) { + while (l < r - 1) { int m = (l + r) / 2; if (ar[m] >= key) r = m; @@ -35,10 +34,12 @@ private static int LIS(int[] array) { int N = array.length; if (N == 0) return 0; - + int[] tail = new int[N]; - int length = 1; // always points empty slot in tail - + + // always points empty slot in tail + int length = 1; + tail[0] = array[0]; for (int i = 1; i < N; i++) { @@ -46,17 +47,17 @@ private static int LIS(int[] array) { if (array[i] < tail[0]) tail[0] = array[i]; - // array[i] extends largest subsequence - else if (array[i] > tail[length-1]) + // array[i] extends largest subsequence + else if (array[i] > tail[length - 1]) tail[length++] = array[i]; - // array[i] will become end candidate of an existing subsequence or - // Throw away larger elements in all LIS, to make room for upcoming grater elements than array[i] - // (and also, array[i] would have already appeared in one of LIS, identify the location and replace it) + // array[i] will become end candidate of an existing subsequence or + // Throw away larger elements in all LIS, to make room for upcoming grater elements than array[i] + // (and also, array[i] would have already appeared in one of LIS, identify the location and replace it) else - tail[upperBound(tail, -1, length-1, array[i])] = array[i]; + tail[upperBound(tail, -1, length - 1, array[i])] = array[i]; } - + return length; } } \ No newline at end of file diff --git a/Others/Dijkshtra.java b/Others/Dijkshtra.java index e0bd6737a462..17f8391777aa 100644 --- a/Others/Dijkshtra.java +++ b/Others/Dijkshtra.java @@ -1,83 +1,82 @@ -/* -@author : Mayank K Jha +/** + * @author Mayank K Jha + */ -*/ - -import java.io.IOException; import java.util.Arrays; import java.util.Scanner; import java.util.Stack; public class Dijkshtra { - public static void main(String[] args) throws IOException { + public static void main(String[] args) { Scanner in = new Scanner(System.in); // n = Number of nodes or vertices - int n = in.nextInt(); + int n = in.nextInt(); // m = Number of Edges - int m = in.nextInt(); + int m = in.nextInt(); // Adjacency Matrix - long w[][] = new long [n+1][n+1]; + long[][] w = new long[n + 1][n + 1]; - //Initializing Matrix with Certain Maximum Value for path b/w any two vertices + // Initializing Matrix with Certain Maximum Value for path b/w any two vertices for (long[] row : w) { - Arrays.fill(row, 1000000l); + Arrays.fill(row, 1000000L); } /* From above,we Have assumed that,initially path b/w any two Pair of vertices is Infinite such that Infinite = 1000000l For simplicity , We can also take path Value = Long.MAX_VALUE , but i have taken Max Value = 1000000l */ // Taking Input as Edge Location b/w a pair of vertices - for(int i = 0; i < m; i++) { - int x = in.nextInt(),y=in.nextInt(); - long cmp = in.nextLong(); - - //Comparing previous edge value with current value - Cycle Case - if(w[x][y] > cmp) { - w[x][y] = cmp; w[y][x] = cmp; - } + for (int i = 0; i < m; i++) { + int x = in.nextInt(), y = in.nextInt(); + long cmp = in.nextLong(); + + // Comparing previous edge value with current value - Cycle Case + if (w[x][y] > cmp) { + w[x][y] = cmp; + w[y][x] = cmp; + } } - // Implementing Dijkshtra's Algorithm - Stack t = new Stack(); + // Implementing Dijkshtra's Algorithm + Stack t = new Stack<>(); int src = in.nextInt(); - for(int i = 1; i <= n; i++) { - if(i != src) { + for (int i = 1; i <= n; i++) { + if (i != src) { t.push(i); } } - Stack p = new Stack(); + Stack p = new Stack<>(); p.push(src); w[src][src] = 0; - while(!t.isEmpty()) { + while (!t.isEmpty()) { int min = 989997979; int loc = -1; - for(int i = 0; i < t.size(); i++) { + for (int i = 0; i < t.size(); i++) { w[src][t.elementAt(i)] = Math.min(w[src][t.elementAt(i)], w[src][p.peek()] + w[p.peek()][t.elementAt(i)]); - if(w[src][t.elementAt(i)] <= min) { + if (w[src][t.elementAt(i)] <= min) { min = (int) w[src][t.elementAt(i)]; loc = i; } } p.push(t.elementAt(loc)); t.removeElementAt(loc); - } + } // Printing shortest path from the given source src - for(int i = 1; i <= n; i++) { - if(i != src && w[src][i] != 1000000l) { - System.out.print(w[src][i] + " "); + for (int i = 1; i <= n; i++) { + if (i != src && w[src][i] != 1000000L) { + System.out.print(w[src][i] + " "); + } + // Printing -1 if there is no path b/w given pair of edges + else if (i != src) { + System.out.print("-1" + " "); + } } - // Printing -1 if there is no path b/w given pair of edges - else if(i != src) { - System.out.print("-1" + " "); - } - } } -} +} \ No newline at end of file diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index b3df65bfd2e3..e8ad2680fdbf 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -5,167 +5,174 @@ * Dijkstra's algorithm,is a graph search algorithm that solves the single-source * shortest path problem for a graph with nonnegative edge path costs, producing * a shortest path tree. - * + *

* NOTE: The inputs to Dijkstra's algorithm are a directed and weighted graph consisting * of 2 or more nodes, generally represented by an adjacency matrix or list, and a start node. - * + *

* Original source of code: https://rosettacode.org/wiki/Dijkstra%27s_algorithm#Java * Also most of the comments are from RosettaCode. - * */ -//import java.io.*; -import java.util.*; + +import java.util.*; + public class Dijkstra { - private static final Graph.Edge[] GRAPH = { - new Graph.Edge("a", "b", 7), //Distance from node "a" to node "b" is 7. In the current Graph there is no way to move the other way (e,g, from "b" to "a"), a new edge would be needed for that - new Graph.Edge("a", "c", 9), - new Graph.Edge("a", "f", 14), - new Graph.Edge("b", "c", 10), - new Graph.Edge("b", "d", 15), - new Graph.Edge("c", "d", 11), - new Graph.Edge("c", "f", 2), - new Graph.Edge("d", "e", 6), - new Graph.Edge("e", "f", 9), - }; - private static final String START = "a"; - private static final String END = "e"; - - /** - * main function - * Will run the code with "GRAPH" that was defined above. - */ - public static void main(String[] args) { - Graph g = new Graph(GRAPH); - g.dijkstra(START); - g.printPath(END); - //g.printAllPaths(); - } + private static final Graph.Edge[] GRAPH = { + // Distance from node "a" to node "b" is 7. + // In the current Graph there is no way to move the other way (e,g, from "b" to "a"), + // a new edge would be needed for that + new Graph.Edge("a", "b", 7), + new Graph.Edge("a", "c", 9), + new Graph.Edge("a", "f", 14), + new Graph.Edge("b", "c", 10), + new Graph.Edge("b", "d", 15), + new Graph.Edge("c", "d", 11), + new Graph.Edge("c", "f", 2), + new Graph.Edge("d", "e", 6), + new Graph.Edge("e", "f", 9), + }; + private static final String START = "a"; + private static final String END = "e"; + + /** + * main function + * Will run the code with "GRAPH" that was defined above. + */ + public static void main(String[] args) { + Graph g = new Graph(GRAPH); + g.dijkstra(START); + g.printPath(END); + //g.printAllPaths(); + } } - + class Graph { - private final Map graph; // mapping of vertex names to Vertex objects, built from a set of Edges - - /** One edge of the graph (only used by Graph constructor) */ - public static class Edge { - public final String v1, v2; - public final int dist; - public Edge(String v1, String v2, int dist) { - this.v1 = v1; - this.v2 = v2; - this.dist = dist; - } - } - - /** One vertex of the graph, complete with mappings to neighbouring vertices */ - public static class Vertex implements Comparable { - public final String name; - public int dist = Integer.MAX_VALUE; // MAX_VALUE assumed to be infinity - public Vertex previous = null; - public final Map neighbours = new HashMap<>(); - - public Vertex(String name) { - this.name = name; - } - - private void printPath() { - if (this == this.previous) { - System.out.printf("%s", this.name); - } - else if (this.previous == null) { - System.out.printf("%s(unreached)", this.name); - } - else { - this.previous.printPath(); - System.out.printf(" -> %s(%d)", this.name, this.dist); - } - } - - public int compareTo(Vertex other) { - if (dist == other.dist) - return name.compareTo(other.name); - - return Integer.compare(dist, other.dist); - } - - @Override public String toString() { - return "(" + name + ", " + dist + ")"; - } -} - - /** Builds a graph from a set of edges */ - public Graph(Edge[] edges) { - graph = new HashMap<>(edges.length); - - //one pass to find all vertices - for (Edge e : edges) { - if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); - if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); - } - - //another pass to set neighbouring vertices - for (Edge e : edges) { - graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); - //graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected graph - } - } - - /** Runs dijkstra using a specified source vertex */ - public void dijkstra(String startName) { - if (!graph.containsKey(startName)) { - System.err.printf("Graph doesn't contain start vertex \"%s\"\n", startName); - return; - } - final Vertex source = graph.get(startName); - NavigableSet q = new TreeSet<>(); - - // set-up vertices - for (Vertex v : graph.values()) { - v.previous = v == source ? source : null; - v.dist = v == source ? 0 : Integer.MAX_VALUE; - q.add(v); - } - - dijkstra(q); - } - - /** Implementation of dijkstra's algorithm using a binary heap. */ - private void dijkstra(final NavigableSet q) { - Vertex u, v; - while (!q.isEmpty()) { - - u = q.pollFirst(); // vertex with shortest distance (first iteration will return source) - if (u.dist == Integer.MAX_VALUE) break; // we can ignore u (and any other remaining vertices) since they are unreachable - - //look at distances to each neighbour - for (Map.Entry a : u.neighbours.entrySet()) { - v = a.getKey(); //the neighbour in this iteration - - final int alternateDist = u.dist + a.getValue(); - if (alternateDist < v.dist) { // shorter path to neighbour found - q.remove(v); - v.dist = alternateDist; - v.previous = u; - q.add(v); - } - } - } - } - - /** Prints a path from the source to the specified vertex */ - public void printPath(String endName) { - if (!graph.containsKey(endName)) { - System.err.printf("Graph doesn't contain end vertex \"%s\"\n", endName); - return; - } - - graph.get(endName).printPath(); - System.out.println(); - } - /** Prints the path from the source to every vertex (output order is not guaranteed) */ - public void printAllPaths() { - for (Vertex v : graph.values()) { - v.printPath(); - System.out.println(); - } - } -} + // mapping of vertex names to Vertex objects, built from a set of Edges + private final Map graph; + + /** One edge of the graph (only used by Graph constructor) */ + public static class Edge { + public final String v1, v2; + public final int dist; + + public Edge(String v1, String v2, int dist) { + this.v1 = v1; + this.v2 = v2; + this.dist = dist; + } + } + + /** One vertex of the graph, complete with mappings to neighbouring vertices */ + public static class Vertex implements Comparable { + public final String name; + // MAX_VALUE assumed to be infinity + public int dist = Integer.MAX_VALUE; + public Vertex previous = null; + public final Map neighbours = new HashMap<>(); + + public Vertex(String name) { + this.name = name; + } + + private void printPath() { + if (this == this.previous) { + System.out.printf("%s", this.name); + } else if (this.previous == null) { + System.out.printf("%s(unreached)", this.name); + } else { + this.previous.printPath(); + System.out.printf(" -> %s(%d)", this.name, this.dist); + } + } + + public int compareTo(Vertex other) { + if (dist == other.dist) + return name.compareTo(other.name); + + return Integer.compare(dist, other.dist); + } + + @Override + public String toString() { + return "(" + name + ", " + dist + ")"; + } + } + + /** Builds a graph from a set of edges */ + public Graph(Edge[] edges) { + graph = new HashMap<>(edges.length); + + // one pass to find all vertices + for (Edge e : edges) { + if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); + if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); + } + + // another pass to set neighbouring vertices + for (Edge e : edges) { + graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); + // graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected graph + } + } + + /** Runs dijkstra using a specified source vertex */ + public void dijkstra(String startName) { + if (!graph.containsKey(startName)) { + System.err.printf("Graph doesn't contain start vertex \"%s\"\n", startName); + return; + } + final Vertex source = graph.get(startName); + NavigableSet q = new TreeSet<>(); + + // set-up vertices + for (Vertex v : graph.values()) { + v.previous = v == source ? source : null; + v.dist = v == source ? 0 : Integer.MAX_VALUE; + q.add(v); + } + + dijkstra(q); + } + + /** Implementation of dijkstra's algorithm using a binary heap. */ + private void dijkstra(final NavigableSet q) { + Vertex u, v; + while (!q.isEmpty()) { + // vertex with shortest distance (first iteration will return source) + u = q.pollFirst(); + if (u.dist == Integer.MAX_VALUE) + break; // we can ignore u (and any other remaining vertices) since they are unreachable + + // look at distances to each neighbour + for (Map.Entry a : u.neighbours.entrySet()) { + v = a.getKey(); // the neighbour in this iteration + + final int alternateDist = u.dist + a.getValue(); + if (alternateDist < v.dist) { // shorter path to neighbour found + q.remove(v); + v.dist = alternateDist; + v.previous = u; + q.add(v); + } + } + } + } + + /** Prints a path from the source to the specified vertex */ + public void printPath(String endName) { + if (!graph.containsKey(endName)) { + System.err.printf("Graph doesn't contain end vertex \"%s\"\n", endName); + return; + } + + graph.get(endName).printPath(); + System.out.println(); + } + + /** Prints the path from the source to every vertex (output order is not guaranteed) */ + public void printAllPaths() { + for (Vertex v : graph.values()) { + v.printPath(); + System.out.println(); + } + } +} \ No newline at end of file From 46bbfaa0e81168a1c431a6ffaf21448e21539750 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Thu, 7 Feb 2019 00:11:13 +0800 Subject: [PATCH 099/521] fix: fix wrong heaps package and close #700 - Fix #700 --- DataStructures/Heaps/EmptyHeapException.java | 2 +- DataStructures/Heaps/Heap.java | 2 +- DataStructures/Heaps/HeapElement.java | 2 +- DataStructures/Heaps/MaxHeap.java | 2 +- DataStructures/Heaps/MinHeap.java | 2 +- DataStructures/Heaps/MinPriorityQueue.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/DataStructures/Heaps/EmptyHeapException.java b/DataStructures/Heaps/EmptyHeapException.java index 01668e2c849a..38b4b756f3df 100644 --- a/DataStructures/Heaps/EmptyHeapException.java +++ b/DataStructures/Heaps/EmptyHeapException.java @@ -1,7 +1,7 @@ /** * */ -package Heaps; +package DataStructures.Heaps; /** * @author Nicolas Renard diff --git a/DataStructures/Heaps/Heap.java b/DataStructures/Heaps/Heap.java index fe87d72a1db2..0b7da3436581 100644 --- a/DataStructures/Heaps/Heap.java +++ b/DataStructures/Heaps/Heap.java @@ -1,4 +1,4 @@ -package Heaps; +package DataStructures.Heaps; /** * Interface common to heap data structures.
diff --git a/DataStructures/Heaps/HeapElement.java b/DataStructures/Heaps/HeapElement.java index 60640346b3cc..6799f973f466 100644 --- a/DataStructures/Heaps/HeapElement.java +++ b/DataStructures/Heaps/HeapElement.java @@ -1,7 +1,7 @@ /** * */ -package Heaps; +package DataStructures.Heaps; import java.lang.Double; import java.lang.Object; diff --git a/DataStructures/Heaps/MaxHeap.java b/DataStructures/Heaps/MaxHeap.java index 302840c14d05..fed09bcba045 100644 --- a/DataStructures/Heaps/MaxHeap.java +++ b/DataStructures/Heaps/MaxHeap.java @@ -1,4 +1,4 @@ -package Heaps; +package DataStructures.Heaps; import java.util.ArrayList; import java.util.List; diff --git a/DataStructures/Heaps/MinHeap.java b/DataStructures/Heaps/MinHeap.java index 5fca978f6549..7b49b7512bac 100644 --- a/DataStructures/Heaps/MinHeap.java +++ b/DataStructures/Heaps/MinHeap.java @@ -1,7 +1,7 @@ /** * */ -package Heaps; +package DataStructures.Heaps; import java.util.ArrayList; import java.util.List; diff --git a/DataStructures/Heaps/MinPriorityQueue.java b/DataStructures/Heaps/MinPriorityQueue.java index f117b932800b..6da21ab5b03f 100644 --- a/DataStructures/Heaps/MinPriorityQueue.java +++ b/DataStructures/Heaps/MinPriorityQueue.java @@ -1,4 +1,4 @@ -package Heaps; +package DataStructures.Heaps; /* Minimum Priority Queue * It is a part of heap data structure * A heap is a specific tree based data structure From b73757e4bb0c30314b63c046cd92770e935ade2d Mon Sep 17 00:00:00 2001 From: Akhil <31859863+hailK11@users.noreply.github.com> Date: Sat, 16 Feb 2019 20:24:39 +0530 Subject: [PATCH 100/521] Update PriorityQueues.java Include condition to check if the queue is full when inserting values into the queue --- DataStructures/Queues/PriorityQueues.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/DataStructures/Queues/PriorityQueues.java b/DataStructures/Queues/PriorityQueues.java index acb6b552537e..3eb74ecf518e 100644 --- a/DataStructures/Queues/PriorityQueues.java +++ b/DataStructures/Queues/PriorityQueues.java @@ -37,6 +37,10 @@ public PriorityQueue(int size){ public void insert(int value){ if(nItems == 0){ queueArray[0] = value; + nItems++; + } + else if(isFull()){ //does not insert value when the queue is full + System.out.println("Queue is full"); } else{ int j = nItems; @@ -45,8 +49,8 @@ public void insert(int value){ j--; } queueArray[j] = value; //Once the correct position is found the value is inserted + nItems++; } - nItems++; } /** @@ -120,4 +124,4 @@ public static void main(String args[]){ //As you can see, a Priority Queue can be used as a sorting algotithm } -} \ No newline at end of file +} From 36d6b5133f288c60dbe0622ddbad08dde9efdf0b Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sun, 17 Feb 2019 09:18:50 +0800 Subject: [PATCH 101/521] Update PriorityQueues.java --- DataStructures/Queues/PriorityQueues.java | 205 +++++++++++----------- 1 file changed, 103 insertions(+), 102 deletions(-) diff --git a/DataStructures/Queues/PriorityQueues.java b/DataStructures/Queues/PriorityQueues.java index 3eb74ecf518e..e709b13683a0 100644 --- a/DataStructures/Queues/PriorityQueues.java +++ b/DataStructures/Queues/PriorityQueues.java @@ -1,127 +1,128 @@ /** * This class implements a PriorityQueue. - * + *

* A priority queue adds elements into positions based on their priority. * So the most important elements are placed at the front/on the top. * In this example I give numbers that are bigger, a higher priority. * Queues in theory have no fixed size but when using an array * implementation it does. - * - * @author Unknown * */ -class PriorityQueue{ - /** The max size of the queue */ - private int maxSize; - /** The array for the queue */ - private int[] queueArray; - /** How many items are in the queue */ - private int nItems; +class PriorityQueue { + /** + * The max size of the queue + */ + private int maxSize; + /** + * The array for the queue + */ + private int[] queueArray; + /** + * How many items are in the queue + */ + private int nItems; - /** - * Constructor - * - * @param size Size of the queue - */ - public PriorityQueue(int size){ - maxSize = size; - queueArray = new int[size]; - nItems = 0; - } + /** + * Constructor + * + * @param size Size of the queue + */ + public PriorityQueue(int size) { + maxSize = size; + queueArray = new int[size]; + nItems = 0; + } - /** - * Inserts an element in it's appropriate place - * - * @param value Value to be inserted - */ - public void insert(int value){ - if(nItems == 0){ - queueArray[0] = value; - nItems++; - } - else if(isFull()){ //does not insert value when the queue is full - System.out.println("Queue is full"); - } - else{ - int j = nItems; - while(j > 0 && queueArray[j-1] > value){ - queueArray[j] = queueArray[j-1]; //Shifts every element up to make room for insertion - j--; - } - queueArray[j] = value; //Once the correct position is found the value is inserted - nItems++; - } - } + /** + * Inserts an element in it's appropriate place + * + * @param value Value to be inserted + */ + public void insert(int value) { + if (isFull()) { + throw new RuntimeException("Queue is full"); + } + if (nItems == 0) { + queueArray[0] = value; + } else { + int j = nItems; + while (j > 0 && queueArray[j - 1] > value) { + queueArray[j] = queueArray[j - 1]; // Shifts every element up to make room for insertion + j--; + } + queueArray[j] = value; // Once the correct position is found the value is inserted + } + nItems++; + } - /** - * Remove the element from the front of the queue - * - * @return The element removed - */ - public int remove(){ - return queueArray[--nItems]; - } + /** + * Remove the element from the front of the queue + * + * @return The element removed + */ + public int remove() { + return queueArray[--nItems]; + } - /** - * Checks what's at the front of the queue - * - * @return element at the front of the queue - */ - public int peek(){ - return queueArray[nItems-1]; - } + /** + * Checks what's at the front of the queue + * + * @return element at the front of the queue + */ + public int peek() { + return queueArray[nItems - 1]; + } - /** - * Returns true if the queue is empty - * - * @return true if the queue is empty - */ - public boolean isEmpty(){ - return(nItems == 0); - } + /** + * Returns true if the queue is empty + * + * @return true if the queue is empty + */ + public boolean isEmpty() { + return (nItems == 0); + } - /** - * Returns true if the queue is full - * - * @return true if the queue is full - */ - public boolean isFull(){ - return(nItems == maxSize); - } + /** + * Returns true if the queue is full + * + * @return true if the queue is full + */ + public boolean isFull() { + return (nItems == maxSize); + } - /** - * Returns the number of elements in the queue - * - * @return number of elements in the queue - */ - public int getSize(){ - return nItems; - } + /** + * Returns the number of elements in the queue + * + * @return number of elements in the queue + */ + public int getSize() { + return nItems; + } } /** * This class implements the PriorityQueue class above. - * - * @author Unknown * + * @author Unknown */ -public class PriorityQueues{ - /** - * Main method - * - * @param args Command Line Arguments - */ - public static void main(String args[]){ - PriorityQueue myQueue = new PriorityQueue(4); - myQueue.insert(10); - myQueue.insert(2); - myQueue.insert(5); - myQueue.insert(3); - //[2, 3, 5, 10] Here higher numbers have higher priority, so they are on the top +public class PriorityQueues { + /** + * Main method + * + * @param args Command Line Arguments + */ + public static void main(String[] args) { + PriorityQueue myQueue = new PriorityQueue(4); + myQueue.insert(10); + myQueue.insert(2); + myQueue.insert(5); + myQueue.insert(3); + // [2, 3, 5, 10] Here higher numbers have higher priority, so they are on the top - for(int i = 3; i>=0; i--) - System.out.print(myQueue.remove() + " "); //will print the queue in reverse order [10, 5, 3, 2] + for (int i = 3; i >= 0; i--) + System.out.print(myQueue.remove() + " "); // will print the queue in reverse order [10, 5, 3, 2] - //As you can see, a Priority Queue can be used as a sorting algotithm - } + // As you can see, a Priority Queue can be used as a sorting algotithm + } } From c516834ed65a0e2cfb81bdf9f465511201438951 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Sun, 17 Feb 2019 20:52:00 +0800 Subject: [PATCH 102/521] docs(Others): update countwords.java and crc32.java - By @yanglbme --- Others/countwords.java | 36 ++++++++++++++++++------------------ Others/crc32.java | 24 +++++++++++++----------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/Others/countwords.java b/Others/countwords.java index a93aa1a33833..da871047dd58 100644 --- a/Others/countwords.java +++ b/Others/countwords.java @@ -1,26 +1,26 @@ import java.util.Scanner; /** - * You enter a string into this program, and it will return how - * many words were in that particular string - * - * @author Marcus + * You enter a string into this program, and it will return how many words were + * in that particular string * + * @author Marcus */ - public class countwords{ +public class CountWords { - public static void main(String[] args){ - Scanner input = new Scanner(System.in); - System.out.println("Enter your text: "); - String str = input.nextLine(); - - System.out.println("Your text has " + wordCount(str) + " word(s)"); - input.close(); - } + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + System.out.println("Enter your text: "); + String str = input.nextLine(); - private static int wordCount(String s){ - if(s.isEmpty() || s == null) return 0; - return s.trim().split("[\\s]+").length; - } - + System.out.println("Your text has " + wordCount(str) + " word(s)"); + input.close(); } + + private static int wordCount(String s) { + if (s == null || s.isEmpty()) + return 0; + return s.trim().split("[\\s]+").length; + } + +} diff --git a/Others/crc32.java b/Others/crc32.java index e27c247062d4..de98e4198c9b 100644 --- a/Others/crc32.java +++ b/Others/crc32.java @@ -1,27 +1,29 @@ import java.util.BitSet; -//Generates a crc32 checksum for a given string or byte array -public class crc32 { - +/** + * Generates a crc32 checksum for a given string or byte array + */ +public class CRC32 { + public static void main(String[] args) { System.out.println(Integer.toHexString(crc32("Hello World"))); } - + public static int crc32(String str) { return crc32(str.getBytes()); } - + public static int crc32(byte[] data) { BitSet bitSet = BitSet.valueOf(data); - int crc32 = 0xFFFFFFFF; //initial value - for(int i=0;i>>31)&1) != (bitSet.get(i)?1:0)) - crc32 = (crc32 << 1) ^ 0x04C11DB7; //xoring with polynomial + int crc32 = 0xFFFFFFFF; // initial value + for (int i = 0; i < data.length * 8; i++) { + if (((crc32 >>> 31) & 1) != (bitSet.get(i) ? 1 : 0)) + crc32 = (crc32 << 1) ^ 0x04C11DB7; // xor with polynomial else crc32 = (crc32 << 1); } - crc32 = Integer.reverse(crc32); //result reflect - return crc32 ^ 0xFFFFFFFF; //final xor value + crc32 = Integer.reverse(crc32); // result reflect + return crc32 ^ 0xFFFFFFFF; // final xor value } } From d434e4a4f1d3e69d29f0e1f45c7bb88f5de32ce9 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sun, 17 Feb 2019 20:56:47 +0800 Subject: [PATCH 103/521] Update CRCAlgorithm.java --- Others/CRCAlgorithm.java | 135 +++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 68 deletions(-) diff --git a/Others/CRCAlgorithm.java b/Others/CRCAlgorithm.java index f932a9b74a73..d53e3a02c2e3 100644 --- a/Others/CRCAlgorithm.java +++ b/Others/CRCAlgorithm.java @@ -1,53 +1,53 @@ -package crcalgorithm; +package Others; import java.util.ArrayList; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; /** - * * @author dimgrichr */ public class CRCAlgorithm { private int correctMess; - + private int wrongMess; - + private int wrongMessCaught; - + private int wrongMessNotCaught; - + private int messSize; - + private double ber; - + private boolean messageChanged; private ArrayList message; - + private ArrayList dividedMessage; - + private ArrayList p; - + private Random randomGenerator; - - + + /** * The algorithm's main constructor. * The most significant variables, used in the algorithm, * are set in their initial values. - * @param str The binary number P, in a string form, which is used by the CRC algorithm + * + * @param str The binary number P, in a string form, which is used by the CRC algorithm * @param size The size of every transmitted message - * @param ber The Bit Error Rate + * @param ber The Bit Error Rate */ - public CRCAlgorithm(String str, int size, double ber){ - messageChanged=false; + public CRCAlgorithm(String str, int size, double ber) { + messageChanged = false; message = new ArrayList<>(); messSize = size; dividedMessage = new ArrayList<>(); p = new ArrayList<>(); - for(int i=0;i(); dividedMessage = new ArrayList<>(); } - + /** * Random messages, consisted of 0's and 1's, * are generated, so that they can later be transmitted */ - public void generateRandomMess(){ - for(int i=0;i is created. * If check == true, the dividedMessaage is examined, in order to see if it contains any 1's. * If it does, the message is considered to be wrong by the receiver,so the variable wrongMessCaught changes. * If it does not, it is accepted, so one of the variables correctMess, wrongMessNotCaught, changes. - * If check == false, the diviided Message is added at the end of the ArrayList message. + * If check == false, the diviided Message is added at the end of the ArrayList message. + * * @param check the variable used to determine, if the message is going to be checked from the receiver - * if true, it is checked - * otherwise, it is not + * if true, it is checked + * otherwise, it is not */ - public void divideMessageWithP(boolean check){ + public void divideMessageWithP(boolean check) { ArrayList x = new ArrayList<>(); ArrayList k = (ArrayList) message.clone(); - if(!check){ - for(int i=0;i) x.clone(); - if(!check){ - for(int z:dividedMessage){ + if (!check) { + for (int z : dividedMessage) { message.add(z); } - } - else{ - if(dividedMessage.contains(1) && messageChanged){ + } else { + if (dividedMessage.contains(1) && messageChanged) { wrongMessCaught++; - } - else if(!dividedMessage.contains(1) && messageChanged){ + } else if (!dividedMessage.contains(1) && messageChanged) { wrongMessNotCaught++; - } - else if(!messageChanged){ + } else if (!messageChanged) { correctMess++; } } } - + /** * Once the message is transmitted, some of it's elements, * is possible to change from 1 to 0, or from 0 to 1, @@ -180,25 +181,23 @@ else if(!messageChanged){ * Based on these changes. the boolean variable messageChanged, gets the value: * true, or false. */ - public void changeMess(){ - for(int y : message){ + public void changeMess() { + for (int y : message) { double x = randomGenerator.nextDouble(); - while(x<0.0000 || x>1.00000){ + while (x < 0.0000 || x > 1.00000) { x = randomGenerator.nextDouble(); } - if(x Date: Sat, 23 Feb 2019 21:03:57 +0800 Subject: [PATCH 104/521] docs(DP): update LevenshteinDistance.java --- Dynamic Programming/LevenshteinDistance.java | 97 ++++++++++---------- 1 file changed, 48 insertions(+), 49 deletions(-) diff --git a/Dynamic Programming/LevenshteinDistance.java b/Dynamic Programming/LevenshteinDistance.java index be0e7c43f112..a196c0fe5139 100644 --- a/Dynamic Programming/LevenshteinDistance.java +++ b/Dynamic Programming/LevenshteinDistance.java @@ -1,55 +1,54 @@ /** - * * @author Kshitij VERMA (github.com/kv19971) * LEVENSHTEIN DISTANCE dyamic programming implementation to show the difference between two strings (https://en.wikipedia.org/wiki/Levenshtein_distance) - * - * */ -public class LevenshteinDistance{ - private static int minimum(int a, int b, int c){ - if(a < b && a < c){ - return a; - }else if(b < a && b < c){ - return b; - }else{ - return c; - } - } - private static int calculate_distance(String a, String b){ - int len_a = a.length() + 1; - int len_b = b.length() + 1; - int [][] distance_mat = new int[len_a][len_b]; - for(int i = 0; i < len_a; i++){ - distance_mat[i][0] = i; - } - for(int j = 0; j < len_b; j++){ - distance_mat[0][j] = j; - } - for(int i = 0; i < len_a; i++){ - for(int j = 0; i < len_b; j++){ - int cost; - if (a.charAt(i) == b.charAt(j)){ - cost = 0; - }else{ - cost = 1; - } - distance_mat[i][j] = minimum(distance_mat[i-1][j], distance_mat[i-1][j-1], distance_mat[i][j-1]) + cost; - - - } - - } - return distance_mat[len_a-1][len_b-1]; - - } - public static void main(String [] args){ - String a = ""; // enter your string here - String b = ""; // enter your string here - - System.out.print("Levenshtein distance between "+a + " and "+b+ " is: "); - System.out.println(calculate_distance(a,b)); - - - } +public class LevenshteinDistance { + private static int minimum(int a, int b, int c) { + if (a < b && a < c) { + return a; + } else if (b < a && b < c) { + return b; + } else { + return c; + } + } + + private static int calculate_distance(String a, String b) { + int len_a = a.length() + 1; + int len_b = b.length() + 1; + int[][] distance_mat = new int[len_a][len_b]; + for (int i = 0; i < len_a; i++) { + distance_mat[i][0] = i; + } + for (int j = 0; j < len_b; j++) { + distance_mat[0][j] = j; + } + for (int i = 0; i < len_a; i++) { + for (int j = 0; i < len_b; j++) { + int cost; + if (a.charAt(i) == b.charAt(j)) { + cost = 0; + } else { + cost = 1; + } + distance_mat[i][j] = minimum(distance_mat[i - 1][j], distance_mat[i - 1][j - 1], distance_mat[i][j - 1]) + cost; + + + } + + } + return distance_mat[len_a - 1][len_b - 1]; + + } + + public static void main(String[] args) { + String a = ""; // enter your string here + String b = ""; // enter your string here + + System.out.print("Levenshtein distance between " + a + " and " + b + " is: "); + System.out.println(calculate_distance(a, b)); + + + } } From 6ff87322e63e167cf62dc1bb94eb426c27a52649 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sat, 23 Feb 2019 21:06:32 +0800 Subject: [PATCH 105/521] docs(DP): update EggDropping.java --- Dynamic Programming/EggDropping.java | 98 +++++++++++++--------------- 1 file changed, 46 insertions(+), 52 deletions(-) diff --git a/Dynamic Programming/EggDropping.java b/Dynamic Programming/EggDropping.java index 382d7ea86c2c..0549f6647ad2 100644 --- a/Dynamic Programming/EggDropping.java +++ b/Dynamic Programming/EggDropping.java @@ -1,53 +1,47 @@ -//Dynamic Programming solution for the Egg Dropping Puzzle -public class EggDropping -{ - - // min trials with n eggs and m floors - - private static int minTrials(int n, int m) - { - - int eggFloor[][] = new int[n+1][m+1]; - int result, x; - - for (int i = 1; i <= n; i++) - { - eggFloor[i][0] = 0; // Zero trial for zero floor. - eggFloor[i][1] = 1; // One trial for one floor - } - - // j trials for only 1 egg - - for (int j = 1; j <= m; j++) - eggFloor[1][j] = j; - - // Using bottom-up approach in DP - - for (int i = 2; i <= n; i++) - { - for (int j = 2; j <= m; j++) - { - eggFloor[i][j] = Integer.MAX_VALUE; - for (x = 1; x <= j; x++) - { - result = 1 + Math.max(eggFloor[i-1][x-1], eggFloor[i][j-x]); - - //choose min of all values for particular x - if (result < eggFloor[i][j]) - eggFloor[i][j] = result; - } - } - } - - return eggFloor[n][m]; - } - - //testing program - public static void main(String args[]) - { - int n = 2, m = 4; - //result outputs min no. of trials in worst case for n eggs and m floors - int result = minTrials(n, m); - System.out.println(result); - } +/** + * Dynamic Programming solution for the Egg Dropping Puzzle + */ +public class EggDropping { + + // min trials with n eggs and m floors + + private static int minTrials(int n, int m) { + + int[][] eggFloor = new int[n + 1][m + 1]; + int result, x; + + for (int i = 1; i <= n; i++) { + eggFloor[i][0] = 0; // Zero trial for zero floor. + eggFloor[i][1] = 1; // One trial for one floor + } + + // j trials for only 1 egg + + for (int j = 1; j <= m; j++) + eggFloor[1][j] = j; + + // Using bottom-up approach in DP + + for (int i = 2; i <= n; i++) { + for (int j = 2; j <= m; j++) { + eggFloor[i][j] = Integer.MAX_VALUE; + for (x = 1; x <= j; x++) { + result = 1 + Math.max(eggFloor[i - 1][x - 1], eggFloor[i][j - x]); + + // choose min of all values for particular x + if (result < eggFloor[i][j]) + eggFloor[i][j] = result; + } + } + } + + return eggFloor[n][m]; + } + + public static void main(String args[]) { + int n = 2, m = 4; + // result outputs min no. of trials in worst case for n eggs and m floors + int result = minTrials(n, m); + System.out.println(result); + } } From 5ec25c167057a355f3073cfd52ca3f6d1ce2eef8 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sat, 23 Feb 2019 21:12:08 +0800 Subject: [PATCH 106/521] docs(DP): update RodCutting.java --- Dynamic Programming/RodCutting.java | 53 ++++++++++++++--------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/Dynamic Programming/RodCutting.java b/Dynamic Programming/RodCutting.java index cd2512059ae2..5ee38e0ced33 100644 --- a/Dynamic Programming/RodCutting.java +++ b/Dynamic Programming/RodCutting.java @@ -1,32 +1,31 @@ -/* A Dynamic Programming solution for Rod cutting problem - Returns the best obtainable price for a rod of - length n and price[] as prices of different pieces */ - +/** + * A Dynamic Programming solution for Rod cutting problem + * Returns the best obtainable price for a rod of + * length n and price[] as prices of different pieces + * + */ public class RodCutting { - - private static int cutRod(int price[],int n) - { - int val[] = new int[n+1]; - val[0] = 0; - for (int i = 1; i<=n; i++) - { - int max_val = Integer.MIN_VALUE; - for (int j = 0; j < i; j++) - max_val = Math.max(max_val,price[j] + val[i-j-1]); - - val[i] = max_val; - } + private static int cutRod(int[] price, int n) { + int val[] = new int[n + 1]; + val[0] = 0; + + for (int i = 1; i <= n; i++) { + int max_val = Integer.MIN_VALUE; + for (int j = 0; j < i; j++) + max_val = Math.max(max_val, price[j] + val[i - j - 1]); + + val[i] = max_val; + } - return val[n]; - } + return val[n]; + } - //main function to test - public static void main(String args[]) - { - int arr[] = new int[] {2, 5, 13, 19, 20}; - int size = arr.length; - System.out.println("Maximum Obtainable Value is " + - cutRod(arr, size)); - } + // main function to test + public static void main(String args[]) { + int[] arr = new int[]{2, 5, 13, 19, 20}; + int size = arr.length; + System.out.println("Maximum Obtainable Value is " + + cutRod(arr, size)); + } } From c725d91ecf0b4b6d62c0d054f52abb87901a3e68 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sun, 24 Feb 2019 08:46:51 +0800 Subject: [PATCH 107/521] docs(DP): update LongestValidParentheses.java --- .../LongestValidParentheses.java | 96 +++++++++---------- 1 file changed, 46 insertions(+), 50 deletions(-) diff --git a/Dynamic Programming/LongestValidParentheses.java b/Dynamic Programming/LongestValidParentheses.java index 14c98020a126..1a42b258d144 100644 --- a/Dynamic Programming/LongestValidParentheses.java +++ b/Dynamic Programming/LongestValidParentheses.java @@ -1,63 +1,59 @@ - import java.util.Scanner; /** * Given a string containing just the characters '(' and ')', find the length of * the longest valid (well-formed) parentheses substring. * - * * @author Libin Yang (https://github.com/yanglbme) * @since 2018/10/5 */ public class LongestValidParentheses { - public static int getLongestValidParentheses(String s) { - if (s == null || s.length() < 2) { - return 0; - } - char[] chars = s.toCharArray(); - int n = chars.length; - int[] res = new int[n]; - res[0] = 0; - res[1] = chars[1] == ')' && chars[0] == '(' ? 2 : 0; - - int max = res[1]; - - for (int i = 2; i < n; ++i) { - if (chars[i] == ')') { - if (chars[i - 1] == '(') { - res[i] = res[i - 2] + 2; - } else { - int index = i - res[i - 1] - 1; - if (index >= 0 && chars[index] == '(') { - // ()(()) - res[i] = res[i - 1] + 2 + (index - 1 >= 0 ? res[index - 1] : 0); - } - } - } - max = Math.max(max, res[i]); - } - - return max; - - } - - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - - while (true) { - String str = sc.nextLine(); - if ("quit".equals(str)) { - break; - } - int len = getLongestValidParentheses(str); - System.out.println(len); - - } - - sc.close(); - - } - + public static int getLongestValidParentheses(String s) { + if (s == null || s.length() < 2) { + return 0; + } + char[] chars = s.toCharArray(); + int n = chars.length; + int[] res = new int[n]; + res[0] = 0; + res[1] = chars[1] == ')' && chars[0] == '(' ? 2 : 0; + + int max = res[1]; + + for (int i = 2; i < n; ++i) { + if (chars[i] == ')') { + if (chars[i - 1] == '(') { + res[i] = res[i - 2] + 2; + } else { + int index = i - res[i - 1] - 1; + if (index >= 0 && chars[index] == '(') { + // ()(()) + res[i] = res[i - 1] + 2 + (index - 1 >= 0 ? res[index - 1] : 0); + } + } + } + max = Math.max(max, res[i]); + } + + return max; + + } + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + + while (true) { + String str = sc.nextLine(); + if ("quit".equals(str)) { + break; + } + int len = getLongestValidParentheses(str); + System.out.println(len); + + } + + sc.close(); + } } From 2b3e82fd4c76a5b9475521154f65baa86e24250c Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Mon, 25 Feb 2019 09:33:06 +0800 Subject: [PATCH 108/521] Update Queues.java --- DataStructures/Queues/Queues.java | 278 +++++++++++++++--------------- 1 file changed, 143 insertions(+), 135 deletions(-) diff --git a/DataStructures/Queues/Queues.java b/DataStructures/Queues/Queues.java index 84638cb24751..cd66d5af0118 100644 --- a/DataStructures/Queues/Queues.java +++ b/DataStructures/Queues/Queues.java @@ -1,148 +1,156 @@ /** * This implements Queues by using the class Queue. - * + *

* A queue data structure functions the same as a real world queue. * The elements that are added first are the first to be removed. * New elements are added to the back/rear of the queue. - * - * @author Unknown * + * @author Unknown */ -class Queue{ - /** Max size of the queue */ - private int maxSize; - /** The array representing the queue */ - private int[] queueArray; - /** Front of the queue */ - private int front; - /** Rear of the queue */ - private int rear; - /** How many items are in the queue */ - private int nItems; - - /** - * Constructor - * - * @param size Size of the new queue - */ - public Queue(int size){ - maxSize = size; - queueArray = new int[size]; - front = 0; - rear = -1; - nItems = 0; - } - - /** - * Inserts an element at the rear of the queue - * - * @param x element to be added - * @return True if the element was added successfully - */ - public boolean insert(int x){ - if(isFull()) - return false; - if(rear == maxSize-1) //If the back of the queue is the end of the array wrap around to the front - rear = -1; - rear++; - queueArray[rear] = x; - nItems++; - return true; - } - - /** - * Remove an element from the front of the queue - * - * @return the new front of the queue - */ - public int remove(){ //Remove an element from the front of the queue - if(isEmpty()){ - System.out.println("Queue is empty"); - return -1; - } - int temp = queueArray[front]; - front++; - if(front == maxSize) //Dealing with wrap-around again - front = 0; - nItems--; - return temp; - } - - /** - * Checks what's at the front of the queue - * - * @return element at the front of the queue - */ - public int peekFront(){ - return queueArray[front]; - } - - /** - * Checks what's at the rear of the queue - * - * @return element at the rear of the queue - */ - public int peekRear(){ - return queueArray[rear]; - } - - /** - * Returns true if the queue is empty - * - * @return true if the queue is empty - */ - public boolean isEmpty(){ - return(nItems == 0); - } - - /** - * Returns true if the queue is full - * - * @return true if the queue is full - */ - public boolean isFull(){ - return(nItems == maxSize); - } - - /** - * Returns the number of elements in the queue - * - * @return number of elements in the queue - */ - public int getSize(){ - return nItems; - } +class Queue { + /** + * Max size of the queue + */ + private int maxSize; + /** + * The array representing the queue + */ + private int[] queueArray; + /** + * Front of the queue + */ + private int front; + /** + * Rear of the queue + */ + private int rear; + /** + * How many items are in the queue + */ + private int nItems; + + /** + * Constructor + * + * @param size Size of the new queue + */ + public Queue(int size) { + maxSize = size; + queueArray = new int[size]; + front = 0; + rear = -1; + nItems = 0; + } + + /** + * Inserts an element at the rear of the queue + * + * @param x element to be added + * @return True if the element was added successfully + */ + public boolean insert(int x) { + if (isFull()) + return false; + if (rear == maxSize - 1) // If the back of the queue is the end of the array wrap around to the front + rear = -1; + rear++; + queueArray[rear] = x; + nItems++; + return true; + } + + /** + * Remove an element from the front of the queue + * + * @return the new front of the queue + */ + public int remove() { // Remove an element from the front of the queue + if (isEmpty()) { + System.out.println("Queue is empty"); + return -1; + } + int temp = queueArray[front]; + front++; + if (front == maxSize) //Dealing with wrap-around again + front = 0; + nItems--; + return temp; + } + + /** + * Checks what's at the front of the queue + * + * @return element at the front of the queue + */ + public int peekFront() { + return queueArray[front]; + } + + /** + * Checks what's at the rear of the queue + * + * @return element at the rear of the queue + */ + public int peekRear() { + return queueArray[rear]; + } + + /** + * Returns true if the queue is empty + * + * @return true if the queue is empty + */ + public boolean isEmpty() { + return (nItems == 0); + } + + /** + * Returns true if the queue is full + * + * @return true if the queue is full + */ + public boolean isFull() { + return (nItems == maxSize); + } + + /** + * Returns the number of elements in the queue + * + * @return number of elements in the queue + */ + public int getSize() { + return nItems; + } } /** * This class is the example for the Queue class - * - * @author Unknown * + * @author Unknown */ -public class Queues{ - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String args[]){ - Queue myQueue = new Queue(4); - myQueue.insert(10); - myQueue.insert(2); - myQueue.insert(5); - myQueue.insert(3); - //[10(front), 2, 5, 3(rear)] - - System.out.println(myQueue.isFull()); //Will print true - - myQueue.remove(); //Will make 2 the new front, making 10 no longer part of the queue - //[10, 2(front), 5, 3(rear)] - - myQueue.insert(7); //Insert 7 at the rear which will be index 0 because of wrap around - // [7(rear), 2(front), 5, 3] - - System.out.println(myQueue.peekFront()); //Will print 2 - System.out.println(myQueue.peekRear()); //Will print 7 - } -} \ No newline at end of file +public class Queues { + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + Queue myQueue = new Queue(4); + myQueue.insert(10); + myQueue.insert(2); + myQueue.insert(5); + myQueue.insert(3); + // [10(front), 2, 5, 3(rear)] + + System.out.println(myQueue.isFull()); // Will print true + + myQueue.remove(); // Will make 2 the new front, making 10 no longer part of the queue + // [10, 2(front), 5, 3(rear)] + + myQueue.insert(7); // Insert 7 at the rear which will be index 0 because of wrap around + // [7(rear), 2(front), 5, 3] + + System.out.println(myQueue.peekFront()); // Will print 2 + System.out.println(myQueue.peekRear()); // Will print 7 + } +} From 1031cfb35c593eb84166dbb0ec557fef6e0e4025 Mon Sep 17 00:00:00 2001 From: Heiko Alexander Weber Date: Tue, 26 Feb 2019 23:10:20 +0100 Subject: [PATCH 109/521] #708 (bugfix for fibonacci sequence function) o fixed function "fibMemo" according to acceptance criteria in #708 o fixed function "fibBotUp" according to acceptance criteria in #708 --- Dynamic Programming/Fibonacci.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Dynamic Programming/Fibonacci.java b/Dynamic Programming/Fibonacci.java index 8f9326ba9d94..2f65a8e9e0de 100644 --- a/Dynamic Programming/Fibonacci.java +++ b/Dynamic Programming/Fibonacci.java @@ -17,8 +17,9 @@ public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); - System.out.println(fibMemo(n)); // Returns 8 for n = 6 - System.out.println(fibBotUp(n)); // Returns 8 for n = 6 + // Methods all returning [0, 1, 1, 2, 3, 5, ...] for n = [0, 1, 2, 3, 4, 5, ...] + System.out.println(fibMemo(n)); + System.out.println(fibBotUp(n)); } /** @@ -34,13 +35,12 @@ private static int fibMemo(int n) { int f; - if (n <= 2) { - f = 1; + if (n <= 1) { + f = n; } else { f = fibMemo(n - 1) + fibMemo(n - 2); map.put(n, f); } - return f; } @@ -54,10 +54,10 @@ private static int fibBotUp(int n) { Map fib = new HashMap<>(); - for (int i = 1; i < n + 1; i++) { + for (int i = 0; i <= n; i++) { int f; - if (i <= 2) { - f = 1; + if (i <= 1) { + f = i; } else { f = fib.get(i - 1) + fib.get(i - 2); } From d60f836861fb1d1237935a9c342ef492d0df8cc4 Mon Sep 17 00:00:00 2001 From: Ojas Saxena <43749506+ojasiiitd@users.noreply.github.com> Date: Mon, 4 Mar 2019 15:05:15 +0530 Subject: [PATCH 110/521] Updated StackOfLinkedList.java I made the code shorter and less prone to mistakes by removing the "size" variable altogether from the LinkedList class. I found that after each push/pop operation, changing the value of size did make the code more efficient, but made it more prone to mistakes. So, for empty stack, a simple "head == null" was enough, which has been incorporated. --- DataStructures/Stacks/StackOfLinkedList.java | 37 +++++++++++--------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/DataStructures/Stacks/StackOfLinkedList.java b/DataStructures/Stacks/StackOfLinkedList.java index 35052457fe1c..7b744bcb85af 100644 --- a/DataStructures/Stacks/StackOfLinkedList.java +++ b/DataStructures/Stacks/StackOfLinkedList.java @@ -25,9 +25,7 @@ public static void main(String[] args) { stack.pop(); System.out.println("Top element of stack currently is: " + stack.peek()); - } - } // A node class @@ -51,11 +49,10 @@ public Node(int data) { class LinkedListStack { Node head = null; - int size = 0; public void push(int x) { Node n = new Node(x); - if (getSize() == 0) { + if (head == null) { head = n; } else { @@ -63,47 +60,55 @@ public void push(int x) { n.next = temp; head = n; } - size++; } public void pop() { - if (getSize() == 0) { + if (head == null) { System.out.println("Empty stack. Nothing to pop"); } Node temp = head; head = head.next; - size--; - System.out.println("Popped element is: " + temp.data); } public int peek() { - if (getSize() == 0) { + if (head == null) { return -1; } - return head.data; } public void printStack() { - Node temp = head; System.out.println("Stack is printed as below: "); while (temp != null) { - System.out.println(temp.data + " "); + if(temp.next == null) { + System.out.print(temp.data); + } + else { + System.out.print(temp.data + " -> "); + } temp = temp.next; } System.out.println(); - } public boolean isEmpty() { - return getSize() == 0; + return head == null; } public int getSize() { - return size; + if(head == null) + return 0; + else { + int size = 1; + Node temp = head; + while(temp.next != null) { + temp = temp.next; + size++; + } + return size; + } } - } From 2ea534000bafe95a5c03dd6248aeda1d1ff151a7 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Tue, 5 Mar 2019 10:18:20 +0800 Subject: [PATCH 111/521] Update StackOfLinkedList.java --- DataStructures/Stacks/StackOfLinkedList.java | 24 ++++++++------------ 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/DataStructures/Stacks/StackOfLinkedList.java b/DataStructures/Stacks/StackOfLinkedList.java index 7b744bcb85af..d9f737040271 100644 --- a/DataStructures/Stacks/StackOfLinkedList.java +++ b/DataStructures/Stacks/StackOfLinkedList.java @@ -1,7 +1,5 @@ /** - * * @author Varun Upadhyay (https://github.com/varunu28) - * */ // An implementation of a Stack using a Linked List @@ -42,7 +40,7 @@ public Node(int data) { /** * A class which implements a stack using a linked list - * + *

* Contains all the stack methods : push, pop, printStack, isEmpty **/ @@ -54,8 +52,7 @@ public void push(int x) { Node n = new Node(x); if (head == null) { head = n; - } - else { + } else { Node temp = head; n.next = temp; head = n; @@ -73,20 +70,19 @@ public void pop() { } public int peek() { - if (head == null) { - return -1; - } - return head.data; + if (head == null) { + return -1; + } + return head.data; } public void printStack() { Node temp = head; System.out.println("Stack is printed as below: "); while (temp != null) { - if(temp.next == null) { + if (temp.next == null) { System.out.print(temp.data); - } - else { + } else { System.out.print(temp.data + " -> "); } temp = temp.next; @@ -99,12 +95,12 @@ public boolean isEmpty() { } public int getSize() { - if(head == null) + if (head == null) return 0; else { int size = 1; Node temp = head; - while(temp.next != null) { + while (temp.next != null) { temp = temp.next; size++; } From 6c4fd0efb0558a58da47b23df35bc8ed0b874ec1 Mon Sep 17 00:00:00 2001 From: Ojas Saxena <43749506+ojasiiitd@users.noreply.github.com> Date: Wed, 6 Mar 2019 15:35:04 +0530 Subject: [PATCH 112/521] Major Updates in SinglyLinkedList.java - The "count" variable made the code more prone to errors, so I removed and replaced it with another "getSize()" function. - The value of "next" was initialized to null. - Major improvements of code were given to "insertNth()" and "deleteHead()" functions for efficiency. - A new function "deleteNth()" was defined, increasing the usefulness of the program. --- DataStructures/Lists/SinglyLinkedList.java | 75 ++++++++++++++++------ 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 1d61e31b2ad0..c9d2413a8375 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -17,11 +17,6 @@ class SinglyLinkedList { */ private Node head; - /** - * Count of nodes - */ - private int count; - /** * This method inserts an element at the head * @@ -31,7 +26,6 @@ public void insertHead(int x) { Node newNode = new Node(x); newNode.next = head; head = newNode; - ++count; } /** @@ -42,19 +36,20 @@ public void insertHead(int x) { */ public void insertNth(int data, int position) { - if (position < 0 || position > count) { + if (position < 0 || position > getSize()) { throw new RuntimeException("position less than zero or position more than the count of list"); } - Node node = new Node(data); - Node dummy = new Node(-1); - dummy.next = head; - Node cur = dummy; - for (int i = 0; i < position; ++i) { - cur = cur.next; + else if (position == 0) + insertHead(data); + else { + Node cur = head; + Node node = new Node(data); + for (int i = 1; i < position; ++i) { + cur = cur.next; + } + node.next = cur.next; + cur.next = node; } - node.next = cur.next; - cur.next = node; - ++count; } /** @@ -62,15 +57,30 @@ public void insertNth(int data, int position) { * * @return The element deleted */ - public Node deleteHead() { + public void deleteHead() { if (isEmpty()) { throw new RuntimeException("The list is empty!"); } - Node temp = head; head = head.next; - --count; - return temp; + } + + /** + * This method deletes an element at Nth position + */ + public void deleteNth(int position) { + if (position < 0 || position > getSize()) { + throw new RuntimeException("position less than zero or position more than the count of list"); + } + else if (position == 0) + deleteHead(); + else { + Node cur = head; + for (int i = 1; i < position; ++i) { + cur = cur.next; + } + cur.next = cur.next.next; + } } /** @@ -79,7 +89,7 @@ public Node deleteHead() { * @return true is list is empty */ public boolean isEmpty() { - return count == 0; + return getSize() == 0; } /** @@ -94,6 +104,23 @@ public void display() { System.out.println(); } + /** + * Returns the size of the linked list + */ + public int getSize() { + if (head == null) + return 0; + else { + Node current = head; + int size = 1; + while (current.next != null) { + current = current.next; + size++; + } + return size; + } + } + /** * Main method * @@ -117,6 +144,11 @@ public static void main(String args[]) { myList.insertNth(11, 2); myList.display(); // 7 -> 5 -> 11 + + myList.deleteNth(1); + + myList.display(); // 7-> 11 + } } @@ -145,5 +177,6 @@ class Node { */ Node(int value) { this.value = value; + this.next = null; } } From ece940b655a2af1992a8851d3ed2b694879c22ae Mon Sep 17 00:00:00 2001 From: Pratham Gupta Date: Sat, 16 Mar 2019 13:05:26 +0530 Subject: [PATCH 113/521] Updated DoublyLinkedList.java Changes made in Insert and Delete functions. --- DataStructures/Lists/DoublyLinkedList.java | 24 ++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index 27c1a1a24580..bfc6f96a40bc 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -1,3 +1,4 @@ + /** * This class implements a DoublyLinkedList. This is done using the classes * LinkedList and Link. @@ -62,9 +63,15 @@ public void insertHead(int x){ public void insertTail(int x){ Link newLink = new Link(x); newLink.next = null; // currentTail(tail) newlink --> - tail.next = newLink; // currentTail(tail) --> newLink --> - newLink.previous = tail; // currentTail(tail) <--> newLink --> - tail = newLink; // oldTail <--> newLink(tail) --> + if(isEmpty()) { // Check if there are no elements in list then it adds first element + tail=newLink; + head=tail; + } + else { + tail.next = newLink; // currentTail(tail) --> newLink --> + newLink.previous = tail; // currentTail(tail) <--> newLink --> + tail = newLink; // oldTail <--> newLink(tail) --> + } } /** @@ -72,12 +79,13 @@ public void insertTail(int x){ * * @return The new head */ - public void deleteHead(){ + public Link deleteHead(){ Link temp = head; head = head.next; // oldHead <--> 2ndElement(head) head.previous = null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed if(head == null) tail = null; + return temp; } /** @@ -85,11 +93,15 @@ public void deleteHead(){ * * @return The new tail */ - public void deleteTail(){ + public Link deleteTail(){ Link temp = tail; tail = tail.previous; // 2ndLast(tail) <--> oldTail --> null tail.next = null; // 2ndLast(tail) --> null - + if(tail==null) + { + head=null; + } + return temp; } /** From c14af04b58ae356c51eca663dcc34d421858dba8 Mon Sep 17 00:00:00 2001 From: pandeyarun709 Date: Mon, 18 Mar 2019 21:22:51 +0530 Subject: [PATCH 114/521] Add Roman To Integer conversion --- Conversions/RomanToInteger.java | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Conversions/RomanToInteger.java diff --git a/Conversions/RomanToInteger.java b/Conversions/RomanToInteger.java new file mode 100644 index 000000000000..9179b58dff18 --- /dev/null +++ b/Conversions/RomanToInteger.java @@ -0,0 +1,60 @@ +import java.util.*; +public class RomanToInteger { + + /* + This function convert Roman number into Integer + @param A is Roman number string + */ + public static int romanToInt(String A) { + Map map = new HashMap<>(); + map.put('I' , 1); + map.put('V' , 5); + map.put('X' , 10); + map.put('L' , 50); + map.put('C' , 100); + map.put('D' , 500); + map.put('M' , 1000); + + char c = A.charAt(A.length()-1); + char prev = ' '; + + int sum =0; + + int newPrev = 0, currentNum =0; + for(int i = A.length() -1;i>=0;i--) + { + c = A.charAt(i); + + + if(prev != ' ') { + //checking current Number greater then previous or not + newPrev = map.get(prev) > newPrev ? map.get(prev) : newPrev ; + } + + + currentNum = map.get(c); + + if(currentNum >= newPrev ) //if current number greater then prev max previous then add + { + sum += currentNum; + } + else { + + sum -= currentNum; // subtract upcoming number until upcoming number not greater then prev max + } + + prev = c; + } + + return sum; + } + + + public static void main(String[] args) { + + + int sum = romanToInt("MDCCCIV") ; + System.out.println(sum); + } + +} \ No newline at end of file From 971d5f75e95afb2cd513c9ce4193c9fd8c80844d Mon Sep 17 00:00:00 2001 From: yanglbme Date: Tue, 19 Mar 2019 08:40:02 +0800 Subject: [PATCH 115/521] Format code in RomanToInteger.java * Format code * Remove redundant code --- Conversions/RomanToInteger.java | 106 +++++++++++++++----------------- 1 file changed, 51 insertions(+), 55 deletions(-) diff --git a/Conversions/RomanToInteger.java b/Conversions/RomanToInteger.java index 9179b58dff18..35b04f9ee913 100644 --- a/Conversions/RomanToInteger.java +++ b/Conversions/RomanToInteger.java @@ -1,60 +1,56 @@ import java.util.*; + public class RomanToInteger { - - /* - This function convert Roman number into Integer - @param A is Roman number string - */ - public static int romanToInt(String A) { - Map map = new HashMap<>(); - map.put('I' , 1); - map.put('V' , 5); - map.put('X' , 10); - map.put('L' , 50); - map.put('C' , 100); - map.put('D' , 500); - map.put('M' , 1000); - - char c = A.charAt(A.length()-1); - char prev = ' '; - - int sum =0; - - int newPrev = 0, currentNum =0; - for(int i = A.length() -1;i>=0;i--) - { - c = A.charAt(i); - - - if(prev != ' ') { - //checking current Number greater then previous or not - newPrev = map.get(prev) > newPrev ? map.get(prev) : newPrev ; - } - - - currentNum = map.get(c); - - if(currentNum >= newPrev ) //if current number greater then prev max previous then add - { - sum += currentNum; - } - else { - - sum -= currentNum; // subtract upcoming number until upcoming number not greater then prev max - } - - prev = c; - } - - return sum; - } + private static Map map = new HashMap<>() {{ + put('I', 1); + put('V', 5); + put('X', 10); + put('L', 50); + put('C', 100); + put('D', 500); + put('M', 1000); + }}; + + /** + * This function convert Roman number into Integer + * + * @param A Roman number string + * @return integer + */ + public static int romanToInt(String A) { + + char prev = ' '; + + int sum = 0; + + int newPrev = 0; + for (int i = A.length() - 1; i >= 0; i--) { + char c = A.charAt(i); - public static void main(String[] args) { - - - int sum = romanToInt("MDCCCIV") ; - System.out.println(sum); - } + if (prev != ' ') { + // checking current Number greater then previous or not + newPrev = map.get(prev) > newPrev ? map.get(prev) : newPrev; + } -} \ No newline at end of file + int currentNum = map.get(c); + + // if current number greater then prev max previous then add + if (currentNum >= newPrev) { + sum += currentNum; + } else { + // subtract upcoming number until upcoming number not greater then prev max + sum -= currentNum; + } + + prev = c; + } + + return sum; + } + + public static void main(String[] args) { + int sum = romanToInt("MDCCCIV"); + System.out.println(sum); + } +} From f3ef5b64ae7c8c44405ba3804cd57f9b7e1d59f0 Mon Sep 17 00:00:00 2001 From: pandeyarun709 Date: Wed, 20 Mar 2019 13:24:23 +0530 Subject: [PATCH 116/521] Add Merge K sorted LinkedList --- .../Lists/Merge_K_SortedLinkedlist.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 DataStructures/Lists/Merge_K_SortedLinkedlist.java diff --git a/DataStructures/Lists/Merge_K_SortedLinkedlist.java b/DataStructures/Lists/Merge_K_SortedLinkedlist.java new file mode 100644 index 000000000000..27b0252145ea --- /dev/null +++ b/DataStructures/Lists/Merge_K_SortedLinkedlist.java @@ -0,0 +1,63 @@ +import java.util.*; + +public class Merge_K_SortedLinkedlist { + + /* + * This function merge K sorted LinkedList + * @param Node []a : array of LinkedList + * @param int N : size of array + * + * author Arun Pandey (https://github.com/pandeyarun709) + */ + Node mergeKList(Node[]a, int N) + { + // Min Heap + PriorityQueue min = new PriorityQueue<>(new Comparator(){ + + public int compare(Node x , Node y){ + return x.data - y.data; + } + }); + + // adding head of all linkedList in min heap + for(int i =0 ; i< N ;i++) + { + min.add(a[i]); + } + + // Make new head among smallest heads in K linkedList + Node head = min.poll(); + min.add(head.next); + Node curr = head; + + //merging LinkedList + while(!min.isEmpty()) { + + Node temp = min.poll(); + curr.next = temp; + curr = temp; + + //Add Node in min Heap only if temp.next is not null + if(temp.next != null){ + min.add(temp.next); + } + } + + return head; + + + } + + // Node Class + private class Node{ + private int data; + private Node next; + + public Node(int d) + { + this.data = d; + next = null; + } + } + +} \ No newline at end of file From 4bc83966c303d5c32fb6f81e44dea908c58aad0f Mon Sep 17 00:00:00 2001 From: yanglbme Date: Wed, 20 Mar 2019 16:24:11 +0800 Subject: [PATCH 117/521] Update Merge_K_SortedLinkedlist.java format code --- .../Lists/Merge_K_SortedLinkedlist.java | 83 +++++++++---------- 1 file changed, 37 insertions(+), 46 deletions(-) diff --git a/DataStructures/Lists/Merge_K_SortedLinkedlist.java b/DataStructures/Lists/Merge_K_SortedLinkedlist.java index 27b0252145ea..bea2c31615b0 100644 --- a/DataStructures/Lists/Merge_K_SortedLinkedlist.java +++ b/DataStructures/Lists/Merge_K_SortedLinkedlist.java @@ -1,63 +1,54 @@ -import java.util.*; +import java.util.Arrays; +import java.util.Comparator; +import java.util.PriorityQueue; +/** + * @author Arun Pandey (https://github.com/pandeyarun709) + */ public class Merge_K_SortedLinkedlist { - - /* - * This function merge K sorted LinkedList - * @param Node []a : array of LinkedList - * @param int N : size of array - * - * author Arun Pandey (https://github.com/pandeyarun709) - */ - Node mergeKList(Node[]a, int N) - { + + /** + * This function merge K sorted LinkedList + * + * @param a array of LinkedList + * @param N size of array + * @return node + */ + Node mergeKList(Node[] a, int N) { // Min Heap - PriorityQueue min = new PriorityQueue<>(new Comparator(){ - - public int compare(Node x , Node y){ - return x.data - y.data; - } - }); - + PriorityQueue min = new PriorityQueue<>(Comparator.comparingInt(x -> x.data)); + // adding head of all linkedList in min heap - for(int i =0 ; i< N ;i++) - { - min.add(a[i]); - } - + min.addAll(Arrays.asList(a).subList(0, N)); + // Make new head among smallest heads in K linkedList Node head = min.poll(); min.add(head.next); Node curr = head; - //merging LinkedList - while(!min.isEmpty()) { - + // merging LinkedList + while (!min.isEmpty()) { + Node temp = min.poll(); curr.next = temp; curr = temp; - - //Add Node in min Heap only if temp.next is not null - if(temp.next != null){ + + // Add Node in min Heap only if temp.next is not null + if (temp.next != null) { min.add(temp.next); } } - - return head; - - - } - - // Node Class - private class Node{ - private int data; - private Node next; - - public Node(int d) - { - this.data = d; - next = null; - } + + return head; } -} \ No newline at end of file + private class Node { + private int data; + private Node next; + + public Node(int d) { + this.data = d; + next = null; + } + } +} From 067e39dbf581f27a7c3b8a9f872f180ba45acd7e Mon Sep 17 00:00:00 2001 From: Egoscio Date: Thu, 21 Mar 2019 14:19:16 -0700 Subject: [PATCH 118/521] Made Matrix equality comparison deep. Solution to the issue #719 --- DataStructures/Matrix/Matrix.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/DataStructures/Matrix/Matrix.java b/DataStructures/Matrix/Matrix.java index 6b055362ce69..2723e7bc9a2b 100644 --- a/DataStructures/Matrix/Matrix.java +++ b/DataStructures/Matrix/Matrix.java @@ -211,7 +211,12 @@ public Matrix multiply(Matrix other) throws RuntimeException { * @return boolean */ public boolean equals(Matrix other) { - return this == other; + for (int i = 0; i < this.data.length; i++) + for (int j = 0; j < this.data[0].length; j++) + if (this.data[i][j] != other.data[i][j]) + return false; + + return true; } /** From 10932ccab197aeb8dea5d2f60caff6eaec690d92 Mon Sep 17 00:00:00 2001 From: Egoscio Date: Thu, 21 Mar 2019 14:33:14 -0700 Subject: [PATCH 119/521] Comparing Matrix size before content size. --- DataStructures/Matrix/Matrix.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DataStructures/Matrix/Matrix.java b/DataStructures/Matrix/Matrix.java index 2723e7bc9a2b..dc1ac4263795 100644 --- a/DataStructures/Matrix/Matrix.java +++ b/DataStructures/Matrix/Matrix.java @@ -211,11 +211,14 @@ public Matrix multiply(Matrix other) throws RuntimeException { * @return boolean */ public boolean equals(Matrix other) { + if (this.getRows() != other.getRows() || this.getColumns() != other.getColumns()) + return false; + for (int i = 0; i < this.data.length; i++) for (int j = 0; j < this.data[0].length; j++) if (this.data[i][j] != other.data[i][j]) return false; - + return true; } From 14974872fd87ed51a89a2949480309f078d32626 Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sat, 23 Mar 2019 15:43:38 +0800 Subject: [PATCH 120/521] Update DoublyLinkedList.java --- DataStructures/Lists/DoublyLinkedList.java | 440 +++++++++++---------- 1 file changed, 223 insertions(+), 217 deletions(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index bfc6f96a40bc..f66c77ddf7eb 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -2,235 +2,241 @@ /** * This class implements a DoublyLinkedList. This is done using the classes * LinkedList and Link. - * - * A linked list is simplar to an array, it holds values. However, - * links in a linked list do not have indees. With a linked list + *

+ * A linked list is similar to an array, it holds values. However, + * links in a linked list do not have indexes. With a linked list * you do not need to predetermine it's size as it grows and shrinks * as it is edited. This is an example of a double ended, doubly * linked list. Each link references the next link and the previous * one. - * - * @author Unknown * + * @author Unknown */ -class DoublyLinkedList{ - /** Head refers to the front of the list */ - private Link head; - /** Tail refers to the back of the list */ - private Link tail; - - /** - * Default Constructor - */ - public DoublyLinkedList(){ - head = null; - tail = null; - } - - /** - * Constructs a list containing the elements of the array - * @param array the array whose elements are to be placed into this list - * @throws NullPointerException if the specified collection is null - */ - public DoublyLinkedList(int[] array){ - if (array == null) throw new NullPointerException(); - for (int i:array) { - insertTail(i); - } - } - - /** - * Insert an element at the head - * - * @param x Element to be inserted - */ - public void insertHead(int x){ - Link newLink = new Link(x); //Create a new link with a value attached to it - if(isEmpty()) //Set the first element added to be the tail - tail = newLink; - else - head.previous = newLink; // newLink <-- currenthead(head) - newLink.next = head; // newLink <--> currenthead(head) - head = newLink; // newLink(head) <--> oldhead - } - - /** - * Insert an element at the tail - * - * @param x Element to be inserted - */ - public void insertTail(int x){ - Link newLink = new Link(x); - newLink.next = null; // currentTail(tail) newlink --> - if(isEmpty()) { // Check if there are no elements in list then it adds first element - tail=newLink; - head=tail; - } - else { - tail.next = newLink; // currentTail(tail) --> newLink --> - newLink.previous = tail; // currentTail(tail) <--> newLink --> - tail = newLink; // oldTail <--> newLink(tail) --> - } - } - - /** - * Delete the element at the head - * - * @return The new head - */ - public Link deleteHead(){ - Link temp = head; - head = head.next; // oldHead <--> 2ndElement(head) - head.previous = null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed - if(head == null) - tail = null; - return temp; - } - - /** - * Delete the element at the tail - * - * @return The new tail - */ - public Link deleteTail(){ - Link temp = tail; - tail = tail.previous; // 2ndLast(tail) <--> oldTail --> null - tail.next = null; // 2ndLast(tail) --> null - if(tail==null) - { - head=null; - } - return temp; - } - - /** - * Delete the element from somewhere in the list - * - * @param x element to be deleted - * @return Link deleted - */ - public void delete(int x){ - Link current = head; - - while(current.value != x) //Find the position to delete - current = current.next; - - if(current == head) - deleteHead(); - - else if(current == tail) - deleteTail(); - - else{ //Before: 1 <--> 2(current) <--> 3 - current.previous.next = current.next; // 1 --> 3 - current.next.previous = current.previous; // 1 <--> 3 - } - } - - /** - * Inserts element and reorders - * - * @param x Element to be added - */ - public void insertOrdered(int x){ - Link newLink = new Link(x); - Link current = head; - while(current != null && x > current.value) //Find the position to insert - current = current.next; - - if(current == head) - insertHead(x); - - else if(current == null) - insertTail(x); - - else{ //Before: 1 <--> 2(current) <--> 3 - newLink.previous = current.previous; // 1 <-- newLink - current.previous.next = newLink; // 1 <--> newLink - newLink.next = current; // 1 <--> newLink --> 2(current) <--> 3 - current.previous = newLink; // 1 <--> newLink <--> 2(current) <--> 3 - } - } - - /** - * Returns true if list is empty - * - * @return true if list is empty - */ - public boolean isEmpty(){ - return(head == null); - } - - /** - * Prints contents of the list - */ - public void display(){ //Prints contents of the list - Link current = head; - while(current!=null){ - current.displayLink(); - current = current.next; - } - System.out.println(); - } +class DoublyLinkedList { + /** + * Head refers to the front of the list + */ + private Link head; + /** + * Tail refers to the back of the list + */ + private Link tail; + + /** + * Default Constructor + */ + public DoublyLinkedList() { + head = null; + tail = null; + } + + /** + * Constructs a list containing the elements of the array + * + * @param array the array whose elements are to be placed into this list + * @throws NullPointerException if the specified collection is null + */ + public DoublyLinkedList(int[] array) { + if (array == null) throw new NullPointerException(); + for (int i : array) { + insertTail(i); + } + } + + /** + * Insert an element at the head + * + * @param x Element to be inserted + */ + public void insertHead(int x) { + Link newLink = new Link(x); // Create a new link with a value attached to it + if (isEmpty()) // Set the first element added to be the tail + tail = newLink; + else + head.previous = newLink; // newLink <-- currenthead(head) + newLink.next = head; // newLink <--> currenthead(head) + head = newLink; // newLink(head) <--> oldhead + } + + /** + * Insert an element at the tail + * + * @param x Element to be inserted + */ + public void insertTail(int x) { + Link newLink = new Link(x); + newLink.next = null; // currentTail(tail) newlink --> + if (isEmpty()) { // Check if there are no elements in list then it adds first element + tail = newLink; + head = tail; + } else { + tail.next = newLink; // currentTail(tail) --> newLink --> + newLink.previous = tail; // currentTail(tail) <--> newLink --> + tail = newLink; // oldTail <--> newLink(tail) --> + } + } + + /** + * Delete the element at the head + * + * @return The new head + */ + public Link deleteHead() { + Link temp = head; + head = head.next; // oldHead <--> 2ndElement(head) + head.previous = null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed + if (head == null) + tail = null; + return temp; + } + + /** + * Delete the element at the tail + * + * @return The new tail + */ + public Link deleteTail() { + Link temp = tail; + tail = tail.previous; // 2ndLast(tail) <--> oldTail --> null + tail.next = null; // 2ndLast(tail) --> null + if (tail == null) { + head = null; + } + return temp; + } + + /** + * Delete the element from somewhere in the list + * + * @param x element to be deleted + * @return Link deleted + */ + public void delete(int x) { + Link current = head; + + while (current.value != x) // Find the position to delete + current = current.next; + + if (current == head) + deleteHead(); + + else if (current == tail) + deleteTail(); + + else { // Before: 1 <--> 2(current) <--> 3 + current.previous.next = current.next; // 1 --> 3 + current.next.previous = current.previous; // 1 <--> 3 + } + } + + /** + * Inserts element and reorders + * + * @param x Element to be added + */ + public void insertOrdered(int x) { + Link newLink = new Link(x); + Link current = head; + while (current != null && x > current.value) // Find the position to insert + current = current.next; + + if (current == head) + insertHead(x); + + else if (current == null) + insertTail(x); + + else { // Before: 1 <--> 2(current) <--> 3 + newLink.previous = current.previous; // 1 <-- newLink + current.previous.next = newLink; // 1 <--> newLink + newLink.next = current; // 1 <--> newLink --> 2(current) <--> 3 + current.previous = newLink; // 1 <--> newLink <--> 2(current) <--> 3 + } + } + + /** + * Returns true if list is empty + * + * @return true if list is empty + */ + public boolean isEmpty() { + return (head == null); + } + + /** + * Prints contents of the list + */ + public void display() { // Prints contents of the list + Link current = head; + while (current != null) { + current.displayLink(); + current = current.next; + } + System.out.println(); + } } /** * This class is used to implement the nodes of the * linked list. - * - * @author Unknown * + * @author Unknown */ -class Link{ - /** Value of node */ - public int value; - /** This points to the link in front of the new link */ - public Link next; - /** This points to the link behind the new link */ - public Link previous; - - /** - * Constructor - * - * @param value Value of node - */ - public Link(int value){ - this.value = value; - } - - /** - * Displays the node - */ - public void displayLink(){ - System.out.print(value+" "); - } - - /** - * Main Method - * - * @param args Command line arguments - */ - public static void main(String args[]){ - DoublyLinkedList myList = new DoublyLinkedList(); - - myList.insertHead(13); - myList.insertHead(7); - myList.insertHead(10); - myList.display(); // <-- 10(head) <--> 7 <--> 13(tail) --> - - myList.insertTail(11); - myList.display(); // <-- 10(head) <--> 7 <--> 13 <--> 11(tail) --> - - myList.deleteTail(); - myList.display(); // <-- 10(head) <--> 7 <--> 13(tail) --> - - myList.delete(7); - myList.display(); // <-- 10(head) <--> 13(tail) --> - - myList.insertOrdered(23); - myList.insertOrdered(67); - myList.insertOrdered(3); - myList.display(); // <-- 3(head) <--> 10 <--> 13 <--> 23 <--> 67(tail) --> - } +class Link { + /** + * Value of node + */ + public int value; + /** + * This points to the link in front of the new link + */ + public Link next; + /** + * This points to the link behind the new link + */ + public Link previous; + + /** + * Constructor + * + * @param value Value of node + */ + public Link(int value) { + this.value = value; + } + + /** + * Displays the node + */ + public void displayLink() { + System.out.print(value + " "); + } + + /** + * Main Method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + DoublyLinkedList myList = new DoublyLinkedList(); + myList.insertHead(13); + myList.insertHead(7); + myList.insertHead(10); + myList.display(); // <-- 10(head) <--> 7 <--> 13(tail) --> + + myList.insertTail(11); + myList.display(); // <-- 10(head) <--> 7 <--> 13 <--> 11(tail) --> + + myList.deleteTail(); + myList.display(); // <-- 10(head) <--> 7 <--> 13(tail) --> + + myList.delete(7); + myList.display(); // <-- 10(head) <--> 13(tail) --> + + myList.insertOrdered(23); + myList.insertOrdered(67); + myList.insertOrdered(3); + myList.display(); // <-- 3(head) <--> 10 <--> 13 <--> 23 <--> 67(tail) --> + } } From 676c5e7a62b8f12fb35adf52aa11b684cf067c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20D=C4=85bek?= Date: Sun, 24 Mar 2019 06:42:17 +0100 Subject: [PATCH 121/521] fix: fix link in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 522a80e1b083..d41914ae0a12 100644 --- a/README.md +++ b/README.md @@ -173,7 +173,7 @@ Graphs|Heaps|Lists|Queues| [BFS](DataStructures/Graphs/BFS.java)|[Empty Heap Exception](DataStructures/Heaps/EmptyHeapException.java)|[Circle Linked List](DataStructures/Lists/CircleLinkedList.java)|[Generic Array List Queue](DataStructures/Queues/GenericArrayListQueue.java)| [DFS](DataStructures/Graphs/DFS.java)|[Heap](DataStructures/Heaps/Heap.java)|[Doubly Linked List](DataStructures/Lists/DoublyLinkedList.java)|[Queues](DataStructures/Queues/Queues.java)| [Graphs](DataStructures/Graphs/Graphs.java)|[Heap Element](DataStructures/Heaps/HeapElement.java)|[Singly Linked List](DataStructures/Lists/SinglyLinkedList.java)| -[Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](Data%Structures/Heaps/MaxHeap.java)| +[Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](DataStructures/Heaps/MaxHeap.java)| [CursorLinkedList](DataStructures/Lists/CursorLinkedList.java)| [Matrix Graphs](DataStructures/Graphs/MatrixGraphs.java)|[Min Heap](DataStructures/Heaps/MinHeap.java)| [PrimMST](DataStructures/Graphs/PrimMST.java)| From f8605b957a7d5ec4010fc9db6434ff691a0eb5f5 Mon Sep 17 00:00:00 2001 From: Marcos <33052423+markettes@users.noreply.github.com> Date: Thu, 11 Apr 2019 12:20:53 +0200 Subject: [PATCH 122/521] Efficiency Just two small things that in case the number was very big could be helpful. --- ciphers/Caesar.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ciphers/Caesar.java b/ciphers/Caesar.java index 77cd5b9ebcf6..a2c11db389e4 100644 --- a/ciphers/Caesar.java +++ b/ciphers/Caesar.java @@ -24,8 +24,8 @@ public class Caesar { public static String encode(String message, int shift) { String encoded = ""; - while (shift >= 26) { // 26 = number of latin letters - shift -= 26; + if (shift >= 26) { // 26 = number of latin letters + shift %= 26; } final int length = message.length(); @@ -62,8 +62,8 @@ public static String encode(String message, int shift) { public static String decode(String encryptedMessage, int shift) { String decoded = ""; - while (shift >= 26) { // 26 = number of latin letters - shift -= 26; + if (shift >= 26) { // 26 = number of latin letters + shift %= 26; } final int length = encryptedMessage.length(); From 67a94b896ba4d7c0ec6f673794882cc098572b17 Mon Sep 17 00:00:00 2001 From: Ashmi Chheda <31774401+ashmichheda@users.noreply.github.com> Date: Fri, 19 Apr 2019 23:43:30 +0530 Subject: [PATCH 123/521] update readme.md: Fixed & added links --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d41914ae0a12..17aaadfa53e6 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,8 @@ __Properties__ * Average case performance O(n) * Worst case space complexity O(1) iterative +##### View the algorithm in [action][linear-tutorialspoint] + ### Binary ![alt text][binary-image] @@ -119,7 +121,7 @@ __Properties__ * Average case performance O(log n) * Worst case space complexity O(1) -##### View the algorithm in [action][shell-toptal] +##### View the algorithm in [action][binary-tutorialspoint] [bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort [bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort @@ -147,9 +149,11 @@ __Properties__ [linear-wiki]: https://en.wikipedia.org/wiki/Linear_search [linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif +[linear-tutorialspoint]: https://www.tutorialspoint.com/data_structures_algorithms/linear_search_algorithm.htm [binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm [binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png +[binary-tutorialspoint]: https://www.tutorialspoint.com/data_structures_algorithms/binary_search_algorithm.htm -------------------------------------------------------------------- From 86263090ff6d2b3394ea1d8acff9f070c0ff948b Mon Sep 17 00:00:00 2001 From: bogdandv Date: Sat, 20 Apr 2019 21:58:35 +0300 Subject: [PATCH 124/521] Update LevenshteinDistance.java --- Dynamic Programming/LevenshteinDistance.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dynamic Programming/LevenshteinDistance.java b/Dynamic Programming/LevenshteinDistance.java index a196c0fe5139..1844e7e8a688 100644 --- a/Dynamic Programming/LevenshteinDistance.java +++ b/Dynamic Programming/LevenshteinDistance.java @@ -25,7 +25,7 @@ private static int calculate_distance(String a, String b) { distance_mat[0][j] = j; } for (int i = 0; i < len_a; i++) { - for (int j = 0; i < len_b; j++) { + for (int j = 0; j < len_b; j++) { int cost; if (a.charAt(i) == b.charAt(j)) { cost = 0; From ed99f58d9bf5a904cdc4f8f69cd26fd379c148c1 Mon Sep 17 00:00:00 2001 From: Marcos <33052423+markettes@users.noreply.github.com> Date: Thu, 2 May 2019 11:43:01 +0200 Subject: [PATCH 125/521] Now it's OK! --- ciphers/Caesar.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ciphers/Caesar.java b/ciphers/Caesar.java index a2c11db389e4..06319f79df49 100644 --- a/ciphers/Caesar.java +++ b/ciphers/Caesar.java @@ -24,9 +24,9 @@ public class Caesar { public static String encode(String message, int shift) { String encoded = ""; - if (shift >= 26) { // 26 = number of latin letters - shift %= 26; - } + + shift %= 26; + final int length = message.length(); for (int i = 0; i < length; i++) { @@ -62,9 +62,9 @@ public static String encode(String message, int shift) { public static String decode(String encryptedMessage, int shift) { String decoded = ""; - if (shift >= 26) { // 26 = number of latin letters - shift %= 26; - } + + shift %= 26; + final int length = encryptedMessage.length(); for (int i = 0; i < length; i++) { From 163db8521a4e545c335d81b12c393ab9a014d2ba Mon Sep 17 00:00:00 2001 From: Anup Kumar Panwar <1anuppanwar@gmail.com> Date: Sat, 4 May 2019 15:57:37 +0530 Subject: [PATCH 126/521] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 17aaadfa53e6..06a88dfe149d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ # The Algorithms - Java +[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JP3BLXA6KMDGW) + NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. From 29948363da917bfb628215378a72f4b569e51348 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Thu, 9 May 2019 19:32:54 +0800 Subject: [PATCH 127/521] docs: update the whole repository * fix some bugs * delete duplicate files * format code --- .../bin/HEncoder$Node$Nodecomparator.class | Bin 859 -> 0 bytes Compression/bin/HEncoder$Node.class | Bin 683 -> 0 bytes Compression/bin/HEncoder.class | Bin 3674 -> 0 bytes Compression/bin/compressclient.class | Bin 756 -> 0 bytes Compression/bin/genericheap.class | Bin 2858 -> 0 bytes Compression/src/HEncoder.java | 108 - Compression/src/compressclient.java | 11 - Compression/src/genericheap.java | 93 - Conversions/AnyBaseToAnyBase.java | 236 +- Conversions/AnyBaseToDecimal.java | 2 + Conversions/AnytoAny.java | 2 +- Conversions/BinaryToDecimal.java | 47 +- Conversions/BinaryToHexadecimal.java | 98 +- Conversions/BinaryToOctal.java | 68 +- Conversions/DecimalToAnyBase.java | 2 + Conversions/DecimalToBinary.java | 11 +- Conversions/DecimalToHexaDecimal.java | 1 + Conversions/DecimalToOctal.java | 48 +- Conversions/HexToOct.java | 124 +- Conversions/HexaDecimalToBinary.java | 2 + Conversions/HexaDecimalToDecimal.java | 12 +- Conversions/OctalToBinary.java | 49 - Conversions/OctalToDecimal.java | 2 + Conversions/OctalToHexadecimal.java | 111 +- Conversions/RomanToInteger.java | 4 +- DataStructures/Bags/Bag.java | 228 +- DataStructures/Buffers/CircularBuffer.java | 21 +- DataStructures/CSVFile/src/CSVFile.java | 692 - DataStructures/CSVFile/src/TestCSVFile.java | 133 - DataStructures/CSVFile/testData.csv | 25029 ---------------- DataStructures/CSVFile/testData2.csv | 3 - DataStructures/CSVFile/testData3.csv | 1 - DataStructures/CSVFile/testData4.csv | 7 - DataStructures/Graphs/BFS.java | 62 - DataStructures/Graphs/ConnectedComponent.java | 261 +- DataStructures/Graphs/Cycles.java | 18 +- DataStructures/Graphs/DFS.java | 63 - DataStructures/Graphs/FloydWarshall.java | 125 +- DataStructures/Graphs/Graphs.java | 34 +- DataStructures/Graphs/KruskalsAlgorithm.java | 174 - DataStructures/Graphs/MatrixGraphs.java | 246 +- DataStructures/Graphs/PrimMST.java | 96 +- DataStructures/HashMap/Hashing/HashMap.java | 76 +- .../HashMap/Hashing/LinkedList.java | 2 + DataStructures/HashMap/Hashing/Main.java | 2 + DataStructures/HashMap/Hashing/Node.java | 2 + DataStructures/Heaps/EmptyHeapException.java | 3 - DataStructures/Heaps/HeapElement.java | 3 - DataStructures/Heaps/MinHeap.java | 3 - DataStructures/Heaps/MinPriorityQueue.java | 10 +- DataStructures/Lists/CircleLinkedList.java | 115 +- DataStructures/Lists/CursorLinkedList.java | 18 +- DataStructures/Lists/DoublyLinkedList.java | 3 +- .../Lists/Merge_K_SortedLinkedlist.java | 2 + DataStructures/Lists/SinglyLinkedList.java | 24 +- DataStructures/Matrix/Matrix.java | 276 +- DataStructures/Matrix/MatrixFastPower.java | 191 - .../Queues/GenericArrayListQueue.java | 2 + DataStructures/Queues/PriorityQueues.java | 3 +- DataStructures/Queues/Queues.java | 2 + DataStructures/Stacks/StackOfLinkedList.java | 2 + DataStructures/Trees/AVLTree.java | 108 +- DataStructures/Trees/BinaryTree.java | 489 +- DataStructures/Trees/FindHeightOfTree.java | 100 - DataStructures/Trees/GenericTree.Java | 3 + DataStructures/Trees/LevelOrderTraversal.java | 75 +- .../Trees/LevelOrderTraversalQueue.java | 58 +- DataStructures/Trees/PrintTopViewofTree.java | 85 +- DataStructures/Trees/RedBlackBST.java | 605 +- DataStructures/Trees/TreeTraversal.java | 39 +- DataStructures/Trees/TrieImp.java | 70 +- DataStructures/Trees/ValidBSTOrNot.java | 59 +- Dynamic Programming/Edit_Distance.java | 89 - Dynamic Programming/Ford_Fulkerson.java | 71 - Dynamic Programming/KadaneAlgorithm.java | 55 - Dynamic Programming/Knapsack.java | 38 - .../LongestCommonSubsequence.java | 66 - .../CoinChange.java | 36 +- DynamicProgramming/Edit_Distance.java | 103 + .../EggDropping.java | 6 +- .../Fibonacci.java | 3 +- DynamicProgramming/Ford_Fulkerson.java | 73 + DynamicProgramming/KadaneAlgorithm.java | 55 + DynamicProgramming/Knapsack.java | 37 + .../LevenshteinDistance.java | 2 + .../LongestCommonSubsequence.java | 68 + .../LongestIncreasingSubsequence.java | 3 +- .../LongestValidParentheses.java | 2 + .../MatrixChainMultiplication.java | 2 + .../RodCutting.java | 7 +- MinimizingLateness/MinimizingLateness.java | 86 +- Misc/MedianOfRunningArray.java | 18 +- ...ndromicPrime.java => PalindromePrime.java} | 10 +- Misc/heap_sort.java | 55 +- Others/Abecedarian.java | 25 +- Others/Armstrong.java | 81 +- Others/BrianKernighanAlgorithm.java | 76 +- Others/{crc32.java => CRC32.java} | 2 + Others/CountChar.java | 37 +- Others/CountWords.java | 28 + Others/Dijkshtra.java | 136 +- Others/Dijkstra.java | 28 +- Others/EulersFunction.java | 12 +- Others/Factorial.java | 73 +- Others/FibToN.java | 45 +- Others/FloydTriangle.java | 24 +- Others/GCD.java | 16 +- Others/GuassLegendre.java | 72 +- Others/Huffman.java | 158 - Others/InsertDeleteInArray.java | 86 +- Others/KMP.java | 28 +- Others/Krishnamurthy.java | 30 + Others/LinearCongruentialGenerator.java | 27 +- Others/LowestBasePalindrome.java | 266 +- Others/Node.java | 16 - Others/Palindrome.java | 2 + Others/PasswordGen.java | 32 +- Others/PerlinNoise.java | 38 +- Others/PowerOfTwoOrNot.java | 53 +- Others/QueueUsingTwoStacks.java | 2 + ...ng.java => RemoveDuplicateFromString.java} | 13 +- Others/ReturnSubsequence.java | 61 +- Others/ReverseStackUsingRecursion.java | 23 +- Others/ReverseString.java | 64 +- Others/RootPrecision.java | 2 + Others/SJF.java | 50 +- Others/SieveOfEratosthenes.java | 18 +- Others/SkylineProblem.java | 252 +- Others/StackPostfixNotation.java | 48 +- Others/TopKWords.java | 7 +- ...iUsingRecursion.java => TowerOfHanoi.java} | 20 +- Others/countwords.java | 26 - Others/krishnamurthy.java | 28 - Searches/BinarySearch.java | 7 +- Searches/InterpolationSearch.java | 110 +- Searches/IterativeBinarySearch.java | 11 +- Searches/IterativeTernarySearch.java | 14 +- Searches/LinearSearch.java | 7 +- Searches/SaddlebackSearch.java | 4 +- Searches/SearchAlgorithm.java | 8 +- Searches/TernarySearch.java | 25 +- Sorts/BinaryTreeSort.java | 118 +- Sorts/BogoSort.java | 15 +- Sorts/BubbleSort.java | 10 +- Sorts/CocktailShakerSort.java | 36 +- Sorts/CombSort.java | 35 +- Sorts/CountingSort.java | 19 +- Sorts/CycleSort.java | 12 +- Sorts/GnomeSort.java | 15 +- Sorts/HeapSort.java | 12 +- Sorts/InsertionSort.java | 5 +- Sorts/MergeSort.java | 44 +- Sorts/PancakeSort.java | 11 +- Sorts/QuickSort.java | 31 +- Sorts/RadixSort.java | 46 +- Sorts/SelectionSort.java | 11 +- Sorts/ShellSort.java | 55 +- Sorts/SortAlgorithm.java | 7 +- Sorts/SortUtils.java | 22 +- divideconquer/ClosestPair.java | 700 +- divideconquer/SkylineAlgorithm.java | 5 +- out/production/github-repo/.gitignore | 5 + .../github-repo/BellmanFord$Edge.class | Bin 0 -> 547 bytes out/production/github-repo/BellmanFord.class | Bin 0 -> 3763 bytes .../Conversions/AnyBaseToAnyBase.class | Bin 0 -> 3410 bytes .../Conversions/AnyBaseToDecimal.class | Bin 0 -> 1970 bytes .../github-repo/Conversions/AnytoAny.class | Bin 0 -> 986 bytes .../Conversions/BinaryToDecimal.class | Bin 0 -> 1294 bytes .../Conversions/BinaryToHexadecimal.class | Bin 0 -> 1998 bytes .../Conversions/BinaryToOctal.class | Bin 0 -> 1237 bytes .../Conversions/DecimalToAnyBase.class | Bin 0 -> 2529 bytes .../Conversions/DecimalToBinary.class | Bin 0 -> 1766 bytes .../Conversions/DecimalToHexaDecimal.class | Bin 0 -> 1742 bytes .../Conversions/DecimalToOctal.class | Bin 0 -> 1290 bytes .../github-repo/Conversions/HexToOct.class | Bin 0 -> 1843 bytes .../Conversions/HexaDecimalToBinary.class | Bin 0 -> 1724 bytes .../Conversions/HexaDecimalToDecimal.class | Bin 0 -> 1560 bytes .../Conversions/OctalToDecimal.class | Bin 0 -> 1695 bytes .../Conversions/OctalToHexadecimal.class | Bin 0 -> 1774 bytes .../Conversions/RomanToInteger$1.class | Bin 0 -> 813 bytes .../Conversions/RomanToInteger.class | Bin 0 -> 1562 bytes .../DataStructures/Bags/Bag$1.class | Bin 0 -> 197 bytes .../Bags/Bag$ListIterator.class | Bin 0 -> 1738 bytes .../DataStructures/Bags/Bag$Node.class | Bin 0 -> 1426 bytes .../github-repo/DataStructures/Bags/Bag.class | Bin 0 -> 3086 bytes .../CircularBuffer$TestReadWorker.class | Bin 0 -> 1347 bytes .../CircularBuffer$TestWriteWorker.class | Bin 0 -> 1402 bytes .../Buffers/CircularBuffer.class | Bin 0 -> 2332 bytes .../Graphs/AdjacencyListGraph$Vertex.class | Bin 0 -> 1956 bytes .../Graphs/AdjacencyListGraph.class | Bin 0 -> 2890 bytes .../Graphs/AdjacencyMatrixGraph.class | Bin 0 -> 2832 bytes .../Graphs/ConnectedComponent.class | Bin 0 -> 1548 bytes .../DataStructures/Graphs/Cycle.class | Bin 0 -> 2947 bytes .../DataStructures/Graphs/Cycles.class | Bin 0 -> 556 bytes .../DataStructures/Graphs/FloydWarshall.class | Bin 0 -> 2503 bytes .../DataStructures/Graphs/Graph$Edge.class | Bin 0 -> 1012 bytes .../DataStructures/Graphs/Graph$Node.class | Bin 0 -> 720 bytes .../DataStructures/Graphs/Graph.class | Bin 0 -> 3164 bytes .../DataStructures/Graphs/Graphs.class | Bin 0 -> 1442 bytes .../DataStructures/Graphs/MatrixGraphs.class | Bin 0 -> 825 bytes .../DataStructures/Graphs/PrimMST.class | Bin 0 -> 2199 bytes .../HashMap/Hashing/HashMap.class | Bin 0 -> 1463 bytes .../HashMap/Hashing/LinkedList.class | Bin 0 -> 1498 bytes .../DataStructures/HashMap/Hashing/Main.class | Bin 0 -> 1423 bytes .../DataStructures/HashMap/Hashing/Node.class | Bin 0 -> 392 bytes .../Heaps/EmptyHeapException.class | Bin 0 -> 388 bytes .../DataStructures/Heaps/Heap.class | Bin 0 -> 333 bytes .../DataStructures/Heaps/HeapElement.class | Bin 0 -> 2173 bytes .../DataStructures/Heaps/MaxHeap.class | Bin 0 -> 3904 bytes .../DataStructures/Heaps/MinHeap.class | Bin 0 -> 3904 bytes .../Heaps/MinPriorityQueue.class | Bin 0 -> 2562 bytes .../Lists/CircleLinkedList$1.class | Bin 0 -> 238 bytes .../Lists/CircleLinkedList$Node.class | Bin 0 -> 1196 bytes .../Lists/CircleLinkedList.class | Bin 0 -> 1922 bytes .../Lists/CursorLinkedList$Node.class | Bin 0 -> 881 bytes .../Lists/CursorLinkedList.class | Bin 0 -> 3873 bytes .../Lists/DoublyLinkedList.class | Bin 0 -> 2418 bytes .../DataStructures/Lists/Link.class | Bin 0 -> 1343 bytes .../Lists/Merge_K_SortedLinkedlist$Node.class | Bin 0 -> 1236 bytes .../Lists/Merge_K_SortedLinkedlist.class | Bin 0 -> 2649 bytes .../DataStructures/Lists/Node.class | Bin 0 -> 385 bytes .../Lists/SinglyLinkedList.class | Bin 0 -> 2769 bytes .../DataStructures/Matrix/Matrix.class | Bin 0 -> 5253 bytes .../Queues/GenericArrayListQueue.class | Bin 0 -> 2497 bytes .../DataStructures/Queues/PriorityQueue.class | Bin 0 -> 1243 bytes .../Queues/PriorityQueues.class | Bin 0 -> 1070 bytes .../DataStructures/Queues/Queue.class | Bin 0 -> 1489 bytes .../DataStructures/Queues/Queues.class | Bin 0 -> 866 bytes .../Stacks/LinkedListStack.class | Bin 0 -> 1872 bytes .../DataStructures/Stacks/Node.class | Bin 0 -> 387 bytes .../Stacks/StackOfLinkedList.class | Bin 0 -> 1189 bytes .../DataStructures/Trees/AVLTree$Node.class | Bin 0 -> 1956 bytes .../DataStructures/Trees/AVLTree.class | Bin 0 -> 4616 bytes .../Trees/BinaryTree$Node.class | Bin 0 -> 665 bytes .../DataStructures/Trees/BinaryTree.class | Bin 0 -> 3099 bytes .../DataStructures/Trees/GenericTree$1.class | Bin 0 -> 223 bytes .../Trees/GenericTree$Node.class | Bin 0 -> 959 bytes .../DataStructures/Trees/GenericTree.class | Bin 0 -> 5739 bytes .../Trees/LevelOrderTraversal$Node.class | Bin 0 -> 678 bytes .../Trees/LevelOrderTraversal.class | Bin 0 -> 1560 bytes .../Trees/LevelOrderTraversalQueue$Node.class | Bin 0 -> 712 bytes .../Trees/LevelOrderTraversalQueue.class | Bin 0 -> 1491 bytes .../DataStructures/Trees/Node.class | Bin 0 -> 1988 bytes .../Trees/PrintTopViewofTree.class | Bin 0 -> 1052 bytes .../DataStructures/Trees/QItem.class | Bin 0 -> 469 bytes .../Trees/RedBlackBST$Node.class | Bin 0 -> 798 bytes .../DataStructures/Trees/RedBlackBST.class | Bin 0 -> 6374 bytes .../DataStructures/Trees/Tree.class | Bin 0 -> 1971 bytes .../DataStructures/Trees/TreeNode.class | Bin 0 -> 424 bytes .../DataStructures/Trees/TreeTraversal.class | Bin 0 -> 1081 bytes .../Trees/TrieImp$TrieNode.class | Bin 0 -> 616 bytes .../DataStructures/Trees/TrieImp.class | Bin 0 -> 3364 bytes .../Trees/ValidBSTOrNot$Node.class | Bin 0 -> 642 bytes .../DataStructures/Trees/ValidBSTOrNot.class | Bin 0 -> 926 bytes .../DynamicProgramming/CoinChange.class | Bin 0 -> 1897 bytes .../DynamicProgramming/Edit_Distance.class | Bin 0 -> 2089 bytes .../DynamicProgramming/EggDropping.class | Bin 0 -> 1239 bytes .../DynamicProgramming/Fibonacci.class | Bin 0 -> 2235 bytes .../DynamicProgramming/Ford_Fulkerson.class | Bin 0 -> 3144 bytes .../DynamicProgramming/KadaneAlgorithm.class | Bin 0 -> 1265 bytes .../DynamicProgramming/Knapsack.class | Bin 0 -> 1150 bytes .../LevenshteinDistance.class | Bin 0 -> 1769 bytes .../LongestCommonSubsequence.class | Bin 0 -> 2516 bytes .../LongestIncreasingSubsequence.class | Bin 0 -> 1480 bytes .../LongestValidParentheses.class | Bin 0 -> 1711 bytes .../DynamicProgramming/Matrix.class | Bin 0 -> 637 bytes .../MatrixChainMultiplication.class | Bin 0 -> 4092 bytes .../DynamicProgramming/RodCutting.class | Bin 0 -> 1277 bytes .../MinimizingLateness$Schedule.class | Bin 0 -> 598 bytes .../MinimizingLateness.class | Bin 0 -> 2122 bytes .../MinimizingLateness/data06_lateness.txt | 7 + .../Misc/MedianOfRunningArray.class | Bin 0 -> 1953 bytes .../github-repo/Misc/PalindromePrime.class | Bin 0 -> 1653 bytes .../github-repo/Misc/heap_sort.class | Bin 0 -> 1705 bytes out/production/github-repo/NodeStack.class | Bin 0 -> 3835 bytes .../github-repo/Others/Abecedarian.class | Bin 0 -> 598 bytes .../github-repo/Others/Armstrong.class | Bin 0 -> 1414 bytes .../Others/BrianKernighanAlgorithm.class | Bin 0 -> 985 bytes out/production/github-repo/Others/CRC32.class | Bin 0 -> 1231 bytes .../github-repo/Others/CRCAlgorithm.class | Bin 0 -> 3637 bytes .../github-repo/Others/CountChar.class | Bin 0 -> 1463 bytes .../github-repo/Others/CountWords.class | Bin 0 -> 1357 bytes .../github-repo/Others/Dijkshtra.class | Bin 0 -> 2467 bytes .../github-repo/Others/Dijkstra.class | Bin 0 -> 1060 bytes .../github-repo/Others/EulersFunction.class | Bin 0 -> 818 bytes .../github-repo/Others/Factorial.class | Bin 0 -> 1575 bytes .../github-repo/Others/FibToN.class | Bin 0 -> 882 bytes .../github-repo/Others/FloydTriangle.class | Bin 0 -> 1249 bytes out/production/github-repo/Others/GCD.class | Bin 0 -> 1137 bytes .../github-repo/Others/Graph$Edge.class | Bin 0 -> 523 bytes .../github-repo/Others/Graph$Vertex.class | Bin 0 -> 2044 bytes out/production/github-repo/Others/Graph.class | Bin 0 -> 3774 bytes .../github-repo/Others/GuassLegendre.class | Bin 0 -> 1229 bytes .../Others/InsertDeleteInArray.class | Bin 0 -> 1542 bytes out/production/github-repo/Others/KMP.class | Bin 0 -> 1655 bytes .../github-repo/Others/Krishnamurthy.class | Bin 0 -> 1427 bytes .../Others/LinearCongruentialGenerator.class | Bin 0 -> 1289 bytes .../Others/LowestBasePalindrome.class | Bin 0 -> 2929 bytes .../github-repo/Others/Palindrome.class | Bin 0 -> 1128 bytes .../github-repo/Others/PasswordGen.class | Bin 0 -> 2117 bytes .../github-repo/Others/PerlinNoise.class | Bin 0 -> 3518 bytes .../github-repo/Others/PowerOfTwoOrNot.class | Bin 0 -> 1082 bytes .../github-repo/Others/Process.class | Bin 0 -> 403 bytes .../Others/QueueUsingTwoStacks.class | Bin 0 -> 1114 bytes .../github-repo/Others/QueueWithStack.class | Bin 0 -> 1154 bytes .../Others/RemoveDuplicateFromString.class | Bin 0 -> 1747 bytes .../Others/ReturnSubsequence.class | Bin 0 -> 1665 bytes .../Others/ReverseStackUsingRecursion.class | Bin 0 -> 1770 bytes .../github-repo/Others/ReverseString.class | Bin 0 -> 1577 bytes .../github-repo/Others/RootPrecision.class | Bin 0 -> 1026 bytes out/production/github-repo/Others/SJF.class | Bin 0 -> 500 bytes .../github-repo/Others/Schedule$1.class | Bin 0 -> 889 bytes .../github-repo/Others/Schedule$2.class | Bin 0 -> 1114 bytes .../github-repo/Others/Schedule.class | Bin 0 -> 4649 bytes .../Others/SieveOfEratosthenes.class | Bin 0 -> 1248 bytes .../Others/SkylineProblem$Building.class | Bin 0 -> 612 bytes .../Others/SkylineProblem$Skyline.class | Bin 0 -> 569 bytes .../github-repo/Others/SkylineProblem.class | Bin 0 -> 4275 bytes .../Others/StackPostfixNotation.class | Bin 0 -> 1817 bytes .../Others/TopKWords$CountWords.class | Bin 0 -> 2228 bytes .../github-repo/Others/TopKWords.class | Bin 0 -> 2677 bytes .../github-repo/Others/TowerOfHanoi.class | Bin 0 -> 1427 bytes out/production/github-repo/README-ko.md | 187 + out/production/github-repo/README.md | 197 + .../github-repo/Searches/BinarySearch.class | Bin 0 -> 3839 bytes .../Searches/InterpolationSearch.class | Bin 0 -> 2829 bytes .../Searches/IterativeBinarySearch.class | Bin 0 -> 3494 bytes .../Searches/IterativeTernarySearch.class | Bin 0 -> 3660 bytes .../github-repo/Searches/LinearSearch.class | Bin 0 -> 2889 bytes .../Searches/SaddlebackSearch.class | Bin 0 -> 1582 bytes .../Searches/SearchAlgorithm.class | Bin 0 -> 251 bytes .../github-repo/Searches/TernarySearch.class | Bin 0 -> 3801 bytes .../Sorts/BinaryTreeSort$Node.class | Bin 0 -> 1689 bytes .../Sorts/BinaryTreeSort$SortVisitor.class | Bin 0 -> 1213 bytes .../Sorts/BinaryTreeSort$TreeVisitor.class | Bin 0 -> 412 bytes .../github-repo/Sorts/BinaryTreeSort.class | Bin 0 -> 2177 bytes .../github-repo/Sorts/BogoSort.class | Bin 0 -> 1989 bytes .../github-repo/Sorts/BubbleSort.class | Bin 0 -> 1427 bytes .../Sorts/CocktailShakerSort.class | Bin 0 -> 1674 bytes .../github-repo/Sorts/CombSort.class | Bin 0 -> 1693 bytes .../github-repo/Sorts/CountingSort.class | Bin 0 -> 6184 bytes .../github-repo/Sorts/CycleSort.class | Bin 0 -> 2139 bytes .../github-repo/Sorts/GnomeSort.class | Bin 0 -> 1717 bytes .../github-repo/Sorts/HeapSort$Heap.class | Bin 0 -> 2181 bytes .../github-repo/Sorts/HeapSort.class | Bin 0 -> 2127 bytes .../github-repo/Sorts/InsertionSort.class | Bin 0 -> 1455 bytes .../github-repo/Sorts/MergeSort.class | Bin 0 -> 2228 bytes .../github-repo/Sorts/PancakeSort.class | Bin 0 -> 1766 bytes .../github-repo/Sorts/QuickSort.class | Bin 0 -> 2039 bytes .../github-repo/Sorts/RadixSort.class | Bin 0 -> 1808 bytes .../github-repo/Sorts/SelectionSort.class | Bin 0 -> 1531 bytes .../github-repo/Sorts/ShellSort.class | Bin 0 -> 1376 bytes .../github-repo/Sorts/SortAlgorithm.class | Bin 0 -> 891 bytes .../github-repo/Sorts/SortUtils.class | Bin 0 -> 3119 bytes out/production/github-repo/StackArray.class | Bin 0 -> 1981 bytes .../github-repo/StackArrayList.class | Bin 0 -> 1719 bytes out/production/github-repo/ciphers/AES.class | Bin 0 -> 23712 bytes .../github-repo/ciphers/AESEncryption.class | Bin 0 -> 2674 bytes .../github-repo/ciphers/Caesar.class | Bin 0 -> 2746 bytes .../ciphers/ColumnarTranspositionCipher.class | Bin 0 -> 5352 bytes out/production/github-repo/ciphers/RSA.class | Bin 0 -> 2528 bytes .../github-repo/ciphers/Vigenere.class | Bin 0 -> 1904 bytes .../Stacks/BalancedBrackets.class | Bin 0 -> 2375 bytes .../divideconquer/ClosestPair$Location.class | Bin 0 -> 507 bytes .../divideconquer/ClosestPair.class | Bin 0 -> 5809 bytes .../SkylineAlgorithm$Point.class | Bin 0 -> 1031 bytes .../SkylineAlgorithm$XComparator.class | Bin 0 -> 1168 bytes .../divideconquer/SkylineAlgorithm.class | Bin 0 -> 2695 bytes 368 files changed, 4433 insertions(+), 30902 deletions(-) delete mode 100644 Compression/bin/HEncoder$Node$Nodecomparator.class delete mode 100644 Compression/bin/HEncoder$Node.class delete mode 100644 Compression/bin/HEncoder.class delete mode 100644 Compression/bin/compressclient.class delete mode 100644 Compression/bin/genericheap.class delete mode 100644 Compression/src/HEncoder.java delete mode 100644 Compression/src/compressclient.java delete mode 100644 Compression/src/genericheap.java delete mode 100644 Conversions/OctalToBinary.java delete mode 100644 DataStructures/CSVFile/src/CSVFile.java delete mode 100644 DataStructures/CSVFile/src/TestCSVFile.java delete mode 100644 DataStructures/CSVFile/testData.csv delete mode 100644 DataStructures/CSVFile/testData2.csv delete mode 100644 DataStructures/CSVFile/testData3.csv delete mode 100644 DataStructures/CSVFile/testData4.csv delete mode 100644 DataStructures/Graphs/BFS.java delete mode 100644 DataStructures/Graphs/DFS.java delete mode 100644 DataStructures/Graphs/KruskalsAlgorithm.java delete mode 100644 DataStructures/Matrix/MatrixFastPower.java delete mode 100644 DataStructures/Trees/FindHeightOfTree.java delete mode 100644 Dynamic Programming/Edit_Distance.java delete mode 100644 Dynamic Programming/Ford_Fulkerson.java delete mode 100644 Dynamic Programming/KadaneAlgorithm.java delete mode 100644 Dynamic Programming/Knapsack.java delete mode 100644 Dynamic Programming/LongestCommonSubsequence.java rename {Dynamic Programming => DynamicProgramming}/CoinChange.java (71%) create mode 100644 DynamicProgramming/Edit_Distance.java rename {Dynamic Programming => DynamicProgramming}/EggDropping.java (93%) rename {Dynamic Programming => DynamicProgramming}/Fibonacci.java (98%) create mode 100644 DynamicProgramming/Ford_Fulkerson.java create mode 100644 DynamicProgramming/KadaneAlgorithm.java create mode 100644 DynamicProgramming/Knapsack.java rename {Dynamic Programming => DynamicProgramming}/LevenshteinDistance.java (98%) create mode 100644 DynamicProgramming/LongestCommonSubsequence.java rename {Dynamic Programming => DynamicProgramming}/LongestIncreasingSubsequence.java (96%) rename {Dynamic Programming => DynamicProgramming}/LongestValidParentheses.java (98%) rename {Dynamic Programming => DynamicProgramming}/MatrixChainMultiplication.java (99%) rename {Dynamic Programming => DynamicProgramming}/RodCutting.java (83%) rename Misc/{PalindromicPrime.java => PalindromePrime.java} (87%) rename Others/{crc32.java => CRC32.java} (98%) create mode 100644 Others/CountWords.java delete mode 100644 Others/Huffman.java create mode 100644 Others/Krishnamurthy.java delete mode 100644 Others/Node.java rename Others/{removeDuplicateFromString.java => RemoveDuplicateFromString.java} (85%) rename Others/{TowerOfHanoiUsingRecursion.java => TowerOfHanoi.java} (80%) delete mode 100644 Others/countwords.java delete mode 100644 Others/krishnamurthy.java create mode 100644 out/production/github-repo/.gitignore create mode 100644 out/production/github-repo/BellmanFord$Edge.class create mode 100644 out/production/github-repo/BellmanFord.class create mode 100644 out/production/github-repo/Conversions/AnyBaseToAnyBase.class create mode 100644 out/production/github-repo/Conversions/AnyBaseToDecimal.class create mode 100644 out/production/github-repo/Conversions/AnytoAny.class create mode 100644 out/production/github-repo/Conversions/BinaryToDecimal.class create mode 100644 out/production/github-repo/Conversions/BinaryToHexadecimal.class create mode 100644 out/production/github-repo/Conversions/BinaryToOctal.class create mode 100644 out/production/github-repo/Conversions/DecimalToAnyBase.class create mode 100644 out/production/github-repo/Conversions/DecimalToBinary.class create mode 100644 out/production/github-repo/Conversions/DecimalToHexaDecimal.class create mode 100644 out/production/github-repo/Conversions/DecimalToOctal.class create mode 100644 out/production/github-repo/Conversions/HexToOct.class create mode 100644 out/production/github-repo/Conversions/HexaDecimalToBinary.class create mode 100644 out/production/github-repo/Conversions/HexaDecimalToDecimal.class create mode 100644 out/production/github-repo/Conversions/OctalToDecimal.class create mode 100644 out/production/github-repo/Conversions/OctalToHexadecimal.class create mode 100644 out/production/github-repo/Conversions/RomanToInteger$1.class create mode 100644 out/production/github-repo/Conversions/RomanToInteger.class create mode 100644 out/production/github-repo/DataStructures/Bags/Bag$1.class create mode 100644 out/production/github-repo/DataStructures/Bags/Bag$ListIterator.class create mode 100644 out/production/github-repo/DataStructures/Bags/Bag$Node.class create mode 100644 out/production/github-repo/DataStructures/Bags/Bag.class create mode 100644 out/production/github-repo/DataStructures/Buffers/CircularBuffer$TestReadWorker.class create mode 100644 out/production/github-repo/DataStructures/Buffers/CircularBuffer$TestWriteWorker.class create mode 100644 out/production/github-repo/DataStructures/Buffers/CircularBuffer.class create mode 100644 out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph$Vertex.class create mode 100644 out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph.class create mode 100644 out/production/github-repo/DataStructures/Graphs/AdjacencyMatrixGraph.class create mode 100644 out/production/github-repo/DataStructures/Graphs/ConnectedComponent.class create mode 100644 out/production/github-repo/DataStructures/Graphs/Cycle.class create mode 100644 out/production/github-repo/DataStructures/Graphs/Cycles.class create mode 100644 out/production/github-repo/DataStructures/Graphs/FloydWarshall.class create mode 100644 out/production/github-repo/DataStructures/Graphs/Graph$Edge.class create mode 100644 out/production/github-repo/DataStructures/Graphs/Graph$Node.class create mode 100644 out/production/github-repo/DataStructures/Graphs/Graph.class create mode 100644 out/production/github-repo/DataStructures/Graphs/Graphs.class create mode 100644 out/production/github-repo/DataStructures/Graphs/MatrixGraphs.class create mode 100644 out/production/github-repo/DataStructures/Graphs/PrimMST.class create mode 100644 out/production/github-repo/DataStructures/HashMap/Hashing/HashMap.class create mode 100644 out/production/github-repo/DataStructures/HashMap/Hashing/LinkedList.class create mode 100644 out/production/github-repo/DataStructures/HashMap/Hashing/Main.class create mode 100644 out/production/github-repo/DataStructures/HashMap/Hashing/Node.class create mode 100644 out/production/github-repo/DataStructures/Heaps/EmptyHeapException.class create mode 100644 out/production/github-repo/DataStructures/Heaps/Heap.class create mode 100644 out/production/github-repo/DataStructures/Heaps/HeapElement.class create mode 100644 out/production/github-repo/DataStructures/Heaps/MaxHeap.class create mode 100644 out/production/github-repo/DataStructures/Heaps/MinHeap.class create mode 100644 out/production/github-repo/DataStructures/Heaps/MinPriorityQueue.class create mode 100644 out/production/github-repo/DataStructures/Lists/CircleLinkedList$1.class create mode 100644 out/production/github-repo/DataStructures/Lists/CircleLinkedList$Node.class create mode 100644 out/production/github-repo/DataStructures/Lists/CircleLinkedList.class create mode 100644 out/production/github-repo/DataStructures/Lists/CursorLinkedList$Node.class create mode 100644 out/production/github-repo/DataStructures/Lists/CursorLinkedList.class create mode 100644 out/production/github-repo/DataStructures/Lists/DoublyLinkedList.class create mode 100644 out/production/github-repo/DataStructures/Lists/Link.class create mode 100644 out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist$Node.class create mode 100644 out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist.class create mode 100644 out/production/github-repo/DataStructures/Lists/Node.class create mode 100644 out/production/github-repo/DataStructures/Lists/SinglyLinkedList.class create mode 100644 out/production/github-repo/DataStructures/Matrix/Matrix.class create mode 100644 out/production/github-repo/DataStructures/Queues/GenericArrayListQueue.class create mode 100644 out/production/github-repo/DataStructures/Queues/PriorityQueue.class create mode 100644 out/production/github-repo/DataStructures/Queues/PriorityQueues.class create mode 100644 out/production/github-repo/DataStructures/Queues/Queue.class create mode 100644 out/production/github-repo/DataStructures/Queues/Queues.class create mode 100644 out/production/github-repo/DataStructures/Stacks/LinkedListStack.class create mode 100644 out/production/github-repo/DataStructures/Stacks/Node.class create mode 100644 out/production/github-repo/DataStructures/Stacks/StackOfLinkedList.class create mode 100644 out/production/github-repo/DataStructures/Trees/AVLTree$Node.class create mode 100644 out/production/github-repo/DataStructures/Trees/AVLTree.class create mode 100644 out/production/github-repo/DataStructures/Trees/BinaryTree$Node.class create mode 100644 out/production/github-repo/DataStructures/Trees/BinaryTree.class create mode 100644 out/production/github-repo/DataStructures/Trees/GenericTree$1.class create mode 100644 out/production/github-repo/DataStructures/Trees/GenericTree$Node.class create mode 100644 out/production/github-repo/DataStructures/Trees/GenericTree.class create mode 100644 out/production/github-repo/DataStructures/Trees/LevelOrderTraversal$Node.class create mode 100644 out/production/github-repo/DataStructures/Trees/LevelOrderTraversal.class create mode 100644 out/production/github-repo/DataStructures/Trees/LevelOrderTraversalQueue$Node.class create mode 100644 out/production/github-repo/DataStructures/Trees/LevelOrderTraversalQueue.class create mode 100644 out/production/github-repo/DataStructures/Trees/Node.class create mode 100644 out/production/github-repo/DataStructures/Trees/PrintTopViewofTree.class create mode 100644 out/production/github-repo/DataStructures/Trees/QItem.class create mode 100644 out/production/github-repo/DataStructures/Trees/RedBlackBST$Node.class create mode 100644 out/production/github-repo/DataStructures/Trees/RedBlackBST.class create mode 100644 out/production/github-repo/DataStructures/Trees/Tree.class create mode 100644 out/production/github-repo/DataStructures/Trees/TreeNode.class create mode 100644 out/production/github-repo/DataStructures/Trees/TreeTraversal.class create mode 100644 out/production/github-repo/DataStructures/Trees/TrieImp$TrieNode.class create mode 100644 out/production/github-repo/DataStructures/Trees/TrieImp.class create mode 100644 out/production/github-repo/DataStructures/Trees/ValidBSTOrNot$Node.class create mode 100644 out/production/github-repo/DataStructures/Trees/ValidBSTOrNot.class create mode 100644 out/production/github-repo/DynamicProgramming/CoinChange.class create mode 100644 out/production/github-repo/DynamicProgramming/Edit_Distance.class create mode 100644 out/production/github-repo/DynamicProgramming/EggDropping.class create mode 100644 out/production/github-repo/DynamicProgramming/Fibonacci.class create mode 100644 out/production/github-repo/DynamicProgramming/Ford_Fulkerson.class create mode 100644 out/production/github-repo/DynamicProgramming/KadaneAlgorithm.class create mode 100644 out/production/github-repo/DynamicProgramming/Knapsack.class create mode 100644 out/production/github-repo/DynamicProgramming/LevenshteinDistance.class create mode 100644 out/production/github-repo/DynamicProgramming/LongestCommonSubsequence.class create mode 100644 out/production/github-repo/DynamicProgramming/LongestIncreasingSubsequence.class create mode 100644 out/production/github-repo/DynamicProgramming/LongestValidParentheses.class create mode 100644 out/production/github-repo/DynamicProgramming/Matrix.class create mode 100644 out/production/github-repo/DynamicProgramming/MatrixChainMultiplication.class create mode 100644 out/production/github-repo/DynamicProgramming/RodCutting.class create mode 100644 out/production/github-repo/MinimizingLateness/MinimizingLateness$Schedule.class create mode 100644 out/production/github-repo/MinimizingLateness/MinimizingLateness.class create mode 100644 out/production/github-repo/MinimizingLateness/data06_lateness.txt create mode 100644 out/production/github-repo/Misc/MedianOfRunningArray.class create mode 100644 out/production/github-repo/Misc/PalindromePrime.class create mode 100644 out/production/github-repo/Misc/heap_sort.class create mode 100644 out/production/github-repo/NodeStack.class create mode 100644 out/production/github-repo/Others/Abecedarian.class create mode 100644 out/production/github-repo/Others/Armstrong.class create mode 100644 out/production/github-repo/Others/BrianKernighanAlgorithm.class create mode 100644 out/production/github-repo/Others/CRC32.class create mode 100644 out/production/github-repo/Others/CRCAlgorithm.class create mode 100644 out/production/github-repo/Others/CountChar.class create mode 100644 out/production/github-repo/Others/CountWords.class create mode 100644 out/production/github-repo/Others/Dijkshtra.class create mode 100644 out/production/github-repo/Others/Dijkstra.class create mode 100644 out/production/github-repo/Others/EulersFunction.class create mode 100644 out/production/github-repo/Others/Factorial.class create mode 100644 out/production/github-repo/Others/FibToN.class create mode 100644 out/production/github-repo/Others/FloydTriangle.class create mode 100644 out/production/github-repo/Others/GCD.class create mode 100644 out/production/github-repo/Others/Graph$Edge.class create mode 100644 out/production/github-repo/Others/Graph$Vertex.class create mode 100644 out/production/github-repo/Others/Graph.class create mode 100644 out/production/github-repo/Others/GuassLegendre.class create mode 100644 out/production/github-repo/Others/InsertDeleteInArray.class create mode 100644 out/production/github-repo/Others/KMP.class create mode 100644 out/production/github-repo/Others/Krishnamurthy.class create mode 100644 out/production/github-repo/Others/LinearCongruentialGenerator.class create mode 100644 out/production/github-repo/Others/LowestBasePalindrome.class create mode 100644 out/production/github-repo/Others/Palindrome.class create mode 100644 out/production/github-repo/Others/PasswordGen.class create mode 100644 out/production/github-repo/Others/PerlinNoise.class create mode 100644 out/production/github-repo/Others/PowerOfTwoOrNot.class create mode 100644 out/production/github-repo/Others/Process.class create mode 100644 out/production/github-repo/Others/QueueUsingTwoStacks.class create mode 100644 out/production/github-repo/Others/QueueWithStack.class create mode 100644 out/production/github-repo/Others/RemoveDuplicateFromString.class create mode 100644 out/production/github-repo/Others/ReturnSubsequence.class create mode 100644 out/production/github-repo/Others/ReverseStackUsingRecursion.class create mode 100644 out/production/github-repo/Others/ReverseString.class create mode 100644 out/production/github-repo/Others/RootPrecision.class create mode 100644 out/production/github-repo/Others/SJF.class create mode 100644 out/production/github-repo/Others/Schedule$1.class create mode 100644 out/production/github-repo/Others/Schedule$2.class create mode 100644 out/production/github-repo/Others/Schedule.class create mode 100644 out/production/github-repo/Others/SieveOfEratosthenes.class create mode 100644 out/production/github-repo/Others/SkylineProblem$Building.class create mode 100644 out/production/github-repo/Others/SkylineProblem$Skyline.class create mode 100644 out/production/github-repo/Others/SkylineProblem.class create mode 100644 out/production/github-repo/Others/StackPostfixNotation.class create mode 100644 out/production/github-repo/Others/TopKWords$CountWords.class create mode 100644 out/production/github-repo/Others/TopKWords.class create mode 100644 out/production/github-repo/Others/TowerOfHanoi.class create mode 100644 out/production/github-repo/README-ko.md create mode 100644 out/production/github-repo/README.md create mode 100644 out/production/github-repo/Searches/BinarySearch.class create mode 100644 out/production/github-repo/Searches/InterpolationSearch.class create mode 100644 out/production/github-repo/Searches/IterativeBinarySearch.class create mode 100644 out/production/github-repo/Searches/IterativeTernarySearch.class create mode 100644 out/production/github-repo/Searches/LinearSearch.class create mode 100644 out/production/github-repo/Searches/SaddlebackSearch.class create mode 100644 out/production/github-repo/Searches/SearchAlgorithm.class create mode 100644 out/production/github-repo/Searches/TernarySearch.class create mode 100644 out/production/github-repo/Sorts/BinaryTreeSort$Node.class create mode 100644 out/production/github-repo/Sorts/BinaryTreeSort$SortVisitor.class create mode 100644 out/production/github-repo/Sorts/BinaryTreeSort$TreeVisitor.class create mode 100644 out/production/github-repo/Sorts/BinaryTreeSort.class create mode 100644 out/production/github-repo/Sorts/BogoSort.class create mode 100644 out/production/github-repo/Sorts/BubbleSort.class create mode 100644 out/production/github-repo/Sorts/CocktailShakerSort.class create mode 100644 out/production/github-repo/Sorts/CombSort.class create mode 100644 out/production/github-repo/Sorts/CountingSort.class create mode 100644 out/production/github-repo/Sorts/CycleSort.class create mode 100644 out/production/github-repo/Sorts/GnomeSort.class create mode 100644 out/production/github-repo/Sorts/HeapSort$Heap.class create mode 100644 out/production/github-repo/Sorts/HeapSort.class create mode 100644 out/production/github-repo/Sorts/InsertionSort.class create mode 100644 out/production/github-repo/Sorts/MergeSort.class create mode 100644 out/production/github-repo/Sorts/PancakeSort.class create mode 100644 out/production/github-repo/Sorts/QuickSort.class create mode 100644 out/production/github-repo/Sorts/RadixSort.class create mode 100644 out/production/github-repo/Sorts/SelectionSort.class create mode 100644 out/production/github-repo/Sorts/ShellSort.class create mode 100644 out/production/github-repo/Sorts/SortAlgorithm.class create mode 100644 out/production/github-repo/Sorts/SortUtils.class create mode 100644 out/production/github-repo/StackArray.class create mode 100644 out/production/github-repo/StackArrayList.class create mode 100644 out/production/github-repo/ciphers/AES.class create mode 100644 out/production/github-repo/ciphers/AESEncryption.class create mode 100644 out/production/github-repo/ciphers/Caesar.class create mode 100644 out/production/github-repo/ciphers/ColumnarTranspositionCipher.class create mode 100644 out/production/github-repo/ciphers/RSA.class create mode 100644 out/production/github-repo/ciphers/Vigenere.class create mode 100644 out/production/github-repo/data_structures/Stacks/BalancedBrackets.class create mode 100644 out/production/github-repo/divideconquer/ClosestPair$Location.class create mode 100644 out/production/github-repo/divideconquer/ClosestPair.class create mode 100644 out/production/github-repo/divideconquer/SkylineAlgorithm$Point.class create mode 100644 out/production/github-repo/divideconquer/SkylineAlgorithm$XComparator.class create mode 100644 out/production/github-repo/divideconquer/SkylineAlgorithm.class diff --git a/Compression/bin/HEncoder$Node$Nodecomparator.class b/Compression/bin/HEncoder$Node$Nodecomparator.class deleted file mode 100644 index 132ac19ff6cac8f89e2f9c0e4fbdab3088d97268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 859 zcmaJfgc5PjpMapO9z6Bo)yDJ?BDUnK%@L8&UC2!y35Jrw1>ahKGUYs1FoS8=IS z6^R4l%#T9M+Wkr*aoBk?v$JpC?9QLRKYsyugFO=lVg2L#$d8Yu+8MCTj31wU5lSSn zGEpQrr{bIFgd!Su4o9cbPfU~ut64Tpg0R!OsV9{7gD6N22!(oMNGSH0)ItGEHcTuM zR{B9C2kF^Js!w7RNi@v&8($*;Tr$oy>cV7a8uN S&RAm^E*fY-f0K(g%KrfHwzif4 diff --git a/Compression/bin/HEncoder$Node.class b/Compression/bin/HEncoder$Node.class deleted file mode 100644 index 9fcce4c5042a2435e9f72adbb12ab07fb091644d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 683 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 w!`&GU=IhoBM_jL7gKtp(*OVf diff --git a/Compression/bin/genericheap.class b/Compression/bin/genericheap.class deleted file mode 100644 index 16c2d03aa1029eb85be2e4cf7fee29187320d1b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2858 zcma)8TT@e46#h2nyd zPQfX=nQh1BfoY&;$9`tdqNU?8PTyHz(gbGcl$_fl@9x?mub zcDD+4b+_yoIML2$acym3iH>HbS}YrgH2GX9=1X?j<~i-rwuaj6jzzcNR+kJ6#oGEU z#McdswzugR;$U7WW}Pnham<2+UIYGEd_9PM1AT4Sb)gT(LNG9BA%G594Os}G%fQi; zTX1ge<~N=4n!TAL_uf=7W9QcGvMYP<(5!B|6$3|7O?4*K$YI~TQq8}&*|A35thiq? z0imu6qBksz;go@(TS?|i)jef-D3%EeXK`-B|L*s2H^WHx8ZVITGCHfT;qKFlH! z-nVcCR}FN!m6Tmp{(;!)YFvfCX5l(k7_#!YT{55y4DHLf28>lMN?aUCSMAKxn|4Vl zDY$Q0xQ#o^vE@k3h^G}n827LiMA|@qqn{dGZs9(JL`L;JHJxZvwAQF`f-(f$4zs(} zZGLyE+k)vM3m@YX?kj?6BDUJ*a_bQ}lfw$R^vBwekdnk%NS3ecG>IN`}prb;s8B~-_ZBq z00S=(Nld=P@fS4saf07onEZzM?c_BJ{R|Z4Nkm`9Fh;mz7%%DQA=}BiO+Xkjv;0c> zt7;E)CVoa_AE%%5OlK4-K#$5|sdcB9MPfHjB(@>5&TpHD(cztn^S*;BX66Inhur@E511!JL9z^fVZh=#%?+XCvX2!^|FFzLBh( zj$oh=s~y2;lLCWYLSPU}c#n7+3W!ZBAhu=NeDbDv?7n79i8>bj7UqknnGNJFC8EOz zxcm*e)gqbTPN6VWFN~@NI>lZ%&6YdEt~kqn7^iK5dEyGyn2uRTHHKAuz>Hyb$PKQ1 z3ZGVS%)^%=3jPuY{>G3%%JEqWidcOBTai%$r;tpBgfM!CgPTL%@9Q z7r`~qh`M!-<(lHmP805V!ktwBXLZCnz;SFSfXspq6+kKS1D4XyyM1`bm8n2$YU3Vg z?X_I@TBer}VWa encoder = new HashMap<>(); // in order to encode - public HashMap decoder = new HashMap<>(); // in order to decode - - private static class Node { - - Character ch; - Integer freq; - Node left; - Node right; - - public static final Nodecomparator Ctor = new Nodecomparator(); - - public static class Nodecomparator implements Comparator { - - @Override - public int compare(Node o1, Node o2) { - return o2.freq - o1.freq; - } - - } - } - - public HEncoder(String feeder) { - // 1. freq map - HashMap freqmap = new HashMap<>(); - for (int i = 0; i < feeder.length(); ++i) { - char ch = feeder.charAt(i); - if (freqmap.containsKey(ch)) { - freqmap.put(ch, freqmap.get(ch) + 1); - } else { - freqmap.put(ch, 1); - } - } - - // 2. prepare the heap from keyset - genericheap heap = new genericheap(Node.Ctor); - ArrayList k = new ArrayList<>(freqmap.keySet()); - for (Character c : k) { - Node n = new Node(); - n.ch = c; - n.left = null; - n.right = null; - n.freq = freqmap.get(c); - heap.add(n); - } - - // 3.Prepare tree, remove two , merge, add it back - Node fn = new Node(); - while (heap.size() != 1) { - Node n1 = heap.removeHP(); - Node n2 = heap.removeHP(); - fn = new Node(); - - fn.freq = n1.freq + n2.freq; - fn.left = n1; - fn.right = n2; - - heap.add(fn); - } - - // 4. traverse - - traverse(heap.removeHP(), ""); - } - - private void traverse(Node node, String osf) { - - if (node.left == null && node.right == null) { - encoder.put(node.ch, osf); - decoder.put(osf, node.ch); - return; - } - traverse(node.left, osf + "0"); - traverse(node.right, osf + "1"); - - } - - // compression work done here - public String compress(String str) { - String rv = ""; - for (int i = 0; i < str.length(); ++i) { - rv += encoder.get(str.charAt(i)); - } - return rv; - } - - - //in order to decompress - public String decompress(String str) { - String s = ""; - String code = ""; - for (int i = 0; i < str.length(); ++i) { - code += str.charAt(i); - if (decoder.containsKey(code)) { - s += decoder.get(code); - code = ""; - } - } - - return s; - } -} diff --git a/Compression/src/compressclient.java b/Compression/src/compressclient.java deleted file mode 100644 index 496c8a849c82..000000000000 --- a/Compression/src/compressclient.java +++ /dev/null @@ -1,11 +0,0 @@ - -public class compressclient { - - public static void main(String[] args) { - - HEncoder h= new HEncoder("aaaabbbcccccccccccdddd"); - System.out.println(h.compress("aabccd")); - System.out.println(h.decompress("101011000111")); - } - -} diff --git a/Compression/src/genericheap.java b/Compression/src/genericheap.java deleted file mode 100644 index de00316f0d53..000000000000 --- a/Compression/src/genericheap.java +++ /dev/null @@ -1,93 +0,0 @@ - - -import java.util.ArrayList; -import java.util.Comparator; - -public class genericheap { // create a generic heap class , where T can be of any type. - - private ArrayList data = new ArrayList<>(); - private Comparator ctor; - - public genericheap(Comparator ctor) { // constructor to initialize the generic comparator - this.ctor=ctor; - } - - public int size() { // returns the size of the arraylist data - return data.size(); - } - - public boolean isEmpty() { // checks whether the list is empty or not :: return true or false for the same - return data.isEmpty(); - } - - public void display() { //displays the list - System.out.println(this.data); - } - - public void add(T integer) { // in this function we have added the type object into the arraylist and called upheapify - data.add(integer); - upheapify(data.size() - 1); - } - - private void upheapify(int ci) { - if (ci == 0) { - return; - } - int pi = (ci - 1) / 2; - if (isLarger(ci,pi) == true) { - swap(ci, pi); - upheapify(pi); - } - } - - private boolean isLarger(int i, int j) { - T ith = data.get(i); - T jth = data.get(j); - if(ctor.compare(ith,jth)>0) - { - return true; - } - else - { - return false; - } - } - - private void swap(int ci, int pi) { // swap function written like this because of the generic property - T ith = data.get(ci); - T jth=data.get(pi); - data.set(ci, jth); - data.set(pi, ith); - } - - public T getHP() { - return data.get(0); - } - - public T removeHP() { - - swap(0, data.size() - 1); - T rv=data.remove(data.size()-1); - downheapify(0); - return rv; - } - - private void downheapify(int pi) { - int lci = 2 * pi + 1; - int rci = 2 * pi + 2; - - int max = pi; - - if (lci < data.size() && isLarger(lci, max) == true) { - max = lci; - } - if (rci < data.size() && isLarger(rci, max) == true) { - max = rci; - } - if (max != pi) { - swap(pi, max); - downheapify(max); - } - } - -} diff --git a/Conversions/AnyBaseToAnyBase.java b/Conversions/AnyBaseToAnyBase.java index 33c77975cb14..9436fbfac6d8 100644 --- a/Conversions/AnyBaseToAnyBase.java +++ b/Conversions/AnyBaseToAnyBase.java @@ -1,3 +1,5 @@ +package Conversions; + import java.util.Arrays; import java.util.HashSet; import java.util.InputMismatchException; @@ -5,126 +7,126 @@ /** * Class for converting from "any" base to "any" other base, when "any" means from 2-36. - * Works by going from base 1 to decimal to base 2. Includes auxiliary method for + * Works by going from base 1 to decimal to base 2. Includes auxiliary method for * determining whether a number is valid for a given base. - * + * * @author Michael Rolland * @version 2017.10.10 - * */ public class AnyBaseToAnyBase { - - // Smallest and largest base you want to accept as valid input - static final int MINIMUM_BASE = 2; - static final int MAXIMUM_BASE = 36; - - // Driver - public static void main(String[] args) { - Scanner in = new Scanner(System.in); - String n; - int b1=0,b2=0; - while (true) { - try { - System.out.print("Enter number: "); - n = in.next(); - System.out.print("Enter beginning base (between "+MINIMUM_BASE+" and "+MAXIMUM_BASE+"): "); - b1 = in.nextInt(); - if (b1 > MAXIMUM_BASE || b1 < MINIMUM_BASE) { - System.out.println("Invalid base!"); - continue; - } - if (!validForBase(n, b1)) { - System.out.println("The number is invalid for this base!"); - continue; - } - System.out.print("Enter end base (between "+MINIMUM_BASE+" and "+MAXIMUM_BASE+"): "); - b2 = in.nextInt(); - if (b2 > MAXIMUM_BASE || b2 < MINIMUM_BASE) { - System.out.println("Invalid base!"); - continue; - } - break; - } catch (InputMismatchException e) { - System.out.println("Invalid input."); - in.next(); - } - } - System.out.println(base2base(n, b1, b2)); - } - - /** - * Checks if a number (as a String) is valid for a given base. - */ - public static boolean validForBase(String n, int base) { - char[] validDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', - 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', - 'W', 'X', 'Y', 'Z'}; - // digitsForBase contains all the valid digits for the base given - char[] digitsForBase = Arrays.copyOfRange(validDigits, 0, base); - - // Convert character array into set for convenience of contains() method - HashSet digitsList = new HashSet(); - for (int i=0; i9 and store it in charB2 - if (charB1 >= 'A' && charB1 <= 'Z') - charB2 = 10 + (charB1 - 'A'); - // Else, store the integer value in charB2 - else - charB2 = charB1 - '0'; - // Convert the digit to decimal and add it to the - // decimalValue of n - decimalValue = decimalValue * b1 + charB2; - } - - // Converting the decimal value to base b2: - // A number is converted from decimal to another base - // by continuously dividing by the base and recording - // the remainder until the quotient is zero. The number in the - // new base is the remainders, with the last remainder - // being the left-most digit. - - // While the quotient is NOT zero: - while (decimalValue != 0) { - // If the remainder is a digit < 10, simply add it to - // the left side of the new number. - if (decimalValue % b2 < 10) - output = Integer.toString(decimalValue % b2) + output; - // If the remainder is >= 10, add a character with the - // corresponding value to the new number. (A = 10, B = 11, C = 12, ...) - else - output = (char)((decimalValue % b2)+55) + output; - // Divide by the new base again - decimalValue /= b2; - } - return output; - } + + // Smallest and largest base you want to accept as valid input + static final int MINIMUM_BASE = 2; + static final int MAXIMUM_BASE = 36; + + // Driver + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + String n; + int b1 = 0, b2 = 0; + while (true) { + try { + System.out.print("Enter number: "); + n = in.next(); + System.out.print("Enter beginning base (between " + MINIMUM_BASE + " and " + MAXIMUM_BASE + "): "); + b1 = in.nextInt(); + if (b1 > MAXIMUM_BASE || b1 < MINIMUM_BASE) { + System.out.println("Invalid base!"); + continue; + } + if (!validForBase(n, b1)) { + System.out.println("The number is invalid for this base!"); + continue; + } + System.out.print("Enter end base (between " + MINIMUM_BASE + " and " + MAXIMUM_BASE + "): "); + b2 = in.nextInt(); + if (b2 > MAXIMUM_BASE || b2 < MINIMUM_BASE) { + System.out.println("Invalid base!"); + continue; + } + break; + } catch (InputMismatchException e) { + System.out.println("Invalid input."); + in.next(); + } + } + System.out.println(base2base(n, b1, b2)); + } + + /** + * Checks if a number (as a String) is valid for a given base. + */ + public static boolean validForBase(String n, int base) { + char[] validDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', + 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z'}; + // digitsForBase contains all the valid digits for the base given + char[] digitsForBase = Arrays.copyOfRange(validDigits, 0, base); + + // Convert character array into set for convenience of contains() method + HashSet digitsList = new HashSet(); + for (int i = 0; i < digitsForBase.length; i++) + digitsList.add(digitsForBase[i]); + + // Check that every digit in n is within the list of valid digits for that base. + for (char c : n.toCharArray()) + if (!digitsList.contains(c)) + return false; + + return true; + } + + /** + * Method to convert any integer from base b1 to base b2. Works by converting from b1 to decimal, + * then decimal to b2. + * + * @param n The integer to be converted. + * @param b1 Beginning base. + * @param b2 End base. + * @return n in base b2. + */ + public static String base2base(String n, int b1, int b2) { + // Declare variables: decimal value of n, + // character of base b1, character of base b2, + // and the string that will be returned. + int decimalValue = 0, charB2; + char charB1; + String output = ""; + // Go through every character of n + for (int i = 0; i < n.length(); i++) { + // store the character in charB1 + charB1 = n.charAt(i); + // if it is a non-number, convert it to a decimal value >9 and store it in charB2 + if (charB1 >= 'A' && charB1 <= 'Z') + charB2 = 10 + (charB1 - 'A'); + // Else, store the integer value in charB2 + else + charB2 = charB1 - '0'; + // Convert the digit to decimal and add it to the + // decimalValue of n + decimalValue = decimalValue * b1 + charB2; + } + + // Converting the decimal value to base b2: + // A number is converted from decimal to another base + // by continuously dividing by the base and recording + // the remainder until the quotient is zero. The number in the + // new base is the remainders, with the last remainder + // being the left-most digit. + + // While the quotient is NOT zero: + while (decimalValue != 0) { + // If the remainder is a digit < 10, simply add it to + // the left side of the new number. + if (decimalValue % b2 < 10) + output = Integer.toString(decimalValue % b2) + output; + // If the remainder is >= 10, add a character with the + // corresponding value to the new number. (A = 10, B = 11, C = 12, ...) + else + output = (char) ((decimalValue % b2) + 55) + output; + // Divide by the new base again + decimalValue /= b2; + } + return output; + } } diff --git a/Conversions/AnyBaseToDecimal.java b/Conversions/AnyBaseToDecimal.java index 5e04bcf18218..46451bb86184 100644 --- a/Conversions/AnyBaseToDecimal.java +++ b/Conversions/AnyBaseToDecimal.java @@ -1,3 +1,5 @@ +package Conversions; + import java.io.BufferedReader; import java.io.InputStreamReader; diff --git a/Conversions/AnytoAny.java b/Conversions/AnytoAny.java index a86e2d042059..5fc744a9936c 100644 --- a/Conversions/AnytoAny.java +++ b/Conversions/AnytoAny.java @@ -1,4 +1,4 @@ -package Java.Conversions; +package Conversions; import java.util.Scanner; //given a source number , source base, destination base, this code can give you the destination number. diff --git a/Conversions/BinaryToDecimal.java b/Conversions/BinaryToDecimal.java index 9e5494eebd85..91f1b7bc2fed 100644 --- a/Conversions/BinaryToDecimal.java +++ b/Conversions/BinaryToDecimal.java @@ -1,33 +1,30 @@ +package Conversions; + import java.util.Scanner; /** * This class converts a Binary number to a Decimal number - * - * @author Unknown * */ -class BinaryToDecimal -{ - - /** - * Main Method - * - * @param args Command line arguments - */ - public static void main(String args[]) - { - Scanner sc=new Scanner(System.in); - int n,k,d,s=0,c=0; - System.out.print("Binary number: "); - n=sc.nextInt(); - k=n; - while(k!=0) - { - d=k%10; - s+=d*(int)Math.pow(2,c++); - k/=10; +class BinaryToDecimal { + + /** + * Main Method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + int n, k, d, s = 0, c = 0; + System.out.print("Binary number: "); + n = sc.nextInt(); + k = n; + while (k != 0) { + d = k % 10; + s += d * (int) Math.pow(2, c++); + k /= 10; + } + System.out.println("Decimal equivalent:" + s); + sc.close(); } - System.out.println("Decimal equivalent:"+s); - sc.close(); - } } diff --git a/Conversions/BinaryToHexadecimal.java b/Conversions/BinaryToHexadecimal.java index a71d129501d3..d923c1d8041d 100644 --- a/Conversions/BinaryToHexadecimal.java +++ b/Conversions/BinaryToHexadecimal.java @@ -1,57 +1,55 @@ +package Conversions; + import java.util.*; + /** * Converts any Binary Number to a Hexadecimal Number - * - * @author Nishita Aggarwal * + * @author Nishita Aggarwal */ public class BinaryToHexadecimal { - - /** - * This method converts a binary number to - * a hexadecimal number. - * - * @param binary The binary number - * @return The hexadecimal number - */ - static String binToHex(int binary) - { - //hm to store hexadecimal codes for binary numbers within the range: 0000 to 1111 i.e. for decimal numbers 0 to 15 - HashMap hm=new HashMap<>(); - //String to store hexadecimal code - String hex=""; - int i; - for(i=0 ; i<10 ; i++) - { - hm.put(i, String.valueOf(i)); - } - for(i=10 ; i<16 ; i++) hm.put(i,String.valueOf((char)('A'+i-10))); - int currbit; - while(binary != 0) - { - int code4 = 0; //to store decimal equivalent of number formed by 4 decimal digits - for(i=0 ; i<4 ; i++) - { - currbit = binary % 10; - binary = binary / 10; - code4 += currbit * Math.pow(2, i); - } - hex= hm.get(code4) + hex; - } - return hex; - } - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - System.out.println("Enter binary number:"); - int binary = sc.nextInt(); - String hex = binToHex(binary); - System.out.println("Hexadecimal Code:" + hex); - sc.close(); - } + + /** + * This method converts a binary number to + * a hexadecimal number. + * + * @param binary The binary number + * @return The hexadecimal number + */ + static String binToHex(int binary) { + //hm to store hexadecimal codes for binary numbers within the range: 0000 to 1111 i.e. for decimal numbers 0 to 15 + HashMap hm = new HashMap<>(); + //String to store hexadecimal code + String hex = ""; + int i; + for (i = 0; i < 10; i++) { + hm.put(i, String.valueOf(i)); + } + for (i = 10; i < 16; i++) hm.put(i, String.valueOf((char) ('A' + i - 10))); + int currbit; + while (binary != 0) { + int code4 = 0; //to store decimal equivalent of number formed by 4 decimal digits + for (i = 0; i < 4; i++) { + currbit = binary % 10; + binary = binary / 10; + code4 += currbit * Math.pow(2, i); + } + hex = hm.get(code4) + hex; + } + return hex; + } + + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.println("Enter binary number:"); + int binary = sc.nextInt(); + String hex = binToHex(binary); + System.out.println("Hexadecimal Code:" + hex); + sc.close(); + } } diff --git a/Conversions/BinaryToOctal.java b/Conversions/BinaryToOctal.java index cb04fe54be5a..146b82e23b6a 100644 --- a/Conversions/BinaryToOctal.java +++ b/Conversions/BinaryToOctal.java @@ -1,43 +1,43 @@ +package Conversions; + import java.util.Scanner; /** * Converts any Binary number to an Octal Number - * - * @author Zachary Jones * + * @author Zachary Jones */ public class BinaryToOctal { - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - int b = sc.nextInt(); - System.out.println("Octal equivalent: " + convertBinaryToOctal(b)); - sc.close(); - - } - - /** - * This method converts a binary number to - * an octal number. - * - * @param b The binary number - * @return The octal number - */ - public static int convertBinaryToOctal(int b) { - int o = 0, r=0, j =1 ; - while(b!=0) - { - r = b % 10; - o = o + r * j; - j = j * 2; - b = b / 10; - } - return o; - } + + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + int b = sc.nextInt(); + System.out.println("Octal equivalent: " + convertBinaryToOctal(b)); + sc.close(); + + } + + /** + * This method converts a binary number to + * an octal number. + * + * @param b The binary number + * @return The octal number + */ + public static int convertBinaryToOctal(int b) { + int o = 0, r = 0, j = 1; + while (b != 0) { + r = b % 10; + o = o + r * j; + j = j * 2; + b = b / 10; + } + return o; + } } diff --git a/Conversions/DecimalToAnyBase.java b/Conversions/DecimalToAnyBase.java index d3927ff8d9e2..4b23fc6bbef3 100644 --- a/Conversions/DecimalToAnyBase.java +++ b/Conversions/DecimalToAnyBase.java @@ -1,3 +1,5 @@ +package Conversions; + import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; diff --git a/Conversions/DecimalToBinary.java b/Conversions/DecimalToBinary.java index 176d27e03fe4..2c8d3218fdfe 100644 --- a/Conversions/DecimalToBinary.java +++ b/Conversions/DecimalToBinary.java @@ -1,16 +1,17 @@ +package Conversions; + import java.util.Scanner; /** * This class converts a Decimal number to a Binary number - * - * @author Unknown * + * @author Unknown */ class DecimalToBinary { /** * Main Method - * + * * @param args Command Line Arguments */ public static void main(String args[]) { @@ -19,7 +20,7 @@ public static void main(String args[]) { } /** - * This method converts a decimal number + * This method converts a decimal number * to a binary number using a conventional * algorithm. */ @@ -37,7 +38,7 @@ public static void conventionalConversion() { } /** - * This method converts a decimal number + * This method converts a decimal number * to a binary number using a bitwise * algorithm */ diff --git a/Conversions/DecimalToHexaDecimal.java b/Conversions/DecimalToHexaDecimal.java index 251d10c32cdf..c9c4e434417c 100644 --- a/Conversions/DecimalToHexaDecimal.java +++ b/Conversions/DecimalToHexaDecimal.java @@ -1,3 +1,4 @@ +package Conversions; class DecimalToHexaDecimal { private static final int sizeOfIntInHalfBytes = 8; diff --git a/Conversions/DecimalToOctal.java b/Conversions/DecimalToOctal.java index 1efa00f8b938..017ab33321b5 100644 --- a/Conversions/DecimalToOctal.java +++ b/Conversions/DecimalToOctal.java @@ -1,33 +1,31 @@ +package Conversions; + import java.util.Scanner; /** * This class converts Decimal numbers to Octal Numbers - * - * @author Unknown * + * @author Unknown */ -class Decimal_Octal -{ - /** - * Main Method - * - * @param args Command line Arguments - */ - public static void main(String[] args) - { - Scanner sc=new Scanner(System.in); - int n,k,d,s=0,c=0; - System.out.print("Decimal number: "); - n=sc.nextInt(); - k=n; - while(k!=0) - { - d=k%8; - s+=d*(int)Math.pow(10,c++); - k/=8; +public class DecimalToOctal { + /** + * Main Method + * + * @param args Command line Arguments + */ + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int n, k, d, s = 0, c = 0; + System.out.print("Decimal number: "); + n = sc.nextInt(); + k = n; + while (k != 0) { + d = k % 8; + s += d * (int) Math.pow(10, c++); + k /= 8; + } + + System.out.println("Octal equivalent:" + s); + sc.close(); } - - System.out.println("Octal equivalent:"+s); - sc.close(); - } } diff --git a/Conversions/HexToOct.java b/Conversions/HexToOct.java index d00b0a90ebb2..a46debfe9992 100644 --- a/Conversions/HexToOct.java +++ b/Conversions/HexToOct.java @@ -1,74 +1,70 @@ -/** - + * Converts any Hexadecimal Number to Octal - + * - + * @author Tanmay Joshi - + * - + */ +package Conversions; + import java.util.Scanner; -public class HexToOct -{ - /** - + * This method converts a Hexadecimal number to - + * a decimal number - + * - + * @param The Hexadecimal Number - + * @return The Decimal number - + */ - public static int hex2decimal(String s) - { - String str = "0123456789ABCDEF"; - s = s.toUpperCase(); - int val = 0; - for (int i = 0; i < s.length(); i++) - { - char a = s.charAt(i); - int n = str.indexOf(a); - val = 16*val + n; - } - return val; - } - - /** - + * This method converts a Decimal number to - + * a octal number - + * - + * @param The Decimal Number - + * @return The Octal number - + */ - public static int decimal2octal(int q) - { - int now; - int i=1; - int octnum=0; - while(q>0) - { - now=q%8; - octnum=(now*(int)(Math.pow(10,i)))+octnum; - q/=8; - i++; - } - octnum/=10; - return octnum; - } - // Main method that gets the hex input from user and converts it into octal. - public static void main(String args[]) - { +/** + * Converts any Hexadecimal Number to Octal + * + * @author Tanmay Joshi + */ +public class HexToOct { + /** + * This method converts a Hexadecimal number to a decimal number + * + * @param s The Hexadecimal Number + * @return The Decimal number + */ + public static int hex2decimal(String s) { + String str = "0123456789ABCDEF"; + s = s.toUpperCase(); + int val = 0; + for (int i = 0; i < s.length(); i++) { + char a = s.charAt(i); + int n = str.indexOf(a); + val = 16 * val + n; + } + return val; + } + + /** + * This method converts a Decimal number to a octal number + * + * @param q The Decimal Number + * @return The Octal number + */ + public static int decimal2octal(int q) { + int now; + int i = 1; + int octnum = 0; + while (q > 0) { + now = q % 8; + octnum = (now * (int) (Math.pow(10, i))) + octnum; + q /= 8; + i++; + } + octnum /= 10; + return octnum; + } + + /** + * Main method that gets the hex input from user and converts it into octal. + * @param args arguments + */ + public static void main(String args[]) { String hexadecnum; - int decnum,octalnum; + int decnum, octalnum; Scanner scan = new Scanner(System.in); - + System.out.print("Enter Hexadecimal Number : "); - hexadecnum = scan.nextLine(); - + hexadecnum = scan.nextLine(); + // first convert hexadecimal to decimal - decnum = hex2decimal(hexadecnum); //Pass the string to the hex2decimal function and get the decimal form in variable decnum - + // convert decimal to octal - octalnum=decimal2octal(decnum); - System.out.println("Number in octal: "+octalnum); - - + octalnum = decimal2octal(decnum); + System.out.println("Number in octal: " + octalnum); + + } } diff --git a/Conversions/HexaDecimalToBinary.java b/Conversions/HexaDecimalToBinary.java index b6457beff2b6..8a79e9b4f00c 100644 --- a/Conversions/HexaDecimalToBinary.java +++ b/Conversions/HexaDecimalToBinary.java @@ -1,3 +1,5 @@ +package Conversions; + public class HexaDecimalToBinary { private final int LONG_BITS = 8; diff --git a/Conversions/HexaDecimalToDecimal.java b/Conversions/HexaDecimalToDecimal.java index 24c4e0a8570c..c164f78e435f 100644 --- a/Conversions/HexaDecimalToDecimal.java +++ b/Conversions/HexaDecimalToDecimal.java @@ -5,22 +5,20 @@ public class HexaDecimalToDecimal { // convert hexadecimal to decimal - public static int getHexaToDec(String hex){ + public static int getHexaToDec(String hex) { String digits = "012345678910ABCDEFF"; hex = hex.toUpperCase(); int val = 0; - for (int i = 0; i < hex.length(); i++) - { + for (int i = 0; i < hex.length(); i++) { int d = digits.indexOf(hex.charAt(i)); - val = 16*val + d; + val = 16 * val + d; } return val; } // Main method gets the hexadecimal input from user and converts it into Decimal output. - public static void main(String args[]) - { + public static void main(String args[]) { String hexa_Input; int dec_output; Scanner scan = new Scanner(System.in); @@ -35,7 +33,7 @@ public static void main(String args[]) Pass the string to the getHexaToDec function and it returns the decimal form in the variable dec_output. */ - System.out.println("Number in Decimal: "+dec_output); + System.out.println("Number in Decimal: " + dec_output); } diff --git a/Conversions/OctalToBinary.java b/Conversions/OctalToBinary.java deleted file mode 100644 index 6a011c094cab..000000000000 --- a/Conversions/OctalToBinary.java +++ /dev/null @@ -1,49 +0,0 @@ -import java.util.Scanner; - -/** - * Converts any Octal number to a Binary number - * - * @author Zachary Jones - * - */ -public class OctalToBinary { - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - int o = sc.nextInt(); - System.out.println("Binary equivalent: " + convertOctalToBinary(o)); - sc.close(); - } - - /** - * This method converts an octal number - * to a binary number. - * - * @param o The octal number - * @return The binary number - */ - public static int convertOctalToBinary(int o) { - Scanner scan; - int num; - - void getVal() { - - System.out.println("Octal to Binary"); - scan = new Scanner(System.in); - // Entering the needed number - System.out.println("\nEnter the number : "); - num = Integer.parseInt(scan.nextLine(), 8); - } - - void convert() { - - String binary = Integer.toBinaryString(num); - System.out.println("Binary Value is : " + binary); - } - } -} \ No newline at end of file diff --git a/Conversions/OctalToDecimal.java b/Conversions/OctalToDecimal.java index 2c9098576fff..3b8c996bc200 100644 --- a/Conversions/OctalToDecimal.java +++ b/Conversions/OctalToDecimal.java @@ -1,3 +1,5 @@ +package Conversions; + import java.util.Scanner; /** diff --git a/Conversions/OctalToHexadecimal.java b/Conversions/OctalToHexadecimal.java index a68df621e5e4..2cefc92002ca 100644 --- a/Conversions/OctalToHexadecimal.java +++ b/Conversions/OctalToHexadecimal.java @@ -1,63 +1,64 @@ -/** - + + * Converts any Octal Number to HexaDecimal - + + * - + + * @author Tanmay Joshi - + + * - + + * - **/ +package Conversions; + import java.util.Scanner; +/** + * Converts any Octal Number to HexaDecimal + * + * @author Tanmay Joshi + */ public class OctalToHexadecimal { - - /** - + + * This method converts a Octal number to - + + * a decimal number - + + * - + + * @param The Octal Number - + + * @return The Decimal number - + + */ - public static int OctToDec(String s) - { - int i =0; - for(int j =0;j 0) { - int digit = d % 16; - hex = digits.charAt(digit) + hex; - d = d / 16; + /** + * This method converts a Octal number to a decimal number + * + * @param s The Octal Number + * @return The Decimal number + */ + public static int OctToDec(String s) { + int i = 0; + for (int j = 0; j < s.length(); j++) { + char num = s.charAt(j); + num -= '0'; + i *= 8; + i += num; + } + return i; } - return hex; -} - //Driver Program -public static void main ( String args[]) { - - Scanner input = new Scanner(System.in); - System.out.print("Enter the Octal number: "); - String oct = input.next(); //Take octal number as input from user in a string - int decimal = OctToDec(oct); //Pass the octal number to function and get converted deciaml form - String hex = DecimalToHex(decimal); //Pass the decimla number to function and get converted Hex form of the number - System.out.println("The Hexadecimal equivalant is: "+hex); - } + /** + * This method converts a Decimal number to a Hexadecimal number + * + * @param d The Decimal Number + * @return The Hexadecimal number + */ + public static String DecimalToHex(int d) { + String digits = "0123456789ABCDEF"; + if (d <= 0) + return "0"; + String hex = ""; + while (d > 0) { + int digit = d % 16; + hex = digits.charAt(digit) + hex; + d = d / 16; + } + return hex; + } + + + public static void main(String args[]) { + + Scanner input = new Scanner(System.in); + System.out.print("Enter the Octal number: "); + // Take octal number as input from user in a string + String oct = input.next(); + + // Pass the octal number to function and get converted deciaml form + int decimal = OctToDec(oct); + + // Pass the decimla number to function and get converted Hex form of the number + String hex = DecimalToHex(decimal); + System.out.println("The Hexadecimal equivalant is: " + hex); + } } diff --git a/Conversions/RomanToInteger.java b/Conversions/RomanToInteger.java index 35b04f9ee913..7d6e0650ab46 100644 --- a/Conversions/RomanToInteger.java +++ b/Conversions/RomanToInteger.java @@ -1,8 +1,10 @@ +package Conversions; + import java.util.*; public class RomanToInteger { - private static Map map = new HashMap<>() {{ + private static Map map = new HashMap() {{ put('I', 1); put('V', 5); put('X', 10); diff --git a/DataStructures/Bags/Bag.java b/DataStructures/Bags/Bag.java index 06b454ed907e..2fd17ed65b04 100644 --- a/DataStructures/Bags/Bag.java +++ b/DataStructures/Bags/Bag.java @@ -1,126 +1,126 @@ -package Bags; +package DataStructures.Bags; import java.util.Iterator; import java.util.NoSuchElementException; /** * Collection which does not allow removing elements (only collect and iterate) - * + * * @param - the generic type of an element in this bag */ public class Bag implements Iterable { - private Node firstElement; // first element of the bag - private int size; // size of bag - - private static class Node { - private Element content; - private Node nextElement; - } - - /** - * Create an empty bag - */ - public Bag() { - firstElement = null; - size = 0; - } - - /** - * @return true if this bag is empty, false otherwise - */ - public boolean isEmpty() { - return firstElement == null; - } - - /** - * @return the number of elements - */ - public int size() { - return size; - } - - /** - * @param element - the element to add - */ - public void add(Element element) { - Node oldfirst = firstElement; - firstElement = new Node<>(); - firstElement.content = element; - firstElement.nextElement = oldfirst; - size++; - } - - /** - * Checks if the bag contains a specific element - * - * @param element which you want to look for - * @return true if bag contains element, otherwise false - */ - public boolean contains(Element element) { - Iterator iterator = this.iterator(); - while(iterator.hasNext()) { - if (iterator.next().equals(element)) { - return true; - } - } - return false; - } - - /** - * @return an iterator that iterates over the elements in this bag in arbitrary order - */ - public Iterator iterator() { - return new ListIterator<>(firstElement); - } - - @SuppressWarnings("hiding") - private class ListIterator implements Iterator { - private Node currentElement; - - public ListIterator(Node firstElement) { - currentElement = firstElement; - } - - public boolean hasNext() { - return currentElement != null; - } - - /** - * remove is not allowed in a bag - */ - @Override - public void remove() { - throw new UnsupportedOperationException(); - } - - public Element next() { - if (!hasNext()) - throw new NoSuchElementException(); - Element element = currentElement.content; - currentElement = currentElement.nextElement; - return element; - } - } - - /** - * main-method for testing - */ - public static void main(String[] args) { - Bag bag = new Bag<>(); - - bag.add("1"); - bag.add("1"); - bag.add("2"); - - System.out.println("size of bag = " + bag.size()); - for (String s : bag) { - System.out.println(s); - } - - System.out.println(bag.contains(null)); - System.out.println(bag.contains("1")); - System.out.println(bag.contains("3")); - } + private Node firstElement; // first element of the bag + private int size; // size of bag + + private static class Node { + private Element content; + private Node nextElement; + } + + /** + * Create an empty bag + */ + public Bag() { + firstElement = null; + size = 0; + } + + /** + * @return true if this bag is empty, false otherwise + */ + public boolean isEmpty() { + return firstElement == null; + } + + /** + * @return the number of elements + */ + public int size() { + return size; + } + + /** + * @param element - the element to add + */ + public void add(Element element) { + Node oldfirst = firstElement; + firstElement = new Node<>(); + firstElement.content = element; + firstElement.nextElement = oldfirst; + size++; + } + + /** + * Checks if the bag contains a specific element + * + * @param element which you want to look for + * @return true if bag contains element, otherwise false + */ + public boolean contains(Element element) { + Iterator iterator = this.iterator(); + while (iterator.hasNext()) { + if (iterator.next().equals(element)) { + return true; + } + } + return false; + } + + /** + * @return an iterator that iterates over the elements in this bag in arbitrary order + */ + public Iterator iterator() { + return new ListIterator<>(firstElement); + } + + @SuppressWarnings("hiding") + private class ListIterator implements Iterator { + private Node currentElement; + + public ListIterator(Node firstElement) { + currentElement = firstElement; + } + + public boolean hasNext() { + return currentElement != null; + } + + /** + * remove is not allowed in a bag + */ + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + public Element next() { + if (!hasNext()) + throw new NoSuchElementException(); + Element element = currentElement.content; + currentElement = currentElement.nextElement; + return element; + } + } + + /** + * main-method for testing + */ + public static void main(String[] args) { + Bag bag = new Bag<>(); + + bag.add("1"); + bag.add("1"); + bag.add("2"); + + System.out.println("size of bag = " + bag.size()); + for (String s : bag) { + System.out.println(s); + } + + System.out.println(bag.contains(null)); + System.out.println(bag.contains("1")); + System.out.println(bag.contains("3")); + } } diff --git a/DataStructures/Buffers/CircularBuffer.java b/DataStructures/Buffers/CircularBuffer.java index d1f7016d52cf..ae047b81568f 100644 --- a/DataStructures/Buffers/CircularBuffer.java +++ b/DataStructures/Buffers/CircularBuffer.java @@ -1,3 +1,5 @@ +package DataStructures.Buffers; + import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; @@ -9,7 +11,7 @@ public class CircularBuffer { private AtomicInteger _readable_data = new AtomicInteger(0); public CircularBuffer(int buffer_size) { - if(!IsPowerOfTwo(buffer_size)) { + if (!IsPowerOfTwo(buffer_size)) { throw new IllegalArgumentException(); } this._buffer_size = buffer_size; @@ -28,7 +30,7 @@ public Character readOutChar() { Character result = null; //if we have data to read - if(_readable_data.get() > 0) { + if (_readable_data.get() > 0) { result = new Character(_buffer[getTrueIndex(_read_index)]); _readable_data.decrementAndGet(); _read_index++; @@ -41,7 +43,7 @@ public boolean writeToCharBuffer(char c) { boolean result = false; //if we can write to the buffer - if(_readable_data.get() < _buffer_size) { + if (_readable_data.get() < _buffer_size) { //write to buffer _buffer[getTrueIndex(_write_index)] = c; _readable_data.incrementAndGet(); @@ -56,6 +58,7 @@ private static class TestWriteWorker implements Runnable { String _alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"; Random _random = new Random(); CircularBuffer _buffer; + public TestWriteWorker(CircularBuffer cb) { this._buffer = cb; } @@ -65,10 +68,10 @@ private char getRandomChar() { } public void run() { - while(!Thread.interrupted()) { - if(!_buffer.writeToCharBuffer(getRandomChar())){ + while (!Thread.interrupted()) { + if (!_buffer.writeToCharBuffer(getRandomChar())) { Thread.yield(); - try{ + try { Thread.sleep(10); } catch (InterruptedException e) { return; @@ -80,15 +83,17 @@ public void run() { private static class TestReadWorker implements Runnable { CircularBuffer _buffer; + public TestReadWorker(CircularBuffer cb) { this._buffer = cb; } + @Override public void run() { System.out.println("Printing Buffer:"); - while(!Thread.interrupted()) { + while (!Thread.interrupted()) { Character c = _buffer.readOutChar(); - if(c != null) { + if (c != null) { System.out.print(c.charValue()); } else { Thread.yield(); diff --git a/DataStructures/CSVFile/src/CSVFile.java b/DataStructures/CSVFile/src/CSVFile.java deleted file mode 100644 index e838a24670ae..000000000000 --- a/DataStructures/CSVFile/src/CSVFile.java +++ /dev/null @@ -1,692 +0,0 @@ -/* - * author: Christian Bender - * class: CSVFile - * - * This class implements a data structure for handling of - * CSV-files. - * - * Overview - * - * CSVFile(path : string, seperator : char) - * compiles the CSV-file in the inner data structure. - * - * CSVFile (file : File, seperator : char) - * CSVFile (seperator : char) - * - * compile (row : string, seperator : char) : string - * compiles row in its columns. - * - * isPunctuation (ch : char) : boolean - * check whether ch is a punctuation character. - * - * getElementString(row : int, column : int) : string - * returns the specified element. - * - * getElementDouble(row : int, column : int) : double - * returns the specified element as double. - * - * addRow(row : string) : void - * adds a row to the inner data structure. - * without writing into the CSV-file. - * - * set (row : int, column : int, item : string) : void - * replaces the specified item with a newer. - * - * commit() : void - * writes the added data into CSV-file. - * - * commit(path : String) : void - * commit(file : File ) : void - * - * findRow(key : string) : ArrayList - * returns the searched row otherwise null. - * - * contains(key : string) : boolean - * returns true if a row contains 'key' otherwise false. - * - * getColumn(column : int) : ArrayList - * returns the specified column as ArrayList. - * - * getColumn(key : string) : ArrayList - * - * removeRow(key : string) : void - * purpose removes the specified row at the inner data structure. - * - * removeRow(column : int) : void - * - * updateFile() : void - * overwrites the CSV-file with the current inner data structure. - * removed rows are remove in the CSV-file, too. - * - * updateFile(file : File) : void - * - * getNumberOfRows() : int - * returns the number of rows in CSV-File - * it counts only rows that in the table. - * - */ - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collections; -import java.util.regex.Pattern; - -public class CSVFile { - - // the actual CSV-content - private ArrayList> table; - // to tracking added rows. - private ArrayList trackList; - // notice the seperator - private char seperator; - // notice the path of the CSV-File. - private String pathCSVFile; - - - /** - * Constructor - * - * @param path - * @param seperator - * @purpose loads the CSV-file and fills the inner table with the data - */ - public CSVFile(String path, char seperator) { - this(new File(path),seperator); - } - - - /** - * - * @param file - * same constructor different arguments. - */ - public CSVFile(File file, char seperator) { - table = new ArrayList>(); - trackList = new ArrayList(); - pathCSVFile = file.getPath(); - this.seperator = seperator; - ArrayList colums = new ArrayList(); - if (!file.canRead() || !file.isFile()) { - System.out.println("unable to open file"); - System.exit(1); - } - - try (BufferedReader br = Files.newBufferedReader(Paths.get(file.getAbsolutePath()))) { - br.lines().forEach(line -> table.add(compile(line, seperator))); - } catch (IOException e) { - e.printStackTrace(); - } - } - - - /** - * - * @param separator - * @purpose Constructor for empty CSV-File. - */ - public CSVFile(char separator) { - table = new ArrayList>(); - trackList = new ArrayList(); - pathCSVFile = ""; - this.seperator = separator; - } - - - /** - * - * @param row - * @param sep - * the seperator - * @return ArrayList that contains each column of row. - * @purpose compiles row in its columns. - * - */ - public static ArrayList compile(String row, char sep) { - ArrayList columns = new ArrayList(); - int state = 0; - char ch = ' '; - String column = ""; - int countQuotes = 0; - for (int i = 0; i < row.length(); i++) { - // fetch next character - ch = row.charAt(i); - switch (state) { - - // state 0 - case 0: - if (Character.isLetter(ch) || Character.isDigit(ch)) { - state = 1; - column += ch; - } else if (ch == '"') { // catch " - state = 2; - column += ch; - } else if (Character.isWhitespace(ch)) { - state = 0; - } - break; - // state 1 - case 1: - if ((Character.isLetter(ch) || Character.isDigit(ch) - || isPunctuation(ch) || Character.isWhitespace(ch)) - && (ch != sep)) { - state = 1; - column += ch; - } else if (ch == sep || ch == '\n') { - state = 0; - column = column.trim(); - columns.add(column); - column = ""; - } else { // error case - throw new RuntimeException("compile: invalid" - + " character " + ch); - } - break; - - // state 2 - case 2: - if ((Character.isLetter(ch) || Character.isDigit(ch) - || Character.isWhitespace(ch) || isPunctuation(ch)) - && (ch != '"')) { - state = 2; - column += ch; - } else if (ch == '"') { - state = 3; - column += ch; - } else { // error case - throw new RuntimeException("compile: invalid" - + " character " + ch); - } - break; - - // state 3 - case 3: - if ((Character.isLetter(ch) || Character.isDigit(ch) - || Character.isWhitespace(ch) || isPunctuation(ch)) - && (ch != '"') && (ch != sep)) { - state = 2; - column += ch; - } else if (ch == ',') { - state = 0; - column = column.trim(); - columns.add(column); - column = ""; - } else { // error case - throw new RuntimeException("compile: invalid" - + " character " + ch); - } - - } - - } - // for adding the remaining column - columns.add(column); - column = ""; - return columns; - } - - private static Pattern PATTERN_PUNCTUATION = Pattern.compile("\\p{Punct}"); - /** - * - * @param ch - * @returns true if ch is punctuation character otherwise false. - */ - public static boolean isPunctuation(char ch) { - return PATTERN_PUNCTUATION.matcher("" + ch).matches(); - } - - - /** - * - * @param row - * @param column - * @return the specific element as string - */ - public String getElementString(int row, int column) { - // check arguments - if (row < table.size() && column < table.get(0).size()) { - return table.get(row).get(column); - } else { // error case - throw new RuntimeException("getElementString: " - + " arguments out of bound."); - } - - } - - - /** - * - * @param row - * @param column - * @return the specific element as double - * @throws NumberFormatException - */ - public double getElementDouble(int row, int column) - throws NumberFormatException { - // check arguments - if (row < table.size() && column < table.get(0).size()) { - return Double.parseDouble(table.get(row).get(column)); - } else { // error case - throw new RuntimeException("getElementString: " - + " arguments out of bound."); - } - } - - - /** - * - * @param row - * @purpose adds a row to the inner data structure. - * without writing into the CSV-file. - */ - public void addRow(String row) { - table.add(compile(row, seperator)); - // tracking the last item. - trackList.add(table.size() - 1); - } - - - /** - * @purpose: writes the added data into CSV-file. - */ - public void commit() { - String row = ""; - PrintWriter pWriter = null; - try { - pWriter = new PrintWriter(new BufferedWriter(new FileWriter( - pathCSVFile, true))); - - // writes the tracked rows into CSV-file. - for (int index : trackList) { - for (int i = 0; i < table.get(index).size(); i++) { - if (i != 0) { - row += ","; - row += table.get(index).get(i); - } else { - row += table.get(index).get(i); - } - } - // add newline for next row - row += "\n"; - pWriter.write(row); - // clear row for the next one - row = ""; - } - } catch (IOException ioe) { - ioe.printStackTrace(); - } finally { - if (pWriter != null) { - pWriter.flush(); - pWriter.close(); - } - } - - // remove tracked rows. - trackList.clear(); - } - - - /** - * @param path - * @purpose: writes the added data into CSV-file (given path). - */ - public void commit(String path) { - String row = ""; - pathCSVFile = path; - PrintWriter pWriter = null; - try { - - pWriter = new PrintWriter(new BufferedWriter(new FileWriter( - pathCSVFile, true))); - - // writes the tracked rows into CSV-file. - for (int index : trackList) { - for (int i = 0; i < table.get(index).size(); i++) { - if (i != 0) { - row += ","; - row += table.get(index).get(i); - } else { - row += table.get(index).get(i); - } - } - // add newline for next row - row += "\n"; - pWriter.write(row); - // clear row - row = ""; - } - } catch (IOException ioe) { - ioe.printStackTrace(); - } finally { - if (pWriter != null) { - pWriter.flush(); - pWriter.close(); - } - } - - // remove tracked rows. - trackList.clear(); - } - - /** - * - * @param file - * @purpose: writes the added data into CSV-file (given path). - */ - public void commit(File file) { - String row = ""; - pathCSVFile = file.getPath(); - PrintWriter pWriter = null; - try { - - pWriter = new PrintWriter(new BufferedWriter(new FileWriter( - file, true))); - - // writes the tracked rows into CSV-file. - for (int index : trackList) { - for (int i = 0; i < table.get(index).size(); i++) { - if (i != 0) { - row += ","; - row += table.get(index).get(i); - } else { - row += table.get(index).get(i); - } - } - // add newline for next row - row += "\n"; - pWriter.write(row); - // clear row - row = ""; - } - } catch (IOException ioe) { - ioe.printStackTrace(); - } finally { - if (pWriter != null) { - pWriter.flush(); - pWriter.close(); - } - } - - // remove tracked rows. - trackList.clear(); - } - - - /** - * - * @param key - * @returns the searched row otherwise null. - */ - public ArrayList findRow(String key) { - ArrayList ans = null; - key = key.trim(); - for (int i = 0; i < table.size(); i++) { - for (String item : table.get(i)) { - item = item.trim(); - if (item.equals(key)) { - ans = table.get(i); - break; - } - } - } - return ans; - } - - - /** - * - * @param key - * @returns true if a row contains 'key' otherwise false. - */ - public boolean contains(String key) { - key = key.trim(); - for (int i = 0; i < table.size(); i++) { - for (String item : table.get(i)) { - item = item.trim(); - if (item.equals(key)) { - return true; - } - } - } - return false; - } - - - /** - * - * @param n of type integer - * @returns the specified column as ArrayList. - */ - public ArrayList getColumn(int column) { - ArrayList ans = new ArrayList(); - if (column < table.get(0).size()) { - for (int i = 0; i < table.size(); i++) { - ans.add(table.get(i).get(column)); - } - } else { // error case - throw new RuntimeException("getColumn: column is too large"); - } - return ans; - } - - - /** - * - * @param label of type string - * @returns the specified column at label. - */ - public ArrayList getColumn(String label) { - ArrayList ans = new ArrayList(); - int n = table.get(0).indexOf(label); - // check whether label exists. - if (n != -1) { - for (int i = 1; i < table.size(); i++) { - ans.add(table.get(i).get(n)); - } - } else { // error case - throw new RuntimeException("getColumn: label " + label - + " don't exists."); - } - return ans; - } - - - /** - * - * @param key of type string - * @purpose removes the specified row at the inner data structure. - */ - public void removeRow(String key) { - for (int i = 0; i < table.size(); i++) { - if (table.get(i) != null) { - for (String item : table.get(i)) { - if (item.equals(key)) { - table.set(i,null); - // updates the track list - if (trackList.indexOf(i) != -1) { - trackList.remove(i); - } - } - } - } - } - // removes all null-elements - table.removeAll(Collections.singleton(null)); - } - - - /** - * - * @param n of type integer - * @purpose removes the specified row at the inner data structure. - */ - public void removeRow(int column) { - if (column < table.size()) { - table.set(column, null); - // removes all null-elements - table.removeAll(Collections.singleton(null)); - // updates the track list - if (trackList.indexOf(column) != -1) { - trackList.remove(column); - } - } else { - throw new RuntimeException("removeRow: column is too large"); - } - } - - - /** - * overwrites the CSV-file with the current inner data structure. - * removed rows are remove in the CSV-file, too. - */ - public void updateFile() { - String row = ""; - PrintWriter pWriter = null; - try { - pWriter = new PrintWriter(new BufferedWriter(new FileWriter( - pathCSVFile))); - - // writes the table rows into CSV-file. - for (int i = 0; i < table.size(); i++) { - for (int j = 0; j < table.get(i).size(); j++) { - if (j != 0) { - row += ","; - row += table.get(i).get(j); - } else { - row += table.get(i).get(j); - } - } - // add newline for next row - row += "\n"; - pWriter.write(row); - // clear row - row = ""; - } - - // writes the tracked rows into CSV-file. - for (int index : trackList) { - for (int i = 0; i < table.get(index).size(); i++) { - if (i != 0) { - row += ","; - row += table.get(index).get(i); - } else { - row += table.get(index).get(i); - } - } - // add newline for next row - row += "\n"; - pWriter.write(row); - // clear row for the next one - row = ""; - } - } catch (IOException ioe) { - ioe.printStackTrace(); - } finally { - if (pWriter != null) { - pWriter.flush(); - pWriter.close(); - } - } - - // remove tracked rows. - trackList.clear(); - } - - - /** - * - * @param file - * overwrites the CSV-file with the current inner data structure. - * removed rows are remove in the CSV-file, too. - */ - public void updateFile(File file) { - String row = ""; - PrintWriter pWriter = null; - try { - pWriter = new PrintWriter(new BufferedWriter(new FileWriter( - file))); - - // writes the table rows into CSV-file. - for (int i = 0; i < table.size(); i++) { - for (int j = 0; j < table.get(i).size(); j++) { - if (j != 0) { - row += ","; - row += table.get(i).get(j); - } else { - row += table.get(i).get(j); - } - } - // add newline for next row - row += "\n"; - pWriter.write(row); - // clear row - row = ""; - } - - // writes the tracked rows into CSV-file. - for (int index : trackList) { - for (int i = 0; i < table.get(index).size(); i++) { - if (i != 0) { - row += ","; - row += table.get(index).get(i); - } else { - row += table.get(index).get(i); - } - } - // add newline for next row - row += "\n"; - pWriter.write(row); - // clear row - row = ""; - } - } catch (IOException ioe) { - ioe.printStackTrace(); - } finally { - if (pWriter != null) { - pWriter.flush(); - pWriter.close(); - } - } - - // remove tracked rows. - trackList.clear(); - } - - - /** - * - * @returns the number of rows in CSV-File - * it counts only rows that in the table. - */ - public int getNumberOfRows() { - return table.size(); - } - - - /** - * - * @param row - * @param column - * @param item - * @purpose replaces the specified item with a newer. - */ - public void set(int row, int column, String item) { - if (row < table.size()) { - if (column < table.get(row).size()) { - table.get(row).set(column, item); - } else { - throw new RuntimeException("set: column is too large!"); - } - } else { - throw new RuntimeException("set: row is too large!"); - } - } - -} diff --git a/DataStructures/CSVFile/src/TestCSVFile.java b/DataStructures/CSVFile/src/TestCSVFile.java deleted file mode 100644 index 0f63c90294e9..000000000000 --- a/DataStructures/CSVFile/src/TestCSVFile.java +++ /dev/null @@ -1,133 +0,0 @@ -import static org.junit.Assert.*; - -import org.junit.Before; -import org.junit.Test; - -import java.io.File; -import java.util.ArrayList; - -public class TestCSVFile { - - - @Test - public void testConstructor1() { - CSVFile testObj = new CSVFile("testData.csv",','); - assertEquals(testObj.getElementDouble(1, 1),65.78331, 0.001); - assertEquals(testObj.getElementString(1, 1),"65.78331"); - assertEquals(testObj.getElementString(0, 1),"\"Height(Inches)\""); - assertEquals(testObj.getNumberOfRows(),25029); - } - - @Test - public void testConstructor2() { - CSVFile testObj = new CSVFile(','); - testObj.addRow("1, 65.78331, 112.9925"); - testObj.addRow("12, 67.62333, 114.143"); - testObj.addRow("6, 68.69784, 123.3024"); -// testObj.commit("testData2.csv"); -// testObj.commit(new File("testData2.csv")); - } - - @Test - public void testConstructor3() { - CSVFile testObj = new CSVFile(new File("testData.csv"),','); - assertEquals(testObj.getElementDouble(1, 1),65.78331, 0.001); - assertEquals(testObj.getElementString(1, 1),"65.78331"); - assertEquals(testObj.getElementString(0, 1),"\"Height(Inches)\""); - } - - @Test - public void testIsPunctuation() { - assertTrue(CSVFile.isPunctuation(':')); - } - - @Test - public void testCompile() { - ArrayList columns = new ArrayList(); - columns.add("2"); - columns.add("71.51521"); - columns.add("136.4873"); - - - assertEquals(CSVFile.compile("2, 71.51521, 136.4873", ','),columns); - columns.clear(); - - // test successful - columns.add("\"Index\""); - columns.add("\"Height(Inches)\""); - columns.add("\"Weight(Pounds)\""); - - assertEquals(CSVFile.compile("\"Index\", \"Height(Inches)\", " - + "\"Weight(Pounds)\"", ','),columns); - - - } - - @Test - public void testAddRowCommit() { -// CSVFile testObj = new CSVFile("testData.csv",','); -// testObj.addRow("1,1,1"); -// testObj.addRow("1,2,3"); -// testObj.commit(); - // test successful - } - - @Test - public void testFindRow() { - CSVFile testObj = new CSVFile("testData.csv",','); - ArrayList columns = new ArrayList(); - columns.add("2"); - columns.add("71.51521"); - columns.add("136.4873"); - assertEquals(testObj.findRow("71.51521"),columns); - } - - @Test - public void testContains() { - CSVFile testObj = new CSVFile("testData.csv",','); - ArrayList columns = new ArrayList(); - columns.add("2"); - columns.add("71.51521"); - columns.add("136.4873"); - assertTrue(testObj.contains("71.51521")); - assertFalse(testObj.contains("9889678")); - } - - - @Test - public void testGetColumn() { - CSVFile testObj = new CSVFile("testData2.csv",','); - CSVFile testObj2 = new CSVFile("testData3.csv",','); - ArrayList columns = new ArrayList(); - columns.add("height"); - columns.add("65.78331"); - columns.add("67.62333"); - assertEquals(testObj.getColumn(1),columns); - columns.clear(); - columns.add("65.78331"); - columns.add("67.62333"); - assertEquals(testObj.getColumn("height"),columns); - columns.clear(); - assertEquals(testObj2.getColumn("height"),columns); - } - - - @Test - public void testRemoving() { - CSVFile testObj = new CSVFile("testData4.csv",','); - //testObj.removeRow("68.69784"); -// testObj.removeRow(0); -// testObj.updateFile(new File("testData4.csv")); - // test successful - } - - @Test - public void testSet() { -// CSVFile testObj = new CSVFile("testData4.csv",','); -// testObj.set(6, 2, "80"); -// testObj.updateFile(); - // test succesfull - } - - -} diff --git a/DataStructures/CSVFile/testData.csv b/DataStructures/CSVFile/testData.csv deleted file mode 100644 index 9b272c8d9c43..000000000000 --- a/DataStructures/CSVFile/testData.csv +++ /dev/null @@ -1,25029 +0,0 @@ -"Index", "Height(Inches)", "Weight(Pounds)" -1, 65.78331, 112.9925 -2, 71.51521, 136.4873 -3, 69.39874, 153.0269 -4, 68.2166, 142.3354 -5, 67.78781, 144.2971 -6, 68.69784, 123.3024 -7, 69.80204, 141.4947 -8, 70.01472, 136.4623 -9, 67.90265, 112.3723 -10, 66.78236, 120.6672 -11, 66.48769, 127.4516 -12, 67.62333, 114.143 -13, 68.30248, 125.6107 -14, 67.11656, 122.4618 -15, 68.27967, 116.0866 -16, 71.0916, 139.9975 -17, 66.461, 129.5023 -18, 68.64927, 142.9733 -19, 71.23033, 137.9025 -20, 67.13118, 124.0449 -21, 67.83379, 141.2807 -22, 68.87881, 143.5392 -23, 63.48115, 97.90191 -24, 68.42187, 129.5027 -25, 67.62804, 141.8501 -26, 67.20864, 129.7244 -27, 70.84235, 142.4235 -28, 67.49434, 131.5502 -29, 66.53401, 108.3324 -30, 65.44098, 113.8922 -31, 69.5233, 103.3016 -32, 65.8132, 120.7536 -33, 67.8163, 125.7886 -34, 70.59505, 136.2225 -35, 71.80484, 140.1015 -36, 69.20613, 128.7487 -37, 66.80368, 141.7994 -38, 67.65893, 121.2319 -39, 67.80701, 131.3478 -40, 64.04535, 106.7115 -41, 68.57463, 124.3598 -42, 65.18357, 124.8591 -43, 69.65814, 139.6711 -44, 67.96731, 137.3696 -45, 65.98088, 106.4499 -46, 68.67249, 128.7639 -47, 66.88088, 145.6837 -48, 67.69868, 116.819 -49, 69.82117, 143.6215 -50, 69.08817, 134.9325 -51, 69.91479, 147.0219 -52, 67.33182, 126.3285 -53, 70.26939, 125.4839 -54, 69.10344, 115.7084 -55, 65.38356, 123.4892 -56, 70.18447, 147.8926 -57, 70.40617, 155.8987 -58, 66.54376, 128.0742 -59, 66.36418, 119.3701 -60, 67.537, 133.8148 -61, 66.50418, 128.7325 -62, 68.99958, 137.5453 -63, 68.30355, 129.7604 -64, 67.01255, 128.824 -65, 70.80592, 135.3165 -66, 68.21951, 109.6113 -67, 69.05914, 142.4684 -68, 67.73103, 132.749 -69, 67.21568, 103.5275 -70, 67.36763, 124.7299 -71, 65.27033, 129.3137 -72, 70.84278, 134.0175 -73, 69.92442, 140.3969 -74, 64.28508, 102.8351 -75, 68.2452, 128.5214 -76, 66.35708, 120.2991 -77, 68.36275, 138.6036 -78, 65.4769, 132.9574 -79, 69.71947, 115.6233 -80, 67.72554, 122.524 -81, 68.63941, 134.6254 -82, 66.78405, 121.8986 -83, 70.05147, 155.3767 -84, 66.27848, 128.9418 -85, 69.20198, 129.1013 -86, 69.13481, 139.4733 -87, 67.36436, 140.8901 -88, 70.09297, 131.5916 -89, 70.1766, 121.1232 -90, 68.22556, 131.5127 -91, 68.12932, 136.5479 -92, 70.24256, 141.4896 -93, 71.48752, 140.6104 -94, 69.20477, 112.1413 -95, 70.06306, 133.457 -96, 70.55703, 131.8001 -97, 66.28644, 120.0285 -98, 63.42577, 123.0972 -99, 66.76711, 128.1432 -100, 68.88741, 115.4759 -101, 64.87434, 102.0927 -102, 67.09272, 130.353 -103, 68.34761, 134.1842 -104, 65.61073, 98.64133 -105, 67.75551, 114.5599 -106, 68.0212, 123.4917 -107, 67.66193, 123.048 -108, 66.3146, 126.4772 -109, 69.43706, 128.417 -110, 63.83624, 127.1941 -111, 67.72277, 122.0562 -112, 70.05098, 127.6064 -113, 70.18602, 131.6423 -114, 65.94588, 111.8955 -115, 70.007, 122.039 -116, 68.61129, 128.5547 -117, 68.80817, 132.6792 -118, 69.76212, 136.0632 -119, 65.45539, 115.9403 -120, 68.82534, 136.9041 -121, 65.8003, 119.8804 -122, 67.21474, 109.0055 -123, 69.42021, 128.2705 -124, 68.94396, 135.2913 -125, 67.9415, 106.8558 -126, 65.62506, 123.2939 -127, 66.49607, 109.5143 -128, 67.92809, 119.3087 -129, 68.89415, 140.2402 -130, 70.241, 133.9841 -131, 68.26623, 132.5807 -132, 71.23161, 130.6988 -133, 69.09747, 115.5637 -134, 64.39693, 123.7941 -135, 71.09585, 128.1427 -136, 68.21868, 135.9646 -137, 65.91721, 116.6273 -138, 67.4369, 126.8241 -139, 73.90107, 151.3913 -140, 69.98149, 130.4022 -141, 69.51862, 136.2068 -142, 65.18437, 113.3989 -143, 68.00869, 125.3287 -144, 68.3384, 127.5846 -145, 65.18417, 107.1564 -146, 68.26209, 116.4588 -147, 68.56865, 133.8402 -148, 64.49675, 112.8901 -149, 68.71053, 130.7568 -150, 68.89148, 137.7571 -151, 69.54011, 125.4036 -152, 67.39964, 138.4659 -153, 66.47521, 120.8184 -154, 66.01217, 140.1539 -155, 72.44434, 136.7397 -156, 64.12642, 106.1139 -157, 70.98112, 158.9562 -158, 67.50124, 108.7868 -159, 72.01515, 138.7758 -160, 65.31143, 115.9136 -161, 67.07509, 146.2922 -162, 64.39148, 109.8765 -163, 69.37003, 139.0499 -164, 68.37921, 119.9001 -165, 65.31018, 128.3069 -166, 67.1369, 127.2428 -167, 68.39468, 115.2306 -168, 66.2918, 124.7975 -169, 67.1866, 126.9511 -170, 65.99156, 111.2711 -171, 69.43393, 122.6089 -172, 67.97463, 124.2084 -173, 67.76133, 124.6453 -174, 65.27864, 119.5169 -175, 73.83364, 139.2983 -176, 66.81312, 104.8265 -177, 66.89411, 123.0424 -178, 65.73568, 118.8923 -179, 65.98283, 121.4939 -180, 66.58396, 119.2488 -181, 67.11294, 135.0239 -182, 65.87481, 116.228 -183, 66.78067, 109.1731 -184, 68.73577, 124.2237 -185, 66.22666, 141.1645 -186, 65.95968, 129.1501 -187, 68.58372, 127.8693 -188, 66.59347, 120.9244 -189, 66.96574, 127.6466 -190, 68.08015, 101.4693 -191, 70.19025, 144.9927 -192, 65.52149, 110.9523 -193, 67.45905, 132.8625 -194, 67.40985, 146.3385 -195, 69.66158, 145.5894 -196, 65.79799, 120.8431 -197, 66.10558, 115.7813 -198, 68.23987, 128.3019 -199, 68.02403, 127.4718 -200, 71.39044, 127.8761 -201, 65.7316, 121.4997 -202, 66.43358, 112.7148 -203, 70.01309, 135.002 -204, 69.48146, 128.6789 -205, 68.62764, 124.4062 -206, 68.36275, 140.026 -207, 68.39028, 117.519 -208, 68.77413, 143.8737 -209, 69.9236, 141.1703 -210, 71.55542, 155.9414 -211, 68.44764, 134.0093 -212, 66.71398, 130.0975 -213, 66.68413, 106.2265 -214, 67.93699, 112.0489 -215, 68.89855, 136.1884 -216, 67.29191, 131.236 -217, 69.57212, 131.3231 -218, 67.67479, 119.5261 -219, 69.04155, 116.9965 -220, 67.96765, 138.5255 -221, 65.83982, 109.6518 -222, 65.77288, 130.1569 -223, 71.14106, 137.1114 -224, 67.83055, 113.759 -225, 65.0693, 114.9725 -226, 69.70745, 127.7149 -227, 69.92983, 121.9972 -228, 66.11569, 117.9607 -229, 68.61364, 127.7141 -230, 68.9976, 117.9619 -231, 66.79171, 125.1554 -232, 68.02363, 141.1026 -233, 69.67258, 145.4822 -234, 71.82178, 116.065 -235, 72.74676, 135.7458 -236, 67.27951, 132.9248 -237, 67.41015, 115.6622 -238, 68.5315, 114.3184 -239, 68.47126, 148.952 -240, 68.51867, 142.1878 -241, 63.72529, 134.104 -242, 67.70483, 141.8926 -243, 69.47115, 138.7444 -244, 66.70198, 134.449 -245, 65.23126, 117.0167 -246, 69.89473, 115.6752 -247, 69.83048, 134.7905 -248, 65.3979, 120.5746 -249, 68.32214, 120.0835 -250, 65.93895, 84.3598 -251, 70.09805, 138.9394 -252, 66.05531, 143.5245 -253, 68.23481, 123.1347 -254, 65.21758, 115.5261 -255, 69.16173, 120.9844 -256, 67.60064, 120.6473 -257, 67.28621, 124.0352 -258, 66.84323, 117.2238 -259, 68.08281, 127.9598 -260, 66.56991, 116.7527 -261, 70.16973, 121.9957 -262, 67.85113, 123.9952 -263, 66.62309, 108.855 -264, 63.68816, 104.6574 -265, 68.0356, 132.248 -266, 66.941, 127.1834 -267, 66.26292, 125.1209 -268, 70.7301, 133.322 -269, 70.70844, 122.3364 -270, 73.26872, 130.2636 -271, 63.79021, 116.7431 -272, 67.84109, 125.8534 -273, 67.78058, 100.627 -274, 67.23901, 118.4945 -275, 66.75701, 137.1255 -276, 69.03098, 118.6991 -277, 68.52652, 124.1641 -278, 64.65419, 124.9442 -279, 65.14295, 126.3889 -280, 66.74124, 121.5255 -281, 66.99923, 133.2951 -282, 70.26611, 127.4072 -283, 67.57666, 125.08 -284, 66.30582, 102.8114 -285, 68.90702, 134.2212 -286, 65.60543, 100.9758 -287, 68.00189, 145.8886 -288, 69.93715, 155.3046 -289, 70.1459, 138.7175 -290, 66.66364, 116.2611 -291, 69.40676, 120.6087 -292, 66.80598, 114.4083 -293, 67.70048, 133.3406 -294, 69.13438, 92.74955 -295, 67.53769, 131.7825 -296, 65.77912, 118.3865 -297, 66.25769, 131.1466 -298, 67.39038, 130.2033 -299, 64.94327, 129.1836 -300, 69.25699, 143.1445 -301, 69.07739, 138.7307 -302, 69.64403, 130.9528 -303, 69.07705, 124.3032 -304, 68.01304, 135.3702 -305, 68.85664, 124.1988 -306, 63.19158, 111.2389 -307, 65.57591, 129.4037 -308, 69.12101, 127.7444 -309, 69.78765, 121.3311 -310, 67.48203, 118.2183 -311, 69.08809, 123.3441 -312, 68.5529, 151.9118 -313, 68.21327, 115.3108 -314, 67.1012, 122.3844 -315, 71.23661, 129.2323 -316, 69.11946, 138.2824 -317, 65.49848, 144.0565 -318, 66.58706, 120.8482 -319, 67.99831, 113.3034 -320, 72.57747, 149.3227 -321, 67.97585, 130.6373 -322, 66.62347, 122.387 -323, 67.29574, 133.8677 -324, 65.95951, 134.8336 -325, 66.54011, 137.8363 -326, 68.07723, 112.6812 -327, 65.83291, 121.1964 -328, 69.23721, 114.9262 -329, 64.69413, 110.3762 -330, 69.21372, 126.0337 -331, 67.16792, 118.7008 -332, 67.8467, 119.3108 -333, 69.27389, 150.7397 -334, 67.90547, 121.1142 -335, 67.076, 118.4065 -336, 70.01531, 142.759 -337, 70.05454, 145.6305 -338, 70.86714, 127.3425 -339, 66.0586, 115.9678 -340, 65.23745, 104.4441 -341, 68.7413, 138.4905 -342, 69.51946, 145.5049 -343, 70.30764, 124.4065 -344, 67.29982, 124.1866 -345, 67.60582, 126.1659 -346, 67.85566, 138.8125 -347, 66.46536, 121.5515 -348, 68.92071, 114.2555 -349, 68.46886, 129.4022 -350, 69.5193, 137.5583 -351, 70.23956, 134.4996 -352, 67.85651, 127.7103 -353, 68.00435, 115.6709 -354, 67.13983, 131.5906 -355, 68.09931, 127.5839 -356, 68.99077, 125.7211 -357, 69.32618, 119.9885 -358, 70.09286, 140.8676 -359, 68.74304, 136.9164 -360, 64.18633, 118.4759 -361, 66.09074, 129.5516 -362, 69.24418, 152.0714 -363, 69.66512, 120.8646 -364, 68.42721, 136.1027 -365, 68.28613, 130.0611 -366, 69.37684, 131.7743 -367, 68.35315, 139.38 -368, 72.32489, 168.229 -369, 70.37159, 127.6446 -370, 65.72927, 131.8008 -371, 66.49627, 122.8561 -372, 70.81339, 140.2133 -373, 67.37579, 142.6929 -374, 67.79709, 137.4299 -375, 68.1607, 126.0392 -376, 68.85782, 143.5985 -377, 67.71342, 122.62 -378, 64.66007, 108.6044 -379, 65.73721, 100.6617 -380, 68.42441, 116.1397 -381, 68.88946, 140.5293 -382, 68.27367, 125.6907 -383, 69.18045, 134.3329 -384, 72.60996, 136.4649 -385, 66.04157, 127.8822 -386, 69.2288, 123.1361 -387, 68.87697, 116.3375 -388, 66.46042, 124.5581 -389, 69.30444, 125.7853 -390, 67.58249, 107.5905 -391, 69.41816, 143.0236 -392, 67.46867, 118.7434 -393, 66.44873, 118.9856 -394, 68.76185, 131.8744 -395, 63.76881, 119.3691 -396, 69.03663, 126.1223 -397, 66.48966, 126.6122 -398, 66.74224, 113.5597 -399, 67.69394, 115.8413 -400, 66.69066, 130.2738 -401, 67.02877, 125.4542 -402, 65.91096, 117.1655 -403, 70.0304, 137.3184 -404, 69.26978, 149.4447 -405, 70.07695, 151.0695 -406, 64.90942, 116.9994 -407, 69.68744, 138.1787 -408, 67.56524, 127.621 -409, 63.85529, 120.7514 -410, 71.6189, 144.2537 -411, 64.98993, 105.7939 -412, 64.60759, 120.1567 -413, 62.01666, 109.0848 -414, 65.28516, 125.971 -415, 67.70163, 110.2325 -416, 70.85794, 134.4706 -417, 68.17075, 115.5067 -418, 67.45006, 125.1086 -419, 71.04224, 116.4113 -420, 67.83032, 133.3944 -421, 67.15488, 108.7478 -422, 68.30289, 134.3986 -423, 65.41208, 131.2085 -424, 68.66755, 130.8318 -425, 70.06733, 127.0838 -426, 69.13413, 119.4067 -427, 67.02078, 105.5616 -428, 65.52274, 134.4733 -429, 70.19808, 132.6897 -430, 67.66866, 126.058 -431, 69.73257, 126.3532 -432, 67.61719, 142.3603 -433, 70.79589, 124.5873 -434, 69.65804, 122.3604 -435, 66.73277, 123.2298 -436, 67.58008, 131.4049 -437, 65.25317, 124.3037 -438, 70.71387, 128.3836 -439, 71.27374, 136.853 -440, 66.55913, 118.0569 -441, 68.04247, 121.4969 -442, 68.11699, 119.2811 -443, 71.2367, 126.5545 -444, 66.92387, 129.2477 -445, 71.10381, 134.7804 -446, 69.41466, 146.0725 -447, 69.16807, 162.4109 -448, 68.57725, 130.1885 -449, 69.60315, 132.1941 -450, 69.05087, 127.4591 -451, 68.28699, 125.3466 -452, 69.25276, 134.7559 -453, 68.23862, 121.9395 -454, 67.6868, 125.6688 -455, 68.84083, 145.956 -456, 69.52061, 119.9207 -457, 66.97668, 111.5093 -458, 72.0053, 138.676 -459, 67.44482, 135.0151 -460, 66.06214, 116.509 -461, 65.5747, 123.9575 -462, 68.30171, 136.952 -463, 71.02603, 153.0797 -464, 70.76882, 126.357 -465, 67.50812, 145.0614 -466, 69.50936, 135.1739 -467, 66.4455, 108.806 -468, 68.5689, 110.5155 -469, 67.01296, 138.2685 -470, 68.70004, 119.5111 -471, 68.23013, 115.3214 -472, 70.40713, 132.3684 -473, 65.69989, 93.99438 -474, 65.7031, 127.4051 -475, 68.48055, 134.3024 -476, 66.62891, 124.9721 -477, 66.84285, 124.072 -478, 69.89734, 133.5476 -479, 67.6543, 134.1509 -480, 68.30917, 130.2489 -481, 69.74848, 138.0935 -482, 68.57906, 126.6064 -483, 68.14477, 131.8076 -484, 67.98093, 131.7363 -485, 64.82535, 117.6261 -486, 69.20785, 126.1943 -487, 69.2656, 127.5132 -488, 70.9403, 142.4785 -489, 69.07826, 139.444 -490, 66.20183, 110.3204 -491, 71.05779, 131.9541 -492, 68.99493, 129.2037 -493, 70.96089, 124.3513 -494, 66.02496, 126.5251 -495, 69.8641, 149.2303 -496, 66.82802, 142.1577 -497, 69.09424, 127.1436 -498, 66.81425, 122.3353 -499, 67.13183, 112.6659 -500, 64.57428, 134.2647 -501, 68.68038, 120.6936 -502, 67.53724, 115.783 -503, 71.17732, 128.6855 -504, 70.53514, 134.7611 -505, 71.53411, 118.3419 -506, 66.77301, 106.1557 -507, 66.33636, 126.3823 -508, 64.83095, 114.3716 -509, 68.38247, 130.2787 -510, 68.05038, 123.3066 -511, 69.09149, 122.8571 -512, 69.91046, 125.6932 -513, 68.40737, 111.7247 -514, 68.32559, 125.5516 -515, 66.95555, 119.9702 -516, 70.54816, 132.6043 -517, 69.37805, 132.6738 -518, 67.52012, 117.4521 -519, 64.87142, 101.8549 -520, 69.13396, 128.4418 -521, 68.81192, 134.0414 -522, 67.56446, 127.7511 -523, 68.16772, 127.6172 -524, 65.80687, 139.3971 -525, 64.92276, 113.9381 -526, 68.35584, 147.5188 -527, 66.71546, 132.6523 -528, 69.18196, 132.8139 -529, 65.88795, 105.0942 -530, 66.03733, 127.5187 -531, 69.44194, 130.7305 -532, 67.14847, 128.5815 -533, 65.69442, 122.5699 -534, 69.42723, 157.2961 -535, 66.54503, 121.1097 -536, 69.04469, 147.5061 -537, 67.62036, 117.493 -538, 69.59105, 132.4472 -539, 68.12343, 118.1774 -540, 71.22641, 123.7319 -541, 66.43285, 130.365 -542, 66.31808, 122.8882 -543, 68.02724, 107.8693 -544, 68.2876, 118.591 -545, 66.91609, 125.6467 -546, 71.77546, 148.6016 -547, 66.04535, 150.279 -548, 69.01455, 127.0678 -549, 68.70744, 128.7122 -550, 65.012, 118.4233 -551, 66.05857, 125.3879 -552, 71.16403, 149.2676 -553, 67.55274, 107.3484 -554, 68.83455, 133.6992 -555, 68.11811, 124.8508 -556, 67.90528, 112.7028 -557, 67.64085, 127.8407 -558, 69.78282, 134.1615 -559, 67.99889, 138.6031 -560, 69.41465, 126.044 -561, 70.42989, 129.5856 -562, 67.67519, 134.1054 -563, 67.88036, 106.1251 -564, 68.06905, 127.0561 -565, 66.99435, 121.9241 -566, 71.57689, 150.7365 -567, 64.36564, 116.0061 -568, 67.93011, 125.4748 -569, 69.91863, 131.6099 -570, 69.93864, 129.0696 -571, 66.79766, 129.1117 -572, 70.11119, 148.1624 -573, 68.94814, 105.388 -574, 68.02886, 110.5447 -575, 69.36148, 118.6402 -576, 68.44886, 122.8151 -577, 65.70282, 124.887 -578, 69.55674, 135.7695 -579, 65.84635, 116.4563 -580, 68.79983, 125.3617 -581, 69.03835, 133.122 -582, 67.36352, 138.3328 -583, 70.35788, 124.4972 -584, 69.88828, 136.7205 -585, 65.15319, 115.0153 -586, 69.40907, 132.6366 -587, 68.50874, 143.1323 -588, 65.71552, 134.7422 -589, 63.98308, 122.6246 -590, 70.07685, 153.5634 -591, 68.42542, 126.289 -592, 68.23665, 134.7206 -593, 67.82856, 134.5987 -594, 66.31277, 118.3945 -595, 69.75128, 121.2997 -596, 65.70901, 132.2844 -597, 66.88227, 139.0617 -598, 67.2791, 110.698 -599, 70.63357, 154.1073 -600, 69.9377, 124.1592 -601, 65.87671, 134.5173 -602, 72.44694, 138.2622 -603, 70.07052, 149.0801 -604, 67.68486, 127.0075 -605, 66.1151, 117.8222 -606, 69.94355, 148.9096 -607, 68.24317, 128.2151 -608, 68.80144, 129.6944 -609, 66.61818, 125.5674 -610, 70.18701, 128.7947 -611, 65.58971, 124.187 -612, 68.69566, 151.4167 -613, 64.88639, 106.9803 -614, 69.81993, 145.6221 -615, 66.33962, 121.5926 -616, 70.4434, 130.9386 -617, 69.99163, 135.6203 -618, 70.13617, 123.9315 -619, 67.1793, 131.9955 -620, 68.2034, 117.484 -621, 67.76121, 129.6577 -622, 64.79753, 122.3706 -623, 66.47871, 114.5867 -624, 66.98337, 116.5401 -625, 65.69991, 139.4307 -626, 66.82705, 123.4822 -627, 66.35141, 132.5492 -628, 70.13491, 143.4013 -629, 70.11565, 132.9429 -630, 64.56145, 98.8972 -631, 68.15724, 122.4342 -632, 67.1475, 104.6767 -633, 70.88927, 142.7847 -634, 68.16218, 130.9283 -635, 71.19657, 143.827 -636, 67.92444, 142.2832 -637, 65.30204, 107.9441 -638, 66.40756, 105.6891 -639, 71.30647, 125.4007 -640, 69.05997, 106.4195 -641, 65.95442, 118.5371 -642, 69.63776, 136.7836 -643, 71.10495, 145.9328 -644, 66.21851, 129.637 -645, 66.13469, 108.4955 -646, 67.7851, 121.2537 -647, 66.67737, 135.7399 -648, 69.99408, 137.5026 -649, 71.1441, 124.0052 -650, 68.63927, 128.8613 -651, 69.08548, 133.6811 -652, 67.97389, 106.5185 -653, 65.94809, 113.0398 -654, 66.02102, 125.9639 -655, 71.23576, 140.2945 -656, 67.52674, 143.229 -657, 71.06935, 145.8063 -658, 68.27178, 128.1697 -659, 67.31932, 134.1839 -660, 68.98848, 140.2166 -661, 68.404, 146.3453 -662, 67.092, 132.0784 -663, 66.76866, 122.13 -664, 65.64636, 131.4693 -665, 65.34105, 129.5167 -666, 68.18299, 125.7451 -667, 70.65924, 153.1384 -668, 65.94401, 124.5559 -669, 69.62792, 134.8225 -670, 68.29965, 115.3877 -671, 70.06075, 117.9618 -672, 68.43602, 124.5647 -673, 69.27012, 134.4043 -674, 67.70511, 129.3092 -675, 70.89315, 133.1423 -676, 70.54313, 147.3609 -677, 71.58086, 155.0132 -678, 68.42301, 126.2905 -679, 69.35781, 134.4605 -680, 70.445, 134.0296 -681, 67.38153, 128.9248 -682, 67.50767, 123.0543 -683, 68.52054, 112.1788 -684, 66.80858, 111.7443 -685, 72.38532, 148.4615 -686, 68.51642, 136.7459 -687, 70.79791, 133.2068 -688, 66.21905, 116.8855 -689, 68.31167, 124.8542 -690, 67.1715, 121.5809 -691, 67.7714, 123.197 -692, 67.47328, 137.1255 -693, 67.77463, 121.4941 -694, 69.20099, 150.9398 -695, 70.04297, 142.3009 -696, 70.56979, 134.7527 -697, 66.45379, 133.5585 -698, 67.68132, 136.0895 -699, 65.75638, 95.20216 -700, 69.3549, 119.7404 -701, 70.5902, 152.9146 -702, 67.27626, 140.1991 -703, 68.48853, 145.2503 -704, 67.02188, 119.4855 -705, 65.77613, 123.512 -706, 65.96579, 110.6754 -707, 68.18868, 111.4951 -708, 72.08595, 139.4849 -709, 66.85358, 133.088 -710, 69.10929, 133.5196 -711, 64.5909, 112.7698 -712, 67.03849, 124.7975 -713, 68.99156, 123.4224 -714, 70.59872, 142.0921 -715, 70.08988, 116.2814 -716, 65.6844, 131.1256 -717, 67.0982, 131.2493 -718, 66.03932, 127.2422 -719, 69.26423, 122.4523 -720, 66.61351, 115.2431 -721, 68.11738, 126.9532 -722, 69.73059, 143.4439 -723, 64.02042, 125.377 -724, 66.23753, 109.0095 -725, 72.46761, 139.2411 -726, 66.21938, 102.182 -727, 71.2978, 144.3898 -728, 63.1255, 83.08527 -729, 70.93034, 145.3938 -730, 68.25489, 134.9267 -731, 64.78014, 134.678 -732, 65.42982, 111.4963 -733, 68.91361, 119.7951 -734, 64.96937, 95.70426 -735, 66.15237, 117.159 -736, 65.98386, 127.2356 -737, 69.2435, 144.9205 -738, 68.31982, 122.8464 -739, 70.11607, 134.19 -740, 68.63521, 124.9776 -741, 67.74289, 135.8441 -742, 64.58641, 120.8222 -743, 64.66165, 125.0174 -744, 65.90771, 133.5474 -745, 65.77649, 124.5583 -746, 67.1506, 135.9691 -747, 72.24339, 143.5738 -748, 68.73199, 130.5725 -749, 67.57019, 127.192 -750, 70.36234, 141.2372 -751, 63.62233, 107.4236 -752, 66.20711, 122.3234 -753, 66.22114, 111.6055 -754, 70.0722, 137.8915 -755, 69.6563, 142.8742 -756, 66.25043, 114.4349 -757, 68.0704, 128.2736 -758, 67.14808, 134.5725 -759, 68.76609, 140.1034 -760, 68.12075, 121.977 -761, 65.72987, 111.4248 -762, 69.17439, 135.0756 -763, 70.36351, 132.9826 -764, 70.78557, 117.7566 -765, 70.88083, 134.9877 -766, 66.62148, 151.6121 -767, 69.9829, 128.9287 -768, 66.92866, 120.1575 -769, 71.45806, 125.6007 -770, 69.66344, 127.8292 -771, 69.30943, 136.1354 -772, 66.59775, 116.2841 -773, 64.20209, 127.0777 -774, 68.23051, 125.7165 -775, 70.09021, 121.0749 -776, 70.9755, 122.7382 -777, 64.93134, 119.4545 -778, 66.90106, 132.9048 -779, 69.19803, 132.8687 -780, 68.4149, 124.3486 -781, 66.3163, 132.2198 -782, 72.13467, 142.804 -783, 65.74613, 129.605 -784, 69.96677, 128.5326 -785, 65.11417, 112.9919 -786, 67.43294, 122.0795 -787, 66.39785, 118.396 -788, 67.18769, 130.1299 -789, 67.68597, 111.6824 -790, 67.77469, 142.2452 -791, 63.62937, 122.6049 -792, 66.447, 122.8198 -793, 71.9233, 119.1123 -794, 67.92214, 139.4335 -795, 68.01143, 141.3353 -796, 67.76524, 119.787 -797, 69.19791, 136.326 -798, 67.00109, 118.4099 -799, 67.09659, 137.692 -800, 69.85144, 129.078 -801, 67.42782, 123.4642 -802, 68.1104, 115.4311 -803, 68.29433, 129.931 -804, 69.45176, 135.9563 -805, 69.08219, 127.8134 -806, 70.91753, 139.1014 -807, 64.20566, 109.2132 -808, 71.10315, 124.6154 -809, 72.08523, 136.221 -810, 66.15119, 120.4722 -811, 67.52898, 116.1659 -812, 67.17586, 115.5093 -813, 72.92955, 141.9961 -814, 65.54112, 135.4869 -815, 69.08487, 135.1305 -816, 65.28991, 108.2494 -817, 68.53447, 125.1277 -818, 71.32802, 142.8947 -819, 66.88095, 128.2978 -820, 67.91196, 128.268 -821, 67.00238, 103.5665 -822, 68.27584, 156.1069 -823, 66.20276, 104.9661 -824, 64.24214, 121.6365 -825, 67.43738, 132.0066 -826, 64.50081, 118.4079 -827, 68.89607, 135.3898 -828, 70.32908, 140.6633 -829, 64.31742, 111.6703 -830, 67.11253, 128.0328 -831, 68.01206, 130.4737 -832, 68.25267, 128.2127 -833, 67.76873, 142.8202 -834, 67.44291, 123.0804 -835, 65.73581, 117.8771 -836, 69.64372, 130.9274 -837, 71.92818, 129.1735 -838, 69.39435, 144.5784 -839, 67.14717, 115.8635 -840, 69.1469, 116.5322 -841, 66.90594, 141.9947 -842, 67.838, 132.1304 -843, 68.09614, 135.2607 -844, 66.14093, 127.0684 -845, 71.16386, 129.844 -846, 67.55757, 134.5066 -847, 70.01279, 121.3609 -848, 72.56431, 143.1486 -849, 66.60224, 124.7741 -850, 68.51802, 120.1546 -851, 66.34638, 139.4163 -852, 69.02692, 131.6743 -853, 69.12446, 131.07 -854, 68.24578, 129.8914 -855, 68.4869, 123.344 -856, 70.68261, 137.5314 -857, 70.35969, 136.8886 -858, 67.62401, 118.4024 -859, 69.4463, 116.2441 -860, 67.92486, 124.8433 -861, 68.39347, 120.9809 -862, 66.31812, 105.1208 -863, 71.22882, 145.4377 -864, 65.29169, 108.1912 -865, 66.00287, 130.3778 -866, 67.61775, 117.5157 -867, 69.10276, 135.8762 -868, 68.99743, 127.5126 -869, 69.07531, 151.3998 -870, 68.34086, 112.4799 -871, 71.68196, 156.7554 -872, 68.77664, 138.2098 -873, 66.18191, 109.5685 -874, 72.37092, 139.9742 -875, 66.85155, 124.5873 -876, 65.75688, 130.5023 -877, 69.69245, 151.0783 -878, 66.27915, 108.7722 -879, 66.47752, 105.9927 -880, 68.71912, 143.4301 -881, 68.29244, 114.7434 -882, 67.66696, 123.7736 -883, 71.29885, 139.4769 -884, 67.07369, 115.8201 -885, 70.68048, 146.5682 -886, 71.40114, 153.9993 -887, 71.00392, 137.5899 -888, 66.2799, 125.9287 -889, 68.05383, 139.6939 -890, 64.16346, 126.3585 -891, 66.87966, 113.9307 -892, 70.52968, 129.7605 -893, 65.45595, 116.1925 -894, 69.11331, 139.1294 -895, 67.94221, 126.9815 -896, 67.2132, 125.8352 -897, 67.6372, 113.524 -898, 70.09365, 123.2372 -899, 64.41354, 123.0554 -900, 69.77698, 128.133 -901, 66.58181, 127.9357 -902, 68.14995, 110.4678 -903, 66.18165, 127.9364 -904, 66.79412, 118.1678 -905, 67.1657, 129.7243 -906, 68.01904, 130.6094 -907, 66.95837, 105.0414 -908, 68.70397, 122.6299 -909, 69.68057, 138.3259 -910, 66.52793, 107.7381 -911, 66.46981, 141.4417 -912, 71.44643, 153.6966 -913, 66.62648, 134.5551 -914, 64.01015, 109.6593 -915, 65.03312, 117.2029 -916, 66.77216, 124.2843 -917, 68.91932, 125.2193 -918, 71.22926, 133.2256 -919, 71.10332, 122.6042 -920, 69.80699, 134.8652 -921, 67.09127, 111.4506 -922, 67.27958, 116.8458 -923, 71.86593, 143.1527 -924, 67.20197, 99.92383 -925, 68.44108, 127.9232 -926, 67.20278, 136.658 -927, 69.36588, 145.3947 -928, 69.0416, 126.6818 -929, 65.9056, 128.1983 -930, 66.44766, 122.8328 -931, 66.08009, 133.2571 -932, 69.35367, 116.7606 -933, 70.83359, 144.0455 -934, 67.664, 132.5153 -935, 65.30966, 123.9832 -936, 66.66817, 113.1423 -937, 66.93271, 123.9512 -938, 67.73938, 133.9787 -939, 64.27722, 128.1519 -940, 66.83442, 121.2878 -941, 65.89728, 122.7107 -942, 67.6564, 125.4136 -943, 68.68966, 124.8761 -944, 66.08003, 116.5903 -945, 66.91344, 129.889 -946, 69.48392, 123.889 -947, 68.60001, 137.6571 -948, 69.21225, 130.8805 -949, 67.63342, 141.9706 -950, 65.73405, 125.7334 -951, 66.09947, 104.4108 -952, 67.65293, 117.0685 -953, 67.59619, 131.7669 -954, 69.57859, 125.4738 -955, 66.08879, 129.5734 -956, 70.08026, 130.1053 -957, 65.00956, 131.9305 -958, 69.16464, 142.4645 -959, 69.61276, 127.6431 -960, 71.48367, 153.3153 -961, 69.47413, 126.7609 -962, 69.0027, 114.0258 -963, 69.5581, 133.9684 -964, 68.63746, 127.5869 -965, 67.20262, 126.4859 -966, 66.07614, 120.7651 -967, 66.18342, 126.6479 -968, 70.80778, 133.0747 -969, 67.158, 125.9649 -970, 65.2973, 121.3206 -971, 69.23494, 129.7824 -972, 68.90768, 130.0549 -973, 72.3478, 123.4005 -974, 68.29557, 137.2791 -975, 68.34735, 127.7554 -976, 67.46476, 133.6853 -977, 68.86803, 113.9275 -978, 66.62471, 135.6168 -979, 64.77193, 122.6005 -980, 67.70647, 118.9472 -981, 72.992, 134.2703 -982, 70.95194, 124.2747 -983, 67.95677, 130.6981 -984, 67.20959, 124.6797 -985, 66.36959, 129.0839 -986, 67.63896, 121.9456 -987, 69.74444, 126.2689 -988, 68.17532, 134.6122 -989, 66.89711, 131.8476 -990, 67.4966, 103.5828 -991, 66.51569, 116.3925 -992, 66.88332, 123.5095 -993, 69.7277, 150.3395 -994, 69.78345, 135.2437 -995, 65.40046, 112.4584 -996, 67.99831, 137.4861 -997, 72.25581, 132.7902 -998, 70.79562, 126.0286 -999, 65.18786, 141.3591 -1000, 67.7123, 135.9065 -1001, 70.05146, 134.6655 -1002, 67.30497, 122.0232 -1003, 66.39813, 128.3502 -1004, 69.73637, 130.6354 -1005, 68.71659, 131.717 -1006, 63.88437, 108.6132 -1007, 68.40851, 114.5673 -1008, 67.93251, 133.5136 -1009, 70.69674, 135.8641 -1010, 68.95083, 148.1093 -1011, 66.49457, 123.5179 -1012, 68.59369, 120.8406 -1013, 66.26442, 116.2666 -1014, 69.58656, 123.8986 -1015, 67.35651, 119.32 -1016, 69.68727, 119.4097 -1017, 68.44046, 124.5933 -1018, 68.47973, 130.8802 -1019, 65.45463, 118.2058 -1020, 66.8085, 109.6357 -1021, 70.05212, 140.2298 -1022, 67.43558, 121.5764 -1023, 66.54306, 98.30262 -1024, 67.32353, 117.6173 -1025, 67.9725, 136.5104 -1026, 69.03858, 148.9791 -1027, 67.69453, 123.9665 -1028, 69.30508, 133.5957 -1029, 65.39643, 117.2334 -1030, 68.35638, 123.5943 -1031, 65.36888, 117.7674 -1032, 68.36499, 137.2321 -1033, 71.15702, 129.1996 -1034, 69.25532, 142.4032 -1035, 66.6984, 128.4838 -1036, 69.17548, 115.3008 -1037, 68.31559, 119.5309 -1038, 67.81616, 121.7224 -1039, 68.56123, 142.8442 -1040, 66.23085, 110.1171 -1041, 68.95099, 122.0958 -1042, 67.86761, 124.8188 -1043, 68.05498, 119.3169 -1044, 67.73986, 132.4571 -1045, 69.83641, 133.0316 -1046, 70.68574, 160.8831 -1047, 64.54385, 119.127 -1048, 67.93112, 138.516 -1049, 67.77291, 124.8232 -1050, 69.41312, 135.9744 -1051, 67.77213, 116.2254 -1052, 67.79965, 139.2002 -1053, 67.98313, 137.983 -1054, 69.97983, 144.5084 -1055, 63.83261, 109.1938 -1056, 65.57212, 127.228 -1057, 69.34307, 124.5517 -1058, 67.28398, 114.926 -1059, 68.7435, 132.5027 -1060, 69.03112, 125.3892 -1061, 69.64426, 128.4988 -1062, 66.70052, 117.7319 -1063, 67.9143, 112.9531 -1064, 64.36849, 126.1835 -1065, 65.87507, 118.7934 -1066, 67.07427, 125.4388 -1067, 69.34545, 124.9451 -1068, 69.83212, 145.5139 -1069, 66.10245, 116.7836 -1070, 69.26205, 132.5216 -1071, 68.33525, 114.8933 -1072, 69.38017, 122.8594 -1073, 69.12887, 130.5782 -1074, 68.44658, 119.1058 -1075, 66.34542, 133.8204 -1076, 70.03275, 128.5779 -1077, 70.16523, 139.0179 -1078, 68.18324, 101.2876 -1079, 70.12378, 140.958 -1080, 68.4296, 134.6146 -1081, 66.43974, 129.9482 -1082, 71.72703, 139.064 -1083, 70.72387, 135.1996 -1084, 68.09022, 129.682 -1085, 70.12976, 129.1395 -1086, 66.05393, 129.0051 -1087, 69.77059, 112.7357 -1088, 68.15816, 126.1123 -1089, 69.91372, 118.3724 -1090, 65.34461, 122.9731 -1091, 68.35621, 130.3663 -1092, 64.50585, 114.226 -1093, 67.95491, 115.7854 -1094, 68.57621, 137.9526 -1095, 68.12257, 112.2435 -1096, 68.77583, 137.237 -1097, 67.92593, 124.9418 -1098, 69.1484, 135.0961 -1099, 63.20539, 114.4199 -1100, 69.2442, 122.1823 -1101, 65.88645, 129.375 -1102, 67.85186, 129.9448 -1103, 65.57418, 140.4557 -1104, 66.70819, 120.8977 -1105, 69.172, 129.159 -1106, 69.23593, 137.1397 -1107, 67.57232, 145.2218 -1108, 69.50518, 140.0956 -1109, 70.60288, 124.12 -1110, 66.54152, 135.6875 -1111, 69.11494, 127.756 -1112, 69.951, 144.0475 -1113, 67.70347, 131.9333 -1114, 69.19028, 135.5263 -1115, 67.8047, 151.3579 -1116, 67.62532, 124.7073 -1117, 70.36898, 135.274 -1118, 71.02595, 136.5388 -1119, 69.8452, 137.8778 -1120, 67.08638, 114.2066 -1121, 68.62013, 141.5844 -1122, 64.37275, 111.0969 -1123, 65.93523, 126.3868 -1124, 65.24285, 132.8885 -1125, 70.51481, 144.7904 -1126, 66.61129, 108.3859 -1127, 67.13394, 124.1348 -1128, 66.77634, 129.4462 -1129, 67.69385, 131.3339 -1130, 67.82809, 111.6411 -1131, 66.63254, 111.6422 -1132, 67.62229, 140.3178 -1133, 69.66798, 125.5286 -1134, 62.75039, 114.49 -1135, 64.53878, 113.998 -1136, 68.01929, 117.1931 -1137, 66.38551, 138.3156 -1138, 70.18724, 122.3712 -1139, 64.646, 132.9431 -1140, 67.48819, 124.0449 -1141, 72.01807, 144.1591 -1142, 66.61356, 115.4581 -1143, 65.81803, 116.5192 -1144, 71.16185, 139.6139 -1145, 68.51977, 133.2364 -1146, 64.96088, 120.025 -1147, 66.88268, 123.1111 -1148, 70.3531, 132.8462 -1149, 67.71744, 120.9359 -1150, 66.03333, 129.7702 -1151, 68.9826, 136.9118 -1152, 68.60237, 131.121 -1153, 66.8408, 133.484 -1154, 68.03659, 136.3871 -1155, 64.79586, 131.4559 -1156, 70.55126, 126.1986 -1157, 68.28166, 115.046 -1158, 68.77574, 130.3178 -1159, 67.09315, 131.6954 -1160, 70.14303, 135.6519 -1161, 65.46833, 120.3029 -1162, 69.02275, 129.1442 -1163, 74.24899, 150.2167 -1164, 64.08575, 120.2076 -1165, 67.57977, 132.153 -1166, 69.19395, 132.1247 -1167, 64.48615, 119.5029 -1168, 68.75888, 136.7629 -1169, 68.45184, 147.7846 -1170, 66.44205, 145.5992 -1171, 70.1756, 124.9662 -1172, 67.1386, 127.902 -1173, 66.91548, 125.9147 -1174, 68.63357, 109.6821 -1175, 66.95697, 107.7733 -1176, 69.97351, 134.1099 -1177, 66.92568, 134.901 -1178, 68.76347, 139.6364 -1179, 67.40692, 127.0273 -1180, 65.74615, 134.7717 -1181, 65.88357, 99.97124 -1182, 66.77623, 129.4522 -1183, 66.9622, 129.3592 -1184, 63.46642, 103.6594 -1185, 68.35224, 115.7327 -1186, 64.43147, 104.8874 -1187, 63.52175, 131.0054 -1188, 66.86196, 129.0709 -1189, 65.53651, 102.5494 -1190, 71.82306, 133.2257 -1191, 68.86538, 146.3008 -1192, 70.79207, 140.8125 -1193, 69.02139, 132.4618 -1194, 67.3527, 118.8437 -1195, 66.3294, 133.4495 -1196, 67.75792, 134.882 -1197, 68.64796, 129.6789 -1198, 68.18784, 136.7318 -1199, 71.53978, 133.9981 -1200, 68.58959, 128.1324 -1201, 71.33959, 130.2482 -1202, 67.18757, 130.2934 -1203, 67.70033, 128.3208 -1204, 64.13048, 134.0501 -1205, 69.90087, 140.5808 -1206, 66.72044, 115.1936 -1207, 69.3532, 135.8445 -1208, 69.70788, 142.8508 -1209, 67.73755, 143.0931 -1210, 68.16879, 114.9519 -1211, 71.94697, 149.4261 -1212, 67.37481, 132.0558 -1213, 65.34039, 127.0174 -1214, 65.63768, 103.3615 -1215, 68.91559, 125.3216 -1216, 65.44571, 130.6423 -1217, 68.11726, 124.3662 -1218, 69.52284, 140.6019 -1219, 69.40202, 124.229 -1220, 70.00803, 132.9642 -1221, 68.59817, 130.2067 -1222, 64.76508, 106.6241 -1223, 67.52805, 108.9888 -1224, 66.71974, 109.9473 -1225, 67.94808, 124.363 -1226, 69.09682, 131.5021 -1227, 70.04724, 137.4264 -1228, 67.92097, 116.0228 -1229, 67.99135, 117.9061 -1230, 68.92023, 116.7259 -1231, 66.75149, 115.4633 -1232, 68.07152, 129.9734 -1233, 68.75961, 148.9128 -1234, 70.93048, 126.0818 -1235, 68.29873, 115.4952 -1236, 69.25316, 158.7833 -1237, 68.39327, 141.2064 -1238, 68.48007, 129.838 -1239, 69.47286, 137.0682 -1240, 66.33003, 123.2428 -1241, 66.88679, 117.9651 -1242, 65.20091, 102.4998 -1243, 68.37273, 130.6338 -1244, 67.10601, 144.6224 -1245, 62.64242, 100.1982 -1246, 69.06906, 120.2937 -1247, 71.15727, 144.3108 -1248, 68.93324, 114.8805 -1249, 68.10686, 141.5328 -1250, 64.45765, 114.6963 -1251, 65.96736, 121.6607 -1252, 68.73038, 119.3241 -1253, 70.53564, 135.206 -1254, 67.40711, 115.9409 -1255, 66.11309, 123.2264 -1256, 69.47433, 133.0619 -1257, 70.95476, 136.3442 -1258, 65.56715, 124.1401 -1259, 65.49243, 116.2944 -1260, 68.89342, 133.1669 -1261, 67.59755, 137.941 -1262, 66.1724, 133.3173 -1263, 68.70371, 114.2219 -1264, 65.47651, 137.6516 -1265, 67.72604, 131.5375 -1266, 70.02202, 137.2221 -1267, 69.72107, 135.1331 -1268, 67.90954, 113.9257 -1269, 65.61306, 132.5883 -1270, 71.40631, 133.5753 -1271, 66.27843, 106.7793 -1272, 65.0276, 95.18466 -1273, 65.68922, 114.2675 -1274, 66.85743, 126.4804 -1275, 68.23, 126.7087 -1276, 66.12036, 110.9096 -1277, 71.32591, 132.3678 -1278, 70.2075, 133.7174 -1279, 71.03619, 144.0125 -1280, 68.18528, 129.9098 -1281, 68.99195, 106.5697 -1282, 67.95745, 121.9433 -1283, 69.49971, 118.1623 -1284, 67.12538, 106.6739 -1285, 67.75678, 128.444 -1286, 67.67958, 127.4595 -1287, 64.71984, 102.93 -1288, 69.72873, 127.8299 -1289, 68.50234, 139.7868 -1290, 70.56446, 133.2813 -1291, 66.58715, 120.2949 -1292, 63.80202, 102.4047 -1293, 66.38836, 134.2056 -1294, 66.7895, 121.4804 -1295, 66.99003, 108.2574 -1296, 72.61998, 145.8469 -1297, 67.80601, 114.9258 -1298, 68.63913, 124.6757 -1299, 65.81803, 113.619 -1300, 66.5755, 126.2651 -1301, 66.40067, 124.0382 -1302, 66.75992, 120.554 -1303, 69.02475, 124.4235 -1304, 70.24902, 130.1726 -1305, 70.18308, 137.2733 -1306, 67.63509, 126.9051 -1307, 66.43547, 118.2885 -1308, 67.50559, 119.6817 -1309, 68.19559, 134.332 -1310, 66.32293, 120.0364 -1311, 70.33673, 140.2713 -1312, 67.9766, 139.4025 -1313, 66.07451, 105.1086 -1314, 68.00118, 140.3289 -1315, 65.48497, 139.7691 -1316, 66.99532, 118.4896 -1317, 69.89331, 121.8301 -1318, 68.03229, 130.3482 -1319, 70.00989, 138.2214 -1320, 66.91337, 119.9847 -1321, 71.43101, 141.5275 -1322, 64.42386, 128.0746 -1323, 68.63254, 122.6639 -1324, 70.14808, 135.5841 -1325, 69.94628, 158.7993 -1326, 66.40808, 103.1971 -1327, 65.27161, 122.9332 -1328, 67.02796, 119.343 -1329, 66.333, 139.5722 -1330, 70.05322, 124.1145 -1331, 71.49315, 132.5483 -1332, 67.11911, 116.0712 -1333, 72.52115, 162.8737 -1334, 68.59945, 131.1394 -1335, 66.72202, 124.8745 -1336, 68.33163, 123.738 -1337, 66.52804, 119.0115 -1338, 69.80841, 135.4606 -1339, 70.18855, 139.6563 -1340, 67.70646, 120.3449 -1341, 66.73552, 113.0404 -1342, 68.37589, 115.658 -1343, 68.14008, 128.6282 -1344, 65.33269, 96.52385 -1345, 68.27634, 122.6695 -1346, 69.17767, 129.3968 -1347, 66.47919, 128.8422 -1348, 66.27731, 133.0853 -1349, 67.80211, 130.1248 -1350, 72.66613, 138.9119 -1351, 70.62111, 138.9252 -1352, 67.45131, 105.9085 -1353, 68.51925, 135.4393 -1354, 72.05853, 147.3129 -1355, 64.71472, 108.7636 -1356, 66.49054, 128.9625 -1357, 71.9151, 147.7867 -1358, 68.37932, 128.5716 -1359, 69.44208, 127.4285 -1360, 65.67788, 128.9123 -1361, 67.97944, 123.3621 -1362, 68.18702, 122.0501 -1363, 67.96766, 159.6644 -1364, 67.69418, 121.5022 -1365, 66.85727, 124.3686 -1366, 68.50423, 130.5608 -1367, 66.46892, 117.7781 -1368, 70.53609, 147.1473 -1369, 68.60163, 128.6512 -1370, 67.13712, 115.6854 -1371, 63.82574, 104.102 -1372, 67.39413, 122.4406 -1373, 71.3131, 124.6131 -1374, 67.98003, 100.4089 -1375, 67.8037, 131.8038 -1376, 71.05584, 134.7575 -1377, 70.6785, 148.5516 -1378, 69.45454, 151.3435 -1379, 67.75404, 121.4032 -1380, 66.37759, 132.7138 -1381, 66.90907, 118.1243 -1382, 67.36022, 120.412 -1383, 70.03559, 141.4458 -1384, 74.19488, 129.0597 -1385, 68.44192, 129.3121 -1386, 68.86465, 148.5716 -1387, 66.41874, 112.319 -1388, 68.58215, 130.0932 -1389, 69.01529, 123.1712 -1390, 64.12752, 99.36058 -1391, 72.58824, 139.1404 -1392, 69.53845, 131.9771 -1393, 69.32255, 127.7025 -1394, 67.26117, 136.8449 -1395, 68.8089, 126.4916 -1396, 65.83333, 111.1847 -1397, 69.14631, 128.5255 -1398, 66.76436, 123.1419 -1399, 68.10866, 141.374 -1400, 66.52579, 127.0178 -1401, 66.72267, 118.0513 -1402, 66.66847, 115.3536 -1403, 66.13808, 136.9275 -1404, 68.04169, 126.5685 -1405, 67.37032, 129.216 -1406, 68.37927, 142.1694 -1407, 68.64261, 136.578 -1408, 67.06567, 121.962 -1409, 69.29222, 146.9053 -1410, 69.97624, 142.657 -1411, 68.36664, 140.2292 -1412, 68.2079, 109.8398 -1413, 67.34824, 134.8916 -1414, 65.91384, 127.6066 -1415, 67.37608, 108.9719 -1416, 70.77374, 138.4284 -1417, 72.8469, 151.4509 -1418, 64.95583, 130.0036 -1419, 68.67514, 113.0897 -1420, 68.73548, 129.1464 -1421, 67.33471, 133.1919 -1422, 66.68746, 124.866 -1423, 65.85168, 121.4815 -1424, 70.81582, 137.8631 -1425, 65.09564, 125.8314 -1426, 70.61931, 135.3299 -1427, 67.96031, 107.3931 -1428, 70.68803, 144.1915 -1429, 66.34093, 100.5991 -1430, 71.98092, 130.1721 -1431, 70.17314, 140.8988 -1432, 70.63179, 143.6734 -1433, 64.87469, 90.29334 -1434, 69.62426, 130.4148 -1435, 65.17407, 123.8754 -1436, 69.09608, 154.0757 -1437, 71.81975, 137.4948 -1438, 68.66104, 141.8174 -1439, 67.17895, 126.8401 -1440, 68.00257, 131.9545 -1441, 70.77144, 120.9803 -1442, 68.82564, 119.7816 -1443, 70.04554, 127.7472 -1444, 68.95339, 134.2469 -1445, 64.41355, 108.5235 -1446, 63.82854, 125.0611 -1447, 68.3559, 123.0197 -1448, 69.25516, 129.8861 -1449, 73.38109, 154.8178 -1450, 69.36199, 151.9248 -1451, 70.71977, 135.6969 -1452, 67.59075, 127.2047 -1453, 70.98644, 137.876 -1454, 67.73825, 124.4771 -1455, 71.10527, 154.6002 -1456, 71.95975, 134.0699 -1457, 65.74155, 117.4639 -1458, 65.64344, 128.3519 -1459, 68.37038, 118.1031 -1460, 70.50701, 127.8238 -1461, 66.43263, 129.914 -1462, 66.60278, 131.3221 -1463, 68.03472, 128.1544 -1464, 69.83384, 122.8347 -1465, 68.22043, 143.5868 -1466, 67.78035, 106.5681 -1467, 67.1894, 124.9457 -1468, 66.17013, 113.6761 -1469, 65.98555, 105.4988 -1470, 70.37458, 125.3804 -1471, 66.98272, 120.0159 -1472, 69.07135, 135.0513 -1473, 64.39778, 112.0501 -1474, 70.30031, 126.6445 -1475, 68.46686, 126.7371 -1476, 68.07287, 138.6844 -1477, 69.65267, 143.346 -1478, 67.85116, 124.6758 -1479, 68.81195, 119.2154 -1480, 68.88093, 129.5162 -1481, 71.2914, 141.2136 -1482, 64.93822, 124.9304 -1483, 64.39593, 117.6936 -1484, 67.61191, 128.117 -1485, 65.36431, 125.507 -1486, 68.57192, 139.9115 -1487, 69.63015, 132.5572 -1488, 64.66196, 129.5233 -1489, 71.18005, 139.3905 -1490, 65.6959, 121.712 -1491, 66.05318, 122.7607 -1492, 67.04924, 117.4026 -1493, 68.42541, 135.9146 -1494, 68.54306, 123.838 -1495, 65.95454, 102.8468 -1496, 66.95297, 119.3281 -1497, 64.91704, 104.4281 -1498, 66.59452, 129.2376 -1499, 68.17706, 138.2296 -1500, 69.573, 138.6461 -1501, 71.65878, 130.4121 -1502, 65.06775, 124.4317 -1503, 66.85523, 127.9011 -1504, 67.84366, 125.2683 -1505, 69.22848, 121.1672 -1506, 69.75159, 128.1437 -1507, 67.48764, 121.494 -1508, 68.12465, 129.3746 -1509, 68.50207, 127.4765 -1510, 67.50188, 113.1406 -1511, 68.83511, 132.5812 -1512, 65.40895, 110.5741 -1513, 68.31175, 139.194 -1514, 68.78411, 128.757 -1515, 65.39974, 132.9714 -1516, 66.754, 125.0153 -1517, 65.37482, 95.80713 -1518, 70.65043, 152.9084 -1519, 70.97634, 121.217 -1520, 66.75895, 127.448 -1521, 66.26857, 120.2754 -1522, 67.34174, 127.4945 -1523, 67.39093, 111.026 -1524, 71.04158, 153.5447 -1525, 63.7418, 110.9415 -1526, 66.91954, 121.0967 -1527, 65.84956, 123.5086 -1528, 67.03723, 116.363 -1529, 67.92717, 134.9384 -1530, 66.72742, 113.8451 -1531, 66.34696, 113.0531 -1532, 66.53015, 127.5692 -1533, 68.60951, 125.1506 -1534, 66.11208, 115.4493 -1535, 67.01143, 138.9409 -1536, 70.45763, 133.292 -1537, 65.3277, 130.5079 -1538, 67.28212, 114.2578 -1539, 70.37548, 137.6167 -1540, 68.04608, 114.5218 -1541, 70.36839, 139.4884 -1542, 68.38089, 124.6962 -1543, 67.78852, 130.045 -1544, 69.77907, 141.782 -1545, 69.59613, 125.4556 -1546, 67.9806, 119.1796 -1547, 65.84256, 107.0361 -1548, 66.99247, 125.3591 -1549, 63.54764, 115.7565 -1550, 71.50943, 128.7986 -1551, 69.94093, 129.3747 -1552, 71.21029, 145.662 -1553, 71.56281, 123.6062 -1554, 65.31159, 124.6278 -1555, 65.18491, 122.7439 -1556, 65.25283, 120.2892 -1557, 67.46596, 128.6295 -1558, 67.27426, 111.5271 -1559, 64.97376, 117.7437 -1560, 64.60687, 109.4645 -1561, 69.736, 132.9405 -1562, 67.7749, 124.1881 -1563, 69.30528, 136.8094 -1564, 71.38338, 143.1901 -1565, 65.60915, 117.3002 -1566, 66.23041, 130.8166 -1567, 66.53307, 137.4417 -1568, 67.51649, 128.97 -1569, 67.72325, 114.6422 -1570, 68.57113, 138.4685 -1571, 66.23808, 123.19 -1572, 67.75308, 121.9934 -1573, 68.2829, 149.3778 -1574, 68.40175, 137.21 -1575, 66.09433, 138.6653 -1576, 70.03545, 118.8309 -1577, 65.46717, 116.7297 -1578, 66.46693, 131.5675 -1579, 67.85512, 129.5762 -1580, 70.36596, 131.4946 -1581, 68.09483, 125.1984 -1582, 70.06267, 131.8467 -1583, 67.65661, 121.0286 -1584, 69.08508, 121.8685 -1585, 68.40932, 147.9118 -1586, 69.12972, 130.6309 -1587, 67.97094, 139.9751 -1588, 67.62895, 126.6522 -1589, 66.80442, 116.7992 -1590, 68.57388, 132.4308 -1591, 67.45375, 130.6493 -1592, 68.6366, 132.6351 -1593, 65.92344, 124.4934 -1594, 70.69799, 129.6396 -1595, 68.09362, 131.2952 -1596, 69.50493, 121.3845 -1597, 67.03953, 116.8423 -1598, 69.04839, 143.4353 -1599, 70.66314, 140.0996 -1600, 67.94574, 127.1524 -1601, 68.5127, 116.4033 -1602, 68.81282, 145.5938 -1603, 67.15097, 136.0613 -1604, 68.34367, 126.2249 -1605, 67.38561, 130.9905 -1606, 64.88607, 131.7105 -1607, 65.5339, 125.1818 -1608, 69.3919, 147.0456 -1609, 66.46889, 109.3503 -1610, 63.25683, 120.7578 -1611, 67.61546, 112.4772 -1612, 69.88085, 138.4517 -1613, 70.15703, 136.7186 -1614, 70.61107, 136.0144 -1615, 71.3845, 148.7104 -1616, 66.53779, 120.4476 -1617, 71.05961, 133.5431 -1618, 67.63928, 140.0484 -1619, 63.8441, 129.0091 -1620, 66.79275, 121.0921 -1621, 68.61061, 125.6694 -1622, 70.40975, 117.6691 -1623, 65.20379, 133.959 -1624, 69.08499, 121.968 -1625, 68.29678, 135.3754 -1626, 65.83832, 111.6269 -1627, 67.18313, 117.3099 -1628, 67.87544, 131.75 -1629, 67.51672, 130.3517 -1630, 67.98827, 124.7463 -1631, 70.33848, 127.5476 -1632, 67.29728, 118.5713 -1633, 65.95685, 118.7344 -1634, 65.2832, 117.239 -1635, 71.86035, 127.4872 -1636, 67.32069, 128.9596 -1637, 68.52503, 147.7036 -1638, 69.74627, 132.158 -1639, 65.75926, 129.6624 -1640, 67.26104, 142.583 -1641, 67.59186, 123.1966 -1642, 65.54701, 114.619 -1643, 70.57745, 134.1679 -1644, 64.93595, 129.3978 -1645, 69.85715, 133.0797 -1646, 70.81884, 130.0722 -1647, 68.30112, 139.2852 -1648, 67.54828, 131.5521 -1649, 71.89737, 135.3276 -1650, 68.81871, 130.5668 -1651, 68.57948, 144.8947 -1652, 66.01716, 121.8662 -1653, 67.25756, 110.649 -1654, 70.5545, 150.0971 -1655, 66.29452, 123.8581 -1656, 68.57082, 128.4226 -1657, 68.60497, 125.197 -1658, 67.99508, 129.7427 -1659, 66.12931, 125.7215 -1660, 66.41232, 132.001 -1661, 68.42482, 140.054 -1662, 66.80813, 114.1178 -1663, 67.72371, 116.1322 -1664, 70.99035, 117.7071 -1665, 67.56098, 131.2855 -1666, 69.12684, 113.6105 -1667, 67.97635, 144.7629 -1668, 66.30036, 141.6047 -1669, 69.30957, 140.0213 -1670, 65.63213, 108.4237 -1671, 66.22333, 117.2512 -1672, 66.74595, 126.77 -1673, 69.66252, 135.074 -1674, 68.21548, 132.0189 -1675, 69.28403, 109.2101 -1676, 69.64359, 127.8589 -1677, 71.48035, 122.0737 -1678, 69.37451, 137.6851 -1679, 65.19039, 127.5918 -1680, 64.02516, 111.5819 -1681, 66.58522, 121.3966 -1682, 65.81355, 138.8427 -1683, 66.10408, 116.5048 -1684, 68.56408, 137.4424 -1685, 67.89191, 121.9768 -1686, 71.42475, 116.8105 -1687, 65.98772, 126.0482 -1688, 70.95594, 114.7284 -1689, 64.37344, 126.7487 -1690, 69.76692, 131.342 -1691, 66.46755, 119.0926 -1692, 67.76109, 137.8646 -1693, 71.17728, 129.5914 -1694, 67.31413, 128.105 -1695, 70.22181, 137.4504 -1696, 69.28985, 129.6324 -1697, 66.35778, 133.4823 -1698, 69.27648, 124.7911 -1699, 66.3778, 113.9428 -1700, 63.24012, 116.8399 -1701, 69.18211, 138.7521 -1702, 69.11432, 125.4607 -1703, 67.48024, 130.5948 -1704, 69.75327, 134.2699 -1705, 69.62313, 143.4724 -1706, 65.95463, 142.254 -1707, 68.89125, 139.8464 -1708, 67.23829, 132.4897 -1709, 67.73728, 138.5529 -1710, 68.72443, 123.1153 -1711, 65.20195, 132.6998 -1712, 66.2865, 106.6149 -1713, 68.01878, 134.9917 -1714, 66.89261, 130.92 -1715, 67.79814, 122.4887 -1716, 66.6555, 136.0645 -1717, 69.77338, 119.5334 -1718, 68.42446, 117.7405 -1719, 65.55531, 115.5734 -1720, 68.34513, 104.7006 -1721, 66.26115, 123.6592 -1722, 66.40599, 138.5289 -1723, 68.64386, 132.2257 -1724, 68.70476, 117.2914 -1725, 68.03119, 141.6933 -1726, 66.25774, 129.6313 -1727, 64.0967, 94.51219 -1728, 67.0669, 120.6412 -1729, 65.80509, 121.3762 -1730, 68.05092, 133.2667 -1731, 67.52718, 127.9032 -1732, 66.35888, 123.3962 -1733, 70.87196, 136.9675 -1734, 68.29448, 114.1357 -1735, 67.0344, 118.0845 -1736, 70.91179, 121.8608 -1737, 68.77458, 145.5199 -1738, 68.8064, 128.9862 -1739, 66.80841, 110.4729 -1740, 65.02676, 126.9126 -1741, 71.83389, 141.1132 -1742, 67.41125, 138.183 -1743, 68.8635, 132.6335 -1744, 66.39633, 127.2025 -1745, 67.90122, 146.2561 -1746, 69.04019, 141.6517 -1747, 66.26552, 126.5209 -1748, 68.4645, 121.554 -1749, 66.8815, 116.5904 -1750, 71.36376, 139.0275 -1751, 66.06344, 116.2031 -1752, 66.64834, 115.7431 -1753, 67.3297, 116.8138 -1754, 68.20575, 138.6574 -1755, 69.59793, 108.5229 -1756, 67.50819, 133.6747 -1757, 68.00385, 128.0916 -1758, 69.51431, 128.6687 -1759, 68.00582, 115.4484 -1760, 67.59357, 125.0018 -1761, 69.78942, 136.4816 -1762, 72.36491, 121.9301 -1763, 68.13393, 126.8874 -1764, 67.83776, 119.9595 -1765, 68.87619, 142.2743 -1766, 66.04124, 129.9792 -1767, 65.81569, 131.1604 -1768, 69.22762, 128.8601 -1769, 64.72395, 111.9433 -1770, 68.48588, 132.3867 -1771, 68.28041, 134.2844 -1772, 65.5087, 127.6919 -1773, 66.73361, 114.5415 -1774, 69.20114, 138.1499 -1775, 71.44618, 140.358 -1776, 70.08869, 125.9099 -1777, 69.6745, 134.4383 -1778, 71.68575, 136.6572 -1779, 71.09849, 123.5248 -1780, 67.65215, 130.345 -1781, 70.41131, 149.8413 -1782, 68.33638, 115.5647 -1783, 64.72321, 109.6661 -1784, 64.6035, 108.8823 -1785, 66.92416, 112.3914 -1786, 68.46553, 130.0139 -1787, 67.19789, 136.8066 -1788, 67.78929, 111.1892 -1789, 66.6783, 119.3179 -1790, 67.38496, 120.1224 -1791, 68.00018, 124.093 -1792, 65.27378, 117.8442 -1793, 69.14142, 142.1545 -1794, 67.46178, 122.3342 -1795, 68.87277, 115.7081 -1796, 68.02365, 136.5833 -1797, 70.33914, 120.5965 -1798, 68.05498, 121.269 -1799, 66.63059, 133.5937 -1800, 66.23781, 127.541 -1801, 70.68625, 139.1153 -1802, 67.92487, 140.4052 -1803, 67.98283, 124.3543 -1804, 67.83966, 136.9707 -1805, 70.87256, 136.9799 -1806, 68.67371, 129.9913 -1807, 65.63433, 113.6199 -1808, 66.98566, 127.6126 -1809, 69.39665, 117.966 -1810, 67.97483, 127.2407 -1811, 69.02449, 123.8412 -1812, 65.06479, 121.2687 -1813, 68.67376, 118.5378 -1814, 67.57063, 115.4182 -1815, 66.86965, 131.2651 -1816, 66.42749, 110.3212 -1817, 68.42186, 129.2128 -1818, 69.83543, 140.8802 -1819, 66.38544, 121.1068 -1820, 69.67951, 134.4281 -1821, 66.10079, 116.2489 -1822, 65.82617, 117.8009 -1823, 68.71368, 126.455 -1824, 71.38503, 137.1076 -1825, 69.73254, 152.1776 -1826, 68.37367, 128.6175 -1827, 65.05453, 113.9725 -1828, 64.38195, 105.9582 -1829, 69.22384, 134.3052 -1830, 66.67906, 132.4565 -1831, 69.15689, 134.3756 -1832, 67.53215, 146.8833 -1833, 70.71198, 131.2724 -1834, 69.06844, 132.9619 -1835, 66.36641, 140.4684 -1836, 69.74416, 144.838 -1837, 69.72221, 129.261 -1838, 67.005, 138.036 -1839, 68.39904, 125.5747 -1840, 65.72237, 129.4743 -1841, 70.41527, 129.4677 -1842, 66.08413, 105.1944 -1843, 66.34093, 125.2679 -1844, 65.25134, 128.237 -1845, 67.53562, 123.3362 -1846, 68.21037, 110.8623 -1847, 67.41542, 114.4586 -1848, 69.8279, 137.2435 -1849, 66.30495, 125.8706 -1850, 69.06175, 140.8451 -1851, 69.64603, 131.2554 -1852, 70.75572, 140.12 -1853, 67.51414, 138.8613 -1854, 67.50856, 117.374 -1855, 67.30225, 109.9978 -1856, 67.76966, 129.4122 -1857, 70.13058, 135.1643 -1858, 66.28125, 108.1378 -1859, 72.48112, 146.3046 -1860, 66.93464, 127.6499 -1861, 67.24385, 133.5096 -1862, 69.30013, 124.8396 -1863, 71.68649, 123.4209 -1864, 69.69329, 125.1731 -1865, 68.22858, 116.5013 -1866, 70.77195, 124.5635 -1867, 69.63875, 132.8562 -1868, 67.5239, 124.2136 -1869, 70.26869, 137.6254 -1870, 67.32622, 112.2365 -1871, 65.82766, 117.92 -1872, 67.28046, 107.1366 -1873, 68.47687, 127.8631 -1874, 66.16499, 119.5914 -1875, 71.12585, 129.7663 -1876, 67.51094, 126.2753 -1877, 67.98365, 120.6916 -1878, 70.76255, 147.2496 -1879, 68.13751, 123.8089 -1880, 69.7139, 124.9097 -1881, 69.28011, 129.2576 -1882, 67.72134, 133.2142 -1883, 71.35771, 134.9818 -1884, 65.01169, 115.4612 -1885, 66.57282, 114.2201 -1886, 66.2121, 126.4372 -1887, 68.42587, 121.5315 -1888, 68.25899, 137.3384 -1889, 71.66231, 130.1496 -1890, 70.73674, 149.3463 -1891, 68.81489, 131.8088 -1892, 67.8052, 124.5172 -1893, 67.28023, 124.094 -1894, 75.1528, 146.9701 -1895, 70.18385, 135.8346 -1896, 70.11018, 121.4131 -1897, 67.55479, 131.3549 -1898, 65.19685, 135.1309 -1899, 71.09811, 141.27 -1900, 63.42211, 106.4187 -1901, 69.87338, 140.1507 -1902, 67.2773, 140.0055 -1903, 66.189, 124.8413 -1904, 65.71651, 134.9238 -1905, 68.09428, 136.0939 -1906, 69.12266, 133.6055 -1907, 69.44989, 114.209 -1908, 67.09671, 144.4419 -1909, 68.50605, 127.578 -1910, 68.14059, 114.5292 -1911, 66.53479, 118.9804 -1912, 67.30796, 118.8584 -1913, 66.46388, 114.4406 -1914, 68.23072, 117.1258 -1915, 70.06314, 139.3579 -1916, 69.26881, 141.7621 -1917, 70.1554, 117.3159 -1918, 66.0776, 136.9107 -1919, 68.95747, 130.915 -1920, 66.76727, 124.4251 -1921, 69.8097, 141.0605 -1922, 67.93231, 125.3143 -1923, 69.44794, 151.3939 -1924, 71.14183, 118.1643 -1925, 66.84818, 114.446 -1926, 67.75431, 118.5776 -1927, 70.83193, 129.1185 -1928, 69.21843, 126.5898 -1929, 68.20571, 133.0472 -1930, 67.32344, 133.0028 -1931, 67.46411, 130.5289 -1932, 67.70673, 110.4494 -1933, 68.5877, 131.6199 -1934, 70.18028, 142.8787 -1935, 69.85138, 137.0263 -1936, 68.82396, 141.9518 -1937, 68.58454, 123.7734 -1938, 66.17491, 121.7871 -1939, 68.29599, 112.7853 -1940, 66.01446, 121.0144 -1941, 70.42725, 124.4965 -1942, 65.95003, 125.2296 -1943, 67.28507, 121.1903 -1944, 70.23598, 140.1737 -1945, 66.37594, 136.5133 -1946, 65.72229, 124.2645 -1947, 72.69022, 150.1384 -1948, 65.52858, 107.7887 -1949, 68.71508, 128.8673 -1950, 69.34245, 133.2224 -1951, 67.38242, 125.7706 -1952, 68.05083, 130.8925 -1953, 69.86498, 151.5925 -1954, 64.51717, 114.9571 -1955, 69.20595, 139.6118 -1956, 67.98607, 127.7814 -1957, 70.14776, 139.3701 -1958, 70.4986, 130.907 -1959, 66.86758, 134.945 -1960, 68.64908, 104.7127 -1961, 67.91149, 113.4475 -1962, 69.24385, 116.3492 -1963, 64.48072, 109.5586 -1964, 71.64447, 126.9269 -1965, 70.04642, 146.8967 -1966, 68.12343, 126.8031 -1967, 65.23383, 122.345 -1968, 68.27239, 127.8701 -1969, 66.17894, 124.9103 -1970, 65.83059, 123.0154 -1971, 65.62889, 107.4306 -1972, 70.92752, 111.6473 -1973, 69.29069, 130.6183 -1974, 69.91684, 132.766 -1975, 72.73301, 125.9357 -1976, 68.44904, 113.1008 -1977, 66.49335, 123.1309 -1978, 72.21533, 122.7007 -1979, 69.53524, 139.1563 -1980, 64.79882, 122.5688 -1981, 67.38254, 126.915 -1982, 67.65345, 131.7026 -1983, 70.01257, 144.6798 -1984, 66.05945, 133.332 -1985, 65.21051, 109.8084 -1986, 68.39529, 132.9511 -1987, 63.99095, 123.6623 -1988, 70.31847, 120.0304 -1989, 70.15159, 123.1364 -1990, 68.01671, 122.7495 -1991, 68.06098, 125.8274 -1992, 66.98618, 117.2347 -1993, 68.8061, 142.7741 -1994, 70.30067, 114.5538 -1995, 65.68106, 111.1723 -1996, 69.27665, 141.7056 -1997, 71.68898, 126.5743 -1998, 67.17092, 148.2722 -1999, 69.24215, 132.6836 -2000, 68.73563, 126.8221 -2001, 69.00812, 125.4763 -2002, 68.69462, 130.1342 -2003, 68.53874, 123.2715 -2004, 67.68634, 129.9806 -2005, 69.60608, 138.6734 -2006, 68.91393, 130.7056 -2007, 66.17148, 113.3707 -2008, 67.46209, 139.6833 -2009, 72.83513, 148.8002 -2010, 64.01976, 90.91793 -2011, 68.02868, 123.7533 -2012, 68.51623, 132.4995 -2013, 70.88524, 131.3128 -2014, 65.29862, 116.5172 -2015, 65.7635, 109.1144 -2016, 65.46143, 129.339 -2017, 65.99098, 114.6394 -2018, 65.57951, 136.1447 -2019, 69.70616, 144.5925 -2020, 66.1974, 107.9777 -2021, 68.23074, 122.0759 -2022, 65.97964, 123.3232 -2023, 71.26857, 133.6208 -2024, 72.01497, 159.2724 -2025, 68.93137, 148.7762 -2026, 67.36601, 120.2868 -2027, 70.12256, 110.3036 -2028, 68.84918, 137.6134 -2029, 67.62215, 132.4802 -2030, 67.13659, 136.4192 -2031, 70.39143, 137.2703 -2032, 68.68117, 134.8569 -2033, 66.92629, 118.8555 -2034, 69.87266, 144.0381 -2035, 67.94061, 128.518 -2036, 68.495, 125.988 -2037, 69.45516, 121.0884 -2038, 67.72991, 125.3854 -2039, 69.85473, 141.3991 -2040, 66.63111, 141.1397 -2041, 66.36326, 116.8585 -2042, 68.2269, 131.1664 -2043, 68.40577, 134.5811 -2044, 68.44489, 133.1242 -2045, 70.94089, 137.7195 -2046, 69.65687, 130.2491 -2047, 65.06613, 109.5825 -2048, 71.81628, 142.8719 -2049, 65.92674, 101.6217 -2050, 66.52018, 112.3553 -2051, 70.52744, 131.0845 -2052, 66.25032, 131.0484 -2053, 64.72936, 111.5548 -2054, 63.79906, 110.8498 -2055, 65.38373, 127.4708 -2056, 65.57359, 107.7067 -2057, 66.57608, 115.1232 -2058, 67.28745, 112.1197 -2059, 66.14358, 128.0777 -2060, 66.11741, 119.4651 -2061, 67.68233, 124.5983 -2062, 68.74723, 126.0285 -2063, 66.5915, 111.3977 -2064, 65.01782, 127.722 -2065, 69.28345, 124.8207 -2066, 67.19343, 122.9788 -2067, 69.81336, 117.7117 -2068, 66.55388, 120.7289 -2069, 66.14617, 121.3302 -2070, 69.93036, 146.6089 -2071, 66.70056, 126.013 -2072, 67.68095, 128.1474 -2073, 67.87796, 129.5415 -2074, 67.65549, 121.5145 -2075, 71.1713, 157.9626 -2076, 69.01806, 127.8941 -2077, 70.58265, 127.1594 -2078, 70.89693, 140.8109 -2079, 68.51895, 140.1451 -2080, 66.61835, 132.7723 -2081, 66.07169, 116.0089 -2082, 68.1535, 121.2886 -2083, 72.89832, 147.5384 -2084, 69.90164, 138.8642 -2085, 66.50525, 120.8563 -2086, 69.27168, 125.8179 -2087, 70.53643, 135.3753 -2088, 65.1243, 107.6247 -2089, 70.34418, 122.9851 -2090, 69.13083, 131.7164 -2091, 65.21067, 110.3376 -2092, 67.08781, 100.2532 -2093, 64.65639, 106.579 -2094, 66.28071, 121.223 -2095, 71.30341, 130.5588 -2096, 66.91234, 132.6182 -2097, 70.84318, 132.613 -2098, 66.65796, 117.8331 -2099, 64.54303, 94.29987 -2100, 66.43942, 125.1826 -2101, 66.60747, 125.3684 -2102, 66.38807, 117.4577 -2103, 66.85611, 130.8168 -2104, 68.50863, 128.3144 -2105, 63.45049, 118.4083 -2106, 67.54653, 129.4669 -2107, 65.41398, 116.7348 -2108, 66.91885, 146.8505 -2109, 67.59652, 120.2168 -2110, 67.05552, 136.2774 -2111, 68.00153, 130.1697 -2112, 70.33681, 134.8282 -2113, 69.10376, 126.2799 -2114, 68.12704, 142.6738 -2115, 67.5512, 121.2891 -2116, 68.78357, 111.1965 -2117, 66.62497, 130.424 -2118, 67.88387, 138.8309 -2119, 67.75152, 125.105 -2120, 68.3286, 141.6323 -2121, 71.05207, 149.779 -2122, 68.11943, 118.6268 -2123, 66.44223, 119.4357 -2124, 71.4563, 134.9113 -2125, 68.60548, 133.1629 -2126, 70.82734, 147.2884 -2127, 68.89076, 117.6717 -2128, 67.15411, 122.843 -2129, 68.76271, 125.7926 -2130, 70.53185, 143.2531 -2131, 66.47953, 127.2118 -2132, 67.94262, 113.7238 -2133, 68.79538, 130.932 -2134, 69.95518, 129.5075 -2135, 69.99489, 157.6149 -2136, 66.55505, 125.4636 -2137, 65.14815, 105.3601 -2138, 70.40094, 130.4476 -2139, 68.32002, 152.0527 -2140, 65.60842, 143.9545 -2141, 70.63864, 136.1993 -2142, 65.08404, 117.4157 -2143, 64.31842, 114.5616 -2144, 66.0525, 115.1065 -2145, 67.35994, 121.8544 -2146, 70.1376, 150.2085 -2147, 67.49796, 122.1628 -2148, 67.1125, 115.5902 -2149, 67.27925, 133.3105 -2150, 66.55492, 141.4402 -2151, 68.1384, 130.7908 -2152, 68.54096, 143.1515 -2153, 68.52593, 138.0426 -2154, 70.77318, 120.9532 -2155, 66.72984, 104.5502 -2156, 66.30573, 120.3066 -2157, 66.1654, 116.7474 -2158, 65.52686, 127.6185 -2159, 71.0176, 128.7638 -2160, 64.0731, 132.1263 -2161, 67.07894, 136.2565 -2162, 66.92118, 114.2461 -2163, 63.92073, 117.7804 -2164, 66.76895, 121.7656 -2165, 67.31046, 117.4512 -2166, 66.94519, 137.7336 -2167, 69.97793, 133.2135 -2168, 66.4156, 114.16 -2169, 69.46121, 136.8798 -2170, 66.47267, 125.4235 -2171, 67.69989, 121.4915 -2172, 68.6046, 123.3492 -2173, 66.82256, 107.8004 -2174, 66.31555, 117.1775 -2175, 69.11039, 126.3083 -2176, 65.94386, 115.3139 -2177, 69.86148, 143.7522 -2178, 64.55479, 113.2482 -2179, 65.56126, 131.7643 -2180, 65.07865, 125.8387 -2181, 66.30496, 115.8846 -2182, 68.63331, 139.0539 -2183, 67.39243, 121.7331 -2184, 66.73104, 141.1317 -2185, 65.57961, 127.9611 -2186, 67.97668, 132.1352 -2187, 62.60611, 129.76 -2188, 66.26361, 129.4162 -2189, 65.65796, 118.7804 -2190, 66.31902, 105.7105 -2191, 65.15141, 124.8365 -2192, 67.06755, 141.8106 -2193, 68.07294, 123.0209 -2194, 68.73375, 118.3051 -2195, 66.50974, 123.1286 -2196, 71.35483, 125.0842 -2197, 67.36943, 118.0443 -2198, 66.53342, 134.41 -2199, 67.44518, 132.5899 -2200, 69.37871, 123.6421 -2201, 68.47617, 136.737 -2202, 66.81962, 130.4451 -2203, 68.62691, 121.9836 -2204, 70.55478, 124.8816 -2205, 65.26709, 110.6805 -2206, 65.35329, 108.9072 -2207, 65.63866, 129.7145 -2208, 69.57228, 140.2426 -2209, 66.41871, 137.8126 -2210, 68.25694, 140.6602 -2211, 70.74604, 136.5621 -2212, 68.35787, 121.0365 -2213, 69.64013, 141.548 -2214, 65.35452, 137.184 -2215, 71.92675, 156.5442 -2216, 70.13403, 137.22 -2217, 65.16717, 121.5264 -2218, 69.31063, 122.0461 -2219, 66.33317, 131.3132 -2220, 68.65304, 127.5565 -2221, 70.27541, 135.3191 -2222, 67.57713, 128.8936 -2223, 69.1971, 134.756 -2224, 69.6239, 129.9452 -2225, 65.86809, 127.9121 -2226, 69.92456, 134.6123 -2227, 68.42315, 138.5594 -2228, 67.61231, 145.1953 -2229, 68.12858, 113.7951 -2230, 64.76601, 118.6754 -2231, 65.33382, 129.7622 -2232, 67.64472, 133.5081 -2233, 69.06267, 139.8787 -2234, 67.17574, 117.2661 -2235, 65.69758, 116.9811 -2236, 68.57486, 141.1557 -2237, 66.34328, 138.224 -2238, 62.78196, 119.847 -2239, 65.28308, 112.5769 -2240, 69.9312, 139.7362 -2241, 65.2271, 130.6158 -2242, 71.57674, 142.2788 -2243, 69.1121, 134.2085 -2244, 68.83916, 123.6683 -2245, 66.39741, 119.1475 -2246, 66.69861, 133.9891 -2247, 64.95406, 115.6216 -2248, 69.50341, 135.2493 -2249, 69.43668, 115.9697 -2250, 67.07002, 121.3118 -2251, 70.49846, 134.3579 -2252, 69.18776, 143.0344 -2253, 67.48622, 119.856 -2254, 67.40826, 124.8424 -2255, 69.43651, 127.9505 -2256, 64.15318, 112.225 -2257, 69.14007, 137.3179 -2258, 68.8929, 120.1185 -2259, 64.95274, 93.44115 -2260, 66.41945, 137.0321 -2261, 67.42646, 124.5909 -2262, 65.63755, 126.3297 -2263, 70.16858, 128.3273 -2264, 66.23711, 130.688 -2265, 66.49138, 138.4146 -2266, 65.0471, 116.7381 -2267, 67.08449, 118.1314 -2268, 64.3389, 128.2028 -2269, 64.20833, 113.1561 -2270, 66.89449, 113.1405 -2271, 65.79218, 126.8992 -2272, 68.843, 131.3916 -2273, 71.09755, 143.3004 -2274, 63.8882, 122.9986 -2275, 68.35671, 136.7665 -2276, 69.47682, 140.3565 -2277, 69.0265, 138.7555 -2278, 70.29803, 135.4454 -2279, 70.84459, 135.3925 -2280, 71.86799, 144.6497 -2281, 69.57461, 139.8465 -2282, 70.88841, 136.5899 -2283, 67.94317, 123.7762 -2284, 67.70347, 127.8934 -2285, 68.59478, 148.9399 -2286, 66.91402, 128.9211 -2287, 68.33449, 125.5417 -2288, 64.65946, 140.4392 -2289, 66.05221, 115.642 -2290, 70.24304, 130.7133 -2291, 67.37048, 119.0077 -2292, 69.95831, 128.0902 -2293, 70.64717, 153.0286 -2294, 70.5802, 127.6482 -2295, 68.86101, 134.8113 -2296, 68.7432, 121.5345 -2297, 67.17409, 128.304 -2298, 65.78148, 107.3133 -2299, 67.52494, 136.2616 -2300, 67.08075, 149.1684 -2301, 67.69345, 129.6252 -2302, 64.64051, 105.8442 -2303, 69.36402, 113.9182 -2304, 69.2178, 142.8796 -2305, 67.36034, 119.1631 -2306, 65.63764, 117.8529 -2307, 68.76324, 126.8712 -2308, 68.17144, 124.9338 -2309, 65.83305, 103.8489 -2310, 69.30622, 130.2827 -2311, 70.8049, 123.8101 -2312, 66.59071, 137.5423 -2313, 64.67352, 104.9377 -2314, 71.93986, 129.2747 -2315, 67.64634, 120.458 -2316, 68.73411, 126.8398 -2317, 66.95634, 127.1688 -2318, 72.56549, 130.0389 -2319, 67.36934, 136.9061 -2320, 70.02946, 135.9857 -2321, 66.54034, 110.9114 -2322, 67.74769, 113.6583 -2323, 67.57706, 144.701 -2324, 66.52633, 133.8333 -2325, 69.15551, 152.127 -2326, 69.19157, 122.7961 -2327, 66.60061, 118.2649 -2328, 67.07004, 106.2097 -2329, 69.57028, 148.5705 -2330, 69.23016, 101.4527 -2331, 69.26795, 137.5001 -2332, 67.56717, 123.1061 -2333, 69.10176, 142.433 -2334, 68.54151, 127.3761 -2335, 70.86149, 151.2788 -2336, 67.9873, 124.5609 -2337, 71.04092, 127.1598 -2338, 66.70805, 140.2543 -2339, 65.77676, 113.7058 -2340, 66.79414, 116.248 -2341, 65.93191, 109.5517 -2342, 67.72422, 131.8711 -2343, 66.72423, 112.366 -2344, 66.68607, 115.4197 -2345, 67.25768, 119.9769 -2346, 70.52978, 128.2009 -2347, 69.74125, 128.6789 -2348, 68.75608, 115.2882 -2349, 67.61299, 136.677 -2350, 72.13419, 137.7854 -2351, 67.91004, 126.6205 -2352, 66.18756, 125.3221 -2353, 71.71529, 144.446 -2354, 70.6841, 137.8075 -2355, 71.87845, 143.0609 -2356, 67.75918, 131.826 -2357, 67.09216, 122.1749 -2358, 66.79895, 105.8924 -2359, 63.56132, 118.8125 -2360, 66.49532, 139.3133 -2361, 68.50215, 124.2763 -2362, 66.83975, 116.7159 -2363, 70.64111, 134.415 -2364, 66.0167, 117.703 -2365, 67.3482, 126.8963 -2366, 67.26092, 120.9883 -2367, 70.82199, 140.3611 -2368, 68.33332, 102.5002 -2369, 69.37897, 132.5554 -2370, 64.7609, 119.6373 -2371, 68.699, 125.9149 -2372, 69.49404, 125.5505 -2373, 68.0849, 122.5232 -2374, 66.37539, 134.8766 -2375, 66.75613, 121.5063 -2376, 69.64206, 123.3271 -2377, 69.77774, 133.0832 -2378, 69.49214, 118.9607 -2379, 65.84828, 101.1193 -2380, 70.71369, 143.1946 -2381, 68.48099, 126.7384 -2382, 69.37374, 141.1484 -2383, 70.52541, 135.1763 -2384, 68.70978, 128.8899 -2385, 67.62641, 109.3522 -2386, 68.33709, 137.5541 -2387, 68.23178, 139.1303 -2388, 67.91161, 132.0641 -2389, 70.32186, 136.4673 -2390, 66.39807, 128.5349 -2391, 66.51667, 134.4822 -2392, 69.61525, 122.5729 -2393, 67.63565, 140.0854 -2394, 71.06313, 139.9112 -2395, 70.62246, 127.4324 -2396, 73.99549, 142.9016 -2397, 67.4663, 125.8276 -2398, 65.91279, 101.2434 -2399, 65.60691, 115.9997 -2400, 69.50033, 126.7393 -2401, 69.43735, 133.5447 -2402, 69.00905, 116.1499 -2403, 68.58614, 124.1333 -2404, 66.96198, 118.7229 -2405, 64.56606, 135.4686 -2406, 69.48658, 132.5799 -2407, 65.65789, 145.9751 -2408, 66.80094, 112.1247 -2409, 68.93784, 135.9755 -2410, 68.90478, 120.921 -2411, 68.50005, 132.7228 -2412, 68.02851, 135.0685 -2413, 69.2145, 134.8578 -2414, 68.48721, 141.7791 -2415, 68.80928, 151.4206 -2416, 67.04824, 134.1504 -2417, 68.89055, 139.3242 -2418, 68.75779, 132.5058 -2419, 72.33195, 143.5202 -2420, 66.51286, 121.8849 -2421, 66.7188, 122.9302 -2422, 67.20628, 118.5206 -2423, 70.19428, 131.9154 -2424, 65.51378, 122.5787 -2425, 68.83979, 113.5812 -2426, 66.95528, 129.9893 -2427, 68.03878, 123.9609 -2428, 71.01151, 119.9164 -2429, 69.14341, 124.9403 -2430, 68.86125, 131.6645 -2431, 64.6203, 109.2955 -2432, 68.44749, 110.9724 -2433, 68.82404, 121.5044 -2434, 66.41585, 127.7426 -2435, 68.86164, 147.5692 -2436, 65.7798, 148.7053 -2437, 63.82215, 109.0177 -2438, 67.97504, 119.6017 -2439, 68.39135, 123.7223 -2440, 66.54816, 124.8416 -2441, 71.1807, 144.0008 -2442, 66.03415, 136.0093 -2443, 66.19208, 127.1191 -2444, 65.8689, 121.6531 -2445, 68.65011, 128.9604 -2446, 68.79753, 135.4419 -2447, 66.39828, 123.0735 -2448, 68.08765, 120.0428 -2449, 68.20122, 120.2027 -2450, 64.65154, 124.8094 -2451, 69.30569, 133.7108 -2452, 67.89566, 118.2086 -2453, 66.23676, 131.8546 -2454, 66.84304, 113.6315 -2455, 68.77237, 131.1206 -2456, 68.78389, 141.022 -2457, 70.30029, 128.1661 -2458, 67.68475, 124.7755 -2459, 69.56671, 131.8861 -2460, 69.36532, 124.6139 -2461, 66.46909, 112.5943 -2462, 71.37399, 146.4358 -2463, 68.12643, 126.6456 -2464, 69.49226, 136.9902 -2465, 65.07859, 118.1795 -2466, 66.27357, 144.6287 -2467, 70.26356, 154.9408 -2468, 67.37111, 116.9522 -2469, 68.38613, 140.6401 -2470, 68.68559, 116.6275 -2471, 66.67024, 136.6266 -2472, 71.15168, 131.1853 -2473, 63.86399, 113.9441 -2474, 69.25001, 134.6576 -2475, 67.20448, 107.6304 -2476, 66.94316, 106.9521 -2477, 67.99592, 146.6396 -2478, 67.12143, 114.9585 -2479, 69.87331, 131.0168 -2480, 67.35332, 127.6156 -2481, 71.53386, 145.1178 -2482, 75.11519, 153.9562 -2483, 67.61043, 133.6125 -2484, 64.23075, 127.6976 -2485, 65.51542, 126.4846 -2486, 63.1937, 90.6784 -2487, 68.69521, 109.923 -2488, 66.22516, 101.8528 -2489, 69.44849, 114.3461 -2490, 70.73043, 125.1501 -2491, 70.1737, 157.2751 -2492, 64.7817, 111.8687 -2493, 63.91382, 102.5247 -2494, 68.02246, 129.9915 -2495, 70.48458, 156.3703 -2496, 68.31433, 122.7189 -2497, 68.63014, 125.6964 -2498, 68.12174, 126.2062 -2499, 67.40773, 155.2615 -2500, 68.97304, 142.8808 -2501, 65.72097, 121.262 -2502, 68.32077, 124.3155 -2503, 67.56613, 111.6843 -2504, 69.50262, 124.186 -2505, 67.82427, 126.4867 -2506, 70.85958, 142.6651 -2507, 64.04489, 108.8473 -2508, 66.43905, 116.66 -2509, 68.79621, 143.6181 -2510, 70.05244, 123.0933 -2511, 66.04605, 115.0598 -2512, 69.05127, 132.1098 -2513, 65.61974, 120.7598 -2514, 67.60382, 119.7671 -2515, 67.89065, 122.1496 -2516, 70.01739, 123.9711 -2517, 67.80728, 121.4194 -2518, 67.14185, 123.66 -2519, 65.39888, 98.05813 -2520, 68.70988, 133.8099 -2521, 69.04936, 141.6987 -2522, 67.91969, 117.5158 -2523, 72.30217, 132.1645 -2524, 63.7019, 124.5106 -2525, 70.475, 105.7802 -2526, 67.64613, 133.4242 -2527, 67.75898, 125.3875 -2528, 69.1102, 132.6382 -2529, 65.59124, 121.0751 -2530, 67.63581, 121.5355 -2531, 70.74732, 142.0038 -2532, 70.99416, 135.1886 -2533, 67.66798, 118.3373 -2534, 67.19997, 122.9425 -2535, 67.4785, 116.4973 -2536, 67.66945, 133.004 -2537, 70.62281, 146.4085 -2538, 68.85256, 137.2776 -2539, 65.32564, 122.0439 -2540, 68.76499, 140.8147 -2541, 70.56586, 136.7946 -2542, 69.11378, 127.4421 -2543, 69.47685, 130.272 -2544, 70.13374, 131.169 -2545, 66.07211, 129.6342 -2546, 68.40149, 125.6933 -2547, 65.13161, 104.973 -2548, 64.07239, 120.2984 -2549, 63.84484, 102.4259 -2550, 65.55111, 123.8357 -2551, 66.41112, 117.7 -2552, 65.05758, 121.8919 -2553, 69.2384, 128.4571 -2554, 68.75803, 113.1578 -2555, 68.17548, 125.2742 -2556, 70.1552, 139.8009 -2557, 67.70652, 121.3818 -2558, 66.95169, 114.5435 -2559, 70.92538, 133.8388 -2560, 66.06089, 135.6656 -2561, 66.10974, 127.3786 -2562, 70.57236, 140.6434 -2563, 66.67735, 113.9708 -2564, 65.99458, 120.7042 -2565, 63.44297, 116.0752 -2566, 66.32955, 131.0291 -2567, 66.53488, 134.6458 -2568, 66.80528, 111.616 -2569, 67.9896, 110.0452 -2570, 64.99295, 106.053 -2571, 66.56539, 124.0282 -2572, 66.804, 113.4492 -2573, 67.96612, 132.3117 -2574, 64.71711, 118.356 -2575, 65.82856, 106.1109 -2576, 69.08496, 136.7244 -2577, 68.28753, 125.6799 -2578, 71.11334, 126.4908 -2579, 69.34872, 148.1527 -2580, 67.62203, 117.9474 -2581, 66.06295, 124.5018 -2582, 70.00342, 127.0128 -2583, 66.52881, 127.605 -2584, 68.60366, 129.5427 -2585, 69.53265, 142.0317 -2586, 69.5404, 134.8729 -2587, 68.42714, 124.9955 -2588, 70.12002, 137.7196 -2589, 68.89234, 116.8002 -2590, 67.64467, 123.6212 -2591, 68.97063, 129.4071 -2592, 71.51466, 151.9696 -2593, 70.71134, 142.4361 -2594, 66.90583, 114.3278 -2595, 69.57597, 106.1963 -2596, 66.48164, 111.3787 -2597, 66.89809, 118.3329 -2598, 69.13909, 138.206 -2599, 68.61774, 132.7075 -2600, 66.16611, 111.9004 -2601, 66.64128, 114.0856 -2602, 69.54521, 123.4319 -2603, 62.86795, 98.05815 -2604, 67.85282, 125.754 -2605, 68.54477, 133.7416 -2606, 68.66811, 143.6143 -2607, 70.12714, 123.7248 -2608, 66.78985, 127.694 -2609, 67.27782, 126.7293 -2610, 66.9553, 121.6118 -2611, 69.44337, 123.5342 -2612, 71.51895, 143.988 -2613, 69.66995, 137.9075 -2614, 68.47294, 109.4371 -2615, 66.19926, 110.991 -2616, 68.78565, 144.0145 -2617, 67.86643, 121.9737 -2618, 67.76132, 128.252 -2619, 68.54873, 117.4352 -2620, 68.46365, 130.4536 -2621, 67.00444, 93.78282 -2622, 68.04189, 121.4741 -2623, 70.80235, 140.4798 -2624, 67.7232, 120.5494 -2625, 68.05748, 126.1797 -2626, 69.86881, 128.3204 -2627, 67.67538, 105.9584 -2628, 68.32806, 126.9252 -2629, 69.88401, 142.7832 -2630, 68.80968, 111.1686 -2631, 68.36811, 114.3121 -2632, 68.8827, 143.8443 -2633, 64.85888, 121.0848 -2634, 67.02277, 136.9794 -2635, 65.65821, 123.2681 -2636, 70.01384, 130.2018 -2637, 68.95576, 129.1215 -2638, 69.72231, 135.8375 -2639, 68.26031, 138.5268 -2640, 67.79651, 146.5558 -2641, 66.57574, 114.2481 -2642, 70.38311, 146.8498 -2643, 66.49668, 122.807 -2644, 68.21731, 127.527 -2645, 68.08084, 130.6424 -2646, 66.89732, 125.6947 -2647, 71.03529, 135.7172 -2648, 67.69483, 110.6572 -2649, 66.71312, 122.9811 -2650, 66.19389, 115.5235 -2651, 70.84883, 125.1626 -2652, 60.61265, 88.04646 -2653, 69.33158, 109.2915 -2654, 68.82694, 127.2504 -2655, 68.76714, 110.0752 -2656, 68.3665, 121.2376 -2657, 68.8963, 113.0423 -2658, 71.52552, 144.707 -2659, 66.3396, 111.3345 -2660, 69.24295, 139.3186 -2661, 65.44706, 129.4057 -2662, 64.98078, 121.7515 -2663, 64.73308, 112.2606 -2664, 65.95421, 123.4114 -2665, 69.23656, 113.0173 -2666, 66.6319, 113.3885 -2667, 65.56464, 111.7275 -2668, 67.89517, 127.8383 -2669, 66.72053, 134.4433 -2670, 67.33628, 133.6352 -2671, 68.00682, 128.9038 -2672, 69.59907, 140.7606 -2673, 65.7514, 121.8273 -2674, 66.54868, 133.0094 -2675, 68.67978, 122.6398 -2676, 67.29012, 149.083 -2677, 67.91637, 136.5971 -2678, 65.73796, 111.1435 -2679, 67.89939, 107.5045 -2680, 72.78908, 137.0203 -2681, 65.98489, 129.277 -2682, 69.67441, 121.7105 -2683, 66.75669, 116.2148 -2684, 67.43375, 117.4727 -2685, 67.67624, 123.6071 -2686, 71.25079, 133.5001 -2687, 69.21284, 122.3603 -2688, 70.47954, 134.4949 -2689, 65.27987, 134.6225 -2690, 71.09122, 139.2202 -2691, 69.56615, 124.2333 -2692, 66.89046, 128.8185 -2693, 67.70276, 138.9186 -2694, 66.77085, 121.5008 -2695, 67.85276, 148.7195 -2696, 70.78378, 124.5162 -2697, 67.09928, 121.3383 -2698, 70.44992, 133.1712 -2699, 69.80734, 137.2218 -2700, 69.2187, 156.353 -2701, 69.75148, 147.7342 -2702, 69.25709, 142.5795 -2703, 69.00485, 122.6004 -2704, 66.51077, 127.8756 -2705, 71.06999, 121.0861 -2706, 73.10762, 151.6868 -2707, 71.20673, 137.8023 -2708, 64.27555, 102.5237 -2709, 70.05278, 122.6111 -2710, 66.79032, 105.706 -2711, 68.34193, 113.765 -2712, 68.51775, 134.1383 -2713, 68.93108, 138.9163 -2714, 66.41503, 110.2628 -2715, 66.67827, 108.1567 -2716, 70.52101, 146.2975 -2717, 68.30664, 134.6639 -2718, 67.0116, 136.9904 -2719, 69.88845, 125.9301 -2720, 69.26417, 131.5566 -2721, 67.90954, 120.4869 -2722, 62.73809, 105.2201 -2723, 67.25447, 117.0512 -2724, 65.59876, 117.1139 -2725, 69.77845, 122.691 -2726, 70.90472, 150.021 -2727, 67.19538, 111.1027 -2728, 67.90593, 122.2626 -2729, 69.80063, 145.7116 -2730, 66.6932, 139.5749 -2731, 67.39204, 119.839 -2732, 67.05894, 120.139 -2733, 69.77321, 143.6484 -2734, 68.61434, 142.6088 -2735, 68.04448, 114.4534 -2736, 69.71027, 160.8859 -2737, 69.63078, 132.8733 -2738, 71.04817, 138.0744 -2739, 67.8894, 128.7946 -2740, 69.08591, 139.7656 -2741, 70.50786, 127.2788 -2742, 66.75964, 140.3527 -2743, 66.45788, 118.3607 -2744, 64.38452, 109.4539 -2745, 67.70213, 135.3701 -2746, 72.16119, 141.8671 -2747, 66.73368, 134.3878 -2748, 64.59658, 113.6028 -2749, 69.18583, 136.7389 -2750, 67.70525, 142.2085 -2751, 70.46124, 132.8252 -2752, 66.84239, 135.3456 -2753, 68.09464, 126.5742 -2754, 69.27278, 141.667 -2755, 66.06118, 114.3427 -2756, 68.85839, 142.794 -2757, 68.24827, 109.1823 -2758, 69.68789, 123.3539 -2759, 70.34077, 139.9099 -2760, 68.47674, 118.7857 -2761, 66.78425, 122.2756 -2762, 67.06985, 124.811 -2763, 68.38893, 112.4658 -2764, 67.18538, 111.7251 -2765, 66.8759, 109.1189 -2766, 72.46405, 138.8395 -2767, 68.05495, 125.6718 -2768, 68.9238, 129.8238 -2769, 66.55309, 117.9982 -2770, 68.00334, 133.4084 -2771, 62.53614, 120.647 -2772, 70.71058, 140.2181 -2773, 68.53707, 125.2862 -2774, 70.0098, 151.713 -2775, 68.65745, 120.2825 -2776, 68.89097, 119.1438 -2777, 67.25272, 133.3836 -2778, 67.39484, 133.6104 -2779, 63.37237, 128.7288 -2780, 67.9351, 120.8477 -2781, 68.38418, 131.7234 -2782, 68.37863, 134.8459 -2783, 65.57367, 137.9377 -2784, 65.23577, 128.5973 -2785, 71.3169, 139.8829 -2786, 70.16627, 129.0204 -2787, 67.42392, 122.5717 -2788, 70.49904, 114.3634 -2789, 68.30668, 135.853 -2790, 67.14412, 135.207 -2791, 64.68621, 94.21971 -2792, 66.82203, 140.4193 -2793, 66.17213, 123.9367 -2794, 67.40223, 129.5135 -2795, 69.65239, 148.1859 -2796, 64.6447, 120.4178 -2797, 63.86895, 97.02574 -2798, 67.7235, 114.9802 -2799, 66.78698, 104.0527 -2800, 68.37223, 140.6462 -2801, 68.04613, 118.4149 -2802, 70.70988, 146.6187 -2803, 68.42309, 133.7406 -2804, 69.39765, 118.5079 -2805, 71.73856, 150.9213 -2806, 70.69601, 121.8109 -2807, 69.79586, 146.1372 -2808, 69.20814, 128.8862 -2809, 66.49242, 128.4737 -2810, 67.16108, 139.2681 -2811, 68.76219, 126.9364 -2812, 66.64609, 134.9489 -2813, 69.91623, 141.9177 -2814, 70.71477, 137.8023 -2815, 68.86691, 117.7445 -2816, 65.56879, 119.5334 -2817, 70.7695, 147.1214 -2818, 68.31719, 134.2732 -2819, 63.7678, 97.04078 -2820, 66.49473, 122.836 -2821, 69.21965, 129.9591 -2822, 71.49924, 149.1274 -2823, 67.75486, 128.5848 -2824, 66.19603, 117.3529 -2825, 65.29404, 112.1173 -2826, 68.37324, 129.5659 -2827, 69.09809, 121.057 -2828, 68.5956, 110.0357 -2829, 67.78989, 120.7787 -2830, 67.02507, 122.308 -2831, 66.31844, 126.8147 -2832, 66.33367, 140.2312 -2833, 65.50586, 111.649 -2834, 68.05216, 124.0093 -2835, 69.33545, 135.4809 -2836, 66.39304, 126.1881 -2837, 69.2076, 143.3931 -2838, 70.21379, 122.1613 -2839, 69.178, 142.7784 -2840, 66.76739, 134.2148 -2841, 64.88316, 125.5308 -2842, 70.25427, 130.1801 -2843, 68.38013, 130.1171 -2844, 66.62364, 121.8803 -2845, 67.96737, 116.8868 -2846, 69.07966, 128.4637 -2847, 65.49639, 108.2566 -2848, 67.94823, 131.4797 -2849, 67.69124, 131.0789 -2850, 69.9714, 134.3432 -2851, 67.69387, 112.2898 -2852, 65.98735, 113.6996 -2853, 68.3664, 128.5446 -2854, 69.52877, 136.7997 -2855, 69.27294, 130.2612 -2856, 69.41669, 128.4186 -2857, 70.15337, 139.8741 -2858, 69.82573, 132.6543 -2859, 65.91827, 115.9192 -2860, 67.98945, 118.7202 -2861, 72.12813, 135.5268 -2862, 67.48301, 113.3464 -2863, 68.26193, 117.904 -2864, 69.41184, 130.5207 -2865, 67.82148, 123.5959 -2866, 69.69729, 141.3599 -2867, 63.45113, 104.2273 -2868, 66.9028, 122.3933 -2869, 69.05969, 134.2747 -2870, 69.02413, 120.2068 -2871, 65.1896, 127.2096 -2872, 65.30411, 119.1556 -2873, 67.8454, 100.2365 -2874, 67.09743, 121.1992 -2875, 65.5786, 108.1626 -2876, 68.31828, 129.8971 -2877, 67.77752, 125.3103 -2878, 67.83922, 130.7952 -2879, 67.09143, 127.9221 -2880, 68.6965, 135.3072 -2881, 70.66714, 141.6093 -2882, 65.74989, 134.5339 -2883, 68.51671, 135.9882 -2884, 67.59335, 125.5196 -2885, 65.84344, 123.0473 -2886, 64.9153, 118.3384 -2887, 64.58123, 119.5443 -2888, 66.90827, 136.7318 -2889, 68.0883, 129.1382 -2890, 65.46098, 117.3543 -2891, 69.62403, 133.886 -2892, 70.62668, 127.1567 -2893, 65.82364, 118.264 -2894, 65.06787, 120.8378 -2895, 66.22122, 132.7183 -2896, 69.68826, 125.88 -2897, 69.70612, 129.4925 -2898, 67.65097, 136.1796 -2899, 69.95219, 133.0623 -2900, 70.00937, 129.9978 -2901, 67.61783, 125.53 -2902, 69.31318, 139.8597 -2903, 68.22656, 132.6316 -2904, 68.55723, 118.8729 -2905, 64.22112, 122.1174 -2906, 66.05632, 127.3063 -2907, 66.90354, 113.6921 -2908, 66.84621, 121.585 -2909, 69.4938, 146.0665 -2910, 68.55353, 113.6965 -2911, 65.61282, 110.3262 -2912, 67.37674, 124.0148 -2913, 68.09175, 128.9185 -2914, 66.65804, 117.0019 -2915, 69.54961, 144.9385 -2916, 66.25728, 123.9976 -2917, 67.98509, 135.5365 -2918, 66.09544, 126.996 -2919, 70.52477, 134.6828 -2920, 67.19875, 111.0968 -2921, 68.24137, 121.9514 -2922, 70.97253, 134.2293 -2923, 66.62434, 128.3887 -2924, 65.60995, 124.7491 -2925, 67.79978, 111.9651 -2926, 67.56776, 128.4301 -2927, 65.14281, 113.4592 -2928, 65.46067, 129.2624 -2929, 68.4843, 131.5885 -2930, 68.24746, 126.4105 -2931, 68.62227, 137.2275 -2932, 67.23277, 123.8138 -2933, 70.9315, 124.931 -2934, 70.41644, 145.2017 -2935, 67.76785, 125.2728 -2936, 68.93413, 128.9511 -2937, 66.63682, 123.6178 -2938, 68.50584, 123.3779 -2939, 66.74655, 103.455 -2940, 68.34022, 121.1823 -2941, 68.64082, 104.9272 -2942, 67.7798, 119.9736 -2943, 68.01308, 132.8794 -2944, 64.20657, 119.5831 -2945, 68.16944, 128.8536 -2946, 67.55289, 125.4723 -2947, 67.94972, 120.232 -2948, 65.82888, 110.4565 -2949, 67.43166, 138.2801 -2950, 69.76313, 124.4852 -2951, 66.74117, 117.0476 -2952, 67.23078, 127.707 -2953, 66.219, 121.3801 -2954, 65.57556, 126.3779 -2955, 66.46532, 105.6146 -2956, 71.70666, 150.0118 -2957, 68.32124, 127.4253 -2958, 65.81092, 123.0644 -2959, 68.90095, 119.241 -2960, 66.25545, 124.3161 -2961, 67.63532, 119.8268 -2962, 69.60217, 135.871 -2963, 69.19207, 129.4251 -2964, 68.12331, 116.5582 -2965, 67.47898, 116.8066 -2966, 66.24642, 113.4835 -2967, 68.50173, 121.5935 -2968, 62.87696, 102.6336 -2969, 65.24352, 109.5423 -2970, 69.99091, 136.7711 -2971, 68.75121, 125.0167 -2972, 66.26559, 132.9041 -2973, 67.33988, 137.9208 -2974, 66.08783, 128.0748 -2975, 69.10841, 141.3046 -2976, 68.02947, 136.2458 -2977, 71.4988, 144.147 -2978, 66.42022, 128.7172 -2979, 68.53037, 127.7893 -2980, 69.54256, 134.6098 -2981, 68.89587, 149.2571 -2982, 65.34144, 118.4045 -2983, 68.85953, 147.4612 -2984, 67.9932, 115.8792 -2985, 70.34681, 132.0704 -2986, 65.40868, 123.2475 -2987, 69.67377, 134.0875 -2988, 70.37964, 137.3754 -2989, 68.23626, 128.6996 -2990, 67.40948, 133.7103 -2991, 69.72564, 131.2636 -2992, 66.96911, 112.5541 -2993, 67.05246, 118.0263 -2994, 68.0873, 127.3013 -2995, 70.4947, 125.7998 -2996, 68.59715, 126.259 -2997, 66.45012, 119.3414 -2998, 67.24533, 122.5965 -2999, 69.22665, 135.3375 -3000, 68.4148, 137.2091 -3001, 70.51338, 143.7382 -3002, 70.63103, 145.4599 -3003, 69.83323, 133.1488 -3004, 69.76098, 132.4917 -3005, 68.11679, 126.8125 -3006, 66.53431, 120.2043 -3007, 71.0373, 127.177 -3008, 65.66484, 119.1195 -3009, 67.11404, 131.011 -3010, 70.93121, 151.9596 -3011, 68.25011, 147.9148 -3012, 67.04474, 120.1896 -3013, 69.40034, 121.6422 -3014, 68.35952, 131.7405 -3015, 65.7936, 105.584 -3016, 65.16867, 125.1514 -3017, 64.31223, 132.5808 -3018, 70.65237, 116.5383 -3019, 68.04397, 141.8528 -3020, 67.60186, 130.1925 -3021, 67.58242, 120.4606 -3022, 68.50821, 128.9264 -3023, 65.84079, 119.5386 -3024, 69.13492, 137.8896 -3025, 68.00897, 122.4403 -3026, 67.56761, 129.7133 -3027, 66.79775, 127.9067 -3028, 70.41567, 146.7498 -3029, 66.6532, 111.2623 -3030, 68.94427, 138.8701 -3031, 69.2921, 119.7773 -3032, 71.21679, 128.0274 -3033, 68.26773, 106.61 -3034, 65.73369, 113.3707 -3035, 63.63362, 106.5873 -3036, 69.44197, 125.085 -3037, 67.08087, 125.2055 -3038, 66.03614, 123.3208 -3039, 66.75256, 109.923 -3040, 69.05655, 129.0132 -3041, 66.02949, 108.5156 -3042, 67.62446, 138.1906 -3043, 66.54145, 121.1649 -3044, 71.4012, 133.5965 -3045, 68.54057, 132.5515 -3046, 66.23601, 123.6908 -3047, 71.74579, 148.3826 -3048, 64.8262, 124.0167 -3049, 69.13628, 150.4434 -3050, 63.85309, 113.5616 -3051, 65.88387, 118.8276 -3052, 70.20793, 152.1525 -3053, 69.83569, 121.8741 -3054, 66.51127, 127.3143 -3055, 71.09805, 147.2711 -3056, 64.60825, 112.4456 -3057, 70.23276, 137.7724 -3058, 64.68824, 108.5133 -3059, 67.16361, 124.8309 -3060, 69.32709, 133.656 -3061, 68.45934, 142.1525 -3062, 66.99209, 125.4821 -3063, 68.44693, 132.342 -3064, 67.41731, 128.0697 -3065, 69.21256, 120.7853 -3066, 65.23174, 129.8998 -3067, 65.42771, 117.499 -3068, 66.99225, 121.0608 -3069, 69.66303, 118.2405 -3070, 67.29207, 117.7533 -3071, 64.37238, 124.134 -3072, 68.90985, 106.8616 -3073, 70.80439, 124.5028 -3074, 68.7004, 129.2788 -3075, 68.29255, 113.5292 -3076, 65.50586, 125.7542 -3077, 68.97897, 121.0893 -3078, 69.65275, 125.5083 -3079, 69.49526, 133.7579 -3080, 66.61841, 131.7656 -3081, 64.46226, 117.407 -3082, 69.10304, 131.1557 -3083, 67.86149, 128.0879 -3084, 67.83106, 107.8007 -3085, 67.66576, 133.9987 -3086, 67.93384, 123.2716 -3087, 71.95735, 142.6244 -3088, 66.88443, 115.1191 -3089, 71.25927, 130.7929 -3090, 63.13444, 111.3605 -3091, 70.25703, 131.1771 -3092, 67.68872, 109.8541 -3093, 63.45505, 113.3017 -3094, 71.59334, 117.9625 -3095, 68.69094, 140.3001 -3096, 64.36556, 122.4675 -3097, 68.84021, 139.5953 -3098, 67.79238, 130.4642 -3099, 65.97475, 121.9744 -3100, 64.23339, 106.8916 -3101, 65.46597, 113.5834 -3102, 65.22202, 94.61233 -3103, 67.90056, 120.3075 -3104, 64.42244, 131.5245 -3105, 68.23998, 113.3743 -3106, 70.01671, 128.8175 -3107, 67.25105, 131.9522 -3108, 67.28007, 117.6487 -3109, 69.48821, 129.6283 -3110, 69.50486, 136.9585 -3111, 68.0898, 120.5675 -3112, 68.09624, 127.7017 -3113, 64.59835, 113.0571 -3114, 67.63863, 117.784 -3115, 69.07559, 145.8644 -3116, 65.43751, 123.7503 -3117, 66.04755, 116.2935 -3118, 67.38822, 113.2922 -3119, 68.74094, 121.8236 -3120, 66.68207, 132.4644 -3121, 67.10251, 116.5027 -3122, 68.72578, 148.798 -3123, 69.95585, 134.2309 -3124, 71.48969, 151.6437 -3125, 66.69291, 128.2832 -3126, 65.37967, 110.6266 -3127, 67.59507, 126.1888 -3128, 67.65455, 113.8593 -3129, 68.68263, 125.494 -3130, 69.58679, 125.2317 -3131, 68.37402, 123.4402 -3132, 67.93581, 131.6798 -3133, 65.44645, 133.7783 -3134, 68.37812, 117.4608 -3135, 70.02962, 134.5618 -3136, 66.48126, 125.3948 -3137, 69.02608, 114.1902 -3138, 69.55202, 144.8532 -3139, 64.80997, 132.2021 -3140, 65.70656, 107.7373 -3141, 65.72803, 140.2288 -3142, 68.21876, 121.7152 -3143, 65.86034, 125.5649 -3144, 65.16426, 126.6267 -3145, 66.96428, 135.9602 -3146, 63.75844, 105.6245 -3147, 69.96035, 146.4008 -3148, 69.29626, 106.2849 -3149, 65.18388, 117.985 -3150, 67.37365, 107.4966 -3151, 69.76312, 119.6316 -3152, 65.20697, 116.4881 -3153, 66.31364, 124.9947 -3154, 66.74365, 118.0293 -3155, 65.57241, 128.5441 -3156, 71.05515, 134.7298 -3157, 69.28167, 135.8658 -3158, 71.77797, 136.3061 -3159, 63.53338, 104.7024 -3160, 69.75851, 120.3953 -3161, 66.7395, 118.3091 -3162, 66.76099, 122.1245 -3163, 72.16716, 156.2465 -3164, 64.34648, 117.265 -3165, 69.25366, 128.9281 -3166, 68.20016, 129.2408 -3167, 67.84238, 131.1469 -3168, 70.54498, 136.6229 -3169, 65.25826, 110.8818 -3170, 67.78738, 115.5424 -3171, 66.79884, 132.1508 -3172, 68.13317, 137.9186 -3173, 67.48449, 123.0402 -3174, 70.4411, 148.7687 -3175, 68.33621, 123.88 -3176, 68.67946, 138.1734 -3177, 67.95136, 122.3842 -3178, 65.92021, 120.5629 -3179, 68.14026, 121.2805 -3180, 67.29912, 133.4119 -3181, 67.43318, 121.7736 -3182, 66.07076, 122.2608 -3183, 69.32562, 135.9047 -3184, 65.89875, 134.5927 -3185, 67.23868, 117.4154 -3186, 68.01261, 129.311 -3187, 68.62709, 122.403 -3188, 67.76031, 143.2106 -3189, 67.54784, 128.0734 -3190, 67.26315, 107.2961 -3191, 71.53453, 145.4266 -3192, 65.06551, 123.2535 -3193, 67.43465, 115.9394 -3194, 69.15557, 131.1976 -3195, 67.10856, 110.8966 -3196, 68.48481, 132.9513 -3197, 68.05629, 143.3736 -3198, 68.40527, 142.3615 -3199, 71.97264, 138.5403 -3200, 67.88635, 145.0092 -3201, 68.93287, 133.8419 -3202, 68.24127, 106.3258 -3203, 66.01267, 117.3092 -3204, 67.37485, 134.7795 -3205, 68.21364, 141.9627 -3206, 68.34543, 131.9721 -3207, 68.65931, 137.013 -3208, 68.84427, 144.7351 -3209, 69.03818, 143.485 -3210, 68.11385, 127.8782 -3211, 67.3109, 126.0281 -3212, 69.49562, 126.4439 -3213, 69.39962, 127.7448 -3214, 67.57502, 126.2983 -3215, 66.43096, 106.7579 -3216, 69.2189, 122.9471 -3217, 66.19304, 120.9485 -3218, 66.59157, 107.8202 -3219, 66.81548, 135.6921 -3220, 68.00225, 124.7943 -3221, 69.09045, 123.456 -3222, 68.6133, 133.9338 -3223, 71.62355, 157.659 -3224, 67.4363, 133.6369 -3225, 65.12769, 113.7514 -3226, 68.87788, 139.7284 -3227, 65.8284, 123.9196 -3228, 67.27468, 117.2019 -3229, 68.36412, 114.74 -3230, 67.98858, 135.5863 -3231, 69.99934, 130.2303 -3232, 66.73116, 132.3482 -3233, 67.47372, 116.7746 -3234, 65.0195, 122.0863 -3235, 71.12723, 147.136 -3236, 67.6698, 133.6517 -3237, 68.77095, 153.9969 -3238, 68.48264, 135.3549 -3239, 66.8768, 119.5152 -3240, 70.54119, 134.2581 -3241, 67.04893, 126.7798 -3242, 67.63647, 118.7652 -3243, 67.57626, 120.3951 -3244, 70.87537, 148.4787 -3245, 66.23513, 125.14 -3246, 67.01055, 121.4965 -3247, 67.64118, 129.0488 -3248, 67.9016, 134.8018 -3249, 69.31483, 136.4644 -3250, 68.22857, 119.5528 -3251, 66.98456, 135.7446 -3252, 67.00963, 126.1537 -3253, 69.95272, 144.3773 -3254, 65.80355, 99.51504 -3255, 68.92933, 134.0114 -3256, 67.70136, 136.4446 -3257, 67.91607, 133.3008 -3258, 66.84068, 131.6362 -3259, 69.99456, 135.2158 -3260, 66.4718, 118.2191 -3261, 64.18564, 111.0182 -3262, 66.246, 128.8387 -3263, 68.80963, 130.791 -3264, 67.65907, 128.573 -3265, 66.77115, 130.2165 -3266, 65.37953, 131.9436 -3267, 66.7844, 120.2342 -3268, 71.27461, 137.3123 -3269, 66.61529, 120.9979 -3270, 65.83005, 123.3074 -3271, 69.57158, 130.6931 -3272, 68.00656, 139.9829 -3273, 68.69628, 111.38 -3274, 66.42314, 124.9978 -3275, 66.99259, 122.1147 -3276, 67.96518, 129.2041 -3277, 68.66471, 116.8008 -3278, 66.61581, 110.2205 -3279, 67.63645, 131.1351 -3280, 70.31626, 139.0315 -3281, 69.75296, 124.5872 -3282, 67.08745, 124.9637 -3283, 68.16256, 127.0057 -3284, 68.10701, 134.1875 -3285, 69.7191, 155.7074 -3286, 66.6639, 109.6815 -3287, 69.21432, 142.3644 -3288, 64.6701, 125.2237 -3289, 67.6419, 116.4677 -3290, 70.95584, 129.5297 -3291, 67.68754, 129.9618 -3292, 68.39041, 131.11 -3293, 70.94659, 149.2299 -3294, 69.3929, 138.8501 -3295, 64.29056, 128.0364 -3296, 70.36687, 136.6274 -3297, 67.04642, 127.3941 -3298, 66.03627, 130.0724 -3299, 67.23901, 132.3301 -3300, 68.4523, 115.3808 -3301, 68.00298, 121.4437 -3302, 68.19927, 133.5988 -3303, 69.15154, 135.7115 -3304, 72.36766, 138.8835 -3305, 70.17575, 138.5825 -3306, 66.89187, 130.3881 -3307, 67.86089, 130.8938 -3308, 69.3241, 126.4663 -3309, 68.85085, 125.6815 -3310, 63.59867, 108.3695 -3311, 67.68177, 146.0547 -3312, 65.92195, 128.9527 -3313, 66.04233, 138.9407 -3314, 68.07077, 136.7048 -3315, 68.53269, 136.9208 -3316, 66.41329, 121.4656 -3317, 67.6551, 139.0278 -3318, 69.39574, 124.2868 -3319, 70.72068, 135.4026 -3320, 69.39895, 127.7865 -3321, 68.70993, 134.9467 -3322, 69.38351, 130.8867 -3323, 69.01409, 133.5517 -3324, 68.84671, 121.2891 -3325, 66.67972, 130.3173 -3326, 64.14012, 136.6169 -3327, 65.45315, 120.6706 -3328, 67.16684, 132.1766 -3329, 67.52493, 124.0382 -3330, 67.17756, 133.8366 -3331, 66.73401, 131.714 -3332, 70.0236, 117.9912 -3333, 67.17283, 116.4658 -3334, 65.18918, 138.7007 -3335, 68.32763, 127.9768 -3336, 72.55002, 139.9074 -3337, 70.71251, 148.0151 -3338, 70.88049, 140.65 -3339, 66.96285, 130.6093 -3340, 69.82684, 143.0451 -3341, 65.16431, 128.951 -3342, 68.23622, 140.5259 -3343, 66.73023, 142.5733 -3344, 72.29547, 138.9453 -3345, 69.16314, 127.5533 -3346, 67.56202, 115.1545 -3347, 65.7718, 119.6649 -3348, 67.4295, 100.7527 -3349, 67.235, 122.7841 -3350, 69.86435, 146.7835 -3351, 71.88676, 144.7958 -3352, 68.87227, 138.991 -3353, 70.04608, 137.0023 -3354, 68.73409, 137.8343 -3355, 69.03486, 138.8044 -3356, 69.26447, 128.3303 -3357, 70.09459, 124.8418 -3358, 70.12595, 131.6374 -3359, 66.54739, 120.0134 -3360, 66.3726, 117.0774 -3361, 65.72273, 113.9648 -3362, 67.65602, 126.6406 -3363, 64.69649, 108.3562 -3364, 66.41005, 127.2142 -3365, 69.27872, 134.603 -3366, 68.63208, 121.5365 -3367, 68.60374, 145.1284 -3368, 70.38104, 135.204 -3369, 69.28461, 127.5704 -3370, 71.64455, 153.6515 -3371, 70.37091, 155.869 -3372, 65.45196, 121.4609 -3373, 69.65595, 133.8526 -3374, 67.69863, 108.9521 -3375, 70.04255, 130.5425 -3376, 67.69758, 124.0931 -3377, 66.856, 132.5109 -3378, 69.87691, 154.5701 -3379, 68.5184, 124.004 -3380, 67.68314, 127.6985 -3381, 67.61985, 114.26 -3382, 69.25373, 142.7731 -3383, 68.98349, 115.897 -3384, 66.98194, 125.1081 -3385, 63.41013, 119.8153 -3386, 68.3495, 127.3052 -3387, 70.14263, 130.255 -3388, 67.67369, 125.3486 -3389, 67.83046, 118.0148 -3390, 71.15629, 129.468 -3391, 70.04469, 138.4503 -3392, 69.45013, 138.6964 -3393, 67.78201, 134.9735 -3394, 65.27229, 119.6325 -3395, 69.44983, 132.0852 -3396, 67.90892, 132.1945 -3397, 68.1636, 146.9576 -3398, 66.37934, 112.0144 -3399, 68.73896, 129.7229 -3400, 69.75201, 128.9392 -3401, 69.44655, 125.5484 -3402, 64.92283, 102.8549 -3403, 64.80108, 119.4034 -3404, 65.84217, 143.8547 -3405, 68.34828, 129.9632 -3406, 68.13534, 125.1662 -3407, 66.32414, 126.9552 -3408, 70.74868, 112.1237 -3409, 67.48997, 115.0831 -3410, 65.8077, 120.0188 -3411, 67.41008, 122.7409 -3412, 68.39969, 133.5177 -3413, 72.19938, 144.1058 -3414, 71.65513, 146.9261 -3415, 70.19523, 134.0839 -3416, 65.92306, 112.9231 -3417, 73.35034, 142.4875 -3418, 64.21849, 121.3899 -3419, 65.70466, 122.7506 -3420, 68.90463, 136.1054 -3421, 68.06195, 127.8162 -3422, 66.85163, 139.0505 -3423, 69.58698, 124.5701 -3424, 69.42478, 126.8527 -3425, 68.02716, 145.8616 -3426, 71.71699, 136.8975 -3427, 66.95183, 133.4618 -3428, 69.74699, 122.1901 -3429, 68.80049, 115.6403 -3430, 67.89371, 125.377 -3431, 68.57659, 129.2547 -3432, 68.72581, 129.1874 -3433, 69.63584, 133.0704 -3434, 68.9713, 138.0269 -3435, 66.8827, 118.8532 -3436, 69.21469, 142.7606 -3437, 67.98056, 126.2747 -3438, 68.56045, 119.1386 -3439, 67.92182, 117.0603 -3440, 69.15108, 120.454 -3441, 69.09773, 132.1603 -3442, 66.92076, 108.7441 -3443, 67.43796, 106.5115 -3444, 67.67848, 130.2144 -3445, 70.02323, 140.4403 -3446, 67.78297, 124.5214 -3447, 72.83169, 139.3706 -3448, 68.05868, 129.4378 -3449, 67.44814, 129.0994 -3450, 65.57065, 118.2219 -3451, 67.59465, 117.6786 -3452, 67.82155, 140.8622 -3453, 68.47258, 122.6694 -3454, 63.58771, 104.467 -3455, 67.95929, 129.0106 -3456, 65.22442, 124.3217 -3457, 66.44894, 101.9139 -3458, 67.33704, 139.416 -3459, 65.69507, 132.7342 -3460, 70.72749, 132.8116 -3461, 67.41511, 124.3421 -3462, 69.76325, 126.7586 -3463, 65.37021, 119.848 -3464, 70.00296, 111.9376 -3465, 66.22804, 117.26 -3466, 71.01952, 131.8577 -3467, 66.66825, 122.6517 -3468, 65.766, 117.0445 -3469, 69.19585, 117.8609 -3470, 66.01043, 130.8876 -3471, 65.81063, 124.3575 -3472, 69.63647, 131.0505 -3473, 67.20188, 142.083 -3474, 67.84033, 100.3696 -3475, 63.55149, 127.0979 -3476, 68.31141, 124.2054 -3477, 65.48001, 116.5552 -3478, 69.58827, 123.5653 -3479, 66.1176, 111.8548 -3480, 71.49457, 150.1752 -3481, 70.91224, 128.172 -3482, 65.08904, 120.4457 -3483, 66.85324, 110.6689 -3484, 67.33053, 135.7821 -3485, 70.41812, 145.8887 -3486, 70.74812, 144.6908 -3487, 69.897, 128.3047 -3488, 68.29767, 137.1886 -3489, 67.83703, 127.2593 -3490, 65.24423, 122.1945 -3491, 67.84894, 139.6043 -3492, 70.42564, 129.817 -3493, 70.55525, 152.9847 -3494, 67.88636, 123.5425 -3495, 69.7096, 137.7755 -3496, 67.07269, 116.3106 -3497, 71.88822, 125.4909 -3498, 71.28254, 134.9234 -3499, 66.61757, 116.9673 -3500, 69.33248, 131.029 -3501, 69.17119, 138.2493 -3502, 68.93099, 117.0109 -3503, 65.39211, 117.1889 -3504, 66.40145, 133.3265 -3505, 65.97157, 121.4286 -3506, 65.61777, 122.2767 -3507, 67.1943, 129.2964 -3508, 65.74682, 106.9673 -3509, 64.34058, 118.7342 -3510, 65.27557, 112.0218 -3511, 71.37011, 133.4833 -3512, 68.13757, 127.5429 -3513, 72.05393, 131.366 -3514, 65.7047, 114.9957 -3515, 67.07598, 125.5866 -3516, 63.96935, 84.86345 -3517, 65.26358, 129.4427 -3518, 65.97301, 126.9647 -3519, 68.28892, 139.8538 -3520, 65.81249, 120.6804 -3521, 64.11914, 127.4184 -3522, 67.02094, 120.0865 -3523, 69.03252, 132.7904 -3524, 68.99289, 123.4864 -3525, 64.41882, 114.4503 -3526, 67.15633, 112.938 -3527, 68.76733, 116.9251 -3528, 69.01892, 133.9261 -3529, 66.76233, 128.2645 -3530, 68.18232, 107.0685 -3531, 67.28745, 128.2196 -3532, 68.65317, 126.5592 -3533, 71.06665, 125.8611 -3534, 70.31177, 134.6115 -3535, 72.4691, 152.1181 -3536, 68.8736, 135.5056 -3537, 64.68847, 115.9514 -3538, 68.1288, 127.6565 -3539, 67.36526, 141.0621 -3540, 65.60339, 109.572 -3541, 68.0437, 122.3788 -3542, 69.28083, 134.2059 -3543, 68.87006, 134.8058 -3544, 68.5515, 108.4165 -3545, 70.402, 121.5254 -3546, 70.89245, 131.4848 -3547, 63.57508, 112.824 -3548, 69.96784, 129.2959 -3549, 69.86404, 144.6551 -3550, 67.43349, 123.2584 -3551, 65.953, 130.0755 -3552, 66.51685, 97.84025 -3553, 66.59374, 133.7803 -3554, 64.82036, 106.5226 -3555, 68.76391, 139.4665 -3556, 67.24653, 116.868 -3557, 67.62134, 133.7579 -3558, 66.16322, 118.9108 -3559, 67.42497, 122.3291 -3560, 68.65199, 127.3678 -3561, 67.41315, 114.0066 -3562, 68.24549, 137.0083 -3563, 66.02486, 110.0077 -3564, 65.25809, 132.9911 -3565, 69.91392, 132.3932 -3566, 65.79089, 117.5234 -3567, 67.71449, 130.4334 -3568, 68.29458, 117.7587 -3569, 65.61141, 117.7477 -3570, 67.78179, 129.0761 -3571, 64.30338, 105.6364 -3572, 67.30706, 131.7766 -3573, 68.96485, 131.8757 -3574, 64.97931, 125.9879 -3575, 69.07887, 123.8861 -3576, 67.39433, 133.0366 -3577, 67.27351, 131.1858 -3578, 67.64179, 126.7371 -3579, 70.45489, 151.614 -3580, 69.09422, 147.1926 -3581, 66.0667, 134.7624 -3582, 67.70438, 133.445 -3583, 66.985, 111.2501 -3584, 65.46653, 117.0386 -3585, 68.69845, 129.8079 -3586, 66.04072, 99.27518 -3587, 66.09431, 128.5692 -3588, 69.80498, 151.548 -3589, 67.73859, 139.3895 -3590, 66.68205, 120.0516 -3591, 68.9189, 124.0676 -3592, 67.06468, 137.5999 -3593, 65.256, 129.4912 -3594, 68.3313, 139.801 -3595, 68.39086, 148.5226 -3596, 67.84685, 120.6246 -3597, 66.37815, 138.6642 -3598, 63.32113, 92.37513 -3599, 66.57084, 136.5421 -3600, 67.88983, 118.2089 -3601, 70.94094, 138.6145 -3602, 69.91224, 135.6715 -3603, 64.89822, 104.5861 -3604, 69.46685, 128.2748 -3605, 68.56738, 125.4858 -3606, 66.53162, 143.8794 -3607, 68.6378, 125.3511 -3608, 70.90025, 126.3358 -3609, 71.26396, 139.7274 -3610, 67.13527, 116.2366 -3611, 64.80236, 97.79781 -3612, 70.67036, 136.8521 -3613, 66.13501, 112.7896 -3614, 64.77081, 112.5529 -3615, 68.35648, 120.7636 -3616, 68.24493, 119.3536 -3617, 67.7318, 135.4753 -3618, 67.04488, 140.4543 -3619, 69.94917, 142.0555 -3620, 64.50981, 126.8512 -3621, 67.87716, 123.1267 -3622, 68.61556, 118.3477 -3623, 68.08104, 134.5331 -3624, 66.35068, 116.8814 -3625, 66.71224, 108.9156 -3626, 71.16146, 134.9529 -3627, 64.76054, 109.5924 -3628, 66.75144, 106.5216 -3629, 66.73685, 119.4936 -3630, 69.68151, 137.7906 -3631, 70.72413, 151.0354 -3632, 68.34441, 121.4853 -3633, 67.6858, 146.7791 -3634, 66.98729, 140.0306 -3635, 69.43833, 116.5077 -3636, 70.35311, 140.7913 -3637, 68.29063, 140.0969 -3638, 69.81605, 131.6661 -3639, 68.07763, 144.0462 -3640, 69.63007, 136.5389 -3641, 67.94658, 124.5183 -3642, 66.66861, 123.3439 -3643, 72.54964, 140.3326 -3644, 65.96495, 125.1353 -3645, 68.73999, 142.2247 -3646, 73.25271, 156.3537 -3647, 63.8433, 113.8671 -3648, 66.96921, 120.7632 -3649, 67.68747, 120.6478 -3650, 66.81228, 139.8202 -3651, 66.72332, 119.0638 -3652, 68.9021, 141.0105 -3653, 69.92563, 143.4254 -3654, 69.85536, 133.5108 -3655, 69.32382, 137.0878 -3656, 66.59092, 121.7154 -3657, 68.85426, 127.9174 -3658, 66.54029, 113.4724 -3659, 65.65814, 128.0828 -3660, 69.30998, 131.776 -3661, 70.17204, 138.2634 -3662, 67.97014, 125.758 -3663, 66.85274, 120.3874 -3664, 67.93626, 129.0463 -3665, 72.43693, 136.391 -3666, 67.58597, 130.0804 -3667, 68.61381, 118.5302 -3668, 70.42389, 129.8475 -3669, 66.40833, 119.5325 -3670, 70.57091, 138.3516 -3671, 69.79777, 128.9593 -3672, 67.34701, 116.8005 -3673, 66.40224, 123.1326 -3674, 64.68881, 116.9304 -3675, 69.53955, 126.5974 -3676, 69.43648, 141.1934 -3677, 69.36832, 131.6094 -3678, 67.02639, 109.3029 -3679, 68.60035, 116.408 -3680, 64.90605, 101.3305 -3681, 73.6704, 147.9165 -3682, 68.37014, 141.2402 -3683, 68.3104, 138.8869 -3684, 64.51584, 148.5007 -3685, 66.12992, 101.0513 -3686, 65.38495, 125.7223 -3687, 65.11549, 106.3269 -3688, 67.05783, 126.3894 -3689, 66.99532, 134.2725 -3690, 67.08079, 125.6528 -3691, 65.28833, 113.2531 -3692, 68.09544, 119.5911 -3693, 66.6868, 116.2576 -3694, 68.33953, 143.6987 -3695, 66.84266, 112.5571 -3696, 68.83968, 131.1388 -3697, 61.8934, 95.74545 -3698, 65.73799, 113.6203 -3699, 68.72588, 141.3191 -3700, 67.8244, 116.9133 -3701, 67.01202, 124.2022 -3702, 65.5611, 117.5665 -3703, 67.55321, 119.2307 -3704, 67.1303, 114.5048 -3705, 67.64061, 130.0058 -3706, 66.83182, 140.4851 -3707, 68.27516, 144.0058 -3708, 69.44828, 131.2024 -3709, 69.58545, 126.2305 -3710, 66.7071, 104.6225 -3711, 68.19325, 121.5126 -3712, 69.13191, 135.9547 -3713, 66.59378, 136.2738 -3714, 66.48656, 131.7593 -3715, 66.37289, 118.7403 -3716, 70.71575, 139.42 -3717, 67.15897, 129.0818 -3718, 67.76901, 114.4204 -3719, 65.18164, 113.1913 -3720, 67.83932, 112.5536 -3721, 68.0491, 157.6543 -3722, 68.58692, 121.5904 -3723, 65.95317, 119.206 -3724, 71.02002, 136.1093 -3725, 69.2108, 116.8245 -3726, 67.16712, 133.9377 -3727, 64.82773, 119.5375 -3728, 71.89734, 125.1534 -3729, 66.29137, 119.6552 -3730, 69.63011, 136.2859 -3731, 66.65205, 112.4741 -3732, 70.56251, 132.5837 -3733, 67.79995, 131.5466 -3734, 68.74825, 128.4833 -3735, 66.84629, 137.0769 -3736, 67.47997, 112.9767 -3737, 67.13893, 124.5135 -3738, 68.40021, 138.2798 -3739, 68.86099, 136.6706 -3740, 66.17409, 119.2702 -3741, 68.84978, 131.2561 -3742, 68.67678, 129.8508 -3743, 69.82135, 156.1101 -3744, 64.2599, 108.0741 -3745, 69.71651, 136.2846 -3746, 70.94085, 136.9681 -3747, 70.06779, 139.4128 -3748, 70.88342, 135.7171 -3749, 65.49529, 118.6689 -3750, 68.4804, 138.799 -3751, 68.51303, 138.9157 -3752, 68.16142, 118.2547 -3753, 71.95866, 135.3357 -3754, 64.75487, 129.262 -3755, 70.30789, 135.1908 -3756, 67.4222, 115.1791 -3757, 68.24432, 112.2308 -3758, 68.24598, 122.3013 -3759, 68.67772, 128.2031 -3760, 69.45147, 157.3486 -3761, 67.00023, 128.2287 -3762, 68.53583, 115.0374 -3763, 68.09648, 149.9119 -3764, 66.8815, 118.7213 -3765, 64.35721, 111.8923 -3766, 64.95432, 119.5408 -3767, 68.10575, 121.9841 -3768, 66.80947, 111.1912 -3769, 63.88864, 112.1842 -3770, 67.38665, 106.1061 -3771, 68.92239, 132.2605 -3772, 68.34907, 118.027 -3773, 65.8834, 131.8548 -3774, 65.81926, 122.7493 -3775, 67.6519, 126.4083 -3776, 69.91178, 135.567 -3777, 69.43847, 144.6145 -3778, 68.6245, 133.9108 -3779, 68.5874, 139.0597 -3780, 69.96201, 143.3765 -3781, 68.48251, 133.9215 -3782, 70.14044, 132.9707 -3783, 67.69318, 151.5436 -3784, 69.74263, 140.4279 -3785, 64.14704, 115.8887 -3786, 71.15494, 146.3078 -3787, 70.42127, 135.2438 -3788, 69.4086, 130.0152 -3789, 67.23391, 113.361 -3790, 69.52859, 109.7608 -3791, 69.78153, 155.0882 -3792, 65.86011, 116.5987 -3793, 68.53242, 115.8963 -3794, 69.43053, 123.8453 -3795, 70.51721, 132.1602 -3796, 72.46195, 150.0174 -3797, 70.57152, 123.4049 -3798, 64.81039, 113.7813 -3799, 69.14193, 124.9768 -3800, 72.59694, 140.1938 -3801, 67.29902, 125.6349 -3802, 69.3501, 124.6512 -3803, 69.0374, 115.7152 -3804, 71.50733, 147.7946 -3805, 68.58383, 123.7158 -3806, 68.9172, 137.4837 -3807, 69.94709, 119.3727 -3808, 68.63514, 111.791 -3809, 68.30987, 140.6815 -3810, 68.95399, 142.1807 -3811, 65.52576, 130.6623 -3812, 66.58753, 131.0557 -3813, 69.43486, 118.7635 -3814, 70.6428, 147.6001 -3815, 68.57866, 140.395 -3816, 68.1007, 129.3231 -3817, 70.56771, 125.4514 -3818, 64.97452, 107.0565 -3819, 67.85384, 128.0846 -3820, 71.17071, 131.245 -3821, 67.67057, 112.3113 -3822, 66.04283, 106.7968 -3823, 68.89472, 125.9164 -3824, 66.42827, 138.7008 -3825, 69.42646, 137.7593 -3826, 62.6568, 110.266 -3827, 65.79319, 128.2726 -3828, 71.35208, 150.3381 -3829, 68.54117, 120.4207 -3830, 66.64205, 118.7461 -3831, 67.1013, 132.3003 -3832, 68.09912, 122.8586 -3833, 67.44749, 116.2164 -3834, 68.5689, 105.9279 -3835, 66.74451, 111.2084 -3836, 67.91191, 115.9255 -3837, 67.61468, 132.6425 -3838, 66.79956, 128.7716 -3839, 66.08205, 105.5009 -3840, 69.43398, 130.8951 -3841, 70.06177, 159.8542 -3842, 67.34245, 113.1131 -3843, 65.68008, 104.7032 -3844, 67.65289, 130.0791 -3845, 72.35481, 146.3133 -3846, 64.56198, 117.9061 -3847, 66.56321, 125.872 -3848, 71.88064, 138.7186 -3849, 69.05855, 119.1382 -3850, 68.84729, 130.1311 -3851, 68.33558, 127.2486 -3852, 67.20373, 120.0823 -3853, 66.94024, 116.7898 -3854, 65.6925, 112.1004 -3855, 70.55858, 137.4236 -3856, 66.3239, 112.1502 -3857, 66.31961, 141.3789 -3858, 68.77019, 121.7461 -3859, 68.93596, 130.3465 -3860, 70.19784, 129.2123 -3861, 69.15846, 141.6059 -3862, 66.52917, 107.7722 -3863, 69.76951, 141.4952 -3864, 68.33707, 112.1581 -3865, 66.71052, 116.3208 -3866, 64.93669, 128.5199 -3867, 65.06581, 102.9057 -3868, 67.19588, 114.4447 -3869, 65.6155, 114.5452 -3870, 68.21154, 115.0009 -3871, 71.8127, 151.5781 -3872, 65.23439, 118.7079 -3873, 67.84537, 132.6379 -3874, 66.17647, 115.3378 -3875, 69.61315, 133.5897 -3876, 66.18245, 132.5006 -3877, 67.84508, 134.514 -3878, 69.0936, 126.1625 -3879, 66.12316, 131.3628 -3880, 65.15822, 116.0727 -3881, 69.79407, 141.3766 -3882, 67.00234, 127.3607 -3883, 69.13726, 140.2001 -3884, 65.81826, 126.6507 -3885, 68.20344, 121.9858 -3886, 66.89907, 134.2045 -3887, 65.04452, 102.086 -3888, 66.1717, 117.7314 -3889, 62.93166, 114.6211 -3890, 64.48357, 117.4963 -3891, 66.64624, 111.7542 -3892, 72.41441, 151.933 -3893, 71.79969, 122.983 -3894, 65.66078, 123.3884 -3895, 66.93932, 107.7347 -3896, 70.22759, 138.8617 -3897, 68.20998, 130.7491 -3898, 67.03876, 108.817 -3899, 70.72651, 119.7924 -3900, 67.43797, 132.67 -3901, 69.02832, 144.247 -3902, 71.08333, 130.1898 -3903, 66.59033, 119.8506 -3904, 62.84458, 112.1475 -3905, 65.01513, 112.6016 -3906, 68.89573, 126.6749 -3907, 67.52318, 120.368 -3908, 71.56209, 136.2017 -3909, 69.91081, 114.942 -3910, 65.74474, 116.1331 -3911, 67.86476, 131.3966 -3912, 69.34915, 126.219 -3913, 66.56305, 126.8313 -3914, 64.98952, 106.6708 -3915, 66.28774, 136.3548 -3916, 68.22623, 144.8283 -3917, 68.71834, 121.2425 -3918, 67.34642, 113.9096 -3919, 69.45129, 133.1979 -3920, 68.58821, 118.7312 -3921, 67.13792, 139.5328 -3922, 66.17703, 122.4766 -3923, 65.11882, 136.7334 -3924, 68.98184, 162.1526 -3925, 69.70654, 116.1377 -3926, 65.9028, 116.3873 -3927, 66.40799, 122.7559 -3928, 69.68697, 125.8107 -3929, 71.32231, 127.1985 -3930, 69.39616, 126.21 -3931, 67.10007, 127.4093 -3932, 64.84823, 121.4686 -3933, 65.97406, 120.1281 -3934, 69.40242, 130.8887 -3935, 70.24875, 148.6699 -3936, 66.76364, 108.979 -3937, 68.54135, 132.1438 -3938, 72.31585, 145.2904 -3939, 66.13369, 124.1218 -3940, 65.52533, 106.0457 -3941, 66.8421, 140.4934 -3942, 68.54828, 122.1607 -3943, 67.23496, 135.7089 -3944, 67.89102, 137.9068 -3945, 67.07543, 123.7723 -3946, 68.87056, 131.1289 -3947, 65.48833, 127.832 -3948, 66.94598, 131.0884 -3949, 67.94876, 116.698 -3950, 65.11113, 139.1882 -3951, 69.22852, 144.2813 -3952, 68.87917, 117.3348 -3953, 69.73424, 127.2578 -3954, 70.79565, 138.2181 -3955, 68.12213, 143.3238 -3956, 67.55313, 122.4926 -3957, 66.07053, 137.4736 -3958, 66.64782, 113.759 -3959, 67.54927, 135.4559 -3960, 67.41612, 111.8086 -3961, 64.1913, 123.1259 -3962, 67.52166, 133.1484 -3963, 65.95635, 107.8398 -3964, 67.61855, 125.8836 -3965, 65.95909, 129.0219 -3966, 69.49194, 113.9079 -3967, 67.69417, 134.568 -3968, 64.78748, 127.7878 -3969, 71.3001, 139.1262 -3970, 66.61133, 112.8285 -3971, 66.40129, 121.8472 -3972, 70.76906, 124.1304 -3973, 68.70195, 118.0629 -3974, 69.27545, 135.7574 -3975, 67.14179, 109.264 -3976, 69.40629, 144.7036 -3977, 69.69594, 142.5173 -3978, 67.20823, 137.1694 -3979, 67.59632, 113.3993 -3980, 70.77557, 144.7135 -3981, 66.95587, 128.8462 -3982, 67.91794, 117.0118 -3983, 65.76874, 116.0326 -3984, 69.03038, 132.8327 -3985, 67.53969, 134.5132 -3986, 64.10668, 124.705 -3987, 68.20174, 128.7712 -3988, 68.42812, 135.5603 -3989, 70.21228, 146.5841 -3990, 68.22553, 123.0704 -3991, 67.75587, 132.6394 -3992, 70.5536, 139.4887 -3993, 67.1115, 130.7106 -3994, 66.50872, 102.3817 -3995, 67.80339, 121.6264 -3996, 66.82898, 114.8121 -3997, 66.51285, 117.0249 -3998, 68.00268, 116.0381 -3999, 67.30483, 116.7343 -4000, 67.32611, 119.0783 -4001, 69.00102, 126.7983 -4002, 67.75162, 131.9365 -4003, 67.085, 135.9003 -4004, 69.0139, 151.5006 -4005, 66.13638, 143.9136 -4006, 66.74555, 131.5241 -4007, 66.32903, 130.233 -4008, 65.30345, 123.9503 -4009, 69.79829, 126.6311 -4010, 67.5243, 115.4643 -4011, 71.02928, 148.2436 -4012, 69.46091, 129.9518 -4013, 69.36777, 135.4124 -4014, 68.57098, 141.1859 -4015, 62.44964, 109.5643 -4016, 68.97793, 124.3412 -4017, 65.21731, 118.4281 -4018, 67.07967, 126.0679 -4019, 68.77673, 132.1985 -4020, 68.66629, 132.1617 -4021, 65.65796, 121.8407 -4022, 67.81659, 147.0148 -4023, 68.49369, 135.6229 -4024, 67.72209, 131.8871 -4025, 67.18182, 149.6975 -4026, 68.74487, 132.2867 -4027, 70.54344, 145.1882 -4028, 67.49034, 113.6369 -4029, 70.04011, 121.888 -4030, 66.14103, 131.9355 -4031, 63.03853, 116.7342 -4032, 65.8375, 113.1662 -4033, 70.09381, 132.9761 -4034, 65.46276, 101.8479 -4035, 66.72609, 119.4606 -4036, 67.15508, 126.3196 -4037, 67.89972, 116.5061 -4038, 66.83955, 124.3345 -4039, 66.33542, 137.2975 -4040, 69.98947, 157.9877 -4041, 69.19394, 136.793 -4042, 71.8433, 144.8892 -4043, 67.96111, 116.363 -4044, 67.8762, 125.536 -4045, 64.85023, 109.135 -4046, 71.00028, 128.7879 -4047, 68.9177, 148.7167 -4048, 68.11801, 108.4191 -4049, 68.45508, 120.7972 -4050, 66.1659, 119.9403 -4051, 68.09431, 141.8006 -4052, 67.04148, 116.4363 -4053, 67.9941, 136.4958 -4054, 70.03532, 162.0645 -4055, 69.71898, 137.99 -4056, 66.11294, 127.9705 -4057, 66.512, 124.0973 -4058, 72.14119, 147.0929 -4059, 66.26162, 136.034 -4060, 68.6341, 134.9883 -4061, 67.01999, 108.4088 -4062, 68.50946, 115.87 -4063, 66.65107, 132.7811 -4064, 69.13504, 150.0321 -4065, 66.3268, 124.4084 -4066, 69.03467, 125.2378 -4067, 68.41501, 131.125 -4068, 68.81498, 120.474 -4069, 69.71434, 126.7877 -4070, 69.71611, 119.4332 -4071, 68.46316, 121.7583 -4072, 66.76387, 127.8974 -4073, 65.40254, 113.6724 -4074, 70.56984, 123.8685 -4075, 65.94172, 123.6931 -4076, 68.02141, 122.0341 -4077, 67.1732, 114.7014 -4078, 65.497, 117.2034 -4079, 67.67185, 121.3213 -4080, 65.52488, 125.4382 -4081, 71.02076, 138.2195 -4082, 66.22083, 130.9358 -4083, 68.98001, 115.4355 -4084, 66.95762, 137.2853 -4085, 67.11276, 127.0824 -4086, 68.4405, 129.3152 -4087, 67.69709, 131.4005 -4088, 63.22395, 116.1956 -4089, 65.22711, 127.0613 -4090, 68.43, 131.3423 -4091, 66.57506, 121.9677 -4092, 63.5966, 113.2103 -4093, 67.20354, 123.3458 -4094, 66.03224, 99.66224 -4095, 67.24122, 124.0545 -4096, 66.79748, 130.086 -4097, 68.48589, 137.1664 -4098, 69.29654, 141.1792 -4099, 66.60912, 101.7777 -4100, 66.26464, 128.8128 -4101, 69.37333, 129.9046 -4102, 67.3275, 127.3943 -4103, 63.91658, 113.9444 -4104, 67.23806, 103.9784 -4105, 65.93291, 117.1245 -4106, 70.35586, 135.3823 -4107, 68.57141, 131.0931 -4108, 66.82713, 130.6498 -4109, 64.43271, 119.4229 -4110, 71.08973, 127.4216 -4111, 72.07911, 124.3172 -4112, 68.90533, 114.8714 -4113, 68.44145, 121.075 -4114, 68.46055, 115.3401 -4115, 65.13343, 106.3017 -4116, 71.17466, 131.6919 -4117, 69.39047, 139.886 -4118, 66.81513, 118.6787 -4119, 68.62714, 121.1908 -4120, 68.09304, 134.8095 -4121, 68.22911, 128.3543 -4122, 67.79469, 135.8259 -4123, 67.60704, 127.516 -4124, 70.47713, 135.5209 -4125, 68.89196, 119.3961 -4126, 67.18902, 141.7312 -4127, 69.52776, 138.0107 -4128, 64.00428, 106.2963 -4129, 67.23705, 129.0392 -4130, 66.57904, 110.0436 -4131, 73.08886, 143.597 -4132, 70.23666, 135.6427 -4133, 65.9154, 120.8619 -4134, 70.20771, 129.7829 -4135, 65.25899, 110.1349 -4136, 67.70538, 122.3278 -4137, 66.65382, 125.1019 -4138, 66.90522, 121.2072 -4139, 69.73584, 135.8864 -4140, 68.71515, 120.8681 -4141, 65.97593, 125.6805 -4142, 66.04025, 129.139 -4143, 69.22349, 147.1694 -4144, 68.01411, 124.9845 -4145, 70.44079, 141.5704 -4146, 66.62715, 138.6126 -4147, 68.47642, 126.7582 -4148, 68.20132, 134.1926 -4149, 69.18686, 148.1132 -4150, 66.55515, 122.4609 -4151, 67.24936, 125.9051 -4152, 68.23976, 134.1521 -4153, 68.93236, 140.8846 -4154, 69.16831, 127.3274 -4155, 68.15988, 127.5146 -4156, 70.47785, 135.4777 -4157, 71.46159, 134.7474 -4158, 69.56493, 139.1714 -4159, 72.04678, 147.9343 -4160, 68.11706, 122.1187 -4161, 67.11974, 136.1107 -4162, 65.25882, 112.8949 -4163, 67.9316, 127.1332 -4164, 68.62153, 134.6362 -4165, 68.96662, 110.1335 -4166, 67.70641, 137.8451 -4167, 64.82138, 132.6417 -4168, 69.74734, 130.7984 -4169, 67.83743, 126.8633 -4170, 66.47424, 119.564 -4171, 70.29564, 136.1613 -4172, 67.99529, 136.5186 -4173, 71.46156, 132.6211 -4174, 66.73734, 114.2795 -4175, 66.34826, 116.7421 -4176, 69.25165, 137.7726 -4177, 67.54427, 130.0454 -4178, 70.67379, 135.7083 -4179, 67.30702, 135.6941 -4180, 64.62951, 101.3328 -4181, 66.57405, 130.5342 -4182, 69.29679, 137.3539 -4183, 69.27554, 121.0292 -4184, 69.50607, 120.3639 -4185, 68.26403, 141.0864 -4186, 69.86553, 139.0365 -4187, 70.7672, 136.4844 -4188, 69.24893, 142.8621 -4189, 67.01021, 104.1735 -4190, 69.1245, 145.5379 -4191, 71.27947, 120.9881 -4192, 74.03777, 139.5953 -4193, 67.16426, 120.8184 -4194, 69.16282, 125.9266 -4195, 68.09796, 126.298 -4196, 67.77952, 133.2805 -4197, 71.11526, 123.3401 -4198, 64.98837, 105.6441 -4199, 70.31512, 142.3548 -4200, 69.06438, 130.4546 -4201, 65.46827, 110.4915 -4202, 65.9316, 114.9535 -4203, 68.42739, 133.4786 -4204, 70.30053, 139.3092 -4205, 67.09535, 129.4262 -4206, 68.43342, 121.8407 -4207, 65.83898, 136.3506 -4208, 67.54012, 143.6547 -4209, 68.48012, 126.9991 -4210, 71.57695, 139.6645 -4211, 69.72167, 139.1423 -4212, 66.29363, 126.9897 -4213, 68.937, 142.7584 -4214, 71.41489, 149.8921 -4215, 69.62838, 143.7861 -4216, 71.18773, 152.4615 -4217, 68.30221, 143.546 -4218, 67.75946, 152.9883 -4219, 68.11064, 133.9839 -4220, 69.47284, 135.5993 -4221, 70.16644, 134.6592 -4222, 67.64262, 124.1779 -4223, 66.81134, 118.271 -4224, 64.94018, 121.7107 -4225, 65.36721, 121.3633 -4226, 68.54428, 133.1727 -4227, 67.97819, 114.8234 -4228, 68.34252, 137.7084 -4229, 68.31923, 122.5531 -4230, 66.1507, 105.4808 -4231, 67.80629, 119.5263 -4232, 70.13434, 135.1981 -4233, 65.63247, 122.1851 -4234, 65.52678, 114.9083 -4235, 68.04573, 136.5998 -4236, 68.17956, 143.4398 -4237, 66.65253, 103.9121 -4238, 68.05725, 133.6935 -4239, 67.34998, 119.11 -4240, 70.00498, 129.4393 -4241, 66.55749, 127.0247 -4242, 66.82552, 144.7401 -4243, 70.07322, 123.0627 -4244, 65.9202, 126.0649 -4245, 69.54043, 147.8452 -4246, 63.89592, 117.0034 -4247, 69.03457, 131.5836 -4248, 67.22877, 125.3671 -4249, 66.12426, 128.6776 -4250, 67.87785, 132.3484 -4251, 66.8531, 115.879 -4252, 69.05041, 117.2786 -4253, 70.87198, 140.1922 -4254, 67.4692, 135.8756 -4255, 70.22874, 132.974 -4256, 66.93905, 117.9845 -4257, 69.928, 127.9273 -4258, 67.46962, 122.3518 -4259, 65.00765, 109.2661 -4260, 68.97698, 134.6605 -4261, 67.28864, 129.1099 -4262, 69.65152, 129.9016 -4263, 67.41038, 135.7013 -4264, 67.80162, 140.9551 -4265, 66.75484, 101.615 -4266, 67.9469, 127.0723 -4267, 65.43768, 127.1338 -4268, 68.54153, 125.4375 -4269, 66.7501, 120.7329 -4270, 66.75808, 124.1194 -4271, 67.14647, 118.2882 -4272, 64.69559, 116.7241 -4273, 69.18516, 113.5275 -4274, 66.84281, 128.2428 -4275, 66.4464, 130.5346 -4276, 69.49077, 106.2307 -4277, 68.32951, 119.3464 -4278, 68.38974, 120.9379 -4279, 69.42584, 120.7725 -4280, 64.39313, 123.2547 -4281, 66.61651, 118.437 -4282, 65.86548, 115.3497 -4283, 68.17805, 123.2437 -4284, 67.39926, 116.7036 -4285, 66.31407, 116.4127 -4286, 70.68802, 132.3031 -4287, 67.26683, 123.296 -4288, 67.1325, 117.0996 -4289, 67.61674, 132.7665 -4290, 66.91216, 122.0016 -4291, 70.58226, 146.1837 -4292, 66.47926, 132.2434 -4293, 69.5459, 146.3853 -4294, 66.60835, 119.6048 -4295, 67.34376, 137.8448 -4296, 64.77135, 124.6944 -4297, 66.46439, 128.8286 -4298, 66.64913, 119.3743 -4299, 70.56844, 123.43 -4300, 65.31528, 106.8598 -4301, 72.48479, 134.4771 -4302, 67.86837, 129.8224 -4303, 68.52634, 109.2449 -4304, 68.61738, 123.566 -4305, 66.50536, 125.5915 -4306, 70.46311, 126.8938 -4307, 64.63883, 137.3284 -4308, 64.12338, 108.9028 -4309, 69.28959, 135.4082 -4310, 66.52926, 131.7847 -4311, 69.30883, 122.2514 -4312, 68.54471, 134.4462 -4313, 67.25904, 108.6926 -4314, 67.96864, 124.3293 -4315, 65.3382, 131.6971 -4316, 68.51678, 129.4089 -4317, 68.1636, 127.5867 -4318, 64.67487, 128.3635 -4319, 66.13689, 130.3095 -4320, 68.58303, 132.5038 -4321, 68.34844, 145.901 -4322, 64.6569, 126.4447 -4323, 68.68484, 136.1093 -4324, 67.75816, 121.0123 -4325, 68.48014, 132.472 -4326, 67.7747, 126.7129 -4327, 64.7249, 115.7365 -4328, 66.6102, 118.9776 -4329, 72.2969, 145.854 -4330, 70.30878, 148.238 -4331, 66.77503, 122.7048 -4332, 66.70433, 120.42 -4333, 69.39368, 126.5408 -4334, 67.37433, 131.6976 -4335, 67.20466, 123.5504 -4336, 67.9947, 119.9449 -4337, 67.08886, 123.5117 -4338, 68.81947, 123.5561 -4339, 71.07494, 134.0842 -4340, 68.98151, 136.7907 -4341, 69.80853, 121.3415 -4342, 70.21339, 132.8196 -4343, 67.33679, 112.8553 -4344, 73.52131, 168.881 -4345, 67.45857, 131.4655 -4346, 68.65576, 121.3053 -4347, 68.77267, 126.5212 -4348, 67.03704, 125.3926 -4349, 66.86733, 114.7951 -4350, 67.01919, 134.5043 -4351, 68.52514, 133.6321 -4352, 67.69771, 121.778 -4353, 68.43487, 126.847 -4354, 67.71514, 128.0152 -4355, 70.39987, 113.918 -4356, 68.44396, 134.0367 -4357, 66.80834, 131.6397 -4358, 67.35984, 126.8163 -4359, 67.79903, 131.89 -4360, 64.83853, 115.6714 -4361, 69.57892, 126.2769 -4362, 64.85426, 102.1079 -4363, 69.318, 139.4982 -4364, 69.58868, 151.474 -4365, 66.52781, 122.1092 -4366, 67.93528, 125.7438 -4367, 66.39941, 123.1702 -4368, 68.28614, 136.4907 -4369, 68.17646, 116.4352 -4370, 65.36868, 117.4086 -4371, 67.96446, 112.4388 -4372, 69.02437, 139.9596 -4373, 68.08001, 121.2457 -4374, 67.68973, 128.3855 -4375, 67.05199, 120.0329 -4376, 65.62946, 109.3694 -4377, 64.31704, 129.4821 -4378, 69.08279, 152.901 -4379, 66.7653, 136.5692 -4380, 72.77662, 133.6427 -4381, 66.97685, 137.0715 -4382, 70.10322, 124.931 -4383, 68.92731, 131.7141 -4384, 65.24486, 119.642 -4385, 68.7959, 131.2416 -4386, 69.0613, 119.2979 -4387, 67.39122, 115.0093 -4388, 63.14333, 122.7882 -4389, 68.43035, 124.8597 -4390, 65.72614, 98.39409 -4391, 66.71343, 124.0144 -4392, 68.2317, 124.296 -4393, 67.07728, 124.0139 -4394, 68.10745, 132.0081 -4395, 67.23206, 134.8625 -4396, 69.76432, 136.0319 -4397, 66.65442, 127.9094 -4398, 67.20022, 136.8048 -4399, 71.20749, 138.9045 -4400, 71.64258, 154.3787 -4401, 68.09536, 139.4726 -4402, 68.11601, 138.099 -4403, 69.57164, 133.752 -4404, 67.897, 123.706 -4405, 68.92362, 133.4767 -4406, 68.85579, 129.4416 -4407, 66.93016, 145.6689 -4408, 71.03782, 126.1809 -4409, 66.94058, 121.4461 -4410, 69.32304, 142.2131 -4411, 67.21622, 119.7238 -4412, 64.26905, 106.7157 -4413, 67.43203, 130.1147 -4414, 68.98981, 138.5589 -4415, 67.38395, 120.821 -4416, 67.72313, 112.5397 -4417, 67.79721, 127.7983 -4418, 67.98674, 133.9054 -4419, 66.87883, 99.56439 -4420, 69.75841, 122.1663 -4421, 67.87888, 131.3067 -4422, 69.23586, 143.7584 -4423, 68.7266, 151.6764 -4424, 67.19957, 115.6396 -4425, 66.58109, 107.1456 -4426, 68.82634, 150.2899 -4427, 67.67068, 118.7544 -4428, 64.81833, 108.9651 -4429, 68.88452, 136.5556 -4430, 65.39146, 124.8106 -4431, 69.91503, 119.8377 -4432, 63.54206, 99.76986 -4433, 70.13123, 148.4142 -4434, 67.05703, 133.3179 -4435, 69.45941, 135.9285 -4436, 66.94935, 128.028 -4437, 67.81851, 122.8946 -4438, 63.65292, 127.5172 -4439, 67.11763, 127.4499 -4440, 68.64794, 136.7766 -4441, 69.3026, 132.8961 -4442, 68.60861, 122.4088 -4443, 66.80109, 113.3951 -4444, 70.87196, 115.3527 -4445, 67.90794, 136.4296 -4446, 64.88167, 131.3802 -4447, 70.78203, 151.4922 -4448, 70.35834, 112.2811 -4449, 66.99549, 129.9559 -4450, 68.83182, 116.898 -4451, 67.33693, 124.2691 -4452, 68.98465, 127.9153 -4453, 67.60913, 139.9747 -4454, 65.38645, 117.6032 -4455, 68.16769, 133.1749 -4456, 68.17351, 119.293 -4457, 69.88287, 122.8937 -4458, 67.58588, 123.5244 -4459, 68.5846, 131.1773 -4460, 67.00383, 95.88791 -4461, 69.99553, 158.3578 -4462, 72.53259, 133.576 -4463, 65.08427, 135.3471 -4464, 66.11127, 128.7408 -4465, 69.9046, 129.0113 -4466, 67.97472, 118.2064 -4467, 66.82932, 136.9731 -4468, 69.3533, 134.4424 -4469, 71.39534, 124.8929 -4470, 66.59922, 136.3075 -4471, 69.40189, 120.8579 -4472, 70.27495, 135.9954 -4473, 67.31858, 124.6169 -4474, 71.45173, 131.5614 -4475, 68.83931, 157.078 -4476, 68.99723, 124.6289 -4477, 67.73454, 132.1244 -4478, 64.8353, 118.2692 -4479, 70.74426, 139.9319 -4480, 72.26598, 149.2389 -4481, 64.72663, 126.0976 -4482, 67.5752, 119.6545 -4483, 69.51645, 140.2187 -4484, 70.48831, 111.7304 -4485, 69.32666, 128.4377 -4486, 68.52587, 109.5741 -4487, 73.16001, 135.1826 -4488, 64.28542, 119.4849 -4489, 66.65608, 135.1861 -4490, 64.71064, 111.5654 -4491, 62.99042, 115.6669 -4492, 68.70787, 123.0031 -4493, 68.12126, 126.6086 -4494, 66.77899, 122.0006 -4495, 68.23149, 119.6607 -4496, 68.42894, 122.0538 -4497, 64.0197, 127.9519 -4498, 71.09565, 117.1362 -4499, 69.87248, 147.2908 -4500, 66.51831, 125.4061 -4501, 68.57445, 123.3187 -4502, 67.46212, 139.4874 -4503, 69.61527, 137.9174 -4504, 66.86386, 119.266 -4505, 66.18998, 115.9555 -4506, 69.7905, 130.5095 -4507, 70.21174, 131.2829 -4508, 71.14846, 130.8226 -4509, 74.28376, 147.7877 -4510, 64.48835, 102.7518 -4511, 65.97201, 124.009 -4512, 66.51754, 134.4456 -4513, 67.83224, 125.095 -4514, 68.7614, 138.5499 -4515, 70.18641, 134.395 -4516, 65.12676, 118.875 -4517, 71.25743, 136.5501 -4518, 67.75602, 127.7343 -4519, 67.80062, 120.5416 -4520, 66.71286, 137.1043 -4521, 65.9331, 119.1788 -4522, 70.75201, 124.9258 -4523, 64.36337, 100.9973 -4524, 66.51439, 111.0706 -4525, 69.03382, 143.6707 -4526, 65.454, 124.8217 -4527, 68.82248, 136.6368 -4528, 69.35365, 136.1504 -4529, 68.4663, 126.8492 -4530, 69.50765, 133.1992 -4531, 67.68823, 138.961 -4532, 69.41031, 136.4148 -4533, 69.67469, 118.0784 -4534, 68.04007, 149.4074 -4535, 65.16827, 124.2854 -4536, 66.15991, 131.0075 -4537, 65.87678, 122.0955 -4538, 66.73303, 125.1468 -4539, 66.77722, 107.7781 -4540, 67.93868, 131.2999 -4541, 67.48863, 128.1304 -4542, 70.19163, 111.1449 -4543, 66.40732, 111.0917 -4544, 68.05629, 115.4242 -4545, 65.52001, 132.1594 -4546, 65.64331, 121.3271 -4547, 65.63637, 136.2254 -4548, 67.70932, 115.7406 -4549, 67.49917, 133.5066 -4550, 66.29127, 127.8453 -4551, 69.74138, 142.3054 -4552, 63.45437, 106.2611 -4553, 69.46406, 134.3778 -4554, 68.05326, 120.6881 -4555, 67.07399, 139.5754 -4556, 65.59536, 124.4232 -4557, 70.01907, 122.7936 -4558, 67.13432, 122.1132 -4559, 69.95471, 139.8142 -4560, 68.31764, 130.2584 -4561, 67.93284, 111.6216 -4562, 68.37831, 109.8238 -4563, 69.38169, 138.2864 -4564, 67.83912, 121.4831 -4565, 66.76314, 120.3041 -4566, 69.13398, 124.0916 -4567, 65.58554, 119.738 -4568, 67.12002, 132.4267 -4569, 68.20826, 126.163 -4570, 69.83352, 124.5901 -4571, 68.52243, 129.9774 -4572, 66.61883, 114.8356 -4573, 67.03413, 123.505 -4574, 68.58395, 124.7217 -4575, 68.48187, 126.5771 -4576, 68.22285, 143.9747 -4577, 70.11615, 127.6471 -4578, 64.31068, 119.6461 -4579, 68.91069, 103.7011 -4580, 68.01192, 140.6438 -4581, 68.44067, 130.1721 -4582, 69.5139, 132.2547 -4583, 69.20247, 118.3357 -4584, 66.04611, 107.3271 -4585, 66.015, 134.3205 -4586, 69.00199, 128.0736 -4587, 69.61754, 143.0774 -4588, 69.41293, 127.4879 -4589, 68.42341, 117.5081 -4590, 68.59122, 132.3095 -4591, 70.47426, 126.1309 -4592, 70.13001, 138.7704 -4593, 69.01521, 128.4133 -4594, 70.97422, 129.5877 -4595, 69.42301, 116.2255 -4596, 66.84684, 111.121 -4597, 68.37668, 118.7218 -4598, 67.80923, 131.6974 -4599, 66.4699, 141.4318 -4600, 70.23437, 138.4311 -4601, 70.16075, 139.4051 -4602, 66.23907, 109.824 -4603, 68.76154, 125.4809 -4604, 64.64843, 122.8828 -4605, 69.51686, 150.847 -4606, 67.7263, 128.1654 -4607, 68.53926, 121.0356 -4608, 68.16448, 137.2303 -4609, 70.16738, 131.504 -4610, 66.92499, 127.9481 -4611, 67.18215, 127.5982 -4612, 65.35392, 125.9641 -4613, 67.71159, 128.942 -4614, 69.35197, 123.6344 -4615, 67.54023, 132.426 -4616, 68.43556, 122.0015 -4617, 66.50187, 130.4876 -4618, 68.9358, 127.2358 -4619, 65.99168, 119.7409 -4620, 69.45486, 140.6464 -4621, 66.9045, 137.6207 -4622, 67.63969, 118.1787 -4623, 66.1437, 128.4443 -4624, 67.59159, 134.3476 -4625, 71.78019, 166.3016 -4626, 69.44107, 123.4122 -4627, 71.98935, 142.7132 -4628, 70.15393, 123.8781 -4629, 70.10971, 126.9465 -4630, 66.68738, 117.3343 -4631, 70.49701, 137.1545 -4632, 65.43499, 105.8885 -4633, 69.52902, 123.5902 -4634, 66.08382, 128.3405 -4635, 67.53462, 122.189 -4636, 66.70738, 119.1554 -4637, 67.68437, 127.9357 -4638, 64.9133, 117.8536 -4639, 66.99054, 114.2598 -4640, 66.90392, 124.3436 -4641, 68.30928, 121.873 -4642, 67.78254, 107.1698 -4643, 66.67402, 105.6942 -4644, 68.02345, 105.9209 -4645, 66.26386, 110.0377 -4646, 68.65872, 126.4691 -4647, 68.8758, 133.5623 -4648, 70.66494, 110.5288 -4649, 67.46764, 142.8422 -4650, 66.86561, 131.3179 -4651, 68.07938, 142.0148 -4652, 66.97214, 105.1855 -4653, 67.09087, 119.0616 -4654, 66.25477, 131.6159 -4655, 68.48544, 123.1869 -4656, 67.56328, 114.1342 -4657, 67.94652, 127.8594 -4658, 67.63842, 123.8136 -4659, 69.49172, 139.1029 -4660, 69.35023, 117.3644 -4661, 68.48414, 155.8502 -4662, 67.34242, 133.4692 -4663, 63.7973, 128.2173 -4664, 66.47145, 128.9056 -4665, 68.39396, 145.1997 -4666, 67.86356, 117.7852 -4667, 69.62777, 129.2314 -4668, 65.50648, 110.3151 -4669, 72.72292, 145.1721 -4670, 70.14217, 132.9902 -4671, 68.78695, 121.1068 -4672, 68.67806, 137.4109 -4673, 71.31953, 141.1587 -4674, 67.84642, 137.6199 -4675, 68.40321, 111.129 -4676, 65.63922, 129.8425 -4677, 70.43045, 130.4964 -4678, 68.00444, 124.4823 -4679, 67.39155, 138.9571 -4680, 68.0015, 136.2141 -4681, 69.24153, 131.2422 -4682, 68.36251, 106.3978 -4683, 68.48326, 124.4191 -4684, 63.36476, 110.7614 -4685, 64.47663, 125.7709 -4686, 65.29852, 114.0163 -4687, 66.60327, 135.8777 -4688, 71.58316, 133.3415 -4689, 69.32199, 138.8873 -4690, 69.28785, 132.6007 -4691, 65.72065, 123.9237 -4692, 70.17847, 127.4536 -4693, 67.75328, 148.2412 -4694, 68.02834, 122.158 -4695, 67.12107, 119.7528 -4696, 69.66713, 117.5732 -4697, 69.00275, 125.9822 -4698, 65.31244, 137.7114 -4699, 67.28896, 108.2831 -4700, 68.80003, 133.9222 -4701, 68.98651, 128.5798 -4702, 67.06068, 136.4265 -4703, 68.05695, 128.2201 -4704, 66.84523, 112.124 -4705, 68.59912, 135.1695 -4706, 67.74997, 127.2095 -4707, 67.38104, 119.7502 -4708, 69.44609, 119.5742 -4709, 66.16242, 137.4896 -4710, 68.41685, 129.0061 -4711, 71.03861, 147.6293 -4712, 66.91687, 126.9994 -4713, 68.77967, 110.6833 -4714, 69.49877, 137.0191 -4715, 65.22814, 125.0944 -4716, 66.60077, 142.9751 -4717, 69.16164, 129.2245 -4718, 67.09027, 142.6689 -4719, 67.51801, 133.2004 -4720, 63.13165, 135.8015 -4721, 73.45251, 155.9981 -4722, 63.47897, 110.1628 -4723, 67.17019, 137.8439 -4724, 66.73316, 121.0711 -4725, 67.93199, 115.9738 -4726, 70.64087, 129.3937 -4727, 65.33506, 111.071 -4728, 66.92901, 111.5159 -4729, 71.16317, 144.9723 -4730, 68.19393, 123.3543 -4731, 68.17463, 127.3197 -4732, 65.15114, 111.6275 -4733, 66.95485, 123.4444 -4734, 68.71217, 116.1338 -4735, 66.21228, 106.3145 -4736, 68.06876, 129.3926 -4737, 70.20125, 145.3962 -4738, 67.33368, 130.253 -4739, 67.63632, 144.0878 -4740, 66.23692, 122.5351 -4741, 67.59318, 133.0454 -4742, 67.82746, 107.4374 -4743, 71.17149, 149.076 -4744, 64.72317, 116.8801 -4745, 63.55844, 103.049 -4746, 69.71436, 117.5245 -4747, 68.3598, 130.8889 -4748, 68.51115, 143.0422 -4749, 66.59144, 105.2595 -4750, 68.90018, 120.1055 -4751, 68.62103, 143.016 -4752, 67.84607, 126.8695 -4753, 68.54416, 138.9043 -4754, 66.54197, 121.5207 -4755, 70.09349, 131.7383 -4756, 68.07186, 120.9546 -4757, 69.12659, 138.612 -4758, 70.69432, 147.3622 -4759, 68.92726, 130.0261 -4760, 67.10353, 124.1674 -4761, 68.07727, 143.489 -4762, 65.82037, 123.8217 -4763, 68.89326, 130.7247 -4764, 66.85902, 123.2355 -4765, 69.44484, 114.1544 -4766, 68.71047, 153.0572 -4767, 69.65196, 126.5914 -4768, 66.28558, 120.8002 -4769, 69.30112, 129.099 -4770, 70.5502, 145.7179 -4771, 67.09825, 121.1429 -4772, 66.43672, 119.0362 -4773, 68.01988, 134.8026 -4774, 65.04188, 132.806 -4775, 69.12072, 127.696 -4776, 66.70731, 131.1142 -4777, 71.77408, 129.1887 -4778, 68.2889, 114.3058 -4779, 64.9734, 114.0111 -4780, 71.4599, 141.1522 -4781, 65.03556, 113.4672 -4782, 69.05564, 136.4157 -4783, 70.76986, 134.7036 -4784, 67.74608, 129.3842 -4785, 65.393, 97.8247 -4786, 68.01276, 130.7321 -4787, 70.21576, 146.9626 -4788, 69.68073, 139.0045 -4789, 67.54382, 126.4992 -4790, 70.15526, 138.6155 -4791, 68.40203, 123.6083 -4792, 65.77722, 132.5113 -4793, 66.97553, 125.2087 -4794, 69.02762, 116.7207 -4795, 68.43486, 140.1941 -4796, 68.55513, 115.1087 -4797, 69.0732, 129.883 -4798, 68.09033, 124.4072 -4799, 69.05185, 127.8751 -4800, 66.95318, 118.9592 -4801, 69.27087, 136.2203 -4802, 64.46096, 114.2431 -4803, 64.9549, 111.1484 -4804, 66.87663, 134.4741 -4805, 68.23273, 125.8111 -4806, 69.044, 137.9178 -4807, 69.87691, 109.3782 -4808, 66.17919, 115.505 -4809, 65.71652, 120.607 -4810, 65.66691, 130.3822 -4811, 70.42201, 130.8399 -4812, 68.53986, 141.4287 -4813, 67.62274, 113.1045 -4814, 69.96111, 120.7486 -4815, 65.83646, 111.1042 -4816, 68.88975, 136.915 -4817, 66.11515, 125.3766 -4818, 68.70642, 132.7497 -4819, 65.79474, 118.1206 -4820, 68.52388, 129.7188 -4821, 70.82503, 138.2801 -4822, 69.38767, 127.8541 -4823, 64.99997, 106.3608 -4824, 67.55168, 118.5889 -4825, 67.1831, 117.5862 -4826, 68.17915, 133.4329 -4827, 69.20783, 120.0598 -4828, 69.94376, 124.5943 -4829, 64.18266, 118.6707 -4830, 68.05417, 135.4153 -4831, 66.24238, 121.9611 -4832, 69.33374, 133.7451 -4833, 67.55372, 118.1307 -4834, 67.24855, 128.5772 -4835, 66.37183, 124.8378 -4836, 66.21681, 135.8262 -4837, 68.48138, 115.2564 -4838, 65.99503, 146.0235 -4839, 68.20817, 143.0554 -4840, 64.83886, 120.4189 -4841, 69.47052, 136.1018 -4842, 70.66531, 135.2724 -4843, 65.31799, 113.9184 -4844, 73.62592, 144.2733 -4845, 65.64183, 139.218 -4846, 66.1763, 137.8042 -4847, 68.20944, 123.0101 -4848, 67.33013, 126.067 -4849, 70.70642, 148.5372 -4850, 69.27187, 110.7831 -4851, 66.49201, 120.029 -4852, 63.73844, 122.7468 -4853, 68.73929, 128.6261 -4854, 65.95611, 120.8344 -4855, 68.2791, 125.4675 -4856, 66.29813, 127.7337 -4857, 67.26906, 132.8131 -4858, 70.01685, 141.7715 -4859, 66.99124, 121.3387 -4860, 63.33461, 116.4184 -4861, 66.48133, 114.4604 -4862, 66.96424, 126.3607 -4863, 67.76229, 129.6594 -4864, 68.64237, 128.845 -4865, 70.16208, 141.6777 -4866, 70.96379, 140.0763 -4867, 69.50635, 126.771 -4868, 63.75673, 104.9152 -4869, 67.97424, 152.1104 -4870, 66.1089, 119.3998 -4871, 63.30114, 102.7788 -4872, 68.76435, 104.4743 -4873, 67.68224, 122.9173 -4874, 71.11972, 130.0384 -4875, 68.865, 121.9668 -4876, 70.02623, 131.5675 -4877, 65.6918, 107.2827 -4878, 63.3557, 117.6886 -4879, 66.86873, 143.4791 -4880, 63.65356, 102.6027 -4881, 65.50331, 116.8988 -4882, 68.61979, 123.9844 -4883, 71.06865, 136.2899 -4884, 67.90434, 123.2082 -4885, 69.04428, 144.3998 -4886, 68.23808, 145.3389 -4887, 67.60055, 119.9359 -4888, 68.72349, 131.6298 -4889, 69.72755, 133.7225 -4890, 67.39229, 146.2703 -4891, 67.19624, 119.8227 -4892, 65.56913, 107.9515 -4893, 65.93896, 109.1714 -4894, 68.3392, 134.1385 -4895, 66.37854, 130.6212 -4896, 68.06195, 116.0239 -4897, 72.14804, 134.4365 -4898, 66.3, 134.8203 -4899, 70.52384, 116.5449 -4900, 65.956, 126.3619 -4901, 69.77937, 127.6585 -4902, 68.01271, 125.5257 -4903, 71.04627, 134.624 -4904, 70.30748, 129.3855 -4905, 69.8685, 127.9899 -4906, 68.55351, 119.5254 -4907, 68.04279, 111.4427 -4908, 68.32377, 143.6406 -4909, 68.43992, 124.9 -4910, 69.70106, 125.39 -4911, 69.86274, 126.7733 -4912, 65.28588, 120.2017 -4913, 68.23316, 120.3497 -4914, 67.56772, 130.5236 -4915, 67.92319, 137.9222 -4916, 65.9763, 118.559 -4917, 66.72703, 126.2936 -4918, 67.16036, 135.8841 -4919, 67.7804, 122.1423 -4920, 64.55365, 106.3292 -4921, 67.47804, 131.5261 -4922, 67.29005, 122.7303 -4923, 66.84522, 114.8025 -4924, 63.83743, 120.2347 -4925, 64.04876, 122.1794 -4926, 69.05705, 145.6834 -4927, 66.07726, 117.709 -4928, 69.83849, 131.9638 -4929, 70.33978, 128.3473 -4930, 67.88517, 132.8351 -4931, 66.30635, 120.4227 -4932, 70.70419, 127.4847 -4933, 64.63844, 111.2536 -4934, 67.37468, 118.4249 -4935, 67.32338, 132.2462 -4936, 68.79557, 137.0621 -4937, 69.49827, 130.716 -4938, 69.18297, 133.2681 -4939, 68.05335, 120.2172 -4940, 65.60027, 124.9529 -4941, 69.84728, 135.0017 -4942, 71.20265, 155.3163 -4943, 66.1002, 114.3986 -4944, 68.91567, 143.1158 -4945, 65.88189, 111.2503 -4946, 67.45521, 121.8782 -4947, 67.21505, 122.1602 -4948, 65.97609, 124.7486 -4949, 67.96746, 130.7902 -4950, 66.85926, 128.0209 -4951, 67.62991, 120.2907 -4952, 67.1994, 125.7923 -4953, 65.68971, 131.2235 -4954, 68.65173, 131.3886 -4955, 68.37333, 126.8527 -4956, 66.48906, 112.4772 -4957, 66.03608, 126.3124 -4958, 67.01056, 118.5625 -4959, 67.52148, 141.824 -4960, 68.94504, 135.164 -4961, 65.95216, 138.0343 -4962, 68.70893, 111.9057 -4963, 64.0908, 109.4352 -4964, 66.00548, 106.1651 -4965, 70.50014, 138.7377 -4966, 69.06617, 138.8835 -4967, 67.20849, 131.6754 -4968, 68.71365, 133.501 -4969, 70.4988, 123.6003 -4970, 70.09293, 120.5015 -4971, 67.10959, 127.9008 -4972, 67.94613, 108.2182 -4973, 69.9019, 132.8392 -4974, 68.45258, 112.1406 -4975, 69.5192, 131.5346 -4976, 65.52153, 124.897 -4977, 67.62906, 115.9246 -4978, 69.24378, 138.2668 -4979, 68.39542, 131.5288 -4980, 64.77157, 110.1024 -4981, 70.23436, 137.102 -4982, 65.18062, 109.788 -4983, 66.20453, 112.9286 -4984, 70.60819, 148.2754 -4985, 65.64079, 119.3393 -4986, 69.72804, 141.9129 -4987, 67.49767, 139.6238 -4988, 69.18779, 119.7962 -4989, 66.83553, 115.7201 -4990, 67.17618, 121.334 -4991, 68.75179, 159.3608 -4992, 66.51066, 133.2151 -4993, 67.34769, 141.3034 -4994, 71.80087, 129.831 -4995, 67.69782, 120.7103 -4996, 69.0048, 141.5982 -4997, 69.06523, 125.8677 -4998, 65.88747, 112.3178 -4999, 65.84895, 118.9697 -5000, 67.18311, 112.7574 -5001, 63.79598, 111.7201 -5002, 67.47173, 110.5494 -5003, 67.15867, 103.8433 -5004, 70.38311, 159.9758 -5005, 66.68444, 130.2472 -5006, 66.66715, 123.7624 -5007, 66.82297, 125.297 -5008, 66.6039, 122.711 -5009, 70.88882, 160.0364 -5010, 70.28146, 131.6777 -5011, 68.61527, 124.199 -5012, 68.94252, 122.5949 -5013, 70.00817, 143.777 -5014, 63.92219, 106.1497 -5015, 68.18982, 135.6658 -5016, 66.93297, 112.8116 -5017, 67.12819, 118.7819 -5018, 67.29436, 119.1211 -5019, 70.49073, 121.0715 -5020, 66.8532, 113.7029 -5021, 68.51902, 116.3811 -5022, 68.68968, 128.0095 -5023, 67.64082, 116.0115 -5024, 68.69251, 133.2729 -5025, 67.6248, 127.7888 -5026, 68.8846, 123.8782 -5027, 69.76061, 139.5499 -5028, 67.56118, 126.6252 -5029, 69.78513, 141.3982 -5030, 70.21612, 151.0506 -5031, 66.27644, 126.0282 -5032, 67.40846, 148.4483 -5033, 68.20932, 129.2407 -5034, 65.79974, 132.286 -5035, 64.49618, 106.4894 -5036, 65.69093, 125.0984 -5037, 68.48055, 130.2433 -5038, 66.17897, 123.5842 -5039, 63.55273, 101.2994 -5040, 67.68025, 118.3701 -5041, 65.4426, 109.8414 -5042, 67.53819, 131.1827 -5043, 67.20388, 125.2316 -5044, 65.10901, 131.8946 -5045, 67.71775, 116.0773 -5046, 66.27965, 98.28455 -5047, 71.03656, 127.6602 -5048, 69.39922, 134.0168 -5049, 67.60067, 123.7417 -5050, 69.41439, 125.4915 -5051, 67.06842, 135.2419 -5052, 68.06961, 122.0361 -5053, 63.88211, 117.4632 -5054, 65.9194, 120.1212 -5055, 70.23642, 124.4872 -5056, 63.84676, 116.313 -5057, 68.9074, 121.8405 -5058, 64.0135, 126.9209 -5059, 67.36541, 111.5266 -5060, 69.06481, 132.1843 -5061, 67.06091, 131.9966 -5062, 68.71498, 118.7562 -5063, 70.10334, 138.9367 -5064, 70.90589, 132.6605 -5065, 66.77943, 117.0903 -5066, 69.55338, 121.8668 -5067, 68.45538, 128.6212 -5068, 68.10538, 130.0686 -5069, 64.46289, 109.0084 -5070, 67.78582, 110.3563 -5071, 65.82491, 126.3494 -5072, 66.22711, 130.879 -5073, 65.4258, 130.8643 -5074, 69.33268, 123.4765 -5075, 65.30644, 111.1681 -5076, 70.66767, 151.1334 -5077, 67.86539, 127.2278 -5078, 65.68213, 114.755 -5079, 66.27532, 131.1304 -5080, 64.15129, 117.3512 -5081, 68.93691, 126.7825 -5082, 66.77623, 130.4524 -5083, 68.66098, 110.209 -5084, 66.03851, 120.0319 -5085, 71.34562, 131.9006 -5086, 66.26107, 118.9925 -5087, 70.96703, 136.5441 -5088, 65.92505, 114.2363 -5089, 66.47783, 119.0131 -5090, 68.65041, 144.86 -5091, 68.22052, 130.8069 -5092, 69.53697, 144.8661 -5093, 71.31389, 130.7968 -5094, 68.65623, 138.8268 -5095, 63.90685, 130.0556 -5096, 69.54723, 124.231 -5097, 63.83536, 119.8695 -5098, 69.43228, 110.2776 -5099, 68.8923, 127.6997 -5100, 65.97989, 142.5486 -5101, 73.25816, 157.0989 -5102, 65.69314, 138.5876 -5103, 69.95721, 128.1607 -5104, 69.93565, 130.3446 -5105, 67.55601, 119.1028 -5106, 67.47638, 115.6698 -5107, 69.05674, 128.3985 -5108, 68.54497, 136.1737 -5109, 70.44462, 116.6906 -5110, 67.11656, 131.4909 -5111, 67.60673, 115.494 -5112, 67.76797, 116.0487 -5113, 64.22799, 116.596 -5114, 67.64933, 138.6958 -5115, 66.94828, 126.0413 -5116, 68.83697, 145.686 -5117, 69.03861, 128.7906 -5118, 67.88536, 142.1595 -5119, 69.15298, 138.9115 -5120, 65.76655, 122.0769 -5121, 66.41848, 119.0393 -5122, 69.98636, 136.7085 -5123, 69.33663, 124.8379 -5124, 68.14856, 129.218 -5125, 69.61056, 124.5365 -5126, 70.24424, 132.7187 -5127, 64.66037, 110.1455 -5128, 67.14089, 132.4193 -5129, 66.55536, 120.6308 -5130, 67.02821, 134.6226 -5131, 66.61015, 131.3866 -5132, 67.87365, 134.9717 -5133, 68.48489, 121.162 -5134, 71.46727, 146.1977 -5135, 67.52509, 130.7501 -5136, 69.14416, 123.9601 -5137, 66.34347, 105.9251 -5138, 68.8517, 147.2738 -5139, 66.59398, 128.4305 -5140, 68.79421, 116.2545 -5141, 65.60404, 128.8795 -5142, 69.60759, 124.4609 -5143, 71.79002, 131.1114 -5144, 65.39644, 133.017 -5145, 68.186, 123.0559 -5146, 70.64194, 128.8506 -5147, 69.27806, 146.6325 -5148, 65.41192, 125.2607 -5149, 69.74131, 135.9477 -5150, 69.68791, 149.0918 -5151, 67.61616, 129.9896 -5152, 65.33279, 115.5896 -5153, 68.09827, 122.5938 -5154, 67.78589, 130.5478 -5155, 66.37325, 110.4683 -5156, 70.70383, 147.9488 -5157, 67.77536, 135.435 -5158, 70.16781, 132.2276 -5159, 65.08294, 124.8522 -5160, 68.09864, 139.5397 -5161, 69.72378, 127.9841 -5162, 66.10587, 129.5105 -5163, 68.81614, 128.4016 -5164, 66.34879, 136.5927 -5165, 68.85181, 131.0471 -5166, 67.88949, 135.8495 -5167, 67.3565, 124.7415 -5168, 67.87392, 123.9916 -5169, 67.82355, 120.0348 -5170, 68.93013, 119.6138 -5171, 66.72655, 104.4695 -5172, 69.96413, 141.4657 -5173, 70.92472, 133.859 -5174, 68.15966, 130.2032 -5175, 65.71158, 120.7602 -5176, 66.88241, 116.1838 -5177, 67.87445, 129.3543 -5178, 69.77941, 140.2507 -5179, 65.39579, 114.7891 -5180, 70.51058, 117.7705 -5181, 66.56644, 121.7629 -5182, 68.74163, 146.386 -5183, 68.50865, 142.5118 -5184, 67.86683, 136.538 -5185, 65.68959, 108.1989 -5186, 68.1756, 126.6541 -5187, 67.27204, 128.769 -5188, 65.3007, 130.2829 -5189, 68.37952, 126.2574 -5190, 70.39798, 119.4655 -5191, 65.3603, 112.0012 -5192, 68.8706, 129.9499 -5193, 66.21022, 116.362 -5194, 68.94788, 142.8095 -5195, 68.04951, 123.9961 -5196, 66.09906, 118.4749 -5197, 65.89673, 138.4134 -5198, 67.19993, 111.4001 -5199, 69.40899, 105.0894 -5200, 69.07487, 129.1519 -5201, 67.65384, 120.3397 -5202, 68.48956, 120.7475 -5203, 68.34723, 124.124 -5204, 69.67407, 140.3264 -5205, 65.19464, 119.1674 -5206, 69.81691, 139.3101 -5207, 64.26605, 115.7719 -5208, 68.77984, 128.1583 -5209, 64.94194, 119.9868 -5210, 69.40853, 136.2726 -5211, 66.60982, 120.7165 -5212, 68.74031, 143.4148 -5213, 72.8443, 146.7131 -5214, 65.56742, 114.1088 -5215, 67.30672, 119.2437 -5216, 67.87438, 129.1951 -5217, 67.37272, 110.0987 -5218, 68.52976, 132.8156 -5219, 67.2006, 120.7292 -5220, 71.326, 133.6295 -5221, 66.99797, 113.5302 -5222, 70.15071, 144.6167 -5223, 67.56198, 111.4511 -5224, 67.84632, 131.1354 -5225, 67.99597, 124.7397 -5226, 71.45949, 136.4103 -5227, 65.98938, 133.9456 -5228, 70.30094, 148.0703 -5229, 69.63548, 118.8671 -5230, 68.12716, 130.0225 -5231, 67.19533, 117.8517 -5232, 69.96297, 131.029 -5233, 70.75433, 139.7372 -5234, 64.90027, 99.29265 -5235, 67.53863, 122.6701 -5236, 66.93918, 112.5864 -5237, 66.74599, 114.6931 -5238, 67.53267, 124.3523 -5239, 67.03579, 113.4992 -5240, 66.19745, 119.4549 -5241, 66.16514, 116.2537 -5242, 70.4784, 141.2563 -5243, 66.71437, 112.926 -5244, 67.52916, 120.8297 -5245, 70.87923, 144.9908 -5246, 70.87713, 120.3404 -5247, 62.52373, 101.0402 -5248, 67.78636, 136.2587 -5249, 67.1394, 121.6793 -5250, 67.39241, 124.8535 -5251, 65.87821, 127.8471 -5252, 66.55073, 137.5442 -5253, 65.77153, 103.9089 -5254, 67.98557, 141.2212 -5255, 66.84341, 115.4613 -5256, 69.21199, 128.5016 -5257, 66.35945, 122.8733 -5258, 69.23369, 130.3051 -5259, 68.82616, 133.9048 -5260, 69.36336, 139.0361 -5261, 70.20959, 134.7929 -5262, 68.15011, 136.8965 -5263, 68.06755, 112.9757 -5264, 66.61783, 113.0753 -5265, 66.84021, 131.2762 -5266, 70.60805, 145.9398 -5267, 70.98349, 143.2473 -5268, 68.09578, 136.2662 -5269, 68.63828, 134.4078 -5270, 69.50947, 135.2759 -5271, 67.27908, 118.9625 -5272, 67.62248, 106.5357 -5273, 65.98498, 124.1788 -5274, 70.60025, 143.1552 -5275, 65.18921, 118.4354 -5276, 66.32422, 120.6698 -5277, 67.62091, 136.1237 -5278, 69.19727, 113.7928 -5279, 66.1129, 124.6016 -5280, 68.12418, 133.7479 -5281, 69.48945, 143.7332 -5282, 67.16699, 122.6097 -5283, 66.45846, 127.9224 -5284, 68.57463, 119.9155 -5285, 70.02842, 158.2521 -5286, 65.46377, 101.8393 -5287, 66.48352, 125.5619 -5288, 65.78847, 112.7934 -5289, 69.14324, 113.9947 -5290, 66.10192, 120.5016 -5291, 68.5156, 110.4182 -5292, 64.2164, 129.756 -5293, 69.15358, 129.065 -5294, 66.83911, 126.2087 -5295, 64.05746, 109.798 -5296, 67.80361, 134.8236 -5297, 67.78006, 146.6249 -5298, 66.0792, 121.5591 -5299, 67.54866, 119.1681 -5300, 67.18499, 111.7433 -5301, 66.36282, 123.4684 -5302, 66.21209, 120.9058 -5303, 69.61635, 123.0992 -5304, 66.83693, 123.2452 -5305, 71.80311, 132.7094 -5306, 67.0625, 126.7332 -5307, 72.96339, 135.2564 -5308, 70.34828, 151.3674 -5309, 70.09653, 150.9294 -5310, 69.20104, 140.2394 -5311, 70.35624, 132.7655 -5312, 69.78453, 144.8798 -5313, 71.39937, 129.2934 -5314, 67.0059, 116.8217 -5315, 66.79299, 124.906 -5316, 67.86676, 125.3757 -5317, 67.25419, 103.8437 -5318, 68.56236, 122.4352 -5319, 66.43275, 136.132 -5320, 68.91151, 125.792 -5321, 67.50477, 126.8799 -5322, 69.08511, 145.0689 -5323, 68.7803, 148.623 -5324, 66.66053, 135.6636 -5325, 68.66602, 114.7145 -5326, 68.47595, 114.8512 -5327, 67.53608, 128.0852 -5328, 66.23142, 121.6196 -5329, 69.17542, 124.7148 -5330, 67.34508, 120.9551 -5331, 67.77776, 117.0167 -5332, 66.91716, 115.5379 -5333, 68.65138, 130.497 -5334, 66.97762, 136.012 -5335, 69.11727, 140.2511 -5336, 65.2278, 132.8841 -5337, 66.3529, 126.9573 -5338, 67.90441, 122.0685 -5339, 67.14182, 107.8829 -5340, 69.26936, 139.1728 -5341, 67.55353, 123.1504 -5342, 69.1191, 127.1047 -5343, 66.5787, 130.5048 -5344, 68.34422, 126.8956 -5345, 70.87732, 142.4991 -5346, 66.25515, 109.9755 -5347, 70.20374, 142.2116 -5348, 65.37244, 119.6729 -5349, 69.21393, 139.5979 -5350, 66.65743, 125.0117 -5351, 70.90598, 144.8867 -5352, 67.63273, 116.9137 -5353, 67.44579, 133.6929 -5354, 69.61543, 149.4255 -5355, 70.72786, 134.2975 -5356, 67.81233, 134.3642 -5357, 68.88371, 130.2664 -5358, 67.59685, 128.0565 -5359, 66.18908, 129.8912 -5360, 67.0619, 122.516 -5361, 71.40566, 142.8255 -5362, 69.94381, 144.2052 -5363, 68.12088, 129.3957 -5364, 70.07833, 132.5733 -5365, 69.21921, 138.4788 -5366, 65.07625, 120.4977 -5367, 66.64317, 86.982 -5368, 69.09678, 136.2561 -5369, 67.29797, 128.014 -5370, 70.07962, 138.1994 -5371, 68.17719, 128.9954 -5372, 70.62613, 147.3147 -5373, 72.75675, 155.6063 -5374, 65.50945, 114.2107 -5375, 69.80503, 118.0632 -5376, 68.48037, 122.2135 -5377, 69.39191, 132.1548 -5378, 69.89743, 132.8384 -5379, 71.03366, 120.7296 -5380, 64.18042, 105.3415 -5381, 67.25981, 115.6019 -5382, 69.88668, 133.1821 -5383, 68.77416, 143.2226 -5384, 70.75119, 132.8196 -5385, 69.77175, 140.4321 -5386, 66.47653, 135.1056 -5387, 68.16365, 127.6326 -5388, 66.4353, 134.5752 -5389, 70.13482, 122.9368 -5390, 71.70658, 136.632 -5391, 66.92527, 123.4431 -5392, 67.12563, 123.5752 -5393, 69.16564, 125.887 -5394, 68.8406, 125.7733 -5395, 70.75604, 166.2812 -5396, 71.42444, 131.7763 -5397, 69.45553, 134.4084 -5398, 67.59746, 131.5971 -5399, 69.20977, 129.3553 -5400, 68.55325, 132.7205 -5401, 68.57877, 120.9452 -5402, 66.26275, 100.455 -5403, 65.96056, 113.3895 -5404, 69.5447, 134.9309 -5405, 69.03723, 121.8168 -5406, 70.25581, 149.6514 -5407, 65.24262, 118.8877 -5408, 66.61174, 123.9036 -5409, 65.44916, 129.4155 -5410, 68.46313, 115.2733 -5411, 70.08288, 130.4398 -5412, 68.28223, 134.7568 -5413, 67.00556, 125.5138 -5414, 66.02293, 109.5969 -5415, 69.16478, 135.6481 -5416, 67.21577, 131.9731 -5417, 69.00086, 135.9877 -5418, 70.75525, 135.7754 -5419, 69.25232, 127.8223 -5420, 67.57183, 119.3432 -5421, 67.67452, 132.6705 -5422, 67.40515, 124.2707 -5423, 64.86031, 100.9173 -5424, 69.39033, 112.2069 -5425, 65.9698, 129.9153 -5426, 67.55171, 123.0908 -5427, 68.46426, 116.498 -5428, 66.23821, 104.1053 -5429, 70.6257, 119.2626 -5430, 66.61423, 116.9318 -5431, 70.66932, 148.9742 -5432, 67.57132, 119.5476 -5433, 69.45353, 117.3488 -5434, 66.26159, 125.5437 -5435, 68.73293, 124.2368 -5436, 68.82534, 133.8431 -5437, 70.13099, 131.2805 -5438, 71.82375, 146.9215 -5439, 65.90074, 103.4218 -5440, 63.727, 120.0775 -5441, 66.99543, 121.7611 -5442, 67.3499, 132.3056 -5443, 67.16004, 112.2736 -5444, 70.5283, 128.9156 -5445, 68.45206, 121.7201 -5446, 66.09346, 105.8554 -5447, 64.7808, 125.8367 -5448, 68.29845, 132.8929 -5449, 66.31173, 125.5959 -5450, 64.36944, 122.6652 -5451, 69.23895, 132.3741 -5452, 70.56453, 122.723 -5453, 63.44115, 93.29146 -5454, 67.49847, 113.1057 -5455, 69.85577, 118.0316 -5456, 69.07982, 130.5538 -5457, 69.56211, 137.4123 -5458, 68.17484, 142.9581 -5459, 70.23972, 137.4064 -5460, 70.6554, 143.3564 -5461, 66.4574, 122.5937 -5462, 64.31855, 119.3805 -5463, 65.49751, 110.3743 -5464, 69.47428, 139.4867 -5465, 67.88158, 125.4501 -5466, 69.53913, 124.3466 -5467, 63.83987, 92.65767 -5468, 69.07601, 123.9516 -5469, 69.47709, 126.9161 -5470, 67.08504, 121.9957 -5471, 70.95488, 139.7854 -5472, 68.64084, 123.2444 -5473, 65.86462, 113.0349 -5474, 67.72662, 119.5902 -5475, 65.32212, 102.5086 -5476, 69.00392, 128.9232 -5477, 69.63523, 132.2697 -5478, 66.71665, 128.5803 -5479, 69.5893, 127.2246 -5480, 68.66987, 120.1516 -5481, 67.85418, 113.5575 -5482, 68.78852, 120.1342 -5483, 68.2002, 134.9707 -5484, 63.0824, 109.7702 -5485, 67.2833, 122.8477 -5486, 71.21834, 131.494 -5487, 71.01583, 138.9013 -5488, 69.88229, 143.1039 -5489, 67.19375, 121.1828 -5490, 68.76347, 130.2964 -5491, 66.83011, 120.5375 -5492, 70.56089, 132.0461 -5493, 69.67899, 140.8938 -5494, 66.96319, 122.3291 -5495, 68.67573, 115.6268 -5496, 66.39372, 121.1097 -5497, 69.81996, 125.3109 -5498, 68.00995, 124.8272 -5499, 66.95032, 118.4744 -5500, 70.96239, 144.0736 -5501, 66.27024, 126.7344 -5502, 68.21726, 115.0624 -5503, 66.56206, 112.4637 -5504, 69.03964, 137.6269 -5505, 68.68271, 131.7407 -5506, 68.91258, 115.3276 -5507, 68.02805, 123.1233 -5508, 68.64452, 111.4743 -5509, 67.98404, 120.7929 -5510, 65.72168, 123.0248 -5511, 68.50899, 125.2258 -5512, 68.74484, 118.5521 -5513, 65.70055, 121.1912 -5514, 68.13231, 126.9522 -5515, 69.1712, 102.8732 -5516, 70.67886, 122.3412 -5517, 68.837, 118.7874 -5518, 69.60496, 130.4536 -5519, 67.41523, 126.8208 -5520, 71.4, 154.97 -5521, 69.57502, 130.0883 -5522, 69.04149, 116.7796 -5523, 68.5837, 143.8448 -5524, 66.89024, 126.5347 -5525, 67.12473, 111.1866 -5526, 67.83542, 111.946 -5527, 70.46759, 138.7422 -5528, 67.7864, 142.7435 -5529, 69.58276, 143.2414 -5530, 67.16684, 125.1273 -5531, 67.13791, 108.6479 -5532, 68.79915, 132.8302 -5533, 67.64203, 127.7226 -5534, 64.70508, 111.3172 -5535, 68.08348, 133.8261 -5536, 67.56671, 124.2366 -5537, 64.28754, 102.4825 -5538, 64.85395, 111.9585 -5539, 73.24733, 138.1346 -5540, 64.89302, 114.3071 -5541, 67.43272, 133.0682 -5542, 65.7765, 118.0115 -5543, 70.7064, 145.9957 -5544, 67.52445, 125.9386 -5545, 67.01528, 116.8078 -5546, 68.16565, 113.8239 -5547, 67.99779, 149.3131 -5548, 68.52996, 110.5189 -5549, 67.53327, 120.1058 -5550, 67.30047, 123.1704 -5551, 67.63847, 134.5804 -5552, 68.52047, 138.8459 -5553, 68.03264, 127.8527 -5554, 67.28722, 118.5444 -5555, 68.42927, 127.9474 -5556, 69.7329, 125.5398 -5557, 69.72725, 127.1998 -5558, 69.73079, 152.3984 -5559, 69.97947, 137.3347 -5560, 68.9122, 119.5773 -5561, 66.70355, 122.2617 -5562, 68.64652, 136.3536 -5563, 67.56584, 136.2134 -5564, 67.35146, 123.6386 -5565, 66.98205, 107.619 -5566, 65.44633, 135.5837 -5567, 68.81325, 129.6697 -5568, 67.16659, 107.8736 -5569, 70.28813, 150.9046 -5570, 66.62449, 139.4685 -5571, 64.39542, 115.1983 -5572, 67.23695, 112.4262 -5573, 69.67397, 156.7309 -5574, 68.43681, 127.8894 -5575, 68.00999, 131.2092 -5576, 70.8081, 135.2499 -5577, 70.50871, 122.7718 -5578, 70.00808, 117.6198 -5579, 66.06797, 101.461 -5580, 67.87768, 116.3499 -5581, 69.36261, 126.9441 -5582, 69.29301, 139.7644 -5583, 67.3539, 133.1416 -5584, 66.1525, 110.9469 -5585, 67.47153, 115.3734 -5586, 68.56556, 121.8413 -5587, 72.40237, 157.4235 -5588, 67.28205, 128.5724 -5589, 65.7493, 122.6496 -5590, 65.90868, 132.421 -5591, 67.32651, 133.7645 -5592, 67.04617, 112.1093 -5593, 67.21086, 122.6801 -5594, 66.49245, 109.2367 -5595, 69.2678, 122.5007 -5596, 70.07489, 149.6391 -5597, 69.74977, 141.1522 -5598, 66.75226, 139.719 -5599, 65.50834, 114.5278 -5600, 73.13491, 127.8612 -5601, 65.37072, 125.7601 -5602, 72.07311, 142.2552 -5603, 67.65702, 120.8003 -5604, 71.13971, 149.4626 -5605, 69.56951, 138.5706 -5606, 68.47465, 116.2406 -5607, 68.65104, 135.3612 -5608, 69.29567, 146.4768 -5609, 65.94966, 131.8327 -5610, 67.88775, 137.3897 -5611, 66.01091, 107.5225 -5612, 64.69531, 124.1449 -5613, 68.76234, 111.5343 -5614, 70.14278, 129.6087 -5615, 65.29027, 126.534 -5616, 67.02973, 130.5432 -5617, 72.18645, 153.9204 -5618, 68.32435, 130.9603 -5619, 65.37779, 114.4 -5620, 70.98789, 126.8208 -5621, 69.32981, 125.881 -5622, 68.08517, 125.3363 -5623, 67.72864, 117.6713 -5624, 69.41996, 126.183 -5625, 65.86211, 112.0669 -5626, 69.96526, 151.6467 -5627, 67.91088, 124.1618 -5628, 68.78786, 130.6754 -5629, 65.74585, 119.2501 -5630, 72.368, 132.7354 -5631, 68.18716, 129.4416 -5632, 69.84822, 130.4897 -5633, 68.77683, 132.0897 -5634, 69.84154, 117.5002 -5635, 68.21258, 108.6233 -5636, 66.95108, 127.1378 -5637, 66.85975, 122.3951 -5638, 66.15618, 118.9815 -5639, 67.45204, 125.2554 -5640, 67.60013, 121.8996 -5641, 66.75233, 120.7738 -5642, 60.8634, 106.1939 -5643, 66.19796, 107.8874 -5644, 65.67776, 122.0686 -5645, 68.99828, 117.3948 -5646, 68.02827, 140.866 -5647, 70.31743, 149.3078 -5648, 64.89375, 125.5845 -5649, 65.54201, 131.28 -5650, 68.67927, 120.8432 -5651, 66.50307, 123.0181 -5652, 67.06639, 143.1561 -5653, 68.34809, 122.9334 -5654, 67.7237, 118.4002 -5655, 71.2729, 133.799 -5656, 66.02325, 115.9951 -5657, 67.64412, 117.6164 -5658, 70.5122, 133.0952 -5659, 65.81299, 111.2517 -5660, 67.72994, 134.9223 -5661, 70.37065, 142.7071 -5662, 67.12868, 128.8292 -5663, 67.7056, 126.9298 -5664, 67.17205, 115.2964 -5665, 68.10555, 136.4014 -5666, 70.02968, 139.6796 -5667, 67.74365, 132.6488 -5668, 64.0239, 131.5816 -5669, 65.72062, 109.6616 -5670, 72.30502, 138.1492 -5671, 68.49538, 132.5811 -5672, 68.88875, 126.3917 -5673, 66.99923, 133.9106 -5674, 68.12136, 137.1759 -5675, 69.35409, 135.8339 -5676, 65.94423, 130.5612 -5677, 69.1535, 134.0018 -5678, 68.9858, 133.0763 -5679, 66.5432, 109.9605 -5680, 67.00921, 132.5041 -5681, 71.09758, 126.9142 -5682, 68.07213, 124.4069 -5683, 69.49666, 146.5182 -5684, 70.21782, 140.9199 -5685, 67.58857, 133.1095 -5686, 67.57075, 138.0985 -5687, 69.42517, 137.6923 -5688, 68.28537, 136.6422 -5689, 69.72848, 149.467 -5690, 69.92365, 138.0429 -5691, 68.79953, 113.512 -5692, 69.09202, 130.8401 -5693, 68.82166, 125.858 -5694, 68.79217, 113.7784 -5695, 68.20921, 118.9215 -5696, 64.85301, 114.4354 -5697, 68.43265, 123.9837 -5698, 68.41712, 135.6646 -5699, 68.48985, 97.85054 -5700, 67.77927, 130.3916 -5701, 66.72234, 138.3614 -5702, 66.17694, 125.4018 -5703, 68.07653, 118.6076 -5704, 68.39248, 109.8622 -5705, 66.36527, 120.0788 -5706, 62.87732, 86.669 -5707, 68.7832, 142.6252 -5708, 70.32779, 135.5365 -5709, 65.23714, 130.1058 -5710, 70.09673, 141.5957 -5711, 72.58203, 125.2756 -5712, 68.95451, 131.6178 -5713, 70.08286, 129.0769 -5714, 66.60565, 108.4805 -5715, 70.12381, 139.1288 -5716, 68.9783, 145.3523 -5717, 65.41373, 125.9004 -5718, 70.84046, 126.4751 -5719, 65.25996, 119.209 -5720, 67.59199, 123.0037 -5721, 69.34865, 129.4727 -5722, 69.39296, 141.9344 -5723, 63.75403, 108.9765 -5724, 67.96208, 118.2419 -5725, 70.15448, 141.4635 -5726, 70.04724, 136.5986 -5727, 66.06389, 105.223 -5728, 71.07997, 127.8639 -5729, 66.6113, 134.331 -5730, 66.86237, 140.5931 -5731, 70.25969, 127.8158 -5732, 65.89945, 110.9553 -5733, 68.29227, 112.17 -5734, 64.95871, 117.7368 -5735, 67.1086, 133.5058 -5736, 67.39014, 119.9727 -5737, 64.25871, 115.9128 -5738, 69.27316, 131.0059 -5739, 67.87387, 121.2352 -5740, 65.53554, 121.5301 -5741, 71.08776, 130.4852 -5742, 67.36554, 127.386 -5743, 65.41184, 115.7506 -5744, 68.03292, 127.3987 -5745, 66.72356, 134.9064 -5746, 68.02466, 131.4015 -5747, 67.36662, 117.1467 -5748, 68.93518, 116.5689 -5749, 68.578, 127.307 -5750, 64.74187, 115.184 -5751, 66.2743, 114.0988 -5752, 69.71458, 131.5924 -5753, 68.54427, 137.3566 -5754, 71.35055, 135.1059 -5755, 67.21472, 137.3314 -5756, 65.09449, 113.229 -5757, 67.50111, 111.4446 -5758, 70.80356, 138.282 -5759, 66.74779, 126.8547 -5760, 67.30525, 135.6227 -5761, 69.16712, 128.8532 -5762, 69.35292, 139.9225 -5763, 64.91373, 101.2648 -5764, 67.68617, 132.6457 -5765, 69.23168, 133.9763 -5766, 67.53083, 138.6939 -5767, 73.47519, 156.5556 -5768, 68.0664, 128.1673 -5769, 65.82069, 125.261 -5770, 69.01169, 132.9188 -5771, 69.72285, 134.5923 -5772, 70.52947, 114.1222 -5773, 67.2635, 114.8907 -5774, 69.0027, 132.8863 -5775, 67.91407, 133.1336 -5776, 66.94962, 137.487 -5777, 68.04101, 118.2847 -5778, 71.93262, 133.1505 -5779, 68.266, 127.4658 -5780, 67.22047, 133.3136 -5781, 70.82076, 151.6654 -5782, 67.97316, 131.4318 -5783, 67.86163, 116.9394 -5784, 66.75865, 130.2682 -5785, 68.68619, 122.1336 -5786, 68.55174, 118.5602 -5787, 70.64074, 136.0448 -5788, 64.54667, 101.3587 -5789, 70.20971, 139.6653 -5790, 65.24926, 122.592 -5791, 70.56077, 142.8022 -5792, 70.2161, 119.6591 -5793, 69.26794, 130.0904 -5794, 68.71495, 142.531 -5795, 69.83226, 150.4973 -5796, 67.95044, 125.4476 -5797, 66.69106, 132.6528 -5798, 66.69388, 109.0486 -5799, 68.85787, 108.4688 -5800, 66.75904, 113.7091 -5801, 69.47691, 125.2285 -5802, 69.16535, 135.7451 -5803, 66.17003, 125.3914 -5804, 65.52416, 120.5974 -5805, 65.51245, 124.223 -5806, 67.09453, 131.6406 -5807, 70.25624, 130.8484 -5808, 66.23165, 123.4666 -5809, 68.47727, 125.3201 -5810, 69.71255, 135.4164 -5811, 67.91161, 135.2628 -5812, 66.40266, 127.9538 -5813, 67.8244, 117.6057 -5814, 66.18945, 120.9807 -5815, 67.43176, 122.2844 -5816, 69.20081, 120.9584 -5817, 66.10694, 124.0101 -5818, 65.78863, 113.8094 -5819, 70.78459, 145.5794 -5820, 68.58712, 124.2324 -5821, 68.57242, 106.2736 -5822, 66.9078, 114.6637 -5823, 68.24046, 116.8464 -5824, 70.33099, 137.315 -5825, 66.34712, 121.422 -5826, 69.51991, 139.1533 -5827, 68.24002, 138.3138 -5828, 68.81582, 128.7253 -5829, 67.46373, 140.8966 -5830, 68.39019, 144.1242 -5831, 66.67797, 128.4131 -5832, 68.80968, 126.858 -5833, 69.4337, 131.1752 -5834, 66.65083, 125.386 -5835, 66.85582, 122.8987 -5836, 68.77332, 146.0516 -5837, 64.63102, 113.7093 -5838, 68.71508, 143.0982 -5839, 68.75348, 133.4762 -5840, 66.51489, 113.0104 -5841, 68.37401, 106.2333 -5842, 62.34907, 92.08858 -5843, 68.92916, 129.1092 -5844, 71.68363, 129.1334 -5845, 66.322, 110.1751 -5846, 69.50661, 131.645 -5847, 67.40328, 139.6598 -5848, 67.19077, 112.4249 -5849, 67.19175, 135.4273 -5850, 69.88968, 135.0597 -5851, 67.71483, 131.9399 -5852, 69.1943, 123.0009 -5853, 68.43015, 126.813 -5854, 71.52141, 135.1442 -5855, 66.03545, 124.7625 -5856, 66.75322, 110.7626 -5857, 67.97544, 132.68 -5858, 70.43693, 148.038 -5859, 66.97159, 129.2555 -5860, 64.39987, 122.562 -5861, 67.69987, 128.6123 -5862, 68.06251, 125.5895 -5863, 69.63558, 124.3082 -5864, 67.44679, 116.4591 -5865, 65.89161, 115.974 -5866, 69.51355, 124.6651 -5867, 63.64185, 117.6007 -5868, 66.78862, 117.3315 -5869, 67.36831, 144.5431 -5870, 64.77625, 146.0965 -5871, 69.18543, 122.701 -5872, 66.26194, 118.7813 -5873, 68.65178, 121.752 -5874, 69.14357, 161.7266 -5875, 68.66398, 123.2472 -5876, 70.5741, 132.7715 -5877, 67.54965, 126.7619 -5878, 68.71849, 130.7257 -5879, 67.01063, 120.9484 -5880, 67.36634, 127.3686 -5881, 68.16669, 147.874 -5882, 69.81134, 141.3724 -5883, 66.73085, 115.7089 -5884, 65.96768, 114.223 -5885, 66.26164, 125.0622 -5886, 70.12583, 124.0039 -5887, 66.31984, 120.267 -5888, 68.89732, 124.8329 -5889, 69.22677, 128.9729 -5890, 71.16343, 143.5928 -5891, 64.12514, 134.7727 -5892, 71.17117, 152.651 -5893, 66.91345, 120.0058 -5894, 66.64158, 118.8403 -5895, 66.52425, 123.8263 -5896, 70.46871, 145.1333 -5897, 65.93944, 122.5218 -5898, 66.70213, 133.2482 -5899, 64.60008, 113.2583 -5900, 67.22989, 124.304 -5901, 67.76131, 140.08 -5902, 65.63379, 111.9369 -5903, 69.74489, 135.7224 -5904, 69.74892, 125.5452 -5905, 66.1265, 121.3924 -5906, 69.56993, 134.1461 -5907, 69.4781, 129.5945 -5908, 69.251, 135.8543 -5909, 65.88081, 116.0534 -5910, 65.85276, 117.3475 -5911, 69.53098, 138.892 -5912, 67.702, 119.1475 -5913, 66.31858, 132.1847 -5914, 65.68324, 111.7099 -5915, 66.8561, 142.4656 -5916, 69.0744, 120.1102 -5917, 66.66269, 110.537 -5918, 66.5834, 127.299 -5919, 67.70926, 132.0492 -5920, 68.19135, 116.3223 -5921, 66.85165, 117.069 -5922, 68.99365, 124.2528 -5923, 68.96601, 130.3402 -5924, 70.93465, 137.3957 -5925, 69.53833, 133.2753 -5926, 66.13819, 107.2152 -5927, 66.02829, 110.0063 -5928, 70.24533, 149.8284 -5929, 67.86194, 117.9091 -5930, 67.23322, 126.0349 -5931, 67.50164, 113.9574 -5932, 71.23342, 140.2096 -5933, 69.88821, 151.7165 -5934, 67.85973, 117.4995 -5935, 69.22897, 129.2885 -5936, 65.35526, 120.6695 -5937, 65.52588, 112.762 -5938, 70.8509, 130.0362 -5939, 65.17021, 111.9882 -5940, 65.35895, 107.5214 -5941, 64.77466, 127.5588 -5942, 65.07433, 119.1591 -5943, 66.32264, 109.9997 -5944, 70.25829, 129.6662 -5945, 68.46057, 135.197 -5946, 67.32406, 133.8561 -5947, 69.53655, 132.6168 -5948, 66.72552, 111.4197 -5949, 69.04313, 109.6263 -5950, 67.63395, 123.3522 -5951, 67.68225, 130.9284 -5952, 67.20527, 132.5174 -5953, 68.57727, 113.3802 -5954, 69.81593, 124.0074 -5955, 67.27727, 111.7334 -5956, 70.77213, 140.6956 -5957, 64.39879, 112.6936 -5958, 67.32911, 119.5627 -5959, 68.56564, 137.7463 -5960, 70.12937, 128.2247 -5961, 70.50405, 111.7906 -5962, 67.69242, 135.8347 -5963, 66.15337, 123.5173 -5964, 67.04967, 121.4366 -5965, 67.14891, 132.7812 -5966, 68.06454, 131.8433 -5967, 66.40213, 141.9992 -5968, 68.74408, 123.0744 -5969, 68.28835, 129.5032 -5970, 68.49705, 148.1317 -5971, 69.61735, 131.6342 -5972, 65.46622, 118.5369 -5973, 68.4357, 102.342 -5974, 66.21604, 118.1429 -5975, 71.1547, 137.0264 -5976, 65.50148, 106.2971 -5977, 70.46899, 140.2618 -5978, 67.60018, 123 -5979, 69.30591, 123.2186 -5980, 65.67069, 122.2368 -5981, 67.36778, 117.442 -5982, 68.47589, 137.8969 -5983, 69.72743, 134.3279 -5984, 68.84393, 117.6781 -5985, 69.19121, 129.7261 -5986, 68.51219, 133.2155 -5987, 66.30328, 113.0214 -5988, 72.1518, 124.9451 -5989, 68.31371, 128.7378 -5990, 66.21908, 99.78213 -5991, 64.60633, 120.786 -5992, 70.23266, 127.1388 -5993, 68.73753, 144.4456 -5994, 69.49503, 132.1904 -5995, 67.25261, 137.7559 -5996, 71.46246, 141.305 -5997, 67.7491, 139.5633 -5998, 68.80025, 128.2314 -5999, 66.8725, 119.1075 -6000, 68.4765, 120.8274 -6001, 64.86316, 116.4621 -6002, 67.91753, 139.5891 -6003, 67.84233, 138.0376 -6004, 69.38148, 124.8913 -6005, 66.94613, 127.2921 -6006, 67.45924, 117.4689 -6007, 69.99586, 132.8246 -6008, 67.45856, 123.6045 -6009, 64.09151, 138.3749 -6010, 66.37835, 122.9717 -6011, 70.12316, 122.3759 -6012, 67.34219, 121.3154 -6013, 70.14728, 136.3431 -6014, 69.0379, 123.907 -6015, 67.0297, 107.5287 -6016, 64.85652, 130.1924 -6017, 65.94007, 109.5656 -6018, 64.69116, 115.9239 -6019, 62.53019, 109.5766 -6020, 67.78541, 124.236 -6021, 68.27657, 133.3359 -6022, 65.93553, 118.4802 -6023, 67.48252, 120.3425 -6024, 67.80949, 131.0862 -6025, 70.04498, 129.9862 -6026, 66.0988, 121.7657 -6027, 67.87462, 145.1821 -6028, 65.04519, 134.0519 -6029, 64.96125, 105.489 -6030, 64.82767, 112.1873 -6031, 70.08844, 137.1698 -6032, 70.70944, 142.7307 -6033, 66.80032, 123.4484 -6034, 67.14141, 120.8645 -6035, 67.04259, 135.9558 -6036, 68.48662, 148.4587 -6037, 72.31757, 144.881 -6038, 66.47968, 139.3578 -6039, 66.82557, 109.1264 -6040, 70.06934, 135.3785 -6041, 67.217, 113.8089 -6042, 67.12457, 148.5183 -6043, 68.4131, 144.8827 -6044, 66.02919, 114.9248 -6045, 66.84654, 114.9225 -6046, 68.94666, 122.8046 -6047, 68.91853, 133.5443 -6048, 65.5914, 131.9386 -6049, 65.51261, 120.6623 -6050, 69.27083, 145.653 -6051, 69.57316, 130.7801 -6052, 67.86325, 118.8413 -6053, 72.33364, 133.6214 -6054, 67.21175, 104.1953 -6055, 68.83481, 117.464 -6056, 68.46136, 145.8766 -6057, 68.1713, 135.6227 -6058, 69.69391, 129.1389 -6059, 67.12571, 149.7706 -6060, 70.36279, 134.1039 -6061, 71.4732, 143.9365 -6062, 68.51565, 132.4801 -6063, 70.06817, 149.4329 -6064, 68.04516, 132.5979 -6065, 67.47227, 133.6407 -6066, 70.56501, 147.4583 -6067, 67.64197, 100.025 -6068, 72.23026, 140.2179 -6069, 67.45255, 120.8849 -6070, 66.97768, 109.3834 -6071, 67.28894, 136.1833 -6072, 66.02667, 115.1345 -6073, 64.15728, 130.0889 -6074, 67.78574, 131.8054 -6075, 71.05897, 125.119 -6076, 68.55136, 149.0059 -6077, 71.11228, 129.2335 -6078, 65.22518, 120.5247 -6079, 67.13777, 123.2162 -6080, 67.98084, 117.4022 -6081, 67.45039, 106.9632 -6082, 67.58732, 119.6435 -6083, 67.40106, 134.1122 -6084, 69.75732, 129.9282 -6085, 67.78374, 130.1554 -6086, 65.01631, 106.8729 -6087, 68.98708, 126.6898 -6088, 67.84236, 115.7457 -6089, 70.91418, 130.1665 -6090, 68.44803, 110.8115 -6091, 63.23903, 119.8366 -6092, 66.75371, 113.1127 -6093, 66.13148, 118.4705 -6094, 66.57052, 135.6863 -6095, 68.43743, 111.4731 -6096, 68.12826, 129.3106 -6097, 65.66194, 116.9965 -6098, 68.64587, 128.6098 -6099, 67.01908, 137.8634 -6100, 66.3869, 135.486 -6101, 67.43419, 112.9047 -6102, 67.0218, 143.1287 -6103, 70.98964, 136.9279 -6104, 64.47574, 113.9935 -6105, 66.48783, 121.2945 -6106, 68.28864, 130.4347 -6107, 66.11987, 133.8865 -6108, 68.73539, 153.3002 -6109, 67.61776, 123.3522 -6110, 65.99257, 105.2183 -6111, 71.79273, 144.2173 -6112, 69.76151, 155.9849 -6113, 67.65103, 111.6875 -6114, 64.82727, 125.8154 -6115, 68.38678, 121.5078 -6116, 68.35981, 129.6506 -6117, 67.56773, 116.2672 -6118, 67.70372, 125.3254 -6119, 70.42781, 165.7172 -6120, 66.27416, 133.3637 -6121, 68.61263, 145.4779 -6122, 69.9746, 135.8348 -6123, 69.38629, 130.2342 -6124, 63.38805, 114.0297 -6125, 68.40181, 117.6173 -6126, 65.89607, 123.5651 -6127, 66.25442, 124.9826 -6128, 68.43563, 131.054 -6129, 68.43069, 152.1767 -6130, 67.44333, 118.6275 -6131, 68.75899, 112.2566 -6132, 65.87903, 127.7575 -6133, 67.3794, 120.4361 -6134, 67.20197, 104.816 -6135, 71.72566, 119.2446 -6136, 68.326, 125.8377 -6137, 69.07214, 131.3704 -6138, 70.39663, 125.35 -6139, 68.46942, 118.3351 -6140, 70.75069, 129.7989 -6141, 68.25077, 126.6471 -6142, 69.4218, 129.0352 -6143, 67.75693, 134.8437 -6144, 68.78237, 150.5262 -6145, 68.93468, 132.4508 -6146, 64.36411, 131.0136 -6147, 69.45069, 151.8922 -6148, 68.70335, 122.5303 -6149, 69.17716, 127.2585 -6150, 73.32701, 147.9296 -6151, 69.01245, 108.8242 -6152, 65.2012, 127.7629 -6153, 67.65215, 130.3 -6154, 68.59028, 124.4653 -6155, 70.1527, 159.2435 -6156, 70.35282, 130.4261 -6157, 67.14863, 144.1876 -6158, 72.11654, 136.8595 -6159, 64.54112, 105.9232 -6160, 68.94058, 131.888 -6161, 68.18651, 129.5985 -6162, 72.69199, 121.7006 -6163, 68.2263, 128.3129 -6164, 70.40403, 130.5713 -6165, 65.32887, 126.0176 -6166, 65.29057, 109.782 -6167, 65.58939, 109.7956 -6168, 65.28916, 128.021 -6169, 69.91649, 132.3785 -6170, 66.59848, 127.7981 -6171, 69.24885, 133.7892 -6172, 68.81944, 124.2264 -6173, 68.79688, 122.0913 -6174, 67.19139, 127.5538 -6175, 68.40568, 142.3945 -6176, 70.58364, 135.3762 -6177, 68.401, 143.1102 -6178, 70.95629, 139.016 -6179, 69.85706, 120.7675 -6180, 65.61593, 129.3528 -6181, 65.39064, 96.54815 -6182, 67.95175, 128.2412 -6183, 70.05209, 123.2307 -6184, 68.18199, 134.9267 -6185, 68.79938, 116.6928 -6186, 67.36607, 118.689 -6187, 70.62204, 125.7371 -6188, 71.7953, 158.2326 -6189, 66.53015, 117.0002 -6190, 65.09768, 134.3973 -6191, 64.76077, 128.8129 -6192, 69.03578, 130.8927 -6193, 65.44403, 109.9232 -6194, 66.15236, 110.353 -6195, 69.55012, 138.8793 -6196, 64.92792, 116.1101 -6197, 67.75727, 122.6048 -6198, 69.05062, 143.6487 -6199, 64.93136, 94.59876 -6200, 70.18691, 130.8536 -6201, 67.72971, 148.7955 -6202, 67.32869, 130.6884 -6203, 69.70995, 151.1615 -6204, 71.38761, 144.922 -6205, 67.33116, 132.6171 -6206, 68.52212, 120.6801 -6207, 70.20145, 117.236 -6208, 66.58931, 117.0805 -6209, 69.02084, 131.2609 -6210, 68.78726, 123.945 -6211, 69.06258, 120.0654 -6212, 70.13521, 126.9799 -6213, 69.71943, 136.3826 -6214, 69.37398, 131.2544 -6215, 69.05735, 132.3124 -6216, 70.05472, 132.6614 -6217, 68.34561, 133.09 -6218, 67.52209, 121.4611 -6219, 70.0784, 133.6073 -6220, 68.1606, 142.0494 -6221, 66.76219, 133.1326 -6222, 67.39828, 119.6178 -6223, 69.23848, 129.4479 -6224, 63.37741, 121.7897 -6225, 68.52886, 129.8267 -6226, 66.21498, 131.2149 -6227, 66.87539, 136.5157 -6228, 67.37879, 113.5019 -6229, 66.66129, 133.4427 -6230, 68.08244, 133.4736 -6231, 65.97344, 135.5212 -6232, 65.8609, 122.3441 -6233, 67.68464, 124.7005 -6234, 69.1243, 126.6651 -6235, 71.24086, 127.2719 -6236, 69.075, 125.6317 -6237, 69.07254, 128.9997 -6238, 65.76779, 121.7671 -6239, 69.5003, 142.9457 -6240, 69.21009, 129.2261 -6241, 66.131, 128.9078 -6242, 66.45404, 109.0055 -6243, 65.43012, 129.1382 -6244, 68.37789, 132.0082 -6245, 69.25871, 126.1872 -6246, 68.55917, 131.6865 -6247, 69.82956, 152.9133 -6248, 68.56366, 135.9443 -6249, 69.89716, 135.4161 -6250, 67.22911, 126.9908 -6251, 68.27784, 151.4986 -6252, 67.70956, 120.9284 -6253, 68.63497, 143.909 -6254, 66.24494, 148.3015 -6255, 65.9282, 98.38391 -6256, 68.6507, 134.6537 -6257, 67.66363, 91.26068 -6258, 68.1538, 129.1524 -6259, 63.79264, 116.3877 -6260, 65.46251, 128.8832 -6261, 70.75386, 135.3328 -6262, 66.29608, 119.843 -6263, 66.17127, 132.3032 -6264, 70.22032, 129.6479 -6265, 68.38254, 135.7889 -6266, 68.72417, 119.4445 -6267, 69.03554, 131.3376 -6268, 69.23422, 119.5137 -6269, 68.75012, 142.7779 -6270, 68.70768, 142.0977 -6271, 67.9005, 125.3087 -6272, 69.60629, 146.4574 -6273, 66.8099, 129.1352 -6274, 65.01465, 100.5445 -6275, 67.35337, 131.1702 -6276, 63.03599, 112.098 -6277, 68.79753, 117.0905 -6278, 68.69337, 132.2144 -6279, 66.37421, 123.5625 -6280, 68.3918, 123.9172 -6281, 66.86315, 123.8108 -6282, 69.64423, 130.3421 -6283, 68.98795, 128.7153 -6284, 68.7025, 131.4076 -6285, 67.0616, 110.9624 -6286, 67.14099, 120.8645 -6287, 66.31361, 127.8163 -6288, 69.6794, 140.4675 -6289, 66.24529, 117.5554 -6290, 66.79284, 138.8735 -6291, 69.9798, 132.5518 -6292, 68.20436, 144.968 -6293, 67.80794, 141.1958 -6294, 71.49761, 146.9498 -6295, 71.80853, 136.9644 -6296, 67.83517, 137.1286 -6297, 68.34113, 129.0216 -6298, 69.08567, 117.0247 -6299, 66.75809, 141.0586 -6300, 65.40628, 126.6997 -6301, 65.53954, 119.8531 -6302, 69.0588, 111.6993 -6303, 67.7959, 117.9009 -6304, 71.39265, 118.7488 -6305, 66.70088, 131.8821 -6306, 69.67472, 140.8053 -6307, 69.23373, 138.6932 -6308, 70.9753, 143.1101 -6309, 67.65321, 129.5612 -6310, 65.60536, 117.7563 -6311, 67.32889, 135.7928 -6312, 69.521, 128.0812 -6313, 67.66563, 121.5679 -6314, 67.22662, 130.5827 -6315, 67.13201, 118.4574 -6316, 67.2819, 119.473 -6317, 66.45431, 116.4503 -6318, 68.42039, 142.5478 -6319, 67.14612, 122.8747 -6320, 62.98619, 113.4143 -6321, 63.66845, 131.0824 -6322, 65.28612, 104.5026 -6323, 64.30048, 106.3191 -6324, 66.10993, 103.9913 -6325, 65.91527, 125.8579 -6326, 67.82866, 125.7767 -6327, 69.87356, 131.063 -6328, 66.24116, 112.8657 -6329, 66.05187, 121.3259 -6330, 65.53557, 119.5436 -6331, 67.6665, 144.1403 -6332, 68.3058, 119.0695 -6333, 70.74075, 137.7395 -6334, 67.06837, 122.4245 -6335, 69.88488, 145.2255 -6336, 69.24424, 141.3037 -6337, 68.25133, 115.4675 -6338, 67.09232, 138.4092 -6339, 69.06273, 112.7855 -6340, 68.33125, 131.4942 -6341, 68.94119, 134.7967 -6342, 69.59518, 115.4751 -6343, 71.28803, 157.5443 -6344, 66.42491, 127.2222 -6345, 68.63305, 131.8311 -6346, 66.21553, 111.216 -6347, 67.47736, 116.7243 -6348, 64.51185, 86.49925 -6349, 67.33792, 126.9632 -6350, 67.41203, 125.8066 -6351, 67.89703, 126.1505 -6352, 65.08935, 122.4771 -6353, 70.58024, 139.0572 -6354, 70.26786, 124.0146 -6355, 68.09574, 138.602 -6356, 70.04702, 133.2217 -6357, 67.1535, 115.3322 -6358, 67.87558, 127.5807 -6359, 72.24161, 144.0286 -6360, 70.21055, 131.3894 -6361, 68.77272, 134.0195 -6362, 68.96749, 122.9673 -6363, 66.95136, 111.7026 -6364, 69.70156, 132.0676 -6365, 64.13956, 93.09256 -6366, 71.56149, 153.1117 -6367, 68.86042, 153.6386 -6368, 66.79593, 127.4353 -6369, 64.54504, 113.8478 -6370, 70.00599, 142.7425 -6371, 69.19904, 145.2462 -6372, 69.09444, 140.8653 -6373, 67.19525, 105.4341 -6374, 67.96947, 105.7521 -6375, 70.02533, 139.9395 -6376, 66.87761, 122.6013 -6377, 64.45014, 131.0252 -6378, 68.24912, 135.3378 -6379, 70.07101, 152.8499 -6380, 66.9759, 113.9803 -6381, 70.36787, 140.2859 -6382, 68.6591, 146.4581 -6383, 69.95361, 141.0113 -6384, 68.48425, 128.0158 -6385, 71.25946, 164.5588 -6386, 67.80922, 130.3115 -6387, 63.58671, 117.3091 -6388, 67.40848, 135.3097 -6389, 68.20701, 128.4742 -6390, 68.89247, 124.929 -6391, 66.05981, 117.8305 -6392, 65.66067, 123.4769 -6393, 69.39748, 133.3201 -6394, 65.92174, 108.8612 -6395, 64.78001, 102.3802 -6396, 67.59062, 117.6786 -6397, 71.00127, 149.2434 -6398, 69.48254, 121.6221 -6399, 68.48246, 159.2052 -6400, 68.09616, 133.6355 -6401, 69.48115, 122.3265 -6402, 70.50577, 141.2895 -6403, 69.5883, 140.0531 -6404, 69.31491, 124.1149 -6405, 68.39399, 139.9906 -6406, 62.23548, 94.80998 -6407, 69.8972, 148.2548 -6408, 68.06989, 146.5246 -6409, 69.12319, 111.1013 -6410, 69.95192, 126.322 -6411, 67.93156, 137.8815 -6412, 69.32167, 130.0449 -6413, 66.67312, 141.5919 -6414, 67.96604, 123.8124 -6415, 69.19829, 130.9459 -6416, 68.15828, 114.9747 -6417, 68.03235, 116.2177 -6418, 68.43761, 102.8575 -6419, 67.34517, 103.4353 -6420, 68.64435, 127.6291 -6421, 64.83459, 112.7336 -6422, 64.11121, 111.5238 -6423, 67.52032, 101.0851 -6424, 66.72676, 128.6718 -6425, 68.76169, 132.1914 -6426, 68.50268, 123.0143 -6427, 67.35174, 122.898 -6428, 66.64565, 123.7642 -6429, 67.11109, 120.5121 -6430, 67.92539, 140.0124 -6431, 65.7078, 116.2137 -6432, 67.65793, 138.142 -6433, 68.60162, 134.1922 -6434, 69.30603, 130.9022 -6435, 67.1095, 137.4821 -6436, 65.59186, 103.921 -6437, 67.66742, 139.2905 -6438, 68.63966, 112.1105 -6439, 64.7652, 92.20107 -6440, 67.60131, 120.6972 -6441, 67.31966, 126.8577 -6442, 66.51157, 122.8182 -6443, 69.93026, 135.7746 -6444, 67.60868, 131.5309 -6445, 65.7309, 121.011 -6446, 67.29622, 118.9762 -6447, 66.84201, 120.7153 -6448, 67.91374, 137.0166 -6449, 65.33921, 109.9667 -6450, 67.10739, 127.3581 -6451, 66.39279, 131.2489 -6452, 65.77143, 118.5557 -6453, 66.08581, 122.4064 -6454, 67.95467, 136.8644 -6455, 63.31058, 113.5932 -6456, 70.10242, 123.0639 -6457, 69.72937, 130.3103 -6458, 67.62461, 118.9278 -6459, 69.23113, 111.379 -6460, 67.38459, 116.0054 -6461, 70.68647, 146.7535 -6462, 71.42291, 141.3565 -6463, 68.60167, 112.7169 -6464, 65.01908, 120.2538 -6465, 68.22216, 137.5639 -6466, 66.18504, 122.2857 -6467, 67.34507, 122.5287 -6468, 69.8637, 134.646 -6469, 68.63027, 121.5066 -6470, 69.01165, 130.7259 -6471, 68.57992, 116.8032 -6472, 70.02954, 135.12 -6473, 67.8609, 130.8429 -6474, 67.071, 128.6312 -6475, 67.25316, 121.6315 -6476, 68.45752, 138.1129 -6477, 66.08131, 110.8231 -6478, 65.5926, 104.7464 -6479, 68.56861, 118.8964 -6480, 69.69795, 143.2327 -6481, 66.67277, 108.3892 -6482, 61.59011, 99.81074 -6483, 65.40277, 114.1857 -6484, 68.44756, 127.5778 -6485, 66.73714, 118.4245 -6486, 72.205, 154.2642 -6487, 68.46802, 121.7574 -6488, 70.10294, 142.4799 -6489, 66.48949, 112.2608 -6490, 67.19112, 121.4096 -6491, 65.22879, 121.375 -6492, 67.00396, 127.1951 -6493, 67.72317, 107.6196 -6494, 70.09165, 152.4262 -6495, 66.07538, 128.1418 -6496, 66.91173, 146.0408 -6497, 68.65328, 117.6621 -6498, 67.75543, 135.4845 -6499, 66.36233, 131.4949 -6500, 67.6272, 127.833 -6501, 68.21944, 123.405 -6502, 67.57571, 136.8255 -6503, 67.02379, 137.789 -6504, 67.57237, 141.6039 -6505, 65.6522, 109.4063 -6506, 65.44991, 102.5063 -6507, 70.32828, 163.8992 -6508, 69.08622, 118.9012 -6509, 68.33335, 126.7698 -6510, 66.29224, 134.6024 -6511, 68.16586, 120.86 -6512, 66.04152, 136.2559 -6513, 70.48553, 147.5044 -6514, 66.67757, 125.5265 -6515, 66.65461, 115.3878 -6516, 69.63744, 140.8728 -6517, 67.68649, 108.0794 -6518, 66.58507, 98.00565 -6519, 68.3482, 119.2853 -6520, 68.92806, 112.4171 -6521, 68.53403, 146.0566 -6522, 71.3806, 133.3801 -6523, 70.11959, 152.4782 -6524, 66.25934, 130.2875 -6525, 69.53489, 155.4037 -6526, 67.46936, 139.8139 -6527, 66.51039, 119.1722 -6528, 69.92009, 138.286 -6529, 67.79021, 107.2949 -6530, 66.83271, 108.3566 -6531, 70.99707, 117.9595 -6532, 66.68384, 130.0104 -6533, 65.32131, 105.6657 -6534, 67.3587, 115.0555 -6535, 64.04389, 103.6805 -6536, 67.25724, 117.0895 -6537, 70.83582, 129.5163 -6538, 69.2102, 129.1965 -6539, 65.91382, 119.2019 -6540, 68.89983, 128.3612 -6541, 68.6346, 133.2154 -6542, 65.36955, 121.3485 -6543, 66.25718, 109.8669 -6544, 69.18027, 130.5783 -6545, 69.53816, 118.921 -6546, 66.66547, 122.2455 -6547, 69.35299, 131.5557 -6548, 65.99078, 103.7061 -6549, 67.55311, 134.4433 -6550, 65.95292, 130.1628 -6551, 69.74893, 109.4178 -6552, 68.13165, 120.4415 -6553, 64.53068, 114.9703 -6554, 65.95702, 132.643 -6555, 70.27411, 120.3263 -6556, 68.30787, 132.9732 -6557, 69.93158, 136.795 -6558, 68.76325, 128.7979 -6559, 68.68206, 142.8603 -6560, 68.32988, 133.13 -6561, 68.04129, 143.2981 -6562, 67.9522, 117.0683 -6563, 65.7157, 118.3454 -6564, 72.12643, 124.3554 -6565, 66.79918, 118.7239 -6566, 67.49036, 123.5892 -6567, 66.88022, 126.7582 -6568, 68.25984, 137.6865 -6569, 66.6257, 130.5098 -6570, 64.15701, 113.9842 -6571, 65.30643, 110.9035 -6572, 71.83145, 146.3799 -6573, 68.43502, 128.2374 -6574, 64.79043, 115.6001 -6575, 69.24446, 129.4057 -6576, 70.28435, 125.6591 -6577, 72.99453, 126.8912 -6578, 70.41651, 131.3277 -6579, 65.79611, 132.5054 -6580, 69.49913, 129.3703 -6581, 65.87009, 110.5038 -6582, 65.0852, 106.2354 -6583, 70.61194, 129.5963 -6584, 71.39877, 131.9176 -6585, 66.29704, 122.9437 -6586, 65.64143, 121.4597 -6587, 69.78249, 138.3473 -6588, 68.32625, 135.247 -6589, 69.02806, 100.8881 -6590, 68.87437, 122.2625 -6591, 66.7959, 119.0778 -6592, 68.62814, 139.7986 -6593, 71.19139, 136.2042 -6594, 65.4116, 122.3825 -6595, 68.84184, 134.2696 -6596, 68.8806, 123.1216 -6597, 65.73631, 127.6449 -6598, 69.30987, 131.7523 -6599, 64.15534, 114.2796 -6600, 72.89442, 133.7642 -6601, 66.41814, 142.6604 -6602, 65.886, 119.2969 -6603, 69.06664, 131.9619 -6604, 67.96217, 125.9612 -6605, 68.68041, 131.3237 -6606, 68.515, 118.9934 -6607, 67.37231, 127.9334 -6608, 63.67556, 114.3381 -6609, 65.76516, 123.8141 -6610, 68.71711, 137.0437 -6611, 69.62402, 119.3894 -6612, 66.8157, 107.8753 -6613, 64.54403, 123.3058 -6614, 68.37687, 116.9408 -6615, 67.70961, 120.4639 -6616, 69.79282, 107.1216 -6617, 70.33109, 134.1242 -6618, 71.11525, 142.3554 -6619, 70.50683, 131.8652 -6620, 67.3265, 117.8718 -6621, 70.37423, 134.2731 -6622, 68.93535, 136.6499 -6623, 68.74748, 139.4778 -6624, 66.31697, 126.7884 -6625, 67.96141, 137.7632 -6626, 68.02516, 125.7112 -6627, 68.54611, 134.6283 -6628, 73.72628, 142.811 -6629, 66.30109, 124.8609 -6630, 69.84513, 134.2394 -6631, 66.34608, 112.6472 -6632, 69.22406, 120.5706 -6633, 65.20241, 126.6356 -6634, 68.16207, 122.2711 -6635, 66.17376, 114.6814 -6636, 65.82561, 137.7805 -6637, 70.49243, 122.7935 -6638, 66.86335, 129.0675 -6639, 69.00819, 121.8091 -6640, 69.09268, 139.8642 -6641, 68.4858, 137.6952 -6642, 70.05821, 124.648 -6643, 63.92011, 136.3251 -6644, 69.10662, 124.9316 -6645, 68.37383, 124.5664 -6646, 67.81685, 147.8495 -6647, 68.35014, 121.062 -6648, 66.20868, 134.3163 -6649, 69.82296, 145.8658 -6650, 69.83591, 128.6599 -6651, 70.09777, 148.3039 -6652, 65.74923, 118.5265 -6653, 67.2496, 121.1303 -6654, 67.01302, 106.3264 -6655, 67.86604, 142.5205 -6656, 69.51352, 143.2796 -6657, 68.79671, 119.9716 -6658, 71.3044, 142.1026 -6659, 68.74348, 130.4 -6660, 68.21948, 129.4293 -6661, 72.8674, 128.4835 -6662, 67.8235, 113.0689 -6663, 65.2038, 116.4099 -6664, 64.55504, 115.4541 -6665, 68.46274, 121.7866 -6666, 66.08879, 114.1458 -6667, 66.53332, 109.2672 -6668, 66.75524, 102.657 -6669, 68.20629, 130.9008 -6670, 69.60968, 141.8457 -6671, 65.68272, 138.0014 -6672, 66.5195, 122.4759 -6673, 63.30338, 120.175 -6674, 67.19227, 115.3758 -6675, 64.59287, 115.1326 -6676, 67.61165, 134.6538 -6677, 69.54174, 123.5377 -6678, 72.4977, 133.2865 -6679, 68.60441, 135.2291 -6680, 68.26375, 118.0737 -6681, 66.51715, 125.0585 -6682, 66.7498, 134.2382 -6683, 68.57715, 126.5512 -6684, 68.15554, 118.1801 -6685, 67.67131, 116.6818 -6686, 69.25188, 149.0548 -6687, 67.63059, 122.7405 -6688, 70.5553, 128.8346 -6689, 66.51049, 122.1635 -6690, 70.06291, 134.2863 -6691, 68.95425, 140.8941 -6692, 67.76337, 115.7462 -6693, 66.16295, 122.7829 -6694, 70.23017, 148.6758 -6695, 66.85157, 128.1767 -6696, 69.98998, 135.2626 -6697, 69.57826, 129.3778 -6698, 67.82307, 113.7661 -6699, 66.16931, 118.1876 -6700, 64.97487, 119.7272 -6701, 66.75172, 111.0794 -6702, 67.03147, 122.6207 -6703, 70.78522, 149.449 -6704, 69.08702, 127.2521 -6705, 66.56877, 140.5165 -6706, 65.65581, 103.6644 -6707, 69.91828, 129.1403 -6708, 68.10072, 143.8415 -6709, 65.21574, 115.4829 -6710, 65.92987, 131.1892 -6711, 66.78368, 134.2093 -6712, 66.63773, 137.8539 -6713, 70.115, 136.2478 -6714, 71.87742, 145.386 -6715, 69.37969, 143.8422 -6716, 67.09682, 120.5931 -6717, 68.90441, 122.8529 -6718, 67.59411, 124.496 -6719, 69.73864, 107.3653 -6720, 66.47251, 136.4277 -6721, 68.96672, 149.0714 -6722, 69.183, 137.1885 -6723, 69.12592, 137.31 -6724, 67.06716, 139.6149 -6725, 66.43504, 116.7063 -6726, 68.03354, 133.7463 -6727, 70.66473, 134.2961 -6728, 66.95512, 118.338 -6729, 71.13236, 144.4866 -6730, 64.10697, 120.6126 -6731, 69.43162, 145.1667 -6732, 67.23457, 113.2283 -6733, 70.20178, 112.7536 -6734, 65.73987, 123.1815 -6735, 66.55121, 121.9317 -6736, 67.72679, 119.4187 -6737, 71.22324, 132.9604 -6738, 64.72674, 127.4027 -6739, 67.36195, 122.3824 -6740, 68.42406, 132.2244 -6741, 69.81064, 124.3983 -6742, 70.14812, 111.3963 -6743, 66.31497, 123.1817 -6744, 67.25945, 103.6091 -6745, 66.24777, 123.5493 -6746, 67.13633, 142.1095 -6747, 68.44022, 129.7913 -6748, 72.07034, 136.4478 -6749, 68.48039, 120.6969 -6750, 67.12369, 122.3988 -6751, 67.94203, 138.1901 -6752, 68.01522, 119.8895 -6753, 67.83753, 110.6977 -6754, 67.08281, 131.6536 -6755, 66.13397, 125.3077 -6756, 70.17398, 138.519 -6757, 73.12686, 139.2637 -6758, 66.29478, 132.4121 -6759, 67.48723, 128.3885 -6760, 63.84013, 127.6618 -6761, 71.23226, 137.9139 -6762, 68.93456, 131.205 -6763, 65.31508, 126.5417 -6764, 72.89094, 144.8666 -6765, 66.85445, 123.4989 -6766, 67.71429, 129.7462 -6767, 66.99515, 145.3356 -6768, 62.48643, 115.2889 -6769, 68.4545, 119.9549 -6770, 66.18029, 112.1502 -6771, 68.29449, 127.8367 -6772, 68.5935, 137.6326 -6773, 68.13211, 121.9201 -6774, 70.55532, 131.9945 -6775, 71.26895, 135.8511 -6776, 70.71689, 133.3027 -6777, 68.27433, 123.0711 -6778, 65.85545, 125.7077 -6779, 67.19789, 130.9707 -6780, 69.03473, 143.7162 -6781, 70.96078, 138.1647 -6782, 68.99354, 146.7285 -6783, 66.75706, 133.1515 -6784, 67.73694, 123.5134 -6785, 68.31951, 129.2444 -6786, 66.24969, 121.9078 -6787, 68.70678, 128.4009 -6788, 68.0356, 140.9392 -6789, 68.96343, 137.3493 -6790, 67.50309, 129.5348 -6791, 65.02611, 131.0273 -6792, 70.0671, 146.3213 -6793, 65.36984, 97.06459 -6794, 66.73719, 119.8514 -6795, 68.25009, 124.1159 -6796, 68.91447, 144.9636 -6797, 69.42874, 117.0746 -6798, 69.11436, 126.7865 -6799, 67.99857, 112.9692 -6800, 70.26098, 141.588 -6801, 68.64432, 124.0298 -6802, 66.17354, 125.5482 -6803, 70.00471, 122.1783 -6804, 66.31189, 118.2902 -6805, 65.90206, 116.5597 -6806, 68.25885, 116.5077 -6807, 70.75448, 147.473 -6808, 67.08351, 131.7851 -6809, 67.02122, 132.2825 -6810, 70.51041, 134.3807 -6811, 67.60778, 119.8518 -6812, 68.83486, 136.1642 -6813, 64.254, 114.5097 -6814, 71.91722, 138.2213 -6815, 67.82529, 133.2127 -6816, 66.34443, 126.5382 -6817, 69.22459, 129.8661 -6818, 65.53683, 122.7073 -6819, 66.65738, 111.8648 -6820, 69.74106, 128.2887 -6821, 68.77304, 120.5732 -6822, 67.66713, 122.1059 -6823, 71.04389, 145.6585 -6824, 67.97438, 116.155 -6825, 69.01111, 137.4236 -6826, 70.97446, 137.894 -6827, 66.09937, 114.8329 -6828, 68.2026, 136.3654 -6829, 71.18778, 148.7839 -6830, 70.10012, 118.7125 -6831, 67.40562, 118.3544 -6832, 71.0495, 152.5436 -6833, 69.10354, 128.9651 -6834, 66.99674, 124.5497 -6835, 67.55177, 118.077 -6836, 66.04561, 100.3573 -6837, 69.97684, 120.8445 -6838, 69.59421, 136.3666 -6839, 69.50004, 129.3228 -6840, 66.70728, 129.9114 -6841, 67.74378, 116.261 -6842, 69.52156, 137.5933 -6843, 68.65583, 106.9772 -6844, 66.58063, 118.7891 -6845, 67.31123, 127.0282 -6846, 69.21023, 135.7681 -6847, 69.76802, 127.8121 -6848, 71.36846, 127.9637 -6849, 64.91466, 121.4664 -6850, 65.91717, 100.2395 -6851, 68.79172, 115.6267 -6852, 66.86831, 124.0965 -6853, 68.85311, 124.2217 -6854, 64.99322, 112.2167 -6855, 70.31634, 132.5438 -6856, 65.07995, 107.1524 -6857, 68.55692, 119.8364 -6858, 65.03755, 123.5259 -6859, 68.97846, 134.4521 -6860, 68.1677, 125.5112 -6861, 70.25241, 133.5386 -6862, 68.35771, 133.3158 -6863, 71.59998, 144.3195 -6864, 67.62775, 140.8419 -6865, 71.9168, 147.5959 -6866, 64.91759, 114.7572 -6867, 68.03944, 117.7686 -6868, 68.83719, 140.7958 -6869, 68.42447, 134.2855 -6870, 67.19277, 110.2144 -6871, 67.95936, 107.3158 -6872, 69.13031, 122.8845 -6873, 66.53698, 118.2503 -6874, 69.3362, 125.8938 -6875, 69.66919, 127.4892 -6876, 69.32642, 153.3295 -6877, 71.67815, 124.592 -6878, 66.81763, 106.8565 -6879, 67.96098, 133.7046 -6880, 70.27599, 124.6664 -6881, 70.83387, 132.0587 -6882, 71.95684, 138.0874 -6883, 65.53739, 130.3727 -6884, 67.20098, 118.1746 -6885, 66.84158, 134.8257 -6886, 72.22081, 123.7257 -6887, 68.23933, 128.9637 -6888, 69.34904, 151.0629 -6889, 67.54027, 126.6496 -6890, 66.55953, 114.8614 -6891, 69.42919, 133.6709 -6892, 68.77479, 137.1665 -6893, 67.11564, 139.5681 -6894, 69.7283, 127.7704 -6895, 69.71847, 119.206 -6896, 67.00926, 131.5259 -6897, 70.23583, 124.1454 -6898, 68.05243, 140.9604 -6899, 66.81973, 111.675 -6900, 64.33826, 131.6378 -6901, 69.21901, 133.7032 -6902, 70.30269, 133.0611 -6903, 67.7681, 115.596 -6904, 68.28813, 127.7475 -6905, 70.67229, 136.774 -6906, 67.56648, 135.1199 -6907, 68.2033, 117.4256 -6908, 70.82652, 128.3953 -6909, 68.76882, 124.6462 -6910, 66.21644, 140.4212 -6911, 69.94665, 129.9599 -6912, 66.82673, 116.1417 -6913, 70.62106, 138.8435 -6914, 65.96267, 131.9172 -6915, 68.32852, 120.174 -6916, 68.14281, 117.9655 -6917, 67.68342, 132.2259 -6918, 62.29058, 100.38 -6919, 66.56289, 112.8575 -6920, 67.53601, 127.3499 -6921, 69.9728, 128.0357 -6922, 71.62721, 148.2612 -6923, 68.87831, 118.697 -6924, 68.90985, 125.1128 -6925, 68.48804, 126.9495 -6926, 64.492, 116.0879 -6927, 68.05258, 130.1563 -6928, 70.97223, 128.6877 -6929, 67.73294, 124.8016 -6930, 64.42714, 122.3703 -6931, 66.89249, 121.6673 -6932, 72.00652, 126.211 -6933, 67.8034, 127.3033 -6934, 70.31843, 133.3873 -6935, 69.6285, 136.3986 -6936, 68.90652, 112.0078 -6937, 71.01122, 146.1389 -6938, 69.03379, 126.0906 -6939, 64.16792, 100.7711 -6940, 67.46005, 132.1034 -6941, 66.31981, 142.7429 -6942, 61.4055, 119.2652 -6943, 69.07292, 123.567 -6944, 69.04136, 129.2791 -6945, 65.63933, 130.0454 -6946, 68.98367, 146.821 -6947, 67.08789, 102.0192 -6948, 66.9645, 122.3346 -6949, 64.88959, 113.4712 -6950, 70.18743, 134.5754 -6951, 70.24701, 136.6864 -6952, 68.65855, 127.6595 -6953, 66.65856, 112.9117 -6954, 70.81437, 139.8524 -6955, 62.86676, 100.8983 -6956, 70.1981, 134.0086 -6957, 67.74387, 134.1832 -6958, 67.78774, 124.2984 -6959, 66.8155, 113.8397 -6960, 70.47312, 126.8411 -6961, 67.28529, 138.4671 -6962, 67.63923, 135.8226 -6963, 69.54133, 134.1394 -6964, 72.09163, 147.1709 -6965, 69.40312, 124.7091 -6966, 66.90419, 128.6304 -6967, 64.77967, 126.6038 -6968, 67.71305, 117.6067 -6969, 67.98558, 131.2976 -6970, 67.39091, 130.2718 -6971, 66.59739, 123.9308 -6972, 66.03491, 111.1245 -6973, 71.32563, 150.9399 -6974, 70.89299, 138.5366 -6975, 69.29039, 123.6542 -6976, 72.50612, 135.4202 -6977, 66.39209, 131.7184 -6978, 70.22429, 148.9964 -6979, 70.61033, 129.818 -6980, 67.43213, 113.7404 -6981, 67.08964, 142.8879 -6982, 69.52539, 133.248 -6983, 64.80112, 123.5309 -6984, 69.50292, 131.3393 -6985, 68.89136, 138.7052 -6986, 69.82676, 121.5695 -6987, 66.19549, 134.9518 -6988, 67.74861, 107.9783 -6989, 66.53997, 122.5054 -6990, 67.32858, 140.5876 -6991, 65.01159, 113.4278 -6992, 68.85847, 115.1244 -6993, 67.21657, 126.9035 -6994, 68.82472, 122.0827 -6995, 68.38527, 117.6941 -6996, 67.5943, 112.418 -6997, 67.82269, 110.7359 -6998, 67.83166, 134.7077 -6999, 66.31882, 124.513 -7000, 66.99476, 100.1673 -7001, 66.87892, 122.5671 -7002, 68.38919, 139.537 -7003, 66.4759, 123.509 -7004, 68.5542, 137.4336 -7005, 67.83647, 131.4485 -7006, 70.39431, 148.3386 -7007, 67.58981, 127.5607 -7008, 65.26024, 107.7349 -7009, 66.7406, 119.5494 -7010, 68.93702, 135.9338 -7011, 66.45697, 129.6703 -7012, 67.80572, 138.3332 -7013, 65.5528, 111.1973 -7014, 66.09202, 109.7177 -7015, 67.50397, 138.7697 -7016, 68.11816, 117.8952 -7017, 67.24076, 118.436 -7018, 66.5412, 139.4789 -7019, 71.02195, 140.13 -7020, 68.32773, 106.9353 -7021, 69.9594, 123.1594 -7022, 68.32581, 130.2541 -7023, 69.1247, 127.0935 -7024, 66.52031, 141.2168 -7025, 66.54596, 106.5251 -7026, 68.83517, 135.2336 -7027, 69.46929, 116.2368 -7028, 63.84823, 107.2539 -7029, 67.369, 125.2445 -7030, 66.46618, 126.7497 -7031, 68.00188, 124.7855 -7032, 66.55544, 130.3081 -7033, 67.93518, 129.0813 -7034, 71.09441, 136.352 -7035, 71.90701, 127.3129 -7036, 66.45996, 115.5565 -7037, 66.28668, 122.6641 -7038, 67.60595, 121.1687 -7039, 66.90904, 123.3812 -7040, 66.93917, 138.1009 -7041, 68.73882, 142.0686 -7042, 69.22875, 140.783 -7043, 67.50325, 118.1483 -7044, 68.374, 116.9901 -7045, 65.04856, 134.1878 -7046, 67.64236, 128.8601 -7047, 66.68778, 127.995 -7048, 68.92306, 110.6146 -7049, 68.29892, 147.2812 -7050, 69.50429, 124.4182 -7051, 71.313, 154.0956 -7052, 68.43807, 138.7187 -7053, 67.13923, 118.2185 -7054, 71.65034, 129.9864 -7055, 65.08982, 108.6521 -7056, 65.9342, 121.5126 -7057, 69.09728, 131.8032 -7058, 67.26581, 122.3023 -7059, 64.38799, 117.6848 -7060, 66.66263, 123.165 -7061, 69.12113, 128.1987 -7062, 68.00116, 120.519 -7063, 66.01521, 132.6177 -7064, 69.06381, 153.8047 -7065, 65.36307, 114.7964 -7066, 68.5666, 120.8603 -7067, 64.96461, 110.8094 -7068, 68.04672, 116.8675 -7069, 68.55896, 140.4034 -7070, 68.99092, 118.0107 -7071, 66.53254, 116.871 -7072, 65.54329, 99.65617 -7073, 66.37032, 123.1376 -7074, 67.35006, 131.78 -7075, 67.37973, 107.3991 -7076, 68.37168, 125.2837 -7077, 69.43348, 140.256 -7078, 68.83415, 126.4995 -7079, 68.35128, 132.1206 -7080, 69.7299, 126.5069 -7081, 66.76921, 116.9988 -7082, 68.59913, 113.4002 -7083, 66.77606, 114.8109 -7084, 66.92936, 108.9786 -7085, 69.08265, 137.5979 -7086, 69.06212, 122.6742 -7087, 66.44597, 120.8244 -7088, 70.37422, 139.8095 -7089, 64.52265, 117.7043 -7090, 67.58351, 149.6098 -7091, 70.31109, 139.4191 -7092, 70.50002, 137.8864 -7093, 66.50098, 113.2406 -7094, 65.35631, 117.0282 -7095, 67.80355, 129.6957 -7096, 66.06759, 137.8167 -7097, 68.51708, 125.1696 -7098, 64.11949, 112.7134 -7099, 66.96134, 122.761 -7100, 67.96643, 118.005 -7101, 67.0344, 143.2701 -7102, 70.02335, 122.6553 -7103, 68.2267, 139.9412 -7104, 68.92581, 110.0091 -7105, 66.98588, 136.5209 -7106, 66.60277, 126.6768 -7107, 71.395, 133.8678 -7108, 67.86413, 136.4188 -7109, 69.13237, 126.8823 -7110, 67.87654, 117.7937 -7111, 68.76083, 132.8404 -7112, 67.36789, 116.0168 -7113, 65.16072, 135.585 -7114, 70.55072, 125.9307 -7115, 66.4049, 121.0867 -7116, 66.83446, 136.2764 -7117, 67.26086, 120.1009 -7118, 70.00579, 133.7637 -7119, 70.13397, 138.0896 -7120, 67.04961, 127.2923 -7121, 67.13933, 116.9931 -7122, 68.39594, 143.1639 -7123, 67.26621, 138.2081 -7124, 70.70541, 140.5597 -7125, 64.81425, 117.1367 -7126, 67.63186, 134.8175 -7127, 63.99001, 130.4298 -7128, 67.89236, 120.5148 -7129, 65.72178, 118.9157 -7130, 67.34324, 124.2062 -7131, 71.7701, 143.3808 -7132, 65.51898, 102.0683 -7133, 67.25056, 120.3717 -7134, 68.26108, 134.7602 -7135, 67.88764, 133.5285 -7136, 69.86454, 151.4865 -7137, 68.69896, 125.0424 -7138, 70.16294, 133.275 -7139, 64.9089, 114.8393 -7140, 69.99566, 136.6724 -7141, 66.28872, 124.6184 -7142, 71.21582, 153.9191 -7143, 67.42305, 130.0958 -7144, 68.73146, 126.8497 -7145, 67.73615, 130.1305 -7146, 68.15963, 137.0062 -7147, 69.62686, 143.488 -7148, 68.1477, 139.4233 -7149, 67.65882, 111.2477 -7150, 64.6576, 115.7454 -7151, 71.4186, 152.3875 -7152, 66.99874, 101.7823 -7153, 70.37822, 138.2295 -7154, 66.51704, 144.9564 -7155, 67.18007, 126.0652 -7156, 68.03524, 129.5533 -7157, 63.49286, 100.8383 -7158, 67.48731, 135.685 -7159, 68.98253, 130.124 -7160, 68.48716, 114.3281 -7161, 68.43382, 119.7082 -7162, 66.82633, 117.9674 -7163, 68.58959, 136.604 -7164, 68.21922, 126.5181 -7165, 68.79074, 139.2679 -7166, 66.59109, 132.4449 -7167, 65.72831, 129.9469 -7168, 69.45052, 105.7793 -7169, 67.07052, 120.3329 -7170, 66.06131, 110.5079 -7171, 64.13507, 122.0272 -7172, 65.8497, 121.6887 -7173, 68.81954, 140.3287 -7174, 68.01948, 130.2994 -7175, 66.17253, 130.1025 -7176, 69.20803, 133.1917 -7177, 69.09409, 128.1301 -7178, 69.50502, 137.3243 -7179, 69.27992, 139.0344 -7180, 69.8233, 152.5737 -7181, 69.33597, 145.3588 -7182, 69.64967, 131.4688 -7183, 68.92694, 135.01 -7184, 67.99845, 120.3701 -7185, 66.80329, 131.1969 -7186, 64.69195, 116.3957 -7187, 69.49096, 133.2719 -7188, 68.30048, 114.0233 -7189, 65.80058, 110.1396 -7190, 69.8954, 127.7667 -7191, 68.42628, 122.4339 -7192, 69.50113, 130.9145 -7193, 69.29251, 143.7263 -7194, 67.7469, 140.5105 -7195, 68.04911, 117.309 -7196, 69.58269, 128.3045 -7197, 66.98591, 132.42 -7198, 70.06189, 151.3699 -7199, 67.95494, 103.0898 -7200, 69.72035, 135.2409 -7201, 67.76978, 125.5754 -7202, 71.50252, 134.2854 -7203, 66.8927, 116.1475 -7204, 69.78987, 145.157 -7205, 69.18094, 97.38482 -7206, 69.55195, 141.5296 -7207, 66.76773, 124.1834 -7208, 70.68901, 119.41 -7209, 67.44662, 110.9564 -7210, 70.43882, 152.882 -7211, 69.38655, 133.4961 -7212, 67.25475, 131.5363 -7213, 70.51274, 147.9493 -7214, 68.07194, 107.2294 -7215, 66.82279, 123.3618 -7216, 72.79602, 119.6208 -7217, 66.80265, 109.7922 -7218, 68.40038, 130.909 -7219, 66.53305, 135.1808 -7220, 66.19168, 110.6117 -7221, 70.86937, 145.8197 -7222, 67.03655, 118.0754 -7223, 70.32482, 136.9369 -7224, 63.52966, 111.5511 -7225, 65.38477, 125.863 -7226, 67.61447, 126.7202 -7227, 69.8557, 157.414 -7228, 64.02049, 108.3825 -7229, 64.67575, 112.1651 -7230, 67.23841, 118.3111 -7231, 65.11543, 108.6568 -7232, 66.20656, 119.9807 -7233, 69.70118, 126.3537 -7234, 70.47463, 119.7988 -7235, 68.64678, 126.5725 -7236, 67.34344, 119.4016 -7237, 65.62668, 120.6734 -7238, 66.96462, 122.5543 -7239, 68.23983, 119.0203 -7240, 69.3839, 126.4594 -7241, 66.51058, 112.3129 -7242, 66.37135, 118.6985 -7243, 71.9533, 132.4024 -7244, 70.8278, 136.0832 -7245, 69.65515, 129.2316 -7246, 67.97516, 137.9614 -7247, 67.6667, 131.5778 -7248, 69.76989, 141.3806 -7249, 68.36656, 134.1194 -7250, 68.80647, 118.5526 -7251, 67.12544, 116.3449 -7252, 68.11498, 136.6981 -7253, 67.29381, 131.0281 -7254, 70.70649, 112.1012 -7255, 65.08928, 131.0829 -7256, 71.1406, 127.4022 -7257, 70.56025, 150.4959 -7258, 68.47391, 130.8527 -7259, 68.99078, 147.5658 -7260, 70.76446, 128.8298 -7261, 69.76717, 131.0973 -7262, 65.74663, 118.725 -7263, 66.98775, 143.9424 -7264, 64.41271, 112.5632 -7265, 67.19909, 125.5583 -7266, 67.00659, 136.9352 -7267, 67.64628, 132.7607 -7268, 67.50257, 142.7019 -7269, 67.6803, 139.2383 -7270, 73.81695, 140.0915 -7271, 64.48825, 134.3808 -7272, 64.58578, 120.986 -7273, 66.58703, 114.208 -7274, 68.7568, 128.8771 -7275, 67.84196, 127.669 -7276, 69.0289, 129.4355 -7277, 70.24106, 122.759 -7278, 66.48991, 126.8856 -7279, 69.47393, 132.2408 -7280, 66.15579, 132.3362 -7281, 66.50286, 137.7408 -7282, 71.5695, 148.1165 -7283, 67.4536, 119.7771 -7284, 65.97892, 122.5452 -7285, 68.36647, 147.1068 -7286, 67.64033, 142.18 -7287, 68.45333, 134.8398 -7288, 67.641, 131.9221 -7289, 65.33383, 135.0619 -7290, 71.61624, 140.3879 -7291, 69.96497, 144.7957 -7292, 70.31945, 133.4026 -7293, 68.04474, 134.0615 -7294, 70.72336, 140.8089 -7295, 68.49315, 136.7987 -7296, 67.94018, 117.5218 -7297, 66.67637, 125.0994 -7298, 66.33467, 120.3094 -7299, 68.4344, 131.5393 -7300, 66.06591, 128.7348 -7301, 68.27948, 145.317 -7302, 71.13503, 139.9063 -7303, 65.90755, 111.1929 -7304, 66.34423, 134.0435 -7305, 65.3504, 109.4509 -7306, 66.77512, 125.6017 -7307, 70.15968, 125.4635 -7308, 64.87603, 108.8633 -7309, 66.39882, 122.1298 -7310, 70.19458, 134.7721 -7311, 65.14868, 118.2586 -7312, 69.13566, 134.8389 -7313, 68.66753, 149.9199 -7314, 68.58656, 120.5065 -7315, 68.54078, 131.3163 -7316, 69.04324, 120.7318 -7317, 67.79093, 145.3154 -7318, 70.54534, 128.9349 -7319, 67.88231, 132.4517 -7320, 66.60399, 125.7715 -7321, 65.36397, 88.81051 -7322, 69.68018, 138.3541 -7323, 68.57678, 127.8418 -7324, 66.22321, 127.7406 -7325, 68.5423, 117.28 -7326, 67.7995, 133.4251 -7327, 68.63948, 140.4405 -7328, 67.95206, 131.4384 -7329, 67.73545, 111.3263 -7330, 67.6113, 115.9311 -7331, 70.69283, 141.2872 -7332, 68.26736, 129.9806 -7333, 65.89008, 134.8798 -7334, 73.01042, 156.0944 -7335, 67.67587, 134.7738 -7336, 66.78503, 135.5158 -7337, 68.32888, 120.9929 -7338, 70.73417, 133.0843 -7339, 69.43571, 128.0102 -7340, 69.95298, 111.8821 -7341, 68.38192, 108.5709 -7342, 66.70985, 141.8568 -7343, 70.25069, 134.9127 -7344, 67.62069, 118.2398 -7345, 67.58186, 123.5611 -7346, 65.98681, 110.9755 -7347, 68.78521, 121.7078 -7348, 68.62075, 128.9687 -7349, 67.27841, 132.6356 -7350, 65.34695, 111.0262 -7351, 69.76109, 143.2576 -7352, 69.89052, 125.2298 -7353, 69.03762, 136.3245 -7354, 67.52712, 126.3744 -7355, 69.42798, 133.2845 -7356, 69.25325, 122.813 -7357, 67.20804, 121.3649 -7358, 68.00991, 139.8288 -7359, 72.35641, 130.8996 -7360, 65.18365, 137.4973 -7361, 67.18597, 124.8715 -7362, 67.76811, 122.6361 -7363, 69.67532, 128.1323 -7364, 68.04481, 110.4944 -7365, 70.36942, 130.4623 -7366, 64.41718, 124.1877 -7367, 66.85948, 140.3651 -7368, 70.20287, 132.4583 -7369, 67.02928, 129.9706 -7370, 69.26978, 144.3226 -7371, 67.42833, 118.4512 -7372, 70.54165, 133.0559 -7373, 64.53151, 123.7602 -7374, 68.24766, 125.6892 -7375, 65.98542, 129.7971 -7376, 66.86053, 106.1024 -7377, 66.122, 139.3225 -7378, 67.34277, 130.4799 -7379, 67.62678, 119.9616 -7380, 67.02834, 124.4751 -7381, 67.42969, 126.0978 -7382, 66.99899, 128.2102 -7383, 69.26638, 136.238 -7384, 67.67848, 121.8698 -7385, 68.48995, 112.3066 -7386, 69.15514, 134.703 -7387, 69.54796, 127.4389 -7388, 67.40434, 106.6406 -7389, 66.14023, 107.8906 -7390, 63.61758, 117.2843 -7391, 65.16034, 110.2457 -7392, 68.08398, 121.0482 -7393, 67.93785, 124.3501 -7394, 67.52815, 128.1553 -7395, 68.97399, 121.222 -7396, 63.48592, 121.0895 -7397, 66.16304, 117.5089 -7398, 64.82835, 97.5369 -7399, 66.42971, 119.6172 -7400, 68.43495, 118.9727 -7401, 66.52114, 137.8509 -7402, 68.74805, 121.5155 -7403, 65.97323, 132.5458 -7404, 67.03314, 100.0056 -7405, 68.58693, 141.2024 -7406, 66.32704, 126.5394 -7407, 72.83685, 155.3977 -7408, 70.3984, 134.7797 -7409, 68.05803, 125.6942 -7410, 65.14364, 115.004 -7411, 69.14854, 125.904 -7412, 64.25558, 123.25 -7413, 63.75162, 117.198 -7414, 72.02677, 148.7849 -7415, 65.65417, 128.8653 -7416, 67.21431, 118.7941 -7417, 69.10937, 123.3988 -7418, 64.55084, 90.03145 -7419, 69.84948, 120.5746 -7420, 70.64157, 126.2191 -7421, 67.02268, 126.7902 -7422, 66.05177, 124.9625 -7423, 67.36082, 143.185 -7424, 67.63802, 129.4889 -7425, 67.75642, 131.3101 -7426, 69.01775, 139.614 -7427, 66.81603, 120.3352 -7428, 68.1264, 128.0491 -7429, 69.39699, 144.2164 -7430, 68.0198, 107.2461 -7431, 71.13762, 140.6199 -7432, 66.92045, 110.6346 -7433, 68.51978, 123.7867 -7434, 67.49444, 134.2646 -7435, 67.69485, 135.7343 -7436, 70.48607, 132.574 -7437, 64.47721, 101.3696 -7438, 69.08046, 138.2492 -7439, 67.60168, 131.9158 -7440, 68.3217, 99.18847 -7441, 68.73792, 104.5348 -7442, 65.82668, 108.8067 -7443, 67.5949, 129.1996 -7444, 69.82714, 132.2253 -7445, 69.24298, 132.0935 -7446, 66.8406, 121.3455 -7447, 69.53579, 120.1047 -7448, 66.37498, 122.0791 -7449, 66.07098, 125.3647 -7450, 64.61507, 112.5542 -7451, 68.42049, 121.1324 -7452, 69.56459, 115.4338 -7453, 69.39142, 140.7167 -7454, 68.43529, 123.0205 -7455, 67.05497, 127.0142 -7456, 67.7922, 130.0494 -7457, 71.94893, 144.1957 -7458, 69.63726, 129.699 -7459, 72.0813, 143.083 -7460, 68.45988, 117.2453 -7461, 65.46367, 139.3682 -7462, 67.27282, 106.0456 -7463, 68.18818, 131.0038 -7464, 67.28198, 119.6203 -7465, 63.91125, 112.35 -7466, 67.71167, 132.679 -7467, 72.1432, 139.7611 -7468, 68.25521, 135.8145 -7469, 67.53778, 133.3183 -7470, 68.60468, 121.2002 -7471, 67.59235, 111.6109 -7472, 65.19918, 114.0807 -7473, 62.40921, 110.2593 -7474, 70.58047, 122.8997 -7475, 68.8901, 134.8572 -7476, 68.74666, 119.1949 -7477, 66.29907, 118.4403 -7478, 66.65775, 134.1269 -7479, 66.55058, 125.0959 -7480, 67.70659, 123.8787 -7481, 69.75302, 125.8733 -7482, 67.72124, 114.2514 -7483, 69.36439, 135.5384 -7484, 66.44274, 115.7687 -7485, 67.19566, 119.574 -7486, 66.4343, 114.6366 -7487, 65.08244, 117.4341 -7488, 70.47208, 153.8939 -7489, 67.66172, 107.8835 -7490, 67.5012, 113.0245 -7491, 68.91253, 131.5965 -7492, 67.64257, 131.1377 -7493, 68.50697, 139.4594 -7494, 67.21841, 133.7691 -7495, 65.88687, 113.0185 -7496, 69.8779, 118.3424 -7497, 70.37038, 138.2626 -7498, 68.66927, 139.6973 -7499, 68.70197, 132.6589 -7500, 69.8006, 141.7412 -7501, 70.90949, 150.0568 -7502, 65.1748, 118.2564 -7503, 66.21658, 118.9631 -7504, 69.61605, 135.4832 -7505, 69.87508, 154.3167 -7506, 65.58734, 133.1199 -7507, 66.083, 115.4637 -7508, 70.48212, 135.9939 -7509, 67.84056, 112.9479 -7510, 68.47217, 136.3002 -7511, 66.79221, 128.7134 -7512, 68.54694, 124.5508 -7513, 64.80177, 114.0726 -7514, 66.60203, 106.2728 -7515, 67.21014, 121.7322 -7516, 66.73678, 114.8589 -7517, 66.53306, 110.7923 -7518, 68.6929, 132.2393 -7519, 68.19062, 141.1859 -7520, 63.92606, 121.3297 -7521, 69.5829, 117.6169 -7522, 70.98816, 140.1896 -7523, 70.76388, 141.9068 -7524, 65.02684, 126.1456 -7525, 66.90201, 128.0042 -7526, 69.23204, 130.8349 -7527, 66.09344, 143.7256 -7528, 69.49427, 138.9172 -7529, 68.05, 140.3419 -7530, 67.49402, 131.6908 -7531, 68.85025, 140.8144 -7532, 68.23896, 125.7072 -7533, 68.38393, 116.0417 -7534, 68.95408, 113.6366 -7535, 67.65103, 125.5184 -7536, 66.20531, 111.8929 -7537, 68.93726, 134.5124 -7538, 67.80014, 127.1 -7539, 65.2647, 121.8737 -7540, 68.09232, 130.421 -7541, 68.65955, 115.7811 -7542, 67.81543, 120.4567 -7543, 65.20035, 133.6623 -7544, 65.84472, 105.3131 -7545, 67.38545, 141.2867 -7546, 67.92876, 124.5046 -7547, 66.27859, 120.0427 -7548, 70.74889, 121.0602 -7549, 69.97731, 147.2286 -7550, 67.20964, 125.5631 -7551, 67.31481, 126.7142 -7552, 70.24038, 147.5274 -7553, 68.99325, 134.3203 -7554, 68.59389, 131.2151 -7555, 67.98396, 137.5212 -7556, 70.36114, 149.4448 -7557, 68.91001, 125.7485 -7558, 66.87767, 123.1591 -7559, 66.79704, 122.6614 -7560, 66.1317, 107.0973 -7561, 72.32421, 126.4469 -7562, 68.51105, 130.1897 -7563, 68.79547, 128.0733 -7564, 70.50895, 147.6337 -7565, 67.21348, 124.8905 -7566, 67.40794, 140.4072 -7567, 67.35628, 135.5266 -7568, 68.38489, 129.793 -7569, 71.91894, 140.7337 -7570, 68.43062, 121.2177 -7571, 67.77666, 139.6088 -7572, 68.99119, 117.0843 -7573, 66.21266, 129.6054 -7574, 67.7385, 123.8408 -7575, 70.30638, 129.3636 -7576, 68.12954, 118.034 -7577, 69.86354, 127.871 -7578, 68.46795, 129.2263 -7579, 70.82723, 130.3162 -7580, 70.53312, 125.3443 -7581, 66.68491, 114.5746 -7582, 67.9728, 123.6368 -7583, 67.22708, 111.5203 -7584, 69.68289, 135.3127 -7585, 66.59604, 126.2811 -7586, 66.10015, 128.3855 -7587, 67.86074, 110.5005 -7588, 68.01097, 125.1627 -7589, 67.5839, 131.7113 -7590, 67.5159, 129.2797 -7591, 68.53632, 127.2682 -7592, 65.53007, 116.1557 -7593, 67.01862, 115.6411 -7594, 71.70261, 130.089 -7595, 67.42779, 119.1357 -7596, 67.40744, 138.6263 -7597, 70.61318, 132.1391 -7598, 71.40194, 133.7259 -7599, 64.09089, 103.413 -7600, 68.57917, 140.5224 -7601, 70.44562, 139.2476 -7602, 68.78892, 137.1816 -7603, 68.17666, 128.6937 -7604, 67.25766, 119.6812 -7605, 69.58706, 134.283 -7606, 65.62971, 117.5826 -7607, 70.16689, 149.014 -7608, 66.6029, 125.2519 -7609, 66.8357, 137.9874 -7610, 67.74481, 114.0989 -7611, 67.01471, 105.5528 -7612, 68.82323, 129.1214 -7613, 66.53189, 121.6671 -7614, 64.95852, 125.6806 -7615, 66.39552, 106.5133 -7616, 69.15387, 145.4679 -7617, 67.3919, 137.8311 -7618, 66.46185, 108.3132 -7619, 66.04052, 117.8311 -7620, 70.38614, 137.0213 -7621, 65.65727, 94.93893 -7622, 67.33538, 121.7877 -7623, 69.28239, 127.8304 -7624, 70.2126, 136.728 -7625, 64.3484, 113.3811 -7626, 69.31893, 139.7068 -7627, 71.18364, 137.8162 -7628, 66.69679, 104.8015 -7629, 69.94556, 129.3583 -7630, 66.51505, 138.6321 -7631, 64.14991, 116.5963 -7632, 69.92795, 124.8835 -7633, 66.73025, 137.4516 -7634, 68.51984, 140.2377 -7635, 67.32388, 136.2189 -7636, 64.05124, 104.3901 -7637, 68.15534, 119.4984 -7638, 67.71709, 118.2663 -7639, 66.70415, 130.1457 -7640, 67.41672, 129.0666 -7641, 68.76344, 132.7511 -7642, 67.84973, 117.4982 -7643, 67.26853, 130.8403 -7644, 68.45943, 125.5251 -7645, 67.22402, 115.863 -7646, 66.8748, 128.8302 -7647, 66.74881, 109.3304 -7648, 69.44453, 125.8588 -7649, 65.4609, 107.2491 -7650, 68.67207, 125.2769 -7651, 69.85604, 129.2856 -7652, 69.12214, 122.2752 -7653, 69.21372, 130.3915 -7654, 67.02625, 132.8653 -7655, 67.69648, 130.4108 -7656, 70.06564, 154.3757 -7657, 69.36177, 137.7144 -7658, 69.0855, 123.928 -7659, 68.21874, 127.1621 -7660, 68.60997, 126.3357 -7661, 66.55127, 114.9381 -7662, 68.71959, 118.2746 -7663, 68.58571, 122.5043 -7664, 69.08825, 120.3915 -7665, 66.85375, 98.47908 -7666, 68.56317, 131.2951 -7667, 66.72783, 116.8011 -7668, 66.73504, 131.919 -7669, 68.65369, 118.3939 -7670, 66.11318, 120.0249 -7671, 66.7098, 126.7391 -7672, 67.44065, 152.5009 -7673, 69.25731, 120.6596 -7674, 68.75465, 130.2 -7675, 70.94505, 138.8221 -7676, 67.77684, 136.6213 -7677, 66.24745, 105.4542 -7678, 62.64956, 130.3208 -7679, 67.42044, 129.5017 -7680, 64.44748, 112.1223 -7681, 67.88848, 107.7735 -7682, 70.5403, 142.2364 -7683, 70.31573, 130.1736 -7684, 67.8145, 133.648 -7685, 64.61064, 106.9745 -7686, 68.75828, 127.1369 -7687, 70.67508, 141.6155 -7688, 64.79201, 123.8881 -7689, 67.22238, 124.7274 -7690, 66.7514, 133.492 -7691, 69.90536, 140.1252 -7692, 71.96265, 135.2445 -7693, 65.42972, 129.5831 -7694, 66.60135, 120.7322 -7695, 66.4318, 133.7433 -7696, 66.34089, 104.3528 -7697, 69.96979, 140.0099 -7698, 71.64134, 120.8264 -7699, 66.24195, 115.9752 -7700, 68.69749, 117.0558 -7701, 67.15067, 129.4873 -7702, 71.9673, 133.6015 -7703, 68.5542, 126.6594 -7704, 67.05171, 122.6178 -7705, 67.50469, 132.9071 -7706, 68.78436, 125.2964 -7707, 67.07846, 114.7138 -7708, 65.46411, 131.4842 -7709, 69.49787, 123.4755 -7710, 64.67323, 120.1682 -7711, 69.32483, 134.088 -7712, 64.39847, 121.9653 -7713, 67.9694, 103.3546 -7714, 68.17004, 112.4828 -7715, 66.87249, 105.3961 -7716, 67.30874, 135.062 -7717, 68.26251, 132.1296 -7718, 65.36754, 127.2412 -7719, 68.94823, 125.0147 -7720, 67.50617, 113.585 -7721, 64.29247, 120.1023 -7722, 65.5634, 129.7442 -7723, 68.65306, 128.7635 -7724, 67.66637, 104.2348 -7725, 66.46271, 125.962 -7726, 69.61949, 138.3373 -7727, 70.151, 144.0366 -7728, 68.00747, 137.1058 -7729, 68.85235, 130.6387 -7730, 70.34804, 124.7815 -7731, 65.0196, 134.4502 -7732, 67.58782, 132.8462 -7733, 67.96341, 135.425 -7734, 64.23356, 124.1334 -7735, 71.82677, 143.9272 -7736, 68.40776, 124.9954 -7737, 72.92705, 155.452 -7738, 68.2634, 124.8133 -7739, 71.32032, 128.3211 -7740, 69.04566, 142.9052 -7741, 65.18871, 115.9 -7742, 66.94576, 121.9962 -7743, 69.21635, 136.23 -7744, 65.53434, 120.8577 -7745, 64.91416, 107.684 -7746, 66.40921, 104.361 -7747, 66.51021, 130.011 -7748, 68.98924, 127.6238 -7749, 70.39002, 142.0184 -7750, 67.27302, 134.5354 -7751, 68.27392, 124.1453 -7752, 66.13665, 125.066 -7753, 69.8415, 138.2726 -7754, 69.24298, 125.4025 -7755, 69.49259, 107.8487 -7756, 68.01659, 138.7248 -7757, 67.14071, 126.4965 -7758, 67.32799, 122.5994 -7759, 67.22067, 117.1647 -7760, 67.2075, 122.9325 -7761, 71.22072, 133.3385 -7762, 62.61388, 127.7046 -7763, 66.05642, 112.4733 -7764, 68.6259, 111.0985 -7765, 66.42125, 128.5118 -7766, 67.66226, 122.9677 -7767, 67.87257, 125.7629 -7768, 69.43314, 142.9565 -7769, 66.91873, 108.1239 -7770, 67.0773, 131.3885 -7771, 66.38627, 123.3667 -7772, 66.88154, 118.5143 -7773, 70.13999, 135.2062 -7774, 65.0467, 129.3282 -7775, 67.94255, 147.0635 -7776, 65.69521, 126.7902 -7777, 65.69631, 123.84 -7778, 68.06505, 118.6554 -7779, 65.57689, 127.0804 -7780, 69.51367, 137.4305 -7781, 68.01036, 132.4546 -7782, 65.97185, 113.2777 -7783, 68.50408, 117.6372 -7784, 68.6578, 125.8654 -7785, 64.90631, 128.857 -7786, 66.86878, 121.5519 -7787, 67.45601, 101.7983 -7788, 70.57507, 136.4959 -7789, 65.50493, 113.2549 -7790, 68.03809, 139.6333 -7791, 70.44638, 132.7411 -7792, 66.83931, 111.3947 -7793, 66.38356, 102.0057 -7794, 68.33698, 124.0644 -7795, 69.41356, 137.8685 -7796, 67.82728, 134.7202 -7797, 69.1966, 139.0328 -7798, 66.58126, 118.1128 -7799, 65.86804, 132.2918 -7800, 67.92387, 127.8828 -7801, 67.65969, 114.3964 -7802, 69.00849, 135.8661 -7803, 68.02905, 110.9974 -7804, 67.90776, 113.0832 -7805, 67.89813, 102.687 -7806, 70.78714, 159.3967 -7807, 66.32968, 129.7132 -7808, 71.20406, 141.4122 -7809, 67.87705, 129.9013 -7810, 65.94546, 116.2096 -7811, 69.87679, 126.6121 -7812, 65.79065, 114.8391 -7813, 70.22362, 130.9476 -7814, 68.85931, 117.224 -7815, 67.99466, 128.0368 -7816, 67.08757, 129.2199 -7817, 68.85889, 124.9153 -7818, 66.06887, 119.7681 -7819, 70.41331, 137.758 -7820, 68.26431, 124.0211 -7821, 70.00963, 125.9789 -7822, 65.69038, 125.507 -7823, 70.94803, 118.2146 -7824, 70.40454, 152.6344 -7825, 67.93137, 124.0016 -7826, 67.24148, 130.8507 -7827, 67.43967, 132.5789 -7828, 67.97769, 137.5606 -7829, 69.69329, 134.532 -7830, 68.88, 120.9022 -7831, 66.22857, 117.7639 -7832, 64.74463, 113.2767 -7833, 71.14304, 147.1355 -7834, 65.97479, 113.5152 -7835, 69.43298, 159.7844 -7836, 65.39464, 125.1913 -7837, 68.47642, 127.5662 -7838, 67.68893, 125.6505 -7839, 69.77827, 118.6649 -7840, 73.85521, 136.0667 -7841, 68.65677, 122.8314 -7842, 68.88401, 133.0347 -7843, 66.74014, 136.451 -7844, 68.04482, 126.3811 -7845, 64.85449, 114.2042 -7846, 67.03991, 120.3379 -7847, 65.56486, 119.8795 -7848, 68.13322, 134.1961 -7849, 65.6523, 125.6206 -7850, 72.22353, 138.8165 -7851, 67.93045, 126.3497 -7852, 70.43116, 135.7442 -7853, 68.08474, 138.0519 -7854, 69.8667, 126.1461 -7855, 68.70872, 120.9616 -7856, 68.58329, 139.8337 -7857, 66.67676, 122.2411 -7858, 69.96239, 129.7149 -7859, 66.29991, 137.1631 -7860, 65.76482, 104.5086 -7861, 69.11191, 135.7377 -7862, 66.87869, 111.5493 -7863, 67.36932, 147.7067 -7864, 69.93728, 150.4786 -7865, 69.81301, 133.0872 -7866, 66.56086, 140.7383 -7867, 70.95923, 130.441 -7868, 69.19946, 127.5606 -7869, 70.28687, 133.9221 -7870, 69.97118, 145.462 -7871, 69.9306, 133.8265 -7872, 67.23945, 126.2885 -7873, 67.2735, 117.1077 -7874, 66.48165, 128.5263 -7875, 68.44572, 120.2431 -7876, 66.89716, 114.7654 -7877, 65.29685, 132.424 -7878, 69.06524, 132.1972 -7879, 68.02311, 135.255 -7880, 70.02667, 113.9045 -7881, 65.82948, 117.297 -7882, 70.21039, 150.618 -7883, 68.55081, 143.2179 -7884, 66.17612, 132.1823 -7885, 67.36138, 134.9196 -7886, 69.98058, 122.1659 -7887, 65.49847, 122.904 -7888, 67.22664, 108.7074 -7889, 67.28114, 132.6449 -7890, 66.27424, 121.0436 -7891, 67.20346, 117.715 -7892, 69.96933, 133.341 -7893, 70.33173, 138.2921 -7894, 67.60168, 130.4579 -7895, 70.12592, 117.4415 -7896, 65.79449, 107.1855 -7897, 67.9113, 128.3023 -7898, 66.60677, 114.237 -7899, 66.36069, 116.3676 -7900, 69.37216, 124.5841 -7901, 69.08983, 131.53 -7902, 68.03826, 137.6548 -7903, 66.72346, 127.1615 -7904, 65.5982, 110.4732 -7905, 66.56595, 125.4882 -7906, 68.54091, 124.8483 -7907, 71.80497, 136.4508 -7908, 69.41584, 123.6033 -7909, 67.91457, 126.7841 -7910, 66.63057, 141.1367 -7911, 70.00844, 127.3606 -7912, 67.21345, 134.9724 -7913, 69.9974, 135.8397 -7914, 70.44321, 142.7681 -7915, 69.99219, 126.5143 -7916, 71.11277, 131.7103 -7917, 68.42954, 126.6811 -7918, 71.73402, 122.6931 -7919, 68.25089, 134.2315 -7920, 72.13361, 120.9306 -7921, 69.0911, 132.2909 -7922, 66.02501, 132.287 -7923, 65.3813, 126.1785 -7924, 67.27872, 118.2022 -7925, 68.98874, 126.4329 -7926, 68.9963, 120.3791 -7927, 66.75512, 103.6353 -7928, 66.09072, 112.3691 -7929, 68.70395, 119.6693 -7930, 64.72417, 106.3895 -7931, 69.53108, 120.2067 -7932, 71.32029, 156.5971 -7933, 69.25388, 132.4808 -7934, 70.01373, 132.0505 -7935, 72.0594, 148.9722 -7936, 68.49943, 128.9143 -7937, 67.20711, 109.9494 -7938, 67.4277, 121.8319 -7939, 67.38905, 136.4146 -7940, 68.81456, 154.4947 -7941, 65.56306, 116.8189 -7942, 68.86564, 123.4374 -7943, 67.63208, 128.5252 -7944, 63.64527, 114.5546 -7945, 69.12102, 142.8329 -7946, 70.19208, 124.5284 -7947, 68.62725, 109.5514 -7948, 68.58176, 137.4034 -7949, 66.78338, 119.4607 -7950, 67.68417, 122.7447 -7951, 68.79943, 143.4836 -7952, 66.72578, 116.2868 -7953, 67.68983, 120.3912 -7954, 67.24673, 117.8198 -7955, 70.80139, 131.9536 -7956, 69.81422, 128.8624 -7957, 67.41926, 118.315 -7958, 68.10832, 140.7132 -7959, 69.52176, 138.7414 -7960, 66.44673, 123.6693 -7961, 66.50938, 104.0396 -7962, 68.27624, 122.9904 -7963, 67.51054, 131.6367 -7964, 68.2331, 122.1745 -7965, 69.20004, 128.2344 -7966, 68.22569, 135.757 -7967, 69.67618, 116.2938 -7968, 69.15372, 134.0076 -7969, 67.44681, 127.5092 -7970, 71.4192, 145.7932 -7971, 66.01984, 141.9976 -7972, 67.5773, 127.9425 -7973, 64.49893, 140.2004 -7974, 70.19674, 126.914 -7975, 67.51149, 123.7364 -7976, 66.75836, 119.0958 -7977, 66.36645, 132.4222 -7978, 65.96947, 126.7739 -7979, 67.47588, 138.5358 -7980, 65.8521, 115.0837 -7981, 67.1238, 122.7868 -7982, 69.1103, 138.6654 -7983, 64.77536, 113.5556 -7984, 68.77562, 126.086 -7985, 69.56475, 128.952 -7986, 66.86676, 137.0564 -7987, 67.45183, 142.6514 -7988, 66.7056, 127.0386 -7989, 69.45967, 130.8347 -7990, 67.83848, 120.0967 -7991, 67.65053, 137.3509 -7992, 69.02638, 135.0166 -7993, 68.05329, 125.4398 -7994, 65.0137, 113.7752 -7995, 67.74935, 128.7894 -7996, 67.3018, 110.3175 -7997, 69.57329, 169.1268 -7998, 66.46916, 127.2647 -7999, 67.37618, 121.7823 -8000, 66.03128, 123.2914 -8001, 67.88652, 126.5258 -8002, 66.60311, 124.1856 -8003, 67.72857, 119.5459 -8004, 66.20895, 125.1912 -8005, 69.24463, 126.2716 -8006, 68.69724, 110.894 -8007, 66.70205, 120.3019 -8008, 71.16914, 135.0369 -8009, 65.43614, 152.6168 -8010, 67.25401, 130.5463 -8011, 68.05015, 123.7466 -8012, 70.48365, 134.9316 -8013, 69.03379, 129.6641 -8014, 65.4187, 118.1433 -8015, 68.94762, 136.9932 -8016, 68.75178, 107.7319 -8017, 69.54295, 135.5159 -8018, 66.34532, 123.7345 -8019, 69.9271, 146.4336 -8020, 66.65813, 127.9335 -8021, 68.55262, 123.4302 -8022, 65.96412, 122.5101 -8023, 69.48892, 119.1983 -8024, 66.3432, 137.1607 -8025, 68.28599, 123.3591 -8026, 68.39674, 126.1915 -8027, 65.75868, 111.5519 -8028, 68.36155, 133.9494 -8029, 69.21078, 134.4253 -8030, 67.22096, 114.8024 -8031, 68.65998, 124.7691 -8032, 68.44603, 110.3778 -8033, 70.35705, 125.9397 -8034, 71.52468, 137.9496 -8035, 67.94061, 141.0108 -8036, 70.04339, 127.3467 -8037, 64.54078, 130.1828 -8038, 66.18181, 127.6085 -8039, 68.11241, 124.1533 -8040, 69.5091, 151.7634 -8041, 71.46618, 135.5982 -8042, 67.79009, 131.2158 -8043, 64.8491, 121.2608 -8044, 66.50511, 137.4995 -8045, 70.0677, 144.6209 -8046, 69.80295, 116.8405 -8047, 70.14185, 131.8359 -8048, 67.22436, 133.605 -8049, 71.97836, 138.1052 -8050, 69.32003, 136.5839 -8051, 67.41409, 123.8328 -8052, 68.08026, 131.0779 -8053, 68.13257, 136.8494 -8054, 70.37547, 130.5691 -8055, 70.31686, 132.9542 -8056, 65.5543, 121.2351 -8057, 64.65127, 118.3996 -8058, 69.73363, 122.1652 -8059, 67.69405, 121.728 -8060, 70.20483, 118.4049 -8061, 64.46691, 120.621 -8062, 69.64553, 134.4838 -8063, 69.29407, 131.2404 -8064, 68.98608, 121.228 -8065, 67.32147, 110.6602 -8066, 69.65674, 134.4204 -8067, 69.91295, 148.5606 -8068, 70.938, 129.7384 -8069, 68.91523, 109.4881 -8070, 68.55359, 131.1947 -8071, 66.76524, 121.931 -8072, 70.89744, 138.8549 -8073, 73.09657, 134.9595 -8074, 69.22647, 145.0718 -8075, 63.65093, 116.5654 -8076, 66.46411, 129.734 -8077, 68.35474, 123.7944 -8078, 67.57134, 124.2097 -8079, 66.83183, 135.5006 -8080, 69.62922, 143.0166 -8081, 68.05903, 126.0365 -8082, 67.54296, 134.5517 -8083, 69.303, 116.7611 -8084, 67.38937, 128.9351 -8085, 71.45669, 134.6404 -8086, 68.49029, 128.3649 -8087, 65.84126, 125.7087 -8088, 69.25123, 133.4489 -8089, 64.51431, 103.0865 -8090, 67.82414, 127.065 -8091, 65.84897, 118.2251 -8092, 70.67116, 122.6757 -8093, 67.11351, 124.6458 -8094, 67.59487, 138.5996 -8095, 66.33295, 116.4343 -8096, 69.89298, 140.0236 -8097, 66.38557, 142.4689 -8098, 67.1027, 125.1139 -8099, 66.43884, 113.1903 -8100, 66.12177, 120.4629 -8101, 67.00531, 133.6411 -8102, 64.16307, 101.9669 -8103, 67.32597, 135.9051 -8104, 66.94272, 121.8755 -8105, 69.08751, 142.7891 -8106, 70.44232, 132.9498 -8107, 67.9102, 125.3998 -8108, 66.51569, 119.5183 -8109, 67.3862, 128.4407 -8110, 68.10423, 120.9619 -8111, 67.51842, 110.0212 -8112, 68.2832, 108.7627 -8113, 67.79292, 128.0636 -8114, 68.30939, 121.2109 -8115, 66.19976, 113.9021 -8116, 65.84849, 142.3934 -8117, 68.82083, 135.0981 -8118, 68.96333, 135.9867 -8119, 69.04066, 133.625 -8120, 64.90924, 123.5221 -8121, 64.53827, 121.1495 -8122, 71.75047, 139.379 -8123, 66.93045, 132.2175 -8124, 65.54236, 129.4864 -8125, 64.84131, 91.8085 -8126, 66.98431, 130.0474 -8127, 66.14261, 118.8111 -8128, 70.81757, 145.2176 -8129, 68.91444, 152.0833 -8130, 66.66634, 100.2743 -8131, 70.48203, 137.6556 -8132, 69.91213, 135.5083 -8133, 66.64902, 118.6405 -8134, 69.01354, 145.8844 -8135, 66.26097, 115.3104 -8136, 68.89543, 119.3074 -8137, 71.22325, 132.1547 -8138, 68.68597, 124.6849 -8139, 69.89911, 135.1557 -8140, 68.69947, 116.0361 -8141, 69.8535, 136.027 -8142, 63.44123, 112.1713 -8143, 64.11532, 133.1515 -8144, 71.75025, 132.088 -8145, 66.19729, 135.4905 -8146, 65.72997, 126.827 -8147, 72.16986, 137.5684 -8148, 66.48739, 127.293 -8149, 69.31215, 124.2118 -8150, 68.02947, 119.5556 -8151, 65.97774, 91.25752 -8152, 71.29851, 142.5115 -8153, 71.5143, 127.7847 -8154, 68.60076, 128.8566 -8155, 68.18368, 135.9276 -8156, 69.8811, 151.879 -8157, 67.93999, 132.0277 -8158, 69.80319, 123.1697 -8159, 65.19641, 117.6912 -8160, 67.8403, 127.0545 -8161, 68.50897, 137.9252 -8162, 65.14879, 115.1881 -8163, 66.95341, 120.6277 -8164, 68.25949, 136.41 -8165, 68.03615, 149.0647 -8166, 64.54579, 111.3072 -8167, 71.52318, 127.8014 -8168, 69.57994, 137.7495 -8169, 66.84427, 129.9887 -8170, 68.5828, 123.3208 -8171, 69.51119, 146.7832 -8172, 67.49702, 135.4823 -8173, 67.20475, 129.0149 -8174, 67.66461, 136.768 -8175, 70.03691, 122.5324 -8176, 68.89205, 118.0131 -8177, 68.85894, 135.317 -8178, 68.40447, 143.2456 -8179, 69.51754, 137.8977 -8180, 69.63896, 135.0191 -8181, 68.27563, 135.026 -8182, 65.59198, 122.9795 -8183, 64.35791, 120.4781 -8184, 67.63682, 135.534 -8185, 69.47515, 137.0927 -8186, 68.93408, 133.3871 -8187, 65.98502, 133.4505 -8188, 67.65672, 124.4906 -8189, 68.79529, 144.5481 -8190, 66.82439, 133.8378 -8191, 68.7321, 109.9033 -8192, 66.33945, 122.7443 -8193, 67.47277, 99.0744 -8194, 67.72698, 134.7996 -8195, 65.20132, 116.8893 -8196, 71.49103, 135.6049 -8197, 65.24026, 113.6473 -8198, 69.99307, 139.7899 -8199, 65.18268, 121.4679 -8200, 70.06241, 134.3005 -8201, 68.61652, 125.2 -8202, 68.15831, 124.9999 -8203, 63.48187, 117.5449 -8204, 71.29462, 142.6142 -8205, 70.11496, 143.9751 -8206, 68.83929, 141.5128 -8207, 70.15775, 113.8639 -8208, 69.59681, 133.7791 -8209, 65.83263, 122.5777 -8210, 71.32785, 135.4846 -8211, 68.20864, 143.309 -8212, 71.87288, 134.3715 -8213, 69.35277, 128.963 -8214, 67.94055, 142.3413 -8215, 69.71919, 138.7374 -8216, 64.67334, 113.3238 -8217, 65.33432, 118.6681 -8218, 67.46316, 144.152 -8219, 71.08038, 155.0439 -8220, 66.66043, 135.3184 -8221, 67.7645, 109.9437 -8222, 67.23122, 124.4395 -8223, 67.43133, 134.417 -8224, 69.74968, 130.7336 -8225, 68.14016, 128.6113 -8226, 68.9402, 133.3423 -8227, 69.35342, 136.4262 -8228, 69.8643, 140.5089 -8229, 69.31822, 136.0998 -8230, 65.9301, 105.284 -8231, 68.42378, 127.227 -8232, 65.94139, 120.6136 -8233, 68.18063, 115.003 -8234, 70.25983, 129.9544 -8235, 66.05596, 104.3081 -8236, 67.73703, 131.4725 -8237, 65.29545, 126.3612 -8238, 68.16479, 121.2363 -8239, 68.95501, 140.2805 -8240, 68.19061, 129.2682 -8241, 69.5707, 126.2858 -8242, 70.02356, 137.4431 -8243, 69.14845, 117.2798 -8244, 70.24309, 121.0725 -8245, 70.66018, 142.7478 -8246, 67.45148, 125.9385 -8247, 65.03584, 114.225 -8248, 70.45839, 133.1533 -8249, 67.11299, 120.7303 -8250, 68.24423, 137.3349 -8251, 66.7588, 105.3169 -8252, 68.7307, 116.3236 -8253, 63.45132, 118.147 -8254, 69.32305, 133.6457 -8255, 69.07258, 123.9537 -8256, 70.51044, 143.4905 -8257, 67.29369, 117.9183 -8258, 69.33952, 142.08 -8259, 67.33993, 136.4499 -8260, 66.34535, 120.6503 -8261, 64.39297, 125.5261 -8262, 66.67639, 113.1137 -8263, 72.36601, 134.7475 -8264, 68.24893, 111.0142 -8265, 65.53245, 122.3297 -8266, 67.60693, 130.4762 -8267, 68.68598, 124.5562 -8268, 68.61117, 129.6617 -8269, 70.92173, 141.8458 -8270, 69.31458, 123.953 -8271, 68.56604, 130.441 -8272, 68.63936, 127.0952 -8273, 66.36369, 136.0598 -8274, 68.99555, 114.0398 -8275, 67.46519, 122.2341 -8276, 67.80467, 123.7772 -8277, 71.52782, 116.7279 -8278, 72.49367, 154.5031 -8279, 66.60755, 123.1233 -8280, 71.07038, 138.9521 -8281, 66.33447, 150.3119 -8282, 71.17232, 129.6463 -8283, 69.03651, 138.4825 -8284, 69.34919, 137.7115 -8285, 68.05366, 126.4259 -8286, 71.4948, 132.8622 -8287, 69.06112, 115.3726 -8288, 68.23732, 110.6226 -8289, 67.93276, 120.392 -8290, 68.55485, 130.1554 -8291, 67.5741, 125.7973 -8292, 66.36239, 117.4231 -8293, 70.76127, 133.7229 -8294, 67.10716, 131.2588 -8295, 64.5143, 127.8143 -8296, 67.47838, 120.9216 -8297, 67.23335, 141.0636 -8298, 67.99254, 144.1656 -8299, 67.458, 121.6819 -8300, 66.80866, 121.3264 -8301, 66.09963, 124.8608 -8302, 66.12053, 124.1474 -8303, 64.70924, 130.2642 -8304, 69.01541, 119.7938 -8305, 67.46277, 137.7862 -8306, 71.60898, 137.8791 -8307, 69.08877, 130.997 -8308, 67.81669, 115.8327 -8309, 70.74181, 128.5074 -8310, 64.4356, 119.3601 -8311, 70.81481, 139.7362 -8312, 64.90712, 129.5891 -8313, 68.30316, 126.8148 -8314, 68.41201, 132.9198 -8315, 66.35212, 99.69835 -8316, 67.27049, 124.5827 -8317, 66.63726, 120.3137 -8318, 65.00921, 84.26295 -8319, 67.69319, 124.4028 -8320, 70.26676, 128.8174 -8321, 66.19211, 121.0948 -8322, 65.62693, 126.6962 -8323, 71.58993, 135.744 -8324, 68.54869, 108.706 -8325, 68.52266, 122.0975 -8326, 66.21562, 109.3178 -8327, 65.71102, 113.8038 -8328, 72.23909, 159.4608 -8329, 66.533, 139.0226 -8330, 67.42805, 125.9181 -8331, 64.33729, 123.4824 -8332, 68.29721, 140.0057 -8333, 69.15487, 128.4365 -8334, 69.50939, 132.4955 -8335, 65.75398, 112.9736 -8336, 67.22359, 155.7617 -8337, 66.0023, 116.0386 -8338, 67.83406, 115.5906 -8339, 71.42677, 138.3516 -8340, 68.93168, 112.8601 -8341, 68.26056, 133.5413 -8342, 65.24947, 112.2883 -8343, 66.60071, 137.7297 -8344, 69.48187, 122.6836 -8345, 66.24301, 108.3135 -8346, 65.05662, 139.3953 -8347, 69.89977, 119.9003 -8348, 69.30058, 149.1915 -8349, 72.0775, 127.4068 -8350, 65.99698, 118.3092 -8351, 68.87245, 135.0451 -8352, 68.64611, 120.4317 -8353, 67.65677, 131.041 -8354, 69.15197, 128.0926 -8355, 70.05894, 141.614 -8356, 71.40809, 135.1406 -8357, 69.03498, 147.5304 -8358, 66.53406, 104.5216 -8359, 67.71834, 124.1642 -8360, 67.63519, 130.3102 -8361, 66.43601, 120.5525 -8362, 68.15413, 117.8028 -8363, 68.81782, 124.0657 -8364, 70.69194, 140.2734 -8365, 66.05342, 124.0408 -8366, 72.41769, 143.68 -8367, 66.93146, 117.7358 -8368, 65.53734, 118.2815 -8369, 67.54175, 127.8454 -8370, 67.76318, 136.177 -8371, 66.14528, 113.1378 -8372, 66.70349, 117.5526 -8373, 65.09221, 133.8826 -8374, 68.49307, 131.2102 -8375, 65.16644, 94.21964 -8376, 67.50707, 127.7961 -8377, 65.76724, 100.2388 -8378, 67.14094, 124.5368 -8379, 67.34801, 139.8293 -8380, 68.64599, 129.0105 -8381, 69.94177, 125.379 -8382, 67.30477, 123.9033 -8383, 68.78142, 147.1507 -8384, 66.12327, 113.5479 -8385, 66.30368, 117.2405 -8386, 69.18567, 128.0275 -8387, 66.90853, 118.8067 -8388, 68.70313, 124.6767 -8389, 71.08677, 148.1246 -8390, 65.52597, 122.9936 -8391, 66.20537, 116.068 -8392, 66.6718, 107.6202 -8393, 68.72702, 137.0353 -8394, 66.7039, 120.6447 -8395, 64.89628, 118.8854 -8396, 68.21209, 129.5464 -8397, 70.50017, 134.0139 -8398, 66.65252, 127.2599 -8399, 68.51303, 135.6923 -8400, 68.45497, 142.98 -8401, 68.61334, 110.3751 -8402, 67.78067, 116.6516 -8403, 68.61734, 130.0152 -8404, 70.42853, 142.6604 -8405, 65.45001, 108.0995 -8406, 70.69777, 119.4805 -8407, 67.28034, 111.5318 -8408, 66.4768, 129.6186 -8409, 65.08921, 125.0064 -8410, 66.56312, 119.046 -8411, 65.84797, 129.5537 -8412, 69.45763, 133.2109 -8413, 70.28788, 144.2612 -8414, 65.38017, 131.5842 -8415, 66.49187, 90.16983 -8416, 67.43263, 135.136 -8417, 68.81347, 125.0421 -8418, 62.92771, 95.73883 -8419, 69.3757, 135.4546 -8420, 64.73432, 112.0029 -8421, 68.97699, 143.0838 -8422, 69.37021, 133.1309 -8423, 65.63449, 110.4167 -8424, 68.33529, 129.8376 -8425, 65.0522, 122.3385 -8426, 68.70485, 122.1685 -8427, 66.64719, 150.0087 -8428, 67.91847, 135.8583 -8429, 64.00018, 128.5779 -8430, 68.90973, 127.6864 -8431, 67.83403, 116.6157 -8432, 72.14918, 161.6214 -8433, 65.93135, 119.386 -8434, 66.35334, 121.8461 -8435, 68.14895, 130.6059 -8436, 65.85562, 124.2612 -8437, 65.85908, 126.2855 -8438, 67.61041, 111.3166 -8439, 67.74703, 131.1387 -8440, 67.43873, 118.814 -8441, 68.20254, 130.0191 -8442, 67.42837, 127.2159 -8443, 69.06903, 140.8074 -8444, 67.77306, 138.4305 -8445, 67.11898, 129.8077 -8446, 69.69668, 141.0015 -8447, 62.6775, 102.6498 -8448, 67.26069, 130.2661 -8449, 70.02024, 140.0166 -8450, 67.30077, 134.2776 -8451, 69.78242, 144.6739 -8452, 68.96031, 123.3616 -8453, 68.86806, 129.4534 -8454, 67.56025, 110.1402 -8455, 65.08546, 130.6182 -8456, 67.17754, 117.2168 -8457, 69.77675, 125.558 -8458, 69.57213, 137.4401 -8459, 69.81071, 132.9983 -8460, 69.44528, 112.1204 -8461, 69.4941, 140.3979 -8462, 67.71518, 133.3581 -8463, 71.37261, 123.5644 -8464, 67.94484, 111.4393 -8465, 71.28888, 134.7116 -8466, 68.26826, 128.6627 -8467, 68.89648, 127.3814 -8468, 67.72198, 123.9987 -8469, 69.5539, 126.974 -8470, 65.2832, 130.2877 -8471, 65.05616, 118.9465 -8472, 69.57506, 125.9928 -8473, 73.95409, 145.2695 -8474, 64.67156, 131.8694 -8475, 67.41711, 135.8198 -8476, 72.83837, 143.4551 -8477, 66.35943, 147.1762 -8478, 70.21614, 134.6977 -8479, 67.76837, 135.6669 -8480, 68.21712, 123.9896 -8481, 70.10091, 140.0683 -8482, 67.59479, 118.0146 -8483, 70.12489, 132.4516 -8484, 64.55975, 128.829 -8485, 69.18894, 142.5893 -8486, 64.18631, 108.3347 -8487, 67.82633, 139.2589 -8488, 67.78211, 112.3772 -8489, 68.12769, 115.3454 -8490, 66.9149, 122.5675 -8491, 69.55254, 107.2211 -8492, 67.09352, 114.081 -8493, 71.3619, 124.5166 -8494, 71.16679, 137.383 -8495, 69.36125, 133.1983 -8496, 65.62974, 116.7798 -8497, 67.50367, 153.339 -8498, 71.06365, 136.3467 -8499, 66.49246, 117.7597 -8500, 69.98023, 135.4338 -8501, 66.36915, 120.7832 -8502, 65.72799, 129.9118 -8503, 67.22453, 138.4072 -8504, 69.6795, 128.9191 -8505, 66.91326, 111.703 -8506, 68.26178, 128.2739 -8507, 64.98478, 119.1325 -8508, 68.0698, 104.76 -8509, 68.61422, 136.6399 -8510, 66.30294, 132.3913 -8511, 68.38352, 142.0639 -8512, 65.93684, 130.2864 -8513, 69.26443, 144.1251 -8514, 69.85744, 132.3308 -8515, 67.08825, 127.413 -8516, 63.19953, 106.8324 -8517, 72.94152, 125.7713 -8518, 70.37958, 151.8206 -8519, 66.63283, 118.6562 -8520, 72.50855, 141.1954 -8521, 71.36999, 125.1979 -8522, 68.75583, 138.7086 -8523, 69.62903, 120.2989 -8524, 68.16407, 117.9536 -8525, 66.83708, 122.0631 -8526, 70.18194, 156.4056 -8527, 67.86367, 114.9246 -8528, 71.10272, 130.4239 -8529, 73.58262, 141.6525 -8530, 68.32952, 134.7504 -8531, 66.44661, 121.6314 -8532, 67.18734, 118.6352 -8533, 67.49287, 122.4953 -8534, 66.38595, 119.4673 -8535, 67.25681, 121.2471 -8536, 69.31111, 136.4983 -8537, 68.14806, 117.3852 -8538, 68.12645, 115.4428 -8539, 66.38526, 135.9818 -8540, 67.65899, 127.3092 -8541, 69.58252, 114.6022 -8542, 67.4652, 125.8834 -8543, 66.54185, 121.2715 -8544, 67.20255, 143.0669 -8545, 67.9341, 106.4818 -8546, 64.97055, 113.4885 -8547, 69.56655, 133.0219 -8548, 70.30948, 141.6156 -8549, 69.61829, 138.6939 -8550, 65.59094, 104.0323 -8551, 67.8259, 119.8473 -8552, 68.03804, 119.9125 -8553, 68.19362, 125.7243 -8554, 68.25109, 115.4595 -8555, 68.43965, 121.7398 -8556, 66.34605, 150.4439 -8557, 68.58532, 138.1689 -8558, 68.55442, 141.2293 -8559, 71.03808, 129.7799 -8560, 64.47771, 122.9159 -8561, 64.58247, 122.8109 -8562, 70.13052, 117.7137 -8563, 64.90601, 125.232 -8564, 68.99646, 124.495 -8565, 67.61832, 115.7638 -8566, 69.63195, 140.8429 -8567, 66.05471, 111.8194 -8568, 71.32499, 127.1661 -8569, 67.85806, 138.4063 -8570, 69.45941, 135.9299 -8571, 66.64834, 127.7205 -8572, 64.97782, 110.4212 -8573, 67.87711, 122.438 -8574, 72.31294, 136.5598 -8575, 67.14057, 134.0436 -8576, 64.43728, 114.5911 -8577, 66.67002, 117.9921 -8578, 68.59476, 128.0073 -8579, 71.47766, 129.924 -8580, 68.63009, 125.5075 -8581, 67.6305, 120.5523 -8582, 70.06317, 126.4208 -8583, 67.44197, 123.631 -8584, 68.03318, 115.4171 -8585, 67.4692, 129.6403 -8586, 68.92912, 110.1478 -8587, 67.31979, 115.8672 -8588, 68.047, 133.8044 -8589, 67.90838, 136.5008 -8590, 69.6925, 124.0748 -8591, 68.62706, 130.6542 -8592, 68.84882, 148.3087 -8593, 66.59651, 123.5118 -8594, 68.15322, 133.3485 -8595, 68.66291, 110.1892 -8596, 69.21557, 124.0764 -8597, 67.36, 129.7241 -8598, 68.07738, 104.7027 -8599, 66.52751, 134.1397 -8600, 70.42237, 136.6591 -8601, 67.07823, 132.8673 -8602, 66.43387, 126.4911 -8603, 67.98753, 114.7128 -8604, 71.27188, 158.4771 -8605, 68.04701, 123.3098 -8606, 72.61099, 142.6713 -8607, 64.68513, 115.842 -8608, 68.43352, 97.83008 -8609, 67.27211, 125.707 -8610, 68.75891, 138.2249 -8611, 68.49528, 116.3683 -8612, 69.2542, 151.8387 -8613, 68.77305, 127.9952 -8614, 65.17589, 111.4943 -8615, 68.21604, 119.0602 -8616, 67.30043, 120.3285 -8617, 67.86067, 115.128 -8618, 66.00059, 120.3097 -8619, 66.6625, 120.4223 -8620, 67.60112, 129.1886 -8621, 69.01782, 125.8767 -8622, 65.7622, 111.3564 -8623, 66.63706, 127.3243 -8624, 68.11546, 130.3186 -8625, 66.70442, 127.4867 -8626, 70.22831, 144.6741 -8627, 66.28448, 126.7203 -8628, 71.60477, 141.1438 -8629, 68.82431, 135.5828 -8630, 69.98686, 138.3058 -8631, 68.30179, 129.9339 -8632, 66.6512, 119.0595 -8633, 63.50812, 129.557 -8634, 69.5967, 136.7802 -8635, 64.89411, 124.4031 -8636, 67.67866, 129.976 -8637, 66.70638, 116.4489 -8638, 67.10993, 102.8583 -8639, 69.90802, 140.878 -8640, 67.71135, 122.7092 -8641, 67.5598, 119.3298 -8642, 64.20492, 103.6839 -8643, 71.00101, 135.5008 -8644, 68.81199, 109.4734 -8645, 67.94764, 108.1062 -8646, 68.21642, 131.4376 -8647, 66.17682, 125.3836 -8648, 68.69922, 144.3117 -8649, 68.70501, 109.3633 -8650, 69.61334, 125.4205 -8651, 69.75186, 122.5754 -8652, 71.46053, 148.6212 -8653, 69.36257, 111.1764 -8654, 67.40368, 109.3832 -8655, 69.81058, 119.4349 -8656, 70.47149, 140.3522 -8657, 66.7402, 143.1496 -8658, 63.91222, 105.8021 -8659, 67.8694, 136.8885 -8660, 66.84936, 116.9535 -8661, 66.07377, 115.9419 -8662, 68.48646, 133.3074 -8663, 71.77202, 141.7503 -8664, 67.55856, 137.7559 -8665, 66.28302, 134.3729 -8666, 68.43875, 119.3438 -8667, 67.07508, 115.6909 -8668, 70.60636, 122.1442 -8669, 68.8942, 135.3984 -8670, 69.88244, 134.3577 -8671, 68.93627, 138.0941 -8672, 65.14713, 117.9849 -8673, 68.68398, 136.8724 -8674, 67.56665, 117.9312 -8675, 68.73881, 145.8697 -8676, 68.96333, 119.0578 -8677, 68.5465, 121.7189 -8678, 67.85396, 121.6697 -8679, 64.96046, 127.6795 -8680, 68.58674, 129.2295 -8681, 67.92544, 110.8076 -8682, 69.3629, 118.6172 -8683, 70.90905, 146.5188 -8684, 69.28772, 132.6966 -8685, 69.06553, 119.9738 -8686, 66.60716, 109.856 -8687, 69.19515, 118.2264 -8688, 69.42865, 128.6528 -8689, 70.09399, 127.3597 -8690, 64.50077, 103.3027 -8691, 65.72099, 115.9257 -8692, 66.05702, 112.889 -8693, 62.40403, 118.5959 -8694, 72.90965, 148.6113 -8695, 66.22193, 131.9039 -8696, 65.97161, 129.6126 -8697, 67.82515, 122.1707 -8698, 71.16689, 152.1123 -8699, 65.46284, 101.8952 -8700, 68.92267, 144.0831 -8701, 68.57821, 137.295 -8702, 68.53972, 141.0431 -8703, 66.17685, 131.7326 -8704, 70.90225, 143.3108 -8705, 69.42553, 114.8461 -8706, 67.5235, 107.4208 -8707, 67.09865, 110.2544 -8708, 66.84169, 121.8217 -8709, 67.80772, 126.529 -8710, 67.14173, 121.3218 -8711, 70.57017, 137.4274 -8712, 65.05533, 125.8786 -8713, 70.03645, 139.6533 -8714, 66.21546, 118.4718 -8715, 63.142, 127.3112 -8716, 64.01004, 105.3351 -8717, 69.0029, 124.9629 -8718, 65.635, 105.3681 -8719, 68.59588, 121.1566 -8720, 68.8021, 142.3453 -8721, 69.03779, 122.1038 -8722, 67.04484, 116.5428 -8723, 66.03639, 117.0908 -8724, 69.62664, 127.3049 -8725, 67.3924, 113.4762 -8726, 71.00376, 134.5287 -8727, 67.93633, 114.9908 -8728, 68.63648, 129.2673 -8729, 68.62805, 126.3473 -8730, 67.83335, 142.6824 -8731, 67.39028, 122.0253 -8732, 68.46455, 114.5964 -8733, 70.16762, 123.31 -8734, 68.79997, 144.323 -8735, 68.04005, 117.5716 -8736, 68.0575, 144.1516 -8737, 69.66688, 128.3014 -8738, 67.88892, 138.9831 -8739, 69.43039, 128.4548 -8740, 68.70589, 151.2938 -8741, 66.73086, 116.8306 -8742, 69.36545, 128.6177 -8743, 68.02714, 145.0769 -8744, 65.88695, 111.8354 -8745, 68.57752, 146.3214 -8746, 67.04267, 116.0189 -8747, 69.64171, 135.2526 -8748, 69.28691, 124.1958 -8749, 68.2993, 122.8095 -8750, 66.59117, 112.9433 -8751, 66.00152, 119.4182 -8752, 69.62369, 135.4419 -8753, 70.40944, 160.9728 -8754, 68.23792, 132.3743 -8755, 71.33673, 144.0178 -8756, 68.26044, 128.1884 -8757, 65.19386, 118.5785 -8758, 64.97013, 128.0257 -8759, 65.48129, 117.1136 -8760, 70.81532, 136.8483 -8761, 69.65288, 132.9662 -8762, 70.7431, 124.3004 -8763, 66.577, 132.3608 -8764, 68.31897, 108.4509 -8765, 69.58153, 136.53 -8766, 70.24671, 121.6743 -8767, 69.53121, 126.6608 -8768, 71.23578, 121.6717 -8769, 66.48996, 115.6813 -8770, 67.1513, 130.6168 -8771, 69.49518, 131.1111 -8772, 65.40644, 123.0377 -8773, 68.65428, 134.1447 -8774, 65.08665, 120.4446 -8775, 70.78233, 122.2947 -8776, 62.42388, 113.2646 -8777, 66.71211, 116.8734 -8778, 69.29174, 117.5564 -8779, 63.91813, 114.1919 -8780, 65.76518, 117.0031 -8781, 70.68956, 135.662 -8782, 69.1483, 139.0431 -8783, 71.15854, 131.258 -8784, 66.39543, 116.2256 -8785, 69.95913, 132.8145 -8786, 68.85974, 134.8338 -8787, 70.30886, 134.2011 -8788, 66.47109, 113.7779 -8789, 67.99054, 138.8971 -8790, 67.72173, 136.0789 -8791, 67.42949, 135.9047 -8792, 65.98761, 110.2969 -8793, 68.0763, 117.3088 -8794, 67.58576, 113.3246 -8795, 67.71976, 97.61996 -8796, 65.7482, 99.90975 -8797, 69.3897, 133.682 -8798, 66.36935, 129.6092 -8799, 69.79204, 140.811 -8800, 67.75389, 126.4157 -8801, 70.21143, 131.9105 -8802, 68.67792, 122.0728 -8803, 71.14142, 130.5105 -8804, 66.40101, 130.5867 -8805, 67.0502, 143.097 -8806, 66.77997, 117.1269 -8807, 64.5675, 100.9 -8808, 66.79296, 116.9012 -8809, 69.70535, 119.1882 -8810, 67.51715, 133.8952 -8811, 66.77383, 112.0133 -8812, 69.09905, 132.1341 -8813, 67.74778, 117.103 -8814, 67.68924, 111.3426 -8815, 65.58171, 115.5257 -8816, 69.80522, 139.7323 -8817, 67.47119, 141.2489 -8818, 65.65515, 131.7992 -8819, 67.37904, 112.7464 -8820, 69.71522, 125.2627 -8821, 68.11911, 114.1017 -8822, 68.59547, 117.342 -8823, 66.91329, 119.7384 -8824, 72.74978, 139.9267 -8825, 67.06735, 124.2893 -8826, 71.35418, 132.9339 -8827, 67.5378, 129.0482 -8828, 68.37558, 125.9097 -8829, 74.2727, 144.66 -8830, 68.70571, 132.7107 -8831, 67.62161, 132.7596 -8832, 68.57034, 125.0608 -8833, 67.58944, 131.7524 -8834, 64.2441, 112.828 -8835, 72.21166, 122.8259 -8836, 68.45109, 112.7446 -8837, 65.7402, 117.7157 -8838, 67.53807, 118.2423 -8839, 69.22881, 125.0318 -8840, 69.15576, 131.5739 -8841, 67.69635, 125.4574 -8842, 68.38781, 120.6513 -8843, 71.73727, 140.9432 -8844, 66.9098, 127.8661 -8845, 70.38323, 152.929 -8846, 69.616, 135.0082 -8847, 65.52145, 113.0211 -8848, 69.55694, 136.8874 -8849, 65.82438, 121.7984 -8850, 69.7416, 135.4599 -8851, 67.47711, 115.5446 -8852, 68.09913, 124.585 -8853, 68.20718, 122.9659 -8854, 68.15528, 129.7591 -8855, 67.63533, 121.6332 -8856, 70.15607, 144.7042 -8857, 64.91503, 114.1893 -8858, 69.0054, 119.5523 -8859, 68.26633, 126.4766 -8860, 68.81612, 140.2813 -8861, 67.72767, 134.104 -8862, 66.56438, 132.7397 -8863, 68.46206, 133.381 -8864, 69.6475, 146.482 -8865, 62.35553, 102.9535 -8866, 67.59977, 125.9471 -8867, 67.51383, 129.5542 -8868, 66.45122, 108.2905 -8869, 70.00417, 140.7597 -8870, 65.68838, 119.2997 -8871, 67.84561, 142.0715 -8872, 70.29979, 138.4229 -8873, 67.12263, 136.7691 -8874, 70.32632, 127.1832 -8875, 67.38624, 143.2195 -8876, 67.12831, 130.1144 -8877, 69.37649, 135.3031 -8878, 68.40369, 144.1206 -8879, 65.88697, 128.0762 -8880, 66.24954, 102.3152 -8881, 66.20872, 121.6419 -8882, 65.47065, 120.9183 -8883, 70.80619, 130.7321 -8884, 69.68347, 120.7878 -8885, 68.57948, 111.95 -8886, 66.70391, 125.3796 -8887, 66.30788, 114.9262 -8888, 69.067, 129.1566 -8889, 65.69589, 125.6365 -8890, 67.3335, 128.6592 -8891, 67.26527, 115.5412 -8892, 65.87646, 136.2664 -8893, 68.78703, 133.1355 -8894, 68.46685, 133.7184 -8895, 68.17238, 123.3582 -8896, 68.00351, 129.994 -8897, 66.43891, 119.1959 -8898, 63.11944, 114.2425 -8899, 66.48446, 134.239 -8900, 66.55759, 108.1273 -8901, 68.58831, 141.7279 -8902, 65.54854, 128.616 -8903, 71.75568, 121.5435 -8904, 70.01805, 131.2352 -8905, 69.30459, 129.3077 -8906, 64.5266, 109.4324 -8907, 67.82493, 110.6918 -8908, 69.30746, 129.188 -8909, 67.17495, 123.1006 -8910, 67.19047, 111.219 -8911, 65.90544, 115.406 -8912, 67.25979, 131.1541 -8913, 66.3908, 118.4527 -8914, 67.37297, 113.7344 -8915, 70.31688, 134.466 -8916, 66.97896, 103.6181 -8917, 71.16515, 136.0685 -8918, 66.52982, 123.7617 -8919, 70.51065, 135.3067 -8920, 66.86786, 123.6055 -8921, 66.87611, 93.44279 -8922, 69.98701, 124.1901 -8923, 66.47468, 119.4661 -8924, 68.24878, 143.1334 -8925, 64.20728, 115.7541 -8926, 66.79236, 122.1444 -8927, 67.78383, 115.3515 -8928, 67.66018, 131.4295 -8929, 67.83249, 114.4112 -8930, 68.97089, 128.8479 -8931, 68.67746, 130.8949 -8932, 65.63126, 139.7057 -8933, 69.17205, 132.7823 -8934, 66.06605, 118.503 -8935, 67.93043, 132.0073 -8936, 68.33555, 137.7148 -8937, 69.22538, 145.6323 -8938, 69.05205, 140.8625 -8939, 71.78468, 148.0053 -8940, 68.63056, 140.2105 -8941, 67.25523, 112.3407 -8942, 70.44291, 124 -8943, 69.02526, 107.2311 -8944, 68.81653, 108.159 -8945, 69.4793, 123.016 -8946, 65.28886, 114.7259 -8947, 70.23626, 141.6617 -8948, 68.90008, 143.8243 -8949, 65.76153, 132.5244 -8950, 64.57852, 104.3304 -8951, 67.14474, 123.891 -8952, 65.21882, 105.491 -8953, 67.25521, 126.629 -8954, 67.25235, 137.5721 -8955, 65.77614, 132.6912 -8956, 62.6827, 96.03438 -8957, 70.0801, 137.082 -8958, 69.05895, 144.3368 -8959, 69.86644, 122.0803 -8960, 67.76916, 131.7569 -8961, 68.01168, 125.3418 -8962, 66.68649, 137.3589 -8963, 65.92248, 118.8738 -8964, 65.33207, 108.8749 -8965, 67.42605, 121.8715 -8966, 69.36554, 128.6365 -8967, 67.40751, 138.2898 -8968, 66.57351, 140.3651 -8969, 67.17337, 121.0826 -8970, 68.99306, 154.9503 -8971, 64.54104, 122.436 -8972, 67.54151, 117.6445 -8973, 68.58505, 127.7326 -8974, 71.98814, 137.2838 -8975, 67.65459, 154.9403 -8976, 67.6661, 130.5926 -8977, 66.14316, 134.4043 -8978, 66.40155, 140.8314 -8979, 67.07434, 137.5925 -8980, 68.20422, 135.581 -8981, 70.48362, 139.2976 -8982, 68.67658, 134.969 -8983, 67.74427, 124.1332 -8984, 69.67541, 132.6086 -8985, 68.39295, 142.5965 -8986, 63.70222, 109.7699 -8987, 66.64859, 108.9945 -8988, 67.90407, 124.9492 -8989, 66.5197, 111.722 -8990, 66.54521, 133.7914 -8991, 71.96799, 144.5037 -8992, 67.20094, 147.7364 -8993, 68.71458, 118.739 -8994, 63.79579, 113.0481 -8995, 66.9737, 122.7246 -8996, 69.76872, 127.523 -8997, 67.94033, 126.2715 -8998, 69.44812, 126.0498 -8999, 68.05029, 120.1885 -9000, 68.01797, 133.8531 -9001, 64.38451, 120.9878 -9002, 65.25758, 104.4308 -9003, 70.47138, 138.5686 -9004, 68.16951, 136.5314 -9005, 65.04024, 117.8342 -9006, 66.39263, 137.6273 -9007, 67.60452, 139.128 -9008, 67.84567, 128.5574 -9009, 68.50322, 129.6116 -9010, 69.52893, 132.6006 -9011, 68.12778, 112.1998 -9012, 67.38512, 128.4802 -9013, 65.6983, 108.4186 -9014, 68.53813, 124.2629 -9015, 67.344, 115.9541 -9016, 70.01961, 138.2804 -9017, 67.40743, 130.7949 -9018, 70.17944, 141.0758 -9019, 66.51343, 128.4216 -9020, 67.26656, 125.9014 -9021, 66.31374, 111.5275 -9022, 68.44896, 123.68 -9023, 69.27778, 129.0046 -9024, 64.42384, 129.7849 -9025, 66.70168, 130.5984 -9026, 69.24707, 115.7079 -9027, 66.28284, 114.6304 -9028, 69.63326, 124.6271 -9029, 71.70174, 132.1551 -9030, 66.93376, 131.3089 -9031, 67.21461, 138.1399 -9032, 67.3223, 118.8846 -9033, 68.78724, 120.7674 -9034, 70.04804, 142.6447 -9035, 67.87706, 143.2935 -9036, 67.02932, 125.1984 -9037, 69.64922, 154.6918 -9038, 71.22213, 122.1485 -9039, 69.66832, 127.8876 -9040, 67.96253, 127.4414 -9041, 67.00064, 113.6904 -9042, 70.48193, 129.2246 -9043, 68.55545, 125.4016 -9044, 68.7117, 149.996 -9045, 67.31232, 129.0666 -9046, 70.2357, 130.3049 -9047, 69.62229, 134.6101 -9048, 66.48154, 137.9908 -9049, 67.07917, 133.1644 -9050, 69.67002, 140.8713 -9051, 69.14091, 141.8583 -9052, 67.16885, 121.6772 -9053, 68.66029, 123.5929 -9054, 70.01551, 129.615 -9055, 65.91776, 121.563 -9056, 68.37937, 131.1613 -9057, 72.03353, 116.3468 -9058, 67.4263, 143.0452 -9059, 66.83514, 104.2224 -9060, 70.8882, 133.5063 -9061, 71.09886, 134.4454 -9062, 68.28929, 130.8796 -9063, 67.42232, 124.5761 -9064, 68.77046, 110.9432 -9065, 66.44097, 107.1578 -9066, 66.90499, 120.1547 -9067, 67.74564, 134.8147 -9068, 69.8243, 128.6697 -9069, 68.53948, 137.0614 -9070, 67.01536, 123.0206 -9071, 68.72506, 124.6451 -9072, 68.35119, 133.4171 -9073, 67.19257, 129.0612 -9074, 69.5455, 133.8347 -9075, 68.59743, 132.2555 -9076, 67.24215, 119.4882 -9077, 66.65525, 129.5077 -9078, 64.90589, 136.4502 -9079, 69.23991, 127.3088 -9080, 68.56348, 111.6024 -9081, 66.34211, 114.1735 -9082, 70.38965, 111.2858 -9083, 69.41526, 138.7516 -9084, 69.27737, 111.6005 -9085, 68.38301, 134.017 -9086, 67.157, 124.2264 -9087, 68.20503, 113.3739 -9088, 68.72586, 131.5592 -9089, 66.96037, 125.1157 -9090, 66.66717, 124.2017 -9091, 70.07603, 139.5844 -9092, 70.51629, 136.3324 -9093, 71.54106, 126.4717 -9094, 67.50481, 141.2498 -9095, 69.15991, 113.6123 -9096, 67.90658, 132.8133 -9097, 68.82477, 120.2753 -9098, 69.78004, 123.8703 -9099, 68.44619, 138.1636 -9100, 69.39772, 118.0079 -9101, 67.30346, 141.5997 -9102, 65.66713, 128.864 -9103, 67.33725, 124.8425 -9104, 67.00093, 128.6654 -9105, 65.45347, 108.3017 -9106, 66.65036, 116.8012 -9107, 66.62187, 120.3299 -9108, 71.06319, 131.0404 -9109, 66.53966, 119.8203 -9110, 66.05713, 113.8325 -9111, 64.81538, 123.0207 -9112, 67.82121, 124.0312 -9113, 69.91442, 131.4753 -9114, 67.20148, 119.7628 -9115, 69.57829, 133.2355 -9116, 69.56702, 143.8267 -9117, 67.25014, 127.6431 -9118, 66.31447, 106.2018 -9119, 69.82058, 110.6276 -9120, 64.68698, 117.9638 -9121, 68.52069, 142.1197 -9122, 68.05361, 137.0546 -9123, 63.88492, 122.967 -9124, 65.87122, 135.4564 -9125, 67.28386, 141.0113 -9126, 68.7451, 145.1448 -9127, 71.78732, 127.6009 -9128, 71.89347, 142.8591 -9129, 71.21521, 140.5748 -9130, 68.63924, 121.7655 -9131, 67.20198, 127.4781 -9132, 68.42171, 116.4237 -9133, 66.21571, 132.8434 -9134, 65.69602, 114.2603 -9135, 64.39471, 108.8848 -9136, 68.13221, 126.5235 -9137, 69.95789, 157.8629 -9138, 66.17437, 124.0197 -9139, 67.3027, 108.836 -9140, 67.12352, 139.5505 -9141, 66.13041, 114.8118 -9142, 66.76283, 132.985 -9143, 69.81734, 140.8902 -9144, 67.50491, 126.0354 -9145, 67.77868, 132.7541 -9146, 67.09294, 134.424 -9147, 69.02064, 139.6542 -9148, 68.37429, 127.5258 -9149, 64.61585, 131.0972 -9150, 65.50846, 146.5505 -9151, 68.56092, 114.3385 -9152, 69.29465, 137.8696 -9153, 67.29291, 135.6857 -9154, 67.10227, 117.0417 -9155, 66.23273, 128.5774 -9156, 68.91376, 140.9367 -9157, 66.75178, 132.2723 -9158, 67.13916, 111.5926 -9159, 66.25471, 126.3462 -9160, 69.74556, 153.9188 -9161, 66.34128, 128.7754 -9162, 69.83341, 108.9893 -9163, 69.86248, 137.0186 -9164, 70.28256, 118.5086 -9165, 67.07699, 130.1395 -9166, 68.18059, 123.6302 -9167, 67.59916, 128.1213 -9168, 68.02776, 140.8584 -9169, 68.42296, 121.4696 -9170, 66.75944, 112.3085 -9171, 68.53352, 124.2808 -9172, 65.2651, 110.8564 -9173, 66.58553, 122.2553 -9174, 69.2084, 130.033 -9175, 66.78219, 103.0118 -9176, 69.73097, 129.0492 -9177, 69.25719, 123.1632 -9178, 68.57908, 114.3083 -9179, 68.38491, 130.869 -9180, 67.35514, 119.3197 -9181, 70.08283, 124.9148 -9182, 69.17193, 140.6591 -9183, 70.74539, 125.966 -9184, 65.88537, 138.3547 -9185, 66.18373, 113.7313 -9186, 64.9891, 120.7808 -9187, 70.07851, 129.7672 -9188, 67.47051, 123.0945 -9189, 71.44337, 130.4157 -9190, 69.28932, 137.6776 -9191, 68.75846, 127.091 -9192, 67.99864, 135.3502 -9193, 66.76007, 111.1036 -9194, 71.10275, 126.991 -9195, 68.84929, 133.7133 -9196, 66.71258, 125.7664 -9197, 69.69606, 131.6194 -9198, 68.21523, 137.7177 -9199, 69.19788, 125.6089 -9200, 65.99751, 120.2086 -9201, 67.06344, 119.1764 -9202, 70.38879, 148.7394 -9203, 66.85526, 130.9888 -9204, 65.49447, 116.2783 -9205, 66.4933, 131.4317 -9206, 69.64591, 135.8083 -9207, 66.6031, 120.0463 -9208, 65.5028, 110.0927 -9209, 70.68042, 145.9 -9210, 68.35984, 115.3059 -9211, 69.67952, 138.7123 -9212, 67.28637, 138.2075 -9213, 64.24975, 131.6321 -9214, 69.59961, 152.9562 -9215, 67.2586, 136.0419 -9216, 65.07024, 110.1766 -9217, 69.32643, 131.1248 -9218, 65.74804, 114.0431 -9219, 67.8373, 124.0473 -9220, 67.68655, 124.5785 -9221, 69.93319, 129.2833 -9222, 66.7117, 111.267 -9223, 71.46877, 126.8355 -9224, 69.23864, 119.7615 -9225, 66.93836, 119.0544 -9226, 73.75335, 153.1022 -9227, 68.52941, 129.8379 -9228, 65.84612, 127.4989 -9229, 69.14293, 130.5126 -9230, 68.50756, 128.4389 -9231, 68.80941, 150.2088 -9232, 68.28658, 116.4148 -9233, 66.0851, 122.6038 -9234, 66.76815, 124.7948 -9235, 68.41582, 127.8615 -9236, 67.86012, 138.798 -9237, 66.49326, 128.5167 -9238, 70.05556, 145.7431 -9239, 71.51172, 128.1476 -9240, 69.63168, 160.4111 -9241, 67.31178, 106.3544 -9242, 65.9605, 126.6596 -9243, 68.69762, 139.7047 -9244, 70.5427, 147.6912 -9245, 65.2308, 116.3007 -9246, 65.7164, 94.98665 -9247, 66.6851, 123.8638 -9248, 68.30596, 108.0676 -9249, 70.06674, 130.9781 -9250, 67.06764, 131.5991 -9251, 68.67723, 126.1419 -9252, 66.56482, 118.4916 -9253, 67.928, 139.2513 -9254, 67.81441, 123.6647 -9255, 68.05175, 133.8927 -9256, 65.16729, 121.1432 -9257, 68.4387, 128.4782 -9258, 69.90595, 133.594 -9259, 67.5131, 131.9657 -9260, 70.55747, 143.9102 -9261, 67.50352, 125.0155 -9262, 70.8343, 144.4515 -9263, 67.17439, 129.7009 -9264, 68.23162, 132.8397 -9265, 68.84891, 141.2839 -9266, 66.06507, 118.4233 -9267, 67.96066, 124.5333 -9268, 64.42169, 119.2322 -9269, 68.9783, 145.197 -9270, 68.86452, 133.6579 -9271, 67.51935, 123.6148 -9272, 70.8742, 127.9931 -9273, 65.63908, 125.7235 -9274, 72.06149, 147.5819 -9275, 70.74003, 147.7738 -9276, 69.53497, 141.9338 -9277, 66.04415, 121.9856 -9278, 67.75988, 140.1278 -9279, 67.28678, 131.5009 -9280, 66.58203, 122.171 -9281, 67.00829, 127.8757 -9282, 67.14315, 114.6482 -9283, 69.52981, 128.8579 -9284, 69.01236, 146.6218 -9285, 67.53657, 100.154 -9286, 68.06545, 141.5315 -9287, 69.27853, 143.8148 -9288, 68.96647, 136.0886 -9289, 68.75452, 129.4726 -9290, 67.32854, 107.9528 -9291, 69.0599, 131.2881 -9292, 69.76801, 132.0979 -9293, 72.03679, 138.0884 -9294, 64.54425, 115.9595 -9295, 63.63284, 107.2702 -9296, 70.94818, 149.7548 -9297, 62.91288, 109.2128 -9298, 69.4062, 124.5456 -9299, 65.4398, 136.8947 -9300, 67.05728, 122.9843 -9301, 66.18541, 121.9805 -9302, 66.90237, 139.8915 -9303, 66.41367, 109.0311 -9304, 67.67042, 123.1408 -9305, 67.70967, 131.7281 -9306, 66.69404, 126.8929 -9307, 69.5217, 126.8198 -9308, 68.20773, 119.5053 -9309, 67.99821, 127.458 -9310, 68.00746, 119.2101 -9311, 68.09824, 143.5727 -9312, 68.93312, 143.0937 -9313, 69.78307, 139.0177 -9314, 65.81071, 114.1338 -9315, 69.96713, 125.4353 -9316, 67.5085, 127.8424 -9317, 69.09305, 140.226 -9318, 72.36277, 135.6763 -9319, 67.6456, 123.0015 -9320, 69.46842, 119.0737 -9321, 66.77116, 129.5425 -9322, 70.23323, 135.7363 -9323, 69.55395, 139.2316 -9324, 69.35355, 128.9771 -9325, 67.2451, 130.0655 -9326, 64.77727, 143.251 -9327, 66.30059, 112.3781 -9328, 66.75624, 125.1407 -9329, 65.73325, 134.9375 -9330, 68.08852, 111.6419 -9331, 71.55699, 141.6861 -9332, 67.38427, 122.8404 -9333, 64.15481, 101.7546 -9334, 68.50089, 121.5853 -9335, 69.27158, 135.7448 -9336, 68.52587, 131.2739 -9337, 66.81053, 127.0045 -9338, 70.0217, 132.9266 -9339, 70.44212, 135.0743 -9340, 70.35346, 118.347 -9341, 65.94226, 136.2054 -9342, 67.49783, 121.6583 -9343, 68.00099, 127.1241 -9344, 65.48962, 99.76843 -9345, 66.86327, 124.5651 -9346, 69.4656, 131.2397 -9347, 67.40982, 113.6502 -9348, 65.75113, 117.6909 -9349, 69.07002, 130.5795 -9350, 69.3032, 128.7739 -9351, 67.27013, 136.5165 -9352, 68.29642, 132.8802 -9353, 65.5358, 108.0334 -9354, 67.22288, 138.325 -9355, 69.02293, 143.8474 -9356, 66.69251, 130.6489 -9357, 66.50669, 131.5283 -9358, 67.98874, 146.0239 -9359, 66.65476, 125.3253 -9360, 69.12208, 129.0318 -9361, 71.02363, 144.1068 -9362, 66.46702, 119.3847 -9363, 69.03081, 134.2694 -9364, 65.9942, 128.0366 -9365, 66.54171, 133.9323 -9366, 65.91998, 135.6308 -9367, 70.59103, 134.1319 -9368, 65.78822, 134.2213 -9369, 69.91804, 119.5102 -9370, 64.2992, 126.3063 -9371, 66.42226, 113.4779 -9372, 68.74988, 136.8669 -9373, 67.99798, 118.1315 -9374, 64.60634, 122.632 -9375, 67.88746, 119.0272 -9376, 66.81948, 125.9408 -9377, 69.06944, 159.9584 -9378, 65.65385, 129.1825 -9379, 66.2017, 114.629 -9380, 68.94276, 135.2118 -9381, 68.3649, 119.517 -9382, 67.18992, 127.9725 -9383, 66.68348, 119.6796 -9384, 67.43443, 120.3906 -9385, 67.21497, 119.7199 -9386, 68.45993, 121.1754 -9387, 63.64325, 117.4774 -9388, 67.53521, 146.869 -9389, 69.70037, 128.112 -9390, 68.29865, 122.6236 -9391, 67.97567, 130.0032 -9392, 69.57423, 130.6273 -9393, 66.70797, 142.0475 -9394, 67.9214, 110.3853 -9395, 67.40188, 124.1551 -9396, 69.39159, 121.5433 -9397, 68.59889, 127.6063 -9398, 68.3755, 126.0555 -9399, 68.28427, 127.0948 -9400, 68.50766, 152.6424 -9401, 65.09736, 111.7652 -9402, 65.83359, 119.9561 -9403, 69.25932, 134.0319 -9404, 68.73092, 132.3239 -9405, 66.77164, 120.5926 -9406, 66.38506, 142.6708 -9407, 67.46704, 132.4481 -9408, 68.17097, 123.7398 -9409, 65.70973, 125.7159 -9410, 67.07386, 121.8819 -9411, 71.9948, 147.5977 -9412, 63.22211, 107.5164 -9413, 69.03411, 118.9953 -9414, 68.64248, 120.9374 -9415, 65.9252, 118.0381 -9416, 72.10915, 143.0039 -9417, 66.35575, 107.5936 -9418, 68.96323, 128.6853 -9419, 65.42432, 116.2966 -9420, 65.22177, 112.5281 -9421, 72.70766, 151.2249 -9422, 67.3917, 106.0426 -9423, 66.68077, 127.0893 -9424, 68.72378, 129.9631 -9425, 63.70105, 109.8656 -9426, 73.02554, 153.6723 -9427, 68.16631, 126.7726 -9428, 64.82933, 95.71141 -9429, 65.8334, 119.1656 -9430, 67.8251, 129.8443 -9431, 69.45504, 143.627 -9432, 63.03704, 117.6276 -9433, 67.58447, 125.4967 -9434, 66.92223, 122.307 -9435, 69.33008, 135.0667 -9436, 71.71882, 146.1847 -9437, 68.66466, 137.1764 -9438, 70.46171, 120.4257 -9439, 64.20227, 124.2804 -9440, 68.54482, 122.1992 -9441, 65.42611, 118.5156 -9442, 69.20541, 135.4161 -9443, 63.51326, 105.9244 -9444, 67.2175, 111.7119 -9445, 69.69215, 143.5628 -9446, 68.78018, 132.1932 -9447, 69.40612, 120.9522 -9448, 67.40414, 121.3496 -9449, 67.40661, 109.3581 -9450, 66.49497, 124.8437 -9451, 67.2151, 120.043 -9452, 69.36059, 124.4044 -9453, 69.68186, 147.5598 -9454, 67.6277, 160.2278 -9455, 67.89343, 154.2345 -9456, 70.64483, 129.7265 -9457, 70.8271, 131.8696 -9458, 66.95277, 150.2868 -9459, 66.46976, 123.0618 -9460, 66.54555, 124.8628 -9461, 68.16788, 146.6505 -9462, 66.2086, 115.1943 -9463, 68.33636, 135.8657 -9464, 64.5222, 96.68665 -9465, 65.57641, 117.1727 -9466, 69.2064, 124.3249 -9467, 69.07345, 156.9797 -9468, 68.94109, 130.1473 -9469, 68.07446, 143.6574 -9470, 72.00843, 133.2257 -9471, 67.20444, 139.7736 -9472, 68.43894, 124.1119 -9473, 68.23881, 111.9836 -9474, 70.52936, 122.4652 -9475, 67.32161, 124.3376 -9476, 69.95585, 147.535 -9477, 67.88682, 135.3697 -9478, 68.15578, 106.8394 -9479, 70.56446, 124.0626 -9480, 68.13215, 104.8113 -9481, 70.25892, 129.4346 -9482, 71.06535, 140.4796 -9483, 66.36966, 116.5041 -9484, 67.17026, 135.8317 -9485, 68.87325, 146.9941 -9486, 70.81794, 131.5906 -9487, 66.72765, 121.3333 -9488, 67.48404, 137.405 -9489, 66.53552, 138.7161 -9490, 68.04662, 127.0141 -9491, 67.85401, 129.9666 -9492, 68.00799, 119.6399 -9493, 74.05895, 133.8172 -9494, 68.49073, 130.7902 -9495, 64.60903, 96.02104 -9496, 67.56038, 127.1691 -9497, 68.62368, 123.8232 -9498, 67.25436, 142.156 -9499, 68.17591, 127.1837 -9500, 67.57397, 132.4176 -9501, 66.05092, 103.9482 -9502, 69.27344, 127.5728 -9503, 69.90864, 121.1529 -9504, 69.28147, 140.9313 -9505, 68.75275, 132.5807 -9506, 67.33384, 115.6858 -9507, 65.05656, 111.7393 -9508, 65.67598, 111.3916 -9509, 66.47819, 101.3276 -9510, 70.52868, 134.6246 -9511, 67.33753, 109.9394 -9512, 69.87287, 126.1665 -9513, 68.73321, 125.7578 -9514, 69.1104, 140.1776 -9515, 69.1176, 120.5052 -9516, 66.72791, 116.0508 -9517, 70.37952, 130.6461 -9518, 64.75996, 110.5434 -9519, 67.50912, 145.7528 -9520, 66.26041, 125.1086 -9521, 67.44271, 142.4967 -9522, 68.68327, 139.7883 -9523, 67.58574, 125.2951 -9524, 66.55002, 111.2059 -9525, 66.3369, 148.2612 -9526, 67.59753, 132.7081 -9527, 66.16875, 138.9486 -9528, 68.38972, 118.5898 -9529, 69.32992, 133.9886 -9530, 66.91635, 120.1121 -9531, 67.20178, 121.5752 -9532, 68.88096, 143.4448 -9533, 68.83944, 136.7053 -9534, 70.43032, 121.1569 -9535, 69.6312, 138.6313 -9536, 66.23915, 130.0533 -9537, 69.57833, 140.2363 -9538, 70.32551, 142.6363 -9539, 65.17576, 100.3741 -9540, 70.81253, 118.5751 -9541, 69.5776, 127.2639 -9542, 64.67472, 104.1077 -9543, 68.0986, 114.887 -9544, 69.48224, 135.7121 -9545, 69.19418, 122.8981 -9546, 68.58131, 135.3452 -9547, 68.46986, 143.989 -9548, 66.52275, 116.8098 -9549, 67.29478, 100.4477 -9550, 68.02127, 133.231 -9551, 69.55433, 120.3508 -9552, 70.55274, 144.0613 -9553, 69.43571, 107.0716 -9554, 67.22028, 119.5298 -9555, 64.65699, 111.5398 -9556, 69.51829, 138.9221 -9557, 65.09086, 115.2015 -9558, 66.86091, 124.2395 -9559, 68.59768, 107.0438 -9560, 71.01173, 146.3277 -9561, 71.34761, 129.5618 -9562, 67.74021, 121.2672 -9563, 71.61413, 145.0715 -9564, 68.84447, 120.2177 -9565, 66.83785, 128.0275 -9566, 66.13335, 119.3266 -9567, 65.79023, 123.2118 -9568, 68.73614, 140.187 -9569, 67.57879, 131.6685 -9570, 70.7638, 145.0962 -9571, 67.67495, 127.9568 -9572, 64.5197, 128.6015 -9573, 68.70418, 146.899 -9574, 68.20196, 113.2495 -9575, 68.50077, 117.3796 -9576, 68.18475, 131.2772 -9577, 67.31928, 128.0177 -9578, 69.94028, 148.8857 -9579, 67.49093, 141.5919 -9580, 66.51022, 109.6487 -9581, 70.54908, 132.7834 -9582, 68.31443, 134.8167 -9583, 69.56373, 134.7459 -9584, 69.69727, 125.7112 -9585, 67.72532, 132.9298 -9586, 66.87841, 138.0319 -9587, 68.40503, 151.6563 -9588, 68.11084, 120.446 -9589, 66.86782, 109.5053 -9590, 68.96376, 130.3361 -9591, 70.51308, 137.2445 -9592, 65.1844, 126.7683 -9593, 70.21546, 113.0231 -9594, 69.03164, 133.84 -9595, 66.14828, 93.75301 -9596, 70.63243, 136.9783 -9597, 63.92425, 119.5108 -9598, 67.93981, 126.2074 -9599, 68.94411, 120.0772 -9600, 66.17288, 112.4068 -9601, 68.1199, 143.5778 -9602, 68.01974, 136.8445 -9603, 64.16711, 112.8528 -9604, 69.01036, 140.9219 -9605, 68.91364, 129.5028 -9606, 66.44713, 136.0997 -9607, 65.61804, 129.5947 -9608, 69.11903, 122.9885 -9609, 70.28184, 140.9463 -9610, 66.73051, 114.8715 -9611, 66.72657, 135.0653 -9612, 68.80212, 124.2972 -9613, 69.02745, 121.9743 -9614, 66.62724, 133.8779 -9615, 67.97623, 134.8979 -9616, 65.11298, 124.4876 -9617, 67.89264, 129.4893 -9618, 68.64717, 124.6416 -9619, 65.14223, 130.2813 -9620, 68.65645, 124.6263 -9621, 67.83641, 135.3784 -9622, 67.51286, 133.072 -9623, 66.63689, 128.8981 -9624, 68.34852, 134.0701 -9625, 65.8678, 127.5491 -9626, 67.36679, 145.0907 -9627, 68.35562, 128.6526 -9628, 65.76876, 126.7595 -9629, 67.90471, 104.8685 -9630, 65.54889, 122.4253 -9631, 69.03026, 134.7709 -9632, 66.27542, 119.7849 -9633, 67.88791, 126.7626 -9634, 65.72184, 107.6977 -9635, 68.66079, 130.6653 -9636, 68.28397, 107.6837 -9637, 69.17713, 128.8322 -9638, 69.2558, 138.4302 -9639, 69.54643, 144.0828 -9640, 68.97883, 141.869 -9641, 69.23439, 151.4362 -9642, 66.67303, 129.5801 -9643, 66.16115, 133.9835 -9644, 67.43035, 131.9753 -9645, 65.90419, 123.7444 -9646, 67.25626, 114.1209 -9647, 67.83686, 132.5467 -9648, 70.19109, 133.1316 -9649, 66.31564, 126.0798 -9650, 67.66646, 117.2472 -9651, 67.7519, 131.9273 -9652, 68.3228, 113.167 -9653, 72.0803, 130.742 -9654, 68.78572, 128.277 -9655, 68.57754, 118.4883 -9656, 68.37308, 124.2885 -9657, 68.74512, 130.1937 -9658, 69.39088, 130.6716 -9659, 68.61933, 134.812 -9660, 67.23029, 121.3587 -9661, 68.49582, 138.0952 -9662, 69.30757, 145.4359 -9663, 65.61597, 118.6455 -9664, 68.09188, 129.8851 -9665, 67.7166, 122.6816 -9666, 67.4508, 115.9856 -9667, 67.13754, 119.8772 -9668, 64.14983, 106.4504 -9669, 67.65922, 135.9871 -9670, 68.28587, 137.0307 -9671, 65.54248, 122.9935 -9672, 68.82518, 154.7341 -9673, 72.12412, 146.2978 -9674, 67.61816, 122.4365 -9675, 68.49971, 137.8023 -9676, 71.21183, 131.1726 -9677, 71.15269, 133.2166 -9678, 70.31235, 132.5313 -9679, 70.26465, 113.4165 -9680, 65.49772, 130.9129 -9681, 68.06388, 117.0789 -9682, 68.71857, 132.3502 -9683, 69.47394, 159.8926 -9684, 68.27314, 125.3854 -9685, 67.57915, 113.2566 -9686, 68.60227, 130.4389 -9687, 67.10387, 144.1473 -9688, 67.37805, 125.1132 -9689, 70.82184, 159.3021 -9690, 69.13393, 125.6548 -9691, 68.31448, 129.3196 -9692, 64.06191, 109.7758 -9693, 68.21309, 121.3595 -9694, 66.36575, 130.7716 -9695, 70.73365, 119.0237 -9696, 69.35175, 129.1685 -9697, 66.25415, 125.563 -9698, 68.60712, 105.1285 -9699, 70.27709, 127.2297 -9700, 68.2473, 124.244 -9701, 66.9098, 129.5755 -9702, 66.56227, 117.7942 -9703, 68.91759, 128.5454 -9704, 68.80671, 141.7393 -9705, 70.88619, 127.9719 -9706, 73.51383, 138.9321 -9707, 68.56821, 131.7526 -9708, 66.88985, 129.5218 -9709, 69.76635, 146.4205 -9710, 67.44905, 131.1587 -9711, 69.3961, 112.2049 -9712, 69.11016, 120.8271 -9713, 67.00457, 139.3125 -9714, 66.53958, 132.7218 -9715, 70.31894, 147.0394 -9716, 69.95672, 119.7538 -9717, 67.17704, 127.8719 -9718, 73.18256, 132.9995 -9719, 68.17989, 116.2537 -9720, 70.85706, 123.5573 -9721, 68.61586, 117.3901 -9722, 69.99675, 131.242 -9723, 66.89348, 156.4495 -9724, 68.944, 129.6552 -9725, 67.5559, 115.2974 -9726, 68.51482, 124.1914 -9727, 71.15411, 151.4754 -9728, 68.88473, 126.2634 -9729, 70.48065, 145.9294 -9730, 67.04825, 124.6696 -9731, 63.92053, 98.7457 -9732, 65.42959, 120.5649 -9733, 67.06764, 152.4888 -9734, 69.86922, 136.3855 -9735, 66.15786, 134.1293 -9736, 63.92128, 113.4515 -9737, 68.65125, 146.1165 -9738, 69.85696, 138.1103 -9739, 68.94991, 126.8747 -9740, 66.61559, 128.5193 -9741, 68.9697, 110.5576 -9742, 64.96032, 128.2809 -9743, 68.71059, 110.049 -9744, 67.44021, 129.2538 -9745, 69.29564, 125.0373 -9746, 68.3902, 116.4848 -9747, 65.57747, 117.9638 -9748, 68.16834, 129.595 -9749, 64.13237, 124.2891 -9750, 69.05347, 140.6226 -9751, 68.4964, 133.8031 -9752, 66.60332, 125.173 -9753, 66.78141, 115.7559 -9754, 68.68124, 112.327 -9755, 69.25972, 125.5782 -9756, 64.27481, 107.569 -9757, 70.17795, 132.6043 -9758, 69.75895, 139.3178 -9759, 67.61169, 140.8895 -9760, 71.41635, 146.9978 -9761, 68.70158, 120.3307 -9762, 65.38354, 123.2058 -9763, 71.82386, 136.6557 -9764, 65.44204, 128.948 -9765, 68.73343, 145.1099 -9766, 68.17608, 119.5684 -9767, 72.05521, 136.6193 -9768, 67.37648, 110.3445 -9769, 66.63165, 130.7607 -9770, 66.57454, 117.2413 -9771, 70.2814, 148.7963 -9772, 67.95765, 125.4817 -9773, 68.03122, 124.7968 -9774, 66.2195, 106.072 -9775, 70.60482, 134.8661 -9776, 67.43065, 130.2342 -9777, 65.90857, 122.1085 -9778, 72.47921, 138.4836 -9779, 66.5789, 116.9757 -9780, 67.04159, 128.5194 -9781, 65.89776, 139.6527 -9782, 66.02355, 104.0173 -9783, 70.6596, 131.0931 -9784, 69.32015, 133.3684 -9785, 68.46611, 118.6156 -9786, 68.1011, 118.9991 -9787, 69.10355, 131.272 -9788, 68.98767, 124.1313 -9789, 66.98612, 98.47799 -9790, 68.07886, 138.9164 -9791, 67.14062, 131.6581 -9792, 65.50185, 128.1924 -9793, 68.42655, 146.6355 -9794, 67.80423, 110.0665 -9795, 67.00515, 115.8675 -9796, 70.12939, 127.1045 -9797, 71.59767, 131.6252 -9798, 67.47799, 111.0157 -9799, 69.75215, 151.263 -9800, 70.2609, 124.2768 -9801, 68.46374, 128.6835 -9802, 66.49929, 113.3252 -9803, 68.77449, 147.9795 -9804, 67.53213, 132.3461 -9805, 71.32762, 132.2853 -9806, 69.54265, 132.2717 -9807, 68.84469, 137.642 -9808, 68.45131, 117.7085 -9809, 67.58396, 128.4773 -9810, 68.84619, 119.7516 -9811, 69.41444, 118.391 -9812, 69.85771, 120.8858 -9813, 66.09467, 115.8339 -9814, 68.69118, 118.5151 -9815, 66.91649, 120.891 -9816, 68.61516, 135.9551 -9817, 71.12975, 134.8375 -9818, 68.85924, 115.4611 -9819, 70.58611, 136.1071 -9820, 70.45602, 137.7117 -9821, 65.82729, 109.0839 -9822, 65.53454, 106.9057 -9823, 66.18249, 131.9705 -9824, 71.61882, 165.8716 -9825, 66.95769, 128.7377 -9826, 69.17434, 117.2939 -9827, 70.74903, 138.9422 -9828, 67.5619, 126.5968 -9829, 67.98909, 107.9762 -9830, 66.51309, 108.3641 -9831, 68.42597, 147.0716 -9832, 69.43903, 145.7242 -9833, 68.77366, 140.1915 -9834, 67.44207, 131.3793 -9835, 71.55011, 141.6604 -9836, 70.1884, 123.7339 -9837, 65.2831, 100.0283 -9838, 70.74713, 146.572 -9839, 69.73095, 145.2295 -9840, 68.86778, 126.558 -9841, 68.39148, 151.9512 -9842, 67.41403, 128.8079 -9843, 65.04265, 126.6868 -9844, 68.77248, 136.0577 -9845, 69.84344, 122.7778 -9846, 63.93049, 108.3559 -9847, 70.31106, 147.7541 -9848, 67.98819, 123.2582 -9849, 70.81754, 130.6455 -9850, 68.38637, 124.6679 -9851, 68.22631, 125.5255 -9852, 65.89874, 114.3292 -9853, 69.73748, 145.8184 -9854, 68.42911, 132.0335 -9855, 67.15172, 141.4995 -9856, 67.18709, 125.5079 -9857, 70.49324, 121.4159 -9858, 69.89967, 126.9552 -9859, 68.57785, 120.5832 -9860, 67.44754, 132.5691 -9861, 68.27063, 119.3592 -9862, 68.02518, 116.9769 -9863, 64.47165, 110.3828 -9864, 70.43528, 124.8658 -9865, 70.38848, 135.0006 -9866, 68.9876, 157.8304 -9867, 70.53, 145.5456 -9868, 70.77882, 123.2178 -9869, 68.03476, 131.787 -9870, 66.03888, 127.3603 -9871, 67.24661, 128.9941 -9872, 66.34444, 121.7823 -9873, 68.00358, 126.2625 -9874, 67.5354, 131.3948 -9875, 66.26621, 108.9546 -9876, 69.34812, 136.3244 -9877, 61.30021, 120.8819 -9878, 63.85336, 116.1584 -9879, 67.79112, 122.7668 -9880, 68.84082, 117.168 -9881, 67.23541, 128.9174 -9882, 72.0041, 138.0863 -9883, 69.37103, 127.227 -9884, 66.95564, 137.1765 -9885, 66.45619, 109.9414 -9886, 68.13655, 134.1517 -9887, 66.67832, 113.69 -9888, 69.28115, 141.7671 -9889, 70.62015, 140.458 -9890, 67.99465, 119.7749 -9891, 68.48033, 130.2865 -9892, 69.06455, 141.4252 -9893, 71.75345, 125.4749 -9894, 68.12333, 142.4333 -9895, 69.27301, 139.802 -9896, 70.6871, 132.7199 -9897, 71.59803, 118.0366 -9898, 69.19962, 132.039 -9899, 68.50734, 138.7054 -9900, 67.31358, 118.7559 -9901, 69.35559, 132.2083 -9902, 68.04018, 123.4858 -9903, 69.43599, 127.4407 -9904, 68.11666, 122.9518 -9905, 70.38735, 115.9033 -9906, 67.68927, 117.8434 -9907, 70.10753, 106.1532 -9908, 65.63803, 138.7008 -9909, 66.1331, 131.333 -9910, 67.98396, 139.0779 -9911, 70.00086, 145.8357 -9912, 68.77748, 138.6318 -9913, 69.55778, 136.8985 -9914, 69.64354, 141.6881 -9915, 67.51477, 122.6746 -9916, 66.32547, 109.4408 -9917, 68.11857, 123.5801 -9918, 68.95567, 139.0009 -9919, 69.47262, 159.961 -9920, 67.36852, 133.0522 -9921, 69.49484, 129.154 -9922, 65.21743, 130.2571 -9923, 66.44053, 126.5657 -9924, 67.4008, 111.4315 -9925, 70.05188, 136.1694 -9926, 70.47453, 165.815 -9927, 67.62136, 144.3461 -9928, 71.26378, 147.7777 -9929, 69.11384, 134.8827 -9930, 69.13058, 144.5313 -9931, 71.76731, 145.2951 -9932, 71.90517, 131.6109 -9933, 68.61716, 129.5184 -9934, 66.30375, 120.6304 -9935, 69.47578, 133.7738 -9936, 67.82661, 121.302 -9937, 66.40842, 127.5827 -9938, 69.29497, 140.665 -9939, 67.41872, 113.2182 -9940, 68.30044, 125.6614 -9941, 69.69323, 139.8444 -9942, 66.87896, 119.345 -9943, 67.917, 123.5503 -9944, 68.80858, 122.5048 -9945, 71.0785, 148.6654 -9946, 68.50032, 126.3782 -9947, 68.32165, 134.6888 -9948, 67.44148, 118.7423 -9949, 67.4694, 119.622 -9950, 68.57565, 144.6492 -9951, 69.90495, 131.2178 -9952, 69.06563, 133.1598 -9953, 66.36602, 101.9583 -9954, 68.08525, 137.6375 -9955, 69.76408, 132.5028 -9956, 68.09437, 122.4897 -9957, 67.77372, 120.8679 -9958, 73.1771, 162.3663 -9959, 70.8932, 137.9685 -9960, 66.59118, 133.313 -9961, 68.84406, 121.8554 -9962, 67.82525, 120.6637 -9963, 67.4964, 144.1456 -9964, 66.9367, 110.3082 -9965, 68.73832, 136.5058 -9966, 67.82175, 133.7939 -9967, 67.40266, 125.4416 -9968, 71.91481, 151.3634 -9969, 66.00315, 115.9391 -9970, 66.23591, 122.6684 -9971, 66.05033, 129.398 -9972, 68.59833, 131.3191 -9973, 66.73802, 146.5547 -9974, 68.95236, 130.8332 -9975, 66.8636, 134.6229 -9976, 63.54215, 106.5463 -9977, 68.29415, 126.4078 -9978, 67.18456, 155.58 -9979, 66.93941, 128.5959 -9980, 67.39381, 129.645 -9981, 70.10564, 137.8281 -9982, 67.00791, 114.4926 -9983, 68.00661, 112.832 -9984, 64.75128, 96.50653 -9985, 64.75712, 117.9964 -9986, 65.55869, 104.1268 -9987, 67.94061, 101.9043 -9988, 66.32718, 112.5542 -9989, 67.76335, 130.3666 -9990, 68.84705, 143.2721 -9991, 66.22794, 114.482 -9992, 67.33307, 131.244 -9993, 68.16808, 129.6398 -9994, 66.9724, 123.0562 -9995, 69.16053, 127.6593 -9996, 67.96769, 124.3206 -9997, 71.39143, 128.9603 -9998, 69.17936, 142.5122 -9999, 67.63262, 108.6316 -10000, 68.13844, 133.3492 -10001, 68.57515, 132.9664 -10002, 69.27082, 123.9376 -10003, 68.03694, 129.7161 -10004, 66.78394, 128.5766 -10005, 68.37086, 121.5928 -10006, 69.06702, 125.2812 -10007, 68.68835, 120.2494 -10008, 67.94587, 127.063 -10009, 69.97069, 130.5886 -10010, 67.83678, 130.1037 -10011, 66.57079, 122.6824 -10012, 69.93637, 136.028 -10013, 65.68971, 116.112 -10014, 68.09276, 136.1992 -10015, 68.51531, 149.8957 -10016, 68.66816, 129.1077 -10017, 70.74635, 128.3355 -10018, 68.93456, 134.2009 -10019, 64.55693, 115.8225 -10020, 66.63381, 110.4108 -10021, 66.02983, 125.4093 -10022, 71.83894, 128.1898 -10023, 69.11329, 132.1717 -10024, 68.72609, 126.9163 -10025, 67.67278, 140.825 -10026, 67.97403, 115.5281 -10027, 66.28867, 96.43706 -10028, 66.78936, 126.941 -10029, 70.42997, 130.1329 -10030, 67.34451, 128.3837 -10031, 66.55225, 115.0221 -10032, 67.54453, 116.9754 -10033, 67.11135, 121.9965 -10034, 66.39139, 120.8401 -10035, 70.1004, 143.8223 -10036, 66.29079, 129.0103 -10037, 66.82271, 122.2173 -10038, 68.81388, 141.3748 -10039, 70.7395, 118.7482 -10040, 68.56268, 110.8342 -10041, 66.80278, 110.5325 -10042, 64.49508, 109.748 -10043, 68.00244, 139.8746 -10044, 68.14281, 144.8232 -10045, 66.9929, 112.8264 -10046, 65.95458, 117.0548 -10047, 71.14826, 117.7951 -10048, 69.26366, 143.5924 -10049, 65.33361, 113.766 -10050, 68.07198, 139.8559 -10051, 68.75607, 127.0394 -10052, 68.25481, 122.3093 -10053, 67.6301, 126.2598 -10054, 66.76358, 116.2435 -10055, 68.44489, 122.5856 -10056, 68.6443, 137.6504 -10057, 69.7314, 144.728 -10058, 68.04736, 126.1972 -10059, 66.8011, 114.0278 -10060, 67.31382, 114.2178 -10061, 65.94149, 100.0924 -10062, 68.04148, 113.2556 -10063, 65.76389, 121.5449 -10064, 69.98217, 138.5123 -10065, 66.53339, 124.0166 -10066, 67.30571, 118.2689 -10067, 71.37779, 128.3741 -10068, 65.41261, 106.923 -10069, 69.9379, 127.7381 -10070, 70.94031, 129.7535 -10071, 66.48588, 135.3436 -10072, 70.59467, 122.6572 -10073, 69.26749, 134.6498 -10074, 68.01553, 120.2336 -10075, 67.48435, 133.4493 -10076, 66.64515, 124.0263 -10077, 66.25306, 109.1716 -10078, 70.78006, 119.5972 -10079, 67.46565, 126.6369 -10080, 67.95071, 147.4028 -10081, 67.32652, 116.3942 -10082, 65.49287, 130.1238 -10083, 67.64989, 127.9459 -10084, 66.4175, 137.3847 -10085, 68.52361, 118.6287 -10086, 70.9931, 139.3241 -10087, 68.27507, 121.744 -10088, 68.72072, 118.7503 -10089, 68.14922, 122.1772 -10090, 66.32895, 120.6915 -10091, 67.34775, 126.0878 -10092, 69.17835, 124.8283 -10093, 67.72085, 135.3916 -10094, 67.78477, 132.7538 -10095, 64.52209, 128.4876 -10096, 68.67602, 130.5971 -10097, 65.24442, 109.9482 -10098, 65.99271, 124.0657 -10099, 68.60453, 126.4562 -10100, 64.62503, 115.5461 -10101, 67.63678, 130.1742 -10102, 70.36634, 153.457 -10103, 68.7096, 143.9246 -10104, 66.73859, 128.1908 -10105, 65.80323, 121.9802 -10106, 65.01409, 133.769 -10107, 67.50667, 121.3548 -10108, 67.70298, 121.7608 -10109, 68.18064, 133.3395 -10110, 67.08054, 134.2481 -10111, 66.53602, 133.3901 -10112, 70.85159, 155.4236 -10113, 65.99732, 132.6291 -10114, 69.65644, 128.9009 -10115, 64.36495, 113.6952 -10116, 68.51561, 122.5108 -10117, 67.01001, 132.9762 -10118, 68.65082, 122.8115 -10119, 70.11761, 120.1837 -10120, 67.66432, 114.333 -10121, 67.54436, 117.0024 -10122, 69.24622, 135.6679 -10123, 64.70908, 119.9401 -10124, 67.77202, 118.5771 -10125, 67.88823, 138.9753 -10126, 69.54154, 125.8526 -10127, 69.92873, 127.9198 -10128, 69.47751, 135.3065 -10129, 67.55945, 127.4039 -10130, 67.83063, 132.731 -10131, 71.63342, 133.7823 -10132, 66.93561, 126.6451 -10133, 66.40984, 115.8011 -10134, 67.25458, 126.4183 -10135, 67.42176, 119.9688 -10136, 66.89243, 119.7186 -10137, 64.41136, 124.1027 -10138, 68.08186, 119.4421 -10139, 68.73489, 121.9388 -10140, 66.84196, 129.2855 -10141, 66.38618, 124.5214 -10142, 65.80415, 130.1618 -10143, 65.57517, 122.5124 -10144, 68.65405, 140.5776 -10145, 65.51063, 126.527 -10146, 70.83038, 133.8104 -10147, 65.4054, 129.794 -10148, 71.85374, 130.9334 -10149, 65.69257, 124.2145 -10150, 64.50068, 114.1913 -10151, 67.32663, 142.5938 -10152, 68.82231, 137.0983 -10153, 68.31438, 138.8053 -10154, 68.89476, 135.4686 -10155, 68.45037, 122.0752 -10156, 70.38299, 131.0126 -10157, 66.77655, 131.643 -10158, 70.61416, 127.9027 -10159, 67.99636, 150.304 -10160, 63.91795, 126.4849 -10161, 69.08168, 123.5754 -10162, 67.94687, 134.417 -10163, 66.41264, 141.9618 -10164, 68.4113, 114.6332 -10165, 69.17467, 132.8267 -10166, 68.80945, 126.7765 -10167, 67.98949, 130.0852 -10168, 67.47425, 120.9892 -10169, 69.37637, 140.4862 -10170, 66.7457, 119.6273 -10171, 71.81042, 146.3814 -10172, 68.49779, 128.8718 -10173, 66.22373, 124.7247 -10174, 68.48338, 127.7586 -10175, 67.48748, 129.8294 -10176, 66.80122, 124.956 -10177, 69.36031, 117.2519 -10178, 69.44113, 134.5996 -10179, 68.02891, 119.5087 -10180, 65.4401, 105.3289 -10181, 68.05522, 130.0591 -10182, 65.44861, 120.9266 -10183, 69.01128, 130.4463 -10184, 66.13501, 107.8115 -10185, 65.43462, 115.348 -10186, 67.70555, 121.7045 -10187, 72.00385, 126.9701 -10188, 68.22827, 122.7364 -10189, 67.97769, 132.02 -10190, 69.6181, 138.8191 -10191, 71.23192, 131.4701 -10192, 66.21527, 125.8998 -10193, 69.46816, 130.0392 -10194, 67.16775, 118.855 -10195, 67.92821, 140.6105 -10196, 68.02041, 120.0773 -10197, 63.16568, 101.9022 -10198, 67.43271, 113.1315 -10199, 67.57909, 148.2058 -10200, 69.34236, 130.11 -10201, 69.03935, 128.1055 -10202, 66.5898, 126.9651 -10203, 67.04732, 142.3191 -10204, 70.93771, 134.4353 -10205, 66.26707, 100.585 -10206, 66.61921, 121.9217 -10207, 68.54554, 123.1625 -10208, 71.27733, 126.1745 -10209, 68.28034, 122.7293 -10210, 70.04241, 149.3332 -10211, 68.7644, 123.3415 -10212, 70.09987, 135.2847 -10213, 70.42506, 136.6994 -10214, 66.84364, 119.8992 -10215, 70.89055, 138.6481 -10216, 71.60107, 138.3052 -10217, 65.51369, 130.2502 -10218, 66.99057, 106.9839 -10219, 68.35139, 112.8812 -10220, 67.39169, 131.0616 -10221, 68.985, 127.1889 -10222, 66.60289, 136.9817 -10223, 68.2832, 124.3849 -10224, 65.51929, 105.4043 -10225, 71.86969, 142.1276 -10226, 66.19577, 126.6438 -10227, 66.98863, 132.0612 -10228, 64.22788, 120.3019 -10229, 69.09806, 138.3934 -10230, 68.00458, 135.4125 -10231, 68.277, 135.3096 -10232, 71.698, 147.4595 -10233, 67.06982, 104.1591 -10234, 66.98454, 130.183 -10235, 70.71295, 170.924 -10236, 66.30287, 137.6953 -10237, 68.78265, 126.7758 -10238, 69.2984, 121.2638 -10239, 68.03691, 107.9584 -10240, 67.27286, 141.7463 -10241, 61.93152, 85.2904 -10242, 68.44672, 134.0838 -10243, 65.52171, 121.4215 -10244, 68.73061, 123.9749 -10245, 70.32188, 119.7992 -10246, 70.72616, 136.5876 -10247, 67.23886, 142.0396 -10248, 67.42973, 115.9108 -10249, 66.44447, 119.4981 -10250, 65.92998, 112.2153 -10251, 68.45982, 123.3502 -10252, 69.43594, 134.1796 -10253, 65.32774, 121.3348 -10254, 67.30054, 126.6744 -10255, 67.6736, 125.3719 -10256, 67.76707, 114.1675 -10257, 66.39375, 121.5455 -10258, 70.14848, 116.3663 -10259, 67.81882, 129.6804 -10260, 68.92743, 129.8436 -10261, 69.97517, 135.5642 -10262, 65.96101, 117.1969 -10263, 68.8375, 128.1107 -10264, 67.46994, 121.8602 -10265, 65.67254, 132.8915 -10266, 72.42515, 129.0739 -10267, 66.33452, 127.956 -10268, 68.16377, 145.4734 -10269, 68.80719, 142.8541 -10270, 67.89934, 117.397 -10271, 69.75835, 122.7009 -10272, 67.65443, 133.8413 -10273, 66.06129, 132.3972 -10274, 68.07253, 134.6856 -10275, 65.00025, 118.8709 -10276, 67.95845, 127.4662 -10277, 68.88694, 122.875 -10278, 65.41879, 120.3438 -10279, 68.1777, 120.0616 -10280, 70.3772, 126.5767 -10281, 68.11999, 116.4353 -10282, 68.35276, 124.8255 -10283, 69.42068, 131.768 -10284, 67.65704, 104.6366 -10285, 67.9709, 133.9997 -10286, 65.89416, 113.7654 -10287, 67.92834, 129.1861 -10288, 67.67419, 133.0796 -10289, 67.17717, 112.4891 -10290, 70.64743, 122.3352 -10291, 71.01751, 130.6425 -10292, 65.9993, 115.9772 -10293, 66.66578, 128.0432 -10294, 64.56593, 102.0383 -10295, 64.96159, 107.4868 -10296, 68.93317, 126.2217 -10297, 68.6422, 138.0343 -10298, 68.77736, 154.8517 -10299, 66.67804, 139.1714 -10300, 67.99234, 133.4281 -10301, 67.73219, 120.8693 -10302, 68.88114, 127.9823 -10303, 67.81179, 142.3762 -10304, 72.26487, 136.5009 -10305, 70.06893, 117.0553 -10306, 66.14966, 131.4211 -10307, 68.69605, 133.577 -10308, 68.47571, 131.9537 -10309, 68.37802, 119.9539 -10310, 68.87878, 119.3971 -10311, 65.80924, 112.8845 -10312, 69.2799, 152.5435 -10313, 67.01129, 127.7649 -10314, 68.20847, 112.9406 -10315, 68.68965, 134.1251 -10316, 66.05144, 119.3036 -10317, 69.09455, 127.3372 -10318, 68.86576, 112.7935 -10319, 67.87248, 127.7199 -10320, 67.02254, 114.1688 -10321, 64.26864, 112.2987 -10322, 69.22231, 127.7632 -10323, 69.18516, 115.089 -10324, 69.28583, 146.5881 -10325, 67.54616, 128.8973 -10326, 67.27501, 155.8189 -10327, 68.14682, 124.0938 -10328, 68.11154, 119.0578 -10329, 68.00907, 145.3193 -10330, 66.10884, 127.8689 -10331, 74.36328, 164.6643 -10332, 69.87349, 137.2025 -10333, 64.30282, 118.0081 -10334, 68.1745, 154.0079 -10335, 68.00916, 125.3284 -10336, 68.13485, 119.87 -10337, 66.8495, 110.174 -10338, 68.04704, 131.5455 -10339, 68.95045, 129.1584 -10340, 67.56709, 112.434 -10341, 66.34841, 109.9387 -10342, 67.87075, 135.8476 -10343, 67.06849, 118.8617 -10344, 67.23477, 114.1638 -10345, 69.6254, 131.1821 -10346, 66.96018, 134.7602 -10347, 68.90732, 144.3025 -10348, 71.60814, 144.5143 -10349, 65.20502, 118.2572 -10350, 67.72312, 123.8437 -10351, 65.36188, 117.1863 -10352, 71.26753, 125.0196 -10353, 65.11686, 117.0472 -10354, 71.23323, 145.6988 -10355, 66.98585, 109.8113 -10356, 68.98353, 127.9516 -10357, 67.07174, 126.4042 -10358, 69.87863, 141.4678 -10359, 66.15177, 111.9139 -10360, 67.17694, 120.6343 -10361, 66.65138, 111.267 -10362, 67.02613, 131.52 -10363, 69.05469, 134.6582 -10364, 70.30558, 130.5531 -10365, 69.15782, 137.8314 -10366, 67.70344, 108.9052 -10367, 68.77537, 138.0502 -10368, 68.18873, 127.1719 -10369, 67.00131, 129.8178 -10370, 72.68545, 124.1497 -10371, 67.1693, 126.4281 -10372, 68.52314, 146.2621 -10373, 65.75194, 116.2159 -10374, 69.40466, 127.6167 -10375, 67.27594, 131.5767 -10376, 66.33031, 118.3779 -10377, 66.81347, 121.6926 -10378, 68.20959, 128.8569 -10379, 66.85651, 105.9897 -10380, 68.28564, 123.0402 -10381, 68.86183, 134.6779 -10382, 70.22727, 120.4772 -10383, 68.51085, 125.3584 -10384, 68.12993, 108.1225 -10385, 67.45958, 133.6881 -10386, 67.95057, 132.93 -10387, 70.41003, 132.8924 -10388, 68.82861, 132.9931 -10389, 70.88474, 132.2668 -10390, 70.23488, 131.4445 -10391, 65.12636, 122.1146 -10392, 70.7406, 128.0491 -10393, 68.1794, 126.5975 -10394, 66.28166, 132.7775 -10395, 68.59748, 135.9033 -10396, 66.23597, 119.438 -10397, 67.42763, 112.0482 -10398, 70.93428, 134.7475 -10399, 68.2984, 121.2823 -10400, 66.51911, 135.1788 -10401, 67.50653, 126.2248 -10402, 71.31381, 144.7622 -10403, 67.86603, 137.0526 -10404, 68.4164, 127.039 -10405, 70.70831, 132.575 -10406, 67.2978, 98.74301 -10407, 66.98357, 120.0619 -10408, 65.73548, 135.6257 -10409, 63.46952, 109.7989 -10410, 72.31104, 152.7759 -10411, 66.5271, 126.2462 -10412, 65.98844, 129.6398 -10413, 65.54355, 114.8749 -10414, 69.63987, 126.6245 -10415, 69.35826, 133.0021 -10416, 67.58203, 107.7908 -10417, 70.18844, 131.0572 -10418, 67.913, 131.565 -10419, 65.9935, 116.3407 -10420, 68.45079, 127.9629 -10421, 67.8761, 132.2874 -10422, 68.20301, 122.2456 -10423, 68.02558, 121.6909 -10424, 70.11194, 130.6004 -10425, 69.95523, 145.4424 -10426, 70.2156, 147.6645 -10427, 70.92745, 129.8921 -10428, 64.90177, 111.0552 -10429, 65.83748, 120.8376 -10430, 67.36794, 131.8412 -10431, 65.16759, 127.1526 -10432, 65.57954, 121.4738 -10433, 69.5881, 128.133 -10434, 69.20122, 139.1962 -10435, 68.24975, 138.9947 -10436, 70.38081, 133.4191 -10437, 68.32966, 133.8127 -10438, 64.35599, 133.6729 -10439, 66.98202, 120.6984 -10440, 69.39666, 126.7731 -10441, 66.24724, 99.07691 -10442, 70.81716, 137.0278 -10443, 72.21471, 135.0052 -10444, 69.06657, 142.6149 -10445, 70.86115, 130.7419 -10446, 73.33584, 133.4109 -10447, 69.71521, 133.5603 -10448, 68.7218, 134.5512 -10449, 70.15159, 143.2453 -10450, 71.07028, 128.1241 -10451, 68.77062, 145.2039 -10452, 69.30497, 114.185 -10453, 69.12822, 147.1321 -10454, 68.91395, 132.5095 -10455, 67.71189, 129.3881 -10456, 63.00544, 116.1438 -10457, 68.7807, 128.5783 -10458, 63.02884, 96.47744 -10459, 68.89673, 136.2149 -10460, 66.21931, 132.252 -10461, 68.06832, 141.576 -10462, 67.57157, 128.3205 -10463, 66.11571, 136.9935 -10464, 66.22051, 106.2064 -10465, 64.08406, 111.7218 -10466, 66.77064, 108.8598 -10467, 67.33892, 133.2337 -10468, 65.75905, 140.6289 -10469, 69.00995, 141.837 -10470, 69.17655, 139.7818 -10471, 65.96052, 102.3802 -10472, 64.14294, 115.0981 -10473, 67.01845, 119.8016 -10474, 68.14749, 128.0245 -10475, 67.35561, 119.2536 -10476, 66.94659, 129.5847 -10477, 69.23785, 124.8157 -10478, 64.77966, 89.64885 -10479, 69.54866, 125.9774 -10480, 68.95676, 124.3441 -10481, 68.80266, 138.0014 -10482, 69.31999, 131.6757 -10483, 72.35849, 139.2038 -10484, 66.13184, 118.5572 -10485, 67.77688, 117.444 -10486, 68.65699, 107.8873 -10487, 67.91922, 131.6555 -10488, 70.34445, 131.6005 -10489, 71.06425, 152.8456 -10490, 68.3927, 123.4257 -10491, 66.79712, 131.5125 -10492, 64.93783, 103.7577 -10493, 70.14231, 117.884 -10494, 64.00875, 104.3435 -10495, 69.51978, 129.9665 -10496, 66.94273, 117.6676 -10497, 70.87794, 149.1428 -10498, 65.24649, 116.9904 -10499, 69.49131, 126.0984 -10500, 68.08959, 128.0709 -10501, 70.65463, 149.4745 -10502, 64.93386, 96.67888 -10503, 68.70534, 124.5106 -10504, 67.11498, 119.0296 -10505, 70.00068, 140.9303 -10506, 72.37892, 156.8464 -10507, 68.172, 115.1333 -10508, 67.24574, 135.0178 -10509, 66.04961, 127.901 -10510, 64.85955, 115.5248 -10511, 69.52955, 130.5978 -10512, 68.82408, 132.1751 -10513, 69.41921, 137.9209 -10514, 69.05841, 111.3935 -10515, 68.89369, 119.6711 -10516, 68.73216, 130.2555 -10517, 69.49069, 132.1774 -10518, 64.10059, 121.0721 -10519, 68.30462, 142.3127 -10520, 68.71525, 114.003 -10521, 65.69719, 107.6348 -10522, 68.09404, 115.4798 -10523, 66.51622, 135.7521 -10524, 68.52534, 133.3322 -10525, 69.20887, 135.9792 -10526, 67.70321, 120.999 -10527, 68.15955, 130.7498 -10528, 67.18814, 106.7904 -10529, 68.50904, 119.4901 -10530, 66.51943, 138.5418 -10531, 66.27868, 115.6044 -10532, 67.47904, 114.978 -10533, 67.17176, 134.8531 -10534, 70.21021, 141.9264 -10535, 66.48457, 113.2493 -10536, 67.38335, 139.6947 -10537, 69.63142, 147.2102 -10538, 69.05892, 145.238 -10539, 67.73576, 99.74502 -10540, 68.0427, 127.537 -10541, 70.50652, 143.0547 -10542, 68.61607, 122.2814 -10543, 70.54593, 142.2969 -10544, 65.89082, 118.0925 -10545, 71.21608, 157.4503 -10546, 68.20518, 114.4749 -10547, 67.74012, 138.1428 -10548, 66.26527, 110.327 -10549, 65.53319, 105.8284 -10550, 66.51322, 113.1916 -10551, 67.35638, 131.4344 -10552, 70.30591, 133.8064 -10553, 67.04142, 112.9803 -10554, 67.7369, 110.5975 -10555, 69.66034, 140.415 -10556, 69.98999, 148.9512 -10557, 66.79277, 127.3793 -10558, 66.00918, 133.9975 -10559, 66.62111, 130.0858 -10560, 69.74276, 132.0686 -10561, 66.16467, 131.0357 -10562, 70.20538, 132.2909 -10563, 68.60463, 135.4929 -10564, 70.62429, 111.8873 -10565, 66.94547, 119.7758 -10566, 70.34761, 121.937 -10567, 65.49205, 108.3441 -10568, 68.89339, 128.0101 -10569, 66.19965, 125.1485 -10570, 66.36441, 123.1231 -10571, 66.77807, 137.3777 -10572, 68.09728, 120.4912 -10573, 68.22134, 149.196 -10574, 70.09705, 139.6371 -10575, 72.1712, 128.1616 -10576, 68.84442, 143.5309 -10577, 69.66256, 136.6815 -10578, 68.7237, 132.2889 -10579, 65.52882, 129.2356 -10580, 70.69497, 127.5854 -10581, 67.00435, 119.8816 -10582, 67.55287, 121.7881 -10583, 68.9392, 118.0553 -10584, 66.89064, 129.4493 -10585, 66.87923, 132.1593 -10586, 69.27991, 130.8975 -10587, 68.63068, 112.5824 -10588, 66.02106, 134.9502 -10589, 67.31835, 126.3568 -10590, 70.64068, 121.9356 -10591, 66.5818, 131.6912 -10592, 66.24792, 126.2204 -10593, 65.96918, 126.7294 -10594, 66.08834, 130.1595 -10595, 68.74671, 126.0762 -10596, 68.38332, 152.4418 -10597, 64.73972, 122.4279 -10598, 68.56976, 135.6351 -10599, 67.50394, 124.7759 -10600, 69.83182, 132.6278 -10601, 66.93919, 131.6494 -10602, 67.87115, 117.8922 -10603, 66.38765, 127.8206 -10604, 66.71594, 114.609 -10605, 69.92883, 160.4871 -10606, 65.60065, 116.6834 -10607, 68.94104, 132.7443 -10608, 67.35421, 116.3161 -10609, 69.2689, 126.223 -10610, 64.78382, 124.4218 -10611, 69.00289, 131.0501 -10612, 67.94108, 149.5679 -10613, 69.77799, 127.8931 -10614, 68.26272, 127.9975 -10615, 68.02075, 131.2079 -10616, 69.04822, 113.5618 -10617, 67.98576, 137.0912 -10618, 63.50795, 114.8749 -10619, 69.56909, 127.9663 -10620, 69.10658, 119.2041 -10621, 69.17856, 134.1517 -10622, 67.06151, 120.7166 -10623, 70.89432, 131.7651 -10624, 69.36734, 137.5629 -10625, 66.55432, 124.5989 -10626, 68.00765, 129.6789 -10627, 67.29039, 115.1226 -10628, 66.88356, 118.4508 -10629, 73.22072, 137.0768 -10630, 66.95094, 128.8915 -10631, 65.93861, 117.8413 -10632, 68.06028, 98.9001 -10633, 65.9792, 140.0098 -10634, 69.32477, 138.604 -10635, 68.01965, 116.1544 -10636, 73.88574, 135.9816 -10637, 68.7284, 128.3036 -10638, 66.98669, 129.6223 -10639, 67.65185, 147.7052 -10640, 66.73298, 138.5239 -10641, 67.57886, 105.3225 -10642, 70.88703, 139.6806 -10643, 68.64071, 134.5343 -10644, 66.38501, 128.8816 -10645, 67.74524, 128.6228 -10646, 69.42469, 137.1312 -10647, 64.21102, 113.6698 -10648, 69.04355, 135.6615 -10649, 68.44013, 143.8953 -10650, 69.86939, 123.235 -10651, 67.27641, 112.1723 -10652, 69.26705, 121.2725 -10653, 65.83018, 129.2681 -10654, 66.56855, 129.3466 -10655, 66.89784, 137.6947 -10656, 69.58798, 113.665 -10657, 69.61101, 136.2898 -10658, 67.90062, 136.0332 -10659, 66.4422, 129.4758 -10660, 70.1338, 134.4689 -10661, 67.24137, 134.0858 -10662, 71.40024, 118.804 -10663, 68.81761, 116.5307 -10664, 66.00638, 120.3 -10665, 66.82919, 125.1578 -10666, 66.77789, 123.6758 -10667, 64.55809, 113.8706 -10668, 67.49962, 137.1728 -10669, 72.09703, 134.2724 -10670, 71.48656, 105.5331 -10671, 67.70221, 130.5761 -10672, 69.02373, 114.3528 -10673, 66.73813, 119.0173 -10674, 64.09479, 107.0877 -10675, 69.55031, 115.7306 -10676, 67.28152, 131.3143 -10677, 70.83864, 142.2989 -10678, 65.30751, 119.7157 -10679, 68.17705, 126.0792 -10680, 67.49175, 109.8464 -10681, 67.69924, 123.8695 -10682, 68.89262, 138.0155 -10683, 66.69777, 121.1209 -10684, 68.02164, 131.326 -10685, 72.32382, 130.0773 -10686, 67.89736, 119.9817 -10687, 65.94463, 100.5898 -10688, 68.43859, 137.938 -10689, 68.34332, 129.9947 -10690, 67.50727, 112.6174 -10691, 65.73491, 115.5253 -10692, 68.45227, 122.7969 -10693, 68.09452, 112.6967 -10694, 66.87642, 111.7273 -10695, 68.78042, 118.6681 -10696, 67.76232, 117.16 -10697, 66.92622, 133.9616 -10698, 70.4839, 122.8518 -10699, 66.90481, 126.6455 -10700, 67.21178, 155.0082 -10701, 67.93338, 119.7698 -10702, 69.36009, 138.4303 -10703, 67.2037, 129.3922 -10704, 66.11772, 113.1732 -10705, 68.87141, 141.5641 -10706, 72.13664, 129.6934 -10707, 66.47378, 121.8011 -10708, 67.44181, 136.2936 -10709, 66.45604, 133.1168 -10710, 64.93446, 113.589 -10711, 71.13511, 151.4674 -10712, 68.14569, 130.1973 -10713, 69.80663, 131.1705 -10714, 69.09198, 126.1547 -10715, 70.73962, 141.7215 -10716, 69.69246, 135.3223 -10717, 67.18323, 137.3825 -10718, 70.75638, 123.4866 -10719, 70.79804, 125.7816 -10720, 67.59872, 128.558 -10721, 69.14817, 153.3639 -10722, 68.47791, 137.359 -10723, 71.2696, 145.0339 -10724, 69.58091, 131.7444 -10725, 67.99813, 118.223 -10726, 67.12516, 126.1205 -10727, 66.94553, 118.117 -10728, 69.35076, 141.2216 -10729, 68.86773, 136.9215 -10730, 67.19725, 136.8241 -10731, 66.15149, 123.9501 -10732, 67.66962, 135.2617 -10733, 63.29618, 111.4056 -10734, 71.77485, 145.7175 -10735, 70.76918, 134.8925 -10736, 65.76134, 110.0183 -10737, 69.57368, 136.346 -10738, 69.7701, 111.5563 -10739, 71.90393, 141.4574 -10740, 71.83818, 139.7878 -10741, 69.74181, 124.4227 -10742, 65.40817, 122.8072 -10743, 69.73609, 152.6969 -10744, 68.05785, 115.7184 -10745, 65.56584, 101.7955 -10746, 68.58632, 121.2848 -10747, 70.5479, 121.361 -10748, 68.62838, 116.4417 -10749, 67.30469, 125.7158 -10750, 67.86793, 132.4746 -10751, 68.18436, 111.6939 -10752, 67.12433, 123.5312 -10753, 67.50781, 127.5459 -10754, 69.74866, 136.4338 -10755, 65.94502, 119.3141 -10756, 66.03597, 116.2143 -10757, 66.74873, 136.2302 -10758, 69.30449, 118.5162 -10759, 69.05283, 144.8074 -10760, 68.50867, 133.9436 -10761, 66.63013, 118.1453 -10762, 68.67406, 124.6569 -10763, 69.93061, 138.8325 -10764, 69.11316, 151.1101 -10765, 67.21939, 132.8338 -10766, 68.94888, 115.6681 -10767, 71.6822, 138.0712 -10768, 67.7161, 120.4559 -10769, 66.04065, 129.7117 -10770, 69.56767, 129.7364 -10771, 67.04789, 136.4177 -10772, 66.11294, 104.4748 -10773, 67.56696, 117.3571 -10774, 68.2101, 119.4079 -10775, 69.0425, 127.1652 -10776, 65.20788, 132.5724 -10777, 66.56896, 135.5198 -10778, 69.09239, 144.5847 -10779, 67.34629, 118.7027 -10780, 67.37558, 120.6235 -10781, 69.39824, 138.4163 -10782, 69.52151, 145.1544 -10783, 68.78586, 139.9157 -10784, 66.75113, 111.2522 -10785, 65.84981, 136.9029 -10786, 66.74378, 112.7127 -10787, 69.8469, 150.5891 -10788, 69.66479, 144.4128 -10789, 70.61706, 122.7131 -10790, 64.87192, 127.745 -10791, 68.09578, 123.5007 -10792, 64.12978, 125.8286 -10793, 69.1366, 152.2569 -10794, 70.70527, 133.3353 -10795, 66.38376, 115.6821 -10796, 66.95437, 128.1657 -10797, 69.3349, 131.2696 -10798, 67.6326, 123.7498 -10799, 68.67163, 112.0543 -10800, 66.97528, 133.7971 -10801, 69.32415, 118.631 -10802, 68.65077, 117.349 -10803, 69.52713, 130.0545 -10804, 67.5071, 120.5993 -10805, 68.41559, 130.557 -10806, 67.18894, 119.2439 -10807, 67.64362, 129.8738 -10808, 67.63143, 111.9499 -10809, 71.0885, 144.0961 -10810, 66.35595, 135.0814 -10811, 66.55633, 125.1865 -10812, 69.48096, 144.4402 -10813, 72.13324, 141.1153 -10814, 68.37214, 130.76 -10815, 65.24215, 107.3398 -10816, 68.35973, 122.4447 -10817, 67.12836, 123.7953 -10818, 70.71221, 129.5686 -10819, 70.10355, 147.6963 -10820, 69.91417, 128.8815 -10821, 67.03445, 118.5148 -10822, 68.48906, 135.0043 -10823, 62.50449, 126.834 -10824, 66.28271, 122.121 -10825, 71.18243, 147.7423 -10826, 64.96701, 118.9745 -10827, 66.83755, 119.1425 -10828, 69.31263, 143.318 -10829, 68.00003, 124.0098 -10830, 70.93041, 138.5522 -10831, 69.55078, 127.6665 -10832, 67.04168, 125.6018 -10833, 66.68499, 126.4684 -10834, 66.96568, 144.4394 -10835, 66.45649, 106.8881 -10836, 69.38291, 114.7144 -10837, 68.39972, 131.8536 -10838, 65.99324, 118.3222 -10839, 68.32092, 136.5044 -10840, 69.10337, 130.0111 -10841, 68.42546, 121.4558 -10842, 68.20753, 133.0912 -10843, 67.8287, 126.2769 -10844, 66.20781, 123.2416 -10845, 70.02744, 132.5108 -10846, 72.33837, 146.1178 -10847, 69.07669, 133.8041 -10848, 63.47989, 109.4272 -10849, 68.39232, 132.9664 -10850, 66.38785, 107.8609 -10851, 66.35839, 141.0786 -10852, 67.90974, 127.899 -10853, 67.99457, 135.2005 -10854, 69.33638, 116.2041 -10855, 67.60547, 134.3536 -10856, 67.39241, 118.188 -10857, 65.40662, 138.0298 -10858, 67.08266, 125.0373 -10859, 66.1459, 117.1214 -10860, 69.02208, 147.0445 -10861, 65.41424, 118.1839 -10862, 62.44899, 97.60294 -10863, 66.46524, 116.9524 -10864, 70.5789, 125.9388 -10865, 67.11866, 129.8029 -10866, 69.02602, 117.0323 -10867, 65.29178, 103.3172 -10868, 67.25249, 122.7412 -10869, 67.7796, 135.983 -10870, 70.45204, 127.5806 -10871, 71.466, 136.1768 -10872, 67.65154, 114.2668 -10873, 67.83536, 133.7095 -10874, 67.38724, 124.5322 -10875, 67.91087, 122.5197 -10876, 65.85116, 119.9984 -10877, 70.53984, 145.7572 -10878, 65.54683, 127.3529 -10879, 66.72193, 124.4206 -10880, 68.08321, 142.2061 -10881, 69.15879, 133.4787 -10882, 66.47756, 121.2549 -10883, 64.37265, 111.2446 -10884, 72.18026, 145.5891 -10885, 69.04682, 141.238 -10886, 66.6879, 132.1882 -10887, 67.05403, 116.8532 -10888, 66.72188, 114.0862 -10889, 67.90779, 121.8853 -10890, 70.29567, 135.9697 -10891, 70.14594, 155.0147 -10892, 64.90698, 106.2489 -10893, 68.15533, 155.6542 -10894, 69.76311, 132.7484 -10895, 65.19432, 125.919 -10896, 68.60431, 130.8794 -10897, 68.31467, 139.5657 -10898, 69.28143, 124.0809 -10899, 66.72096, 120.1462 -10900, 66.2546, 136.0814 -10901, 70.41851, 126.6505 -10902, 69.15107, 122.1065 -10903, 65.90954, 119.7513 -10904, 68.92271, 123.6162 -10905, 68.88487, 130.892 -10906, 64.58076, 150.6921 -10907, 66.58124, 120.6348 -10908, 65.38313, 115.8133 -10909, 68.45964, 104.5201 -10910, 68.08292, 106.1436 -10911, 67.98588, 124.5469 -10912, 65.43668, 96.64915 -10913, 68.35283, 145.9472 -10914, 69.59921, 141.6018 -10915, 67.76728, 122.9415 -10916, 66.54611, 128.5828 -10917, 67.40557, 129.7861 -10918, 71.61858, 150.7782 -10919, 69.78806, 140.5096 -10920, 65.46436, 108.0159 -10921, 69.84842, 146.8392 -10922, 67.59114, 126.3141 -10923, 65.39097, 130.7129 -10924, 69.16565, 114.3258 -10925, 70.8537, 139.41 -10926, 69.64932, 137.3018 -10927, 69.75493, 121.4986 -10928, 67.29615, 126.7282 -10929, 68.00311, 103.2192 -10930, 68.23844, 123.0584 -10931, 69.10888, 139.3881 -10932, 69.16784, 132.2421 -10933, 67.40236, 107.6678 -10934, 66.97412, 115.914 -10935, 68.14213, 149.2678 -10936, 65.77882, 111.7485 -10937, 68.86055, 123.2045 -10938, 68.54418, 125.2815 -10939, 66.24232, 123.1627 -10940, 66.05281, 116.5253 -10941, 66.78253, 124.9536 -10942, 68.22373, 105.4156 -10943, 70.81098, 149.8862 -10944, 67.51193, 126.031 -10945, 68.7292, 144.2782 -10946, 69.03442, 137.2801 -10947, 66.69993, 127.0516 -10948, 67.66684, 137.4976 -10949, 70.04342, 156.4566 -10950, 70.71417, 128.557 -10951, 67.21338, 129.1064 -10952, 69.51067, 139.2973 -10953, 64.84702, 99.24033 -10954, 72.42524, 134.8079 -10955, 69.204, 117.0954 -10956, 70.63329, 144.9647 -10957, 70.21055, 122.4646 -10958, 70.91114, 134.6232 -10959, 67.6791, 111.4813 -10960, 68.51935, 127.5446 -10961, 67.49054, 125.2224 -10962, 70.94239, 127.097 -10963, 68.22454, 140.903 -10964, 67.8618, 122.2685 -10965, 65.79765, 104.3895 -10966, 66.93034, 119.7403 -10967, 65.2842, 114.2336 -10968, 69.92925, 124.9368 -10969, 71.99579, 120.0237 -10970, 67.26327, 114.2686 -10971, 65.66178, 113.5902 -10972, 66.50243, 131.9956 -10973, 67.66008, 144.2397 -10974, 71.24889, 136.9907 -10975, 64.63061, 121.5164 -10976, 69.61857, 133.2628 -10977, 64.98777, 136.4346 -10978, 70.80755, 132.1319 -10979, 67.21426, 105.3348 -10980, 69.62967, 124.178 -10981, 69.67729, 138.7077 -10982, 66.84127, 121.048 -10983, 67.95575, 138.3578 -10984, 67.91859, 103.1035 -10985, 68.29201, 110.3958 -10986, 70.71797, 131.3595 -10987, 68.38443, 143.1785 -10988, 66.02316, 113.8072 -10989, 66.51135, 110.2655 -10990, 68.05802, 110.1398 -10991, 68.09044, 126.9757 -10992, 67.63946, 114.1426 -10993, 68.35095, 126.1809 -10994, 66.916, 111.5822 -10995, 68.87816, 120.9969 -10996, 68.03941, 137.2248 -10997, 71.01294, 131.4479 -10998, 70.58233, 140.0745 -10999, 63.17217, 127.2456 -11000, 69.78974, 145.0778 -11001, 65.67569, 123.1591 -11002, 66.51317, 126.2002 -11003, 68.91807, 132.491 -11004, 67.54731, 105.6248 -11005, 67.16725, 117.6846 -11006, 70.30407, 138.4226 -11007, 67.94455, 118.7549 -11008, 70.17937, 134.815 -11009, 68.84277, 123.0811 -11010, 68.97817, 138.3514 -11011, 67.87172, 144.6941 -11012, 68.30452, 122.0263 -11013, 71.59581, 147.0324 -11014, 70.97786, 149.5895 -11015, 67.04114, 121.5026 -11016, 69.75259, 140.9001 -11017, 69.34609, 145.7199 -11018, 68.47204, 131.8399 -11019, 66.46867, 126.7618 -11020, 71.68515, 121.8591 -11021, 67.58847, 118.7126 -11022, 64.62583, 111.3351 -11023, 68.08467, 120.0023 -11024, 69.04082, 110.3399 -11025, 71.47469, 140.2681 -11026, 68.29856, 127.8518 -11027, 66.48835, 118.2103 -11028, 67.65551, 118.4708 -11029, 69.55965, 130.298 -11030, 68.07654, 109.852 -11031, 69.53635, 116.8769 -11032, 66.55122, 116.5006 -11033, 71.81797, 139.7074 -11034, 69.15297, 126.3293 -11035, 67.38721, 135.5659 -11036, 64.94889, 113.0076 -11037, 68.1155, 136.263 -11038, 67.87942, 118.7067 -11039, 71.15678, 153.5749 -11040, 69.55755, 119.7754 -11041, 67.32935, 133.2197 -11042, 67.03618, 121.7936 -11043, 67.08475, 132.8759 -11044, 68.1142, 123.9844 -11045, 67.25607, 124.3161 -11046, 68.93456, 134.6034 -11047, 70.99654, 137.4312 -11048, 66.66773, 130.2486 -11049, 67.14848, 124.8785 -11050, 68.01276, 119.6507 -11051, 68.37466, 113.7195 -11052, 67.63132, 127.4093 -11053, 68.78129, 130.9664 -11054, 67.4519, 109.2884 -11055, 69.05692, 129.9515 -11056, 71.58656, 151.926 -11057, 71.00215, 133.315 -11058, 65.48034, 115.4925 -11059, 64.84197, 106.4034 -11060, 67.77064, 142.9326 -11061, 68.789, 120.5641 -11062, 67.73549, 122.7611 -11063, 67.28621, 133.0996 -11064, 69.14033, 131.7311 -11065, 63.68432, 113.8885 -11066, 66.48606, 123.3001 -11067, 66.82771, 133.2493 -11068, 65.74972, 106.1128 -11069, 70.15496, 132.2557 -11070, 68.03163, 124.7543 -11071, 68.73994, 136.6091 -11072, 66.67274, 105.848 -11073, 70.44164, 143.7073 -11074, 65.21801, 107.4109 -11075, 69.18892, 110.2616 -11076, 65.7164, 123.6866 -11077, 68.20774, 124.8594 -11078, 65.6085, 122.0489 -11079, 66.99553, 105.2913 -11080, 70.96623, 131.4938 -11081, 64.28708, 99.82706 -11082, 63.60355, 122.3891 -11083, 65.05165, 118.8598 -11084, 67.83126, 121.3917 -11085, 65.8442, 122.9715 -11086, 68.81007, 136.9345 -11087, 69.08438, 127.0724 -11088, 67.94823, 120.2966 -11089, 69.52463, 129.9461 -11090, 67.97769, 144.7071 -11091, 64.96741, 109.2457 -11092, 65.55484, 129.2687 -11093, 68.0052, 117.0722 -11094, 68.62033, 139.7228 -11095, 69.17078, 131.3516 -11096, 68.50566, 124.308 -11097, 67.40238, 137.9187 -11098, 65.09312, 135.5254 -11099, 68.9391, 137.8963 -11100, 69.19971, 138.739 -11101, 68.16393, 131.1518 -11102, 69.91225, 150.7507 -11103, 66.13776, 112.7742 -11104, 65.84225, 135.3841 -11105, 66.51608, 132.3072 -11106, 65.39554, 129.0537 -11107, 68.35417, 135.2684 -11108, 65.85458, 146.8202 -11109, 66.08547, 126.153 -11110, 69.56261, 130.0292 -11111, 68.54207, 137.6653 -11112, 71.27061, 124.2243 -11113, 66.03755, 129.0106 -11114, 68.42545, 124.8365 -11115, 69.56302, 130.9521 -11116, 69.77139, 143.4356 -11117, 70.26466, 123.3935 -11118, 70.02833, 133.9895 -11119, 69.23495, 131.8937 -11120, 67.75034, 118.8212 -11121, 65.59472, 110.1066 -11122, 69.77645, 149.6136 -11123, 69.46001, 145.2864 -11124, 68.43554, 135.4124 -11125, 67.05033, 114.3176 -11126, 66.57575, 127.931 -11127, 66.15214, 128.4151 -11128, 69.05944, 136.7033 -11129, 66.27918, 138.907 -11130, 67.25881, 135.2798 -11131, 67.83695, 127.7505 -11132, 65.96984, 130.823 -11133, 64.81822, 116.6434 -11134, 68.43412, 145.7155 -11135, 67.49384, 113.4681 -11136, 69.01647, 137.0928 -11137, 68.57292, 117.2929 -11138, 67.87708, 123.0777 -11139, 68.99385, 131.2152 -11140, 66.69195, 108.4437 -11141, 65.30731, 118.1043 -11142, 67.63371, 127.8296 -11143, 67.76547, 127.0117 -11144, 69.46199, 124.0249 -11145, 69.137, 123.3187 -11146, 70.76924, 140.8299 -11147, 69.74567, 113.057 -11148, 70.86609, 144.0689 -11149, 67.96674, 148.2726 -11150, 68.52434, 120.6406 -11151, 70.47887, 133.3292 -11152, 68.13987, 133.8585 -11153, 67.62197, 96.74634 -11154, 67.40406, 134.0505 -11155, 70.70493, 144.4624 -11156, 67.0114, 119.1376 -11157, 70.72181, 125.5266 -11158, 65.0906, 113.8999 -11159, 71.66102, 140.5407 -11160, 69.64489, 119.1443 -11161, 66.06372, 140.0926 -11162, 69.53887, 133.4508 -11163, 66.72469, 130.7197 -11164, 69.14268, 161.3014 -11165, 68.47042, 122.3227 -11166, 68.56545, 125.885 -11167, 70.33392, 140.3581 -11168, 64.83586, 128.4784 -11169, 67.00076, 133.8422 -11170, 67.61172, 132.1716 -11171, 69.2627, 122.9415 -11172, 68.05574, 125.929 -11173, 67.01389, 114.5908 -11174, 74.16797, 142.7732 -11175, 67.46023, 123.9729 -11176, 66.59883, 140.0618 -11177, 65.20591, 114.1975 -11178, 69.12252, 143.4608 -11179, 69.04489, 125.9477 -11180, 67.23588, 134.934 -11181, 66.53866, 124.4463 -11182, 69.2864, 139.5923 -11183, 67.22009, 133.8821 -11184, 68.40132, 109.7327 -11185, 68.52054, 130.0861 -11186, 66.77642, 148.078 -11187, 70.20339, 137.6673 -11188, 67.77726, 138.0438 -11189, 65.15073, 99.8475 -11190, 68.77137, 129.1743 -11191, 70.98235, 127.8665 -11192, 67.44011, 138.8552 -11193, 67.5907, 137.1565 -11194, 68.09234, 122.353 -11195, 68.58477, 119.8123 -11196, 63.92414, 94.96925 -11197, 67.13792, 126.5541 -11198, 67.96822, 131.4434 -11199, 67.40732, 117.0252 -11200, 70.08201, 142.9877 -11201, 67.77124, 119.2235 -11202, 69.15034, 127.5277 -11203, 67.00199, 137.932 -11204, 69.23248, 132.5571 -11205, 67.98002, 129.1731 -11206, 67.20279, 102.0226 -11207, 68.98976, 124.2182 -11208, 68.5983, 126.5379 -11209, 66.25204, 146.6106 -11210, 63.77589, 127.3544 -11211, 67.96185, 125.154 -11212, 66.16809, 111.7997 -11213, 68.50417, 131.5771 -11214, 67.70934, 136.3176 -11215, 63.33119, 112.6251 -11216, 70.0918, 139.5179 -11217, 68.30094, 134.7177 -11218, 66.46884, 138.402 -11219, 68.88676, 127.648 -11220, 69.38352, 122.0678 -11221, 69.00483, 137.6559 -11222, 70.05784, 116.6165 -11223, 65.10116, 123.1258 -11224, 71.15266, 130.5181 -11225, 67.87661, 108.9897 -11226, 66.02093, 127.3182 -11227, 67.78396, 114.3916 -11228, 69.83424, 118.4764 -11229, 66.39018, 108.4403 -11230, 67.72204, 116.2668 -11231, 67.0671, 110.0552 -11232, 70.70367, 135.5553 -11233, 70.03981, 138.4753 -11234, 68.47663, 138.7668 -11235, 69.2047, 140.5522 -11236, 65.23394, 112.5476 -11237, 68.89622, 144.4723 -11238, 71.20184, 146.1089 -11239, 73.45384, 142.0065 -11240, 64.68783, 129.2138 -11241, 66.5181, 97.54695 -11242, 66.56509, 111.3128 -11243, 67.75376, 105.9587 -11244, 62.91681, 123.054 -11245, 65.18677, 111.6079 -11246, 66.5578, 116.3412 -11247, 71.6577, 143.3796 -11248, 64.46785, 118.9773 -11249, 66.28272, 112.249 -11250, 68.42883, 119.7445 -11251, 69.38397, 123.9979 -11252, 65.31926, 120.0737 -11253, 68.66193, 123.2477 -11254, 65.97339, 115.6794 -11255, 69.51667, 129.7024 -11256, 68.22985, 122.1816 -11257, 69.83, 136.8307 -11258, 63.61518, 107.139 -11259, 67.99998, 136.646 -11260, 66.89939, 144.4917 -11261, 68.73884, 133.8346 -11262, 69.17398, 139.6385 -11263, 70.58871, 131.6732 -11264, 67.8682, 119.9805 -11265, 68.39892, 134.7468 -11266, 67.88895, 121.1382 -11267, 64.38742, 116.0245 -11268, 66.96466, 129.3706 -11269, 65.86538, 128.5607 -11270, 65.82647, 122.1977 -11271, 70.51289, 138.8583 -11272, 70.42931, 125.3635 -11273, 66.10171, 118.9452 -11274, 65.46048, 131.205 -11275, 70.91162, 140.5079 -11276, 68.69449, 127.6927 -11277, 71.75246, 149.9238 -11278, 64.82819, 143.4204 -11279, 66.6091, 109.1462 -11280, 67.779, 133.1513 -11281, 66.56978, 128.282 -11282, 68.13511, 115.708 -11283, 68.51757, 119.3005 -11284, 68.07689, 121.7782 -11285, 70.14804, 133.7709 -11286, 70.35962, 144.1309 -11287, 67.58689, 118.6697 -11288, 65.03137, 125.7451 -11289, 67.36342, 127.2779 -11290, 65.76034, 109.628 -11291, 67.10885, 122.7538 -11292, 68.75557, 143.1601 -11293, 70.97344, 129.3743 -11294, 65.26892, 127.3683 -11295, 65.66247, 131.7569 -11296, 66.53827, 113.4029 -11297, 66.90975, 128.4934 -11298, 69.51623, 131.5506 -11299, 66.61461, 114.4853 -11300, 71.62343, 119.7512 -11301, 70.05513, 123.5191 -11302, 67.48898, 125.501 -11303, 68.36694, 104.503 -11304, 69.26121, 129.5221 -11305, 67.87778, 130.2365 -11306, 63.20626, 116.3739 -11307, 69.67947, 134.5489 -11308, 67.37164, 124.1367 -11309, 67.66896, 114.7549 -11310, 67.71607, 111.9589 -11311, 67.58095, 136.4722 -11312, 68.11599, 117.5179 -11313, 68.93673, 144.2782 -11314, 67.62937, 120.1249 -11315, 65.94814, 121.1693 -11316, 69.25978, 134.5615 -11317, 65.95706, 128.8891 -11318, 67.99681, 130.7289 -11319, 67.76218, 137.1791 -11320, 66.67503, 122.4975 -11321, 66.98501, 125.9014 -11322, 67.45441, 131.5585 -11323, 66.42304, 127.2729 -11324, 67.08303, 128.7227 -11325, 66.55348, 110.5548 -11326, 66.76286, 139.0637 -11327, 68.62482, 147.0216 -11328, 67.54028, 126.4595 -11329, 68.83293, 131.422 -11330, 67.36371, 116.3804 -11331, 68.47048, 133.9893 -11332, 67.35037, 132.3045 -11333, 68.10823, 125.0725 -11334, 68.51138, 131.3701 -11335, 68.68777, 114.4842 -11336, 66.79129, 121.9002 -11337, 67.79664, 115.3191 -11338, 68.8252, 137.6658 -11339, 66.59959, 127.6122 -11340, 65.16559, 121.0852 -11341, 68.93245, 127.1722 -11342, 69.16312, 132.6592 -11343, 69.49148, 121.6419 -11344, 66.46241, 132.0125 -11345, 69.93643, 141.8868 -11346, 68.58906, 118.2895 -11347, 65.72053, 127.1461 -11348, 67.94094, 104.2896 -11349, 68.11806, 131.5896 -11350, 69.43335, 140.3956 -11351, 68.95852, 130.0709 -11352, 68.00487, 92.95851 -11353, 65.62079, 100.0969 -11354, 69.52389, 118.3399 -11355, 64.75006, 108.3967 -11356, 70.17871, 121.1313 -11357, 68.68662, 148.4892 -11358, 65.90203, 109.0414 -11359, 67.41875, 122.7271 -11360, 68.51834, 125.1308 -11361, 70.02573, 158.5864 -11362, 68.74884, 129.8334 -11363, 69.46722, 120.5883 -11364, 67.36649, 125.7361 -11365, 68.23045, 140.7733 -11366, 67.9815, 125.7448 -11367, 68.72434, 123.4432 -11368, 71.81276, 136.7116 -11369, 63.63521, 101.8813 -11370, 67.11628, 139.6614 -11371, 67.51086, 114.2835 -11372, 69.88008, 124.5219 -11373, 66.37702, 105.9248 -11374, 67.77136, 126.5531 -11375, 67.01918, 131.7105 -11376, 66.55379, 126.9896 -11377, 66.72728, 111.0062 -11378, 69.10831, 139.2123 -11379, 70.36453, 128.2677 -11380, 66.25151, 131.1318 -11381, 67.61697, 107.4615 -11382, 67.69783, 120.3788 -11383, 66.46549, 117.7681 -11384, 67.59571, 130.1581 -11385, 70.4309, 134.4154 -11386, 65.11059, 97.59535 -11387, 67.47219, 135.7524 -11388, 66.65897, 113.2162 -11389, 64.2838, 126.9371 -11390, 68.47012, 127.5937 -11391, 66.25226, 117.278 -11392, 68.30287, 137.5881 -11393, 70.01965, 130.8984 -11394, 66.94063, 132.4786 -11395, 65.36655, 132.6127 -11396, 66.4126, 114.6091 -11397, 68.26581, 125.0861 -11398, 68.2852, 118.9217 -11399, 67.42465, 141.9674 -11400, 63.37186, 115.6628 -11401, 69.72835, 123.179 -11402, 66.38974, 94.80076 -11403, 69.55925, 131.0935 -11404, 69.54116, 117.8275 -11405, 67.83505, 121.0242 -11406, 68.22833, 143.0423 -11407, 68.45736, 132.6294 -11408, 67.01063, 120.9344 -11409, 67.58458, 147.5025 -11410, 67.11171, 111.7266 -11411, 66.05492, 120.0749 -11412, 65.65432, 121.643 -11413, 67.09664, 148.0281 -11414, 68.93253, 109.7752 -11415, 67.50893, 112.6096 -11416, 67.88135, 142.5829 -11417, 70.51084, 130.5145 -11418, 68.07978, 140.6775 -11419, 69.61803, 131.27 -11420, 65.53941, 121.7807 -11421, 66.70491, 134.6241 -11422, 68.82601, 115.8979 -11423, 70.60592, 135.8761 -11424, 67.08397, 124.4171 -11425, 67.58198, 138.0321 -11426, 67.32686, 105.214 -11427, 67.85523, 132.0323 -11428, 66.15898, 146.9268 -11429, 67.95819, 124.9584 -11430, 65.16544, 129.9676 -11431, 69.54452, 146.005 -11432, 66.35121, 121.1278 -11433, 68.26571, 136.2651 -11434, 70.29475, 130.4589 -11435, 68.02599, 142.3053 -11436, 65.53207, 118.0806 -11437, 70.76347, 150.6201 -11438, 65.3266, 123.7902 -11439, 66.51846, 130.4262 -11440, 66.29182, 129.1751 -11441, 66.16228, 125.6023 -11442, 67.97724, 134.5728 -11443, 66.47067, 105.241 -11444, 67.51785, 136.9115 -11445, 69.16624, 135.3094 -11446, 70.0874, 131.5153 -11447, 68.02869, 123.587 -11448, 67.82592, 133.6891 -11449, 67.61981, 104.6315 -11450, 65.9637, 130.3269 -11451, 67.72006, 103.2679 -11452, 67.48496, 91.91782 -11453, 68.24513, 128.9407 -11454, 67.35061, 135.0216 -11455, 68.18075, 135.0446 -11456, 70.672, 124.9177 -11457, 66.81834, 126.3595 -11458, 68.75229, 126.7573 -11459, 67.35564, 126.2663 -11460, 66.95961, 129.0322 -11461, 67.73721, 111.3459 -11462, 67.64532, 140.2121 -11463, 65.21358, 124.1369 -11464, 65.1571, 131.4201 -11465, 67.40133, 122.2223 -11466, 67.65074, 137.8933 -11467, 63.8874, 114.223 -11468, 66.85228, 124.4828 -11469, 65.93881, 125.8178 -11470, 65.07901, 121.0964 -11471, 68.66259, 138.6358 -11472, 66.63069, 144.0267 -11473, 68.1916, 121.9667 -11474, 64.72033, 119.4164 -11475, 67.76005, 129.9217 -11476, 67.78329, 126.7556 -11477, 68.09923, 126.4184 -11478, 69.21335, 128.8556 -11479, 67.75819, 137.4614 -11480, 70.39946, 134.2599 -11481, 65.93766, 127.9704 -11482, 66.11839, 127.0232 -11483, 66.01019, 115.0187 -11484, 71.63081, 135.4107 -11485, 66.62993, 144.5351 -11486, 68.48521, 90.53995 -11487, 68.10699, 129.2909 -11488, 70.27703, 134.3019 -11489, 69.75105, 126.0679 -11490, 68.98237, 115.8649 -11491, 65.64452, 125.3238 -11492, 68.91636, 124.459 -11493, 66.61896, 132.9899 -11494, 68.60604, 125.6796 -11495, 67.30725, 123.1893 -11496, 70.75095, 135.5127 -11497, 67.58887, 124.922 -11498, 64.50132, 123.3747 -11499, 73.27528, 142.7375 -11500, 68.25937, 129.5475 -11501, 67.91946, 118.9415 -11502, 67.31071, 112.7087 -11503, 67.7966, 137.8801 -11504, 71.29452, 144.6277 -11505, 68.27275, 115.1205 -11506, 66.86544, 104.0809 -11507, 67.73325, 106.3248 -11508, 70.2269, 146.4763 -11509, 69.62197, 133.916 -11510, 67.48527, 109.9157 -11511, 68.09415, 131.2306 -11512, 66.09287, 147.1966 -11513, 67.42801, 128.0001 -11514, 69.08861, 111.019 -11515, 65.70473, 119.4562 -11516, 66.52344, 134.9003 -11517, 68.67632, 115.3375 -11518, 68.36099, 131.3844 -11519, 66.34405, 114.0256 -11520, 65.46233, 101.7174 -11521, 65.38562, 92.82921 -11522, 70.29342, 131.0869 -11523, 66.81702, 107.4364 -11524, 67.09018, 126.1098 -11525, 69.10457, 137.515 -11526, 68.6582, 126.1272 -11527, 67.69463, 129.6272 -11528, 69.41766, 135.0258 -11529, 64.90194, 123.585 -11530, 66.4883, 136.8641 -11531, 71.09216, 123.2561 -11532, 71.94657, 134.3756 -11533, 68.15531, 137.0752 -11534, 68.32479, 124.3728 -11535, 70.93105, 119.3693 -11536, 62.55787, 105.7505 -11537, 68.72459, 133.1973 -11538, 68.56969, 123.2818 -11539, 70.70114, 129.2904 -11540, 67.2195, 134.9439 -11541, 69.42099, 145.046 -11542, 65.2954, 122.5997 -11543, 67.5127, 127.4652 -11544, 68.61443, 130.1691 -11545, 68.23227, 129.3011 -11546, 69.06606, 124.9616 -11547, 67.76769, 132.9052 -11548, 67.19954, 131.7003 -11549, 66.19999, 111.3766 -11550, 67.15817, 124.6763 -11551, 65.80976, 119.5688 -11552, 68.72661, 148.7831 -11553, 71.01527, 115.5961 -11554, 70.3378, 122.886 -11555, 66.60132, 117.6958 -11556, 66.10835, 118.365 -11557, 65.54454, 125.6417 -11558, 67.08775, 139.4027 -11559, 70.91229, 151.9319 -11560, 70.05033, 135.0001 -11561, 67.91474, 130.4542 -11562, 70.44997, 140.0553 -11563, 69.43277, 112.1645 -11564, 70.69946, 131.2794 -11565, 69.62487, 120.4721 -11566, 70.95555, 134.9733 -11567, 69.55239, 154.2355 -11568, 66.67652, 116.072 -11569, 68.94487, 136.0275 -11570, 69.06771, 126.5166 -11571, 68.68065, 113.9339 -11572, 69.75765, 118.3588 -11573, 65.74407, 112.5993 -11574, 69.90579, 118.7813 -11575, 67.49642, 144.7324 -11576, 71.55734, 146.4177 -11577, 68.87168, 132.5791 -11578, 67.23421, 117.092 -11579, 68.63376, 119.0942 -11580, 68.65065, 118.3285 -11581, 66.63756, 135.3268 -11582, 67.87931, 113.0279 -11583, 65.95049, 144.2777 -11584, 69.46751, 118.2912 -11585, 65.32821, 107.3803 -11586, 66.76294, 121.2519 -11587, 68.5428, 117.004 -11588, 68.91044, 142.8254 -11589, 68.84368, 150.6553 -11590, 73.38937, 136.7121 -11591, 66.86841, 116.4109 -11592, 67.52516, 107.2826 -11593, 68.13449, 121.8903 -11594, 68.39998, 129.8416 -11595, 68.75545, 141.6232 -11596, 71.22681, 118.0369 -11597, 69.02697, 118.4175 -11598, 69.36506, 149.4627 -11599, 71.48858, 139.2446 -11600, 70.03975, 139.38 -11601, 65.86983, 115.7434 -11602, 64.18612, 112.8632 -11603, 68.22537, 119.4641 -11604, 67.57609, 126.8161 -11605, 68.32838, 125.0752 -11606, 69.7812, 146.0231 -11607, 64.60544, 98.10936 -11608, 69.35659, 137.7401 -11609, 65.08819, 129.1596 -11610, 67.25428, 125.3354 -11611, 67.29744, 111.402 -11612, 69.06367, 128.8616 -11613, 70.66513, 132.245 -11614, 66.34245, 136.4106 -11615, 66.88466, 133.7811 -11616, 69.83988, 132.9299 -11617, 68.64288, 108.615 -11618, 68.78708, 142.8921 -11619, 68.36723, 127.2684 -11620, 71.12176, 119.0967 -11621, 68.55132, 118.0137 -11622, 71.18105, 147.7838 -11623, 68.32621, 125.1014 -11624, 66.83958, 117.8889 -11625, 69.20216, 144.7944 -11626, 66.77853, 128.7692 -11627, 66.4406, 118.4163 -11628, 69.02771, 136.656 -11629, 65.99368, 145.7856 -11630, 68.21133, 126.3564 -11631, 68.81559, 105.3418 -11632, 69.54378, 136.0772 -11633, 67.04297, 120.8592 -11634, 69.61676, 121.0389 -11635, 69.11044, 136.6009 -11636, 64.55954, 123.4204 -11637, 65.79362, 132.5145 -11638, 68.99934, 125.0189 -11639, 66.16092, 137.0073 -11640, 64.3685, 110.0215 -11641, 69.87282, 124.8993 -11642, 66.0047, 116.8211 -11643, 68.96687, 121.3857 -11644, 67.76358, 142.8913 -11645, 67.2019, 118.5255 -11646, 67.67049, 138.3916 -11647, 65.94121, 121.8284 -11648, 62.62398, 113.6392 -11649, 68.6687, 148.4025 -11650, 64.99303, 134.3959 -11651, 70.14061, 133.8105 -11652, 67.33278, 111.0307 -11653, 71.15018, 127.3908 -11654, 68.05094, 123.1092 -11655, 70.68057, 122.0871 -11656, 66.92683, 132.5142 -11657, 67.32022, 121.7055 -11658, 65.96371, 126.1179 -11659, 66.36048, 131.4652 -11660, 70.09062, 141.6373 -11661, 66.77067, 114.939 -11662, 68.7819, 128.8125 -11663, 68.06198, 125.1513 -11664, 66.87471, 124.1839 -11665, 64.991, 120.5915 -11666, 64.24525, 119.3337 -11667, 64.62759, 117.0906 -11668, 67.47845, 125.0172 -11669, 68.38035, 120.3051 -11670, 67.9413, 140.2045 -11671, 69.38765, 120.404 -11672, 69.72585, 141.0221 -11673, 64.85369, 140.5568 -11674, 71.14569, 144.9609 -11675, 67.93166, 116.703 -11676, 65.8737, 130.7339 -11677, 65.27492, 120.7876 -11678, 64.36283, 122.0425 -11679, 66.53787, 116.5946 -11680, 69.52399, 133.0562 -11681, 69.13837, 139.6702 -11682, 67.67203, 123.8558 -11683, 68.95441, 141.2783 -11684, 71.04477, 140.3705 -11685, 71.39529, 149.7633 -11686, 66.54494, 127.3852 -11687, 68.28091, 136.24 -11688, 67.50144, 139.3232 -11689, 68.29474, 133.1216 -11690, 70.15135, 125.669 -11691, 69.41645, 135.8714 -11692, 69.36098, 123.6386 -11693, 67.16252, 130.6726 -11694, 68.53052, 125.4746 -11695, 69.64804, 116.6893 -11696, 66.68536, 116.2552 -11697, 65.89405, 114.064 -11698, 67.96456, 118.3278 -11699, 64.66704, 113.2242 -11700, 67.83132, 131.1598 -11701, 69.37264, 132.3018 -11702, 64.63475, 122.2873 -11703, 68.45736, 121.5602 -11704, 63.66412, 121.3552 -11705, 68.23574, 134.2459 -11706, 69.90933, 145.0568 -11707, 66.34353, 119.2517 -11708, 71.08621, 131.099 -11709, 69.29874, 113.3891 -11710, 69.26027, 136.8925 -11711, 68.3563, 136.5469 -11712, 68.82059, 134.8073 -11713, 67.11847, 123.4971 -11714, 70.16349, 136.7408 -11715, 67.31192, 139.7817 -11716, 65.99526, 117.9879 -11717, 70.32862, 133.2887 -11718, 66.35638, 130.9393 -11719, 65.46699, 113.0275 -11720, 67.06126, 114.7648 -11721, 69.37876, 133.7697 -11722, 68.55299, 132.1181 -11723, 64.28602, 117.6389 -11724, 66.98559, 124.8642 -11725, 68.3511, 129.34 -11726, 70.92088, 138.3304 -11727, 65.62372, 122.5121 -11728, 67.60294, 131.5862 -11729, 65.45098, 109.587 -11730, 65.9003, 124.6232 -11731, 69.28348, 142.1931 -11732, 69.00879, 142.8201 -11733, 69.72132, 127.0407 -11734, 68.26773, 136.2919 -11735, 65.26077, 107.3359 -11736, 66.6262, 136.8962 -11737, 68.5705, 121.4571 -11738, 71.51468, 139.7799 -11739, 67.97982, 121.0927 -11740, 68.26653, 134.6471 -11741, 66.37001, 133.1274 -11742, 65.56004, 114.0317 -11743, 68.20536, 128.2957 -11744, 70.14549, 138.6955 -11745, 66.01422, 114.0106 -11746, 65.59692, 127.598 -11747, 66.31345, 109.8002 -11748, 70.52695, 151.5058 -11749, 65.76106, 113.6272 -11750, 69.682, 135.5456 -11751, 68.90157, 141.6732 -11752, 63.87521, 128.004 -11753, 69.44937, 144.3768 -11754, 70.3846, 166.7687 -11755, 69.16422, 138.4332 -11756, 71.0881, 151.926 -11757, 64.77026, 106.4436 -11758, 69.03944, 115.6827 -11759, 68.3332, 121.3881 -11760, 67.65971, 131.6348 -11761, 65.95743, 129.7027 -11762, 68.25092, 114.8441 -11763, 70.46955, 127.5134 -11764, 69.87183, 154.5964 -11765, 70.761, 128.8214 -11766, 67.36771, 123.046 -11767, 68.31548, 114.5312 -11768, 65.10293, 133.1303 -11769, 65.23562, 107.844 -11770, 70.83969, 136.9762 -11771, 68.39903, 129.656 -11772, 68.20073, 118.2019 -11773, 66.94098, 139.2128 -11774, 66.07977, 131.8414 -11775, 63.36659, 123.006 -11776, 68.65857, 126.6649 -11777, 67.37221, 137.1801 -11778, 68.43509, 136.8554 -11779, 66.22392, 122.5205 -11780, 71.65466, 141.219 -11781, 66.69573, 125.1122 -11782, 66.8559, 122.1614 -11783, 68.02755, 134.7933 -11784, 67.70778, 122.2427 -11785, 63.85135, 120.1494 -11786, 69.93291, 133.902 -11787, 65.84544, 129.7101 -11788, 66.74059, 135.5989 -11789, 66.49611, 132.8285 -11790, 68.53937, 136.0357 -11791, 68.24023, 126.5821 -11792, 70.03063, 139.0857 -11793, 67.70792, 122.902 -11794, 67.72492, 117.4035 -11795, 68.84977, 133.9518 -11796, 68.71268, 126.3643 -11797, 68.0793, 130.2869 -11798, 68.30545, 131.6604 -11799, 70.86867, 126.5751 -11800, 68.31463, 113.4925 -11801, 67.62648, 110.1234 -11802, 71.14779, 142.3998 -11803, 67.34629, 107.1787 -11804, 66.62532, 120.6675 -11805, 66.68854, 122.4703 -11806, 69.90665, 159.966 -11807, 65.51279, 108.7832 -11808, 67.47262, 117.2175 -11809, 66.25672, 116.7766 -11810, 68.30086, 127.6778 -11811, 68.31294, 138.8446 -11812, 68.45399, 108.1145 -11813, 68.64421, 140.159 -11814, 65.31594, 106.6611 -11815, 68.32665, 139.0646 -11816, 69.77082, 136.0617 -11817, 66.20932, 133.0581 -11818, 68.43401, 119.8631 -11819, 65.25387, 116.2822 -11820, 71.7355, 162.0943 -11821, 67.76721, 148.8833 -11822, 70.51655, 141.3628 -11823, 70.4336, 136.7627 -11824, 64.25671, 114.8728 -11825, 69.37609, 128.0026 -11826, 71.07934, 134.5151 -11827, 71.70178, 124.1645 -11828, 67.3987, 111.3275 -11829, 63.62986, 113.608 -11830, 67.13345, 116.9574 -11831, 68.70886, 129.1443 -11832, 67.71809, 123.3103 -11833, 67.72767, 128.2164 -11834, 70.07335, 132.9222 -11835, 64.20874, 124.7975 -11836, 70.10636, 114.9911 -11837, 65.16199, 110.9849 -11838, 68.53018, 125.2053 -11839, 69.79457, 131.1487 -11840, 67.28489, 105.2101 -11841, 69.49036, 129.6225 -11842, 65.42646, 111.7143 -11843, 66.31501, 105.8468 -11844, 65.73484, 104.5094 -11845, 71.30941, 152.3587 -11846, 70.22624, 147.9016 -11847, 68.04495, 130.2388 -11848, 70.27278, 138.2409 -11849, 66.97106, 135.2028 -11850, 68.55277, 123.7852 -11851, 66.17403, 118.887 -11852, 71.37583, 143.3104 -11853, 68.1764, 130.5409 -11854, 66.28408, 142.1004 -11855, 68.15962, 113.7851 -11856, 70.00181, 137.8272 -11857, 65.30659, 129.8103 -11858, 65.67376, 120.5005 -11859, 68.92178, 119.6501 -11860, 67.6359, 140.8418 -11861, 67.91694, 119.803 -11862, 67.48812, 130.9508 -11863, 69.30675, 115.0445 -11864, 67.86395, 132.5698 -11865, 65.71274, 124.7391 -11866, 67.33136, 126.6475 -11867, 69.31735, 122.5178 -11868, 67.52153, 136.845 -11869, 67.79825, 120.662 -11870, 69.26416, 131.5304 -11871, 66.49667, 109.7068 -11872, 66.038, 110.9574 -11873, 68.29789, 116.7817 -11874, 69.05551, 130.8969 -11875, 65.0319, 133.1258 -11876, 69.31651, 138.9581 -11877, 66.21304, 128.8419 -11878, 66.18026, 122.4841 -11879, 68.86646, 120.4853 -11880, 67.86276, 148.8508 -11881, 67.17639, 121.491 -11882, 66.17, 112.3456 -11883, 69.25778, 118.8957 -11884, 72.80628, 150.9784 -11885, 67.49802, 145.0319 -11886, 68.53323, 106.9801 -11887, 67.72701, 110.8524 -11888, 67.403, 123.071 -11889, 70.97371, 137.9285 -11890, 65.88602, 127.0234 -11891, 64.69625, 116.2922 -11892, 65.07999, 107.0743 -11893, 67.33598, 107.7602 -11894, 67.17823, 120.969 -11895, 68.2152, 122.5298 -11896, 68.27877, 120.1926 -11897, 70.32072, 125.2459 -11898, 68.84149, 118.773 -11899, 65.41384, 127.5122 -11900, 66.90698, 122.5176 -11901, 66.92565, 109.6505 -11902, 72.16852, 125.865 -11903, 67.58419, 124.551 -11904, 71.05097, 139.1868 -11905, 68.65329, 121.3343 -11906, 71.13818, 125.2209 -11907, 69.83064, 113.8154 -11908, 69.24294, 128.4726 -11909, 70.80795, 148.2193 -11910, 71.4514, 142.4792 -11911, 68.34795, 137.6452 -11912, 66.96807, 123.2171 -11913, 67.35193, 135.7481 -11914, 66.3123, 119.4157 -11915, 68.38857, 153.2032 -11916, 68.72186, 120.7069 -11917, 64.6156, 124.8206 -11918, 71.04385, 149.3598 -11919, 65.5576, 112.7 -11920, 71.7762, 137.0197 -11921, 67.66805, 129.1137 -11922, 70.38662, 113.1486 -11923, 65.05914, 117.2483 -11924, 69.29376, 144.4311 -11925, 68.92487, 123.064 -11926, 73.23153, 140.2285 -11927, 67.98518, 122.4877 -11928, 66.02174, 106.7391 -11929, 62.50806, 121.7353 -11930, 67.11208, 124.9627 -11931, 67.2525, 131.7284 -11932, 66.86219, 107.2551 -11933, 66.11034, 111.458 -11934, 69.21797, 134.1583 -11935, 66.86285, 109.4149 -11936, 66.72363, 103.4764 -11937, 67.91114, 123.3007 -11938, 70.15546, 129.1033 -11939, 65.1448, 108.0862 -11940, 69.16116, 125.1179 -11941, 69.14544, 144.9626 -11942, 66.79109, 114.8214 -11943, 68.56128, 127.5046 -11944, 67.77908, 120.1861 -11945, 65.8903, 108.1277 -11946, 64.91798, 117.1005 -11947, 65.51983, 115.2811 -11948, 70.39488, 121.3756 -11949, 68.71595, 120.2871 -11950, 69.40879, 142.2191 -11951, 63.95804, 93.96913 -11952, 68.49986, 131.1487 -11953, 65.03967, 114.2779 -11954, 67.09578, 123.9914 -11955, 70.39063, 119.3835 -11956, 69.13445, 124.7073 -11957, 69.81349, 127.3314 -11958, 67.15358, 107.2308 -11959, 66.3247, 110.6354 -11960, 67.2547, 133.9845 -11961, 67.30359, 114.8441 -11962, 68.31411, 126.3453 -11963, 66.84937, 121.8716 -11964, 66.02415, 111.5549 -11965, 69.15659, 122.1897 -11966, 68.93022, 109.462 -11967, 66.03322, 102.562 -11968, 67.12476, 120.4642 -11969, 70.94314, 133.0277 -11970, 67.95293, 137.02 -11971, 68.2514, 152.4285 -11972, 69.5022, 126.022 -11973, 72.63806, 146.3356 -11974, 67.81132, 131.4317 -11975, 71.26903, 166.1956 -11976, 67.11464, 124.0268 -11977, 67.08781, 117.2354 -11978, 66.62197, 140.1115 -11979, 69.37986, 139.854 -11980, 65.72499, 112.01 -11981, 68.05531, 108.54 -11982, 71.06203, 142.837 -11983, 67.01009, 135.9007 -11984, 67.96128, 130.9758 -11985, 69.62918, 143.2022 -11986, 71.18686, 128.6857 -11987, 67.21088, 125.6535 -11988, 69.75744, 138.2061 -11989, 67.93962, 108.2722 -11990, 64.2564, 119.722 -11991, 70.57913, 130.738 -11992, 70.59481, 124.6141 -11993, 69.45839, 148.5158 -11994, 65.57668, 125.7709 -11995, 67.43466, 136.0448 -11996, 69.5304, 133.8402 -11997, 68.71379, 124.41 -11998, 64.83136, 127.0468 -11999, 66.67627, 127.5915 -12000, 67.08247, 118.982 -12001, 69.6942, 113.0169 -12002, 71.94501, 119.7111 -12003, 67.08849, 124.6879 -12004, 66.61029, 125.0603 -12005, 67.39237, 119.2096 -12006, 71.22979, 137.0453 -12007, 68.9821, 126.0012 -12008, 66.29932, 109.1158 -12009, 67.58579, 120.2176 -12010, 69.47049, 140.8544 -12011, 67.6955, 119.0652 -12012, 68.41184, 125.8553 -12013, 66.40097, 137.5308 -12014, 65.84222, 117.4226 -12015, 65.60355, 119.848 -12016, 68.17426, 124.7243 -12017, 68.15865, 143.2579 -12018, 70.33009, 106.6697 -12019, 64.96481, 107.2662 -12020, 70.00114, 142.0097 -12021, 73.12757, 132.9793 -12022, 69.52659, 129.1657 -12023, 65.93632, 114.5142 -12024, 68.30593, 138.0436 -12025, 69.21721, 139.1741 -12026, 69.04623, 126.3741 -12027, 66.51131, 122.9418 -12028, 68.41765, 122.2372 -12029, 67.20049, 119.9224 -12030, 70.56953, 138.8804 -12031, 67.02131, 120.5036 -12032, 60.86977, 108.8633 -12033, 69.59968, 133.8641 -12034, 66.90576, 125.7039 -12035, 65.4273, 104.4564 -12036, 65.45238, 118.7077 -12037, 66.18847, 114.58 -12038, 69.48939, 130.0937 -12039, 67.59082, 110.7189 -12040, 69.67, 119.2428 -12041, 71.81069, 132.4703 -12042, 70.21365, 139.1803 -12043, 64.64602, 111.6086 -12044, 65.31384, 123.2647 -12045, 69.30209, 143.2325 -12046, 67.21984, 126.4004 -12047, 67.89698, 105.7861 -12048, 66.44468, 128.4753 -12049, 66.30217, 125.448 -12050, 66.29508, 123.2967 -12051, 71.81034, 120.6109 -12052, 63.62293, 130.8869 -12053, 70.64303, 135.5782 -12054, 70.85476, 131.1407 -12055, 69.81498, 141.8795 -12056, 66.1487, 120.3851 -12057, 71.03088, 146.4631 -12058, 66.13556, 114.9154 -12059, 65.64932, 132.7519 -12060, 68.58104, 133.0067 -12061, 67.22079, 145.6399 -12062, 66.40365, 123.1849 -12063, 68.52532, 125.7403 -12064, 69.32648, 119.6727 -12065, 65.36659, 116.2944 -12066, 69.04615, 133.2845 -12067, 71.37994, 141.1697 -12068, 67.13772, 110.8047 -12069, 67.3967, 124.7118 -12070, 63.83814, 110.9801 -12071, 68.25068, 132.5773 -12072, 66.36931, 115.305 -12073, 70.85914, 137.5541 -12074, 67.20268, 119.3535 -12075, 65.63288, 113.8987 -12076, 71.2199, 143.6782 -12077, 67.34903, 113.7846 -12078, 67.8991, 110.5785 -12079, 65.07971, 133.4616 -12080, 69.51681, 128.293 -12081, 66.2851, 111.2819 -12082, 69.68337, 134.4863 -12083, 69.65526, 151.1571 -12084, 67.96292, 133.2323 -12085, 71.32203, 140.7135 -12086, 69.05447, 138.7171 -12087, 67.94235, 131.865 -12088, 68.32092, 127.3932 -12089, 69.87217, 129.7374 -12090, 66.83557, 137.7577 -12091, 70.46217, 154.0255 -12092, 67.69032, 133.0156 -12093, 69.10601, 133.5459 -12094, 70.29157, 128.9032 -12095, 70.35631, 116.5879 -12096, 67.3204, 106.7376 -12097, 71.18881, 145.0456 -12098, 65.71934, 130.1984 -12099, 67.40796, 120.6435 -12100, 65.05988, 111.5235 -12101, 68.22719, 108.8273 -12102, 69.53688, 135.964 -12103, 69.94726, 125.3808 -12104, 66.26851, 119.7967 -12105, 66.05849, 118.3292 -12106, 64.25245, 109.5647 -12107, 68.5623, 130.1006 -12108, 67.73521, 119.7671 -12109, 69.59796, 141.5493 -12110, 67.46095, 123.7306 -12111, 68.62535, 111.0908 -12112, 71.25126, 142.7636 -12113, 67.24688, 126.8263 -12114, 67.55773, 125.1369 -12115, 68.57922, 112.0673 -12116, 67.45327, 124.3866 -12117, 72.5565, 145.2378 -12118, 69.50107, 122.6854 -12119, 70.01967, 134.8425 -12120, 67.2572, 132.8406 -12121, 65.22247, 118.3554 -12122, 72.80624, 139.7892 -12123, 69.13179, 117.918 -12124, 67.43053, 121.0933 -12125, 67.28059, 131.4824 -12126, 70.001, 138.0392 -12127, 64.33997, 106.0198 -12128, 67.26735, 124.0488 -12129, 69.17724, 130.3436 -12130, 66.7465, 106.6506 -12131, 69.03417, 148.2146 -12132, 68.34615, 133.4005 -12133, 66.00974, 106.4586 -12134, 69.21559, 134.4881 -12135, 67.07331, 130.6017 -12136, 70.63793, 130.712 -12137, 67.24595, 135.5243 -12138, 68.10686, 117.8123 -12139, 66.90742, 111.9697 -12140, 70.15059, 158.4821 -12141, 71.65992, 136.2884 -12142, 66.80315, 125.755 -12143, 67.04952, 106.7259 -12144, 70.5931, 130.7728 -12145, 65.84071, 122.6521 -12146, 68.79573, 116.2171 -12147, 68.12082, 138.7471 -12148, 64.31209, 135.5388 -12149, 67.99862, 128.5274 -12150, 68.44172, 126.6112 -12151, 71.00788, 143.4924 -12152, 64.07458, 121.5426 -12153, 66.81797, 117.2431 -12154, 68.00128, 137.5348 -12155, 65.46423, 124.8913 -12156, 67.39722, 129.1587 -12157, 66.27501, 100.1148 -12158, 69.6573, 140.3259 -12159, 67.86229, 122.4027 -12160, 68.5617, 121.4645 -12161, 66.77693, 130.2914 -12162, 62.89638, 120.599 -12163, 67.09047, 118.2317 -12164, 67.9903, 114.796 -12165, 70.70392, 130.7639 -12166, 67.82304, 134.663 -12167, 67.15786, 114.8141 -12168, 65.92163, 115.4548 -12169, 70.02526, 125.8528 -12170, 71.12524, 140.4603 -12171, 62.74696, 126.8135 -12172, 68.94674, 140.2945 -12173, 65.25058, 127.0436 -12174, 67.14245, 120.5611 -12175, 68.68723, 130.8492 -12176, 68.62073, 145.2174 -12177, 68.11324, 116.5409 -12178, 66.86238, 119.1125 -12179, 65.40349, 101.3363 -12180, 66.2707, 103.4722 -12181, 66.86583, 116.1746 -12182, 71.66678, 134.8888 -12183, 68.00017, 125.8476 -12184, 68.66882, 139.4216 -12185, 70.35973, 129.0875 -12186, 67.76052, 131.0901 -12187, 69.21882, 134.1076 -12188, 67.74631, 105.6764 -12189, 64.15971, 129.8562 -12190, 67.62334, 110.6548 -12191, 67.89328, 117.09 -12192, 65.48471, 129.224 -12193, 68.32528, 103.4745 -12194, 68.2654, 143.7801 -12195, 72.42057, 144.387 -12196, 66.91696, 123.0398 -12197, 69.43684, 137.6724 -12198, 68.85114, 133.1969 -12199, 68.37809, 122.8097 -12200, 66.05187, 130.5855 -12201, 71.2338, 125.9994 -12202, 67.45676, 108.6551 -12203, 67.2524, 153.3825 -12204, 68.11876, 124.9622 -12205, 70.95119, 140.1531 -12206, 66.29131, 130.8994 -12207, 70.1926, 135.1047 -12208, 67.35325, 134.6156 -12209, 64.46167, 135.8058 -12210, 70.85183, 143.2765 -12211, 64.58449, 122.8244 -12212, 67.11487, 128.9426 -12213, 68.2263, 127.832 -12214, 67.15835, 127.2791 -12215, 66.82518, 132.5872 -12216, 69.46473, 119.5371 -12217, 67.51664, 125.0381 -12218, 67.11773, 118.6122 -12219, 69.12468, 136.3269 -12220, 69.29808, 118.53 -12221, 66.9325, 127.2762 -12222, 70.25476, 131.7454 -12223, 69.99264, 148.4428 -12224, 68.38126, 127.1378 -12225, 69.74475, 139.2463 -12226, 70.44609, 123.8717 -12227, 66.91785, 118.0017 -12228, 64.7893, 122.4913 -12229, 71.65016, 134.6808 -12230, 65.12654, 114.3412 -12231, 68.05579, 127.2138 -12232, 65.79014, 125.9146 -12233, 66.94808, 132.2477 -12234, 65.67741, 121.675 -12235, 69.03795, 108.3441 -12236, 69.86852, 151.5482 -12237, 64.77588, 113.1183 -12238, 70.23879, 127.2366 -12239, 67.63708, 124.7167 -12240, 67.51121, 138.459 -12241, 67.82751, 112.3725 -12242, 70.58388, 156.3417 -12243, 69.66437, 133.6791 -12244, 66.28256, 108.6047 -12245, 65.37604, 123.3283 -12246, 70.65344, 138.4873 -12247, 71.38739, 144.9405 -12248, 69.36593, 124.3237 -12249, 69.67527, 148.3828 -12250, 70.3007, 143.818 -12251, 65.16553, 115.8163 -12252, 68.33872, 132.5597 -12253, 68.38456, 123.041 -12254, 65.55581, 115.654 -12255, 70.17992, 121.6342 -12256, 67.31808, 123.3304 -12257, 68.58594, 115.2254 -12258, 72.37217, 134.1157 -12259, 70.20267, 156.1811 -12260, 68.39107, 116.6836 -12261, 70.2734, 152.4301 -12262, 69.0748, 138.6826 -12263, 68.4253, 125.4829 -12264, 66.13668, 132.1366 -12265, 67.85165, 122.8117 -12266, 66.95818, 114.1717 -12267, 65.98578, 115.7531 -12268, 67.95387, 123.3642 -12269, 66.27293, 117.9091 -12270, 68.52896, 127.998 -12271, 68.2623, 127.3359 -12272, 66.34027, 114.5888 -12273, 69.37304, 137.1683 -12274, 65.26199, 122.0038 -12275, 68.70917, 119.6392 -12276, 65.52726, 123.7422 -12277, 67.69321, 124.275 -12278, 68.9238, 136.1853 -12279, 66.1141, 113.5469 -12280, 68.06372, 127.6532 -12281, 67.59091, 116.9586 -12282, 68.92378, 121.6715 -12283, 69.89731, 148.2053 -12284, 66.99788, 114.555 -12285, 68.16828, 133.9443 -12286, 68.43843, 115.666 -12287, 67.78708, 122.3734 -12288, 69.60158, 121.3371 -12289, 68.25161, 123.1813 -12290, 66.41627, 98.73281 -12291, 68.20539, 116.9375 -12292, 69.21756, 129.3186 -12293, 64.0896, 109.3183 -12294, 66.27351, 127.1996 -12295, 65.67844, 101.6524 -12296, 68.19255, 138.3676 -12297, 69.44838, 137.7202 -12298, 67.19421, 103.7516 -12299, 67.12478, 116.941 -12300, 64.54169, 125.1319 -12301, 69.53675, 141.507 -12302, 67.2357, 122.1695 -12303, 67.95026, 129.204 -12304, 67.426, 126.447 -12305, 67.28909, 122.0906 -12306, 64.99608, 136.7717 -12307, 65.43867, 130.2553 -12308, 68.24171, 120.773 -12309, 67.04762, 119.6362 -12310, 66.53415, 112.9701 -12311, 68.88695, 121.8495 -12312, 67.83407, 138.1722 -12313, 66.37759, 123.5915 -12314, 65.36769, 119.7125 -12315, 70.68318, 135.8685 -12316, 65.49411, 141.3237 -12317, 67.91316, 121.3794 -12318, 70.79802, 126.3383 -12319, 68.51827, 128.0545 -12320, 67.47969, 126.4347 -12321, 65.24066, 123.3877 -12322, 64.32772, 118.5248 -12323, 70.41288, 152.7421 -12324, 66.6237, 115.2339 -12325, 65.90593, 108.2655 -12326, 66.52769, 112.5525 -12327, 69.31461, 126.7857 -12328, 62.87739, 103.6848 -12329, 68.92071, 130.7199 -12330, 66.13747, 108.3422 -12331, 69.99833, 122.5223 -12332, 68.46595, 138.7703 -12333, 69.25966, 133.9125 -12334, 69.93628, 128.1196 -12335, 67.01834, 123.4636 -12336, 69.77194, 130.8096 -12337, 68.65212, 139.4811 -12338, 68.44554, 111.1441 -12339, 67.88896, 118.4146 -12340, 68.68925, 121.2378 -12341, 65.56401, 105.3675 -12342, 69.20112, 139.431 -12343, 68.41482, 134.6557 -12344, 69.09655, 123.0012 -12345, 68.9416, 128.8854 -12346, 67.9139, 127.2376 -12347, 68.29377, 134.5271 -12348, 66.32216, 134.3075 -12349, 68.20057, 126.9387 -12350, 69.63237, 145.2524 -12351, 68.33465, 117.3751 -12352, 69.88231, 143.9678 -12353, 67.11991, 115.2308 -12354, 70.53097, 125.8404 -12355, 67.83481, 135.7228 -12356, 68.8196, 128.3999 -12357, 68.0312, 125.4532 -12358, 69.03316, 134.1379 -12359, 67.26332, 126.7256 -12360, 66.39875, 135.3503 -12361, 64.7363, 109.3803 -12362, 69.25052, 111.9038 -12363, 69.50292, 146.6922 -12364, 68.11694, 128.3326 -12365, 69.37864, 126.2731 -12366, 66.1219, 115.3591 -12367, 65.43542, 127.2422 -12368, 70.94749, 144.8983 -12369, 65.68418, 114.6552 -12370, 68.70422, 131.8082 -12371, 68.3036, 136.9984 -12372, 71.1963, 141.1763 -12373, 68.57603, 141.8451 -12374, 70.22202, 128.7039 -12375, 67.08514, 119.7705 -12376, 65.68889, 120.9908 -12377, 67.51772, 125.2817 -12378, 70.30046, 138.3313 -12379, 68.71184, 119.1353 -12380, 69.11819, 133.7623 -12381, 65.66806, 122.5953 -12382, 64.35738, 104.8098 -12383, 69.50005, 135.985 -12384, 67.99347, 119.7518 -12385, 68.84027, 125.351 -12386, 66.65667, 127.9004 -12387, 64.57652, 125.8364 -12388, 68.25611, 130.0452 -12389, 70.1304, 130.4494 -12390, 69.15411, 137.9543 -12391, 66.00913, 129.3445 -12392, 65.25623, 129.8806 -12393, 65.38594, 111.8541 -12394, 68.92278, 118.3422 -12395, 67.05723, 133.6179 -12396, 67.30535, 136.954 -12397, 64.88411, 140.0156 -12398, 66.28154, 100.9385 -12399, 70.93763, 135.4012 -12400, 70.63453, 133.6095 -12401, 69.46661, 128.8735 -12402, 67.96774, 143.9946 -12403, 70.0157, 134.9027 -12404, 68.46486, 102.6906 -12405, 65.54388, 108.3486 -12406, 69.57076, 134.1768 -12407, 68.70712, 122.7974 -12408, 66.47937, 126.4091 -12409, 65.6515, 138.9004 -12410, 64.8085, 118.4505 -12411, 69.20954, 128.4521 -12412, 71.2453, 140.3166 -12413, 66.78091, 133.1914 -12414, 66.66698, 118.2094 -12415, 67.46012, 130.3946 -12416, 68.39734, 132.1677 -12417, 66.05758, 106.7136 -12418, 70.74289, 129.1447 -12419, 69.0472, 112.5379 -12420, 65.25487, 113.0535 -12421, 70.83969, 136.1852 -12422, 66.48308, 129.5826 -12423, 64.86362, 131.524 -12424, 64.89809, 104.151 -12425, 66.91413, 131.8421 -12426, 68.79811, 138.0315 -12427, 68.26946, 139.016 -12428, 68.87518, 145.2094 -12429, 68.51555, 116.7877 -12430, 64.25854, 117.9964 -12431, 71.84377, 149.3361 -12432, 71.08684, 148.1875 -12433, 64.2151, 121.7215 -12434, 62.63566, 108.8842 -12435, 65.81205, 120.7095 -12436, 67.33833, 137.2586 -12437, 65.81917, 113.1984 -12438, 67.99186, 114.8133 -12439, 69.11226, 137.8176 -12440, 71.84641, 132.2059 -12441, 72.71856, 134.3143 -12442, 67.57166, 127.0006 -12443, 66.86178, 124.9583 -12444, 67.18912, 131.2947 -12445, 67.68132, 122.2843 -12446, 66.23406, 113.5248 -12447, 64.74007, 87.3791 -12448, 67.97426, 120.9928 -12449, 70.57709, 131.9995 -12450, 72.00389, 147.4338 -12451, 67.60891, 130.389 -12452, 66.68001, 118.2663 -12453, 70.70574, 124.06 -12454, 67.75154, 123.0129 -12455, 69.21119, 134.49 -12456, 70.08521, 120.7698 -12457, 68.45585, 122.5019 -12458, 68.86915, 129.1183 -12459, 67.92791, 117.2508 -12460, 70.4825, 136.7279 -12461, 69.32572, 122.6077 -12462, 67.52547, 148.9945 -12463, 65.62965, 131.0125 -12464, 67.89239, 128.1211 -12465, 68.12894, 116.1115 -12466, 69.54996, 146.4172 -12467, 66.8999, 125.8277 -12468, 67.60053, 113.744 -12469, 65.23102, 127.9767 -12470, 68.51538, 127.1196 -12471, 71.76225, 123.2438 -12472, 66.54347, 132.6527 -12473, 66.45278, 123.5997 -12474, 69.74047, 128.9735 -12475, 68.15836, 129.8696 -12476, 66.03258, 120.1757 -12477, 64.73717, 113.7689 -12478, 65.58498, 112.9359 -12479, 66.54497, 122.2424 -12480, 69.41557, 140.4464 -12481, 70.6516, 148.6669 -12482, 69.55188, 132.2138 -12483, 67.89495, 132.9517 -12484, 67.31471, 138.8578 -12485, 63.75295, 118.195 -12486, 67.2233, 125.6088 -12487, 67.54931, 126.4352 -12488, 66.91107, 122.745 -12489, 69.09424, 122.6279 -12490, 67.09958, 118.5781 -12491, 70.47341, 140.9829 -12492, 69.68349, 127.9623 -12493, 68.56579, 133.3859 -12494, 67.43454, 123.6383 -12495, 66.55213, 115.8177 -12496, 68.0387, 138.3228 -12497, 69.78338, 124.3807 -12498, 67.94391, 131.2025 -12499, 66.63849, 126.9132 -12500, 68.45079, 127.414 -12501, 70.07106, 113.5241 -12502, 69.31026, 114.3171 -12503, 71.75837, 135.6142 -12504, 69.71622, 140.662 -12505, 66.99944, 130.037 -12506, 72.48928, 138.7557 -12507, 66.28225, 117.5711 -12508, 66.00195, 130.7777 -12509, 68.5202, 118.5414 -12510, 67.26404, 121.9478 -12511, 65.81057, 120.8452 -12512, 68.39663, 140.8006 -12513, 69.54723, 139.1849 -12514, 68.82906, 126.3249 -12515, 67.68691, 121.9448 -12516, 68.60051, 110.8007 -12517, 67.02558, 127.5396 -12518, 69.32334, 139.7775 -12519, 67.76623, 123.344 -12520, 66.76197, 109.2005 -12521, 67.098, 117.2866 -12522, 68.96237, 136.63 -12523, 66.68073, 136.6551 -12524, 70.07508, 129.9514 -12525, 66.38605, 126.2915 -12526, 69.05442, 131.9593 -12527, 69.49012, 140.5831 -12528, 68.12397, 128.8785 -12529, 68.40195, 139.1229 -12530, 69.40097, 132.3228 -12531, 69.55725, 143.996 -12532, 68.71036, 126.5518 -12533, 65.21573, 116.8032 -12534, 69.36761, 135.5201 -12535, 69.12651, 139.0078 -12536, 66.89099, 137.6137 -12537, 65.4888, 134.2944 -12538, 68.20845, 135.3887 -12539, 66.29682, 111.8809 -12540, 67.53607, 111.545 -12541, 67.54041, 125.1986 -12542, 69.88988, 144.1664 -12543, 68.55332, 110.9255 -12544, 67.19021, 125.038 -12545, 67.35534, 131.0543 -12546, 71.49612, 138.8885 -12547, 68.82757, 130.4426 -12548, 69.11661, 119.6437 -12549, 64.63422, 127.7079 -12550, 64.58205, 100.557 -12551, 65.9946, 124.2257 -12552, 69.0528, 129.5877 -12553, 69.80507, 154.9924 -12554, 68.4173, 144.9684 -12555, 67.12852, 116.2219 -12556, 66.85993, 117.9136 -12557, 68.75888, 125.4433 -12558, 66.11846, 131.5019 -12559, 64.64742, 112.8034 -12560, 65.59808, 122.1915 -12561, 69.41123, 132.3657 -12562, 69.86767, 118.2363 -12563, 67.74429, 115.3566 -12564, 69.57154, 126.382 -12565, 66.93873, 126.2335 -12566, 67.32014, 130.6583 -12567, 67.45694, 113.2988 -12568, 70.22599, 135.254 -12569, 66.03134, 111.0406 -12570, 68.38498, 119.4007 -12571, 68.63206, 127.0706 -12572, 71.10527, 128.6674 -12573, 68.03731, 116.0219 -12574, 66.68726, 121.7474 -12575, 66.76614, 104.8083 -12576, 70.56704, 122.4718 -12577, 64.74464, 99.72601 -12578, 67.86554, 108.1438 -12579, 66.55172, 121.0529 -12580, 70.99403, 138.9722 -12581, 68.30178, 125.0544 -12582, 67.90843, 134.2875 -12583, 68.97747, 128.9206 -12584, 66.45071, 117.6418 -12585, 66.34292, 112.5733 -12586, 68.24008, 135.0878 -12587, 66.51948, 113.9957 -12588, 64.81528, 121.5109 -12589, 65.92603, 107.3163 -12590, 68.65183, 130.1741 -12591, 65.82599, 107.6702 -12592, 70.27704, 135.9964 -12593, 68.84244, 117.9071 -12594, 69.4594, 133.9838 -12595, 67.2644, 127.0181 -12596, 71.28234, 134.0145 -12597, 69.14869, 125.0073 -12598, 69.431, 124.9502 -12599, 71.17918, 135.0057 -12600, 66.45775, 134.571 -12601, 67.25106, 117.7898 -12602, 68.36867, 135.2021 -12603, 68.58773, 148.6514 -12604, 64.15953, 112.875 -12605, 68.69334, 138.6052 -12606, 68.72121, 148.0597 -12607, 67.7996, 130.667 -12608, 64.32884, 109.5509 -12609, 67.22786, 121.3151 -12610, 70.60144, 137.5583 -12611, 68.79806, 135.2602 -12612, 67.94924, 120.2593 -12613, 62.57873, 96.11534 -12614, 68.41549, 113.0067 -12615, 69.01353, 141.7589 -12616, 65.74831, 139.774 -12617, 71.81629, 132.7127 -12618, 69.37019, 119.1947 -12619, 66.40565, 115.9791 -12620, 70.68742, 135.3749 -12621, 66.25324, 126.0192 -12622, 68.71076, 122.2045 -12623, 67.26793, 116.1981 -12624, 69.09202, 146.6689 -12625, 72.35308, 139.6808 -12626, 69.04342, 134.08 -12627, 70.73303, 143.2831 -12628, 68.36911, 144.1253 -12629, 72.1229, 157.6616 -12630, 67.91302, 120.1835 -12631, 70.73081, 127.2146 -12632, 68.66401, 116.9992 -12633, 65.75594, 127.2348 -12634, 65.95131, 105.3219 -12635, 67.46588, 115.8773 -12636, 69.63874, 132.5026 -12637, 68.20571, 128.1029 -12638, 70.12075, 143.4512 -12639, 69.33824, 128.5652 -12640, 65.04011, 120.0564 -12641, 67.13403, 126.3556 -12642, 65.34843, 117.1063 -12643, 70.1839, 123.7718 -12644, 66.3978, 124.6117 -12645, 68.70525, 134.5751 -12646, 68.48066, 133.0611 -12647, 68.83329, 134.5825 -12648, 70.39459, 127.3152 -12649, 65.43292, 104.3383 -12650, 70.09461, 135.1397 -12651, 68.76244, 154.024 -12652, 69.35571, 128.516 -12653, 67.04356, 132.4941 -12654, 72.99632, 157.8664 -12655, 67.38058, 152.7149 -12656, 64.82189, 116.4536 -12657, 66.06893, 114.6445 -12658, 68.60001, 125.1518 -12659, 67.05224, 131.9155 -12660, 66.25923, 107.9334 -12661, 69.41316, 139.3844 -12662, 69.8588, 144.9464 -12663, 69.90593, 132.8098 -12664, 69.7052, 132.7173 -12665, 69.63663, 140.4612 -12666, 67.99399, 117.8776 -12667, 69.70857, 126.5658 -12668, 69.33609, 133.7583 -12669, 71.24983, 137.2504 -12670, 65.96176, 107.8183 -12671, 67.58381, 135.656 -12672, 69.98799, 129.377 -12673, 69.93978, 147.0146 -12674, 68.58929, 115.6961 -12675, 69.65638, 131.1921 -12676, 68.67033, 126.5642 -12677, 69.2782, 131.6396 -12678, 67.07981, 125.7229 -12679, 67.70003, 136.0609 -12680, 68.54715, 120.4416 -12681, 69.91993, 135.924 -12682, 66.98397, 126.9148 -12683, 65.48047, 108.2565 -12684, 69.07402, 130.6905 -12685, 63.83188, 114.8563 -12686, 67.4815, 122.7798 -12687, 66.69107, 106.3925 -12688, 67.34666, 122.1811 -12689, 68.28734, 116.2769 -12690, 71.91512, 132.4214 -12691, 70.24886, 133.7254 -12692, 67.30216, 137.5719 -12693, 70.24521, 126.039 -12694, 69.1209, 138.9805 -12695, 67.3079, 119.5167 -12696, 68.67791, 129.9471 -12697, 68.60468, 115.5747 -12698, 66.93601, 122.582 -12699, 69.67793, 132.9082 -12700, 66.9517, 91.22631 -12701, 68.2565, 134.6433 -12702, 70.76077, 148.3999 -12703, 70.30436, 136.2413 -12704, 69.60703, 126.7617 -12705, 66.90735, 120.1773 -12706, 64.22389, 117.6816 -12707, 64.36145, 114.8832 -12708, 71.54765, 146.309 -12709, 68.14466, 119.8608 -12710, 68.54325, 127.7214 -12711, 64.64412, 106.2843 -12712, 66.19854, 113.9223 -12713, 65.56816, 141.3379 -12714, 66.58173, 106.1254 -12715, 67.63379, 136.1838 -12716, 70.49459, 141.9638 -12717, 70.17511, 124.9465 -12718, 67.13912, 131.6294 -12719, 70.74149, 132.4381 -12720, 69.09462, 142.8177 -12721, 67.47896, 127.436 -12722, 68.55825, 143.5287 -12723, 69.07966, 147.9838 -12724, 70.35436, 121.3196 -12725, 62.70318, 92.59193 -12726, 67.59562, 138.9259 -12727, 68.14798, 140.0075 -12728, 69.27571, 155.7563 -12729, 69.07472, 120.2972 -12730, 69.09439, 117.6279 -12731, 68.6144, 130.4149 -12732, 62.398, 89.1971 -12733, 69.12922, 139.877 -12734, 67.33389, 126.0962 -12735, 65.08376, 131.736 -12736, 71.12569, 137.2863 -12737, 68.07031, 117.5196 -12738, 65.54023, 117.5058 -12739, 70.37267, 124.7668 -12740, 65.68487, 124.5331 -12741, 65.1396, 127.773 -12742, 72.15147, 148.5491 -12743, 65.05276, 103.6491 -12744, 65.00704, 95.01295 -12745, 69.52238, 134.7143 -12746, 66.51322, 114.55 -12747, 70.00383, 138.3081 -12748, 65.98143, 123.4941 -12749, 66.13459, 101.1344 -12750, 69.87842, 138.228 -12751, 66.66719, 126.0355 -12752, 66.89316, 139.7169 -12753, 68.49506, 122.879 -12754, 66.52004, 126.5041 -12755, 67.96291, 114.4191 -12756, 66.29951, 126.7682 -12757, 70.03377, 120.3446 -12758, 66.20352, 107.0425 -12759, 68.22162, 124.1618 -12760, 68.33014, 132.5046 -12761, 66.68585, 130.3999 -12762, 65.81999, 112.6146 -12763, 66.79436, 119.7033 -12764, 70.05224, 115.3835 -12765, 66.30361, 124.7241 -12766, 65.92122, 121.5372 -12767, 71.33496, 138.7443 -12768, 65.93792, 131.6449 -12769, 66.80261, 119.4744 -12770, 67.88451, 127.7094 -12771, 68.57765, 124.3734 -12772, 67.63851, 131.859 -12773, 67.44645, 128.5003 -12774, 70.78508, 132.6894 -12775, 66.20549, 114.1363 -12776, 64.01757, 101.5315 -12777, 69.51099, 144.765 -12778, 66.19759, 100.7474 -12779, 68.114, 137.3945 -12780, 68.89748, 114.6844 -12781, 66.08796, 128.0759 -12782, 65.69337, 140.7693 -12783, 66.84988, 130.5163 -12784, 68.13243, 126.5235 -12785, 65.85355, 121.6208 -12786, 66.46148, 111.3949 -12787, 70.16892, 135.7384 -12788, 70.47648, 126.461 -12789, 68.83992, 125.6376 -12790, 68.16224, 124.5737 -12791, 69.75698, 115.3657 -12792, 67.07932, 121.7021 -12793, 66.45796, 133.9175 -12794, 68.10467, 124.2443 -12795, 70.18297, 148.1467 -12796, 71.06812, 136.7636 -12797, 66.12689, 137.2242 -12798, 70.02419, 132.5 -12799, 63.95983, 110.9671 -12800, 68.29421, 138.0009 -12801, 66.78712, 125.2584 -12802, 70.31549, 118.2843 -12803, 67.87672, 115.7531 -12804, 64.98948, 115.7612 -12805, 65.73625, 103.3949 -12806, 67.18713, 113.77 -12807, 63.7027, 111.5551 -12808, 72.22326, 146.7823 -12809, 68.74167, 125.3766 -12810, 64.83708, 122.7266 -12811, 67.87607, 130.0423 -12812, 67.37786, 118.0533 -12813, 65.1186, 129.3106 -12814, 69.23622, 125.7028 -12815, 65.09077, 111.4222 -12816, 70.31072, 126.3652 -12817, 68.26941, 129.7347 -12818, 67.6398, 137.9234 -12819, 66.55938, 122.7599 -12820, 68.89767, 142.6513 -12821, 67.73688, 138.6194 -12822, 69.4266, 133.8572 -12823, 69.1415, 121.8042 -12824, 70.88688, 138.8487 -12825, 67.4992, 134.3789 -12826, 67.48566, 129.2513 -12827, 65.80458, 122.6509 -12828, 69.4832, 108.9489 -12829, 64.95436, 112.0785 -12830, 66.4238, 111.2181 -12831, 67.79983, 120.5562 -12832, 70.35784, 145.1015 -12833, 65.93427, 124.9365 -12834, 72.14741, 152.714 -12835, 69.02285, 141.9567 -12836, 67.95237, 114.0617 -12837, 64.88273, 120.3929 -12838, 66.88904, 108.9186 -12839, 68.16321, 121.259 -12840, 67.31487, 126.8506 -12841, 70.8218, 138.0774 -12842, 69.2295, 125.0231 -12843, 67.98989, 116.7557 -12844, 69.10378, 147.7595 -12845, 65.19866, 114.6411 -12846, 70.6943, 130.9471 -12847, 67.95665, 141.4925 -12848, 64.71795, 110.6855 -12849, 67.77693, 121.1735 -12850, 66.65039, 109.8503 -12851, 68.66554, 114.5278 -12852, 70.60726, 141.8837 -12853, 71.14677, 131.3756 -12854, 66.39228, 120.6284 -12855, 66.31944, 115.0054 -12856, 68.59114, 142.5636 -12857, 69.32005, 114.6814 -12858, 69.02579, 131.297 -12859, 69.92046, 135.0288 -12860, 69.21391, 109.8219 -12861, 70.50711, 135.185 -12862, 68.22468, 122.0414 -12863, 64.42053, 125.1623 -12864, 66.66605, 121.3495 -12865, 66.25687, 134.2611 -12866, 69.05579, 114.318 -12867, 63.6611, 101.3054 -12868, 65.78795, 140.3781 -12869, 65.16658, 102.3367 -12870, 68.15122, 135.4779 -12871, 69.38984, 135.9126 -12872, 65.78621, 122.6126 -12873, 68.2597, 120.6736 -12874, 69.52348, 124.3154 -12875, 68.04861, 130.1638 -12876, 65.09478, 133.7183 -12877, 67.92363, 126.3504 -12878, 67.96986, 136.9789 -12879, 68.83982, 125.9746 -12880, 66.47793, 119.8167 -12881, 69.22774, 128.9968 -12882, 66.9221, 132.8417 -12883, 68.83985, 120.0603 -12884, 71.58499, 167.8045 -12885, 68.54065, 137.9769 -12886, 66.50759, 117.7984 -12887, 69.98011, 126.927 -12888, 70.8198, 122.0349 -12889, 67.05275, 127.4661 -12890, 68.3326, 143.762 -12891, 68.9573, 132.012 -12892, 67.34256, 137.6082 -12893, 71.28917, 128.8965 -12894, 68.7694, 130.0066 -12895, 68.12962, 126.3372 -12896, 66.39812, 117.4012 -12897, 65.23885, 137.3238 -12898, 66.44001, 127.4717 -12899, 70.93311, 137.8625 -12900, 67.31072, 128.5575 -12901, 70.72584, 130.6364 -12902, 68.11148, 126.047 -12903, 68.46257, 147.0739 -12904, 68.0129, 114.4355 -12905, 66.96139, 131.5032 -12906, 68.42376, 127.3903 -12907, 69.0915, 127.5051 -12908, 67.83572, 130.7118 -12909, 67.0104, 116.4421 -12910, 67.9803, 132.8359 -12911, 69.40901, 140.1526 -12912, 68.17666, 143.5168 -12913, 68.82236, 122.6466 -12914, 69.59401, 120.2946 -12915, 69.79599, 139.6795 -12916, 69.57154, 123.7094 -12917, 66.17372, 130.3693 -12918, 68.56311, 145.1008 -12919, 68.00701, 148.8339 -12920, 68.20627, 120.9951 -12921, 68.41836, 124.8028 -12922, 66.87925, 124.0546 -12923, 67.17012, 128.4136 -12924, 67.01381, 134.9587 -12925, 66.27923, 122.9582 -12926, 66.31152, 128.7993 -12927, 67.42453, 129.8299 -12928, 67.2625, 129.1298 -12929, 66.85661, 115.8562 -12930, 68.30887, 119.1643 -12931, 67.3835, 146.1098 -12932, 70.43142, 150.9456 -12933, 69.94726, 141.3873 -12934, 69.17938, 135.8499 -12935, 66.56538, 116.9042 -12936, 68.67972, 143.4218 -12937, 64.81954, 99.80369 -12938, 70.49047, 126.5028 -12939, 68.10777, 126.735 -12940, 68.41482, 125.2798 -12941, 68.2052, 120.8053 -12942, 64.71503, 133.1455 -12943, 65.65007, 114.6888 -12944, 70.11281, 133.7564 -12945, 66.9713, 122.9566 -12946, 67.37563, 124.9457 -12947, 70.20955, 119.9669 -12948, 65.60368, 117.7954 -12949, 65.99327, 126.8598 -12950, 64.12511, 114.9245 -12951, 67.89782, 113.589 -12952, 69.76854, 126.3972 -12953, 66.68039, 123.661 -12954, 71.3082, 129.1532 -12955, 68.92387, 153.6931 -12956, 70.98202, 137.4036 -12957, 70.09326, 121.8786 -12958, 68.2703, 123.8796 -12959, 68.43097, 130.4136 -12960, 67.48521, 122.9673 -12961, 65.28618, 124.4946 -12962, 69.12615, 128.2417 -12963, 70.05579, 135.7679 -12964, 66.26599, 121.7592 -12965, 67.66477, 126.609 -12966, 67.29123, 137.2435 -12967, 68.77873, 118.0382 -12968, 69.70939, 137.5337 -12969, 70.67986, 141.8843 -12970, 69.66769, 139.9762 -12971, 67.15104, 132.4239 -12972, 68.98937, 135.7329 -12973, 67.42939, 124.1274 -12974, 67.78729, 137.1755 -12975, 64.43099, 145.4739 -12976, 67.67702, 121.8942 -12977, 69.99401, 132.7112 -12978, 69.71816, 117.6143 -12979, 69.41796, 133.882 -12980, 64.96373, 123.9581 -12981, 67.53047, 132.6457 -12982, 69.31009, 129.1492 -12983, 66.40906, 134.3405 -12984, 68.40781, 128.4416 -12985, 66.74614, 114.8763 -12986, 67.0559, 124.9848 -12987, 69.04014, 111.9708 -12988, 69.84443, 135.6318 -12989, 68.11787, 109.8296 -12990, 67.96711, 127.1728 -12991, 64.26845, 109.7383 -12992, 66.38069, 113.3612 -12993, 69.65186, 141.0062 -12994, 67.50995, 111.4264 -12995, 68.59905, 149.7418 -12996, 65.38762, 113.4099 -12997, 69.754, 139.7871 -12998, 66.40135, 122.4853 -12999, 69.97896, 119.6409 -13000, 69.31752, 133.772 -13001, 65.80662, 144.3102 -13002, 66.85982, 140.6987 -13003, 70.3717, 135.4761 -13004, 66.50564, 129.2973 -13005, 66.29807, 121.9226 -13006, 70.79659, 138.0529 -13007, 66.9188, 143.6876 -13008, 67.86452, 101.8559 -13009, 69.26225, 135.6449 -13010, 63.83449, 115.8313 -13011, 68.60409, 127.3747 -13012, 67.03402, 123.9735 -13013, 67.39559, 119.7485 -13014, 65.21454, 131.9907 -13015, 68.28765, 126.7902 -13016, 69.10579, 128.4257 -13017, 68.35335, 130.4412 -13018, 68.07782, 127.7648 -13019, 67.84152, 132.4672 -13020, 65.28594, 127.6072 -13021, 68.1933, 122.6322 -13022, 67.74053, 114.4872 -13023, 67.04758, 123.7627 -13024, 65.4041, 137.16 -13025, 66.17018, 115.5937 -13026, 66.80868, 116.272 -13027, 67.29029, 125.8577 -13028, 70.09532, 116.7931 -13029, 66.80156, 120.9025 -13030, 66.63488, 118.1354 -13031, 69.56506, 125.3899 -13032, 70.60646, 128.7028 -13033, 71.964, 130.4404 -13034, 66.99211, 106.3826 -13035, 64.63998, 124.5983 -13036, 64.46369, 113.8868 -13037, 67.48073, 118.8642 -13038, 71.0274, 149.722 -13039, 66.57652, 124.7905 -13040, 68.8576, 130.9752 -13041, 66.25434, 118.0379 -13042, 68.59622, 119.9239 -13043, 70.5651, 124.2969 -13044, 68.19129, 135.3963 -13045, 68.631, 145.9199 -13046, 66.95137, 121.817 -13047, 65.73162, 120.4355 -13048, 69.39596, 131.8885 -13049, 68.4177, 155.2243 -13050, 68.5373, 118.7651 -13051, 65.89888, 119.7408 -13052, 71.79395, 134.9478 -13053, 64.61857, 126.0336 -13054, 67.95083, 135.7588 -13055, 69.24678, 120.7578 -13056, 69.09927, 117.0254 -13057, 68.66631, 117.8159 -13058, 67.96796, 128.4943 -13059, 68.36887, 110.7174 -13060, 66.49471, 127.7524 -13061, 66.10701, 133.2153 -13062, 69.66455, 150.5807 -13063, 70.8961, 127.1952 -13064, 63.23763, 119.1795 -13065, 67.19734, 117.7393 -13066, 67.85778, 123.0461 -13067, 67.22801, 131.9317 -13068, 69.7057, 131.1593 -13069, 68.84395, 107.803 -13070, 72.34677, 133.7865 -13071, 71.26584, 134.0578 -13072, 69.44174, 122.8241 -13073, 67.29233, 118.7096 -13074, 66.81163, 101.159 -13075, 68.86359, 128.1226 -13076, 66.49126, 126.8115 -13077, 68.04236, 140.7966 -13078, 70.0192, 122.6033 -13079, 67.83242, 130.1143 -13080, 69.44946, 138.989 -13081, 67.26935, 116.3762 -13082, 66.54396, 127.1921 -13083, 70.04568, 118.2566 -13084, 66.75437, 112.4253 -13085, 64.46778, 104.1932 -13086, 66.85722, 111.022 -13087, 67.45724, 133.9342 -13088, 69.45109, 132.5114 -13089, 66.60452, 129.8988 -13090, 67.06108, 131.6097 -13091, 68.42116, 113.0609 -13092, 69.493, 116.8366 -13093, 70.46411, 140.5955 -13094, 68.9279, 112.8921 -13095, 64.0927, 122.0211 -13096, 69.8857, 120.2619 -13097, 70.98109, 133.7989 -13098, 70.75683, 134.2516 -13099, 69.29064, 122.7467 -13100, 67.34605, 118.8282 -13101, 71.60653, 145.4865 -13102, 68.73423, 127.9355 -13103, 70.23183, 132.2244 -13104, 67.73289, 128.6208 -13105, 64.52831, 119.7817 -13106, 66.63655, 116.8298 -13107, 69.76077, 116.2196 -13108, 65.56703, 127.0848 -13109, 68.77343, 121.1138 -13110, 69.40668, 140.9985 -13111, 69.43534, 137.473 -13112, 68.30511, 142.7223 -13113, 63.7744, 115.913 -13114, 65.68321, 128.3344 -13115, 68.33718, 120.9561 -13116, 69.86703, 147.7559 -13117, 65.7249, 124.3421 -13118, 68.1319, 130.2268 -13119, 70.9089, 139.7271 -13120, 67.84388, 108.6559 -13121, 67.27281, 133.2515 -13122, 66.14906, 124.3751 -13123, 67.9919, 118.8748 -13124, 67.75147, 129.3329 -13125, 69.95487, 126.1978 -13126, 65.25717, 130.0705 -13127, 68.78511, 136.2792 -13128, 68.53751, 144.8563 -13129, 66.68688, 120.6248 -13130, 65.88737, 129.3868 -13131, 67.70939, 124.5234 -13132, 63.53168, 116.9152 -13133, 69.49591, 139.4006 -13134, 70.25639, 133.0404 -13135, 68.33535, 142.8504 -13136, 68.20992, 143.3398 -13137, 71.61247, 131.4263 -13138, 68.30837, 133.0776 -13139, 68.79576, 128.3906 -13140, 66.11011, 110.656 -13141, 71.17064, 151.2357 -13142, 65.96844, 132.1259 -13143, 69.49436, 131.419 -13144, 66.1988, 130.2737 -13145, 67.05559, 124.3257 -13146, 70.82173, 136.5632 -13147, 67.84611, 136.8583 -13148, 66.01755, 112.6355 -13149, 66.2288, 124.778 -13150, 66.66816, 133.0192 -13151, 65.48562, 131.4137 -13152, 67.62, 148.1053 -13153, 68.82866, 119.503 -13154, 68.43031, 126.7202 -13155, 64.88057, 112.4524 -13156, 70.71452, 129.2147 -13157, 68.29645, 126.0144 -13158, 68.57851, 128.5564 -13159, 65.66804, 101.8834 -13160, 68.35718, 126.9565 -13161, 68.30827, 121.8879 -13162, 67.97439, 114.888 -13163, 65.44622, 110.3052 -13164, 66.41683, 135.3551 -13165, 67.76647, 107.941 -13166, 70.12719, 112.8635 -13167, 66.45294, 119.4764 -13168, 67.25909, 132.5905 -13169, 67.90183, 140.1277 -13170, 65.12247, 118.1968 -13171, 70.54615, 137.335 -13172, 67.93419, 127.8738 -13173, 68.4073, 131.5761 -13174, 68.0543, 125.3733 -13175, 66.81613, 125.5772 -13176, 71.46482, 156.698 -13177, 66.1986, 130.4507 -13178, 67.78284, 131.1426 -13179, 65.98122, 137.0717 -13180, 71.18172, 119.8668 -13181, 66.63714, 107.6969 -13182, 65.21006, 108.4938 -13183, 72.02198, 145.489 -13184, 67.73998, 130.4849 -13185, 66.80834, 118.4648 -13186, 69.82781, 151.5249 -13187, 69.066, 134.8918 -13188, 67.74345, 130.8209 -13189, 69.05112, 112.3061 -13190, 65.9683, 104.3853 -13191, 69.13584, 129.2356 -13192, 67.40931, 130.2442 -13193, 67.92429, 130.3329 -13194, 68.87862, 122.1128 -13195, 70.78535, 147.0279 -13196, 67.94063, 116.9758 -13197, 68.55731, 124.1189 -13198, 67.95809, 143.184 -13199, 67.14299, 124.7983 -13200, 66.31973, 135.487 -13201, 69.86703, 123.4288 -13202, 70.34807, 128.6677 -13203, 68.33013, 118.3628 -13204, 69.25117, 126.0558 -13205, 69.50442, 119.8007 -13206, 64.7488, 136.3069 -13207, 71.18038, 136.9996 -13208, 68.20414, 136.4564 -13209, 67.20821, 138.9231 -13210, 68.09341, 129.9965 -13211, 67.57946, 133.9151 -13212, 66.36966, 121.0705 -13213, 70.44008, 115.5771 -13214, 69.59612, 118.1955 -13215, 73.18845, 141.6274 -13216, 64.8038, 114.1008 -13217, 63.38823, 116.9479 -13218, 68.42439, 122.0094 -13219, 68.20646, 130.3053 -13220, 68.47766, 124.3275 -13221, 68.13698, 109.9892 -13222, 66.5642, 120.0656 -13223, 71.6742, 142.782 -13224, 67.05255, 128.7431 -13225, 68.85466, 117.8856 -13226, 68.65248, 122.2601 -13227, 64.16886, 110.911 -13228, 67.16001, 142.7395 -13229, 65.06853, 123.8455 -13230, 69.67259, 136.5818 -13231, 67.28347, 135.4397 -13232, 69.90543, 129.4083 -13233, 66.39269, 113.8244 -13234, 69.0075, 132.1928 -13235, 68.90949, 128.4623 -13236, 66.02741, 108.1906 -13237, 68.22004, 130.7162 -13238, 70.8693, 136.1507 -13239, 64.98984, 117.714 -13240, 67.12295, 119.9848 -13241, 67.83454, 123.3862 -13242, 70.74203, 140.0149 -13243, 64.27586, 103.4251 -13244, 68.62938, 125.9597 -13245, 71.83546, 129.9557 -13246, 69.13802, 124.1999 -13247, 69.14398, 135.7985 -13248, 69.86294, 123.7869 -13249, 68.0071, 122.3199 -13250, 64.28003, 119.2213 -13251, 64.80749, 98.27368 -13252, 68.44135, 137.1619 -13253, 67.33811, 118.3226 -13254, 66.23568, 111.8243 -13255, 65.38226, 135.7816 -13256, 69.70013, 127.6917 -13257, 70.21141, 131.4104 -13258, 67.25972, 127.8096 -13259, 68.19324, 126.6439 -13260, 69.34903, 127.2285 -13261, 70.82622, 136.3402 -13262, 68.95895, 145.2939 -13263, 66.35313, 123.3383 -13264, 67.70155, 113.0354 -13265, 66.01282, 126.4426 -13266, 64.67146, 121.8473 -13267, 65.26196, 116.2627 -13268, 64.32105, 126.3531 -13269, 68.19311, 114.3672 -13270, 70.63372, 138.5337 -13271, 67.32161, 137.0611 -13272, 69.07423, 134.9462 -13273, 67.38292, 112.8386 -13274, 66.9492, 110.6838 -13275, 69.37345, 135.2223 -13276, 67.17327, 128.3909 -13277, 64.82297, 113.3591 -13278, 69.74366, 131.9008 -13279, 69.05523, 122.8494 -13280, 68.52817, 119.1168 -13281, 65.77416, 135.7006 -13282, 70.49366, 129.384 -13283, 71.53026, 135.0245 -13284, 68.16348, 110.3596 -13285, 70.15896, 153.1741 -13286, 68.67804, 141.0451 -13287, 64.07479, 118.5714 -13288, 65.63973, 99.81515 -13289, 67.91191, 129.3775 -13290, 67.775, 146.1935 -13291, 69.18617, 132.9471 -13292, 68.01384, 131.7207 -13293, 62.48941, 117.7949 -13294, 67.96079, 127.3995 -13295, 67.82376, 134.2977 -13296, 66.92886, 111.183 -13297, 67.39775, 134.5976 -13298, 67.41853, 143.8567 -13299, 66.08383, 118.2815 -13300, 69.40233, 119.7774 -13301, 68.42976, 124.3332 -13302, 68.65284, 126.7226 -13303, 67.71085, 110.5105 -13304, 66.92357, 113.5576 -13305, 67.28097, 128.3507 -13306, 67.60201, 132.2953 -13307, 69.39436, 120.7939 -13308, 66.10454, 113.4298 -13309, 68.63883, 129.8796 -13310, 66.93124, 119.3294 -13311, 66.52196, 134.1469 -13312, 64.39478, 118.0702 -13313, 67.87061, 127.3809 -13314, 70.43201, 121.1751 -13315, 70.40373, 118.6765 -13316, 68.88718, 127.3501 -13317, 69.10626, 124.0148 -13318, 69.20993, 131.5479 -13319, 66.95677, 127.1894 -13320, 68.55278, 139.2787 -13321, 67.34935, 121.2197 -13322, 70.08442, 146.126 -13323, 66.55493, 120.4965 -13324, 68.39772, 134.5794 -13325, 69.17551, 127.7031 -13326, 67.88832, 130.9674 -13327, 69.23136, 151.7222 -13328, 66.39321, 136.1953 -13329, 66.29156, 129.0251 -13330, 69.27872, 133.8416 -13331, 67.04849, 123.7323 -13332, 66.08908, 120.447 -13333, 65.40789, 106.4048 -13334, 64.41176, 100.5481 -13335, 68.99911, 147.0279 -13336, 63.96038, 98.96049 -13337, 67.25019, 111.6628 -13338, 70.13072, 138.9752 -13339, 73.11393, 154.7801 -13340, 68.46228, 135.4161 -13341, 69.36312, 131.0502 -13342, 64.95313, 113.1035 -13343, 66.01722, 106.2152 -13344, 66.2941, 114.7051 -13345, 70.67693, 125.1185 -13346, 67.33243, 135.8197 -13347, 63.68425, 127.6135 -13348, 67.05486, 125.9922 -13349, 71.57334, 125.7925 -13350, 70.74414, 149.5795 -13351, 67.90413, 123.895 -13352, 70.23876, 134.9732 -13353, 66.42802, 143.3147 -13354, 68.27668, 120.5478 -13355, 69.23481, 132.964 -13356, 66.24127, 124.8096 -13357, 71.24159, 150.798 -13358, 64.23067, 106.6067 -13359, 68.13972, 129.562 -13360, 70.5219, 138.8618 -13361, 68.80228, 123.557 -13362, 71.47939, 122.5102 -13363, 66.25554, 117.2567 -13364, 67.65893, 125.1901 -13365, 66.24544, 118.1862 -13366, 69.4015, 117.9695 -13367, 63.68623, 124.7147 -13368, 67.70352, 117.4804 -13369, 64.58855, 97.81632 -13370, 67.90312, 121.7761 -13371, 69.31825, 132.5327 -13372, 68.78074, 133.8886 -13373, 65.16747, 103.7879 -13374, 67.39659, 123.8458 -13375, 64.41103, 100.447 -13376, 71.47445, 139.9332 -13377, 66.08011, 114.2059 -13378, 69.12359, 127.9635 -13379, 70.18251, 142.0535 -13380, 69.52844, 149.3159 -13381, 65.45636, 124.7121 -13382, 72.1365, 133.2988 -13383, 64.01521, 112.954 -13384, 66.94399, 121.8452 -13385, 70.76624, 129.2601 -13386, 67.1248, 127.1223 -13387, 70.91403, 137.6657 -13388, 69.05992, 96.98373 -13389, 68.87014, 132.286 -13390, 70.56427, 139.1888 -13391, 68.74068, 140.9494 -13392, 66.04751, 133.5623 -13393, 71.5113, 131.3287 -13394, 67.61109, 131.3793 -13395, 67.65123, 120.4534 -13396, 69.26124, 130.3283 -13397, 68.05308, 111.5429 -13398, 70.66922, 120.3896 -13399, 63.44163, 115.5336 -13400, 66.15659, 114.6908 -13401, 68.17946, 146.4593 -13402, 67.26248, 122.2184 -13403, 69.54205, 135.2309 -13404, 68.23248, 117.6804 -13405, 68.37902, 133.9223 -13406, 63.64125, 112.1593 -13407, 71.46636, 141.1508 -13408, 69.26616, 140.8013 -13409, 69.24025, 155.7611 -13410, 67.95744, 121.5092 -13411, 66.88315, 123.9898 -13412, 69.59355, 130.8852 -13413, 70.21228, 136.9528 -13414, 66.76888, 109.2297 -13415, 67.03536, 134.7424 -13416, 72.72333, 135.6775 -13417, 71.27092, 149.2486 -13418, 70.04237, 120.8985 -13419, 67.30938, 125.4023 -13420, 70.92362, 142.0399 -13421, 70.86617, 136.8164 -13422, 71.16906, 125.1008 -13423, 71.27803, 126.8942 -13424, 69.02346, 134.2947 -13425, 70.32898, 142.0952 -13426, 64.65613, 110.0386 -13427, 68.30144, 116.1683 -13428, 68.02501, 129.2719 -13429, 69.54645, 135.4922 -13430, 69.66515, 120.5153 -13431, 66.61978, 120.8916 -13432, 70.70351, 144.7056 -13433, 66.84578, 123.4342 -13434, 66.91022, 104.7945 -13435, 70.46769, 117.2765 -13436, 67.7792, 125.5647 -13437, 65.6698, 107.2109 -13438, 66.92797, 132.8552 -13439, 66.83788, 142.0706 -13440, 66.2109, 125.9366 -13441, 71.51674, 137.7854 -13442, 69.25899, 127.4162 -13443, 66.38182, 128.5337 -13444, 67.98866, 103.9803 -13445, 69.10657, 121.7137 -13446, 66.93244, 128.6671 -13447, 68.78738, 111.3942 -13448, 71.69889, 127.9976 -13449, 71.58625, 155.8226 -13450, 70.22459, 123.7852 -13451, 67.80333, 129.0836 -13452, 66.99804, 141.1636 -13453, 66.69938, 126.4284 -13454, 67.81842, 107.4346 -13455, 65.52188, 102.8837 -13456, 66.26517, 112.6468 -13457, 66.61056, 132.1592 -13458, 69.2276, 135.7117 -13459, 69.76883, 131.289 -13460, 67.25415, 126.2261 -13461, 71.94325, 146.1599 -13462, 70.42889, 131.4166 -13463, 69.14838, 135.2424 -13464, 66.35698, 117.5543 -13465, 67.72308, 120.2195 -13466, 69.32816, 144.6047 -13467, 67.18685, 119.0143 -13468, 64.98016, 128.0163 -13469, 69.50141, 131.0541 -13470, 66.21749, 117.7252 -13471, 66.87048, 146.4228 -13472, 67.26667, 110.8618 -13473, 68.84698, 118.8636 -13474, 69.64577, 137.3837 -13475, 68.42511, 127.5529 -13476, 66.12824, 130.6234 -13477, 66.50649, 118.7096 -13478, 68.22237, 117.7128 -13479, 70.89547, 132.2301 -13480, 66.49191, 129.8035 -13481, 65.92614, 110.2858 -13482, 70.60162, 133.4747 -13483, 69.90771, 125.1461 -13484, 68.17237, 135.0448 -13485, 67.93822, 114.7389 -13486, 67.26702, 127.2478 -13487, 70.93422, 134.1138 -13488, 65.43279, 132.7763 -13489, 68.50404, 136.0545 -13490, 65.32412, 124.1597 -13491, 67.15877, 124.869 -13492, 64.08903, 104.5371 -13493, 64.87852, 119.364 -13494, 68.06382, 112.3071 -13495, 67.85512, 138.274 -13496, 68.69451, 136.9217 -13497, 71.83913, 138.6279 -13498, 72.68296, 134.195 -13499, 72.97709, 129.5139 -13500, 68.69342, 111.9045 -13501, 68.68038, 125.2037 -13502, 70.61549, 135.1449 -13503, 68.58312, 133.3172 -13504, 67.87132, 122.0944 -13505, 67.36301, 133.484 -13506, 70.012, 125.7454 -13507, 71.00838, 140.3572 -13508, 69.54254, 153.5616 -13509, 67.29908, 126.9459 -13510, 68.91619, 133.2555 -13511, 66.98198, 110.6282 -13512, 67.52527, 131.6131 -13513, 68.68913, 153.1047 -13514, 68.0705, 145.1079 -13515, 65.34667, 106.6298 -13516, 68.27458, 129.4259 -13517, 68.43948, 138.6668 -13518, 68.63517, 125.4484 -13519, 65.9169, 115.5298 -13520, 68.75507, 121.4015 -13521, 67.50336, 121.0915 -13522, 67.35686, 119.5916 -13523, 68.74911, 123.4175 -13524, 65.82688, 125.1802 -13525, 63.66383, 100.9581 -13526, 66.73418, 123.5122 -13527, 68.7669, 121.9292 -13528, 63.50262, 115.3714 -13529, 67.76649, 125.1451 -13530, 68.57622, 123.7199 -13531, 69.26441, 135.5441 -13532, 69.68345, 122.2247 -13533, 68.79655, 124.5403 -13534, 71.45548, 149.4462 -13535, 67.08221, 107.519 -13536, 66.30983, 107.8446 -13537, 67.05289, 130.3873 -13538, 66.69178, 112.7728 -13539, 67.73043, 122.5769 -13540, 68.00003, 137.312 -13541, 66.63813, 102.5589 -13542, 65.65274, 108.267 -13543, 69.22019, 113.4516 -13544, 64.23796, 127.21 -13545, 67.5943, 133.0013 -13546, 70.42984, 136.3197 -13547, 67.11274, 128.19 -13548, 67.98772, 113.4182 -13549, 69.89944, 143.3529 -13550, 67.47588, 118.6167 -13551, 70.73882, 133.249 -13552, 67.09517, 127.4636 -13553, 64.63916, 124.0617 -13554, 65.95318, 114.1656 -13555, 70.34111, 131.5517 -13556, 65.08001, 117.1925 -13557, 67.01532, 127.5686 -13558, 67.44816, 140.1632 -13559, 64.62936, 114.2821 -13560, 67.18612, 128.9279 -13561, 69.1269, 125.3568 -13562, 67.48529, 111.7304 -13563, 68.60783, 133.3954 -13564, 66.35991, 111.3237 -13565, 67.23519, 123.6025 -13566, 68.10568, 124.4485 -13567, 64.73949, 138.3973 -13568, 68.29833, 127.7477 -13569, 69.22544, 131.9046 -13570, 68.59662, 142.6983 -13571, 66.28389, 120.2258 -13572, 66.43058, 112.2964 -13573, 64.0014, 116.3801 -13574, 67.44234, 152.4923 -13575, 65.15728, 102.1984 -13576, 65.33919, 112.9692 -13577, 65.70654, 130.7918 -13578, 64.35914, 112.2244 -13579, 65.57652, 126.7799 -13580, 71.05843, 136.3315 -13581, 67.23561, 122.0408 -13582, 65.16695, 110.5248 -13583, 69.84415, 152.3574 -13584, 66.61845, 124.8794 -13585, 67.50831, 150.5015 -13586, 66.40242, 124.3254 -13587, 69.02896, 123.8979 -13588, 69.10557, 149.6609 -13589, 68.44275, 126.72 -13590, 68.64999, 139.3151 -13591, 72.40603, 131.9203 -13592, 67.91361, 132.3644 -13593, 66.90988, 116.3878 -13594, 66.08598, 134.0194 -13595, 67.66889, 121.2939 -13596, 68.76862, 131.9744 -13597, 66.98014, 117.2521 -13598, 68.74833, 125.9501 -13599, 70.79517, 133.642 -13600, 64.31269, 110.4079 -13601, 68.92165, 120.3599 -13602, 67.70132, 137.2192 -13603, 71.41874, 139.3438 -13604, 72.51415, 114.3909 -13605, 68.8114, 127.7579 -13606, 67.13979, 109.7144 -13607, 66.74072, 130.6229 -13608, 69.70146, 156.5445 -13609, 72.75144, 157.7481 -13610, 67.66406, 139.4558 -13611, 68.27904, 144.4879 -13612, 69.24852, 136.1629 -13613, 70.34305, 138.67 -13614, 72.09527, 135.252 -13615, 67.11737, 127.7587 -13616, 71.75284, 138.0633 -13617, 66.32216, 123.6735 -13618, 68.59531, 128.7746 -13619, 67.84571, 129.0955 -13620, 69.33815, 118.5346 -13621, 66.37336, 122.3126 -13622, 66.26652, 110.3988 -13623, 64.87171, 132.5079 -13624, 67.92885, 109.6037 -13625, 70.33507, 153.9626 -13626, 66.34491, 120.7221 -13627, 68.64508, 137.0787 -13628, 67.34987, 120.2499 -13629, 69.2373, 132.8112 -13630, 69.88961, 131.3 -13631, 65.71516, 125.3647 -13632, 69.20236, 137.538 -13633, 72.83266, 143.9874 -13634, 63.90262, 122.0885 -13635, 65.38753, 125.0461 -13636, 65.11627, 123.6793 -13637, 68.0761, 125.6445 -13638, 70.38111, 143.9183 -13639, 68.29328, 125.3891 -13640, 66.17228, 121.1097 -13641, 69.01299, 126.3802 -13642, 64.39616, 118.3443 -13643, 69.66799, 137.5244 -13644, 70.11684, 148.1291 -13645, 70.67615, 138.4174 -13646, 71.67171, 154.5974 -13647, 70.98541, 132.011 -13648, 68.69251, 120.464 -13649, 66.13051, 130.6484 -13650, 72.18172, 145.7772 -13651, 64.49398, 120.2569 -13652, 71.09941, 120.904 -13653, 68.20045, 130.0656 -13654, 66.33023, 113.2041 -13655, 67.04367, 138.0165 -13656, 68.30547, 127.9004 -13657, 69.18392, 125.2414 -13658, 68.03723, 135.8445 -13659, 66.57552, 133.4506 -13660, 67.96196, 126.5701 -13661, 70.04325, 131.8625 -13662, 66.82989, 136.6633 -13663, 66.06785, 119.3338 -13664, 66.73451, 114.521 -13665, 68.59738, 131.6491 -13666, 67.93096, 118.3885 -13667, 68.29048, 140.8166 -13668, 65.61713, 136.7163 -13669, 68.83511, 133.5565 -13670, 68.41749, 121.6358 -13671, 68.29963, 125.9208 -13672, 67.07739, 120.9513 -13673, 65.28695, 127.0931 -13674, 69.56663, 132.7942 -13675, 69.96385, 139.112 -13676, 71.49172, 156.6047 -13677, 72.06918, 130.0836 -13678, 68.32088, 136.4392 -13679, 69.41193, 124.4338 -13680, 69.30554, 141.7445 -13681, 70.28825, 149.8366 -13682, 74.74047, 155.5462 -13683, 67.89908, 128.0993 -13684, 63.31957, 124.2271 -13685, 68.88209, 117.1974 -13686, 66.09881, 117.9989 -13687, 68.39956, 135.4289 -13688, 65.81467, 119.0041 -13689, 66.51669, 123.0958 -13690, 66.68897, 128.9492 -13691, 68.85866, 122.1515 -13692, 65.28602, 117.6903 -13693, 67.45382, 121.8754 -13694, 65.72572, 104.7868 -13695, 69.1809, 138.1944 -13696, 67.19123, 119.7814 -13697, 67.95791, 115.3964 -13698, 69.90153, 133.6208 -13699, 69.36667, 120.1496 -13700, 68.2609, 123.5765 -13701, 67.73458, 123.3573 -13702, 67.99545, 124.5313 -13703, 67.02058, 120.1386 -13704, 68.0984, 118.3992 -13705, 69.07483, 136.2293 -13706, 68.55788, 150.1478 -13707, 67.88128, 91.79628 -13708, 64.57218, 117.3649 -13709, 65.66127, 111.9679 -13710, 67.40301, 122.1909 -13711, 67.55072, 136.2613 -13712, 66.3712, 110.5685 -13713, 69.03177, 140.8798 -13714, 69.56693, 139.21 -13715, 67.997, 142.6499 -13716, 67.77191, 116.9825 -13717, 70.25823, 146.4642 -13718, 67.55181, 129.5468 -13719, 68.46142, 123.4447 -13720, 66.27821, 118.7967 -13721, 67.16134, 128.4656 -13722, 70.74503, 127.2149 -13723, 64.41245, 130.2909 -13724, 69.93806, 135.9627 -13725, 66.89486, 141.925 -13726, 69.35583, 129.5942 -13727, 70.31031, 115.0746 -13728, 65.16672, 108.6499 -13729, 66.13636, 116.5107 -13730, 69.9459, 118.4187 -13731, 65.77942, 130.5573 -13732, 65.37242, 123.4043 -13733, 67.52532, 112.6009 -13734, 65.66027, 130.1065 -13735, 68.08438, 125.6412 -13736, 70.20405, 141.2656 -13737, 68.09138, 126.8049 -13738, 69.8622, 130.7656 -13739, 71.2364, 165.4348 -13740, 67.73715, 118.1487 -13741, 68.97119, 139.1271 -13742, 65.20052, 116.3499 -13743, 68.44766, 143.052 -13744, 69.85374, 123.8261 -13745, 68.53738, 133.8745 -13746, 67.83017, 131.8549 -13747, 66.23251, 127.9094 -13748, 65.89304, 115.487 -13749, 65.6772, 121.1499 -13750, 66.76883, 136.4819 -13751, 69.74836, 122.1892 -13752, 66.02269, 110.8825 -13753, 67.8839, 142.7609 -13754, 67.9508, 132.0453 -13755, 68.08386, 129.7618 -13756, 67.34271, 116.0603 -13757, 68.1341, 112.7088 -13758, 70.01101, 140.5868 -13759, 67.81576, 132.5872 -13760, 71.44931, 152.6402 -13761, 66.86293, 132.6471 -13762, 66.96378, 97.03296 -13763, 70.86922, 142.2524 -13764, 66.07424, 124.2275 -13765, 63.1202, 131.0273 -13766, 66.13073, 123.7088 -13767, 68.49757, 128.567 -13768, 67.64703, 126.1548 -13769, 64.13542, 111.5291 -13770, 65.18415, 111.5203 -13771, 65.28989, 102.8829 -13772, 66.93899, 130.9771 -13773, 69.76519, 131.7523 -13774, 70.14971, 131.6752 -13775, 69.76427, 128.3103 -13776, 66.79976, 111.8919 -13777, 64.24878, 111.8224 -13778, 66.26232, 130.8118 -13779, 67.36842, 140.4376 -13780, 69.54224, 136.2962 -13781, 70.7088, 135.0448 -13782, 68.30583, 107.0114 -13783, 68.77584, 115.0584 -13784, 64.57222, 110.4544 -13785, 70.37127, 131.4099 -13786, 65.67011, 126.3269 -13787, 70.20753, 146.1756 -13788, 64.77025, 121.1153 -13789, 71.3765, 137.7634 -13790, 67.69573, 141.5469 -13791, 67.51762, 124.1185 -13792, 67.19765, 137.8119 -13793, 67.1093, 133.0114 -13794, 69.1917, 123.958 -13795, 69.15525, 119.1435 -13796, 69.86536, 121.2642 -13797, 66.32886, 127.9168 -13798, 67.86215, 121.1058 -13799, 68.27113, 116.4098 -13800, 65.76944, 126.6246 -13801, 67.92933, 130.5733 -13802, 71.2216, 123.3636 -13803, 66.912, 119.4482 -13804, 67.41402, 131.0606 -13805, 67.22463, 119.8691 -13806, 68.55061, 134.7133 -13807, 70.89052, 141.621 -13808, 64.97357, 100.993 -13809, 67.54977, 115.0079 -13810, 69.25733, 147.6032 -13811, 68.42616, 141.9304 -13812, 66.83894, 128.7245 -13813, 69.12521, 123.8116 -13814, 65.94202, 126.6764 -13815, 69.15548, 137.3675 -13816, 66.63132, 130.1165 -13817, 69.7449, 122.1703 -13818, 68.182, 125.3675 -13819, 63.34895, 108.9061 -13820, 65.91937, 120.2951 -13821, 68.34026, 117.7427 -13822, 69.17937, 147.5066 -13823, 65.73096, 124.0377 -13824, 65.25774, 137.7447 -13825, 66.95904, 117.1612 -13826, 67.46686, 102.788 -13827, 64.5303, 109.287 -13828, 68.22274, 106.3999 -13829, 69.74043, 149.3723 -13830, 66.82473, 115.1647 -13831, 66.7667, 106.6478 -13832, 66.60791, 104.4031 -13833, 66.22167, 106.6763 -13834, 66.96213, 126.4268 -13835, 70.45353, 144.5438 -13836, 71.72731, 127.6123 -13837, 69.12426, 136.6216 -13838, 68.64719, 125.4496 -13839, 65.7677, 112.6545 -13840, 69.92728, 137.5083 -13841, 66.95014, 131.6857 -13842, 68.99774, 143.0834 -13843, 71.31319, 127.6948 -13844, 65.88245, 131.4081 -13845, 68.39531, 117.7972 -13846, 69.5689, 133.7194 -13847, 69.82927, 127.2561 -13848, 67.95272, 111.2289 -13849, 68.98352, 133.427 -13850, 65.59897, 111.5773 -13851, 66.58067, 146.9392 -13852, 67.7046, 133.8558 -13853, 69.99147, 144.8165 -13854, 69.95446, 121.3657 -13855, 69.13713, 129.0169 -13856, 67.36034, 123.4454 -13857, 64.50897, 104.6736 -13858, 64.64068, 112.5689 -13859, 69.21305, 134.9969 -13860, 70.40988, 141.6769 -13861, 68.39682, 130.6472 -13862, 69.95437, 150.2712 -13863, 67.70414, 129.5662 -13864, 70.21315, 143.1277 -13865, 71.55881, 140.8115 -13866, 65.74844, 118.1262 -13867, 65.92318, 115.5208 -13868, 68.39851, 139.0805 -13869, 67.13347, 117.7219 -13870, 69.06374, 113.4222 -13871, 69.31382, 107.9401 -13872, 68.40244, 130.7315 -13873, 66.16601, 109.7068 -13874, 68.7271, 134.0751 -13875, 67.8651, 100.6523 -13876, 65.13709, 103.7386 -13877, 68.3908, 128.9968 -13878, 69.0989, 140.9024 -13879, 70.78829, 116.0327 -13880, 66.82614, 103.8567 -13881, 68.51919, 135.0276 -13882, 63.42416, 115.1669 -13883, 68.67133, 138.4376 -13884, 68.69668, 141.5566 -13885, 68.74929, 132.1818 -13886, 67.80121, 149.1847 -13887, 66.66077, 133.2206 -13888, 65.65457, 125.0592 -13889, 67.32239, 123.0962 -13890, 65.64744, 135.0891 -13891, 66.16885, 115.675 -13892, 68.84435, 129.7317 -13893, 70.3845, 132.3889 -13894, 64.15154, 121.0638 -13895, 65.93081, 121.1675 -13896, 66.42939, 124.7448 -13897, 67.0965, 128.85 -13898, 67.67338, 118.6532 -13899, 67.32413, 135.3278 -13900, 70.519, 129.3913 -13901, 66.28763, 124.8871 -13902, 66.89899, 131.4067 -13903, 68.60623, 129.9693 -13904, 65.64473, 111.3161 -13905, 67.57584, 116.4266 -13906, 67.27226, 117.229 -13907, 68.58803, 143.4394 -13908, 69.20003, 131.5186 -13909, 69.54645, 115.0614 -13910, 66.96253, 110.8142 -13911, 64.22288, 124.7478 -13912, 65.11698, 129.2592 -13913, 67.36456, 123.3457 -13914, 67.49718, 124.9092 -13915, 68.31028, 142.7313 -13916, 70.80122, 127.9696 -13917, 66.93479, 133.0576 -13918, 67.75842, 131.14 -13919, 63.81449, 119.4379 -13920, 68.51883, 132.3252 -13921, 70.23493, 125.7225 -13922, 68.61403, 133.7697 -13923, 68.03872, 136.8378 -13924, 69.29088, 122.7787 -13925, 71.26954, 135.0683 -13926, 64.91601, 110.2655 -13927, 67.18613, 124.0557 -13928, 70.79073, 125.8297 -13929, 69.88144, 129.0521 -13930, 66.10857, 122.8552 -13931, 70.34043, 129.3487 -13932, 70.71954, 128.7553 -13933, 68.49864, 113.5357 -13934, 64.68471, 118.1635 -13935, 67.81336, 125.1218 -13936, 67.32677, 116.7349 -13937, 70.80715, 139.2165 -13938, 68.27181, 133.8987 -13939, 67.79985, 144.0007 -13940, 70.24363, 127.7861 -13941, 69.0627, 108.916 -13942, 68.64606, 109.8435 -13943, 68.43749, 122.3513 -13944, 66.564, 118.0219 -13945, 68.73434, 132.5926 -13946, 70.34988, 131.2347 -13947, 68.32147, 132.9566 -13948, 68.85217, 150.0004 -13949, 70.0906, 138.4704 -13950, 71.53276, 125.8273 -13951, 68.42484, 131.4501 -13952, 68.58043, 122.8021 -13953, 68.58863, 121.4833 -13954, 66.78852, 125.8598 -13955, 71.05294, 140.8371 -13956, 67.87961, 119.2717 -13957, 68.17244, 135.1764 -13958, 70.42742, 141.1003 -13959, 67.19885, 119.4295 -13960, 68.59893, 123.1239 -13961, 68.32595, 117.3794 -13962, 65.62714, 121.2559 -13963, 70.04301, 154.9343 -13964, 68.38119, 122.0905 -13965, 67.52926, 126.9393 -13966, 68.10619, 124.0167 -13967, 65.46141, 108.8987 -13968, 67.06246, 128.834 -13969, 65.34267, 129.1537 -13970, 70.5704, 130.5011 -13971, 72.34839, 157.8066 -13972, 60.27836, 110.1138 -13973, 67.61855, 103.0198 -13974, 71.49569, 144.1566 -13975, 68.74794, 124.4705 -13976, 69.91849, 135.1641 -13977, 65.19504, 112.8648 -13978, 68.38232, 126.0162 -13979, 67.25518, 122.1221 -13980, 68.93483, 127.7623 -13981, 68.44699, 123.1308 -13982, 66.32658, 132.9695 -13983, 69.33376, 117.9713 -13984, 67.53281, 125.2872 -13985, 70.46549, 125.7753 -13986, 66.48216, 114.7755 -13987, 65.5645, 124.9968 -13988, 68.55191, 136.3553 -13989, 69.95594, 139.5419 -13990, 69.92062, 140.3966 -13991, 67.83218, 133.3225 -13992, 67.42913, 130.3175 -13993, 66.70177, 124.9376 -13994, 70.21284, 122.9461 -13995, 67.96958, 126.7309 -13996, 67.92194, 120.0718 -13997, 68.80637, 134.3642 -13998, 69.10289, 139.7602 -13999, 70.25784, 123.1635 -14000, 66.35824, 122.6852 -14001, 66.29874, 118.2763 -14002, 69.23979, 134.1059 -14003, 69.96459, 123.4101 -14004, 70.33325, 130.2675 -14005, 67.8791, 123.0713 -14006, 69.80115, 140.0347 -14007, 71.85087, 149.4641 -14008, 68.86095, 135.3824 -14009, 68.26626, 139.32 -14010, 68.22977, 132.8191 -14011, 68.87266, 134.2836 -14012, 68.69331, 119.1176 -14013, 69.50191, 124.9842 -14014, 67.13278, 126.6367 -14015, 68.07784, 112.9545 -14016, 65.60161, 132.3679 -14017, 66.25651, 108.6773 -14018, 65.57211, 117.4159 -14019, 69.01055, 100.181 -14020, 64.2501, 107.6959 -14021, 70.00883, 129.8113 -14022, 67.42102, 147.3407 -14023, 65.37725, 142.2231 -14024, 66.4546, 122.3176 -14025, 66.25961, 135.4493 -14026, 64.69471, 112.4972 -14027, 70.89926, 149.3595 -14028, 67.05572, 126.9729 -14029, 66.16531, 132.4495 -14030, 67.22303, 135.8181 -14031, 69.51503, 124.8695 -14032, 65.44081, 115.6159 -14033, 66.5001, 109.6408 -14034, 66.04055, 121.2501 -14035, 67.5518, 132.2297 -14036, 69.06258, 129.0295 -14037, 65.86704, 129.4721 -14038, 66.38913, 136.9183 -14039, 67.06884, 123.9572 -14040, 65.41938, 119.476 -14041, 70.53863, 128.5198 -14042, 66.42745, 128.774 -14043, 67.52661, 121.3385 -14044, 70.4217, 123.358 -14045, 69.38026, 130.7818 -14046, 66.94303, 134.8107 -14047, 66.50907, 123.5263 -14048, 67.29972, 128.9403 -14049, 69.81584, 139.2252 -14050, 67.38016, 120.8477 -14051, 67.70214, 126.4529 -14052, 69.10227, 130.6785 -14053, 67.94031, 121.4563 -14054, 68.26271, 123.7273 -14055, 67.5991, 132.0902 -14056, 70.1651, 143.8473 -14057, 68.83927, 134.9782 -14058, 68.96635, 117.2842 -14059, 67.11342, 128.5372 -14060, 67.68551, 121.7078 -14061, 66.45664, 123.3311 -14062, 66.89404, 106.7602 -14063, 69.61824, 120.5271 -14064, 74.04804, 149.6303 -14065, 69.64822, 142.7772 -14066, 68.92365, 115.4178 -14067, 67.36277, 119.6295 -14068, 68.34878, 134.3189 -14069, 66.00426, 128.4332 -14070, 69.14864, 126.6413 -14071, 68.49425, 117.5148 -14072, 68.06637, 134.2341 -14073, 72.93887, 144.9647 -14074, 66.18115, 132.6478 -14075, 67.99965, 119.7057 -14076, 66.96461, 117.8036 -14077, 67.74233, 137.5251 -14078, 67.25235, 127.1944 -14079, 68.93064, 118.6825 -14080, 67.66692, 122.408 -14081, 68.36323, 127.859 -14082, 68.5151, 124.2807 -14083, 68.59649, 126.3488 -14084, 67.89703, 117.1268 -14085, 68.54559, 123.3066 -14086, 68.57763, 130.224 -14087, 65.30062, 129.1373 -14088, 69.64468, 132.1716 -14089, 68.60546, 139.3675 -14090, 66.67257, 120.0443 -14091, 67.51525, 135.3145 -14092, 69.19989, 128.2222 -14093, 69.93288, 144.365 -14094, 67.73185, 129.3353 -14095, 69.01928, 126.148 -14096, 68.85323, 122.8646 -14097, 64.28729, 107.047 -14098, 72.16006, 143.1819 -14099, 67.89779, 141.3709 -14100, 69.10375, 122.7892 -14101, 65.65523, 137.5148 -14102, 68.82547, 117.8694 -14103, 68.48097, 122.2078 -14104, 66.68648, 117.8087 -14105, 66.62504, 126.9058 -14106, 64.97433, 103.1333 -14107, 61.90725, 78.56785 -14108, 66.97721, 139.1241 -14109, 66.48817, 111.8809 -14110, 66.08182, 128.2333 -14111, 67.8436, 120.26 -14112, 68.57876, 148.3076 -14113, 68.22504, 142.7289 -14114, 65.79376, 113.9473 -14115, 69.42855, 137.6963 -14116, 69.73313, 128.2394 -14117, 66.27846, 96.95428 -14118, 70.91261, 149.4527 -14119, 69.76864, 138.425 -14120, 66.6929, 123.4958 -14121, 67.84359, 138.9076 -14122, 69.76751, 123.4689 -14123, 70.53942, 148.3832 -14124, 68.88232, 134.5561 -14125, 67.76694, 132.0017 -14126, 69.68007, 115.6036 -14127, 70.30177, 114.5099 -14128, 68.39681, 131.135 -14129, 68.67559, 137.2308 -14130, 67.25836, 113.6762 -14131, 68.33766, 135.9751 -14132, 68.73641, 133.9187 -14133, 69.74424, 135.1867 -14134, 66.69188, 119.4333 -14135, 62.52876, 108.1177 -14136, 65.53571, 117.106 -14137, 66.18274, 115.6559 -14138, 69.41864, 117.3108 -14139, 67.08846, 119.7923 -14140, 65.80637, 134.2886 -14141, 70.23935, 147.1002 -14142, 65.33009, 112.1983 -14143, 65.74455, 121.3022 -14144, 68.90467, 126.1829 -14145, 69.09536, 121.7585 -14146, 68.01171, 130.9674 -14147, 67.90225, 120.5844 -14148, 67.34009, 123.8478 -14149, 66.46165, 108.9752 -14150, 66.75233, 134.2032 -14151, 70.18221, 120.1313 -14152, 66.7024, 122.7568 -14153, 67.3595, 128.4038 -14154, 69.08157, 123.6703 -14155, 70.2507, 132.496 -14156, 69.6539, 138.9897 -14157, 68.02248, 139.3765 -14158, 69.56277, 127.1687 -14159, 68.46777, 137.1892 -14160, 67.83868, 124.7676 -14161, 65.61422, 107.7261 -14162, 69.45527, 139.142 -14163, 66.28291, 126.9862 -14164, 67.56837, 129.8583 -14165, 70.12988, 120.9723 -14166, 68.93421, 124.3325 -14167, 68.81879, 126.6826 -14168, 65.99333, 130.4177 -14169, 66.81007, 127.9307 -14170, 67.94457, 124.4599 -14171, 71.4938, 145.451 -14172, 65.07798, 131.2823 -14173, 69.62029, 137.4994 -14174, 67.5144, 139.3524 -14175, 68.40947, 134.8715 -14176, 66.00603, 110.5781 -14177, 68.33191, 123.6727 -14178, 67.87778, 112.5046 -14179, 68.97539, 119.726 -14180, 68.35379, 130.8928 -14181, 67.18885, 139.5173 -14182, 64.66663, 125.7713 -14183, 70.8471, 141.3167 -14184, 65.85219, 123.4676 -14185, 65.77447, 117.2936 -14186, 67.52969, 133.6229 -14187, 67.40883, 137.1679 -14188, 66.12206, 126.2247 -14189, 67.61112, 133.3822 -14190, 65.59254, 128.3061 -14191, 66.38916, 121.0049 -14192, 68.18774, 121.2644 -14193, 66.10402, 112.9015 -14194, 67.64821, 122.4457 -14195, 66.43868, 125.0148 -14196, 63.50433, 117.6413 -14197, 67.40581, 140.1673 -14198, 68.88553, 144.6597 -14199, 64.19132, 109.6336 -14200, 64.87451, 124.6717 -14201, 67.55913, 128.8533 -14202, 71.62407, 143.172 -14203, 67.8134, 121.2207 -14204, 67.20623, 127.9349 -14205, 67.80392, 114.6993 -14206, 67.19869, 130.2931 -14207, 67.85377, 109.7363 -14208, 66.70262, 128.6075 -14209, 72.60211, 142.884 -14210, 68.85807, 120.9967 -14211, 69.56765, 121.9698 -14212, 66.10458, 120.3264 -14213, 67.18371, 132.8096 -14214, 71.11644, 128.7753 -14215, 70.62083, 144.7966 -14216, 66.12419, 120.1358 -14217, 68.95687, 150.6544 -14218, 65.39463, 119.9506 -14219, 70.83034, 134.1303 -14220, 68.86758, 132.4712 -14221, 68.49492, 132.0698 -14222, 72.26615, 149.0804 -14223, 65.71143, 105.5179 -14224, 67.46158, 105.7427 -14225, 68.12008, 114.3532 -14226, 69.77291, 140.5532 -14227, 67.17396, 104.8758 -14228, 69.58187, 149.3951 -14229, 64.85647, 112.4751 -14230, 66.92813, 113.5514 -14231, 66.84465, 116.7548 -14232, 66.43222, 115.7098 -14233, 70.39773, 142.9501 -14234, 69.64527, 112.6102 -14235, 67.05199, 112.1167 -14236, 66.43058, 144.3144 -14237, 67.29006, 127.7941 -14238, 67.97572, 123.5864 -14239, 68.42735, 105.5294 -14240, 66.59713, 131.487 -14241, 68.31497, 130.6901 -14242, 64.94728, 106.985 -14243, 68.8079, 138.3584 -14244, 71.29561, 144.5436 -14245, 66.60855, 110.2896 -14246, 71.44829, 138.6818 -14247, 69.38522, 126.5717 -14248, 69.28534, 138.3463 -14249, 67.09518, 104.3434 -14250, 66.14266, 127.4558 -14251, 65.73548, 122.9376 -14252, 68.80922, 119.2303 -14253, 66.25755, 123.4953 -14254, 67.38101, 118.9634 -14255, 65.25753, 123.4155 -14256, 67.71714, 114.8697 -14257, 65.88163, 125.7726 -14258, 65.66446, 123.9655 -14259, 66.97416, 129.4752 -14260, 68.27905, 114.2066 -14261, 66.07261, 114.2463 -14262, 67.56389, 110.8099 -14263, 67.94376, 116.0348 -14264, 64.40307, 105.3112 -14265, 69.2191, 123.4273 -14266, 67.70481, 140.9132 -14267, 65.15201, 129.0039 -14268, 67.30379, 135.3481 -14269, 66.98384, 114.4659 -14270, 68.08508, 109.06 -14271, 64.70474, 122.3172 -14272, 66.42674, 122.363 -14273, 66.91386, 125.1168 -14274, 67.22538, 114.5379 -14275, 70.21976, 134.8329 -14276, 71.3139, 132.3451 -14277, 65.53063, 116.6307 -14278, 69.46173, 134.8631 -14279, 66.22806, 118.1414 -14280, 70.16115, 124.8956 -14281, 68.41222, 135.25 -14282, 69.82319, 148.0173 -14283, 67.17432, 120.4157 -14284, 69.29115, 129.6002 -14285, 67.82581, 130.5398 -14286, 66.40623, 132.3121 -14287, 67.73226, 124.3289 -14288, 69.2642, 139.6425 -14289, 69.89742, 126.3862 -14290, 69.27103, 112.6904 -14291, 70.4306, 118.9721 -14292, 64.2193, 110.3825 -14293, 66.07677, 121.521 -14294, 68.1361, 124.7791 -14295, 64.23356, 105.3489 -14296, 65.91925, 119.0062 -14297, 69.39355, 138.3937 -14298, 67.73392, 125.8656 -14299, 69.48989, 129.9777 -14300, 67.33814, 132.0128 -14301, 66.07833, 126.8215 -14302, 65.98334, 117.0051 -14303, 66.44921, 124.4335 -14304, 69.69715, 147.0065 -14305, 67.12772, 133.4775 -14306, 66.57638, 129.6103 -14307, 68.47646, 159.4214 -14308, 66.73179, 124.7975 -14309, 69.19577, 145.742 -14310, 68.83063, 124.7159 -14311, 67.66406, 123.54 -14312, 65.43432, 124.2937 -14313, 66.14658, 113.9478 -14314, 67.8811, 128.1522 -14315, 68.13498, 119.9046 -14316, 67.73894, 135.291 -14317, 65.59068, 141.912 -14318, 67.95201, 133.4959 -14319, 69.19122, 135.3263 -14320, 69.51645, 140.1555 -14321, 68.74287, 121.1786 -14322, 66.52495, 123.7826 -14323, 69.12783, 145.0336 -14324, 67.94469, 126.01 -14325, 66.97412, 114.544 -14326, 68.3347, 118.5872 -14327, 67.80615, 125.4137 -14328, 68.84585, 118.6805 -14329, 66.41209, 123.1756 -14330, 70.29823, 112.5476 -14331, 69.26533, 146.1078 -14332, 66.6775, 112.6632 -14333, 67.20009, 134.6615 -14334, 66.72465, 123.5835 -14335, 68.44557, 117.5098 -14336, 68.83239, 124.6579 -14337, 69.08936, 140.3997 -14338, 67.16286, 116.5837 -14339, 67.39555, 132.9801 -14340, 66.28334, 116.9799 -14341, 68.24699, 117.2319 -14342, 64.78907, 113.6457 -14343, 64.50572, 106.108 -14344, 70.29401, 136.8676 -14345, 65.22177, 110.3999 -14346, 65.86641, 123.509 -14347, 66.10418, 99.16114 -14348, 68.80487, 119.6668 -14349, 69.24299, 131.5827 -14350, 66.09521, 110.0727 -14351, 71.18037, 150.4801 -14352, 68.1098, 124.4662 -14353, 68.53379, 134.3146 -14354, 63.70189, 109.2781 -14355, 66.46061, 122.5196 -14356, 68.8741, 127.0227 -14357, 66.09188, 142.6998 -14358, 65.6822, 134.6381 -14359, 68.95243, 126.922 -14360, 67.89356, 122.4413 -14361, 64.73622, 110.5326 -14362, 68.01956, 107.7515 -14363, 69.49761, 128.5874 -14364, 65.30787, 115.544 -14365, 70.31537, 115.9457 -14366, 67.79292, 120.1893 -14367, 66.2732, 114.6297 -14368, 68.62718, 152.5129 -14369, 69.24794, 125.3082 -14370, 66.17435, 127.7298 -14371, 68.1089, 100.4395 -14372, 68.11469, 101.8313 -14373, 70.97341, 139.3387 -14374, 69.87424, 132.6157 -14375, 71.52707, 147.3411 -14376, 68.44659, 129.7181 -14377, 66.41665, 144.0879 -14378, 67.10768, 120.6801 -14379, 69.32189, 138.5631 -14380, 68.39004, 118.9528 -14381, 65.45785, 129.6689 -14382, 72.09267, 137.1995 -14383, 67.60688, 133.6038 -14384, 66.92747, 122.0855 -14385, 70.1229, 116.8609 -14386, 69.09843, 127.5529 -14387, 67.41743, 122.343 -14388, 69.45134, 128.3776 -14389, 66.41985, 105.8868 -14390, 65.69863, 114.4188 -14391, 65.31739, 130.3437 -14392, 64.80359, 122.8058 -14393, 68.13705, 133.896 -14394, 70.08693, 130.9994 -14395, 64.03691, 107.6519 -14396, 67.33761, 118.6397 -14397, 71.8434, 136.2137 -14398, 69.1154, 118.8989 -14399, 65.39821, 90.24255 -14400, 65.70757, 135.8894 -14401, 69.66027, 116.0218 -14402, 68.84382, 133.186 -14403, 65.39271, 101.6976 -14404, 70.31722, 134.6496 -14405, 69.19909, 136.7189 -14406, 66.2882, 100.3062 -14407, 66.12228, 119.4939 -14408, 68.15336, 121.0773 -14409, 67.44349, 122.0805 -14410, 66.41455, 112.3032 -14411, 65.35315, 103.4902 -14412, 69.30321, 137.4465 -14413, 67.12751, 150.4042 -14414, 69.30029, 139.6598 -14415, 69.11462, 123.185 -14416, 69.26369, 129.9973 -14417, 66.93177, 107.3342 -14418, 70.80801, 126.0434 -14419, 66.77406, 135.7989 -14420, 65.86587, 126.4569 -14421, 66.72211, 121.3037 -14422, 64.44234, 116.1346 -14423, 69.67413, 135.2951 -14424, 64.92037, 107.1751 -14425, 67.63239, 133.8608 -14426, 68.70454, 137.8656 -14427, 68.82445, 111.7483 -14428, 68.93421, 113.9161 -14429, 70.01339, 139.3902 -14430, 71.44878, 119.4079 -14431, 66.91364, 126.6312 -14432, 68.4292, 122.169 -14433, 68.45391, 113.4185 -14434, 65.33618, 119.0882 -14435, 71.88803, 147.8657 -14436, 68.62216, 135.2735 -14437, 68.10589, 115.1755 -14438, 65.49264, 129.8366 -14439, 66.33612, 125.7748 -14440, 69.07199, 143.9889 -14441, 68.76917, 131.4778 -14442, 68.89473, 133.2498 -14443, 68.77062, 142.0926 -14444, 68.33215, 125.3459 -14445, 67.72393, 134.167 -14446, 65.49304, 103.0317 -14447, 71.06055, 138.7811 -14448, 69.50278, 120.9324 -14449, 68.61663, 125.2735 -14450, 68.54709, 133.5241 -14451, 69.26721, 157.2972 -14452, 70.14424, 119.6536 -14453, 65.9849, 140.6229 -14454, 66.281, 108.7205 -14455, 65.7289, 126.3947 -14456, 70.38391, 142.3535 -14457, 67.47381, 133.874 -14458, 66.16001, 128.3664 -14459, 66.57927, 120.7005 -14460, 69.6185, 134.1051 -14461, 65.77941, 117.2822 -14462, 69.46372, 125.2725 -14463, 63.93234, 99.99409 -14464, 70.09165, 134.6921 -14465, 64.94173, 98.26427 -14466, 68.09547, 109.3772 -14467, 68.83226, 134.4107 -14468, 66.96947, 128.823 -14469, 65.08668, 124.1525 -14470, 69.08362, 131.3282 -14471, 66.0827, 116.0096 -14472, 67.05865, 110.0584 -14473, 68.9081, 108.0602 -14474, 66.81199, 119.9277 -14475, 66.52751, 118.3217 -14476, 67.59674, 125.118 -14477, 68.57752, 127.8544 -14478, 65.15613, 125.1617 -14479, 69.88332, 136.8899 -14480, 67.76589, 131.4036 -14481, 69.48716, 122.6178 -14482, 68.99586, 118.7286 -14483, 71.62687, 154.9613 -14484, 68.30079, 143.765 -14485, 66.99909, 126.4922 -14486, 67.16066, 127.2396 -14487, 68.84511, 118.3629 -14488, 69.77163, 126.8724 -14489, 67.24519, 111.6843 -14490, 67.28553, 133.6576 -14491, 68.62133, 136.9199 -14492, 72.50636, 143.4605 -14493, 71.5681, 124.3189 -14494, 64.55855, 122.9763 -14495, 68.77468, 130.5148 -14496, 65.10069, 104.1238 -14497, 71.21872, 148.4113 -14498, 65.66079, 108.9173 -14499, 64.2657, 116.527 -14500, 68.88757, 107.0324 -14501, 68.44905, 146.4124 -14502, 70.33787, 155.1755 -14503, 71.22339, 140.4949 -14504, 65.94774, 133.6787 -14505, 67.91684, 128.4836 -14506, 65.97902, 129.7483 -14507, 69.27942, 146.3625 -14508, 68.53226, 126.4504 -14509, 71.2069, 123.6671 -14510, 67.2503, 125.7628 -14511, 65.30132, 131.154 -14512, 69.08772, 127.8638 -14513, 66.59265, 124.9371 -14514, 66.49666, 138.0897 -14515, 70.95412, 162.4844 -14516, 65.49834, 121.217 -14517, 69.39388, 124.5431 -14518, 65.27883, 118.9227 -14519, 67.52017, 134.0552 -14520, 68.14598, 111.6476 -14521, 68.81275, 136.0553 -14522, 67.89924, 114.0947 -14523, 69.5175, 136.6971 -14524, 68.07055, 129.4733 -14525, 71.2464, 149.7435 -14526, 68.71642, 121.0296 -14527, 63.99425, 114.3488 -14528, 67.65074, 126.7524 -14529, 66.52185, 133.1447 -14530, 67.39334, 124.7861 -14531, 72.31226, 150.9437 -14532, 68.0661, 104.7306 -14533, 65.20757, 114.5092 -14534, 70.31989, 137.4822 -14535, 66.73391, 126.6537 -14536, 67.2038, 124.1829 -14537, 68.97216, 136.0664 -14538, 67.7248, 132.6022 -14539, 69.56606, 120.6638 -14540, 67.86326, 148.5846 -14541, 69.23555, 130.78 -14542, 63.85084, 121.5242 -14543, 69.77742, 142.0076 -14544, 67.25759, 133.6365 -14545, 64.55164, 116.6069 -14546, 65.91736, 127.4018 -14547, 66.34956, 137.8456 -14548, 62.92407, 121.7441 -14549, 67.15032, 127.7838 -14550, 65.46455, 131.0676 -14551, 70.09519, 142.3265 -14552, 68.66443, 146.0821 -14553, 64.54016, 110.5523 -14554, 66.50297, 122.3483 -14555, 70.7413, 140.665 -14556, 67.63475, 118.3144 -14557, 65.29548, 102.0506 -14558, 67.6782, 136.8665 -14559, 68.11521, 131.2592 -14560, 66.43231, 109.4461 -14561, 67.45289, 135.255 -14562, 67.88061, 127.982 -14563, 65.27546, 127.3989 -14564, 71.80443, 142.3012 -14565, 68.32755, 119.5403 -14566, 68.86515, 115.9509 -14567, 67.11834, 110.0601 -14568, 66.53695, 122.495 -14569, 67.1505, 110.2815 -14570, 68.68724, 130.5799 -14571, 68.22897, 136.0111 -14572, 65.42104, 132.8507 -14573, 67.63027, 126.2376 -14574, 66.9449, 129.0043 -14575, 67.98826, 127.4057 -14576, 69.67882, 139.1821 -14577, 66.46151, 120.111 -14578, 66.54514, 126.768 -14579, 69.65715, 133.1626 -14580, 67.36842, 114.6626 -14581, 67.21698, 125.2345 -14582, 69.12349, 135.3012 -14583, 67.93756, 115.0436 -14584, 68.46766, 116.7778 -14585, 70.4462, 111.9601 -14586, 67.64692, 125.7248 -14587, 67.07315, 140.2758 -14588, 65.37352, 99.56696 -14589, 65.3428, 116.0859 -14590, 69.51448, 131.435 -14591, 69.33945, 126.1415 -14592, 66.86743, 124.1513 -14593, 65.10865, 126.4611 -14594, 72.1849, 144.6639 -14595, 69.02571, 141.4309 -14596, 65.04762, 112.8743 -14597, 69.27824, 148.6852 -14598, 69.11397, 136.755 -14599, 65.39362, 126.2681 -14600, 64.92242, 103.2442 -14601, 68.01742, 124.8878 -14602, 66.84525, 117.8475 -14603, 66.5209, 115.0964 -14604, 67.07104, 124.4466 -14605, 66.20762, 123.8278 -14606, 68.65422, 131.0723 -14607, 67.81484, 130.5051 -14608, 67.97735, 137.2246 -14609, 64.20041, 105.6563 -14610, 71.04071, 127.05 -14611, 71.69734, 131.2912 -14612, 67.752, 115.235 -14613, 69.64704, 149.9833 -14614, 69.3531, 128.1011 -14615, 68.69464, 136.1453 -14616, 67.23085, 122.6459 -14617, 69.33763, 124.0222 -14618, 65.86675, 128.6403 -14619, 68.70414, 130.2447 -14620, 68.64444, 118.1935 -14621, 68.6705, 118.7838 -14622, 66.83271, 134.949 -14623, 68.69297, 143.3212 -14624, 66.51348, 117.2734 -14625, 68.28119, 132.4379 -14626, 69.39405, 123.72 -14627, 67.3979, 129.8379 -14628, 72.86535, 125.1006 -14629, 67.52936, 138.9031 -14630, 64.60023, 106.0584 -14631, 69.98289, 134.2094 -14632, 70.333, 127.7615 -14633, 64.3196, 115.4439 -14634, 67.49125, 113.672 -14635, 67.80629, 118.8678 -14636, 65.30266, 104.9205 -14637, 70.81212, 133.9088 -14638, 68.19915, 117.0917 -14639, 69.13698, 140.5356 -14640, 66.59934, 144.2746 -14641, 70.58075, 131.9826 -14642, 66.90518, 105.7686 -14643, 66.74813, 115.058 -14644, 66.83292, 119.15 -14645, 69.35713, 151.3173 -14646, 68.63272, 128.2595 -14647, 69.12693, 125.7313 -14648, 67.0631, 128.2475 -14649, 67.46642, 124.2242 -14650, 66.60284, 131.8328 -14651, 70.1147, 135.0549 -14652, 70.12917, 131.9033 -14653, 68.76147, 131.2722 -14654, 70.05388, 150.4834 -14655, 68.16839, 122.3354 -14656, 67.51951, 119.7932 -14657, 68.27418, 132.6718 -14658, 67.30217, 113.9822 -14659, 66.31157, 128.2458 -14660, 70.05639, 121.4094 -14661, 70.24768, 140.4239 -14662, 69.86768, 123.2387 -14663, 68.9313, 112.5828 -14664, 67.73389, 134.9801 -14665, 67.93682, 113.7462 -14666, 67.92146, 130.6895 -14667, 70.4633, 118.4807 -14668, 68.16156, 131.5248 -14669, 68.81242, 144.2511 -14670, 70.05484, 125.4148 -14671, 65.61528, 111.0683 -14672, 70.77456, 124.4918 -14673, 68.13409, 134.5848 -14674, 68.87718, 135.3765 -14675, 66.85615, 114.1814 -14676, 65.19143, 115.6044 -14677, 69.53261, 134.0578 -14678, 71.28136, 135.9541 -14679, 66.47317, 106.9388 -14680, 69.85972, 137.5864 -14681, 66.56784, 120.5673 -14682, 64.99896, 121.0243 -14683, 65.5967, 131.1701 -14684, 65.11179, 119.3086 -14685, 72.43607, 137.4056 -14686, 66.27465, 129.0097 -14687, 67.6844, 118.539 -14688, 64.94671, 129.5048 -14689, 66.09981, 117.7368 -14690, 66.84125, 114.8767 -14691, 67.23393, 127.1033 -14692, 67.9501, 110.3671 -14693, 66.34338, 130.6015 -14694, 71.54739, 152.425 -14695, 71.10011, 133.8311 -14696, 66.80152, 124.965 -14697, 71.09075, 120.9877 -14698, 67.42631, 131.6672 -14699, 68.87576, 135.248 -14700, 67.6317, 118.7798 -14701, 65.61406, 138.9284 -14702, 67.09963, 113.8329 -14703, 68.15761, 119.3325 -14704, 67.06521, 104.9855 -14705, 67.00626, 138.5947 -14706, 69.21534, 133.6759 -14707, 65.49959, 119.6168 -14708, 67.12282, 131.6157 -14709, 66.27818, 129.3183 -14710, 68.05092, 129.3991 -14711, 71.21378, 150.0079 -14712, 65.8059, 128.0218 -14713, 69.01341, 127.8369 -14714, 64.38771, 103.3323 -14715, 71.28885, 132.8358 -14716, 68.01059, 136.4326 -14717, 67.40277, 131.675 -14718, 65.86277, 122.7182 -14719, 70.04407, 141.6413 -14720, 64.66349, 118.2509 -14721, 66.20468, 129.3437 -14722, 72.42652, 142.1927 -14723, 68.18756, 125.1862 -14724, 65.09832, 134.0936 -14725, 64.94607, 123.7487 -14726, 68.74582, 132.8903 -14727, 67.48779, 124.9625 -14728, 65.11114, 94.45359 -14729, 68.70291, 123.1642 -14730, 64.81203, 122.4859 -14731, 68.35035, 128.6184 -14732, 72.14415, 142.8257 -14733, 68.23639, 147.0343 -14734, 66.90007, 121.555 -14735, 68.96221, 145.2393 -14736, 69.44312, 119.8432 -14737, 65.04087, 131.9553 -14738, 67.33467, 126.2769 -14739, 70.00111, 139.7206 -14740, 65.86413, 114.5532 -14741, 66.76124, 121.4799 -14742, 68.6178, 138.031 -14743, 66.49285, 129.3542 -14744, 68.45981, 119.1174 -14745, 69.6046, 125.9209 -14746, 71.62721, 151.8017 -14747, 66.56949, 100.3424 -14748, 65.36772, 115.6658 -14749, 71.5466, 134.8652 -14750, 67.9212, 121.8751 -14751, 68.53005, 127.0172 -14752, 66.29177, 125.542 -14753, 70.0892, 148.1898 -14754, 66.45724, 137.0889 -14755, 66.90417, 124.4345 -14756, 71.96531, 160.8373 -14757, 65.79737, 111.0351 -14758, 71.99473, 135.4855 -14759, 67.88118, 125.1443 -14760, 67.9713, 132.0724 -14761, 66.68833, 124.6627 -14762, 69.08259, 120.4445 -14763, 67.7725, 120.6289 -14764, 67.54727, 127.846 -14765, 64.64468, 122.7172 -14766, 69.69364, 126.2985 -14767, 68.70439, 134.8945 -14768, 68.16991, 120.5405 -14769, 68.33163, 123.6751 -14770, 65.19663, 120.1252 -14771, 69.12973, 147.2327 -14772, 66.76336, 149.5213 -14773, 66.10726, 114.3077 -14774, 68.69461, 118.3486 -14775, 69.51345, 129.3136 -14776, 67.15638, 116.1097 -14777, 66.52538, 118.2619 -14778, 71.057, 150.4875 -14779, 69.19665, 124.4735 -14780, 66.76492, 120.8445 -14781, 68.09253, 121.9168 -14782, 67.35046, 129.862 -14783, 68.25237, 114.1292 -14784, 67.66866, 121.0367 -14785, 66.21079, 116.8308 -14786, 70.37472, 141.5234 -14787, 67.8132, 118.614 -14788, 66.42694, 115.2073 -14789, 68.20158, 114.2983 -14790, 68.77079, 135.0788 -14791, 70.60585, 124.6664 -14792, 68.09479, 129.3895 -14793, 64.8915, 121.5407 -14794, 67.12568, 137.1491 -14795, 69.97844, 129.5848 -14796, 67.77866, 130.9258 -14797, 71.39205, 144.5625 -14798, 67.96867, 144.8993 -14799, 72.76728, 158.5479 -14800, 73.38719, 154.6609 -14801, 69.32501, 135.3784 -14802, 66.65826, 124.0843 -14803, 68.63739, 137.5213 -14804, 70.10928, 126.2247 -14805, 68.39804, 141.12 -14806, 72.29783, 123.4305 -14807, 70.62523, 136.39 -14808, 71.44332, 141.1457 -14809, 70.41386, 133.5107 -14810, 64.86518, 114.7467 -14811, 68.80394, 111.0717 -14812, 69.49145, 138.1768 -14813, 66.01854, 113.5605 -14814, 70.48654, 127.2451 -14815, 66.80862, 125.5152 -14816, 70.6607, 132.6907 -14817, 66.68431, 104.9599 -14818, 65.58814, 132.2702 -14819, 66.36507, 124.7192 -14820, 67.09404, 97.52424 -14821, 66.48373, 109.9676 -14822, 68.82707, 132.1645 -14823, 64.69002, 114.4221 -14824, 69.01948, 113.5284 -14825, 69.43111, 141.7182 -14826, 70.07435, 133.3257 -14827, 66.8212, 121.7781 -14828, 68.06909, 129.9501 -14829, 69.6444, 124.8979 -14830, 64.80698, 121.6822 -14831, 67.37179, 125.3064 -14832, 67.39488, 108.6014 -14833, 68.39465, 118.6916 -14834, 68.4231, 156.2505 -14835, 69.41607, 124.4915 -14836, 66.82138, 120.3149 -14837, 65.58027, 109.5115 -14838, 71.02776, 160.1136 -14839, 67.8096, 141.57 -14840, 71.01235, 136.6575 -14841, 67.45353, 137.7991 -14842, 69.77346, 143.6829 -14843, 64.07515, 111.1404 -14844, 68.36516, 143.9045 -14845, 69.40935, 119.8486 -14846, 66.43953, 104.0047 -14847, 69.77091, 126.6292 -14848, 71.29182, 148.3832 -14849, 67.26889, 119.2626 -14850, 68.52627, 140.521 -14851, 63.95467, 100.0358 -14852, 68.27822, 114.3188 -14853, 69.01564, 129.8548 -14854, 68.33275, 131.6805 -14855, 65.91471, 111.3135 -14856, 65.5471, 119.9587 -14857, 66.88448, 124.6394 -14858, 67.50342, 116.6803 -14859, 71.35101, 148.2762 -14860, 66.5912, 128.9648 -14861, 65.14281, 105.1575 -14862, 67.26097, 128.2402 -14863, 68.77974, 134.0494 -14864, 66.92786, 125.5997 -14865, 70.20106, 154.8632 -14866, 68.1684, 109.4807 -14867, 65.9685, 121.0642 -14868, 69.2944, 139.0479 -14869, 68.18398, 115.8062 -14870, 67.3956, 138.3648 -14871, 69.32049, 127.5045 -14872, 66.66937, 120.5405 -14873, 68.62135, 145.4409 -14874, 69.82043, 135.6144 -14875, 68.00272, 139.2716 -14876, 69.35468, 129.8923 -14877, 70.19606, 147.7932 -14878, 69.94747, 138.2673 -14879, 69.48896, 117.94 -14880, 70.48888, 119.9716 -14881, 65.70003, 115.1262 -14882, 69.24694, 126.8539 -14883, 67.30239, 133.8636 -14884, 69.64951, 135.6532 -14885, 65.50558, 130.4526 -14886, 72.17516, 134.4131 -14887, 67.65538, 140.6611 -14888, 69.96429, 130.0129 -14889, 66.61309, 124.0167 -14890, 67.43982, 136.3044 -14891, 63.73814, 126.0077 -14892, 68.71436, 134.623 -14893, 70.77193, 133.9877 -14894, 69.37902, 141.4066 -14895, 68.95079, 137.57 -14896, 68.90363, 131.0382 -14897, 65.21203, 116.4051 -14898, 67.31722, 117.2372 -14899, 64.38819, 124.1841 -14900, 66.35807, 119.5823 -14901, 66.38672, 131.7982 -14902, 66.6684, 143.8648 -14903, 65.19706, 95.36862 -14904, 69.42103, 117.8366 -14905, 64.06378, 123.079 -14906, 68.24753, 133.6979 -14907, 68.89321, 133.5338 -14908, 70.65875, 141.7325 -14909, 66.17187, 132.7272 -14910, 69.79746, 139.5868 -14911, 69.39866, 149.026 -14912, 67.93777, 117.9616 -14913, 67.26378, 127.81 -14914, 67.44849, 139.9993 -14915, 68.57844, 127.3023 -14916, 68.18689, 116.6239 -14917, 71.21952, 142.336 -14918, 69.32096, 123.3451 -14919, 65.65913, 110.7946 -14920, 70.37, 143.1529 -14921, 64.79003, 131.5436 -14922, 65.92313, 97.29027 -14923, 66.73192, 128.011 -14924, 65.40144, 111.9967 -14925, 66.71355, 121.5899 -14926, 65.52829, 120.2156 -14927, 68.39107, 127.4346 -14928, 69.32446, 131.3958 -14929, 73.19305, 144.5579 -14930, 68.08406, 116.6268 -14931, 70.00156, 122.5793 -14932, 70.67706, 117.6249 -14933, 66.43552, 134.1497 -14934, 68.10398, 133.4111 -14935, 70.03197, 126.462 -14936, 64.56491, 114.9612 -14937, 68.39336, 132.7568 -14938, 68.0955, 127.074 -14939, 66.25512, 137.4863 -14940, 67.61981, 113.9223 -14941, 67.10991, 130.6669 -14942, 68.30287, 122.2908 -14943, 70.05068, 126.1234 -14944, 67.69089, 132.2541 -14945, 69.26578, 122.9495 -14946, 70.84848, 131.7416 -14947, 67.14127, 133.1617 -14948, 65.6565, 121.3197 -14949, 67.91043, 120.8734 -14950, 66.40429, 130.1516 -14951, 67.17903, 126.7042 -14952, 65.97607, 136.9425 -14953, 66.04298, 114.3685 -14954, 71.71449, 153.2031 -14955, 66.09004, 125.3156 -14956, 68.28237, 137.1149 -14957, 69.2815, 127.2959 -14958, 65.76268, 113.9716 -14959, 66.98438, 122.2353 -14960, 65.6529, 131.5253 -14961, 68.95828, 138.3287 -14962, 68.66489, 119.6475 -14963, 63.28472, 134.2575 -14964, 69.3378, 145.5026 -14965, 68.23957, 129.4421 -14966, 67.91304, 111.7014 -14967, 66.16765, 133.5217 -14968, 67.31495, 115.6811 -14969, 66.97137, 118.4895 -14970, 65.80597, 124.801 -14971, 66.79723, 118.5487 -14972, 65.12057, 115.9726 -14973, 66.84355, 123.2907 -14974, 68.38863, 110.792 -14975, 68.68709, 138.8422 -14976, 71.59953, 129.4179 -14977, 68.32022, 137.7368 -14978, 68.31, 108.7164 -14979, 66.47004, 122.2851 -14980, 68.12458, 130.3549 -14981, 72.0858, 138.3812 -14982, 68.82191, 114.476 -14983, 66.5675, 113.8546 -14984, 70.19345, 131.3116 -14985, 68.39855, 142.0522 -14986, 68.23971, 132.4932 -14987, 71.56445, 137.2813 -14988, 68.85791, 137.9349 -14989, 70.46101, 133.3018 -14990, 68.19618, 119.5517 -14991, 67.34632, 123.2255 -14992, 67.57452, 119.1006 -14993, 70.49071, 137.8164 -14994, 69.00788, 133.1503 -14995, 69.18618, 120.7711 -14996, 69.27963, 134.9563 -14997, 68.30928, 132.4946 -14998, 69.85509, 112.2776 -14999, 66.99205, 154.8623 -15000, 68.83483, 132.5996 -15001, 65.51992, 111.0786 -15002, 69.3211, 128.1426 -15003, 64.91352, 132.2049 -15004, 67.44463, 136.2209 -15005, 68.36722, 135.6455 -15006, 65.47213, 83.33859 -15007, 69.36933, 134.65 -15008, 69.54885, 134.6695 -15009, 65.32827, 114.8547 -15010, 67.09904, 118.2642 -15011, 66.42256, 133.6799 -15012, 71.0263, 128.2917 -15013, 69.2985, 121.2343 -15014, 66.85983, 116.8298 -15015, 65.68344, 116.4899 -15016, 68.44039, 131.2274 -15017, 66.09236, 124.9588 -15018, 66.89796, 105.0615 -15019, 67.65639, 126.238 -15020, 69.01429, 132.3267 -15021, 67.95663, 134.3919 -15022, 62.63031, 98.87507 -15023, 70.47594, 118.9593 -15024, 70.99287, 132.9842 -15025, 68.86312, 137.4119 -15026, 71.61657, 126.9508 -15027, 65.17342, 110.3023 -15028, 66.6864, 134.4681 -15029, 68.20849, 133.9785 -15030, 67.12074, 115.4099 -15031, 68.43384, 124.156 -15032, 67.80769, 139.6569 -15033, 69.55436, 126.1296 -15034, 69.626, 130.6209 -15035, 66.73544, 127.3142 -15036, 66.85735, 115.6542 -15037, 68.73859, 114.5677 -15038, 67.84689, 129.8946 -15039, 67.12274, 132.4266 -15040, 65.01406, 124.2521 -15041, 67.47471, 102.7244 -15042, 67.25719, 144.0751 -15043, 67.24826, 127.6367 -15044, 66.30738, 104.6319 -15045, 67.41475, 125.3851 -15046, 66.58363, 126.1534 -15047, 65.93812, 104.2595 -15048, 69.80661, 115.1499 -15049, 68.54967, 139.205 -15050, 70.66876, 133.3968 -15051, 68.59748, 123.4007 -15052, 69.92431, 124.9688 -15053, 69.29221, 140.663 -15054, 70.8323, 114.6896 -15055, 69.47654, 150.3265 -15056, 65.12741, 109.1273 -15057, 66.52541, 100.9191 -15058, 66.75392, 109.0707 -15059, 67.60759, 132.4966 -15060, 70.49105, 131.9175 -15061, 62.95883, 122.8187 -15062, 67.16728, 126.6304 -15063, 67.37938, 115.0117 -15064, 66.73605, 120.1152 -15065, 66.50685, 120.364 -15066, 66.30539, 103.8522 -15067, 69.84097, 139.6097 -15068, 68.43171, 111.0371 -15069, 70.21848, 113.2947 -15070, 67.94852, 118.2123 -15071, 67.36696, 118.6315 -15072, 69.06908, 146.7647 -15073, 64.44615, 113.4007 -15074, 65.42316, 122.9447 -15075, 66.9796, 129.0708 -15076, 69.01274, 116.1521 -15077, 67.59833, 136.7678 -15078, 65.9525, 130.6652 -15079, 67.12379, 125.5072 -15080, 70.19532, 126.5499 -15081, 69.38455, 131.5782 -15082, 69.88289, 143.9437 -15083, 66.33476, 124.6417 -15084, 69.86933, 127.138 -15085, 69.17547, 142.2736 -15086, 63.69076, 100.3788 -15087, 68.94349, 112.6258 -15088, 67.82915, 103.9962 -15089, 68.71299, 133.2248 -15090, 71.78816, 143.102 -15091, 70.80693, 142.3487 -15092, 67.04918, 116.1558 -15093, 70.7374, 143.0558 -15094, 63.99731, 102.6267 -15095, 68.44638, 132.1454 -15096, 64.8252, 117.1635 -15097, 70.32462, 131.8657 -15098, 70.20879, 163.8728 -15099, 68.04153, 137.4699 -15100, 68.99917, 129.7717 -15101, 67.06517, 120.3846 -15102, 69.51164, 124.2078 -15103, 63.43652, 126.3691 -15104, 70.20568, 136.4101 -15105, 67.06886, 127.1024 -15106, 70.71333, 141.4736 -15107, 66.53558, 133.3857 -15108, 66.33691, 123.5988 -15109, 66.76051, 131.4503 -15110, 69.23838, 126.2803 -15111, 64.43238, 92.31443 -15112, 67.65387, 114.1495 -15113, 65.28297, 121.8429 -15114, 67.29254, 122.4833 -15115, 66.67426, 108.0738 -15116, 67.18934, 126.9589 -15117, 68.86103, 148.8058 -15118, 65.91764, 136.8749 -15119, 67.48274, 137.6678 -15120, 65.86101, 123.4096 -15121, 69.58332, 131.3107 -15122, 66.48236, 121.0822 -15123, 67.12587, 130.7108 -15124, 68.03928, 118.5115 -15125, 70.60422, 133.7741 -15126, 67.35277, 134.1125 -15127, 64.96602, 124.6932 -15128, 69.73659, 126.8534 -15129, 67.85001, 116.5084 -15130, 67.11269, 137.5854 -15131, 68.91724, 126.4464 -15132, 66.10288, 143.3539 -15133, 66.92685, 114.6862 -15134, 67.62461, 123.238 -15135, 67.68375, 146.636 -15136, 69.69504, 131.1339 -15137, 67.53015, 109.7927 -15138, 66.49217, 112.7151 -15139, 67.49556, 115.8608 -15140, 65.22979, 118.5155 -15141, 65.14555, 109.0792 -15142, 69.96429, 118.1581 -15143, 66.96921, 119.725 -15144, 72.68406, 140.7454 -15145, 70.62989, 143.2336 -15146, 66.28962, 127.5244 -15147, 66.87942, 118.188 -15148, 69.63736, 138.7506 -15149, 72.13221, 133.896 -15150, 67.64678, 116.0453 -15151, 66.29793, 130.1744 -15152, 66.24001, 114.7215 -15153, 69.04627, 123.7546 -15154, 68.95959, 124.4974 -15155, 67.50624, 145.7484 -15156, 67.53604, 137.2567 -15157, 68.20346, 121.3491 -15158, 67.12901, 119.374 -15159, 67.57283, 123.2969 -15160, 66.67624, 140.9397 -15161, 65.26043, 101.1571 -15162, 69.96595, 142.8463 -15163, 69.89433, 130.4151 -15164, 69.40222, 126.5053 -15165, 69.38557, 139.4706 -15166, 68.37978, 126.2987 -15167, 69.18198, 139.8423 -15168, 71.88614, 134.319 -15169, 69.07546, 114.2239 -15170, 66.55796, 117.9522 -15171, 65.84951, 135.0075 -15172, 69.30328, 128.4679 -15173, 70.56769, 137.2495 -15174, 65.70932, 124.1531 -15175, 68.28887, 129.7135 -15176, 68.64234, 126.0445 -15177, 66.48124, 124.1437 -15178, 66.33382, 128.3406 -15179, 67.14291, 110.4774 -15180, 68.01799, 131.4676 -15181, 67.99908, 132.4317 -15182, 66.54521, 125.3635 -15183, 66.48652, 133.496 -15184, 68.49951, 106.7804 -15185, 67.05746, 140.4379 -15186, 67.81343, 122.49 -15187, 70.76865, 141.9201 -15188, 67.35674, 119.6444 -15189, 66.58169, 140.4575 -15190, 68.81841, 115.7801 -15191, 67.78353, 138.1807 -15192, 70.59967, 133.0057 -15193, 66.17798, 117.8164 -15194, 64.52454, 122.6902 -15195, 69.19398, 124.8873 -15196, 72.00347, 115.7439 -15197, 68.22649, 135.6941 -15198, 64.9649, 110.6567 -15199, 68.72693, 140.5141 -15200, 65.62412, 102.6406 -15201, 67.93149, 119.2796 -15202, 68.15359, 136.3666 -15203, 67.10444, 119.5672 -15204, 66.78636, 115.2495 -15205, 67.47237, 119.3153 -15206, 69.15877, 134.0016 -15207, 66.94609, 124.1271 -15208, 64.64516, 121.6082 -15209, 68.23103, 119.5605 -15210, 74.59993, 147.0372 -15211, 69.17074, 116.6371 -15212, 64.4579, 106.3788 -15213, 67.89229, 136.952 -15214, 67.93228, 139.162 -15215, 65.63166, 124.0105 -15216, 69.93332, 151.8863 -15217, 67.06235, 119.6547 -15218, 68.72155, 134.1575 -15219, 67.99221, 120.0651 -15220, 69.48024, 131.2464 -15221, 69.63642, 134.5954 -15222, 68.6781, 113.8461 -15223, 68.93508, 135.1919 -15224, 65.25731, 113.4053 -15225, 69.55037, 150.3096 -15226, 64.50942, 126.2417 -15227, 66.76791, 105.8579 -15228, 68.19097, 119.0327 -15229, 71.36573, 149.988 -15230, 71.51642, 134.707 -15231, 70.1695, 143.5692 -15232, 67.27132, 113.8254 -15233, 63.92789, 122.9493 -15234, 70.109, 114.8256 -15235, 70.32118, 130.2398 -15236, 68.62967, 125.1725 -15237, 64.68249, 116.3063 -15238, 65.62406, 127.038 -15239, 68.33608, 130.0088 -15240, 68.15973, 128.8837 -15241, 66.39703, 129.2909 -15242, 68.7637, 133.8946 -15243, 62.73218, 115.6746 -15244, 67.25989, 119.323 -15245, 67.31674, 127.174 -15246, 70.01359, 144.3033 -15247, 66.29943, 123.5503 -15248, 69.3621, 134.9359 -15249, 67.36081, 126.2309 -15250, 66.67762, 117.7297 -15251, 67.48578, 118.3315 -15252, 69.01325, 126.9036 -15253, 68.93436, 113.2651 -15254, 67.98407, 142.2802 -15255, 64.70492, 113.5925 -15256, 68.71176, 142.4521 -15257, 66.65959, 121.0303 -15258, 67.62403, 118.5923 -15259, 69.56171, 137.7018 -15260, 66.20244, 118.5927 -15261, 69.69845, 133.8294 -15262, 64.18408, 128.3516 -15263, 67.04695, 116.5957 -15264, 65.07655, 112.7787 -15265, 66.54927, 119.9512 -15266, 64.94199, 118.4685 -15267, 70.72113, 138.7877 -15268, 65.72731, 105.9051 -15269, 70.72856, 132.1233 -15270, 69.73747, 142.4348 -15271, 70.38866, 118.807 -15272, 66.2377, 127.8696 -15273, 69.15005, 119.5495 -15274, 71.55308, 143.2831 -15275, 67.3427, 120.6477 -15276, 70.81002, 147.7208 -15277, 68.94879, 134.6874 -15278, 67.83322, 107.5648 -15279, 66.80215, 115.2344 -15280, 62.38539, 105.2355 -15281, 70.19469, 134.5963 -15282, 68.78438, 134.1788 -15283, 69.24853, 109.9131 -15284, 70.30374, 125.2977 -15285, 70.82191, 129.2991 -15286, 71.00821, 146.8951 -15287, 68.13521, 130.0498 -15288, 69.55141, 125.0764 -15289, 66.80746, 99.00428 -15290, 64.38131, 117.1049 -15291, 68.01762, 114.3042 -15292, 69.57085, 124.6849 -15293, 67.64249, 131.7347 -15294, 67.09186, 115.918 -15295, 71.33608, 136.9999 -15296, 68.33188, 134.8577 -15297, 68.19698, 141.5204 -15298, 71.61186, 138.5029 -15299, 68.58219, 125.3785 -15300, 69.51224, 127.0237 -15301, 68.94224, 121.7044 -15302, 67.56831, 130.4685 -15303, 62.70761, 121.0772 -15304, 69.65338, 144.7186 -15305, 69.17779, 123.8314 -15306, 69.1034, 128.4483 -15307, 66.22062, 142.7467 -15308, 63.90675, 120.7712 -15309, 68.0134, 142.6934 -15310, 67.39766, 124.2776 -15311, 67.86913, 123.3232 -15312, 68.93266, 109.3652 -15313, 64.65561, 129.5612 -15314, 67.64286, 116.2336 -15315, 68.5499, 144.1276 -15316, 66.47408, 122.8267 -15317, 65.95487, 112.2416 -15318, 66.32695, 113.5088 -15319, 68.26741, 123.2998 -15320, 70.78463, 134.7647 -15321, 70.4697, 139.8125 -15322, 64.96269, 122.9922 -15323, 68.34706, 130.6799 -15324, 73.07882, 147.7522 -15325, 70.32529, 134.3631 -15326, 72.11328, 143.5666 -15327, 72.90519, 139.1213 -15328, 64.87304, 118.9879 -15329, 68.88989, 123.4282 -15330, 69.17388, 122.9818 -15331, 66.71493, 123.5503 -15332, 67.02678, 140.1351 -15333, 67.30884, 118.4517 -15334, 62.58703, 102.193 -15335, 68.64869, 129.519 -15336, 67.74901, 120.7554 -15337, 71.64536, 122.4384 -15338, 66.66707, 121.7723 -15339, 68.299, 127.1307 -15340, 67.18546, 119.8945 -15341, 67.60484, 145.6195 -15342, 67.42626, 110.1731 -15343, 66.47848, 117.1419 -15344, 70.4336, 135.951 -15345, 66.14942, 114.8362 -15346, 65.24499, 133.7044 -15347, 68.29032, 124.673 -15348, 68.78918, 132.8131 -15349, 69.25119, 130.8556 -15350, 67.81337, 131.5901 -15351, 67.14685, 129.0973 -15352, 66.38206, 119.9348 -15353, 69.90033, 135.8803 -15354, 69.87924, 147.5404 -15355, 67.05535, 123.0133 -15356, 69.92107, 150.7238 -15357, 66.75984, 108.9817 -15358, 66.63653, 106.6289 -15359, 68.95163, 126.1426 -15360, 70.80464, 141.4493 -15361, 70.82565, 142.3535 -15362, 65.81239, 142.3511 -15363, 68.58827, 121.4297 -15364, 69.97348, 121.2647 -15365, 65.8631, 120.7951 -15366, 67.18395, 137.6251 -15367, 65.3295, 112.2046 -15368, 70.54919, 143.444 -15369, 64.27425, 115.4872 -15370, 70.23423, 129.5721 -15371, 68.52809, 140.6879 -15372, 66.50366, 132.8973 -15373, 66.6848, 109.0765 -15374, 68.96487, 122.8685 -15375, 65.95854, 122.3757 -15376, 71.1723, 127.8293 -15377, 70.53792, 125.9055 -15378, 68.59623, 121.8365 -15379, 63.09214, 105.3814 -15380, 70.15201, 128.9654 -15381, 69.93896, 135.1878 -15382, 68.3899, 150.545 -15383, 66.77273, 118.2023 -15384, 68.0307, 112.1099 -15385, 68.32284, 117.0799 -15386, 68.70199, 135.324 -15387, 69.18134, 134.7164 -15388, 70.76125, 131.4654 -15389, 67.4487, 138.5211 -15390, 65.80367, 112.9028 -15391, 67.84868, 135.7776 -15392, 70.37215, 117.2445 -15393, 68.05707, 115.4099 -15394, 67.83306, 122.5637 -15395, 68.36174, 128.5694 -15396, 67.68101, 117.5547 -15397, 65.56852, 116.2469 -15398, 65.84858, 118.0476 -15399, 67.48284, 113.4292 -15400, 68.15474, 127.9674 -15401, 67.60055, 115.2546 -15402, 66.3466, 136.7939 -15403, 68.00428, 141.7709 -15404, 65.89079, 111.1971 -15405, 69.71858, 129.3685 -15406, 66.92519, 123.8781 -15407, 67.86156, 134.4959 -15408, 72.30671, 145.3807 -15409, 69.04887, 132.7148 -15410, 68.37203, 137.6722 -15411, 69.46166, 129.7161 -15412, 64.55413, 109.6147 -15413, 62.91846, 111.747 -15414, 69.66751, 114.9432 -15415, 68.7226, 114.1321 -15416, 66.99763, 119.7136 -15417, 67.96265, 129.548 -15418, 62.54756, 102.5937 -15419, 67.69388, 115.6799 -15420, 68.17765, 125.0763 -15421, 66.84001, 140.2859 -15422, 70.49117, 127.9204 -15423, 64.38355, 115.77 -15424, 67.4107, 115.8599 -15425, 68.71162, 136.6454 -15426, 69.38429, 112.8169 -15427, 68.19334, 121.7475 -15428, 67.66466, 120.6145 -15429, 68.85946, 136.1552 -15430, 70.88504, 132.1232 -15431, 68.90069, 128.3104 -15432, 69.74202, 148.7868 -15433, 65.32131, 122.75 -15434, 66.05517, 105.019 -15435, 67.46121, 124.1873 -15436, 66.97366, 119.5436 -15437, 71.24954, 125.3502 -15438, 66.25833, 105.2265 -15439, 65.33602, 127.9746 -15440, 67.81863, 124.7162 -15441, 68.88544, 123.1058 -15442, 68.50931, 123.0264 -15443, 68.59759, 132.1907 -15444, 69.57731, 143.1516 -15445, 69.94225, 131.2863 -15446, 68.32527, 127.9279 -15447, 67.709, 137.9562 -15448, 68.14718, 142.613 -15449, 69.38748, 135.7762 -15450, 67.74435, 131.3401 -15451, 70.22145, 133.1431 -15452, 67.57101, 127.27 -15453, 67.8206, 125.5015 -15454, 66.2936, 114.019 -15455, 68.27218, 119.0224 -15456, 67.90289, 140.4732 -15457, 71.51032, 134.635 -15458, 69.78562, 135.451 -15459, 67.5308, 123.7992 -15460, 68.60276, 140.7911 -15461, 72.9157, 137.3991 -15462, 68.39973, 114.1057 -15463, 68.743, 134.3778 -15464, 67.07172, 126.1538 -15465, 66.5829, 115.1352 -15466, 68.20199, 110.4711 -15467, 68.5013, 136.1652 -15468, 67.65171, 137.7229 -15469, 69.73023, 128.6487 -15470, 65.67533, 95.8643 -15471, 68.98154, 147.9151 -15472, 68.41366, 130.7171 -15473, 67.65729, 128.6169 -15474, 70.93404, 135.8496 -15475, 71.4025, 163.3466 -15476, 68.66985, 119.7289 -15477, 67.29176, 131.9414 -15478, 69.39537, 129.0571 -15479, 67.96799, 121.7029 -15480, 66.18912, 112.539 -15481, 69.42809, 133.8009 -15482, 67.49189, 117.2768 -15483, 68.53399, 120.6305 -15484, 69.81642, 119.9056 -15485, 68.63746, 127.091 -15486, 68.8994, 131.4347 -15487, 67.9315, 105.7268 -15488, 71.5028, 119.767 -15489, 67.15119, 127.6184 -15490, 69.00578, 123.6567 -15491, 71.94177, 158.7778 -15492, 64.97172, 133.6738 -15493, 66.55485, 134.9888 -15494, 68.68354, 132.3782 -15495, 68.36506, 124.8407 -15496, 64.1255, 115.6005 -15497, 66.19137, 129.8423 -15498, 64.14117, 121.0525 -15499, 67.96989, 133.8695 -15500, 69.18067, 133.8081 -15501, 69.19612, 119.4294 -15502, 73.29095, 153.6943 -15503, 69.45026, 117.4511 -15504, 70.48029, 146.3542 -15505, 65.61927, 127.5175 -15506, 66.73212, 120.9633 -15507, 66.97858, 135.7225 -15508, 65.35568, 131.9 -15509, 66.13306, 132.2003 -15510, 66.19537, 111.411 -15511, 69.60618, 115.0129 -15512, 64.85576, 131.9602 -15513, 66.14641, 117.3194 -15514, 68.06858, 147.1991 -15515, 68.42537, 139.2146 -15516, 64.72761, 113.471 -15517, 67.12449, 120.4451 -15518, 68.2669, 120.1299 -15519, 64.63001, 130.0922 -15520, 65.93702, 123.0907 -15521, 69.72134, 134.9164 -15522, 67.2083, 115.8391 -15523, 72.91999, 154.2153 -15524, 69.98652, 129.3433 -15525, 67.19622, 109.1018 -15526, 68.80471, 121.8463 -15527, 68.95943, 131.1717 -15528, 70.71013, 107.6082 -15529, 69.31161, 110.585 -15530, 68.37667, 139.5479 -15531, 65.87762, 108.2863 -15532, 67.57576, 137.937 -15533, 69.04748, 120.0193 -15534, 64.96906, 130.7477 -15535, 65.00848, 112.3542 -15536, 69.66271, 112.7833 -15537, 68.36325, 93.56304 -15538, 67.78303, 135.3219 -15539, 68.35589, 130.4797 -15540, 69.08049, 137.2105 -15541, 66.18595, 116.7954 -15542, 69.8707, 127.2318 -15543, 68.14345, 119.3634 -15544, 71.50856, 147.4461 -15545, 67.58713, 152.0826 -15546, 69.32161, 127.0991 -15547, 64.32043, 101.6548 -15548, 70.04715, 129.3431 -15549, 67.95275, 120.5799 -15550, 69.3643, 115.9751 -15551, 65.61191, 115.1222 -15552, 66.45951, 117.4793 -15553, 67.01312, 116.3448 -15554, 67.15306, 133.1964 -15555, 68.38756, 123.0091 -15556, 66.91337, 123.0284 -15557, 69.39488, 125.889 -15558, 67.43209, 136.7256 -15559, 67.25651, 125.2836 -15560, 70.1574, 129.8738 -15561, 68.21801, 145.046 -15562, 66.54598, 131.5953 -15563, 67.91875, 134.6972 -15564, 65.47246, 125.9926 -15565, 68.64399, 123.5308 -15566, 67.54097, 133.869 -15567, 67.67111, 127.5556 -15568, 67.54769, 129.9528 -15569, 68.83269, 116.6869 -15570, 66.9893, 116.2079 -15571, 68.12926, 139.5733 -15572, 67.21663, 117.1835 -15573, 66.64897, 119.2815 -15574, 67.21762, 127.3762 -15575, 66.21812, 121.0712 -15576, 67.3438, 133.4411 -15577, 68.11292, 109.9029 -15578, 69.87913, 127.7891 -15579, 68.21125, 138.5343 -15580, 65.68767, 141.1901 -15581, 65.99233, 113.6949 -15582, 67.60517, 102.2036 -15583, 65.90505, 139.2275 -15584, 70.34152, 127.0828 -15585, 66.07605, 120.0142 -15586, 65.77453, 126.9642 -15587, 65.71341, 112.0802 -15588, 68.57546, 141.1028 -15589, 67.93372, 112.6789 -15590, 67.70726, 136.6165 -15591, 69.36386, 143.3529 -15592, 70.64307, 133.4741 -15593, 69.04345, 143.0016 -15594, 69.57571, 154.5079 -15595, 67.52772, 136.2476 -15596, 66.33405, 120.4514 -15597, 65.23795, 115.1459 -15598, 71.71197, 127.5762 -15599, 66.40209, 110.5565 -15600, 66.41322, 123.2217 -15601, 65.24322, 132.3124 -15602, 69.37652, 144.9025 -15603, 66.97944, 116.5849 -15604, 66.94715, 116.96 -15605, 68.35779, 119.4615 -15606, 67.72118, 116.2328 -15607, 66.6547, 123.8393 -15608, 71.16116, 131.0291 -15609, 69.76995, 132.3991 -15610, 67.08047, 123.6803 -15611, 70.16271, 132.0564 -15612, 67.20725, 125.4732 -15613, 66.441, 109.2837 -15614, 70.43908, 128.0154 -15615, 67.42411, 117.7129 -15616, 67.23794, 115.5231 -15617, 65.54462, 116.0185 -15618, 68.58579, 131.2912 -15619, 71.46377, 140.9955 -15620, 67.02704, 152.026 -15621, 70.74595, 150.4723 -15622, 64.55871, 123.1474 -15623, 66.43466, 128.8558 -15624, 71.88538, 129.4843 -15625, 67.35006, 136.4792 -15626, 67.26021, 123.2473 -15627, 69.42105, 131.1226 -15628, 67.02923, 118.0796 -15629, 70.15598, 143.471 -15630, 68.16962, 123.4292 -15631, 69.33135, 118.6 -15632, 68.82239, 119.6967 -15633, 70.70061, 132.7463 -15634, 63.01405, 116.679 -15635, 70.79121, 129.9765 -15636, 70.10094, 140.6238 -15637, 67.68598, 113.3493 -15638, 70.44934, 130.0917 -15639, 68.47164, 143.6588 -15640, 69.22334, 147.1708 -15641, 69.05267, 126.3728 -15642, 69.22824, 128.1722 -15643, 69.30531, 140.5582 -15644, 67.3569, 114.6302 -15645, 68.14178, 133.9639 -15646, 67.50705, 127.7368 -15647, 68.87072, 139.0535 -15648, 67.27839, 134.3672 -15649, 66.97126, 116.9116 -15650, 67.27037, 121.5396 -15651, 66.01214, 116.2959 -15652, 65.90324, 117.2595 -15653, 65.97601, 115.5695 -15654, 65.01385, 117.3807 -15655, 68.3634, 126.2682 -15656, 66.71134, 130.885 -15657, 70.69657, 120.929 -15658, 70.69145, 134.6101 -15659, 71.82796, 136.3967 -15660, 65.57821, 112.8178 -15661, 67.87092, 141.7216 -15662, 69.38038, 135.5633 -15663, 69.34518, 139.0857 -15664, 67.16737, 134.124 -15665, 68.26749, 122.9496 -15666, 67.82439, 129.221 -15667, 63.97761, 114.6071 -15668, 68.59532, 135.5424 -15669, 65.85937, 131.0302 -15670, 65.73705, 112.9266 -15671, 68.55083, 137.6187 -15672, 66.17839, 125.057 -15673, 63.43905, 103.7247 -15674, 64.61373, 115.6394 -15675, 64.14292, 114.1789 -15676, 64.25756, 122.5431 -15677, 67.52237, 137.2828 -15678, 66.64326, 119.2689 -15679, 68.4414, 129.9912 -15680, 70.65253, 114.6167 -15681, 68.04596, 113.3741 -15682, 68.07645, 115.4976 -15683, 66.06383, 119.0574 -15684, 69.31688, 138.3508 -15685, 68.35005, 130.7714 -15686, 68.11006, 121.5984 -15687, 67.60474, 132.0105 -15688, 65.64374, 111.5052 -15689, 69.18597, 145.8104 -15690, 70.15414, 127.0499 -15691, 68.92615, 117.2627 -15692, 71.21385, 125.7487 -15693, 70.58186, 116.7541 -15694, 69.20943, 126.4311 -15695, 68.11377, 133.0339 -15696, 67.54765, 130.4505 -15697, 65.63714, 130.5983 -15698, 67.39903, 143.0303 -15699, 68.25314, 120.4308 -15700, 67.56373, 130.1949 -15701, 63.40403, 138.8565 -15702, 67.13774, 114.4542 -15703, 66.48756, 135.5376 -15704, 66.61374, 123.9797 -15705, 68.4256, 130.75 -15706, 71.18574, 143.5065 -15707, 67.99548, 104.9198 -15708, 68.42032, 129.021 -15709, 67.75353, 110.3398 -15710, 68.99095, 135.43 -15711, 66.73917, 118.7027 -15712, 73.15071, 147.0571 -15713, 66.71381, 115.7718 -15714, 67.26833, 122.3568 -15715, 69.68744, 146.7596 -15716, 71.24277, 150.5403 -15717, 67.21908, 128.3988 -15718, 67.04756, 129.4247 -15719, 68.03582, 133.8249 -15720, 66.73546, 123.987 -15721, 64.51386, 145.7486 -15722, 68.14688, 109.3535 -15723, 69.3206, 149.6076 -15724, 68.78965, 136.5204 -15725, 68.86876, 136.3434 -15726, 68.21886, 131.5544 -15727, 70.3612, 110.3731 -15728, 65.26249, 108.1267 -15729, 69.42921, 124.1743 -15730, 65.74235, 129.9598 -15731, 63.94659, 130.0202 -15732, 66.16987, 127.7085 -15733, 64.40661, 114.9881 -15734, 67.26361, 111.7895 -15735, 67.44707, 130.3438 -15736, 65.40338, 102.6185 -15737, 70.44362, 129.8482 -15738, 70.22944, 138.4534 -15739, 68.02875, 132.7304 -15740, 66.88354, 116.153 -15741, 68.52738, 108.5851 -15742, 68.12687, 127.3693 -15743, 69.64371, 137.753 -15744, 66.28769, 122.0997 -15745, 67.5751, 129.523 -15746, 68.65998, 123.6958 -15747, 65.92461, 120.7062 -15748, 70.10254, 139.5667 -15749, 66.8777, 132.8097 -15750, 70.26733, 136.3759 -15751, 65.16569, 137.0949 -15752, 67.89454, 133.6111 -15753, 67.6881, 131.3197 -15754, 63.98477, 117.5309 -15755, 73.2731, 120.6557 -15756, 67.38426, 148.594 -15757, 69.40435, 143.1126 -15758, 67.50653, 114.2218 -15759, 68.20742, 126.5535 -15760, 71.0084, 138.5358 -15761, 66.08852, 127.8555 -15762, 67.10118, 116.9214 -15763, 68.0587, 108.7064 -15764, 68.40527, 141.2409 -15765, 68.86958, 126.5546 -15766, 69.42117, 140.9856 -15767, 66.8765, 114.5692 -15768, 67.38679, 145.2286 -15769, 69.73443, 145.9757 -15770, 67.22426, 117.1126 -15771, 67.8476, 128.6058 -15772, 70.25478, 132.2171 -15773, 65.66468, 132.7203 -15774, 65.68942, 120.1367 -15775, 70.35956, 140.5765 -15776, 67.89833, 117.8036 -15777, 71.29145, 133.9801 -15778, 68.07826, 129.8407 -15779, 67.88304, 109.2468 -15780, 65.7471, 129.3293 -15781, 70.82378, 136.3718 -15782, 68.98715, 130.8191 -15783, 68.20438, 123.5732 -15784, 69.0132, 142.563 -15785, 65.20002, 100.3488 -15786, 65.63714, 135.9242 -15787, 69.41814, 121.004 -15788, 69.3546, 135.1652 -15789, 69.87385, 128.9834 -15790, 69.48099, 123.9738 -15791, 63.8773, 111.8653 -15792, 67.05966, 116.0247 -15793, 66.56715, 130.2285 -15794, 67.36107, 116.0479 -15795, 67.11625, 111.0254 -15796, 69.29711, 135.6468 -15797, 69.78731, 133.3097 -15798, 69.29322, 129.2499 -15799, 70.9491, 131.2845 -15800, 66.63025, 129.8742 -15801, 65.36933, 132.5488 -15802, 68.85029, 120.5336 -15803, 67.71967, 123.9878 -15804, 69.43243, 137.2161 -15805, 70.39465, 137.8235 -15806, 68.07996, 128.6478 -15807, 68.71273, 115.1458 -15808, 67.11097, 134.6806 -15809, 65.95239, 131.6371 -15810, 66.32713, 150.0352 -15811, 68.22637, 120.5216 -15812, 70.70513, 143.6464 -15813, 67.97221, 112.9209 -15814, 69.24506, 145.094 -15815, 69.11257, 129.4851 -15816, 64.77694, 114.4425 -15817, 67.58057, 117.4571 -15818, 69.07466, 130.3215 -15819, 70.55491, 145.2355 -15820, 66.22396, 109.8105 -15821, 64.38465, 109.9922 -15822, 69.10443, 130.7489 -15823, 66.15927, 144.2465 -15824, 66.80091, 112.0282 -15825, 68.97519, 128.6123 -15826, 68.97731, 133.5575 -15827, 71.23152, 142.6203 -15828, 68.61435, 140.4561 -15829, 62.37781, 124.7478 -15830, 66.18523, 121.0028 -15831, 68.24677, 133.8376 -15832, 68.39773, 128.4398 -15833, 69.75441, 131.3891 -15834, 67.40124, 110.1077 -15835, 66.15482, 121.3213 -15836, 67.53005, 146.2208 -15837, 67.82452, 132.4239 -15838, 68.04693, 132.7561 -15839, 66.67182, 107.1052 -15840, 66.66155, 127.8097 -15841, 63.09378, 126.804 -15842, 67.74892, 141.0813 -15843, 70.21034, 142.8787 -15844, 64.37686, 105.2929 -15845, 71.11437, 137.9506 -15846, 67.62251, 131.9704 -15847, 67.05012, 124.1539 -15848, 67.02249, 121.239 -15849, 66.0373, 107.355 -15850, 68.17467, 119.334 -15851, 68.12509, 125.4845 -15852, 67.9441, 129.4576 -15853, 65.23296, 134.0644 -15854, 66.99444, 134.4277 -15855, 69.08538, 127.8524 -15856, 68.18635, 121.5633 -15857, 72.32435, 131.5309 -15858, 68.13306, 110.3872 -15859, 66.18912, 112.8697 -15860, 69.37225, 124.8294 -15861, 66.07944, 134.7904 -15862, 66.44596, 118.9311 -15863, 67.61141, 113.2781 -15864, 68.53111, 131.2487 -15865, 68.06372, 123.56 -15866, 68.76919, 136.6776 -15867, 71.16472, 129.4277 -15868, 70.48029, 119.135 -15869, 70.28214, 134.233 -15870, 70.8243, 149.1779 -15871, 66.79418, 137.4535 -15872, 64.55907, 112.1905 -15873, 68.29073, 127.4853 -15874, 67.16584, 110.988 -15875, 68.85305, 131.1517 -15876, 68.67427, 126.2711 -15877, 70.50813, 129.325 -15878, 69.12074, 131.7384 -15879, 69.05772, 142.9574 -15880, 68.48742, 130.3869 -15881, 66.55005, 113.3649 -15882, 66.25859, 125.5129 -15883, 67.67373, 137.0173 -15884, 66.59621, 115.5486 -15885, 68.5454, 122.0308 -15886, 68.01326, 136.465 -15887, 71.39722, 145.4316 -15888, 65.66147, 113.4022 -15889, 69.0446, 121.1875 -15890, 66.10215, 121.1734 -15891, 68.29647, 140.8319 -15892, 68.92003, 137.5018 -15893, 69.63445, 137.2601 -15894, 68.19362, 122.2916 -15895, 67.68318, 110.2839 -15896, 68.81011, 135.7101 -15897, 67.44676, 125.4474 -15898, 67.81835, 114.9293 -15899, 69.42357, 138.1367 -15900, 69.66435, 135.0944 -15901, 70.1609, 118.3303 -15902, 67.91643, 134.0842 -15903, 69.72084, 129.8715 -15904, 66.27692, 123.4119 -15905, 68.83848, 108.7075 -15906, 66.70584, 128.4442 -15907, 69.88419, 146.8151 -15908, 69.77301, 136.3172 -15909, 67.31753, 118.5609 -15910, 70.62492, 136.7641 -15911, 66.38894, 118.7559 -15912, 67.15444, 127.4159 -15913, 68.86083, 121.9486 -15914, 65.47601, 119.0022 -15915, 67.33502, 125.7401 -15916, 68.45368, 113.8913 -15917, 67.32573, 130.848 -15918, 65.63352, 96.94675 -15919, 69.09134, 128.7349 -15920, 66.68162, 123.8286 -15921, 67.27892, 119.8219 -15922, 66.83412, 141.3197 -15923, 64.8425, 104.1389 -15924, 68.13785, 139.2758 -15925, 67.83599, 145.5619 -15926, 68.43267, 128.1718 -15927, 68.44093, 118.326 -15928, 68.90259, 135.902 -15929, 67.65946, 115.9803 -15930, 64.72884, 126.7694 -15931, 65.16943, 107.2528 -15932, 68.30429, 134.5369 -15933, 67.49387, 137.5206 -15934, 67.59123, 124.1155 -15935, 65.05233, 128.8537 -15936, 71.06411, 129.7451 -15937, 66.51821, 107.858 -15938, 68.41937, 122.5515 -15939, 69.47786, 129.6483 -15940, 66.99148, 126.63 -15941, 67.36273, 126.6374 -15942, 67.06229, 126.849 -15943, 65.89625, 136.3139 -15944, 70.22917, 145.3402 -15945, 65.93523, 118.384 -15946, 69.97458, 126.3133 -15947, 66.95063, 125.1891 -15948, 70.3091, 140.2088 -15949, 70.12037, 133.0408 -15950, 65.7668, 126.4413 -15951, 69.57565, 134.8488 -15952, 65.92296, 108.4948 -15953, 70.79414, 130.4189 -15954, 69.44383, 131.4925 -15955, 66.62863, 130.4575 -15956, 67.80396, 139.6093 -15957, 68.95013, 138.8719 -15958, 71.30744, 146.9161 -15959, 67.58884, 134.6915 -15960, 69.10194, 123.2658 -15961, 71.06352, 147.8189 -15962, 69.84568, 115.9428 -15963, 66.83921, 104.2683 -15964, 69.76971, 137.6183 -15965, 67.58215, 139.1822 -15966, 69.18909, 134.7638 -15967, 74.25069, 150.0567 -15968, 69.13383, 135.5109 -15969, 66.30129, 117.319 -15970, 68.25075, 124.1859 -15971, 70.71204, 156.4888 -15972, 65.20837, 110.58 -15973, 63.79465, 122.6602 -15974, 71.69954, 145.9436 -15975, 68.00717, 141.6695 -15976, 67.55854, 132.8552 -15977, 65.6403, 143.5714 -15978, 64.35459, 107.3014 -15979, 69.7329, 136.9779 -15980, 73.36407, 140.0662 -15981, 65.08527, 120.9151 -15982, 67.59317, 122.3761 -15983, 68.82592, 123.6124 -15984, 66.47578, 117.2748 -15985, 68.44873, 125.3048 -15986, 66.23119, 133.229 -15987, 66.32448, 116.0772 -15988, 67.293, 137.0363 -15989, 65.65561, 124.1935 -15990, 66.92149, 109.5993 -15991, 65.07498, 105.2216 -15992, 67.96785, 131.2363 -15993, 66.14877, 120.1462 -15994, 69.45894, 120.3336 -15995, 65.77765, 123.8685 -15996, 65.23996, 116.0991 -15997, 68.39398, 117.3044 -15998, 66.57914, 113.7488 -15999, 67.67032, 113.9851 -16000, 68.46821, 114.5627 -16001, 67.94276, 147.1207 -16002, 68.41071, 114.7406 -16003, 67.81453, 120.7329 -16004, 66.13517, 135.6964 -16005, 68.84075, 128.7526 -16006, 69.82133, 130.4452 -16007, 70.69125, 131.4881 -16008, 69.67354, 127.5423 -16009, 67.11306, 112.9442 -16010, 67.76652, 113.787 -16011, 67.98509, 117.4293 -16012, 66.10635, 119.1248 -16013, 70.25508, 130.6601 -16014, 69.69406, 127.8872 -16015, 70.62853, 154.1866 -16016, 66.46828, 115.0219 -16017, 65.83352, 118.1788 -16018, 69.43541, 133.457 -16019, 67.18957, 126.4289 -16020, 67.85753, 132.5879 -16021, 70.80011, 130.9031 -16022, 68.23846, 111.4887 -16023, 69.24097, 145.3706 -16024, 69.30102, 127.2747 -16025, 69.52276, 130.5737 -16026, 69.22084, 141.1106 -16027, 67.85295, 129.5885 -16028, 65.77801, 128.725 -16029, 66.55636, 124.4 -16030, 65.75154, 134.4078 -16031, 65.79782, 128.8091 -16032, 68.06347, 118.8537 -16033, 68.3986, 102.3968 -16034, 68.21292, 123.15 -16035, 66.66365, 130.5961 -16036, 65.77131, 112.8459 -16037, 64.85413, 117.4122 -16038, 69.30353, 158.2312 -16039, 67.96803, 111.7532 -16040, 68.60519, 137.1098 -16041, 66.8475, 123.4111 -16042, 67.11017, 116.3094 -16043, 69.15094, 129.7406 -16044, 66.13712, 106.6076 -16045, 66.42691, 138.0277 -16046, 70.39729, 118.1795 -16047, 68.66476, 137.9495 -16048, 70.14358, 133.6875 -16049, 66.8426, 130.6206 -16050, 70.37678, 133.2398 -16051, 68.74193, 116.7499 -16052, 65.41171, 110.589 -16053, 71.92922, 135.987 -16054, 69.84558, 130.0924 -16055, 68.54234, 139.991 -16056, 68.97866, 124.9344 -16057, 67.76261, 112.8224 -16058, 66.49068, 124.7065 -16059, 64.95423, 93.85997 -16060, 67.37242, 132.68 -16061, 71.21076, 136.9751 -16062, 69.7826, 130.0858 -16063, 69.90597, 139.7374 -16064, 70.10361, 151.6632 -16065, 68.52806, 128.6134 -16066, 67.44755, 124.6756 -16067, 68.69408, 121.506 -16068, 68.10934, 131.7102 -16069, 67.69214, 116.534 -16070, 67.63227, 116.31 -16071, 64.61927, 121.4863 -16072, 67.29108, 124.9753 -16073, 69.87057, 140.744 -16074, 67.21068, 135.6258 -16075, 67.51395, 106.5245 -16076, 66.91739, 120.4203 -16077, 69.39064, 147.6976 -16078, 68.90895, 136.3169 -16079, 67.95984, 113.1916 -16080, 67.44107, 126.8993 -16081, 68.93723, 131.1289 -16082, 68.20281, 138.466 -16083, 66.81433, 120.1186 -16084, 69.65587, 127.9894 -16085, 69.37795, 136.1519 -16086, 69.82831, 123.4697 -16087, 65.75387, 112.9789 -16088, 65.7493, 123.9453 -16089, 65.71657, 131.5604 -16090, 67.83512, 131.2806 -16091, 69.31119, 135.1037 -16092, 67.7191, 120.699 -16093, 66.34019, 109.6276 -16094, 67.49858, 120.7825 -16095, 67.31243, 126.4223 -16096, 69.86285, 134.3626 -16097, 65.53745, 123.5052 -16098, 64.59321, 115.3473 -16099, 70.94415, 137.818 -16100, 65.10856, 142.4697 -16101, 65.90327, 121.5589 -16102, 68.98332, 130.488 -16103, 71.82366, 157.4164 -16104, 64.24852, 126.0415 -16105, 70.8681, 147.1265 -16106, 66.96278, 135.505 -16107, 66.12878, 129.3979 -16108, 71.94824, 136.8933 -16109, 65.07127, 108.6386 -16110, 69.67868, 126.0584 -16111, 64.74361, 114.9174 -16112, 69.15274, 125.9758 -16113, 67.27984, 109.7412 -16114, 67.47621, 121.506 -16115, 69.72662, 139.0893 -16116, 70.1707, 111.1782 -16117, 66.61857, 128.6381 -16118, 67.53201, 126.1899 -16119, 66.70138, 122.2916 -16120, 67.70153, 133.0479 -16121, 69.13985, 127.8006 -16122, 68.40056, 133.3174 -16123, 67.09034, 116.1753 -16124, 64.56582, 101.6407 -16125, 65.83884, 112.2939 -16126, 67.8546, 120.8841 -16127, 67.56548, 164.5865 -16128, 68.95006, 150.9348 -16129, 66.88926, 127.4484 -16130, 63.7295, 119.2318 -16131, 67.57752, 139.8852 -16132, 69.1283, 117.7473 -16133, 68.01587, 112.7753 -16134, 67.06685, 117.2326 -16135, 70.64588, 108.4964 -16136, 68.04523, 125.317 -16137, 65.18191, 122.3296 -16138, 67.95231, 125.4864 -16139, 69.25011, 141.4465 -16140, 65.96393, 140.1776 -16141, 67.5947, 115.7894 -16142, 71.04171, 124.8506 -16143, 67.77341, 118.673 -16144, 69.13759, 140.5952 -16145, 66.80684, 118.2042 -16146, 74.47517, 130.9092 -16147, 68.0331, 139.2995 -16148, 68.0644, 122.5887 -16149, 70.12434, 135.7782 -16150, 66.81391, 114.3368 -16151, 69.99107, 145.8768 -16152, 68.46712, 123.8385 -16153, 65.36962, 119.4041 -16154, 66.36395, 118.9485 -16155, 65.26932, 120.7947 -16156, 67.70041, 133.7415 -16157, 65.96714, 117.3999 -16158, 66.02222, 135.7149 -16159, 70.2321, 135.7227 -16160, 68.38172, 131.2653 -16161, 69.64098, 145.0634 -16162, 67.28414, 99.15936 -16163, 69.58655, 151.417 -16164, 65.99345, 109.9817 -16165, 65.25013, 125.8024 -16166, 67.79735, 119.3893 -16167, 70.76063, 149.9261 -16168, 66.54695, 107.2944 -16169, 69.24477, 141.3338 -16170, 67.45018, 151.1216 -16171, 68.89261, 136.2221 -16172, 68.01896, 133.4202 -16173, 68.55845, 127.7299 -16174, 67.35986, 117.0648 -16175, 71.41989, 131.9403 -16176, 68.12119, 134.7049 -16177, 63.85395, 117.3799 -16178, 69.21935, 113.3789 -16179, 70.98516, 134.2274 -16180, 67.06622, 112.0892 -16181, 68.33204, 143.2136 -16182, 68.07284, 117.0658 -16183, 64.26234, 117.8436 -16184, 67.0604, 133.9787 -16185, 67.00242, 109.9566 -16186, 66.31913, 122.8827 -16187, 70.46814, 130.5875 -16188, 64.43246, 119.6113 -16189, 68.4489, 132.9983 -16190, 66.65345, 116.5059 -16191, 65.46283, 128.9968 -16192, 67.0748, 131.4424 -16193, 66.19921, 107.072 -16194, 68.7179, 114.1472 -16195, 66.31607, 114.3084 -16196, 66.64692, 120.2193 -16197, 69.25969, 130.928 -16198, 67.45099, 127.3075 -16199, 64.42715, 93.77605 -16200, 65.53849, 142.5842 -16201, 66.89782, 124.9394 -16202, 70.67184, 144.1236 -16203, 67.93222, 132.3346 -16204, 66.92724, 125.4446 -16205, 66.53067, 109.4724 -16206, 69.31518, 120.3775 -16207, 70.82934, 131.3445 -16208, 66.16717, 114.8612 -16209, 69.87971, 117.8718 -16210, 65.03428, 99.61482 -16211, 69.47601, 143.0517 -16212, 67.9457, 118.4858 -16213, 69.66532, 137.5848 -16214, 69.81227, 140.3692 -16215, 64.61603, 113.1176 -16216, 68.70534, 122.9617 -16217, 67.86034, 116.6122 -16218, 64.56665, 109.1744 -16219, 67.55567, 134.4666 -16220, 68.56515, 143.9649 -16221, 66.91835, 129.4116 -16222, 72.41732, 134.7621 -16223, 71.08753, 135.5392 -16224, 63.93158, 106.8868 -16225, 68.00087, 134.7445 -16226, 66.42765, 120.6609 -16227, 68.58748, 124.3152 -16228, 68.73243, 148.0622 -16229, 67.08349, 127.3686 -16230, 69.95792, 126.6491 -16231, 69.72909, 121.2628 -16232, 69.26196, 138.9057 -16233, 66.69, 128.5966 -16234, 70.36077, 142.2321 -16235, 67.46372, 124.3689 -16236, 68.5373, 121.8393 -16237, 67.50827, 122.1101 -16238, 65.75245, 120.3636 -16239, 66.74609, 129.2159 -16240, 72.21651, 139.8698 -16241, 66.94817, 107.6458 -16242, 67.49868, 157.1014 -16243, 68.42975, 147.8209 -16244, 68.52518, 119.6524 -16245, 66.78274, 118.6653 -16246, 64.79988, 121.5981 -16247, 70.23712, 136.9404 -16248, 73.10806, 140.7235 -16249, 66.2469, 112.0223 -16250, 67.16625, 118.2065 -16251, 69.34644, 125.3572 -16252, 64.6456, 121.8469 -16253, 68.87184, 120.4789 -16254, 66.36918, 123.2573 -16255, 71.20713, 119.6618 -16256, 70.73217, 138.1571 -16257, 68.33913, 111.1084 -16258, 67.79893, 137.6869 -16259, 65.85082, 134.2529 -16260, 68.60721, 144.9214 -16261, 68.04752, 121.127 -16262, 67.92398, 140.6038 -16263, 66.91439, 119.9645 -16264, 64.70896, 118.9869 -16265, 70.77016, 120.547 -16266, 67.3468, 121.395 -16267, 64.86953, 109.9266 -16268, 64.19615, 122.1719 -16269, 68.42556, 129.0887 -16270, 67.23216, 127.4021 -16271, 69.29292, 140.8615 -16272, 66.12768, 124.4191 -16273, 67.15976, 135.3002 -16274, 68.92731, 129.8894 -16275, 70.35575, 126.1017 -16276, 66.56554, 131.7885 -16277, 70.41469, 133.3264 -16278, 66.30858, 132.2852 -16279, 64.92028, 123.1736 -16280, 68.38333, 120.7131 -16281, 66.60948, 128.4356 -16282, 67.74654, 132.4136 -16283, 67.76365, 120.8272 -16284, 67.826, 133.2988 -16285, 68.81311, 130.7308 -16286, 69.31322, 137.2461 -16287, 62.99079, 128.0345 -16288, 68.01395, 127.4918 -16289, 67.88325, 128.8534 -16290, 64.34993, 116.5172 -16291, 69.17264, 121.2414 -16292, 65.01635, 112.8708 -16293, 69.49107, 134.9546 -16294, 71.6126, 140.2298 -16295, 68.13264, 120.655 -16296, 71.05107, 146.4425 -16297, 69.16088, 137.6839 -16298, 70.64956, 136.3774 -16299, 68.2516, 122.4347 -16300, 65.20641, 111.7598 -16301, 69.1875, 100.505 -16302, 68.26068, 121.9934 -16303, 69.44096, 127.7445 -16304, 66.8189, 128.3391 -16305, 68.97099, 122.6575 -16306, 70.46407, 136.6546 -16307, 70.04348, 137.2425 -16308, 67.31087, 141.1151 -16309, 69.03446, 119.7233 -16310, 67.49014, 112.3328 -16311, 67.33983, 119.2277 -16312, 72.06505, 133.0291 -16313, 68.44578, 134.0888 -16314, 70.93858, 151.7394 -16315, 65.99061, 100.1656 -16316, 65.69995, 129.2969 -16317, 67.88781, 123.7831 -16318, 68.71714, 130.7432 -16319, 70.58546, 130.0892 -16320, 70.50692, 132.8177 -16321, 64.89796, 112.7778 -16322, 68.03452, 119.2309 -16323, 68.37598, 142.8062 -16324, 65.31335, 109.2026 -16325, 64.68155, 110.3814 -16326, 67.81472, 130.8844 -16327, 68.72087, 134.8805 -16328, 66.31745, 112.7879 -16329, 64.69964, 128.1228 -16330, 63.19011, 97.85324 -16331, 67.04974, 123.1772 -16332, 69.77631, 133.7446 -16333, 71.20739, 122.73 -16334, 70.1551, 122.5107 -16335, 70.25528, 114.2026 -16336, 68.26686, 131.6032 -16337, 68.34684, 141.2898 -16338, 70.30878, 140.619 -16339, 67.08135, 110.5151 -16340, 70.55462, 140.4344 -16341, 68.8199, 130.0868 -16342, 66.44443, 126.4245 -16343, 67.62411, 130.7663 -16344, 69.99611, 135.4407 -16345, 70.85949, 146.443 -16346, 67.22633, 127.3791 -16347, 65.79897, 109.5994 -16348, 68.8133, 121.8595 -16349, 68.15897, 137.1696 -16350, 68.13434, 137.7671 -16351, 66.03575, 129.8433 -16352, 71.1392, 136.5394 -16353, 65.7611, 139.533 -16354, 66.4562, 116.1557 -16355, 71.43418, 139.566 -16356, 66.21723, 117.6091 -16357, 65.29847, 110.1183 -16358, 69.93212, 124.5161 -16359, 68.65961, 126.7685 -16360, 68.31157, 127.5313 -16361, 68.86473, 131.0624 -16362, 66.81505, 125.3619 -16363, 71.22412, 144.8558 -16364, 66.51076, 136.4399 -16365, 65.78246, 117.0782 -16366, 66.03177, 131.3673 -16367, 67.44959, 105.4248 -16368, 67.60525, 118.4955 -16369, 67.3143, 138.3905 -16370, 70.86729, 131.1195 -16371, 65.48255, 141.0259 -16372, 68.22266, 141.3689 -16373, 71.31566, 122.9654 -16374, 71.48733, 141.9901 -16375, 64.96432, 119.0701 -16376, 69.49516, 139.2006 -16377, 67.88913, 118.218 -16378, 68.90454, 145.1237 -16379, 68.07183, 127.9641 -16380, 64.39356, 96.18308 -16381, 66.65415, 107.8738 -16382, 68.40425, 110.1585 -16383, 64.65508, 144.2053 -16384, 66.44203, 126.6712 -16385, 71.50072, 133.5473 -16386, 73.88318, 134.2179 -16387, 66.35681, 129.7247 -16388, 64.5294, 129.0555 -16389, 65.86448, 106.1127 -16390, 66.79915, 111.6206 -16391, 72.1822, 134.0295 -16392, 69.3837, 132.8476 -16393, 68.19583, 146.2667 -16394, 70.5114, 128.1338 -16395, 65.80641, 130.8923 -16396, 70.16053, 123.3076 -16397, 67.43844, 122.1914 -16398, 70.71361, 135.7651 -16399, 68.07891, 153.5097 -16400, 68.35342, 131.2236 -16401, 67.20032, 130.9151 -16402, 68.69189, 125.636 -16403, 70.46936, 133.4589 -16404, 66.90871, 133.8009 -16405, 69.88209, 136.8009 -16406, 68.06727, 130.8548 -16407, 69.20068, 133.185 -16408, 67.47538, 131.3843 -16409, 68.32743, 117.697 -16410, 69.00192, 138.9638 -16411, 65.35322, 105.7026 -16412, 65.4318, 116.5828 -16413, 66.26909, 122.9144 -16414, 68.69404, 125.9645 -16415, 66.1094, 134.3551 -16416, 64.41092, 134.127 -16417, 69.49636, 133.8557 -16418, 64.59448, 104.7582 -16419, 67.74181, 124.6148 -16420, 67.86035, 114.8292 -16421, 66.5956, 131.0129 -16422, 67.29007, 108.9249 -16423, 68.4697, 126.7364 -16424, 68.39686, 139.9312 -16425, 65.81488, 118.5393 -16426, 68.31099, 125.4367 -16427, 65.55142, 129.8399 -16428, 68.78688, 151.5744 -16429, 68.9762, 136.3059 -16430, 69.73827, 126.5047 -16431, 68.61113, 149.0624 -16432, 70.29214, 136.9524 -16433, 69.02156, 126.4165 -16434, 65.24243, 111.3249 -16435, 67.79481, 109.7919 -16436, 65.14929, 125.4005 -16437, 67.85083, 104.3679 -16438, 67.95407, 126.1482 -16439, 68.07138, 104.5138 -16440, 67.96206, 125.8946 -16441, 68.0562, 123.0662 -16442, 69.54373, 140.905 -16443, 67.44763, 136.8386 -16444, 69.93226, 143.142 -16445, 68.4428, 123.9019 -16446, 67.14705, 121.2435 -16447, 68.09321, 127.1611 -16448, 70.98751, 160.6929 -16449, 69.63262, 136.2754 -16450, 66.83325, 135.069 -16451, 67.48442, 128.1263 -16452, 70.30599, 146.687 -16453, 70.9558, 146.0678 -16454, 65.56472, 128.1536 -16455, 67.08322, 121.2183 -16456, 70.07861, 108.5745 -16457, 71.39547, 149.9232 -16458, 69.43051, 141.5282 -16459, 66.80894, 122.0407 -16460, 69.62216, 138.2071 -16461, 65.8652, 118.6262 -16462, 66.59005, 141.7685 -16463, 71.13173, 130.8381 -16464, 66.01563, 129.1451 -16465, 66.28735, 116.4058 -16466, 68.99924, 117.7849 -16467, 67.84324, 144.1374 -16468, 67.4654, 105.317 -16469, 67.49195, 123.4161 -16470, 65.34945, 115.779 -16471, 67.83551, 126.1946 -16472, 69.79369, 126.8353 -16473, 68.87143, 125.5759 -16474, 67.82667, 124.1151 -16475, 68.81413, 121.4105 -16476, 70.47876, 130.5729 -16477, 73.16304, 161.2538 -16478, 71.95209, 146.3936 -16479, 67.44715, 119.2209 -16480, 68.85059, 114.7156 -16481, 69.72712, 130.6584 -16482, 67.43691, 136.2537 -16483, 71.11399, 122.0355 -16484, 67.71312, 138.2236 -16485, 66.77008, 112.6772 -16486, 70.90585, 132.9018 -16487, 67.47875, 104.2591 -16488, 68.08728, 111.6015 -16489, 68.54271, 125.7349 -16490, 67.38204, 139.3863 -16491, 67.62489, 123.9918 -16492, 65.71741, 96.56954 -16493, 66.75033, 119.5639 -16494, 70.03827, 138.7756 -16495, 66.8036, 110.2972 -16496, 71.80215, 139.9054 -16497, 69.75691, 137.0891 -16498, 68.62702, 100.7525 -16499, 68.03554, 113.0308 -16500, 70.44384, 141.5947 -16501, 69.53504, 130.0973 -16502, 65.56302, 115.0701 -16503, 67.68639, 123.3297 -16504, 68.31423, 120.6889 -16505, 71.41559, 149.3469 -16506, 70.86132, 135.3213 -16507, 70.19919, 135.138 -16508, 67.31745, 132.8306 -16509, 66.67461, 111.7658 -16510, 68.52431, 98.28103 -16511, 68.08513, 128.1996 -16512, 65.22726, 135.7065 -16513, 67.02577, 114.7573 -16514, 63.12846, 115.988 -16515, 68.91849, 135.5944 -16516, 65.4037, 126.7384 -16517, 66.72667, 137.0383 -16518, 68.0043, 117.1869 -16519, 68.24197, 128.0584 -16520, 68.80229, 123.4378 -16521, 68.76843, 132.3484 -16522, 66.26798, 118.6096 -16523, 64.62832, 138.6254 -16524, 68.20142, 131.4314 -16525, 70.85424, 134.0073 -16526, 66.81173, 114.561 -16527, 69.9304, 139.4913 -16528, 69.89558, 137.409 -16529, 65.211, 109.6018 -16530, 64.95554, 109.2972 -16531, 63.80198, 116.5058 -16532, 69.32363, 133.9561 -16533, 68.08572, 119.1548 -16534, 66.42673, 133.7442 -16535, 68.7483, 121.1914 -16536, 71.42063, 138.9418 -16537, 69.99781, 134.018 -16538, 66.0776, 113.0542 -16539, 68.02381, 116.4733 -16540, 63.40728, 127.6054 -16541, 65.35444, 115.174 -16542, 68.65199, 129.7975 -16543, 67.8743, 129.9449 -16544, 69.21034, 139.2897 -16545, 68.81727, 128.4544 -16546, 69.74177, 135.2069 -16547, 68.01296, 138.7343 -16548, 65.96554, 119.0405 -16549, 70.1201, 114.3885 -16550, 69.52643, 131.3148 -16551, 68.13839, 118.1307 -16552, 68.01789, 137.0494 -16553, 65.5277, 90.67684 -16554, 70.11106, 140.9521 -16555, 69.55787, 136.3448 -16556, 67.8112, 123.8181 -16557, 69.41543, 131.7001 -16558, 69.16396, 125.1731 -16559, 67.10355, 129.3964 -16560, 66.59023, 102.0816 -16561, 65.69038, 128.0027 -16562, 65.87218, 114.5395 -16563, 65.7737, 116.1954 -16564, 67.08497, 118.8063 -16565, 66.64738, 96.76496 -16566, 69.90009, 139.5857 -16567, 69.36888, 135.4301 -16568, 69.41881, 145.6596 -16569, 69.35477, 133.5585 -16570, 66.78976, 124.5194 -16571, 69.98352, 112.0653 -16572, 70.76035, 144.9425 -16573, 68.82168, 134.7195 -16574, 69.50397, 139.8523 -16575, 71.0584, 149.2104 -16576, 66.55888, 120.3692 -16577, 69.08809, 139.7369 -16578, 67.78232, 130.9741 -16579, 66.14817, 119.4163 -16580, 67.02309, 126.8851 -16581, 66.63003, 133.8063 -16582, 68.09397, 135.3716 -16583, 71.62587, 143.5679 -16584, 68.36727, 128.1388 -16585, 72.00969, 151.6078 -16586, 72.15628, 148.6441 -16587, 63.81356, 104.9316 -16588, 67.12639, 132.7966 -16589, 68.67044, 114.1316 -16590, 68.76102, 116.1148 -16591, 64.70654, 128.1374 -16592, 67.46362, 136.9027 -16593, 65.60326, 121.0995 -16594, 69.56871, 132.12 -16595, 65.56437, 137.7446 -16596, 70.18009, 120.0385 -16597, 68.01941, 128.8836 -16598, 69.10492, 133.099 -16599, 67.10458, 132.1679 -16600, 71.08347, 130.0081 -16601, 66.56587, 132.1454 -16602, 67.37511, 117.2506 -16603, 69.67643, 135.9639 -16604, 68.01459, 126.2054 -16605, 67.44922, 125.0511 -16606, 67.82831, 131.2811 -16607, 69.48856, 131.6375 -16608, 65.63996, 129.2401 -16609, 66.28026, 116.499 -16610, 68.01966, 113.4327 -16611, 68.88532, 134.1067 -16612, 68.93233, 123.785 -16613, 71.28853, 128.2775 -16614, 68.47003, 119.0145 -16615, 69.90329, 137.8499 -16616, 70.09202, 130.0885 -16617, 67.96698, 121.0001 -16618, 66.22404, 119.1531 -16619, 67.40603, 124.1916 -16620, 68.18165, 133.6314 -16621, 67.49878, 122.5922 -16622, 70.19817, 138.2708 -16623, 67.46387, 133.6333 -16624, 67.63478, 126.7765 -16625, 68.42936, 136.7083 -16626, 69.11146, 130.5486 -16627, 65.34682, 112.6957 -16628, 72.27679, 161.0088 -16629, 67.17652, 127.4839 -16630, 69.97887, 144.2267 -16631, 69.67383, 129.6119 -16632, 69.89009, 147.7944 -16633, 67.64807, 130.4777 -16634, 67.32703, 118.8394 -16635, 68.97336, 124.6298 -16636, 67.66967, 103.1117 -16637, 66.91254, 126.6126 -16638, 67.55359, 118.7322 -16639, 65.03493, 117.367 -16640, 68.02707, 131.5474 -16641, 67.16576, 143.1687 -16642, 67.45939, 125.3672 -16643, 66.40605, 113.0716 -16644, 65.39009, 131.09 -16645, 67.73618, 122.0743 -16646, 69.51989, 128.0201 -16647, 67.10018, 124.7517 -16648, 68.17712, 124.787 -16649, 68.95359, 139.1428 -16650, 69.43474, 135.4955 -16651, 66.85504, 111.9391 -16652, 67.64108, 143.9 -16653, 69.00734, 121.8109 -16654, 70.25934, 120.8223 -16655, 71.33493, 129.5699 -16656, 69.57026, 136.1203 -16657, 67.42577, 123.4668 -16658, 68.74418, 126.2233 -16659, 71.13567, 160.9951 -16660, 66.54732, 118.107 -16661, 69.35688, 115.1244 -16662, 67.57381, 121.1601 -16663, 68.81213, 122.6589 -16664, 65.97049, 122.2612 -16665, 65.43348, 111.2886 -16666, 67.26682, 126.8626 -16667, 70.48056, 152.8963 -16668, 69.31844, 134.0819 -16669, 69.98038, 149.3003 -16670, 64.3997, 115.6996 -16671, 69.96882, 124.6241 -16672, 71.17805, 139.8145 -16673, 68.17807, 125.2121 -16674, 69.71877, 134.9651 -16675, 66.17811, 120.8511 -16676, 68.06493, 135.2143 -16677, 66.93792, 118.5464 -16678, 71.94764, 122.5813 -16679, 72.71997, 139.6902 -16680, 68.0762, 129.4436 -16681, 71.29571, 120.3065 -16682, 68.7298, 123.5816 -16683, 66.50822, 126.5994 -16684, 63.39372, 112.3913 -16685, 70.08816, 144.335 -16686, 73.11184, 155.5572 -16687, 67.76753, 109.0503 -16688, 67.15813, 122.3345 -16689, 68.88047, 126.3416 -16690, 67.53793, 125.1591 -16691, 69.00373, 121.6103 -16692, 66.91915, 110.2502 -16693, 69.65967, 139.838 -16694, 69.25047, 119.2207 -16695, 70.17827, 136.39 -16696, 70.83539, 151.0733 -16697, 66.47563, 113.5574 -16698, 69.6208, 137.7365 -16699, 67.58201, 132.9915 -16700, 69.74971, 133.1771 -16701, 68.22141, 126.4871 -16702, 66.27854, 137.3219 -16703, 70.31002, 124.259 -16704, 66.09817, 117.8259 -16705, 67.33954, 122.5026 -16706, 69.08954, 128.0095 -16707, 65.74714, 97.61486 -16708, 72.40729, 137.7315 -16709, 69.67981, 151.5938 -16710, 68.74902, 143.562 -16711, 67.52317, 135.6893 -16712, 68.05693, 111.02 -16713, 67.64343, 112.8759 -16714, 68.27843, 116.785 -16715, 66.4448, 118.6193 -16716, 70.06553, 139.9915 -16717, 69.7225, 133.2241 -16718, 69.07385, 131.4765 -16719, 68.89215, 121.5688 -16720, 65.51454, 116.4836 -16721, 68.92231, 151.3009 -16722, 65.2828, 129.6922 -16723, 68.00088, 112.1066 -16724, 69.8297, 119.9775 -16725, 65.88089, 108.9088 -16726, 70.64935, 151.5471 -16727, 67.96283, 129.5435 -16728, 68.2472, 127.8725 -16729, 69.55032, 133.0538 -16730, 70.02152, 134.9774 -16731, 68.66464, 110.6549 -16732, 66.73719, 134.6728 -16733, 68.61698, 126.5903 -16734, 64.54407, 129.9997 -16735, 69.37595, 127.3132 -16736, 67.89117, 125.831 -16737, 67.40181, 133.8403 -16738, 68.42249, 129.9916 -16739, 67.05087, 115.058 -16740, 67.8955, 122.598 -16741, 70.42079, 155.3236 -16742, 68.60394, 104.6119 -16743, 64.82265, 129.7365 -16744, 70.38424, 128.7931 -16745, 71.90845, 130.2846 -16746, 67.98612, 127.0032 -16747, 69.53721, 138.9628 -16748, 66.62497, 125.5671 -16749, 65.79605, 112.9191 -16750, 66.84543, 132.9089 -16751, 67.6002, 120.1248 -16752, 66.30012, 141.2673 -16753, 74.8489, 122.1664 -16754, 65.31147, 119.5294 -16755, 66.60502, 129.9128 -16756, 65.18103, 121.9562 -16757, 69.60249, 127.613 -16758, 68.16866, 119.7595 -16759, 67.46028, 123.7713 -16760, 67.72802, 112.5012 -16761, 66.00024, 126.5343 -16762, 70.91361, 124.7404 -16763, 67.80093, 134.8097 -16764, 68.87869, 137.271 -16765, 71.6397, 151.672 -16766, 68.29438, 127.4005 -16767, 65.12886, 144.2723 -16768, 70.57005, 145.8051 -16769, 73.05003, 153.7847 -16770, 66.13913, 126.1211 -16771, 67.15543, 143.3497 -16772, 67.61729, 115.5436 -16773, 72.08878, 129.3443 -16774, 65.56805, 103.6442 -16775, 68.27811, 139.1479 -16776, 66.11831, 117.6246 -16777, 67.41631, 117.7373 -16778, 67.14346, 123.637 -16779, 67.82005, 106.7011 -16780, 67.84632, 124.327 -16781, 69.31979, 146.8154 -16782, 67.7887, 117.1692 -16783, 69.47633, 127.5222 -16784, 67.58136, 124.4768 -16785, 69.76561, 125.7431 -16786, 65.89876, 127.5898 -16787, 64.31284, 107.3859 -16788, 64.16388, 110.6961 -16789, 63.87961, 112.6594 -16790, 67.43935, 122.1224 -16791, 69.91231, 136.4495 -16792, 70.18686, 122.3744 -16793, 70.58163, 142.9256 -16794, 68.39877, 144.8047 -16795, 69.9265, 152.4115 -16796, 66.84336, 113.3828 -16797, 65.37327, 117.2876 -16798, 69.85898, 109.0503 -16799, 66.18835, 117.1775 -16800, 67.39835, 133.0561 -16801, 64.43316, 122.8413 -16802, 66.94628, 120.0223 -16803, 67.21511, 109.3795 -16804, 69.1414, 132.0737 -16805, 69.60375, 136.9242 -16806, 68.52138, 128.8991 -16807, 67.69719, 117.6493 -16808, 69.5896, 117.4173 -16809, 66.24536, 122.8327 -16810, 69.5915, 139.744 -16811, 70.11961, 115.9145 -16812, 69.77869, 115.5308 -16813, 70.92696, 145.3057 -16814, 68.12409, 127.4662 -16815, 67.03516, 126.9587 -16816, 71.11926, 147.0918 -16817, 67.08274, 145.5487 -16818, 62.59583, 115.9968 -16819, 68.20021, 130.1191 -16820, 69.0616, 105.8284 -16821, 68.03726, 122.7997 -16822, 70.14716, 128.8113 -16823, 67.86308, 129.1697 -16824, 67.97814, 134.905 -16825, 68.54857, 112.7721 -16826, 69.63469, 102.4555 -16827, 67.85196, 138.0472 -16828, 68.15862, 125.2674 -16829, 70.15549, 132.9178 -16830, 71.0108, 150.7492 -16831, 66.5613, 122.0259 -16832, 68.75828, 131.4859 -16833, 69.70189, 117.1029 -16834, 67.25892, 125.4424 -16835, 71.01041, 149.5342 -16836, 66.776, 133.1845 -16837, 69.61543, 144.8825 -16838, 67.75246, 115.1501 -16839, 68.96307, 129.6337 -16840, 67.31179, 137.4955 -16841, 70.40367, 122.8706 -16842, 67.13402, 126.5206 -16843, 64.17145, 107.1466 -16844, 67.39792, 144.818 -16845, 66.64574, 130.3053 -16846, 70.47683, 127.1804 -16847, 72.08897, 125.1799 -16848, 68.85095, 122.5428 -16849, 71.93306, 138.5143 -16850, 67.65224, 129.6587 -16851, 68.43764, 121.4169 -16852, 65.59721, 113.7814 -16853, 73.6454, 131.3343 -16854, 69.86288, 133.5317 -16855, 66.14574, 121.4186 -16856, 68.67138, 114.288 -16857, 68.80011, 117.6921 -16858, 66.91779, 123.5822 -16859, 66.04945, 124.0043 -16860, 65.30509, 123.3602 -16861, 68.64586, 132.2452 -16862, 66.70357, 104.9227 -16863, 66.60702, 122.1239 -16864, 71.36658, 141.775 -16865, 64.98614, 120.1492 -16866, 67.18185, 133.6072 -16867, 66.73989, 113.6685 -16868, 68.74927, 140.856 -16869, 65.12487, 120.8855 -16870, 68.26456, 148.7064 -16871, 68.68431, 140.626 -16872, 65.31203, 117.7404 -16873, 67.47503, 128.9104 -16874, 65.82022, 125.859 -16875, 67.1693, 117.1032 -16876, 67.82189, 139.6111 -16877, 69.64113, 145.7304 -16878, 67.83312, 117.2119 -16879, 68.91669, 129.7441 -16880, 67.11653, 138.9936 -16881, 67.80382, 122.4382 -16882, 65.90289, 115.8894 -16883, 67.9672, 130.3415 -16884, 68.2107, 126.7824 -16885, 69.2622, 117.3759 -16886, 63.75507, 94.05081 -16887, 71.24135, 129.6411 -16888, 67.99301, 122.6971 -16889, 67.71177, 126.3918 -16890, 69.07788, 131.0112 -16891, 72.29087, 146.8726 -16892, 63.41812, 116.5908 -16893, 68.11899, 136.6926 -16894, 68.70919, 124.6256 -16895, 65.98196, 108.0272 -16896, 66.78125, 140.4767 -16897, 68.77375, 118.9486 -16898, 70.74718, 130.7772 -16899, 68.70966, 134.7851 -16900, 67.56819, 135.5679 -16901, 70.10034, 135.3067 -16902, 65.7134, 118.2903 -16903, 67.77136, 114.8094 -16904, 68.40923, 129.7769 -16905, 70.18595, 128.0279 -16906, 67.10295, 136.7551 -16907, 67.02015, 138.9499 -16908, 67.12731, 146.9289 -16909, 68.63305, 126.9655 -16910, 70.39135, 129.4393 -16911, 66.77894, 116.5019 -16912, 68.00799, 128.7606 -16913, 68.46274, 111.8667 -16914, 66.66252, 132.5196 -16915, 65.30234, 123.0112 -16916, 69.79619, 137.8177 -16917, 66.49651, 119.2178 -16918, 70.21724, 141.7782 -16919, 66.59252, 119.3649 -16920, 68.04983, 138.8169 -16921, 67.13235, 120.2113 -16922, 67.06311, 144.4981 -16923, 72.02884, 143.6152 -16924, 68.22696, 134.011 -16925, 69.39149, 141.595 -16926, 69.59227, 142.5185 -16927, 69.35974, 130.6723 -16928, 66.03004, 106.6019 -16929, 70.57617, 142.7081 -16930, 67.70133, 133.1967 -16931, 69.06556, 123.8482 -16932, 71.46669, 132.9282 -16933, 69.7224, 143.5373 -16934, 67.3639, 124.0105 -16935, 63.96076, 122.1277 -16936, 66.18589, 138.4375 -16937, 66.7947, 106.7529 -16938, 66.8782, 120.5632 -16939, 65.922, 114.9806 -16940, 69.87458, 131.6044 -16941, 67.50107, 128.0883 -16942, 67.53167, 121.1148 -16943, 64.66379, 113.5736 -16944, 69.01351, 142.5127 -16945, 66.9502, 117.4488 -16946, 68.36938, 122.3564 -16947, 67.50898, 145.7299 -16948, 66.42924, 131.8816 -16949, 63.68444, 117.4249 -16950, 66.97479, 122.3144 -16951, 69.49132, 124.8853 -16952, 68.71402, 131.9578 -16953, 66.58675, 135.4122 -16954, 67.63831, 130.5276 -16955, 70.58074, 133.9982 -16956, 69.4379, 138.0011 -16957, 66.73525, 110.2324 -16958, 66.89482, 114.4542 -16959, 66.70729, 116.0486 -16960, 70.52264, 146.0748 -16961, 67.99362, 128.7902 -16962, 67.31407, 123.3903 -16963, 68.92624, 144.3117 -16964, 69.95962, 135.4521 -16965, 67.3748, 133.9821 -16966, 68.75228, 126.4009 -16967, 70.92144, 134.0307 -16968, 68.52252, 115.4861 -16969, 69.5209, 145.7846 -16970, 66.05943, 97.01374 -16971, 68.27952, 138.6687 -16972, 71.08797, 138.9202 -16973, 67.74228, 110.9634 -16974, 71.04532, 137.5639 -16975, 68.01494, 116.0504 -16976, 67.42681, 119.6089 -16977, 67.79463, 122.4231 -16978, 67.40071, 121.1187 -16979, 68.11235, 122.6629 -16980, 69.66975, 135.1748 -16981, 70.08741, 128.3117 -16982, 66.90838, 133.2205 -16983, 65.48822, 130.85 -16984, 66.35895, 130.5585 -16985, 65.52836, 114.1016 -16986, 66.52176, 114.8809 -16987, 71.81138, 132.3429 -16988, 70.19514, 134.2615 -16989, 69.85682, 139.1729 -16990, 64.30305, 108.1925 -16991, 67.19538, 128.889 -16992, 67.82321, 146.2227 -16993, 65.77148, 130.2604 -16994, 66.3694, 113.7416 -16995, 68.50592, 113.7442 -16996, 67.68043, 130.7277 -16997, 68.80924, 138.9852 -16998, 67.59109, 117.7681 -16999, 67.01374, 110.6789 -17000, 70.23199, 134.3019 -17001, 68.08186, 140.965 -17002, 64.89975, 103.2639 -17003, 67.93563, 127.6112 -17004, 68.24257, 132.3379 -17005, 67.34695, 107.9964 -17006, 69.00004, 147.6115 -17007, 69.11678, 117.4892 -17008, 69.14144, 124.4207 -17009, 67.20212, 124.519 -17010, 64.8577, 111.4153 -17011, 69.24196, 137.1028 -17012, 67.50147, 140.3687 -17013, 66.74043, 123.4565 -17014, 67.64341, 130.851 -17015, 69.60678, 130.557 -17016, 67.98121, 115.1045 -17017, 67.37402, 108.3712 -17018, 67.84743, 132.2256 -17019, 71.84403, 131.7296 -17020, 72.02089, 152.0369 -17021, 65.79883, 130.2469 -17022, 67.91801, 140.0335 -17023, 70.91753, 141.4748 -17024, 69.48346, 133.2048 -17025, 70.345, 138.3456 -17026, 69.42982, 130.7436 -17027, 69.83005, 140.1611 -17028, 68.26316, 127.53 -17029, 71.29705, 145.9248 -17030, 69.28155, 125.0306 -17031, 68.08146, 129.9596 -17032, 69.35917, 122.6629 -17033, 69.65365, 135.0822 -17034, 67.50973, 131.7685 -17035, 70.17333, 134.3438 -17036, 63.83399, 93.14015 -17037, 68.23777, 145.3722 -17038, 68.92202, 134.5452 -17039, 68.62749, 119.4845 -17040, 70.00309, 142.5081 -17041, 69.31001, 134.6324 -17042, 67.31293, 114.2869 -17043, 68.96777, 138.8055 -17044, 68.17941, 147.7557 -17045, 67.45506, 102.6064 -17046, 67.66003, 119.0371 -17047, 68.95279, 123.2895 -17048, 69.78643, 119.9806 -17049, 67.28659, 103.0959 -17050, 67.61536, 143.7498 -17051, 70.61988, 129.2067 -17052, 70.04763, 140.4727 -17053, 67.1607, 126.5374 -17054, 66.93887, 130.979 -17055, 72.07925, 126.6152 -17056, 71.16948, 107.4929 -17057, 65.24695, 123.1823 -17058, 66.28952, 125.5371 -17059, 66.64777, 128.3512 -17060, 68.12185, 141.3107 -17061, 66.72556, 124.2101 -17062, 66.25773, 120.1568 -17063, 64.60513, 121.87 -17064, 68.3871, 124.28 -17065, 68.8693, 132.342 -17066, 69.08858, 128.4363 -17067, 65.67589, 107.7892 -17068, 67.07057, 119.175 -17069, 67.46812, 133.0635 -17070, 67.25401, 138.7418 -17071, 67.55824, 129.857 -17072, 68.50476, 127.7725 -17073, 66.59871, 120.4203 -17074, 67.45933, 145.1994 -17075, 70.19351, 155.8501 -17076, 66.68331, 112.3272 -17077, 65.01213, 131.4172 -17078, 70.23551, 137.7941 -17079, 66.38253, 100.1526 -17080, 74.2957, 170.5479 -17081, 68.3967, 133.9416 -17082, 69.51862, 126.795 -17083, 68.35522, 152.8346 -17084, 66.981, 125.7192 -17085, 66.15165, 127.648 -17086, 68.12739, 135.7452 -17087, 71.00404, 147.3999 -17088, 69.18084, 121.0461 -17089, 69.25157, 142.0283 -17090, 65.89909, 116.6285 -17091, 65.01016, 113.665 -17092, 70.67025, 145.5058 -17093, 67.91307, 117.1901 -17094, 66.83902, 135.9237 -17095, 69.24982, 141.832 -17096, 68.20219, 123.4755 -17097, 65.00478, 114.8875 -17098, 67.44928, 121.8513 -17099, 65.66549, 115.9641 -17100, 68.33879, 120.0566 -17101, 66.00157, 138.16 -17102, 69.60672, 147.4894 -17103, 66.81635, 117.8826 -17104, 71.57686, 130.2389 -17105, 71.3565, 153.339 -17106, 67.98793, 126.4604 -17107, 65.56672, 120.8202 -17108, 70.39966, 122.8004 -17109, 65.7372, 115.6365 -17110, 67.38494, 145.9888 -17111, 70.00988, 135.2099 -17112, 67.69492, 112.0235 -17113, 68.71585, 126.3978 -17114, 69.6456, 133.6615 -17115, 65.67921, 97.5587 -17116, 66.4272, 140.3629 -17117, 69.16499, 130.7432 -17118, 64.99349, 95.53404 -17119, 69.29714, 135.1842 -17120, 67.03529, 127.6698 -17121, 70.17991, 141.2059 -17122, 68.42657, 139.0159 -17123, 67.42189, 115.3929 -17124, 71.6334, 144.9499 -17125, 68.4183, 118.4396 -17126, 69.58501, 116.3081 -17127, 68.2946, 134.5639 -17128, 68.29736, 114.556 -17129, 67.23158, 111.2912 -17130, 68.15698, 124.7231 -17131, 67.58915, 113.8607 -17132, 66.48084, 131.7704 -17133, 67.83819, 112.8704 -17134, 66.22459, 120.3185 -17135, 69.32855, 148.7261 -17136, 68.7643, 138.8232 -17137, 66.60467, 117.4884 -17138, 68.06631, 111.7891 -17139, 65.82945, 113.0426 -17140, 67.10438, 111.593 -17141, 68.05392, 98.44388 -17142, 67.04599, 116.846 -17143, 69.75999, 140.1723 -17144, 68.62962, 128.635 -17145, 67.21518, 113.1391 -17146, 66.65893, 130.1087 -17147, 66.61554, 124.7657 -17148, 68.8524, 153.9203 -17149, 68.11909, 139.9683 -17150, 68.84217, 133.1024 -17151, 69.28642, 117.1763 -17152, 67.43359, 134.4193 -17153, 68.4407, 131.7304 -17154, 72.56003, 143.5421 -17155, 65.07677, 102.0212 -17156, 68.07466, 139.4078 -17157, 69.87283, 133.8259 -17158, 67.54613, 136.548 -17159, 68.99154, 136.0463 -17160, 65.93494, 114.2724 -17161, 67.50424, 124.5354 -17162, 67.8023, 127.3532 -17163, 68.36515, 133.1667 -17164, 68.72643, 119.8404 -17165, 65.63641, 115.1096 -17166, 71.53079, 139.728 -17167, 68.27154, 119.8697 -17168, 65.48714, 125.6218 -17169, 68.25275, 140.0211 -17170, 69.62553, 134.1744 -17171, 71.33776, 151.6827 -17172, 65.22591, 113.2357 -17173, 68.33965, 116.1773 -17174, 67.44352, 131.3575 -17175, 67.0122, 115.7769 -17176, 70.45836, 113.9029 -17177, 65.74525, 132.905 -17178, 68.08006, 131.2455 -17179, 70.3959, 132.2152 -17180, 72.96003, 141.0356 -17181, 69.00062, 139.347 -17182, 69.51925, 142.2807 -17183, 69.3335, 132.628 -17184, 71.19641, 136.2158 -17185, 69.76816, 131.0426 -17186, 70.62661, 113.2917 -17187, 67.28616, 145.1271 -17188, 68.66966, 116.3694 -17189, 69.29476, 134.6555 -17190, 64.09493, 115.4626 -17191, 63.6884, 107.0641 -17192, 69.35389, 130.634 -17193, 65.60857, 102.9622 -17194, 69.51197, 140.5772 -17195, 69.14868, 125.3518 -17196, 66.54976, 118.1047 -17197, 68.73761, 113.9191 -17198, 68.61752, 143.5086 -17199, 64.7415, 122.214 -17200, 69.43114, 129.3049 -17201, 67.66681, 133.1967 -17202, 69.5546, 140.8539 -17203, 68.32029, 145.1288 -17204, 69.69178, 137.9446 -17205, 72.88636, 136.2642 -17206, 62.60367, 120.4839 -17207, 69.89894, 129.4752 -17208, 68.74855, 116.7264 -17209, 70.15073, 114.7623 -17210, 70.25185, 126.8904 -17211, 70.05622, 128.2033 -17212, 71.56915, 139.758 -17213, 66.7109, 105.7077 -17214, 67.85257, 129.604 -17215, 70.69405, 133.8317 -17216, 69.26246, 118.5224 -17217, 64.55678, 107.7334 -17218, 66.24054, 118.7468 -17219, 71.68073, 149.2518 -17220, 71.21093, 133.7609 -17221, 70.00062, 139.8029 -17222, 71.0916, 154.3139 -17223, 67.21865, 106.4772 -17224, 66.45714, 115.509 -17225, 67.47694, 127.3133 -17226, 67.50358, 121.8309 -17227, 67.20873, 125.5948 -17228, 66.71667, 135.6625 -17229, 66.70363, 131.4875 -17230, 69.96498, 143.9715 -17231, 68.36676, 146.4269 -17232, 66.05514, 110.1934 -17233, 68.55523, 121.336 -17234, 67.98234, 148.4537 -17235, 68.30939, 138.8029 -17236, 69.34515, 128.481 -17237, 68.52656, 117.759 -17238, 69.20707, 119.3487 -17239, 71.47479, 145.6045 -17240, 65.5345, 104.6023 -17241, 67.78592, 115.9959 -17242, 66.59132, 127.1836 -17243, 67.13782, 128.8127 -17244, 67.00111, 123.5243 -17245, 66.61654, 114.8299 -17246, 72.32507, 140.0185 -17247, 66.90281, 137.8036 -17248, 67.55171, 155.8602 -17249, 68.48654, 135.2003 -17250, 67.5987, 120.4145 -17251, 68.32615, 126.5379 -17252, 67.53167, 136.8568 -17253, 69.72754, 133.9694 -17254, 69.6497, 138.7263 -17255, 66.74817, 120.5369 -17256, 68.68338, 137.2761 -17257, 68.09093, 112.3863 -17258, 70.61191, 129.0103 -17259, 67.37954, 122.8752 -17260, 68.13334, 138.094 -17261, 68.91805, 141.2478 -17262, 70.53026, 120.2164 -17263, 66.74661, 123.1471 -17264, 63.66612, 92.91629 -17265, 68.93518, 128.9977 -17266, 62.95082, 89.82395 -17267, 68.93593, 128.2837 -17268, 68.73095, 136.5794 -17269, 66.31924, 111.7375 -17270, 70.48056, 143.0927 -17271, 69.12774, 139.3958 -17272, 67.81338, 123.9796 -17273, 69.70128, 137.1688 -17274, 68.20119, 124.0966 -17275, 68.43567, 135.5799 -17276, 66.59979, 122.0255 -17277, 69.57976, 121.9471 -17278, 66.89298, 153.7224 -17279, 68.44356, 133.3465 -17280, 64.02299, 133.0834 -17281, 68.08549, 126.3244 -17282, 64.19319, 131.872 -17283, 68.1466, 126.907 -17284, 66.59019, 112.2 -17285, 71.77869, 136.6592 -17286, 65.45623, 120.6365 -17287, 66.91902, 109.6637 -17288, 70.47505, 147.7924 -17289, 70.45755, 130.7421 -17290, 69.23837, 140.1161 -17291, 70.43378, 123.3224 -17292, 66.66166, 108.7235 -17293, 66.202, 116.2268 -17294, 69.01369, 123.5196 -17295, 67.89474, 109.0678 -17296, 65.09125, 115.2931 -17297, 65.61432, 118.1457 -17298, 67.83938, 120.6424 -17299, 67.93244, 149.6971 -17300, 68.77471, 147.1688 -17301, 65.27402, 123.5437 -17302, 64.87507, 107.5534 -17303, 68.12084, 144.7017 -17304, 68.10385, 122.944 -17305, 66.60491, 123.4707 -17306, 64.98909, 126.5752 -17307, 65.48748, 123.3998 -17308, 71.20181, 135.5595 -17309, 69.63121, 145.3661 -17310, 67.94288, 132.4093 -17311, 69.47689, 137.9974 -17312, 67.00352, 125.768 -17313, 67.33913, 140.9204 -17314, 69.99442, 124.9403 -17315, 66.61274, 122.8743 -17316, 64.62708, 119.5881 -17317, 67.33036, 129.4347 -17318, 67.80582, 122.0169 -17319, 67.32409, 131.2304 -17320, 70.96058, 154.6305 -17321, 68.98601, 128.4208 -17322, 69.46885, 126.7239 -17323, 67.27957, 151.1432 -17324, 70.18223, 118.0108 -17325, 67.0326, 138.4939 -17326, 66.39075, 120.1294 -17327, 67.89527, 134.1851 -17328, 66.14899, 130.3818 -17329, 69.54063, 144.5497 -17330, 70.14756, 134.8804 -17331, 66.89045, 99.50583 -17332, 67.23624, 137.2681 -17333, 69.78805, 125.1333 -17334, 68.41729, 132.5489 -17335, 65.77199, 124.1671 -17336, 68.65215, 123.5174 -17337, 68.65431, 140.2481 -17338, 70.68047, 147.894 -17339, 66.9118, 138.9373 -17340, 69.86836, 127.2331 -17341, 63.23208, 111.9702 -17342, 64.72051, 104.9827 -17343, 65.24398, 124.1485 -17344, 70.89385, 133.8627 -17345, 64.25659, 125.7283 -17346, 70.04462, 135.2964 -17347, 68.1956, 132.6032 -17348, 66.98148, 139.9306 -17349, 67.94824, 139.7195 -17350, 67.09869, 118.7587 -17351, 71.84299, 149.6695 -17352, 68.44482, 131.4924 -17353, 67.24833, 120.8204 -17354, 69.21266, 125.3578 -17355, 64.62267, 110.5318 -17356, 66.34307, 135.219 -17357, 67.53967, 125.4678 -17358, 66.34283, 122.1693 -17359, 66.21181, 102.0376 -17360, 67.4587, 123.1343 -17361, 66.25568, 125.5099 -17362, 67.24089, 110.9775 -17363, 65.92673, 132.2059 -17364, 67.96507, 124.3027 -17365, 67.12922, 137.0875 -17366, 69.75762, 117.7232 -17367, 69.35818, 136.1109 -17368, 66.49944, 130.8294 -17369, 65.84519, 116.6415 -17370, 68.6028, 138.3946 -17371, 65.50146, 105.7827 -17372, 69.52765, 135.0961 -17373, 68.34357, 130.8423 -17374, 68.39615, 146.7625 -17375, 66.43119, 133.4835 -17376, 68.33665, 101.9516 -17377, 69.47857, 135.9337 -17378, 66.01032, 131.8757 -17379, 64.46887, 94.18679 -17380, 67.68763, 118.7816 -17381, 69.57526, 138.27 -17382, 69.0155, 135.8559 -17383, 70.21523, 127.0247 -17384, 72.33756, 124.8651 -17385, 70.90167, 120.6197 -17386, 68.87665, 133.8123 -17387, 67.92675, 127.4273 -17388, 69.62929, 129.0453 -17389, 67.59691, 110.7002 -17390, 63.85158, 96.09962 -17391, 68.01914, 119.6914 -17392, 69.86323, 149.4407 -17393, 69.23452, 141.8186 -17394, 66.7337, 121.9367 -17395, 67.6231, 109.1208 -17396, 69.04787, 135.6889 -17397, 66.66643, 134.4328 -17398, 65.62201, 121.1309 -17399, 68.02126, 130.6948 -17400, 68.08905, 134.0382 -17401, 67.5556, 134.2413 -17402, 69.35112, 142.6964 -17403, 67.77226, 129.9275 -17404, 70.44505, 127.7974 -17405, 68.2744, 132.4472 -17406, 66.20602, 104.8284 -17407, 68.40548, 141.5327 -17408, 67.28425, 125.0764 -17409, 69.86408, 137.2586 -17410, 70.17631, 122.8945 -17411, 68.57961, 125.8787 -17412, 68.45722, 154.869 -17413, 70.16449, 138.963 -17414, 67.94165, 150.0432 -17415, 68.94539, 124.4079 -17416, 66.95864, 121.0411 -17417, 67.13623, 137.279 -17418, 69.5223, 129.8503 -17419, 69.18085, 117.7637 -17420, 66.22712, 122.3249 -17421, 65.79575, 128.0249 -17422, 68.66855, 128.7411 -17423, 70.65926, 147.8487 -17424, 67.12482, 128.5421 -17425, 69.51048, 131.1724 -17426, 69.71101, 137.643 -17427, 66.2875, 129.1074 -17428, 65.99484, 128.2892 -17429, 68.42721, 106.4421 -17430, 70.19993, 129.7897 -17431, 67.513, 126.6537 -17432, 64.9103, 126.3234 -17433, 67.90483, 133.3319 -17434, 68.72117, 110.1285 -17435, 69.82383, 132.965 -17436, 66.35869, 134.4128 -17437, 64.96389, 112.9538 -17438, 68.10303, 120.6951 -17439, 66.75597, 128.8385 -17440, 70.61415, 125.407 -17441, 68.98555, 144.2759 -17442, 66.08359, 124.9939 -17443, 68.9074, 114.1931 -17444, 70.61363, 117.2962 -17445, 70.6372, 151.222 -17446, 70.41624, 148.9906 -17447, 70.83968, 145.3063 -17448, 70.65043, 117.1631 -17449, 65.80934, 138.862 -17450, 66.92804, 128.9616 -17451, 70.39752, 126.0571 -17452, 72.50206, 147.8171 -17453, 64.03816, 120.2204 -17454, 67.21913, 123.7812 -17455, 67.61897, 129.5538 -17456, 68.35799, 134.8242 -17457, 68.28884, 132.8389 -17458, 69.1259, 137.0335 -17459, 69.41682, 128.1469 -17460, 67.77817, 138.1283 -17461, 66.81717, 143.9722 -17462, 66.75222, 128.8606 -17463, 70.87992, 148.1767 -17464, 67.89296, 119.2523 -17465, 68.241, 134.4452 -17466, 69.38423, 145.2439 -17467, 67.65062, 131.6738 -17468, 64.91414, 127.9493 -17469, 69.34408, 128.3066 -17470, 67.92756, 130.1062 -17471, 67.10739, 132.5064 -17472, 70.39954, 116.3744 -17473, 68.23497, 138.2569 -17474, 65.60851, 122.0313 -17475, 69.05463, 130.5581 -17476, 69.12682, 140.6556 -17477, 70.88868, 142.4583 -17478, 67.58599, 132.6764 -17479, 67.32745, 119.78 -17480, 67.12344, 124.6291 -17481, 67.61494, 123.2273 -17482, 67.66575, 128.987 -17483, 69.5664, 147.4409 -17484, 69.15809, 132.131 -17485, 68.67322, 130.7502 -17486, 66.99931, 114.139 -17487, 65.92524, 135.0721 -17488, 71.79475, 128.5656 -17489, 69.80914, 128.4846 -17490, 68.67485, 147.9136 -17491, 69.78355, 144.2045 -17492, 66.4674, 126.0095 -17493, 67.7098, 102.0889 -17494, 68.07478, 121.1104 -17495, 68.83845, 127.8095 -17496, 66.26448, 116.7611 -17497, 67.13351, 109.3082 -17498, 71.7536, 135.465 -17499, 69.04101, 135.8275 -17500, 66.32523, 118.2465 -17501, 66.14545, 105.8383 -17502, 66.29814, 122.1135 -17503, 69.04615, 124.2771 -17504, 68.4843, 137.9207 -17505, 69.22513, 152.3623 -17506, 65.09487, 116.8324 -17507, 69.82687, 137.7917 -17508, 71.35732, 141.2236 -17509, 69.78746, 144.7297 -17510, 67.53645, 132.4694 -17511, 71.56001, 134.0619 -17512, 66.63729, 110.7138 -17513, 70.40909, 152.2089 -17514, 69.48909, 127.0428 -17515, 66.23063, 125.2783 -17516, 68.48589, 121.0761 -17517, 67.04085, 123.1234 -17518, 67.27063, 137.0571 -17519, 71.97956, 143.4563 -17520, 70.96103, 146.4419 -17521, 66.91292, 131.9401 -17522, 68.28653, 131.3733 -17523, 67.93407, 114.6522 -17524, 69.21084, 126.1387 -17525, 69.30884, 126.5639 -17526, 70.80526, 135.2671 -17527, 67.93951, 109.9232 -17528, 67.56284, 107.6989 -17529, 68.09715, 124.0935 -17530, 70.12763, 129.9578 -17531, 66.98102, 131.5794 -17532, 68.86713, 146.9701 -17533, 65.2471, 104.3321 -17534, 68.7895, 112.7259 -17535, 66.34859, 115.9226 -17536, 65.34809, 115.9247 -17537, 68.56905, 142.9977 -17538, 68.42731, 128.6519 -17539, 63.02668, 117.3216 -17540, 70.48699, 108.167 -17541, 68.76397, 116.1651 -17542, 67.79336, 125.918 -17543, 70.62234, 128.4205 -17544, 70.83431, 133.99 -17545, 66.67394, 104.0444 -17546, 68.11247, 115.8479 -17547, 69.17367, 126.6247 -17548, 64.44211, 106.5789 -17549, 64.78017, 116.4003 -17550, 66.10999, 133.4851 -17551, 65.87608, 125.1903 -17552, 66.10888, 117.348 -17553, 68.80248, 128.6236 -17554, 66.81104, 131.7218 -17555, 69.08557, 113.5234 -17556, 65.7806, 111.8252 -17557, 71.0256, 126.3278 -17558, 66.96471, 114.1668 -17559, 67.35775, 125.6802 -17560, 68.96066, 115.0578 -17561, 70.45835, 131.7719 -17562, 65.83663, 125.7059 -17563, 69.09294, 140.4586 -17564, 70.01214, 135.788 -17565, 70.05774, 131.9843 -17566, 68.80506, 118.9164 -17567, 71.03993, 114.2464 -17568, 66.96363, 119.7721 -17569, 68.13431, 143.9173 -17570, 68.12636, 134.6963 -17571, 65.78844, 115.5098 -17572, 66.52245, 141.3431 -17573, 66.4821, 119.7862 -17574, 66.78109, 111.4848 -17575, 70.63527, 129.1964 -17576, 64.84494, 125.1476 -17577, 66.94689, 113.3937 -17578, 69.9777, 146.588 -17579, 68.47808, 126.7218 -17580, 71.90407, 129.2662 -17581, 66.16301, 134.7019 -17582, 70.373, 127.0987 -17583, 69.51213, 154.7542 -17584, 68.62782, 115.5711 -17585, 68.02584, 112.8388 -17586, 68.93595, 128.5597 -17587, 68.45787, 143.0222 -17588, 71.04919, 150.0566 -17589, 68.41924, 133.9914 -17590, 66.17319, 129.4204 -17591, 68.25954, 123.7291 -17592, 69.45543, 126.2942 -17593, 67.36318, 131.4997 -17594, 70.46899, 129.5623 -17595, 65.38946, 122.8568 -17596, 66.58764, 107.3435 -17597, 68.94909, 123.1888 -17598, 71.99101, 132.4664 -17599, 66.52168, 90.28757 -17600, 65.33005, 103.7244 -17601, 70.78015, 122.0199 -17602, 67.59295, 150.5815 -17603, 70.60438, 130.0759 -17604, 65.41199, 127.4417 -17605, 68.62862, 131.5481 -17606, 69.74755, 135.2463 -17607, 68.1019, 124.3764 -17608, 70.11839, 116.9938 -17609, 68.67284, 131.3305 -17610, 67.5545, 130.8208 -17611, 69.10032, 140.3478 -17612, 65.02648, 114.67 -17613, 67.66499, 100.9845 -17614, 66.05669, 127.6383 -17615, 68.56903, 123.1565 -17616, 71.14656, 154.5352 -17617, 68.34943, 142.6295 -17618, 67.52165, 129.4453 -17619, 66.28252, 110.107 -17620, 66.28898, 111.789 -17621, 67.38143, 118.9327 -17622, 64.96211, 116.1956 -17623, 68.06586, 128.5962 -17624, 69.29725, 122.9534 -17625, 68.59195, 124.7235 -17626, 68.36335, 115.9058 -17627, 68.20277, 124.6159 -17628, 67.63228, 113.3939 -17629, 68.55703, 131.2876 -17630, 67.80819, 109.1425 -17631, 69.84982, 124.792 -17632, 67.60338, 124.7089 -17633, 66.71585, 129.8961 -17634, 68.47311, 128.0554 -17635, 66.60304, 145.09 -17636, 67.27537, 118.608 -17637, 70.94362, 119.4777 -17638, 68.47006, 137.1918 -17639, 68.82753, 129.1745 -17640, 70.8099, 140.7936 -17641, 68.3647, 149.1508 -17642, 70.78792, 139.6307 -17643, 67.27509, 123.7572 -17644, 67.20986, 148.5905 -17645, 67.4203, 122.0798 -17646, 69.04477, 126.2105 -17647, 65.38357, 100.095 -17648, 65.61573, 132.7978 -17649, 69.85783, 118.9502 -17650, 67.36017, 105.2444 -17651, 62.6732, 121.4203 -17652, 70.42525, 121.7662 -17653, 67.26572, 126.6487 -17654, 68.51747, 143.4521 -17655, 64.26348, 106.0661 -17656, 70.26415, 145.1632 -17657, 67.41239, 114.509 -17658, 66.90254, 124.9441 -17659, 67.09326, 103.5604 -17660, 69.77547, 130.6445 -17661, 68.33065, 118.0593 -17662, 68.26423, 136.1453 -17663, 71.57294, 143.9069 -17664, 65.40654, 121.508 -17665, 67.34236, 123.9898 -17666, 68.37858, 146.2403 -17667, 66.6348, 124.2302 -17668, 69.29278, 124.7185 -17669, 67.92344, 101.0071 -17670, 69.22177, 109.5712 -17671, 67.81513, 140.0702 -17672, 68.53579, 150.1922 -17673, 68.44375, 116.0455 -17674, 66.7314, 123.9785 -17675, 66.60584, 119.3897 -17676, 68.23841, 130.5193 -17677, 67.80735, 118.0474 -17678, 69.12848, 135.7411 -17679, 68.27442, 125.7874 -17680, 66.25022, 111.829 -17681, 66.69382, 137.1941 -17682, 69.13214, 121.0271 -17683, 65.10633, 124.076 -17684, 66.68091, 114.9335 -17685, 68.83099, 130.5804 -17686, 64.99021, 107.8868 -17687, 65.10463, 119.2647 -17688, 66.23363, 129.517 -17689, 70.40311, 140.5745 -17690, 69.1741, 142.1562 -17691, 70.94219, 155.5272 -17692, 69.77945, 141.9648 -17693, 68.07987, 128.9409 -17694, 71.18967, 135.8515 -17695, 68.68805, 132.4254 -17696, 67.13456, 127.5693 -17697, 69.38753, 140.057 -17698, 69.78403, 112.8273 -17699, 70.54483, 142.3329 -17700, 69.26943, 128.3769 -17701, 62.75187, 123.6565 -17702, 68.67501, 124.052 -17703, 69.80293, 115.4548 -17704, 68.42678, 143.1792 -17705, 69.45741, 138.7257 -17706, 67.9611, 132.2818 -17707, 70.27294, 147.6049 -17708, 69.4698, 115.1695 -17709, 66.0276, 132.7526 -17710, 70.05938, 119.229 -17711, 69.20764, 134.5649 -17712, 67.91794, 128.9604 -17713, 64.29769, 129.4822 -17714, 68.08515, 132.9598 -17715, 64.99793, 130.275 -17716, 67.5616, 113.1737 -17717, 66.51537, 134.7376 -17718, 67.68945, 130.292 -17719, 68.90486, 110.8739 -17720, 66.18914, 115.6845 -17721, 69.75767, 127.8686 -17722, 66.76657, 140.9137 -17723, 67.08656, 119.2133 -17724, 69.01353, 113.2377 -17725, 68.92044, 135.0273 -17726, 65.85728, 126.3403 -17727, 67.17593, 141.6974 -17728, 67.30636, 99.24041 -17729, 66.94324, 130.8662 -17730, 68.50491, 122.4066 -17731, 68.74354, 125.7904 -17732, 65.76227, 104.6801 -17733, 69.09257, 136.0122 -17734, 68.94939, 118.2589 -17735, 70.09213, 125.8561 -17736, 69.18731, 133.4524 -17737, 68.4954, 128.8647 -17738, 69.51338, 125.0658 -17739, 66.63248, 116.099 -17740, 71.0828, 126.8249 -17741, 69.24003, 121.6796 -17742, 67.58275, 107.368 -17743, 67.47076, 135.8448 -17744, 67.46227, 154.3603 -17745, 66.76317, 117.0371 -17746, 68.17367, 146.8522 -17747, 69.46524, 134.8602 -17748, 66.62973, 121.8982 -17749, 66.44354, 107.1741 -17750, 64.64407, 122.6856 -17751, 67.3738, 125.9878 -17752, 67.15214, 118.8415 -17753, 67.02086, 122.0688 -17754, 65.3578, 119.4367 -17755, 68.64967, 135.319 -17756, 65.73185, 107.9237 -17757, 70.26659, 145.7515 -17758, 67.98652, 108.0164 -17759, 68.12168, 103.4226 -17760, 66.71189, 113.731 -17761, 68.95181, 118.5587 -17762, 64.05937, 107.2392 -17763, 67.8327, 99.86461 -17764, 65.13404, 128.6271 -17765, 69.83556, 140.1353 -17766, 64.58079, 117.7762 -17767, 66.27481, 139.9699 -17768, 68.44232, 136.3386 -17769, 69.49662, 126.653 -17770, 67.00532, 136.4169 -17771, 66.56845, 119.5951 -17772, 71.46587, 140.205 -17773, 71.15181, 127.4632 -17774, 67.45321, 120.4057 -17775, 67.04669, 124.6743 -17776, 70.26367, 136.9014 -17777, 67.61734, 124.1445 -17778, 69.14406, 126.3297 -17779, 68.51538, 119.557 -17780, 67.15402, 109.3047 -17781, 67.39338, 116.0406 -17782, 63.98085, 130.7299 -17783, 67.69502, 121.9959 -17784, 63.70691, 115.2735 -17785, 68.96742, 148.4415 -17786, 67.80944, 110.1538 -17787, 65.94609, 123.3123 -17788, 66.7438, 125.529 -17789, 69.28237, 129.4881 -17790, 67.30155, 138.8039 -17791, 64.46644, 122.0999 -17792, 70.54669, 152.5065 -17793, 70.72644, 125.0889 -17794, 70.68136, 124.8044 -17795, 67.64608, 123.3561 -17796, 70.01336, 137.4849 -17797, 70.26996, 132.6404 -17798, 64.43709, 117.2493 -17799, 65.71351, 107.3677 -17800, 67.51238, 115.8008 -17801, 67.41874, 136.2018 -17802, 67.24278, 127.5762 -17803, 66.92857, 122.3716 -17804, 67.00632, 121.4926 -17805, 71.00224, 142.3814 -17806, 65.08169, 131.7073 -17807, 68.68027, 138.8542 -17808, 68.95186, 119.4662 -17809, 65.72262, 125.0601 -17810, 67.25835, 112.9622 -17811, 68.83265, 141.0966 -17812, 66.0971, 114.9541 -17813, 68.72897, 103.6782 -17814, 70.73673, 121.2629 -17815, 67.11241, 102.611 -17816, 68.28176, 132.165 -17817, 66.27818, 111.2475 -17818, 68.17814, 130.9026 -17819, 67.39827, 133.3838 -17820, 68.26178, 140.6728 -17821, 69.16235, 139.975 -17822, 69.95678, 144.1954 -17823, 65.80928, 127.7615 -17824, 70.35926, 115.0103 -17825, 72.16204, 128.699 -17826, 70.5984, 127.022 -17827, 67.54096, 116.5187 -17828, 70.90351, 149.8015 -17829, 66.69164, 116.7514 -17830, 67.12278, 124.5669 -17831, 66.35003, 126.2649 -17832, 67.96086, 123.9389 -17833, 66.60797, 129.7934 -17834, 70.68833, 138.1275 -17835, 67.46758, 120.3863 -17836, 71.41271, 134.6558 -17837, 67.32752, 127.3763 -17838, 70.63214, 135.4599 -17839, 68.45124, 140.1733 -17840, 64.6863, 122.1215 -17841, 70.21472, 128.4004 -17842, 67.95426, 114.9715 -17843, 70.44048, 113.0864 -17844, 68.92179, 132.3365 -17845, 70.6785, 128.997 -17846, 67.61551, 101.6088 -17847, 66.09501, 128.1073 -17848, 68.55704, 121.8583 -17849, 69.19175, 136.8494 -17850, 68.16405, 119.0371 -17851, 69.0402, 121.7373 -17852, 66.66933, 131.2186 -17853, 69.87747, 133.1686 -17854, 71.59021, 143.2877 -17855, 67.38968, 131.6709 -17856, 68.20687, 122.5181 -17857, 69.68547, 129.6884 -17858, 67.93426, 121.8744 -17859, 67.1179, 119.5904 -17860, 67.15852, 131.0955 -17861, 68.59133, 132.2124 -17862, 69.26014, 136.4103 -17863, 70.07126, 135.873 -17864, 67.0628, 123.2518 -17865, 69.13139, 133.561 -17866, 68.40603, 150.925 -17867, 69.7404, 134.901 -17868, 69.49899, 145.542 -17869, 66.14494, 141.4612 -17870, 67.79179, 122.9394 -17871, 66.74223, 123.4556 -17872, 66.63048, 110.9128 -17873, 68.4112, 120.4405 -17874, 69.37198, 129.1054 -17875, 65.74819, 109.5126 -17876, 66.01136, 128.2502 -17877, 67.90718, 125.0989 -17878, 67.16599, 139.2742 -17879, 66.48646, 114.6859 -17880, 65.71394, 130.992 -17881, 68.79098, 141.218 -17882, 67.99196, 133.9622 -17883, 66.5631, 127.67 -17884, 70.817, 125.1695 -17885, 66.64471, 129.4135 -17886, 67.40685, 150.7738 -17887, 66.17396, 103.0751 -17888, 67.97678, 129.4215 -17889, 68.48737, 128.1923 -17890, 69.52669, 154.935 -17891, 67.68157, 119.2703 -17892, 65.55334, 103.3069 -17893, 66.66098, 113.6555 -17894, 66.04091, 134.5409 -17895, 68.13648, 130.8127 -17896, 68.13583, 120.3052 -17897, 67.14269, 123.0069 -17898, 66.04267, 110.8981 -17899, 69.08156, 150.8598 -17900, 66.61972, 112.7862 -17901, 66.93529, 111.1 -17902, 67.35236, 125.911 -17903, 68.51651, 131.9403 -17904, 64.4288, 113.6686 -17905, 67.61939, 135.8584 -17906, 67.13547, 136.8187 -17907, 66.36896, 128.5891 -17908, 68.5461, 121.3929 -17909, 69.13348, 118.3683 -17910, 68.62844, 117.1061 -17911, 65.0907, 107.1077 -17912, 66.98252, 104.5822 -17913, 68.60319, 137.7396 -17914, 71.20318, 127.5626 -17915, 67.03676, 116.6844 -17916, 66.41179, 115.3066 -17917, 66.68877, 127.3655 -17918, 69.89705, 138.6612 -17919, 68.88841, 120.0867 -17920, 68.53916, 124.4342 -17921, 68.01568, 126.3073 -17922, 68.68683, 134.0053 -17923, 65.40277, 128.8785 -17924, 68.67509, 124.1615 -17925, 67.4067, 123.0948 -17926, 67.17129, 117.9041 -17927, 65.59616, 115.5202 -17928, 68.67567, 149.735 -17929, 70.48483, 137.5004 -17930, 68.51527, 129.2966 -17931, 67.69421, 127.8233 -17932, 66.9375, 131.2734 -17933, 67.81, 134.0172 -17934, 64.04524, 104.574 -17935, 67.23027, 117.1627 -17936, 72.83977, 134.8802 -17937, 67.47092, 119.7091 -17938, 65.71528, 129.7431 -17939, 71.92649, 124.2943 -17940, 70.05502, 131.3468 -17941, 67.87492, 132.6076 -17942, 66.50503, 119.4857 -17943, 66.91365, 132.5616 -17944, 67.88395, 128.4869 -17945, 66.72951, 140.1601 -17946, 68.50989, 127.1386 -17947, 66.02751, 116.4385 -17948, 65.83821, 133.1072 -17949, 66.03926, 113.465 -17950, 70.46449, 121.1387 -17951, 67.62774, 139.2346 -17952, 67.34629, 139.7259 -17953, 68.28918, 135.4869 -17954, 66.68415, 131.9723 -17955, 67.9826, 140.5009 -17956, 68.07289, 129.6271 -17957, 69.451, 131.9335 -17958, 69.86608, 153.0546 -17959, 68.37755, 135.7714 -17960, 68.6245, 141.193 -17961, 66.61664, 132.7202 -17962, 70.06392, 145.6707 -17963, 69.15142, 118.9946 -17964, 68.98655, 141.885 -17965, 68.9009, 132.7891 -17966, 68.21302, 120.9478 -17967, 66.3911, 120.5331 -17968, 66.83657, 120.8557 -17969, 66.48676, 128.8555 -17970, 67.74059, 124.7659 -17971, 68.18607, 128.0024 -17972, 69.87665, 113.3553 -17973, 67.0486, 122.6413 -17974, 67.27659, 102.4448 -17975, 66.51091, 119.3634 -17976, 68.91221, 131.2366 -17977, 65.68233, 110.3737 -17978, 72.45968, 133.0092 -17979, 68.18543, 130.0549 -17980, 69.14627, 149.4217 -17981, 66.64452, 128.6803 -17982, 69.28048, 141.1256 -17983, 64.94449, 117.1219 -17984, 67.63184, 129.0595 -17985, 69.17876, 118.432 -17986, 68.17164, 119.7833 -17987, 67.87229, 129.1417 -17988, 66.08932, 116.2913 -17989, 68.80233, 130.847 -17990, 67.47177, 124.7299 -17991, 69.04627, 134.744 -17992, 65.53588, 135.9945 -17993, 66.41675, 118.6227 -17994, 70.97724, 143.0605 -17995, 70.31771, 126.9513 -17996, 68.63439, 123.4122 -17997, 66.04782, 128.4055 -17998, 68.97705, 141.9362 -17999, 68.91452, 133.6861 -18000, 67.87146, 107.1111 -18001, 67.37218, 133.1697 -18002, 66.3178, 118.4692 -18003, 66.48568, 117.9041 -18004, 69.2381, 132.462 -18005, 67.2139, 132.6842 -18006, 68.50477, 134.123 -18007, 63.66317, 136.7526 -18008, 66.32945, 110.6483 -18009, 67.10945, 123.3761 -18010, 70.02339, 132.8187 -18011, 66.06018, 115.8997 -18012, 68.59984, 106.3343 -18013, 67.16997, 133.2448 -18014, 68.15961, 126.2497 -18015, 67.9255, 136.4886 -18016, 68.24803, 131.2595 -18017, 68.63838, 126.5846 -18018, 67.30494, 119.9612 -18019, 68.54865, 134.5564 -18020, 68.53894, 133.6246 -18021, 68.78754, 122.2611 -18022, 69.70884, 135.1988 -18023, 65.90638, 125.9987 -18024, 70.37854, 129.9166 -18025, 70.70388, 139.938 -18026, 67.22265, 114.1903 -18027, 69.80605, 131.4128 -18028, 67.97377, 115.0723 -18029, 69.83246, 129.3358 -18030, 69.33122, 127.4932 -18031, 68.67805, 125.6517 -18032, 69.58794, 131.1589 -18033, 68.42502, 124.2701 -18034, 67.69161, 113.9616 -18035, 70.2256, 145.9646 -18036, 70.04402, 139.6768 -18037, 67.95373, 139.5456 -18038, 68.3128, 121.7718 -18039, 68.40937, 122.1585 -18040, 66.4482, 133.4419 -18041, 65.28092, 124.6637 -18042, 68.09486, 128.0449 -18043, 66.70524, 120.472 -18044, 65.41192, 117.5336 -18045, 65.85663, 135.9652 -18046, 70.74685, 149.2883 -18047, 69.57387, 117.9533 -18048, 68.94783, 128.49 -18049, 68.47448, 126.3915 -18050, 71.04807, 152.0604 -18051, 67.63577, 124.4287 -18052, 65.52926, 134.8985 -18053, 66.79635, 119.705 -18054, 67.76397, 141.058 -18055, 64.71368, 120.2188 -18056, 66.01498, 109.751 -18057, 69.09526, 128.5564 -18058, 69.5558, 117.3931 -18059, 70.0715, 137.8603 -18060, 67.86641, 126.4714 -18061, 70.0659, 152.4405 -18062, 68.80896, 115.4877 -18063, 68.08706, 121.7255 -18064, 69.52669, 136.2363 -18065, 67.03169, 119.8095 -18066, 65.28391, 103.4991 -18067, 69.47478, 140.6912 -18068, 66.37838, 118.5934 -18069, 66.31288, 123.2614 -18070, 71.26059, 139.1393 -18071, 64.42409, 127.9856 -18072, 67.46592, 129.3959 -18073, 69.28848, 132.1143 -18074, 69.92655, 121.1621 -18075, 67.78948, 131.155 -18076, 64.45606, 111.9183 -18077, 69.29649, 141.9219 -18078, 67.70022, 118.3203 -18079, 64.05875, 112.507 -18080, 65.87971, 107.3144 -18081, 64.19588, 111.4285 -18082, 67.50863, 124.7257 -18083, 71.16467, 146.5501 -18084, 68.71092, 109.9617 -18085, 67.60347, 138.4381 -18086, 67.1752, 117.9673 -18087, 68.9361, 128.3238 -18088, 71.93971, 145.1521 -18089, 67.45158, 127.374 -18090, 68.4984, 127.2154 -18091, 66.04641, 131.7895 -18092, 69.16729, 135.4433 -18093, 66.9408, 130.642 -18094, 71.99802, 149.8457 -18095, 66.92567, 121.6816 -18096, 68.41449, 120.9509 -18097, 68.01572, 105.1644 -18098, 70.20919, 139.4911 -18099, 67.59821, 124.802 -18100, 71.51942, 129.1836 -18101, 67.61313, 128.6954 -18102, 68.63738, 128.6178 -18103, 65.69314, 105.1192 -18104, 70.04372, 137.0862 -18105, 66.35456, 122.6138 -18106, 67.49569, 139.7088 -18107, 63.92701, 111.9422 -18108, 67.44722, 120.0132 -18109, 69.96202, 100.6786 -18110, 68.80541, 121.0008 -18111, 67.75075, 114.8156 -18112, 69.7042, 126.8603 -18113, 69.64501, 120.8241 -18114, 69.39123, 130.6514 -18115, 68.9035, 134.7614 -18116, 66.30156, 103.3628 -18117, 65.82235, 137.0039 -18118, 66.6285, 122.64 -18119, 65.68185, 126.536 -18120, 70.3089, 143.4456 -18121, 71.60372, 129.4984 -18122, 70.64766, 125.3179 -18123, 69.25148, 137.409 -18124, 67.11941, 134.9583 -18125, 62.681, 113.2199 -18126, 69.29774, 136.554 -18127, 68.59213, 125.7968 -18128, 70.21639, 126.2265 -18129, 69.27237, 126.6931 -18130, 67.47561, 133.393 -18131, 67.10278, 142.9183 -18132, 68.97598, 136.8493 -18133, 68.87987, 135.7244 -18134, 62.51831, 124.7827 -18135, 70.16181, 133.7963 -18136, 70.11142, 129.0453 -18137, 71.00201, 127.2179 -18138, 68.83197, 126.4874 -18139, 65.55569, 113.4283 -18140, 69.18478, 114.7062 -18141, 67.17728, 130.403 -18142, 67.96749, 116.2167 -18143, 63.09629, 109.8718 -18144, 67.81887, 125.685 -18145, 72.54256, 140.8276 -18146, 68.38361, 114.9645 -18147, 66.57869, 127.7382 -18148, 72.07371, 137.6268 -18149, 66.14913, 118.2779 -18150, 68.70572, 113.5148 -18151, 69.16225, 144.8836 -18152, 69.46824, 112.4765 -18153, 66.60941, 100.0013 -18154, 65.79111, 117.3869 -18155, 65.76647, 112.3201 -18156, 67.22625, 132.7827 -18157, 69.2736, 120.489 -18158, 68.47907, 128.7633 -18159, 70.22812, 138.8851 -18160, 66.46453, 125.1114 -18161, 67.97522, 125.1482 -18162, 68.8071, 120.3047 -18163, 68.32443, 118.6195 -18164, 69.47959, 126.1822 -18165, 68.03194, 137.12 -18166, 69.48829, 139.8606 -18167, 69.37585, 112.6907 -18168, 69.23615, 121.2323 -18169, 68.69017, 131.3072 -18170, 71.45863, 139.9082 -18171, 67.39093, 122.1571 -18172, 68.53211, 134.3921 -18173, 70.2828, 127.9534 -18174, 67.65305, 110.9933 -18175, 67.20857, 123.4236 -18176, 66.31937, 106.9169 -18177, 63.79425, 115.0191 -18178, 69.65965, 132.1418 -18179, 68.64995, 128.8615 -18180, 67.3593, 122.2451 -18181, 70.33984, 131.6924 -18182, 67.34878, 118.4924 -18183, 66.86827, 114.3971 -18184, 69.52901, 127.1832 -18185, 68.90152, 147.9446 -18186, 70.01268, 142.4176 -18187, 70.59863, 145.8138 -18188, 68.57766, 141.3239 -18189, 64.83389, 98.21334 -18190, 65.52077, 120.3068 -18191, 64.95625, 119.2154 -18192, 66.30334, 124.0317 -18193, 69.48549, 106.2442 -18194, 69.49559, 132.4523 -18195, 68.81243, 125.2854 -18196, 69.2587, 136.2841 -18197, 67.39374, 134.3775 -18198, 70.86215, 127.6207 -18199, 65.80325, 130.9248 -18200, 64.61694, 130.3277 -18201, 70.18644, 141.1758 -18202, 65.12985, 145.219 -18203, 66.26916, 122.1385 -18204, 67.64688, 135.0033 -18205, 70.90986, 129.1092 -18206, 68.94223, 140.3829 -18207, 69.88886, 113.3361 -18208, 67.5314, 138.2173 -18209, 65.13228, 118.1327 -18210, 68.75247, 126.3602 -18211, 66.64471, 114.0659 -18212, 65.97446, 120.8874 -18213, 68.73431, 130.3753 -18214, 65.67938, 131.3553 -18215, 65.55778, 115.0373 -18216, 67.69354, 127.2255 -18217, 66.82119, 114.3377 -18218, 68.46759, 131.2031 -18219, 68.89698, 134.2954 -18220, 65.08409, 115.3981 -18221, 71.76925, 117.198 -18222, 69.8877, 124.6225 -18223, 64.86973, 126.3919 -18224, 70.09753, 141.5936 -18225, 67.35945, 130.7049 -18226, 68.02039, 144.4665 -18227, 66.73404, 128.6324 -18228, 65.62875, 127.3425 -18229, 65.79502, 116.3517 -18230, 70.61392, 129.3511 -18231, 71.74355, 123.4305 -18232, 67.49866, 131.0747 -18233, 66.33294, 120.6984 -18234, 67.92479, 134.5304 -18235, 68.63009, 131.2724 -18236, 67.10296, 113.8506 -18237, 64.19394, 104.6135 -18238, 70.73008, 125.7546 -18239, 63.13516, 118.8045 -18240, 69.24981, 129.8799 -18241, 64.52242, 119.4434 -18242, 66.36544, 126.2793 -18243, 67.62992, 125.1355 -18244, 67.45805, 123.2317 -18245, 68.97952, 122.3737 -18246, 66.40492, 126.2988 -18247, 68.53298, 131.8284 -18248, 65.28708, 111.5392 -18249, 68.17779, 149.5809 -18250, 68.97437, 120.1771 -18251, 70.55554, 129.7295 -18252, 68.91172, 121.2899 -18253, 68.38275, 127.8957 -18254, 70.31738, 114.6335 -18255, 67.88363, 140.9839 -18256, 67.42592, 98.99675 -18257, 70.05856, 129.2721 -18258, 70.19548, 145.6526 -18259, 66.16502, 104.1451 -18260, 66.37637, 128.7241 -18261, 69.99829, 130.8869 -18262, 68.99134, 146.4337 -18263, 68.94388, 139.6823 -18264, 64.99491, 123.3346 -18265, 69.11084, 125.0166 -18266, 67.93461, 116.0817 -18267, 67.01411, 134.6481 -18268, 65.32575, 141.6096 -18269, 71.45383, 134.6091 -18270, 68.01152, 124.4252 -18271, 64.87885, 112.5545 -18272, 68.14952, 119.4716 -18273, 66.66531, 116.4358 -18274, 68.66471, 123.5617 -18275, 67.38528, 123.4536 -18276, 68.49113, 120.9934 -18277, 66.78587, 110.6601 -18278, 69.2274, 115.8926 -18279, 65.96948, 127.8767 -18280, 66.35522, 121.45 -18281, 68.54128, 131.7424 -18282, 66.11305, 102.6734 -18283, 68.28863, 112.3732 -18284, 67.43632, 121.4337 -18285, 66.10499, 109.3116 -18286, 68.51568, 127.1865 -18287, 67.35712, 122.5386 -18288, 65.67569, 132.4576 -18289, 66.88722, 133.6719 -18290, 65.12152, 121.4696 -18291, 68.6178, 126.8987 -18292, 66.13103, 113.5217 -18293, 70.83591, 137.3996 -18294, 68.90076, 145.7439 -18295, 66.21815, 129.6257 -18296, 68.06749, 133.4515 -18297, 68.34053, 126.9106 -18298, 68.80582, 137.9986 -18299, 67.06065, 116.3153 -18300, 66.06083, 111.4023 -18301, 62.72779, 117.2561 -18302, 71.20406, 125.0336 -18303, 67.21888, 124.9911 -18304, 65.65855, 111.0068 -18305, 68.06644, 125.4116 -18306, 70.10401, 139.2201 -18307, 66.70493, 120.9451 -18308, 67.71756, 131.8942 -18309, 62.67446, 110.0678 -18310, 65.29473, 106.2219 -18311, 67.20517, 119.7847 -18312, 67.29519, 144.4307 -18313, 68.44048, 133.3402 -18314, 70.78181, 146.3325 -18315, 66.39307, 128.1566 -18316, 67.24037, 112.4023 -18317, 69.33963, 140.6288 -18318, 65.37485, 118.4317 -18319, 71.49449, 124.4993 -18320, 70.83151, 133.3373 -18321, 66.24703, 113.0378 -18322, 65.2573, 113.6279 -18323, 65.20991, 125.9694 -18324, 69.1082, 126.4711 -18325, 71.14384, 125.8373 -18326, 66.79003, 128.9918 -18327, 69.31011, 153.4923 -18328, 64.90285, 132.3529 -18329, 65.45378, 114.0868 -18330, 69.28697, 119.7079 -18331, 65.5537, 112.4582 -18332, 69.72966, 137.5734 -18333, 67.05884, 115.0583 -18334, 70.02535, 133.1753 -18335, 71.40333, 143.8659 -18336, 65.19703, 126.4798 -18337, 66.57693, 122.7911 -18338, 69.39658, 134.2674 -18339, 68.44566, 124.6497 -18340, 72.74185, 122.6723 -18341, 67.46665, 134.8106 -18342, 72.08529, 148.5511 -18343, 66.51478, 134.3474 -18344, 68.49908, 137.7086 -18345, 69.51313, 140.3623 -18346, 72.67841, 160.6777 -18347, 64.87969, 117.6116 -18348, 66.81518, 131.5526 -18349, 64.11176, 128.3093 -18350, 70.18729, 127.4651 -18351, 64.37983, 111.3805 -18352, 67.80292, 128.6796 -18353, 69.3405, 129.3896 -18354, 65.40457, 132.2629 -18355, 69.5795, 139.6768 -18356, 66.21928, 113.7115 -18357, 65.52875, 102.465 -18358, 66.81484, 136.6555 -18359, 67.08464, 126.9116 -18360, 66.42219, 133.5132 -18361, 64.69989, 107.3891 -18362, 67.27032, 124.3337 -18363, 66.53975, 113.5752 -18364, 68.78295, 132.6993 -18365, 68.09623, 129.5183 -18366, 65.65343, 108.2289 -18367, 67.29559, 129.9961 -18368, 70.47152, 141.2098 -18369, 68.77322, 139.9161 -18370, 67.3118, 134.2859 -18371, 71.43053, 132.9983 -18372, 69.27809, 137.9838 -18373, 68.6156, 122.2664 -18374, 70.38529, 144.5917 -18375, 68.90408, 113.6984 -18376, 69.956, 137.618 -18377, 69.08083, 126.6975 -18378, 68.58346, 127.6423 -18379, 69.55913, 135.0345 -18380, 67.87572, 131.5021 -18381, 68.04456, 125.3529 -18382, 69.61629, 130.6801 -18383, 67.38283, 126.7602 -18384, 70.06792, 133.7293 -18385, 65.72838, 126.3271 -18386, 68.66827, 120.6609 -18387, 69.23921, 144.166 -18388, 67.60529, 127.6045 -18389, 67.02823, 130.9427 -18390, 68.52986, 130.1434 -18391, 68.06148, 132.0809 -18392, 69.89291, 121.0481 -18393, 69.95674, 127.3249 -18394, 71.36783, 126.4851 -18395, 71.02923, 132.704 -18396, 67.45478, 124.9489 -18397, 65.64995, 111.3464 -18398, 70.54974, 118.2128 -18399, 64.73194, 127.1272 -18400, 68.39661, 126.2186 -18401, 66.75958, 141.6033 -18402, 70.36383, 143.4256 -18403, 68.07707, 121.5943 -18404, 70.95278, 154.5036 -18405, 65.56764, 123.9059 -18406, 69.43223, 106.3676 -18407, 67.31171, 126.8754 -18408, 70.92227, 133.0625 -18409, 68.71388, 121.1249 -18410, 66.50874, 132.745 -18411, 70.26147, 130.0088 -18412, 67.16654, 111.1425 -18413, 70.24561, 120.9162 -18414, 69.63362, 131.7987 -18415, 66.23707, 119.442 -18416, 69.83489, 125.9842 -18417, 68.70037, 130.8307 -18418, 69.63254, 139.143 -18419, 70.99486, 134.7143 -18420, 70.68998, 149.3115 -18421, 69.36635, 123.4528 -18422, 68.13314, 116.9677 -18423, 70.79422, 120.9634 -18424, 66.18385, 97.99029 -18425, 69.42133, 141.0527 -18426, 69.01491, 117.6252 -18427, 67.27059, 124.4138 -18428, 68.88229, 143.9361 -18429, 67.33816, 125.2068 -18430, 68.66516, 142.6448 -18431, 66.22914, 129.1967 -18432, 68.76597, 122.474 -18433, 69.53247, 115.2221 -18434, 71.49026, 142.5817 -18435, 66.50972, 133.654 -18436, 67.81402, 123.1049 -18437, 65.24439, 121.9487 -18438, 66.01804, 100.4529 -18439, 65.48158, 116.1882 -18440, 68.16192, 125.732 -18441, 65.02381, 134.4425 -18442, 66.88569, 130.0115 -18443, 67.39995, 96.39088 -18444, 65.66171, 109.2462 -18445, 67.95512, 127.9877 -18446, 63.62623, 110.8507 -18447, 69.18472, 108.1881 -18448, 66.551, 105.7101 -18449, 69.236, 110.3032 -18450, 69.26426, 117.98 -18451, 65.99389, 122.8317 -18452, 71.73307, 125.3396 -18453, 66.45155, 115.4263 -18454, 66.39266, 136.1279 -18455, 66.81631, 127.1059 -18456, 67.89039, 124.9759 -18457, 67.84615, 121.3787 -18458, 69.36484, 134.7724 -18459, 64.37297, 123.659 -18460, 72.89808, 138.8161 -18461, 66.99569, 116.2376 -18462, 71.71415, 134.3653 -18463, 70.09297, 135.7937 -18464, 68.57037, 144.2014 -18465, 69.00022, 135.0503 -18466, 69.20893, 120.8345 -18467, 69.46547, 133.6304 -18468, 70.79127, 130.4978 -18469, 68.78851, 118.4584 -18470, 67.9302, 135.4705 -18471, 66.4848, 126.2168 -18472, 65.27146, 101.3705 -18473, 65.50771, 98.70684 -18474, 67.43981, 115.5729 -18475, 69.16119, 151.2058 -18476, 67.83732, 115.3943 -18477, 66.49751, 131.5375 -18478, 68.69063, 116.851 -18479, 67.40924, 142.2469 -18480, 68.69726, 128.5186 -18481, 67.12827, 119.2494 -18482, 69.57438, 125.2213 -18483, 70.35553, 127.9276 -18484, 71.02956, 136.2053 -18485, 67.01715, 119.3356 -18486, 71.66632, 140.0392 -18487, 68.14304, 104.2278 -18488, 69.90342, 145.7605 -18489, 68.65728, 118.4992 -18490, 67.86381, 110.3406 -18491, 67.60299, 124.9038 -18492, 68.42162, 143.2337 -18493, 64.29405, 111.3888 -18494, 70.25668, 130.9311 -18495, 66.92782, 117.0246 -18496, 68.13117, 112.2702 -18497, 68.47671, 125.9732 -18498, 70.70443, 130.0618 -18499, 72.47871, 139.4575 -18500, 66.60089, 121.3741 -18501, 69.52894, 128.6671 -18502, 69.51429, 138.8626 -18503, 69.13138, 146.1917 -18504, 66.80915, 128.2992 -18505, 66.95452, 127.1524 -18506, 65.57553, 132.8521 -18507, 66.99722, 122.4956 -18508, 68.06291, 141.5624 -18509, 67.13541, 149.8053 -18510, 68.78744, 140.3871 -18511, 70.39841, 127.7709 -18512, 67.16952, 112.1317 -18513, 67.6426, 125.1871 -18514, 68.62432, 131.5505 -18515, 66.98255, 129.8261 -18516, 71.15912, 143.7729 -18517, 67.55843, 130.0446 -18518, 68.20677, 131.9831 -18519, 66.78195, 129.1513 -18520, 64.70211, 117.9549 -18521, 66.24742, 118.3215 -18522, 67.50724, 111.2721 -18523, 70.38629, 132.532 -18524, 66.2864, 138.8554 -18525, 66.4173, 110.4561 -18526, 67.91435, 120.5977 -18527, 66.42833, 130.4869 -18528, 70.51451, 144.908 -18529, 69.22832, 117.2825 -18530, 67.99826, 122.5487 -18531, 69.65771, 140.1853 -18532, 72.16883, 136.178 -18533, 69.49369, 118.7416 -18534, 64.38605, 113.8126 -18535, 64.55094, 114.6945 -18536, 68.23747, 112.8025 -18537, 68.02698, 117.2349 -18538, 66.43047, 95.71513 -18539, 69.86725, 148.5763 -18540, 66.96093, 111.8249 -18541, 68.82789, 125.2561 -18542, 66.90197, 129.6533 -18543, 67.30931, 126.2076 -18544, 67.52133, 123.9019 -18545, 66.81174, 137.8045 -18546, 65.82295, 120.199 -18547, 71.38764, 144.7086 -18548, 65.35643, 115.5945 -18549, 63.25179, 105.0179 -18550, 65.59107, 122.5182 -18551, 67.78908, 137.9392 -18552, 68.61336, 118.2248 -18553, 66.90249, 117.65 -18554, 70.02504, 139.5716 -18555, 66.22555, 127.3096 -18556, 67.74102, 142.398 -18557, 68.8943, 131.6782 -18558, 69.12125, 133.2563 -18559, 67.44687, 123.1274 -18560, 67.65991, 120.3186 -18561, 70.9585, 131.0829 -18562, 71.92717, 154.1861 -18563, 67.29513, 132.4132 -18564, 63.95244, 124.3648 -18565, 69.83187, 136.9095 -18566, 68.37524, 114.5381 -18567, 67.95803, 144.8281 -18568, 66.57707, 123.9629 -18569, 67.72062, 141.1541 -18570, 63.92725, 106.6814 -18571, 69.46167, 129.6969 -18572, 68.83466, 131.4672 -18573, 65.94714, 127.9311 -18574, 65.75023, 127.4329 -18575, 70.47518, 139.0174 -18576, 64.98932, 115.5069 -18577, 67.41353, 127.8081 -18578, 68.38407, 122.2271 -18579, 70.05637, 143.8614 -18580, 67.06958, 100.1749 -18581, 69.09877, 125.7953 -18582, 65.96505, 110.9834 -18583, 66.57586, 114.8681 -18584, 67.29729, 125.7866 -18585, 71.21423, 139.5315 -18586, 68.14138, 125.3772 -18587, 68.34001, 132.0128 -18588, 65.93383, 132.1972 -18589, 66.30774, 108.1026 -18590, 67.08573, 110.2558 -18591, 67.53056, 117.9915 -18592, 68.0261, 115.7176 -18593, 68.80557, 108.2525 -18594, 67.85261, 124.1566 -18595, 69.57975, 134.4556 -18596, 65.34904, 102.2823 -18597, 66.65974, 100.292 -18598, 70.67149, 141.6346 -18599, 70.13532, 136.6807 -18600, 67.42062, 114.6369 -18601, 69.4708, 114.7699 -18602, 67.6276, 135.9559 -18603, 67.18211, 131.4971 -18604, 64.45811, 125.6963 -18605, 68.95735, 122.046 -18606, 67.64248, 129.1718 -18607, 64.83179, 112.8573 -18608, 69.27039, 129.563 -18609, 66.83193, 117.5062 -18610, 72.23485, 151.5014 -18611, 65.01063, 95.82746 -18612, 68.34214, 126.7129 -18613, 66.62156, 130.1081 -18614, 67.08814, 133.7359 -18615, 69.05202, 128.0624 -18616, 68.23454, 133.8401 -18617, 68.37516, 135.1791 -18618, 67.03833, 138.5621 -18619, 70.80541, 132.8961 -18620, 66.73256, 141.7823 -18621, 65.72028, 108.2124 -18622, 66.41974, 111.5486 -18623, 67.57764, 134.0803 -18624, 69.56328, 129.1637 -18625, 67.62709, 121.1408 -18626, 65.16098, 122.078 -18627, 67.20458, 130.3198 -18628, 69.59194, 127.5957 -18629, 64.89401, 112.6321 -18630, 68.35388, 126.5067 -18631, 65.82881, 124.3733 -18632, 66.1868, 126.2654 -18633, 70.32643, 129.9479 -18634, 64.06977, 116.5794 -18635, 67.1713, 112.1838 -18636, 64.92458, 130.1598 -18637, 67.43431, 133.5765 -18638, 68.82895, 118.8026 -18639, 69.06337, 119.7953 -18640, 69.7271, 129.4766 -18641, 66.43212, 124.0251 -18642, 67.83192, 129.6701 -18643, 65.52728, 119.5522 -18644, 69.47555, 149.9544 -18645, 65.88912, 120.1125 -18646, 70.92408, 140.4445 -18647, 63.47126, 100.7746 -18648, 65.04097, 136.9673 -18649, 67.16204, 130.3048 -18650, 69.37409, 106.5867 -18651, 69.74416, 130.6283 -18652, 68.68581, 135.8803 -18653, 67.24642, 117.1742 -18654, 65.07326, 105.7219 -18655, 67.29306, 124.5546 -18656, 69.81604, 127.0576 -18657, 70.51899, 121.0529 -18658, 66.6253, 131.1694 -18659, 66.89401, 121.1997 -18660, 67.80165, 105.2037 -18661, 67.97818, 130.5677 -18662, 67.01481, 118.6079 -18663, 64.61004, 120.3031 -18664, 66.19053, 108.752 -18665, 68.07234, 123.3461 -18666, 67.97208, 111.8923 -18667, 64.15535, 128.6441 -18668, 69.75831, 120.5173 -18669, 64.32257, 104.5157 -18670, 69.32868, 128.1567 -18671, 71.4743, 152.8868 -18672, 64.42866, 107.8894 -18673, 68.0485, 139.8643 -18674, 68.41135, 124.3541 -18675, 69.90011, 133.7566 -18676, 68.02798, 134.4956 -18677, 71.979, 152.6473 -18678, 67.06678, 114.378 -18679, 67.47195, 143.9362 -18680, 65.75596, 123.9509 -18681, 69.11893, 117.6573 -18682, 69.61776, 128.4215 -18683, 64.42529, 93.4895 -18684, 68.86031, 124.3513 -18685, 71.35262, 149.7034 -18686, 65.26951, 109.6937 -18687, 67.07489, 116.9079 -18688, 67.17127, 131.3436 -18689, 65.73213, 94.24776 -18690, 68.68319, 133.4584 -18691, 69.1054, 105.3497 -18692, 68.04565, 120.0355 -18693, 69.40605, 128.4936 -18694, 71.15081, 154.0204 -18695, 67.57653, 124.0439 -18696, 66.19606, 113.86 -18697, 67.87278, 147.5407 -18698, 65.36336, 139.1989 -18699, 69.80543, 155.6269 -18700, 66.64909, 119.51 -18701, 68.84986, 128.6154 -18702, 69.83458, 135.5907 -18703, 65.32506, 119.5717 -18704, 64.73504, 130.5975 -18705, 63.47841, 100.2383 -18706, 69.27949, 144.9208 -18707, 68.85303, 130.5177 -18708, 66.69499, 106.0517 -18709, 64.29055, 124.4514 -18710, 66.35597, 128.4833 -18711, 69.72637, 122.6604 -18712, 66.76502, 121.0101 -18713, 68.47077, 136.9773 -18714, 71.66733, 157.2045 -18715, 70.31301, 134.2708 -18716, 67.27406, 125.2117 -18717, 69.53611, 153.2106 -18718, 72.7748, 152.2564 -18719, 69.75516, 131.9829 -18720, 69.31731, 113.889 -18721, 67.59655, 113.7564 -18722, 68.80522, 126.4774 -18723, 66.10887, 105.4664 -18724, 66.65045, 116.9397 -18725, 69.55086, 155.5237 -18726, 70.22757, 145.7376 -18727, 68.77158, 129.6204 -18728, 69.14943, 141.3192 -18729, 65.67652, 115.6393 -18730, 68.16672, 107.975 -18731, 67.61212, 123.8621 -18732, 70.24321, 125.2896 -18733, 69.19034, 141.7787 -18734, 68.81631, 131.713 -18735, 66.33019, 114.6571 -18736, 67.42121, 139.7828 -18737, 67.57223, 122.4153 -18738, 64.35103, 132.7265 -18739, 68.57516, 134.564 -18740, 67.05546, 117.4663 -18741, 68.09799, 124.307 -18742, 71.57853, 117.4121 -18743, 70.06625, 149.8354 -18744, 65.68016, 124.5133 -18745, 66.07335, 112.1744 -18746, 67.57426, 104.5494 -18747, 67.15108, 122.4038 -18748, 69.04551, 132.6149 -18749, 69.20252, 145.5692 -18750, 69.71079, 128.8631 -18751, 65.29563, 113.4145 -18752, 63.64036, 120.7483 -18753, 67.44444, 121.6074 -18754, 67.26357, 155.4769 -18755, 69.67211, 150.7134 -18756, 69.49824, 128.3236 -18757, 69.39577, 132.9491 -18758, 69.61772, 128.1457 -18759, 66.95073, 125.8741 -18760, 65.10061, 101.0707 -18761, 70.60484, 133.2398 -18762, 69.8036, 132.7216 -18763, 64.08148, 119.2167 -18764, 71.7491, 132.2534 -18765, 69.86149, 138.9225 -18766, 70.57948, 121.235 -18767, 69.3868, 107.0816 -18768, 73.40755, 129.8191 -18769, 67.11939, 121.4565 -18770, 66.20766, 120.7871 -18771, 68.55431, 121.6152 -18772, 66.19609, 112.1678 -18773, 69.9654, 142.061 -18774, 69.29187, 129.3865 -18775, 67.8538, 114.4474 -18776, 67.96589, 141.6129 -18777, 68.55128, 123.8771 -18778, 68.75419, 123.9171 -18779, 66.55678, 134.4236 -18780, 70.59726, 130.2703 -18781, 67.02605, 119.901 -18782, 67.41396, 116.1679 -18783, 69.19909, 117.1203 -18784, 70.80766, 144.2022 -18785, 67.60947, 110.2511 -18786, 69.04609, 124.0725 -18787, 66.42537, 134.0266 -18788, 67.11748, 107.6576 -18789, 66.28992, 104.2723 -18790, 70.27361, 139.0315 -18791, 67.69712, 129.6555 -18792, 66.85592, 143.7988 -18793, 67.61554, 140.8081 -18794, 70.14128, 137.2464 -18795, 71.05634, 116.9411 -18796, 63.38973, 128.9919 -18797, 71.79649, 132.8951 -18798, 64.87538, 108.4584 -18799, 66.64629, 124.3705 -18800, 66.66731, 122.7419 -18801, 67.36005, 132.1815 -18802, 67.78648, 141.9301 -18803, 67.65562, 122.0912 -18804, 67.99457, 120.7194 -18805, 67.20666, 131.022 -18806, 67.66445, 111.1134 -18807, 70.7897, 124.2387 -18808, 65.60275, 113.6259 -18809, 68.78444, 141.7825 -18810, 69.97289, 154.4117 -18811, 72.88631, 139.0747 -18812, 68.47303, 134.9762 -18813, 66.79608, 136.3316 -18814, 67.30746, 136.4466 -18815, 69.2924, 137.9162 -18816, 68.29249, 140.8264 -18817, 69.01065, 125.7044 -18818, 67.85167, 123.1633 -18819, 66.52291, 119.8779 -18820, 70.28503, 135.5849 -18821, 67.77965, 138.1189 -18822, 67.25897, 117.2646 -18823, 67.54277, 121.0405 -18824, 70.06108, 149.2393 -18825, 69.45781, 134.1714 -18826, 67.635, 116.5934 -18827, 68.97276, 118.5913 -18828, 66.28357, 129.9358 -18829, 69.75152, 104.6822 -18830, 69.41999, 127.9808 -18831, 71.06858, 152.1248 -18832, 68.33582, 139.4499 -18833, 67.11634, 132.4605 -18834, 67.48548, 107.1629 -18835, 65.88513, 120.3014 -18836, 65.8286, 102.3607 -18837, 69.15262, 129.2947 -18838, 67.73971, 132.0791 -18839, 68.31863, 133.1632 -18840, 65.14074, 117.8809 -18841, 66.25327, 120.4461 -18842, 67.28113, 113.3187 -18843, 71.26882, 129.5776 -18844, 67.2513, 122.3783 -18845, 66.43889, 121.4343 -18846, 66.84667, 107.9407 -18847, 69.75759, 140.9194 -18848, 69.0673, 133.6173 -18849, 69.65999, 130.2559 -18850, 68.93677, 125.3045 -18851, 67.15994, 108.8491 -18852, 69.39921, 130.7668 -18853, 68.34672, 135.8604 -18854, 70.51145, 135.0087 -18855, 69.48508, 123.7083 -18856, 66.907, 100.1432 -18857, 68.13199, 121.5932 -18858, 71.29192, 138.1298 -18859, 70.21849, 118.867 -18860, 68.53744, 148.6424 -18861, 68.98262, 118.1685 -18862, 67.2414, 133.1376 -18863, 68.87922, 123.4291 -18864, 70.11356, 135.6634 -18865, 69.76284, 132.2633 -18866, 69.32483, 117.5478 -18867, 68.85358, 112.7226 -18868, 67.51316, 123.8273 -18869, 67.67759, 132.8392 -18870, 68.30186, 140.4737 -18871, 67.81994, 126.1359 -18872, 65.17462, 110.8658 -18873, 67.21931, 131.6292 -18874, 65.70946, 127.0618 -18875, 66.62218, 135.2702 -18876, 70.03963, 148.768 -18877, 69.57779, 139.1555 -18878, 69.06121, 138.5468 -18879, 67.49563, 106.2282 -18880, 64.4891, 95.6685 -18881, 67.33308, 128.5636 -18882, 65.73318, 141.9346 -18883, 66.24559, 139.3832 -18884, 69.54639, 136.7369 -18885, 70.91309, 139.336 -18886, 67.45435, 123.3438 -18887, 66.8128, 131.442 -18888, 66.07655, 128.2468 -18889, 65.48464, 122.1126 -18890, 67.9735, 115.8705 -18891, 68.17934, 128.1162 -18892, 68.75379, 128.5221 -18893, 70.42998, 138.6082 -18894, 67.84405, 122.6771 -18895, 69.84154, 128.9522 -18896, 68.19966, 125.8263 -18897, 68.52427, 126.4684 -18898, 64.93004, 123.5438 -18899, 66.92609, 133.6922 -18900, 69.75065, 126.1361 -18901, 69.8655, 124.4893 -18902, 66.24436, 131.6072 -18903, 66.32189, 135.3703 -18904, 72.84287, 142.1741 -18905, 67.39726, 131.4489 -18906, 65.01832, 115.0837 -18907, 70.59535, 143.0093 -18908, 70.17018, 146.3284 -18909, 67.4578, 136.3524 -18910, 67.26702, 123.5548 -18911, 69.817, 132.1167 -18912, 66.24797, 130.474 -18913, 69.63203, 150.5264 -18914, 67.56315, 138.5557 -18915, 69.21375, 131.5255 -18916, 70.23974, 133.6155 -18917, 68.74692, 140.926 -18918, 70.20609, 126.7617 -18919, 68.20052, 131.4243 -18920, 69.01907, 143.3999 -18921, 67.66947, 128.9828 -18922, 64.07139, 138.8326 -18923, 66.59571, 125.3051 -18924, 64.2154, 109.5273 -18925, 67.32259, 111.9082 -18926, 68.2653, 124.3467 -18927, 69.10479, 142.1923 -18928, 67.26557, 109.9298 -18929, 67.56282, 117.22 -18930, 67.70635, 119.8849 -18931, 68.91809, 119.6725 -18932, 66.75571, 111.1221 -18933, 63.60255, 113.6185 -18934, 67.9549, 132.0406 -18935, 70.12267, 136.86 -18936, 68.52279, 122.0874 -18937, 68.27301, 126.9347 -18938, 68.0335, 132.211 -18939, 63.71782, 112.9014 -18940, 63.27713, 123.3834 -18941, 67.44392, 144.5663 -18942, 70.93268, 124.134 -18943, 64.95846, 124.1922 -18944, 67.82998, 134.4499 -18945, 65.67986, 117.3818 -18946, 67.85729, 106.2393 -18947, 68.64131, 126.2599 -18948, 67.15147, 144.6755 -18949, 68.15486, 128.6466 -18950, 66.76022, 120.5667 -18951, 66.15116, 124.4818 -18952, 70.03411, 135.579 -18953, 63.62972, 123.3694 -18954, 67.99637, 127.8984 -18955, 63.86584, 101.1195 -18956, 69.94454, 133.8068 -18957, 68.33791, 134.2027 -18958, 67.69831, 127.598 -18959, 67.13141, 115.7628 -18960, 68.76137, 114.535 -18961, 65.59809, 123.1285 -18962, 66.31687, 100.5823 -18963, 69.44079, 141.2083 -18964, 69.37313, 132.8006 -18965, 68.42964, 128.6768 -18966, 64.69932, 125.6053 -18967, 69.72645, 98.13857 -18968, 68.41304, 133.712 -18969, 65.35887, 116.9776 -18970, 67.12896, 130.9687 -18971, 66.92088, 127.3274 -18972, 69.29888, 138.2458 -18973, 69.09147, 131.6457 -18974, 67.94608, 128.8156 -18975, 69.76571, 147.9617 -18976, 68.06441, 124.6722 -18977, 67.49538, 148.7456 -18978, 67.11697, 113.3744 -18979, 65.08173, 111.555 -18980, 67.85374, 131.636 -18981, 66.25532, 112.1725 -18982, 70.04843, 139.3738 -18983, 71.20862, 134.4401 -18984, 69.74874, 137.7951 -18985, 71.44554, 136.6001 -18986, 69.94668, 141.4994 -18987, 66.87131, 119.1642 -18988, 69.21473, 128.4229 -18989, 66.74018, 127.9894 -18990, 69.6161, 138.6399 -18991, 70.88611, 107.6722 -18992, 65.62141, 132.3347 -18993, 65.47498, 108.9138 -18994, 66.58238, 121.9442 -18995, 67.40184, 120.102 -18996, 66.54299, 100.2631 -18997, 68.20307, 132.0264 -18998, 68.3355, 129.1787 -18999, 66.84503, 110.5189 -19000, 67.14814, 105.918 -19001, 68.95693, 130.3178 -19002, 67.45968, 135.2663 -19003, 69.73828, 139.1718 -19004, 69.82326, 128.9242 -19005, 69.66234, 118.628 -19006, 74.01942, 124.2312 -19007, 64.87799, 127.1184 -19008, 68.45052, 125.3085 -19009, 69.20931, 138.436 -19010, 68.7274, 128.841 -19011, 67.51895, 110.6973 -19012, 69.2305, 146.7603 -19013, 69.58018, 122.7056 -19014, 67.13026, 123.9607 -19015, 68.74446, 138.4759 -19016, 65.03535, 103.0616 -19017, 67.11675, 135.7574 -19018, 67.28088, 105.8265 -19019, 65.52005, 114.0189 -19020, 68.46225, 126.0038 -19021, 68.29754, 125.6328 -19022, 67.42591, 118.7455 -19023, 67.66937, 142.4494 -19024, 71.81863, 146.9166 -19025, 68.71802, 128.9584 -19026, 66.58401, 122.4293 -19027, 69.3764, 120.9916 -19028, 68.44002, 135.6954 -19029, 64.71921, 122.5415 -19030, 68.52755, 125.3404 -19031, 69.35345, 134.088 -19032, 69.20229, 117.4489 -19033, 67.00578, 120.8698 -19034, 66.89812, 112.9835 -19035, 68.35288, 135.8208 -19036, 67.33573, 118.4924 -19037, 69.82623, 138.6881 -19038, 67.099, 128.0533 -19039, 68.54065, 129.6286 -19040, 71.22829, 128.8353 -19041, 68.5347, 130.156 -19042, 69.8437, 134.747 -19043, 69.37798, 153.3498 -19044, 70.73471, 138.6245 -19045, 68.82335, 133.9317 -19046, 70.17434, 126.2272 -19047, 67.29725, 143.426 -19048, 70.27076, 133.5081 -19049, 67.913, 133.8764 -19050, 69.54137, 134.96 -19051, 68.06886, 124.1629 -19052, 70.52222, 123.9367 -19053, 70.17403, 135.6413 -19054, 68.48377, 132.7352 -19055, 66.5262, 100.3805 -19056, 70.2248, 141.5952 -19057, 64.80255, 110.9322 -19058, 65.99408, 114.0842 -19059, 70.21852, 135.3689 -19060, 64.63526, 127.2722 -19061, 69.50261, 143.5405 -19062, 67.94257, 137.276 -19063, 68.60763, 128.7483 -19064, 69.74468, 130.9538 -19065, 70.29051, 135.602 -19066, 70.17636, 150.8629 -19067, 68.32799, 127.8796 -19068, 67.90664, 123.3323 -19069, 66.83077, 123.6567 -19070, 70.27036, 133.2441 -19071, 67.19055, 127.5741 -19072, 67.9287, 111.3912 -19073, 69.57531, 130.2659 -19074, 64.91246, 141.2716 -19075, 67.24179, 107.9326 -19076, 66.73326, 128.6043 -19077, 66.10658, 124.0844 -19078, 66.89731, 124.2085 -19079, 69.97557, 116.4106 -19080, 70.44049, 139.3889 -19081, 70.11371, 150.7673 -19082, 65.99872, 134.8482 -19083, 69.95658, 144.1677 -19084, 69.63275, 130.0907 -19085, 65.33549, 121.2849 -19086, 64.6652, 121.7053 -19087, 67.6065, 133.8331 -19088, 65.23757, 127.3737 -19089, 68.93639, 127.6957 -19090, 66.24616, 130.9438 -19091, 67.52515, 118.5495 -19092, 68.98651, 114.9093 -19093, 68.84443, 115.5114 -19094, 66.88991, 109.6227 -19095, 67.11375, 128.4311 -19096, 71.00279, 133.4631 -19097, 69.99538, 132.4863 -19098, 67.6521, 132.338 -19099, 66.61694, 121.7505 -19100, 66.12389, 115.82 -19101, 68.05366, 142.0749 -19102, 67.73026, 142.6115 -19103, 66.93791, 120.2927 -19104, 70.17167, 130.967 -19105, 66.34749, 138.2904 -19106, 67.05596, 121.2986 -19107, 71.31904, 138.9588 -19108, 67.6327, 121.2978 -19109, 72.3593, 119.509 -19110, 67.54356, 142.1348 -19111, 70.48939, 129.9018 -19112, 68.43258, 128.8285 -19113, 64.68129, 108.7665 -19114, 68.47919, 134.2212 -19115, 66.57968, 124.5066 -19116, 67.2967, 129.1762 -19117, 67.20175, 121.1701 -19118, 67.02215, 131.1607 -19119, 66.46511, 119.6751 -19120, 71.67442, 139.3237 -19121, 68.5519, 143.9093 -19122, 68.65639, 120.3063 -19123, 66.83653, 103.4506 -19124, 70.04256, 132.8487 -19125, 65.59915, 134.7797 -19126, 67.10442, 135.3821 -19127, 67.77316, 111.1036 -19128, 68.32667, 115.483 -19129, 68.48645, 123.7207 -19130, 67.03686, 116.3024 -19131, 66.9232, 147.3265 -19132, 67.87561, 116.4401 -19133, 67.28113, 130.6107 -19134, 66.50314, 130.9561 -19135, 68.32476, 133.2194 -19136, 70.36394, 144.2233 -19137, 65.14779, 131.3557 -19138, 68.01902, 133.8224 -19139, 68.59083, 122.4374 -19140, 69.04421, 130.8801 -19141, 66.88065, 124.1543 -19142, 67.38799, 139.7979 -19143, 68.35328, 123.317 -19144, 68.15364, 119.5603 -19145, 69.75849, 142.1927 -19146, 65.42662, 119.948 -19147, 67.87629, 125.7474 -19148, 69.75726, 129.0609 -19149, 65.78923, 116.9633 -19150, 67.91269, 120.1518 -19151, 71.07096, 143.0026 -19152, 66.99756, 122.3414 -19153, 67.22561, 120.1531 -19154, 70.72869, 157.3854 -19155, 64.74015, 108.5634 -19156, 69.5375, 135.2244 -19157, 69.09657, 120.9011 -19158, 67.70209, 132.6755 -19159, 68.81677, 124.6396 -19160, 68.74628, 125.283 -19161, 66.57536, 121.695 -19162, 67.1991, 127.4141 -19163, 67.24854, 123.2395 -19164, 67.80506, 124.4279 -19165, 71.97488, 138.2571 -19166, 69.89842, 143.7624 -19167, 64.42791, 112.2905 -19168, 67.95844, 137.1145 -19169, 65.51837, 133.997 -19170, 65.50773, 98.01516 -19171, 64.52474, 113.2789 -19172, 69.0834, 130.9646 -19173, 72.04364, 141.8397 -19174, 65.09556, 108.8232 -19175, 66.52195, 126.2461 -19176, 65.7149, 125.2941 -19177, 67.7545, 133.7375 -19178, 65.18518, 110.504 -19179, 67.74465, 132.5059 -19180, 69.32145, 124.9234 -19181, 70.2348, 134.8146 -19182, 67.37761, 118.2797 -19183, 69.67373, 119.3944 -19184, 65.88791, 107.4635 -19185, 67.85004, 133.4487 -19186, 66.95893, 120.3034 -19187, 68.83336, 124.4998 -19188, 68.49758, 132.5462 -19189, 68.7395, 122.3993 -19190, 65.22748, 127.1413 -19191, 71.98146, 144.7643 -19192, 68.68094, 134.0401 -19193, 67.12628, 118.6035 -19194, 67.01346, 105.0695 -19195, 66.4542, 133.0311 -19196, 67.28432, 134.1482 -19197, 70.71591, 120.961 -19198, 67.63227, 114.1463 -19199, 61.827, 100.9391 -19200, 66.81603, 123.1338 -19201, 66.55006, 115.1238 -19202, 69.87374, 132.9684 -19203, 68.88997, 133.4733 -19204, 63.86542, 88.16618 -19205, 67.473, 134.805 -19206, 69.36134, 136.2666 -19207, 67.66722, 124.3972 -19208, 64.09691, 112.0101 -19209, 70.1153, 140.897 -19210, 68.21237, 120.1281 -19211, 68.31802, 140.4507 -19212, 66.31876, 138.4193 -19213, 65.14711, 117.866 -19214, 68.93837, 152.8404 -19215, 68.30602, 128.9768 -19216, 67.90522, 127.8382 -19217, 68.72415, 131.8936 -19218, 66.15404, 122.0434 -19219, 69.20458, 145.5385 -19220, 68.96299, 119.937 -19221, 67.96634, 121.1045 -19222, 68.39281, 123.3811 -19223, 67.87168, 112.354 -19224, 66.60248, 105.694 -19225, 66.40671, 136.6209 -19226, 71.24337, 119.4742 -19227, 69.85952, 130.22 -19228, 66.3421, 120.0586 -19229, 68.03653, 117.8885 -19230, 68.44799, 125.149 -19231, 66.18949, 100.7205 -19232, 65.35281, 125.1497 -19233, 68.07168, 112.3675 -19234, 69.37941, 117.3375 -19235, 65.60905, 127.3115 -19236, 65.33719, 113.8739 -19237, 67.08696, 113.6991 -19238, 68.91007, 124.7451 -19239, 67.21084, 130.7168 -19240, 70.46212, 127.2606 -19241, 68.49577, 122.6996 -19242, 69.3828, 124.0819 -19243, 66.9424, 99.05577 -19244, 65.05132, 108.3157 -19245, 64.57878, 107.7267 -19246, 70.02453, 106.5897 -19247, 68.64292, 135.4839 -19248, 69.3952, 123.3528 -19249, 64.498, 103.1257 -19250, 68.75748, 129.8778 -19251, 70.5535, 126.2709 -19252, 67.55247, 107.1793 -19253, 72.1117, 137.8252 -19254, 68.24515, 126.9731 -19255, 68.39009, 150.2682 -19256, 66.47685, 125.4514 -19257, 71.38525, 134.2473 -19258, 66.35336, 129.886 -19259, 66.6283, 131.9099 -19260, 68.15306, 131.1771 -19261, 69.33029, 133.502 -19262, 68.60209, 126.7976 -19263, 69.86885, 139.479 -19264, 67.12737, 119.6263 -19265, 69.69019, 122.2988 -19266, 67.82449, 130.1764 -19267, 66.96219, 122.223 -19268, 69.13713, 137.5221 -19269, 66.27125, 125.5452 -19270, 71.64224, 131.3708 -19271, 66.31753, 135.1288 -19272, 71.56528, 154.7509 -19273, 68.35767, 129.9305 -19274, 64.12801, 110.2428 -19275, 70.91483, 147.3623 -19276, 70.31161, 134.3731 -19277, 67.4626, 130.7984 -19278, 70.69375, 153.4537 -19279, 69.64298, 121.5795 -19280, 66.12271, 121.6818 -19281, 68.91139, 134.8144 -19282, 65.59233, 139.8298 -19283, 68.39697, 131.1997 -19284, 71.08749, 127.9353 -19285, 66.69531, 136.8321 -19286, 65.6135, 118.7268 -19287, 67.24761, 114.7405 -19288, 63.98366, 122.5457 -19289, 67.44473, 143.2907 -19290, 69.45442, 142.9678 -19291, 66.65284, 140.9184 -19292, 66.90633, 112.5183 -19293, 67.36174, 132.7616 -19294, 68.85531, 113.9658 -19295, 67.14749, 110.8704 -19296, 68.43251, 127.4271 -19297, 66.76784, 114.9009 -19298, 65.88806, 106.0497 -19299, 70.28666, 139.7015 -19300, 65.73875, 132.1646 -19301, 66.85533, 130.9737 -19302, 67.81668, 119.0647 -19303, 66.13711, 118.1549 -19304, 67.44496, 134.7946 -19305, 70.31339, 135.4947 -19306, 69.67229, 138.3051 -19307, 68.20788, 130.6784 -19308, 69.07866, 135.7628 -19309, 69.2147, 145.863 -19310, 69.03707, 134.3548 -19311, 67.4867, 130.712 -19312, 68.65038, 130.0623 -19313, 68.47651, 117.658 -19314, 66.81897, 125.9835 -19315, 68.62807, 128.3296 -19316, 66.49421, 100.1453 -19317, 69.32902, 117.3836 -19318, 66.80477, 109.5414 -19319, 67.45323, 117.2084 -19320, 66.82436, 118.9075 -19321, 68.44044, 132.5773 -19322, 68.17205, 135.7029 -19323, 65.54081, 120.4393 -19324, 69.87822, 134.6517 -19325, 70.74234, 154.9873 -19326, 69.72666, 142.6482 -19327, 69.32118, 130.9678 -19328, 67.35447, 106.6254 -19329, 71.54135, 121.2208 -19330, 65.76665, 122.1748 -19331, 70.40562, 142.0761 -19332, 66.07982, 104.0078 -19333, 66.23757, 122.995 -19334, 71.08337, 141.4795 -19335, 70.71918, 137.857 -19336, 66.42899, 126.2921 -19337, 69.82743, 119.7982 -19338, 67.2883, 132.4893 -19339, 67.54366, 134.223 -19340, 68.67346, 124.9942 -19341, 69.49291, 136.7762 -19342, 65.18689, 131.8571 -19343, 68.63243, 140.3363 -19344, 65.87434, 123.9921 -19345, 69.72791, 134.6838 -19346, 68.86516, 146.82 -19347, 70.78499, 125.1415 -19348, 71.49315, 139.9804 -19349, 68.72414, 133.7544 -19350, 68.80062, 115.5805 -19351, 70.09019, 125.3692 -19352, 70.95429, 142.1598 -19353, 68.65434, 127.7207 -19354, 65.07993, 103.2811 -19355, 67.8804, 122.2327 -19356, 68.69267, 128.8388 -19357, 66.39305, 109.666 -19358, 68.97105, 121.7352 -19359, 67.51326, 122.2808 -19360, 67.77261, 124.7638 -19361, 70.49746, 131.8233 -19362, 67.34338, 131.4508 -19363, 67.12994, 128.448 -19364, 67.28063, 101.792 -19365, 67.83278, 121.5138 -19366, 66.94744, 111.0788 -19367, 68.83627, 125.1171 -19368, 67.17864, 126.6733 -19369, 67.94058, 129.4379 -19370, 70.92914, 135.2796 -19371, 67.86923, 111.0826 -19372, 68.22707, 137.6088 -19373, 66.86146, 119.7778 -19374, 67.65723, 119.8673 -19375, 68.07379, 98.47485 -19376, 73.59392, 145.5716 -19377, 65.40895, 128.1772 -19378, 67.07607, 142.2548 -19379, 66.89452, 117.4998 -19380, 66.42382, 139.1155 -19381, 71.97374, 130.8526 -19382, 67.96789, 119.0567 -19383, 67.25519, 116.9952 -19384, 65.5737, 103.2335 -19385, 69.84429, 127.3391 -19386, 69.55115, 125.4512 -19387, 66.43305, 126.9671 -19388, 68.85178, 117.5224 -19389, 66.7244, 124.9279 -19390, 68.64607, 126.7906 -19391, 63.70431, 112.5109 -19392, 68.19205, 114.4343 -19393, 67.64495, 120.6396 -19394, 67.69633, 129.9412 -19395, 65.56974, 97.43419 -19396, 70.21936, 137.3578 -19397, 67.42904, 125.3863 -19398, 69.43355, 148.2019 -19399, 67.29278, 129.8179 -19400, 69.10066, 151.9111 -19401, 66.92661, 127.0226 -19402, 66.82918, 117.5375 -19403, 70.36044, 119.1202 -19404, 64.68454, 107.658 -19405, 68.78039, 117.1408 -19406, 66.3356, 132.6665 -19407, 71.05723, 148.1894 -19408, 65.98309, 107.8979 -19409, 66.96438, 142.4074 -19410, 62.66094, 102.5225 -19411, 66.7604, 135.5098 -19412, 69.31698, 133.9394 -19413, 66.1443, 137.1406 -19414, 65.13872, 141.9462 -19415, 68.44832, 152.6479 -19416, 69.10624, 132.7292 -19417, 68.52832, 132.1379 -19418, 68.08132, 123.9994 -19419, 68.86629, 136.1652 -19420, 66.3787, 127.2431 -19421, 67.76213, 150.8899 -19422, 65.99674, 147.9077 -19423, 65.81136, 126.1608 -19424, 67.40505, 131.4322 -19425, 66.83229, 123.1594 -19426, 68.63507, 124.9311 -19427, 62.97683, 96.29756 -19428, 71.24168, 132.8696 -19429, 67.47631, 130.3214 -19430, 68.62495, 130.4401 -19431, 68.42664, 122.2238 -19432, 65.46691, 120.4029 -19433, 68.25073, 125.9581 -19434, 67.4445, 119.4108 -19435, 67.1342, 126.346 -19436, 68.13306, 134.1461 -19437, 65.54906, 141.2074 -19438, 71.2458, 147.3819 -19439, 69.55894, 150.7427 -19440, 67.5101, 121.0396 -19441, 67.63941, 122.4085 -19442, 64.82273, 112.1695 -19443, 69.22052, 132.0336 -19444, 69.92432, 144.2027 -19445, 66.98924, 150.2762 -19446, 68.56214, 132.0495 -19447, 66.77559, 127.3659 -19448, 68.73691, 129.7617 -19449, 66.91012, 122.4668 -19450, 67.17807, 126.9057 -19451, 69.93152, 142.0998 -19452, 69.08901, 139.7904 -19453, 70.19955, 130.4641 -19454, 68.66485, 120.245 -19455, 67.02561, 131.4908 -19456, 64.99279, 125.5052 -19457, 69.62365, 146.1419 -19458, 68.24774, 136.1765 -19459, 66.21311, 113.8111 -19460, 65.83904, 132.5109 -19461, 63.6379, 123.548 -19462, 70.60624, 131.5629 -19463, 68.13407, 146.0477 -19464, 69.39546, 136.2664 -19465, 68.94134, 118.7888 -19466, 67.38692, 130.1127 -19467, 64.89061, 111.4397 -19468, 69.9709, 145.0628 -19469, 68.5498, 143.3518 -19470, 69.27563, 137.7491 -19471, 70.71056, 161.4436 -19472, 66.4149, 112.9923 -19473, 62.50167, 91.57279 -19474, 68.42081, 128.0469 -19475, 71.7836, 127.215 -19476, 66.29355, 121.9691 -19477, 66.41854, 126.7928 -19478, 67.77764, 145.8554 -19479, 67.57821, 100.8997 -19480, 67.89491, 114.1335 -19481, 68.64534, 116.5296 -19482, 69.35841, 134.6133 -19483, 68.6794, 140.9111 -19484, 69.63578, 107.6423 -19485, 69.1889, 141.0582 -19486, 68.96742, 145.8354 -19487, 68.61172, 139.6006 -19488, 67.52548, 120.6988 -19489, 66.15107, 105.9052 -19490, 68.68094, 135.0912 -19491, 66.80899, 103.3739 -19492, 68.9321, 127.5417 -19493, 67.76799, 139.2827 -19494, 66.53111, 125.715 -19495, 68.00506, 134.7767 -19496, 67.04487, 116.2412 -19497, 70.32864, 115.7384 -19498, 70.16821, 137.7695 -19499, 68.70678, 132.4533 -19500, 65.97472, 118.204 -19501, 69.80446, 106.9538 -19502, 66.69743, 126.3104 -19503, 67.64179, 116.9737 -19504, 66.80381, 131.6848 -19505, 72.77441, 143.1369 -19506, 69.28426, 140.4357 -19507, 66.80098, 114.5898 -19508, 69.41988, 144.3342 -19509, 66.9729, 131.5274 -19510, 68.03946, 143.2374 -19511, 69.00818, 123.1109 -19512, 69.2158, 148.4322 -19513, 69.63119, 130.0823 -19514, 70.09088, 145.9827 -19515, 66.70823, 124.4015 -19516, 66.09049, 121.7826 -19517, 67.75741, 126.407 -19518, 65.67362, 133.5732 -19519, 67.23266, 132.217 -19520, 69.99684, 144.2222 -19521, 67.57739, 132.6973 -19522, 65.54885, 120.8402 -19523, 69.4322, 121.8002 -19524, 66.99743, 133.9659 -19525, 67.06971, 130.6626 -19526, 64.51039, 109.5663 -19527, 71.90727, 129.9342 -19528, 66.98211, 119.479 -19529, 68.8868, 136.5011 -19530, 67.69444, 130.4561 -19531, 70.7424, 140.6748 -19532, 69.54554, 145.2172 -19533, 69.14821, 135.2195 -19534, 66.50703, 108.6434 -19535, 70.29309, 127.0521 -19536, 67.9355, 133.4828 -19537, 68.21364, 133.9939 -19538, 68.5144, 128.0894 -19539, 65.42839, 111.4876 -19540, 67.86424, 128.8723 -19541, 63.71868, 96.00666 -19542, 70.61081, 123.8097 -19543, 68.90318, 123.7874 -19544, 70.13475, 128.6143 -19545, 71.46053, 152.5282 -19546, 70.03539, 120.0435 -19547, 68.1379, 137.3988 -19548, 63.85703, 125.0479 -19549, 67.30965, 124.9212 -19550, 68.90615, 139.2283 -19551, 71.64804, 125.3181 -19552, 68.88111, 134.4917 -19553, 69.51423, 134.5854 -19554, 68.18086, 121.5733 -19555, 65.69997, 110.1231 -19556, 68.40463, 126.7027 -19557, 71.07505, 140.2282 -19558, 69.27603, 126.8514 -19559, 68.23265, 121.7072 -19560, 68.58259, 117.5669 -19561, 67.36844, 127.4011 -19562, 68.28441, 122.825 -19563, 69.07799, 130.0466 -19564, 67.21276, 126.4072 -19565, 64.98716, 104.79 -19566, 66.9179, 127.2505 -19567, 67.12818, 130.2357 -19568, 66.10688, 107.0003 -19569, 68.57638, 125.1795 -19570, 63.93057, 112.976 -19571, 69.76564, 139.6668 -19572, 68.41106, 151.9062 -19573, 66.36876, 122.2946 -19574, 70.47793, 129.8903 -19575, 65.4282, 121.4682 -19576, 66.03012, 135.4752 -19577, 68.0989, 130.5315 -19578, 68.65857, 146.6697 -19579, 72.01458, 129.7612 -19580, 68.50725, 123.4456 -19581, 69.22753, 125.3293 -19582, 70.19938, 140.7101 -19583, 67.04063, 124.0582 -19584, 66.98144, 121.0401 -19585, 68.71907, 120.0657 -19586, 69.72849, 144.2993 -19587, 69.09655, 123.9771 -19588, 69.7738, 114.8563 -19589, 67.75308, 130.351 -19590, 67.08285, 122.5291 -19591, 71.31542, 136.2466 -19592, 70.79423, 139.6064 -19593, 68.65088, 120.791 -19594, 70.36812, 127.8744 -19595, 68.9855, 117.1791 -19596, 67.35987, 120.6422 -19597, 70.4786, 146.8413 -19598, 69.13282, 134.3117 -19599, 69.53122, 125.177 -19600, 67.98617, 118.3697 -19601, 67.61576, 135.516 -19602, 69.78926, 147.2761 -19603, 66.81312, 130.7799 -19604, 68.68595, 134.9254 -19605, 68.05575, 116.4879 -19606, 67.0537, 115.5655 -19607, 63.55754, 127.6591 -19608, 68.02524, 131.1121 -19609, 71.55392, 137.254 -19610, 67.92525, 109.364 -19611, 68.30782, 137.5401 -19612, 69.51542, 152.0741 -19613, 67.29902, 120.4122 -19614, 68.95044, 125.9445 -19615, 66.93895, 113.2025 -19616, 68.33849, 111.7251 -19617, 66.99193, 117.526 -19618, 64.8404, 122.1497 -19619, 67.83682, 109.6392 -19620, 69.02802, 119.1542 -19621, 69.41642, 112.3215 -19622, 72.88867, 144.9415 -19623, 66.61994, 120.0592 -19624, 68.41957, 132.3673 -19625, 67.05694, 129.4949 -19626, 64.48443, 128.3386 -19627, 70.56403, 128.5002 -19628, 67.67847, 127.6393 -19629, 68.38258, 132.7334 -19630, 68.18807, 128.7375 -19631, 67.85684, 142.625 -19632, 71.13318, 131.6605 -19633, 65.43111, 121.7387 -19634, 69.13164, 113.8551 -19635, 68.69, 137.9111 -19636, 70.5797, 131.3443 -19637, 68.82262, 116.2803 -19638, 68.39201, 111.0592 -19639, 68.73134, 136.7499 -19640, 63.96774, 105.3882 -19641, 67.70227, 137.468 -19642, 65.38377, 110.8341 -19643, 66.86451, 132.972 -19644, 67.14211, 119.5467 -19645, 64.23474, 137.3847 -19646, 66.66678, 106.7181 -19647, 68.51504, 119.8735 -19648, 65.93028, 115.4797 -19649, 67.37382, 118.0422 -19650, 70.25357, 125.9146 -19651, 70.0309, 136.5168 -19652, 66.34973, 123.1756 -19653, 69.95254, 126.0075 -19654, 67.47996, 129.589 -19655, 68.7086, 121.1474 -19656, 67.00906, 134.2455 -19657, 67.72585, 106.4953 -19658, 71.29286, 141.0486 -19659, 68.51699, 122.1062 -19660, 66.62695, 126.9819 -19661, 67.94829, 126.8774 -19662, 66.89987, 102.8782 -19663, 67.42931, 133.088 -19664, 68.2914, 129.8764 -19665, 65.99699, 100.402 -19666, 70.19978, 129.7827 -19667, 67.57201, 131.9072 -19668, 63.39936, 106.8881 -19669, 69.54182, 136.1776 -19670, 66.19251, 128.8525 -19671, 65.75415, 111.5965 -19672, 67.57701, 130.5393 -19673, 65.91428, 121.6722 -19674, 67.43806, 132.718 -19675, 65.96746, 127.1559 -19676, 67.37888, 114.5618 -19677, 67.09216, 107.9098 -19678, 68.09938, 128.7844 -19679, 68.59888, 116.9653 -19680, 64.6891, 100.6123 -19681, 67.80635, 119.7824 -19682, 68.11201, 145.058 -19683, 69.98685, 114.9373 -19684, 66.68902, 114.2804 -19685, 69.52482, 135.5855 -19686, 65.66648, 129.1953 -19687, 69.21321, 122.4687 -19688, 70.13351, 140.4419 -19689, 62.90053, 128.8516 -19690, 69.52934, 106.595 -19691, 69.16515, 156.2241 -19692, 64.9069, 109.8341 -19693, 65.51072, 115.8503 -19694, 67.2087, 132.4732 -19695, 68.02634, 130.6405 -19696, 68.8114, 134.7657 -19697, 71.76238, 141.3491 -19698, 69.32284, 126.9131 -19699, 68.35675, 129.7181 -19700, 67.63756, 142.1868 -19701, 66.06231, 129.2107 -19702, 70.56364, 133.1328 -19703, 67.95176, 129.1952 -19704, 68.27422, 122.074 -19705, 68.18009, 132.0099 -19706, 71.27518, 138.9276 -19707, 65.61842, 106.7735 -19708, 69.22954, 123.4618 -19709, 66.69893, 121.0699 -19710, 66.66889, 111.8507 -19711, 70.84943, 138.1842 -19712, 70.96035, 142.1775 -19713, 68.33222, 115.3974 -19714, 70.48522, 145.0675 -19715, 66.60999, 111.5677 -19716, 69.34036, 139.2212 -19717, 69.4538, 118.4412 -19718, 68.68119, 115.3372 -19719, 66.77448, 116.9586 -19720, 67.07195, 117.4971 -19721, 68.99913, 125.8425 -19722, 66.34261, 137.5813 -19723, 70.08887, 133.1303 -19724, 69.33453, 122.7998 -19725, 65.27707, 113.6954 -19726, 70.02681, 143.2139 -19727, 68.94689, 132.8988 -19728, 66.65913, 122.1781 -19729, 66.79488, 109.0563 -19730, 67.90679, 111.664 -19731, 67.10869, 122.2714 -19732, 70.27947, 136.6405 -19733, 64.55087, 124.048 -19734, 71.15681, 141.6004 -19735, 68.5655, 123.6268 -19736, 65.48782, 127.7492 -19737, 67.74423, 125.1475 -19738, 66.83599, 136.7083 -19739, 67.95903, 115.2646 -19740, 66.72479, 110.7445 -19741, 70.98626, 143.4517 -19742, 66.92733, 126.7084 -19743, 67.5508, 129.1005 -19744, 65.12646, 113.8691 -19745, 69.52241, 112.2243 -19746, 67.01183, 119.4125 -19747, 68.04173, 118.3399 -19748, 68.01268, 132.8762 -19749, 62.53035, 118.2221 -19750, 70.50733, 125.0036 -19751, 62.05222, 120.4365 -19752, 65.71906, 133.3052 -19753, 67.78391, 127.5209 -19754, 67.33371, 125.0801 -19755, 67.91253, 132.1946 -19756, 67.30735, 132.4663 -19757, 69.08878, 123.8895 -19758, 65.76843, 114.4506 -19759, 71.64487, 135.5309 -19760, 66.25808, 113.4446 -19761, 64.36476, 116.8191 -19762, 68.6548, 142.4832 -19763, 68.95971, 144.5926 -19764, 70.20612, 138.5105 -19765, 70.57061, 147.3327 -19766, 69.44979, 123.2579 -19767, 70.52781, 133.765 -19768, 66.10873, 117.6254 -19769, 69.08755, 133.9543 -19770, 66.78469, 134.3005 -19771, 71.75464, 156.2319 -19772, 69.13771, 134.5773 -19773, 66.37631, 135.2777 -19774, 69.74647, 122.6657 -19775, 68.98829, 130.2543 -19776, 68.13136, 149.3854 -19777, 66.75278, 137.7469 -19778, 69.8914, 129.1302 -19779, 67.96866, 138.8191 -19780, 67.21946, 131.7829 -19781, 68.80103, 130.3331 -19782, 68.8093, 124.482 -19783, 68.65306, 127.3968 -19784, 67.87452, 130.8625 -19785, 68.70597, 122.373 -19786, 67.1432, 123.2538 -19787, 69.18709, 126.7873 -19788, 70.99521, 133.4597 -19789, 67.95264, 132.5607 -19790, 68.91363, 119.3353 -19791, 69.8465, 140.0139 -19792, 66.93742, 135.168 -19793, 70.11408, 124.4536 -19794, 67.60622, 114.6471 -19795, 66.39876, 122.4132 -19796, 69.57104, 133.4373 -19797, 70.09709, 123.9662 -19798, 67.25205, 129.9541 -19799, 71.43798, 155.874 -19800, 69.21724, 123.3436 -19801, 67.56125, 127.1117 -19802, 67.90888, 128.6947 -19803, 69.3568, 121.2005 -19804, 67.50241, 135.2608 -19805, 68.60586, 132.9409 -19806, 68.2366, 129.2684 -19807, 68.56842, 122.7771 -19808, 69.21836, 125.1624 -19809, 67.53883, 126.2731 -19810, 70.67327, 147.01 -19811, 64.2879, 112.1385 -19812, 68.46678, 124.5944 -19813, 66.73882, 131.1966 -19814, 70.55971, 129.4913 -19815, 67.84481, 137.5206 -19816, 67.01079, 114.7508 -19817, 65.99934, 133.4685 -19818, 68.58547, 146.8673 -19819, 68.81542, 125.8746 -19820, 67.93911, 120.2009 -19821, 68.93217, 118.3246 -19822, 69.23922, 143.7294 -19823, 67.79848, 115.8199 -19824, 68.65821, 125.5767 -19825, 71.49199, 161.906 -19826, 65.53287, 111.1526 -19827, 71.32373, 137.6824 -19828, 69.91417, 140.2723 -19829, 66.6972, 121.9527 -19830, 70.85386, 154.6366 -19831, 70.49105, 124.3354 -19832, 66.27006, 138.3716 -19833, 68.42409, 116.2243 -19834, 68.50301, 111.7963 -19835, 68.49217, 124.5766 -19836, 68.09457, 134.955 -19837, 66.31346, 136.7885 -19838, 68.98854, 129.8207 -19839, 67.05772, 126.8982 -19840, 73.192, 135.5029 -19841, 67.57593, 114.2885 -19842, 66.45283, 116.0452 -19843, 66.91061, 140.4039 -19844, 69.70103, 156.9321 -19845, 68.56368, 122.4036 -19846, 68.88525, 121.0687 -19847, 71.81982, 113.7783 -19848, 68.90203, 140.996 -19849, 67.3832, 121.1426 -19850, 66.76526, 113.7805 -19851, 67.09286, 109.4495 -19852, 66.22802, 120.2049 -19853, 68.25939, 123.1291 -19854, 69.60131, 135.8837 -19855, 64.74935, 89.95606 -19856, 69.34369, 126.1819 -19857, 69.9412, 139.8169 -19858, 68.28392, 115.4109 -19859, 69.34393, 140.1904 -19860, 66.55206, 125.5455 -19861, 66.75602, 118.3912 -19862, 66.35767, 111.1497 -19863, 66.73085, 119.8054 -19864, 65.89961, 122.6803 -19865, 67.4191, 143.7547 -19866, 68.24369, 131.5036 -19867, 66.7219, 103.6644 -19868, 70.74214, 130.2358 -19869, 67.20501, 126.207 -19870, 70.21431, 132.2408 -19871, 64.26213, 119.1471 -19872, 67.14367, 97.69037 -19873, 68.72736, 124.143 -19874, 68.55679, 102.8629 -19875, 66.29825, 126.6865 -19876, 68.72175, 133.4487 -19877, 69.87889, 139.1403 -19878, 65.49782, 133.31 -19879, 68.17108, 110.079 -19880, 66.70977, 119.4087 -19881, 65.56874, 125.6166 -19882, 69.49271, 132.6257 -19883, 69.51683, 141.4084 -19884, 66.7906, 143.8571 -19885, 70.21997, 121.1117 -19886, 70.24793, 129.4589 -19887, 67.80678, 141.4006 -19888, 70.97413, 128.1364 -19889, 69.75903, 155.8943 -19890, 69.15573, 139.2332 -19891, 68.27188, 140.4572 -19892, 67.52736, 120.8998 -19893, 68.11677, 131.2058 -19894, 65.96669, 134.5409 -19895, 68.82825, 125.8735 -19896, 67.64802, 128.2415 -19897, 66.56822, 129.7301 -19898, 67.92216, 108.3181 -19899, 70.16196, 114.9037 -19900, 66.40088, 126.6422 -19901, 67.98154, 135.6363 -19902, 64.99081, 116.9649 -19903, 71.5318, 142.0447 -19904, 63.2937, 119.9139 -19905, 67.63379, 150.7738 -19906, 68.18959, 140.7606 -19907, 68.28412, 124.5525 -19908, 66.9256, 136.9907 -19909, 68.68962, 116.8921 -19910, 69.26219, 124.0692 -19911, 69.7399, 137.5653 -19912, 69.78169, 124.2681 -19913, 68.89306, 118.0353 -19914, 65.92005, 129.992 -19915, 69.67499, 114.8889 -19916, 70.18064, 120.8334 -19917, 68.31191, 128.3317 -19918, 69.27083, 118.5856 -19919, 69.94767, 125.403 -19920, 63.84479, 111.7573 -19921, 69.72054, 125.5533 -19922, 69.6911, 117.1674 -19923, 68.25765, 132.8261 -19924, 66.49187, 125.1728 -19925, 66.2833, 121.768 -19926, 69.49919, 123.5578 -19927, 66.78395, 153.494 -19928, 69.53808, 152.2727 -19929, 68.26418, 137.6226 -19930, 70.75474, 138.2314 -19931, 66.34255, 135.4049 -19932, 70.56467, 121.9766 -19933, 67.88689, 142.8679 -19934, 67.40779, 110.0451 -19935, 70.88991, 141.9247 -19936, 68.45421, 122.053 -19937, 72.14473, 138.8158 -19938, 67.65045, 125.5035 -19939, 68.39678, 132.4804 -19940, 72.84591, 136.0289 -19941, 67.78233, 125.8292 -19942, 66.10641, 109.5937 -19943, 70.18598, 127.0676 -19944, 65.30154, 132.5025 -19945, 67.26947, 124.3345 -19946, 70.78309, 151.569 -19947, 65.97508, 132.6737 -19948, 70.00396, 110.0049 -19949, 67.10731, 97.30055 -19950, 67.53817, 121.8995 -19951, 68.50307, 128.1864 -19952, 65.67232, 122.9823 -19953, 66.09352, 127.0341 -19954, 68.5779, 138.1229 -19955, 68.91832, 125.8024 -19956, 66.54757, 118.9779 -19957, 66.30367, 106.1037 -19958, 67.09517, 139.1474 -19959, 67.48033, 133.0521 -19960, 68.6264, 126.1881 -19961, 67.43831, 121.3548 -19962, 66.67599, 122.0323 -19963, 64.52116, 121.3941 -19964, 69.79005, 143.503 -19965, 67.22173, 122.6996 -19966, 66.4933, 115.2943 -19967, 65.26414, 120.4538 -19968, 66.56788, 127.3631 -19969, 65.89813, 121.6184 -19970, 69.70797, 127.6245 -19971, 67.9721, 113.4425 -19972, 65.86077, 98.2528 -19973, 65.02716, 125.143 -19974, 68.48686, 143.42 -19975, 67.99138, 125.5912 -19976, 70.2878, 140.5505 -19977, 67.29468, 123.9692 -19978, 68.26174, 113.2655 -19979, 72.25625, 136.0435 -19980, 65.0702, 119.358 -19981, 71.08894, 135.0485 -19982, 68.25279, 133.0544 -19983, 66.785, 128.2321 -19984, 67.62555, 116.0675 -19985, 63.94658, 121.0392 -19986, 68.94779, 124.4974 -19987, 67.64244, 135.1131 -19988, 68.50966, 138.6605 -19989, 68.9745, 118.8841 -19990, 65.93037, 139.6622 -19991, 68.82556, 139.9606 -19992, 67.93484, 121.858 -19993, 66.37528, 118.5364 -19994, 67.22561, 137.6765 -19995, 68.95225, 127.904 -19996, 65.27908, 117.0884 -19997, 67.65755, 123.9277 -19998, 66.69201, 116.5055 -19999, 65.78102, 104.7543 -20000, 68.07045, 129.6798 -20001, 69, 135.3616 -20002, 69.10487, 126.5316 -20003, 72.13193, 161.0239 -20004, 70.90373, 145.6269 -20005, 67.86807, 122.0075 -20006, 67.43892, 131.4767 -20007, 69.43118, 133.454 -20008, 67.10359, 119.217 -20009, 70.18149, 147.2307 -20010, 67.38918, 139.7066 -20011, 70.45714, 139.7301 -20012, 68.63421, 115.9739 -20013, 65.62218, 136.3392 -20014, 67.06349, 123.1228 -20015, 67.30641, 98.95785 -20016, 65.46606, 106.7027 -20017, 66.53001, 121.2127 -20018, 67.3778, 114.9383 -20019, 69.32271, 115.2415 -20020, 66.7957, 128.4932 -20021, 65.32407, 114.5338 -20022, 66.55935, 121.121 -20023, 66.00505, 126.9795 -20024, 69.59739, 152.8693 -20025, 66.09583, 120.371 -20026, 69.36726, 118.9293 -20027, 72.00809, 144.9995 -20028, 66.88928, 110.721 -20029, 66.40722, 123.5727 -20030, 65.5385, 119.9828 -20031, 69.55926, 138.0278 -20032, 69.81405, 122.6454 -20033, 69.91993, 144.7208 -20034, 70.0879, 122.9645 -20035, 66.23051, 99.104 -20036, 67.61818, 141.2592 -20037, 68.58143, 125.3615 -20038, 68.15695, 126.2308 -20039, 67.512, 126.9866 -20040, 70.76552, 142.9296 -20041, 69.26234, 143.2527 -20042, 68.32817, 132.7759 -20043, 69.51257, 113.2856 -20044, 70.02706, 129.0559 -20045, 66.82483, 115.5469 -20046, 69.03162, 142.6512 -20047, 67.60125, 125.5298 -20048, 69.25415, 127.9935 -20049, 68.10161, 115.5621 -20050, 67.65047, 123.7327 -20051, 70.96123, 136.3127 -20052, 68.41146, 131.7994 -20053, 67.37012, 109.7773 -20054, 66.75139, 123.746 -20055, 67.13334, 121.373 -20056, 67.77926, 110.8057 -20057, 66.97201, 112.4094 -20058, 69.62951, 130.6875 -20059, 67.00845, 122.5204 -20060, 65.84782, 110.4676 -20061, 68.74982, 137.4344 -20062, 63.46219, 131.6278 -20063, 68.28298, 121.9196 -20064, 69.08611, 128.7246 -20065, 67.51138, 126.3069 -20066, 67.91991, 122.2827 -20067, 70.05535, 142.0311 -20068, 67.11741, 111.0611 -20069, 68.90664, 119.2548 -20070, 67.97481, 124.2253 -20071, 69.82979, 149.1322 -20072, 68.87782, 132.1464 -20073, 68.62969, 131.2994 -20074, 68.27637, 148.0963 -20075, 67.85369, 120.7737 -20076, 67.06235, 133.1606 -20077, 70.25943, 134.5582 -20078, 69.18391, 131.2755 -20079, 69.92206, 129.2742 -20080, 70.78492, 146.6769 -20081, 70.76045, 134.0286 -20082, 70.82053, 141.0171 -20083, 67.72934, 124.2418 -20084, 67.43639, 129.3814 -20085, 64.30312, 99.33579 -20086, 64.88648, 113.0468 -20087, 63.01244, 101.7311 -20088, 67.53395, 144.4339 -20089, 64.22026, 127.7241 -20090, 68.28249, 116.6627 -20091, 70.01457, 121.0093 -20092, 65.91743, 138.7636 -20093, 67.71394, 125.1313 -20094, 66.88127, 124.8587 -20095, 69.52967, 131.1727 -20096, 67.75601, 135.348 -20097, 69.49112, 154.7671 -20098, 70.22138, 141.0964 -20099, 67.96935, 127.4981 -20100, 68.11017, 128.5156 -20101, 67.92721, 127.1976 -20102, 66.16473, 127.8607 -20103, 69.99519, 143.375 -20104, 71.32358, 121.5075 -20105, 66.49822, 113.8888 -20106, 70.42992, 146.1728 -20107, 68.25325, 136.8917 -20108, 69.59837, 135.2368 -20109, 67.38237, 106.1247 -20110, 69.63917, 135.771 -20111, 67.21378, 112.4521 -20112, 65.34452, 111.6073 -20113, 68.45655, 148.5671 -20114, 68.20121, 137.8471 -20115, 68.83192, 132.2195 -20116, 67.9535, 149.5604 -20117, 67.56446, 148.7404 -20118, 71.56432, 139.6887 -20119, 68.20903, 117.3667 -20120, 67.06256, 135.0763 -20121, 68.82025, 126.8315 -20122, 71.58552, 134.0719 -20123, 70.89583, 103.5093 -20124, 69.64793, 131.3787 -20125, 66.45609, 123.3787 -20126, 69.56363, 141.0351 -20127, 69.23708, 133.7008 -20128, 65.9631, 121.1477 -20129, 68.3926, 118.928 -20130, 70.81159, 143.5666 -20131, 70.25802, 126.5308 -20132, 68.9312, 144.6893 -20133, 66.2989, 110.7134 -20134, 72.15283, 146.939 -20135, 68.20211, 109.0779 -20136, 69.1044, 140.5917 -20137, 67.85693, 134.4135 -20138, 67.39485, 118.5645 -20139, 69.13842, 118.8077 -20140, 66.3523, 150.3613 -20141, 71.42226, 121.618 -20142, 72.04165, 150.4715 -20143, 71.05928, 134.4648 -20144, 68.92866, 140.0844 -20145, 66.87497, 131.2338 -20146, 66.36569, 112.5793 -20147, 68.14086, 119.4189 -20148, 66.96983, 123.9473 -20149, 67.54357, 116.4046 -20150, 70.77658, 136.8102 -20151, 68.23718, 118.8886 -20152, 65.53862, 113.2725 -20153, 70.74761, 129.527 -20154, 67.55223, 124.4289 -20155, 70.84812, 150.4496 -20156, 64.4822, 134.1656 -20157, 67.42974, 122.2538 -20158, 68.7509, 119.9506 -20159, 67.83374, 134.5717 -20160, 63.90073, 116.8635 -20161, 70.12934, 134.9922 -20162, 66.37869, 100.5167 -20163, 68.9421, 118.0776 -20164, 70.85312, 134.9686 -20165, 64.83967, 117.0881 -20166, 67.11542, 128.8033 -20167, 68.74812, 134.275 -20168, 67.68923, 123.2354 -20169, 66.62519, 110.3765 -20170, 69.52379, 122.3171 -20171, 72.60803, 150.6268 -20172, 66.8619, 129.2457 -20173, 67.23587, 135.0301 -20174, 66.98288, 118.3685 -20175, 68.17128, 116.8477 -20176, 67.3241, 128.0642 -20177, 71.1372, 144.0187 -20178, 71.27594, 123.566 -20179, 68.39965, 117.7892 -20180, 68.89269, 144.723 -20181, 66.61543, 119.0238 -20182, 67.87792, 127.064 -20183, 68.88772, 131.1342 -20184, 65.0809, 118.9592 -20185, 65.78164, 128.0685 -20186, 69.07443, 130.0005 -20187, 67.69871, 127.2036 -20188, 68.07915, 151.4387 -20189, 71.94398, 122.1514 -20190, 70.07901, 134.6456 -20191, 65.88124, 128.5412 -20192, 67.77076, 134.9165 -20193, 72.69153, 141.1027 -20194, 69.03806, 126.5811 -20195, 65.71193, 136.4266 -20196, 66.44909, 127.9841 -20197, 68.37502, 145.2352 -20198, 68.09913, 108.097 -20199, 67.05164, 116.4216 -20200, 69.4034, 136.0425 -20201, 65.90879, 102.6161 -20202, 69.2529, 134.5586 -20203, 68.32439, 134.5378 -20204, 72.56715, 134.0677 -20205, 67.16006, 114.3012 -20206, 69.91344, 139.9068 -20207, 69.25259, 127.9861 -20208, 62.57176, 116.0712 -20209, 68.71931, 130.8788 -20210, 67.1141, 125.1614 -20211, 67.42686, 130.3149 -20212, 64.27619, 109.2928 -20213, 65.97118, 127.5532 -20214, 68.29677, 125.902 -20215, 67.4216, 137.4702 -20216, 68.18813, 119.2532 -20217, 66.22803, 117.0998 -20218, 67.71768, 135.8263 -20219, 69.80841, 122.2657 -20220, 67.72574, 110.1562 -20221, 69.0302, 122.5569 -20222, 66.72956, 96.99228 -20223, 66.46165, 97.49168 -20224, 64.83455, 114.8982 -20225, 65.70127, 112.5822 -20226, 68.87993, 122.4194 -20227, 69.96137, 131.7487 -20228, 65.23797, 114.4665 -20229, 67.01631, 114.5892 -20230, 70.19731, 135.6892 -20231, 66.3049, 114.8127 -20232, 64.12913, 105.3937 -20233, 68.18283, 133.3447 -20234, 67.67028, 135.6944 -20235, 68.87122, 136.7085 -20236, 65.48468, 114.5325 -20237, 67.5644, 116.5703 -20238, 70.59715, 135.872 -20239, 65.17748, 115.0443 -20240, 71.057, 126.792 -20241, 67.06806, 129.769 -20242, 68.01857, 122.0285 -20243, 67.53436, 103.3526 -20244, 68.2649, 140.749 -20245, 68.76502, 116.1648 -20246, 69.56514, 144.1114 -20247, 68.47043, 120.0682 -20248, 66.97456, 139.6484 -20249, 67.78233, 142.2416 -20250, 71.97165, 146.9815 -20251, 67.87652, 134.4355 -20252, 67.37003, 129.7164 -20253, 65.51123, 124.857 -20254, 66.43394, 121.4185 -20255, 68.50863, 118.6061 -20256, 65.99469, 123.818 -20257, 67.65941, 125.8492 -20258, 68.16997, 120.6193 -20259, 68.01948, 117.5951 -20260, 67.1946, 136.9306 -20261, 70.9964, 136.1914 -20262, 71.25473, 125.2789 -20263, 68.45711, 126.4985 -20264, 66.9254, 111.3531 -20265, 66.96343, 129.305 -20266, 68.34578, 141.5014 -20267, 68.59318, 137.2555 -20268, 65.71377, 129.8145 -20269, 70.41312, 124.1318 -20270, 70.03799, 133.8807 -20271, 67.56852, 109.6435 -20272, 71.64191, 134.8014 -20273, 65.92905, 116.835 -20274, 67.36226, 129.5522 -20275, 68.135, 132.4818 -20276, 65.26581, 114.4764 -20277, 68.22857, 97.6209 -20278, 70.04585, 129.0328 -20279, 68.69432, 127.4449 -20280, 70.301, 122.6477 -20281, 67.26421, 130.2722 -20282, 69.85285, 118.5515 -20283, 71.63372, 154.6085 -20284, 67.21655, 131.0217 -20285, 70.02939, 120.2406 -20286, 65.5687, 124.9128 -20287, 65.25174, 112.4398 -20288, 65.929, 114.4281 -20289, 67.14311, 115.7168 -20290, 66.49901, 125.9384 -20291, 70.93967, 125.3897 -20292, 66.52816, 136.1073 -20293, 69.84944, 138.9535 -20294, 65.96939, 139.4453 -20295, 68.40828, 117.9883 -20296, 67.60775, 124.6082 -20297, 70.31889, 126.6473 -20298, 67.2128, 132.4211 -20299, 66.21903, 140.6382 -20300, 70.83652, 142.9636 -20301, 64.87568, 112.136 -20302, 68.41633, 123.2201 -20303, 67.53817, 118.8005 -20304, 68.45528, 143.2071 -20305, 69.47681, 126.8002 -20306, 68.64769, 137.4465 -20307, 68.03199, 127.1805 -20308, 67.08338, 116.2853 -20309, 72.59665, 165.69 -20310, 68.18865, 127.3957 -20311, 66.73669, 130.1419 -20312, 68.34888, 134.0523 -20313, 65.38285, 109.3722 -20314, 70.40366, 123.1378 -20315, 68.0996, 134.1465 -20316, 68.73681, 139.88 -20317, 66.70503, 108.05 -20318, 66.91609, 127.735 -20319, 67.71304, 142.4622 -20320, 67.09454, 118.5795 -20321, 70.10587, 140.6171 -20322, 67.63564, 116.2521 -20323, 69.59775, 114.9682 -20324, 63.31969, 116.6964 -20325, 67.50844, 125.711 -20326, 64.22298, 124.6074 -20327, 68.1793, 126.4246 -20328, 68.55696, 127.6106 -20329, 70.15891, 137.2941 -20330, 68.97198, 129.8513 -20331, 69.88406, 138.7922 -20332, 67.74655, 126.6633 -20333, 68.93411, 142.0475 -20334, 67.07117, 127.948 -20335, 66.84105, 121.3274 -20336, 67.96232, 110.604 -20337, 66.81235, 134.9879 -20338, 67.54297, 137.6693 -20339, 67.11473, 140.6498 -20340, 67.44452, 130.1931 -20341, 67.47722, 121.0267 -20342, 69.4803, 132.4652 -20343, 64.54045, 112.5734 -20344, 67.05092, 156.3107 -20345, 67.46141, 117.9935 -20346, 71.26722, 131.7057 -20347, 68.42653, 124.6422 -20348, 66.41842, 111.3519 -20349, 65.59731, 128.8394 -20350, 70.03197, 137.246 -20351, 67.08672, 135.7636 -20352, 70.89503, 130.5971 -20353, 68.59771, 144.4514 -20354, 71.63118, 153.4787 -20355, 64.39522, 93.13802 -20356, 71.59533, 138.6555 -20357, 70.78851, 147.8683 -20358, 66.42758, 133.9707 -20359, 66.85979, 122.2792 -20360, 67.44995, 110.9694 -20361, 71.7881, 144.1019 -20362, 65.40377, 123.0822 -20363, 68.96921, 135.9892 -20364, 66.02056, 111.7557 -20365, 67.01558, 122.3018 -20366, 65.98015, 132.4379 -20367, 69.99987, 131.8418 -20368, 72.77006, 145.7023 -20369, 69.19937, 128.6703 -20370, 68.33541, 130.0217 -20371, 65.90805, 110.325 -20372, 70.4214, 118.5469 -20373, 64.65961, 126.5912 -20374, 68.52782, 145.3248 -20375, 65.43216, 132.3232 -20376, 68.28139, 120.4382 -20377, 67.97639, 122.7008 -20378, 67.1216, 123.1906 -20379, 68.9888, 130.4923 -20380, 72.31685, 130.7836 -20381, 71.48421, 116.0402 -20382, 68.65529, 131.0603 -20383, 67.11382, 128.0532 -20384, 68.62405, 137.5614 -20385, 67.85068, 138.8061 -20386, 69.48292, 129.8207 -20387, 70.50328, 143.8129 -20388, 64.33619, 113.6534 -20389, 68.29958, 134.9162 -20390, 67.4218, 122.3882 -20391, 67.9999, 118.3824 -20392, 65.63699, 92.23364 -20393, 67.0808, 107.6561 -20394, 68.91211, 118.4631 -20395, 63.59144, 128.4961 -20396, 68.81852, 150.2385 -20397, 65.96684, 139.8666 -20398, 68.01035, 122.6358 -20399, 67.85106, 131.9627 -20400, 71.04479, 120.0601 -20401, 67.7153, 127.9327 -20402, 67.84737, 124.7808 -20403, 67.83905, 112.9329 -20404, 69.74146, 147.4557 -20405, 67.97724, 117.8599 -20406, 71.045, 128.2833 -20407, 66.84059, 127.2334 -20408, 68.48567, 132.5849 -20409, 68.14535, 126.5979 -20410, 65.41341, 114.3991 -20411, 70.53582, 139.0164 -20412, 69.15586, 115.9193 -20413, 66.44247, 117.9539 -20414, 66.25178, 120.6345 -20415, 69.06165, 131.7664 -20416, 67.22249, 125.729 -20417, 66.43324, 129.5693 -20418, 69.95125, 130.8579 -20419, 68.44759, 124.3484 -20420, 70.12447, 138.252 -20421, 69.8081, 119.0553 -20422, 66.66426, 111.126 -20423, 69.07965, 124.0522 -20424, 65.75374, 127.0394 -20425, 67.98129, 133.4278 -20426, 67.91274, 136.145 -20427, 70.14506, 127.6122 -20428, 71.66221, 143.7339 -20429, 67.31462, 126.7645 -20430, 66.85489, 125.1375 -20431, 66.2073, 127.1956 -20432, 67.88187, 127.862 -20433, 69.45561, 122.6111 -20434, 69.68169, 129.665 -20435, 66.81274, 120.6235 -20436, 67.39812, 120.5257 -20437, 68.31286, 127.2671 -20438, 68.85197, 127.0149 -20439, 70.87098, 136.8526 -20440, 69.29233, 138.6572 -20441, 68.53017, 120.753 -20442, 66.20327, 126.655 -20443, 69.44148, 139.7399 -20444, 65.62755, 111.5919 -20445, 70.36911, 144.6446 -20446, 68.25511, 126.5607 -20447, 70.74579, 137.4108 -20448, 69.32344, 129.5371 -20449, 72.37667, 135.5361 -20450, 66.5913, 126.8375 -20451, 68.1977, 108.343 -20452, 67.73534, 132.0269 -20453, 65.65796, 135.0314 -20454, 68.33944, 126.1502 -20455, 67.98774, 126.5783 -20456, 68.54596, 132.9952 -20457, 68.38063, 122.207 -20458, 70.22056, 140.0847 -20459, 70.02586, 143.8558 -20460, 67.93956, 129.5068 -20461, 66.14777, 133.4099 -20462, 70.69657, 133.1874 -20463, 68.46672, 116.0821 -20464, 66.11868, 107.6714 -20465, 68.98878, 119.9309 -20466, 65.43912, 110.8787 -20467, 69.24822, 122.2722 -20468, 66.94932, 119.4308 -20469, 69.8028, 155.9683 -20470, 70.60933, 134.2835 -20471, 64.78426, 96.84397 -20472, 66.84264, 111.5454 -20473, 68.86833, 132.5776 -20474, 66.94365, 122.2372 -20475, 68.80139, 114.8579 -20476, 68.53662, 138.1599 -20477, 67.54398, 115.7562 -20478, 65.80968, 107.5309 -20479, 69.44019, 146.7688 -20480, 72.46054, 139.538 -20481, 67.09188, 119.9537 -20482, 71.46543, 129.3841 -20483, 66.06765, 112.5487 -20484, 70.96886, 145.5672 -20485, 68.75285, 140.7801 -20486, 65.12147, 132.9884 -20487, 69.29005, 137.3932 -20488, 69.67431, 128.0475 -20489, 67.58498, 125.6642 -20490, 63.26666, 109.048 -20491, 66.60384, 138.8578 -20492, 66.83134, 146.1347 -20493, 65.56701, 106.8728 -20494, 69.4336, 141.0332 -20495, 69.83412, 137.6869 -20496, 66.49534, 128.6661 -20497, 69.30191, 136.9649 -20498, 70.37349, 131.559 -20499, 68.28454, 107.5659 -20500, 67.51385, 122.6429 -20501, 67.58383, 117.5512 -20502, 68.68046, 132.6414 -20503, 68.31025, 107.7211 -20504, 66.68274, 117.1056 -20505, 69.13988, 109.5238 -20506, 66.6069, 107.7197 -20507, 67.71554, 117.3417 -20508, 72.5178, 142.1602 -20509, 70.39659, 133.5727 -20510, 65.92367, 110.1202 -20511, 68.63932, 141.4085 -20512, 66.27944, 102.8787 -20513, 68.09404, 107.0729 -20514, 62.77861, 110.8067 -20515, 66.02558, 123.5278 -20516, 69.11022, 122.7845 -20517, 67.14077, 126.2096 -20518, 69.85347, 107.1566 -20519, 63.72249, 101.0392 -20520, 64.66334, 123.9993 -20521, 69.61292, 122.092 -20522, 69.72279, 128.8986 -20523, 67.76397, 134.59 -20524, 66.74961, 140.8048 -20525, 66.67181, 114.3215 -20526, 67.69057, 123.4607 -20527, 68.39115, 124.7738 -20528, 67.31796, 136.8823 -20529, 68.69023, 125.262 -20530, 70.04462, 136.1957 -20531, 70.19356, 148.1844 -20532, 69.12451, 133.6843 -20533, 67.56314, 124.4263 -20534, 67.66596, 122.3849 -20535, 65.98485, 136.0888 -20536, 68.9407, 133.1295 -20537, 72.42506, 136.0244 -20538, 66.60508, 104.5026 -20539, 67.37321, 124.8638 -20540, 64.89494, 119.6409 -20541, 64.73669, 111.0633 -20542, 69.93102, 124.5422 -20543, 70.69335, 152.3325 -20544, 64.91169, 112.489 -20545, 69.69729, 122.2093 -20546, 63.56648, 112.8596 -20547, 67.29212, 142.3005 -20548, 68.3562, 117.0085 -20549, 68.12976, 123.0924 -20550, 68.62582, 115.3394 -20551, 66.8343, 105.8407 -20552, 69.98616, 122.6015 -20553, 67.44953, 130.5904 -20554, 69.67914, 123.558 -20555, 67.13387, 106.9958 -20556, 71.13815, 140.6296 -20557, 69.22959, 142.3174 -20558, 67.48473, 122.8173 -20559, 66.87485, 118.1003 -20560, 70.4596, 130.9488 -20561, 72.97347, 148.319 -20562, 67.16616, 108.2369 -20563, 67.36668, 123.3563 -20564, 68.30287, 117.9635 -20565, 68.08229, 131.5261 -20566, 68.94862, 141.0023 -20567, 68.47186, 145.789 -20568, 66.63803, 120.2544 -20569, 66.27658, 119.9535 -20570, 65.02396, 117.4626 -20571, 71.99598, 129.1844 -20572, 68.04691, 121.2735 -20573, 66.34711, 114.8943 -20574, 63.8229, 115.2754 -20575, 65.95638, 118.4989 -20576, 68.23334, 121.6989 -20577, 69.46635, 123.2046 -20578, 68.44607, 142.2776 -20579, 69.20365, 129.7053 -20580, 65.63555, 100.3371 -20581, 69.41412, 127.8275 -20582, 67.57457, 126.7177 -20583, 69.32559, 147.9203 -20584, 67.15965, 129.7563 -20585, 70.27834, 139.5538 -20586, 69.39938, 121.1538 -20587, 69.78475, 126.5296 -20588, 68.70946, 134.4551 -20589, 67.3998, 121.8096 -20590, 66.39262, 117.1371 -20591, 65.54597, 126.8852 -20592, 70.60879, 147.0102 -20593, 69.12623, 136.913 -20594, 66.72257, 122.5503 -20595, 67.40649, 117.2019 -20596, 66.18815, 121.8368 -20597, 68.62091, 121.9134 -20598, 70.1055, 153.0944 -20599, 65.48309, 132.6901 -20600, 68.80217, 128.7584 -20601, 67.71394, 121.7097 -20602, 66.57756, 128.9506 -20603, 67.61238, 130.8714 -20604, 67.23082, 128.4602 -20605, 67.08114, 117.4463 -20606, 66.53761, 122.2484 -20607, 67.41405, 126.4525 -20608, 67.06676, 131.406 -20609, 60.8062, 113.9145 -20610, 68.97175, 140.1085 -20611, 72.75763, 135.1411 -20612, 66.02447, 110.7159 -20613, 68.71706, 126.0198 -20614, 69.58585, 142.5501 -20615, 68.96375, 144.368 -20616, 68.26381, 140.3248 -20617, 68.53173, 133.5063 -20618, 63.69299, 127.3114 -20619, 67.32224, 144.3122 -20620, 69.87332, 136.2286 -20621, 65.77657, 121.8449 -20622, 67.84042, 129.3201 -20623, 68.02586, 127.7367 -20624, 67.22709, 124.1286 -20625, 70.33705, 113.399 -20626, 64.42061, 119.5736 -20627, 68.62922, 134.0348 -20628, 67.24371, 139.2993 -20629, 67.47488, 128.9315 -20630, 67.65179, 143.8519 -20631, 68.73059, 133.2077 -20632, 69.53168, 141.696 -20633, 67.76596, 142.9992 -20634, 68.6692, 145.841 -20635, 65.39292, 101.1876 -20636, 67.21484, 126.5562 -20637, 67.39797, 126.3908 -20638, 68.43286, 136.4691 -20639, 66.50645, 117.1767 -20640, 65.10771, 114.3875 -20641, 70.25153, 134.4531 -20642, 64.65223, 129.7684 -20643, 68.39572, 137.1362 -20644, 65.58641, 112.8512 -20645, 67.07497, 134.1362 -20646, 70.10614, 127.5408 -20647, 66.44143, 129.3753 -20648, 69.08524, 141.5455 -20649, 66.99606, 134.7843 -20650, 64.84392, 122.3505 -20651, 68.7585, 115.2365 -20652, 67.03556, 143.0013 -20653, 69.10705, 125.3759 -20654, 68.21709, 136.4534 -20655, 67.54954, 99.21333 -20656, 70.05957, 138.7376 -20657, 69.88409, 131.7587 -20658, 69.08434, 130.7379 -20659, 68.81191, 138.1377 -20660, 70.22844, 133.4575 -20661, 63.67519, 114.2171 -20662, 69.40968, 129.3261 -20663, 67.36179, 129.458 -20664, 69.9419, 131.7153 -20665, 68.44902, 122.7104 -20666, 67.76199, 127.8066 -20667, 70.12858, 131.6387 -20668, 67.97947, 133.6018 -20669, 69.83727, 126.7482 -20670, 66.62896, 124.7778 -20671, 69.77866, 128.9596 -20672, 69.32719, 120.7591 -20673, 68.81059, 110.0003 -20674, 68.33355, 123.5156 -20675, 65.4258, 116.0243 -20676, 68.90712, 136.1172 -20677, 65.90871, 100.8179 -20678, 69.61291, 143.8929 -20679, 65.97906, 131.2483 -20680, 64.15687, 121.6986 -20681, 68.2467, 129.0825 -20682, 67.07394, 113.9007 -20683, 66.08619, 123.5496 -20684, 68.43739, 107.3327 -20685, 69.43772, 117.4397 -20686, 68.81411, 140.5039 -20687, 66.23749, 130.4565 -20688, 67.36339, 135.7808 -20689, 68.93254, 121.3642 -20690, 67.86058, 111.123 -20691, 68.66247, 134.825 -20692, 68.4129, 130.3184 -20693, 63.90356, 101.9503 -20694, 69.56018, 118.6513 -20695, 69.81143, 117.3253 -20696, 68.55186, 142.7701 -20697, 66.14069, 111.9785 -20698, 68.79393, 127.0587 -20699, 62.67467, 108.2196 -20700, 68.24157, 126.3228 -20701, 70.13299, 125.7628 -20702, 68.83759, 128.3162 -20703, 69.20668, 126.8811 -20704, 63.01224, 123.2124 -20705, 68.7409, 140.5609 -20706, 66.94988, 121.3932 -20707, 70.13604, 132.7095 -20708, 68.11161, 121.1428 -20709, 66.58893, 118.2131 -20710, 69.98813, 128.2565 -20711, 66.52501, 120.0478 -20712, 65.2536, 142.5526 -20713, 68.66702, 140.5596 -20714, 71.383, 149.9544 -20715, 66.58224, 123.0901 -20716, 66.50775, 122.9845 -20717, 67.13954, 113.5739 -20718, 68.33274, 137.9826 -20719, 66.69458, 110.1558 -20720, 68.21523, 113.6369 -20721, 66.0808, 131.0879 -20722, 69.46013, 116.5407 -20723, 68.46971, 128.2455 -20724, 68.51333, 101.2957 -20725, 69.10467, 126.8762 -20726, 67.91609, 125.1615 -20727, 67.02882, 143.6948 -20728, 66.08997, 111.3684 -20729, 65.02401, 130.3431 -20730, 68.27428, 121.8474 -20731, 67.35413, 129.3491 -20732, 66.36083, 120.4201 -20733, 68.43123, 121.1875 -20734, 67.40001, 121.7106 -20735, 69.1343, 143.8484 -20736, 67.3171, 139.03 -20737, 73.1971, 157.1585 -20738, 68.39262, 110.6509 -20739, 66.29361, 129.1393 -20740, 69.09153, 123.9906 -20741, 68.08869, 121.8243 -20742, 69.84933, 128.1401 -20743, 67.6024, 133.6571 -20744, 69.71303, 149.4977 -20745, 66.84285, 117.0056 -20746, 66.65337, 112.7847 -20747, 68.88409, 124.0698 -20748, 70.70338, 119.2585 -20749, 66.20185, 112.3781 -20750, 66.31546, 119.0874 -20751, 67.41672, 113.6532 -20752, 69.90956, 140.9595 -20753, 67.68745, 109.4462 -20754, 66.35603, 124.8582 -20755, 64.29036, 129.8863 -20756, 69.06878, 146.3358 -20757, 66.89343, 136.7567 -20758, 66.4584, 98.04174 -20759, 68.8269, 130.6512 -20760, 66.65183, 134.0198 -20761, 63.84789, 128.9473 -20762, 65.79543, 119.418 -20763, 66.25942, 94.20537 -20764, 68.35371, 133.6204 -20765, 70.8435, 120.1922 -20766, 66.63549, 116.47 -20767, 69.36633, 142.61 -20768, 67.36309, 112.8032 -20769, 69.12732, 120.6275 -20770, 65.03504, 115.4154 -20771, 69.06645, 119.3467 -20772, 67.35099, 126.3068 -20773, 66.63538, 125.8876 -20774, 66.49659, 127.904 -20775, 69.098, 124.0368 -20776, 68.42363, 149.2454 -20777, 68.12064, 139.9387 -20778, 69.58767, 125.8239 -20779, 66.34056, 125.5225 -20780, 68.89947, 153.7886 -20781, 67.47147, 142.1622 -20782, 68.33028, 135.5338 -20783, 65.90128, 135.2264 -20784, 68.73695, 127.4165 -20785, 67.98409, 122.7703 -20786, 65.63064, 109.6107 -20787, 68.03278, 148.5683 -20788, 68.65828, 124.3302 -20789, 68.63764, 128.7478 -20790, 67.32521, 105.1839 -20791, 64.78784, 126.1355 -20792, 67.67246, 130.4082 -20793, 68.72131, 139.5527 -20794, 67.35886, 107.6427 -20795, 68.01738, 123.0304 -20796, 67.93165, 128.936 -20797, 66.67783, 123.5636 -20798, 68.67803, 136.5982 -20799, 70.36756, 134.6182 -20800, 67.51615, 132.9171 -20801, 66.75303, 132.5747 -20802, 69.96302, 127.5174 -20803, 66.93841, 115.9348 -20804, 68.11271, 130.5024 -20805, 63.94913, 114.6628 -20806, 68.91814, 147.3669 -20807, 67.2232, 114.4928 -20808, 69.55046, 133.7412 -20809, 68.68863, 129.8662 -20810, 70.7747, 138.641 -20811, 69.07808, 148.7933 -20812, 68.33838, 141.2387 -20813, 65.5871, 126.7083 -20814, 69.2935, 139.4127 -20815, 68.89933, 125.6523 -20816, 65.81485, 99.77933 -20817, 67.20659, 125.993 -20818, 66.51348, 127.1042 -20819, 67.55072, 134.551 -20820, 68.23821, 118.6372 -20821, 66.4512, 110.1362 -20822, 68.54449, 141.4482 -20823, 68.6177, 122.9561 -20824, 64.08191, 102.7885 -20825, 65.56492, 123.1351 -20826, 67.21104, 115.6723 -20827, 66.10932, 126.3925 -20828, 68.9513, 143.6607 -20829, 67.49786, 131.6653 -20830, 67.93624, 139.3751 -20831, 65.95214, 130.4147 -20832, 68.68249, 151.5916 -20833, 69.18583, 124.8504 -20834, 70.94061, 142.0348 -20835, 69.47461, 138.1862 -20836, 67.12497, 113.1001 -20837, 68.57401, 125.5023 -20838, 65.39763, 132.4789 -20839, 68.35258, 137.1238 -20840, 67.56785, 136.4769 -20841, 69.52703, 123.4405 -20842, 67.54305, 105.1903 -20843, 63.49236, 114.9085 -20844, 68.98626, 126.71 -20845, 67.55391, 121.5587 -20846, 64.6396, 115.1491 -20847, 69.82904, 136.2695 -20848, 67.85076, 113.2082 -20849, 67.23771, 125.3433 -20850, 69.38105, 139.5524 -20851, 65.41584, 121.8604 -20852, 66.96076, 119.1984 -20853, 65.26585, 117.7246 -20854, 69.31322, 119.5252 -20855, 67.70408, 122.2612 -20856, 68.08721, 129.7701 -20857, 68.26197, 125.9953 -20858, 67.36362, 121.8119 -20859, 68.73217, 131.316 -20860, 69.14267, 111.1968 -20861, 68.56673, 136.4706 -20862, 68.1929, 120.5822 -20863, 69.5696, 121.1881 -20864, 70.8464, 137.1416 -20865, 67.82872, 127.2809 -20866, 67.03478, 108.5558 -20867, 67.81671, 129.7571 -20868, 70.03848, 138.9428 -20869, 66.9821, 127.2445 -20870, 65.79107, 129.8116 -20871, 70.02914, 142.6562 -20872, 69.58224, 132.0934 -20873, 66.87147, 115.1241 -20874, 66.91792, 127.8387 -20875, 67.645, 121.3585 -20876, 68.65355, 119.0566 -20877, 66.91671, 130.2133 -20878, 70.15303, 141.003 -20879, 73.57982, 148.162 -20880, 67.98141, 124.7923 -20881, 71.49609, 145.3407 -20882, 69.85855, 131.7066 -20883, 68.11629, 109.1855 -20884, 70.19549, 136.493 -20885, 68.90094, 103.5978 -20886, 70.63071, 129.0681 -20887, 67.51818, 126.5297 -20888, 66.18712, 136.2942 -20889, 69.09528, 134.2318 -20890, 65.42299, 105.5537 -20891, 65.48038, 115.372 -20892, 66.9465, 113.8431 -20893, 68.70316, 125.9352 -20894, 66.07277, 123.7771 -20895, 69.44961, 110.8748 -20896, 68.81836, 104.8678 -20897, 69.50743, 105.3865 -20898, 67.82486, 118.2755 -20899, 67.69081, 143.7724 -20900, 68.29836, 129.3948 -20901, 68.67553, 120.7367 -20902, 65.8428, 122.3581 -20903, 68.03516, 124.0374 -20904, 65.75933, 145.1502 -20905, 70.38122, 133.3322 -20906, 67.40825, 132.4084 -20907, 69.96042, 126.2582 -20908, 68.28036, 130.5773 -20909, 68.78403, 111.5448 -20910, 67.91698, 128.8497 -20911, 69.37666, 137.7729 -20912, 66.74216, 117.4347 -20913, 68.1985, 135.4972 -20914, 63.58869, 125.2844 -20915, 73.25534, 129.3863 -20916, 67.70295, 110.3234 -20917, 65.97536, 105.0947 -20918, 69.81239, 134.9831 -20919, 68.86872, 123.426 -20920, 72.74547, 148.5568 -20921, 68.30771, 129.105 -20922, 66.76693, 124.0618 -20923, 67.44946, 123.4784 -20924, 69.7046, 141.6202 -20925, 68.97441, 103.9181 -20926, 67.75058, 135.2187 -20927, 66.8731, 124.1057 -20928, 70.45912, 121.7787 -20929, 70.71713, 138.8325 -20930, 65.65535, 118.4649 -20931, 71.45237, 136.8498 -20932, 69.00661, 131.4449 -20933, 64.07452, 139.9216 -20934, 69.47642, 135.5616 -20935, 69.52284, 129.724 -20936, 64.89822, 131.9576 -20937, 70.70905, 134.3203 -20938, 70.19814, 125.1643 -20939, 67.76234, 130.1309 -20940, 67.21866, 135.3954 -20941, 67.54948, 111.8586 -20942, 68.13277, 139.2003 -20943, 68.84252, 126.0857 -20944, 68.97585, 137.8195 -20945, 67.17762, 99.13368 -20946, 67.76576, 131.2841 -20947, 69.05508, 132.9015 -20948, 68.30757, 135.9473 -20949, 67.32683, 123.4861 -20950, 67.29407, 117.8979 -20951, 66.63257, 126.1084 -20952, 66.94794, 107.183 -20953, 68.13987, 133.2584 -20954, 65.21117, 101.1071 -20955, 68.03769, 119.4935 -20956, 67.26932, 128.9103 -20957, 69.77352, 141.6894 -20958, 69.23863, 125.2157 -20959, 68.7891, 114.34 -20960, 67.26289, 117.1026 -20961, 69.29545, 132.6378 -20962, 67.5793, 112.7331 -20963, 67.21365, 108.0763 -20964, 69.62993, 140.0795 -20965, 67.00026, 125.4628 -20966, 67.93443, 122.1726 -20967, 73.47464, 134.996 -20968, 71.5009, 148.2703 -20969, 67.5436, 124.5961 -20970, 71.49304, 128.6835 -20971, 68.1677, 130.5834 -20972, 68.65009, 127.7241 -20973, 66.04619, 112.1905 -20974, 67.31327, 122.8993 -20975, 67.86012, 116.6222 -20976, 69.42007, 128.9863 -20977, 68.38556, 133.6644 -20978, 69.91327, 118.2455 -20979, 68.8823, 138.4001 -20980, 64.05944, 115.5782 -20981, 69.73048, 126.5238 -20982, 68.632, 135.6997 -20983, 69.40445, 137.5303 -20984, 66.00545, 132.9691 -20985, 67.12871, 128.9781 -20986, 67.54768, 115.0198 -20987, 69.18741, 122.9827 -20988, 65.72702, 115.7926 -20989, 67.85686, 110.7137 -20990, 67.32954, 113.4872 -20991, 67.30146, 143.8451 -20992, 66.33349, 107.1243 -20993, 68.22832, 133.2817 -20994, 64.45511, 117.3622 -20995, 67.87195, 149.4365 -20996, 69.92163, 125.4082 -20997, 62.8062, 107.3401 -20998, 69.3377, 151.2393 -20999, 66.60043, 130.1472 -21000, 70.53369, 140.2407 -21001, 68.84104, 122.8631 -21002, 67.22118, 124.7784 -21003, 69.1338, 131.5248 -21004, 70.23848, 138.5036 -21005, 69.10331, 125.7452 -21006, 70.4064, 138.0741 -21007, 66.66478, 139.0241 -21008, 70.33089, 164.4539 -21009, 70.78331, 141.8412 -21010, 66.83722, 121.0509 -21011, 65.8839, 112.9256 -21012, 67.51176, 137.9948 -21013, 71.21095, 156.0802 -21014, 67.16471, 135.2937 -21015, 67.49059, 132.7359 -21016, 69.13583, 118.2087 -21017, 66.44838, 121.7145 -21018, 67.03679, 143.9542 -21019, 66.66855, 116.5589 -21020, 69.36123, 127.5953 -21021, 68.92478, 137.2977 -21022, 69.70613, 144.1729 -21023, 66.70216, 120.8874 -21024, 69.3032, 132.8515 -21025, 68.68207, 121.2207 -21026, 67.12449, 126.3432 -21027, 66.92738, 116.3508 -21028, 71.36236, 142.3522 -21029, 66.8559, 106.8363 -21030, 69.46283, 118.5577 -21031, 66.4827, 114.5936 -21032, 72.45414, 135.0235 -21033, 68.10614, 120.628 -21034, 65.75378, 124.3824 -21035, 67.16782, 130.0399 -21036, 68.57483, 129.4804 -21037, 67.275, 122.2215 -21038, 66.23984, 97.1995 -21039, 72.39041, 155.1414 -21040, 68.82192, 129.0373 -21041, 67.67589, 126.7606 -21042, 66.09883, 118.7709 -21043, 67.79875, 130.1887 -21044, 68.76062, 115.7905 -21045, 68.86156, 136.3079 -21046, 71.20733, 155.2221 -21047, 65.24249, 114.9215 -21048, 67.33131, 112.8186 -21049, 67.52803, 113.459 -21050, 67.1708, 120.6546 -21051, 66.8838, 138.4066 -21052, 67.26462, 117.0708 -21053, 70.94467, 130.2774 -21054, 71.15199, 133.2351 -21055, 69.35701, 156.0959 -21056, 66.91104, 125.0535 -21057, 68.07832, 122.8732 -21058, 65.74579, 110.9296 -21059, 70.64116, 140.3183 -21060, 66.02941, 112.9351 -21061, 68.24326, 128.8593 -21062, 66.30423, 126.4124 -21063, 68.49473, 134.9166 -21064, 67.3683, 121.4269 -21065, 70.00791, 135.6339 -21066, 70.18312, 125.7853 -21067, 66.40708, 117.1961 -21068, 67.79402, 122.4405 -21069, 68.33103, 142.9592 -21070, 67.91136, 134.3773 -21071, 68.75045, 116.0658 -21072, 68.82444, 113.8497 -21073, 70.64267, 152.2908 -21074, 65.18174, 111.8634 -21075, 68.51919, 129.3323 -21076, 67.53344, 124.0318 -21077, 68.04198, 125.4507 -21078, 65.82182, 113.6 -21079, 70.27834, 131.2909 -21080, 65.8653, 128.4877 -21081, 66.70285, 125.9423 -21082, 65.88836, 122.3566 -21083, 72.53781, 142.2356 -21084, 67.31225, 117.6954 -21085, 68.85556, 119.367 -21086, 65.30914, 125.201 -21087, 67.56741, 117.1659 -21088, 72.28651, 124.0883 -21089, 69.366, 126.9316 -21090, 71.66938, 158.0299 -21091, 66.91979, 114.0239 -21092, 67.89303, 145.9459 -21093, 66.50206, 138.815 -21094, 67.5214, 115.5644 -21095, 69.21652, 128.049 -21096, 71.08246, 135.7997 -21097, 65.7973, 113.1585 -21098, 68.3417, 106.9982 -21099, 64.74233, 113.5996 -21100, 68.41921, 112.8349 -21101, 68.91514, 124.1732 -21102, 65.84174, 85.98927 -21103, 68.87032, 131.6613 -21104, 64.44608, 103.521 -21105, 67.63533, 116.7036 -21106, 70.20804, 141.9526 -21107, 70.98603, 139.8524 -21108, 68.13106, 128.396 -21109, 66.16887, 127.3745 -21110, 67.05542, 124.551 -21111, 70.75677, 131.1854 -21112, 70.7158, 133.8729 -21113, 67.69017, 117.9684 -21114, 71.53849, 140.8829 -21115, 68.54535, 126.4914 -21116, 65.67176, 120.1838 -21117, 65.99226, 124.6178 -21118, 68.65845, 138.4224 -21119, 66.32469, 105.8594 -21120, 68.44591, 119.3537 -21121, 69.95113, 141.9147 -21122, 65.77165, 111.8653 -21123, 67.068, 120.3728 -21124, 64.69653, 131.7434 -21125, 69.04278, 126.7 -21126, 67.48211, 130.1113 -21127, 66.90722, 115.2313 -21128, 68.75846, 119.4879 -21129, 67.30096, 114.3547 -21130, 69.55268, 124.3859 -21131, 71.05661, 149.0296 -21132, 69.2149, 138.0464 -21133, 67.82442, 122.1716 -21134, 68.71809, 129.9713 -21135, 67.78082, 124.843 -21136, 64.25649, 96.69205 -21137, 68.77435, 145.0052 -21138, 66.37859, 131.3486 -21139, 69.17309, 126.2065 -21140, 70.34987, 133.2638 -21141, 66.73457, 124.768 -21142, 67.61739, 127.7756 -21143, 67.42499, 136.4474 -21144, 68.36893, 125.469 -21145, 70.41579, 140.6165 -21146, 68.06868, 120.743 -21147, 67.28263, 116.5436 -21148, 67.09562, 129.5261 -21149, 67.12164, 116.9111 -21150, 66.69727, 139.9522 -21151, 67.49634, 117.8126 -21152, 70.01384, 135.0441 -21153, 65.78477, 129.2745 -21154, 69.47803, 159.105 -21155, 66.13543, 122.234 -21156, 68.43099, 146.9206 -21157, 67.75061, 125.6399 -21158, 66.95323, 105.2662 -21159, 69.32421, 129.7352 -21160, 68.63523, 117.0937 -21161, 67.52914, 122.7438 -21162, 68.96422, 126.6954 -21163, 66.61586, 115.7427 -21164, 68.37756, 129.5414 -21165, 71.01311, 127.9603 -21166, 68.8398, 123.6722 -21167, 68.2039, 142.9882 -21168, 68.87387, 122.7388 -21169, 68.56397, 120.7988 -21170, 69.64694, 127.4074 -21171, 68.82478, 141.8906 -21172, 64.48848, 129.7648 -21173, 69.09307, 133.503 -21174, 68.432, 115.0608 -21175, 67.72728, 130.8804 -21176, 68.58961, 133.8262 -21177, 67.23444, 128.1166 -21178, 69.16746, 132.765 -21179, 67.57615, 126.0391 -21180, 65.096, 119.3788 -21181, 65.51027, 107.6904 -21182, 71.15893, 123.3434 -21183, 70.48329, 138.2703 -21184, 68.18618, 140.2804 -21185, 66.94975, 135.623 -21186, 67.48547, 114.2417 -21187, 65.02626, 105.0766 -21188, 68.66772, 128.1246 -21189, 68.76668, 120.2954 -21190, 70.72339, 144.1367 -21191, 68.16494, 142.4759 -21192, 65.74529, 129.1718 -21193, 67.60346, 135.049 -21194, 69.27402, 132.8954 -21195, 68.96879, 122.0169 -21196, 68.43776, 150.6044 -21197, 67.71247, 128.9561 -21198, 71.63304, 138.1379 -21199, 64.46515, 102.4585 -21200, 66.91695, 117.4932 -21201, 65.28324, 124.6847 -21202, 69.80506, 139.8376 -21203, 67.50948, 130.1897 -21204, 68.54457, 133.0212 -21205, 67.50779, 113.7693 -21206, 69.02801, 125.2331 -21207, 67.19638, 128.2747 -21208, 69.38252, 136.381 -21209, 67.07315, 137.2259 -21210, 65.53914, 120.1128 -21211, 69.12113, 136.8986 -21212, 68.12859, 123.5782 -21213, 66.18245, 118.4861 -21214, 68.75005, 125.2406 -21215, 69.66247, 133.9579 -21216, 67.87585, 119.188 -21217, 69.51193, 138.2564 -21218, 68.10429, 117.4216 -21219, 68.41818, 140.0468 -21220, 65.02588, 95.09752 -21221, 68.73364, 119.9769 -21222, 68.46417, 127.8286 -21223, 68.95687, 122.36 -21224, 67.64606, 129.6722 -21225, 67.98046, 111.7482 -21226, 67.52579, 127.943 -21227, 68.10182, 116.2066 -21228, 65.37706, 127.1152 -21229, 66.7445, 120.9335 -21230, 66.27875, 111.7677 -21231, 69.7328, 131.9363 -21232, 67.30255, 119.1448 -21233, 69.02553, 129.4502 -21234, 70.08744, 138.438 -21235, 67.5875, 123.9873 -21236, 68.44123, 135.9688 -21237, 67.97198, 123.3787 -21238, 66.10388, 122.6718 -21239, 66.0128, 116.2522 -21240, 67.45078, 139.0873 -21241, 69.63918, 137.3555 -21242, 70.26322, 128.9824 -21243, 71.18245, 134.1429 -21244, 67.48152, 113.786 -21245, 67.30461, 121.5465 -21246, 68.27851, 128.6151 -21247, 67.93965, 129.5938 -21248, 66.34597, 117.4876 -21249, 66.17643, 134.2907 -21250, 64.65454, 116.1862 -21251, 67.54127, 125.4026 -21252, 68.59123, 122.8707 -21253, 63.19682, 109.5683 -21254, 67.87138, 121.2874 -21255, 69.10296, 143.9699 -21256, 69.35396, 136.2498 -21257, 66.69452, 117.4852 -21258, 68.01196, 111.6817 -21259, 65.03661, 104.7919 -21260, 67.43888, 124.3636 -21261, 66.47035, 128.7613 -21262, 70.20849, 144.0743 -21263, 67.13509, 125.9127 -21264, 64.94556, 129.3952 -21265, 68.59608, 118.1328 -21266, 66.23435, 136.462 -21267, 69.86976, 124.5872 -21268, 67.15711, 121.2002 -21269, 66.2651, 124.1129 -21270, 68.35631, 129.7324 -21271, 71.29633, 135.8907 -21272, 70.11197, 139.2857 -21273, 66.10542, 133.4835 -21274, 69.08371, 133.6883 -21275, 67.40367, 128.5047 -21276, 66.85289, 131.739 -21277, 69.20063, 132.4558 -21278, 70.60672, 124.7653 -21279, 68.53661, 121.9863 -21280, 68.93974, 131.5648 -21281, 67.96975, 127.7058 -21282, 65.23482, 104.5786 -21283, 71.6941, 137.807 -21284, 69.24201, 113.2636 -21285, 67.94013, 140.4541 -21286, 69.61292, 132.7728 -21287, 67.27993, 122.6409 -21288, 66.33297, 135.2301 -21289, 66.12205, 109.5588 -21290, 72.21224, 144.4488 -21291, 68.64486, 134.8144 -21292, 66.69156, 126.1919 -21293, 65.73194, 116.6978 -21294, 68.38632, 138.149 -21295, 71.57464, 153.8989 -21296, 71.70436, 130.4351 -21297, 71.22448, 130.8944 -21298, 69.04649, 116.1818 -21299, 69.24498, 131.2336 -21300, 69.31455, 149.1439 -21301, 67.37766, 116.1292 -21302, 65.85673, 120.8833 -21303, 68.3071, 111.1158 -21304, 62.66611, 102.4978 -21305, 66.11815, 124.0832 -21306, 66.10233, 119.1205 -21307, 70.76474, 134.5527 -21308, 67.3541, 126.4415 -21309, 67.29001, 115.4747 -21310, 68.9878, 136.8897 -21311, 67.50241, 129.6194 -21312, 67.80553, 131.8187 -21313, 70.86344, 143.7688 -21314, 66.88387, 134.1093 -21315, 69.60302, 114.8928 -21316, 65.8415, 109.0991 -21317, 68.05408, 140.0282 -21318, 67.79184, 130.6684 -21319, 66.63211, 130.5872 -21320, 68.05862, 130.8255 -21321, 66.37615, 122.9051 -21322, 66.6771, 106.3209 -21323, 63.97165, 125.9937 -21324, 69.12251, 146.0978 -21325, 68.28209, 134.7229 -21326, 68.12163, 149.2238 -21327, 66.18678, 118.8765 -21328, 67.49155, 121.369 -21329, 70.23978, 127.3437 -21330, 69.18802, 119.5174 -21331, 66.98707, 115.3673 -21332, 71.11033, 145.6761 -21333, 68.61714, 128.542 -21334, 66.8577, 127.9222 -21335, 67.07586, 138.2211 -21336, 63.93118, 111.9108 -21337, 65.85939, 113.125 -21338, 69.44418, 139.1515 -21339, 67.8368, 129.6571 -21340, 64.76778, 123.182 -21341, 66.2066, 113.314 -21342, 67.79536, 131.6799 -21343, 72.01784, 124.9024 -21344, 65.20628, 115.5842 -21345, 67.38543, 127.1064 -21346, 66.56993, 115.3937 -21347, 66.03326, 108.599 -21348, 68.54084, 122.4814 -21349, 66.75178, 123.5222 -21350, 71.83647, 140.7706 -21351, 63.58595, 131.2403 -21352, 67.86356, 125.8127 -21353, 69.18172, 135.9835 -21354, 70.22442, 129.4703 -21355, 70.26193, 126.4545 -21356, 68.25391, 131.4638 -21357, 67.64774, 133.374 -21358, 67.60438, 113.665 -21359, 64.18161, 92.72194 -21360, 69.07121, 133.7058 -21361, 67.16346, 119.9669 -21362, 65.77951, 122.1882 -21363, 66.50073, 124.7978 -21364, 63.97477, 113.8485 -21365, 67.69537, 103.4807 -21366, 70.51405, 154.9609 -21367, 69.76942, 133.3499 -21368, 70.56116, 142.826 -21369, 68.60348, 115.6884 -21370, 64.8078, 126.7873 -21371, 70.90317, 130.958 -21372, 66.45704, 120.7458 -21373, 69.81243, 134.6215 -21374, 67.93456, 113.5044 -21375, 68.21735, 122.932 -21376, 70.49535, 141.461 -21377, 67.39105, 106.465 -21378, 71.6752, 139.7622 -21379, 68.59578, 147.415 -21380, 67.0862, 115.6875 -21381, 68.16122, 136.504 -21382, 67.98705, 105.9146 -21383, 64.80826, 114.3374 -21384, 68.38232, 142.4635 -21385, 69.73223, 130.6929 -21386, 65.31482, 110.0279 -21387, 67.93911, 117.1572 -21388, 66.28781, 128.8133 -21389, 65.31992, 157.9292 -21390, 67.56335, 120.957 -21391, 69.33362, 127.7738 -21392, 68.05282, 119.9513 -21393, 68.7317, 130.5724 -21394, 66.24459, 131.6161 -21395, 67.13869, 130.7992 -21396, 64.8849, 115.8741 -21397, 67.27717, 128.8991 -21398, 66.586, 116.0707 -21399, 67.12561, 113.2244 -21400, 65.22732, 115.8697 -21401, 67.58676, 132.6108 -21402, 69.53328, 124.1201 -21403, 68.83049, 141.3701 -21404, 68.31099, 116.924 -21405, 68.74387, 124.9707 -21406, 64.0985, 103.2453 -21407, 70.8389, 150.1694 -21408, 68.9783, 130.9676 -21409, 67.48817, 124.8039 -21410, 69.27081, 124.6497 -21411, 67.12082, 119.5077 -21412, 70.77956, 125.8114 -21413, 67.97148, 111.5771 -21414, 72.82909, 149.1342 -21415, 66.00035, 115.6001 -21416, 66.37328, 127.1567 -21417, 67.24395, 128.6992 -21418, 69.45193, 122.1409 -21419, 70.32167, 133.6321 -21420, 64.85287, 124.4417 -21421, 66.82049, 124.4221 -21422, 67.88258, 124.2948 -21423, 68.26595, 121.0339 -21424, 66.40595, 108.3041 -21425, 69.54769, 148.9234 -21426, 68.91851, 117.4566 -21427, 67.1916, 123.127 -21428, 67.33889, 120.5712 -21429, 67.05347, 120.1048 -21430, 66.71262, 124.3153 -21431, 69.98886, 141.4564 -21432, 71.51013, 139.8831 -21433, 73.19268, 150.9736 -21434, 67.79156, 132.7662 -21435, 68.64126, 132.4578 -21436, 66.17287, 133.4576 -21437, 67.35348, 134.5655 -21438, 67.26831, 123.5621 -21439, 66.43498, 113.6441 -21440, 69.66258, 122.2091 -21441, 67.46824, 107.2974 -21442, 71.53982, 140.1055 -21443, 70.50755, 130.405 -21444, 67.39344, 140.9644 -21445, 68.28771, 142.5192 -21446, 70.85948, 143.5364 -21447, 68.2026, 128.7043 -21448, 71.52565, 142.5129 -21449, 67.68578, 122.5681 -21450, 68.77033, 145.575 -21451, 69.69672, 124.4363 -21452, 69.86332, 132.8198 -21453, 68.11448, 130.3112 -21454, 67.44093, 132.8781 -21455, 64.59419, 103.0731 -21456, 66.89966, 119.9647 -21457, 66.46718, 113.4911 -21458, 68.19723, 124.665 -21459, 69.78449, 137.4408 -21460, 66.84378, 117.16 -21461, 67.60705, 117.721 -21462, 69.81536, 130.9669 -21463, 68.71877, 128.5218 -21464, 69.44319, 119.0987 -21465, 66.78997, 124.5261 -21466, 70.36901, 141.0114 -21467, 68.40678, 128.6087 -21468, 66.17464, 115.9334 -21469, 64.05399, 133.0834 -21470, 66.90763, 128.5777 -21471, 66.08072, 103.0628 -21472, 68.68999, 121.2085 -21473, 66.15716, 121.0179 -21474, 68.64629, 122.4392 -21475, 64.94119, 116.4141 -21476, 68.07015, 137.3806 -21477, 64.00869, 118.3034 -21478, 65.53683, 107.9785 -21479, 67.41471, 121.7855 -21480, 65.74584, 121.5395 -21481, 66.18987, 140.962 -21482, 63.73028, 114.8628 -21483, 67.5378, 107.9156 -21484, 68.83259, 123.8887 -21485, 68.60078, 114.8935 -21486, 70.33758, 135.3466 -21487, 68.06319, 122.375 -21488, 67.31084, 134.7184 -21489, 67.93548, 111.8576 -21490, 70.21616, 124.6681 -21491, 70.22715, 126.5091 -21492, 67.41853, 123.4532 -21493, 69.66876, 126.5893 -21494, 66.51862, 131.9422 -21495, 66.56167, 123.7117 -21496, 65.37204, 125.3946 -21497, 71.0227, 140.9263 -21498, 69.76803, 125.9309 -21499, 69.13129, 124.6745 -21500, 70.11223, 142.237 -21501, 66.65293, 122.3701 -21502, 71.50512, 126.6515 -21503, 67.35973, 133.4416 -21504, 67.0525, 125.5655 -21505, 70.82773, 148.3559 -21506, 68.41937, 125.6235 -21507, 68.65019, 123.9353 -21508, 67.9628, 132.746 -21509, 70.56903, 126.337 -21510, 69.24189, 135.4178 -21511, 67.38822, 140.2362 -21512, 63.09263, 104.4273 -21513, 68.73587, 111.0236 -21514, 67.79277, 142.0958 -21515, 68.54986, 136.4451 -21516, 70.1535, 120.8283 -21517, 70.09971, 126.219 -21518, 67.95659, 134.1742 -21519, 69.44167, 121.8278 -21520, 67.44686, 126.7548 -21521, 69.5806, 131.3823 -21522, 69.63943, 138.8988 -21523, 69.95134, 143.1008 -21524, 66.54229, 129.1494 -21525, 65.47078, 129.3234 -21526, 65.98373, 137.8792 -21527, 67.1234, 123.9595 -21528, 65.06387, 105.1229 -21529, 69.55975, 139.0725 -21530, 68.47409, 124.6217 -21531, 69.93312, 139.2227 -21532, 67.5759, 144.2837 -21533, 66.79037, 126.0623 -21534, 69.56945, 134.6805 -21535, 73.00543, 144.8899 -21536, 68.94047, 124.2216 -21537, 66.71029, 114.4104 -21538, 70.56037, 126.6797 -21539, 66.06623, 121.9 -21540, 72.09895, 144.037 -21541, 67.44827, 119.4643 -21542, 68.97642, 135.795 -21543, 69.04275, 113.957 -21544, 68.66189, 137.4046 -21545, 71.18002, 136.655 -21546, 66.66057, 126.3655 -21547, 63.36463, 110.6809 -21548, 69.34799, 125.2128 -21549, 69.77767, 135.8281 -21550, 69.07072, 130.9719 -21551, 68.32296, 118.1762 -21552, 66.55968, 118.5975 -21553, 68.37761, 112.1167 -21554, 65.98221, 115.1319 -21555, 63.25998, 110.1988 -21556, 71.62632, 153.9411 -21557, 66.09519, 98.68208 -21558, 67.48908, 116.7462 -21559, 70.30231, 124.28 -21560, 64.70216, 119.9535 -21561, 64.77568, 101.9952 -21562, 66.64032, 119.5377 -21563, 70.55327, 126.3116 -21564, 67.87381, 126.972 -21565, 65.91455, 113.3049 -21566, 69.77502, 125.1068 -21567, 66.139, 107.6645 -21568, 65.92413, 125.8118 -21569, 69.6475, 131.9709 -21570, 68.14729, 124.0205 -21571, 67.74068, 113.6562 -21572, 68.11275, 106.676 -21573, 68.20793, 113.7575 -21574, 68.37827, 123.0314 -21575, 67.82451, 130.8329 -21576, 67.48875, 111.5242 -21577, 69.68654, 142.2781 -21578, 69.65756, 142.6607 -21579, 70.94824, 134.3418 -21580, 68.7831, 121.5774 -21581, 69.0255, 135.5666 -21582, 68.53275, 151.8248 -21583, 65.24397, 139.6435 -21584, 68.75415, 122.4198 -21585, 66.91508, 118.2568 -21586, 68.90378, 143.5003 -21587, 64.45659, 137.1951 -21588, 69.37774, 133.934 -21589, 69.76118, 106.7714 -21590, 67.73498, 132.2829 -21591, 65.93122, 136.2363 -21592, 72.06156, 145.1228 -21593, 69.92008, 139.7968 -21594, 68.01618, 121.4656 -21595, 70.62601, 146.913 -21596, 65.42178, 112.1659 -21597, 68.50672, 139.005 -21598, 69.48629, 128.6752 -21599, 65.57785, 136.1471 -21600, 67.95425, 122.3756 -21601, 68.9238, 137.9993 -21602, 64.5782, 113.4876 -21603, 69.22296, 137.6336 -21604, 65.8112, 122.3264 -21605, 68.38674, 122.2001 -21606, 68.064, 123.0604 -21607, 71.89949, 144.9726 -21608, 66.75955, 113.9546 -21609, 66.26364, 111.5726 -21610, 69.12286, 121.6069 -21611, 71.05851, 132.4697 -21612, 67.82703, 134.8738 -21613, 66.1189, 130.9344 -21614, 67.76657, 123.0486 -21615, 66.34736, 129.4624 -21616, 69.88206, 132.1693 -21617, 68.8186, 116.2218 -21618, 69.22245, 130.6511 -21619, 69.56448, 149.2076 -21620, 65.74056, 129.3787 -21621, 66.94081, 129.4569 -21622, 66.44573, 128.19 -21623, 68.4432, 137.5434 -21624, 67.98349, 130.0934 -21625, 68.25542, 128.3862 -21626, 67.17137, 115.7127 -21627, 66.57049, 137.5753 -21628, 65.00255, 127.5117 -21629, 68.08759, 132.0304 -21630, 68.04764, 140.0717 -21631, 69.45338, 147.4061 -21632, 67.9968, 110.0948 -21633, 63.71092, 103.5775 -21634, 67.26281, 132.7455 -21635, 66.4024, 117.3694 -21636, 63.39192, 109.587 -21637, 67.72768, 118.9536 -21638, 66.803, 119.5927 -21639, 67.10602, 104.2534 -21640, 67.28255, 128.7274 -21641, 66.92397, 111.4987 -21642, 69.27156, 142.0013 -21643, 69.82977, 150.7596 -21644, 67.13762, 115.8561 -21645, 68.9154, 122.9638 -21646, 68.58518, 118.3007 -21647, 67.44759, 110.2889 -21648, 68.28475, 135.5616 -21649, 66.59309, 133.2853 -21650, 69.66864, 125.674 -21651, 66.48926, 127.8714 -21652, 66.0901, 124.6678 -21653, 68.39518, 128.0957 -21654, 70.80442, 130.4059 -21655, 70.79288, 124.7995 -21656, 66.19153, 144.743 -21657, 69.06036, 115.5577 -21658, 68.21507, 129.3545 -21659, 65.55386, 118.7886 -21660, 68.80277, 116.4346 -21661, 69.1402, 119.6141 -21662, 68.15536, 129.5781 -21663, 68.42978, 134.0208 -21664, 71.79676, 147.6642 -21665, 68.11027, 145.6245 -21666, 64.77343, 138.189 -21667, 68.49853, 114.9544 -21668, 68.55531, 146.7026 -21669, 67.41253, 130.7003 -21670, 71.11461, 153.6546 -21671, 66.74425, 129.3251 -21672, 68.39703, 131.2146 -21673, 69.25426, 139.9834 -21674, 67.91866, 136.0479 -21675, 66.60066, 131.2614 -21676, 67.43294, 126.1017 -21677, 69.11285, 147.8694 -21678, 69.6757, 134.3107 -21679, 68.41421, 146.046 -21680, 65.50774, 100.9124 -21681, 69.76777, 137.657 -21682, 70.67766, 141.3048 -21683, 66.20366, 129.6357 -21684, 65.94018, 100.974 -21685, 71.3988, 129.6586 -21686, 71.26908, 149.5428 -21687, 65.25052, 135.2581 -21688, 70.22019, 129.3704 -21689, 67.46231, 121.088 -21690, 65.38827, 125.245 -21691, 71.06891, 151.2576 -21692, 70.64691, 149.0675 -21693, 65.94902, 125.9638 -21694, 69.02074, 128.0814 -21695, 70.46626, 151.3353 -21696, 68.28099, 121.4549 -21697, 67.90092, 146.1333 -21698, 66.4104, 125.4014 -21699, 68.78832, 128.2448 -21700, 64.64202, 117.7037 -21701, 64.62019, 126.3926 -21702, 68.67167, 106.6081 -21703, 68.10937, 128.4228 -21704, 66.32562, 128.0712 -21705, 68.69826, 126.9703 -21706, 62.48237, 100.3418 -21707, 68.46424, 133.7977 -21708, 65.35569, 125.5137 -21709, 65.85849, 129.4713 -21710, 66.3082, 126.7998 -21711, 65.70911, 113.7976 -21712, 65.6121, 131.8419 -21713, 67.63331, 135.7273 -21714, 66.74792, 123.7179 -21715, 70.65296, 157.9704 -21716, 68.17586, 116.5777 -21717, 69.85767, 136.0274 -21718, 66.60797, 119.7939 -21719, 69.08158, 145.2811 -21720, 67.16475, 120.9003 -21721, 66.35066, 114.9647 -21722, 66.59299, 129.3826 -21723, 65.04067, 101.3936 -21724, 68.30625, 124.8439 -21725, 67.6115, 129.8552 -21726, 69.20628, 146.9622 -21727, 70.44549, 146.535 -21728, 70.91437, 136.5757 -21729, 65.42417, 133.412 -21730, 67.54349, 139.8108 -21731, 67.24006, 129.7754 -21732, 68.186, 139.256 -21733, 66.55056, 104.7859 -21734, 68.61863, 141.8655 -21735, 68.3969, 138.2968 -21736, 69.25466, 123.9714 -21737, 66.51789, 122.2101 -21738, 69.53102, 130.8152 -21739, 67.84335, 134.6077 -21740, 67.73899, 123.6453 -21741, 69.10056, 133.7242 -21742, 67.22282, 136.6474 -21743, 70.14077, 117.6351 -21744, 66.63163, 127.9701 -21745, 69.45646, 136.697 -21746, 69.02288, 157.9236 -21747, 69.04845, 144.0225 -21748, 65.98766, 115.1328 -21749, 68.32236, 137.4591 -21750, 69.06911, 130.3359 -21751, 67.6674, 128.978 -21752, 67.94975, 129.5573 -21753, 68.79124, 110.5886 -21754, 68.35343, 138.2477 -21755, 68.31792, 137.2072 -21756, 69.47505, 131.5983 -21757, 67.39877, 108.4221 -21758, 67.90904, 129.8693 -21759, 69.51989, 142.6941 -21760, 67.83781, 148.7128 -21761, 65.60406, 115.2958 -21762, 68.8712, 135.0711 -21763, 67.41876, 114.7234 -21764, 66.89864, 112.6633 -21765, 67.05157, 111.2213 -21766, 68.65952, 126.4751 -21767, 68.82781, 124.8432 -21768, 68.27979, 132.045 -21769, 67.24388, 126.8469 -21770, 65.70125, 118.0533 -21771, 68.53534, 142.5502 -21772, 68.97033, 135.912 -21773, 69.42265, 123.1637 -21774, 65.89796, 116.9465 -21775, 67.48926, 121.2539 -21776, 68.24839, 126.698 -21777, 69.9615, 142.6772 -21778, 69.1349, 133.9896 -21779, 65.7668, 114.8528 -21780, 69.31519, 132.0639 -21781, 67.68043, 112.7006 -21782, 65.7642, 105.172 -21783, 68.65969, 107.7614 -21784, 72.48764, 132.3992 -21785, 64.78256, 110.153 -21786, 70.4841, 159.2503 -21787, 69.67148, 143.2815 -21788, 65.12354, 134.8383 -21789, 68.17589, 135.8612 -21790, 68.75037, 129.4885 -21791, 67.50063, 144.4117 -21792, 66.18238, 115.3209 -21793, 66.93648, 142.2417 -21794, 67.71915, 134.6098 -21795, 66.15708, 124.7595 -21796, 68.60607, 121.8448 -21797, 64.407, 116.1544 -21798, 65.95004, 110.1839 -21799, 69.6538, 107.6804 -21800, 67.30606, 131.0374 -21801, 69.65916, 124.3081 -21802, 68.25471, 144.5448 -21803, 67.50858, 135.5885 -21804, 68.8211, 142.21 -21805, 67.96832, 132.0779 -21806, 66.09807, 113.2875 -21807, 68.6238, 134.5527 -21808, 66.2588, 131.9464 -21809, 65.78144, 121.6553 -21810, 63.68103, 113.8491 -21811, 68.96781, 117.3037 -21812, 69.61369, 120.1962 -21813, 67.9393, 131.376 -21814, 72.12761, 141.5293 -21815, 66.17765, 108.006 -21816, 64.44865, 113.84 -21817, 66.9381, 124.7886 -21818, 69.72663, 138.5469 -21819, 66.50238, 144.8476 -21820, 67.66821, 122.3427 -21821, 68.21966, 127.736 -21822, 66.23247, 107.7751 -21823, 68.48757, 111.7849 -21824, 66.72098, 123.6466 -21825, 67.26512, 110.1107 -21826, 67.97088, 127.9019 -21827, 71.33619, 141.8512 -21828, 67.42918, 123.1017 -21829, 69.16961, 120.2536 -21830, 69.73638, 127.9477 -21831, 66.88932, 118.3424 -21832, 67.92182, 102.3229 -21833, 68.65846, 123.3907 -21834, 68.9523, 124.4188 -21835, 63.26116, 131.8104 -21836, 68.1796, 139.1423 -21837, 69.04181, 137.5828 -21838, 66.5111, 116.7547 -21839, 69.76603, 127.3629 -21840, 68.24223, 124.3347 -21841, 68.84887, 136.3807 -21842, 67.04484, 127.0678 -21843, 70.93046, 126.9017 -21844, 68.51393, 136.1465 -21845, 71.06022, 111.4244 -21846, 65.47707, 106.8859 -21847, 68.63389, 114.5655 -21848, 68.18722, 118.3686 -21849, 67.06874, 123.2887 -21850, 67.62436, 129.2202 -21851, 68.97729, 130.823 -21852, 67.66502, 117.9736 -21853, 69.96163, 120.0183 -21854, 64.63866, 108.6377 -21855, 66.42798, 116.0001 -21856, 67.91525, 103.1791 -21857, 66.84693, 116.1444 -21858, 66.66734, 129.0009 -21859, 68.74944, 150.8735 -21860, 66.35019, 124.4368 -21861, 68.74957, 131.2495 -21862, 67.15931, 110.9528 -21863, 68.07741, 122.6487 -21864, 73.25176, 148.2284 -21865, 67.62804, 122.5984 -21866, 70.98337, 122.6745 -21867, 68.14991, 122.0117 -21868, 68.73907, 126.2233 -21869, 65.52461, 113.7172 -21870, 65.35162, 110.6449 -21871, 64.35555, 113.8107 -21872, 68.55885, 127.5331 -21873, 69.0529, 133.1832 -21874, 72.60485, 143.9177 -21875, 69.48058, 115.4622 -21876, 66.25333, 113.0559 -21877, 65.40529, 109.6595 -21878, 70.28061, 119.1562 -21879, 70.37019, 116.2454 -21880, 65.48775, 125.4251 -21881, 66.53455, 123.3583 -21882, 67.5823, 121.7252 -21883, 65.69418, 125.5996 -21884, 68.03737, 134.0532 -21885, 68.47451, 123.5137 -21886, 65.23306, 116.1786 -21887, 67.86301, 125.1315 -21888, 65.79717, 123.5802 -21889, 71.44975, 133.3758 -21890, 70.84018, 136.3143 -21891, 71.18982, 141.107 -21892, 66.03097, 126.5347 -21893, 71.37742, 125.9633 -21894, 70.57756, 137.1181 -21895, 68.2458, 128.0182 -21896, 68.22017, 141.7363 -21897, 65.06244, 106.6877 -21898, 66.90634, 108.0455 -21899, 63.03862, 115.8658 -21900, 67.06774, 152.2417 -21901, 65.30894, 106.7987 -21902, 65.06679, 107.6525 -21903, 67.39673, 124.6423 -21904, 69.06112, 122.2679 -21905, 69.12434, 132.9822 -21906, 68.47088, 130.1302 -21907, 70.21144, 143.2455 -21908, 70.97244, 143.2283 -21909, 67.11423, 122.2441 -21910, 70.05116, 132.2902 -21911, 68.72983, 131.9808 -21912, 65.39469, 129.8896 -21913, 71.11058, 132.006 -21914, 63.52038, 122.4025 -21915, 68.03493, 121.5552 -21916, 64.8839, 130.9255 -21917, 68.16535, 123.2502 -21918, 69.34209, 124.7472 -21919, 69.55427, 112.586 -21920, 69.37897, 123.8323 -21921, 67.90715, 124.8204 -21922, 69.78616, 119.2747 -21923, 70.06486, 123.9407 -21924, 67.26241, 133.3415 -21925, 63.73139, 121.2644 -21926, 68.32099, 129.2511 -21927, 66.39081, 142.8419 -21928, 70.03989, 137.0893 -21929, 66.24433, 135.7157 -21930, 68.25743, 117.7142 -21931, 70.79829, 130.2646 -21932, 67.11709, 116.0134 -21933, 65.93811, 124.2235 -21934, 67.55474, 97.14789 -21935, 64.78244, 124.6147 -21936, 68.45511, 118.3446 -21937, 68.60516, 130.4597 -21938, 68.18953, 135.0554 -21939, 64.24981, 113.7089 -21940, 67.42016, 121.1719 -21941, 69.64799, 129.1334 -21942, 68.76641, 137.5208 -21943, 67.47039, 116.7224 -21944, 66.34719, 102.2607 -21945, 65.27345, 94.26051 -21946, 68.49649, 130.6183 -21947, 66.77663, 128.4905 -21948, 68.62434, 136.1352 -21949, 66.97798, 134.398 -21950, 74.42744, 141.7416 -21951, 68.16821, 110.4841 -21952, 69.58597, 134.9162 -21953, 64.67803, 128.0545 -21954, 69.98681, 130.8804 -21955, 68.74272, 136.6016 -21956, 67.56099, 137.7014 -21957, 63.59232, 107.4139 -21958, 69.05534, 151.567 -21959, 66.83137, 135.1775 -21960, 69.25699, 132.5855 -21961, 70.10878, 128.1379 -21962, 65.74458, 118.6861 -21963, 68.92381, 132.023 -21964, 63.45696, 101.8629 -21965, 66.46407, 114.2272 -21966, 65.32677, 112.1856 -21967, 70.28537, 127.3897 -21968, 73.62336, 145.5589 -21969, 72.06438, 133.0115 -21970, 63.99289, 118.1347 -21971, 69.13512, 125.715 -21972, 69.11398, 115.0134 -21973, 68.8397, 119.2542 -21974, 68.42829, 125.7109 -21975, 69.11164, 126.3794 -21976, 67.75382, 133.1108 -21977, 68.28205, 130.0354 -21978, 69.79824, 140.2748 -21979, 67.80131, 125.3779 -21980, 66.92047, 117.4567 -21981, 65.41043, 110.3167 -21982, 67.2104, 118.1644 -21983, 69.23036, 104.0257 -21984, 69.02497, 127.7908 -21985, 65.27684, 145.1158 -21986, 69.48104, 139.7665 -21987, 70.35139, 148.13 -21988, 66.72914, 110.6124 -21989, 69.18346, 124.9384 -21990, 69.39009, 117.0886 -21991, 65.10415, 122.9297 -21992, 70.42201, 132.063 -21993, 64.20998, 124.7386 -21994, 66.39326, 110.6721 -21995, 67.99051, 130.6448 -21996, 66.54414, 127.2514 -21997, 67.85205, 120.743 -21998, 68.3302, 147.7192 -21999, 67.70322, 116.5958 -22000, 67.08778, 126.0409 -22001, 67.45991, 131.0766 -22002, 64.53855, 103.166 -22003, 68.77395, 120.2698 -22004, 65.27979, 120.4821 -22005, 69.89596, 114.4375 -22006, 66.11113, 121.7524 -22007, 69.19728, 138.7705 -22008, 68.62235, 127.2493 -22009, 70.33159, 152.9261 -22010, 69.44904, 126.7259 -22011, 70.18822, 153.6557 -22012, 68.18276, 135.8523 -22013, 64.73962, 108.7094 -22014, 69.52012, 132.428 -22015, 68.40112, 115.1738 -22016, 68.4364, 121.9109 -22017, 69.7165, 113.6107 -22018, 65.8825, 117.5802 -22019, 67.92953, 105.9806 -22020, 67.02377, 130.0163 -22021, 68.48076, 122.6201 -22022, 70.66957, 126.6477 -22023, 67.61492, 134.6768 -22024, 73.58866, 153.0783 -22025, 66.98903, 119.4068 -22026, 70.73654, 151.4389 -22027, 70.82435, 140.2097 -22028, 67.78555, 110.19 -22029, 67.01787, 127.3742 -22030, 67.07288, 137.5581 -22031, 69.53889, 129.2925 -22032, 64.16684, 128.8207 -22033, 66.59597, 117.7506 -22034, 66.02727, 121.3984 -22035, 69.90695, 127.6222 -22036, 66.31378, 128.1986 -22037, 71.0924, 157.3921 -22038, 69.1847, 130.0327 -22039, 69.53601, 139.6967 -22040, 69.43737, 126.2871 -22041, 66.46531, 118.2134 -22042, 69.60722, 130.2072 -22043, 68.40154, 126.3804 -22044, 66.58472, 124.3242 -22045, 67.65364, 132.7654 -22046, 65.62466, 132.5228 -22047, 67.55476, 138.0942 -22048, 67.67129, 129.3039 -22049, 71.35689, 135.5968 -22050, 67.23927, 145.4296 -22051, 66.4871, 119.4681 -22052, 69.16735, 124.7664 -22053, 69.7819, 117.0658 -22054, 66.7397, 123.7996 -22055, 70.68935, 140.8345 -22056, 67.5828, 124.7307 -22057, 66.10625, 128.8248 -22058, 70.29985, 153.2173 -22059, 69.77906, 141.0626 -22060, 67.07765, 126.0482 -22061, 65.67584, 121.7947 -22062, 65.93844, 126.4153 -22063, 71.89509, 127.5677 -22064, 67.92099, 109.7213 -22065, 70.56492, 143.6368 -22066, 64.88248, 107.027 -22067, 71.8284, 131.3314 -22068, 68.76645, 127.0974 -22069, 66.38695, 107.555 -22070, 66.21688, 118.3435 -22071, 70.84942, 138.4765 -22072, 68.79234, 125.5644 -22073, 69.99779, 131.4314 -22074, 64.83696, 142.2888 -22075, 66.68908, 130.1091 -22076, 64.81045, 115.7425 -22077, 71.13578, 141.1345 -22078, 68.08155, 124.9248 -22079, 66.47646, 121.6753 -22080, 70.8782, 153.3804 -22081, 67.83647, 116.1852 -22082, 68.67074, 136.5908 -22083, 69.34659, 131.303 -22084, 67.01988, 112.523 -22085, 63.74803, 103.3567 -22086, 68.12093, 113.5474 -22087, 71.9073, 153.8792 -22088, 68.39398, 130.7981 -22089, 69.89219, 143.0116 -22090, 67.92004, 132.341 -22091, 69.5779, 145.1589 -22092, 67.4598, 122.5588 -22093, 67.62244, 123.0214 -22094, 67.1134, 126.3654 -22095, 68.88195, 116.6333 -22096, 66.77155, 136.6336 -22097, 66.44019, 130.1774 -22098, 68.75179, 130.6616 -22099, 70.97369, 129.0189 -22100, 67.69709, 124.2238 -22101, 67.55783, 117.3321 -22102, 69.39296, 132.2173 -22103, 66.57, 126.0029 -22104, 68.4234, 114.5145 -22105, 66.2871, 131.8304 -22106, 67.95212, 128.0529 -22107, 67.00587, 124.613 -22108, 66.13305, 123.0369 -22109, 67.94284, 130.1582 -22110, 66.8761, 135.8472 -22111, 67.88451, 131.2437 -22112, 64.79759, 116.9411 -22113, 67.83546, 134.9498 -22114, 68.28544, 117.8027 -22115, 66.99732, 136.9152 -22116, 66.70636, 133.6125 -22117, 67.99473, 111.8341 -22118, 68.56614, 133.2531 -22119, 63.70894, 125.1008 -22120, 67.39951, 134.5424 -22121, 67.68099, 140.1474 -22122, 64.98122, 108.9518 -22123, 69.4232, 123.6302 -22124, 70.00146, 149.3087 -22125, 71.36114, 144.8643 -22126, 66.60996, 121.845 -22127, 67.09436, 115.8078 -22128, 70.12298, 145.3622 -22129, 66.03876, 135.1259 -22130, 66.27712, 129.0541 -22131, 67.62592, 131.2538 -22132, 65.95321, 109.7856 -22133, 68.48038, 130.1038 -22134, 65.65352, 118.0966 -22135, 72.12181, 147.585 -22136, 67.40851, 146.4429 -22137, 69.88715, 134.4733 -22138, 69.27105, 154.4557 -22139, 71.93958, 152.5295 -22140, 66.98862, 115.2594 -22141, 69.88329, 127.6165 -22142, 69.06831, 142.8685 -22143, 68.37576, 146.4785 -22144, 72.36275, 141.3837 -22145, 65.32142, 96.822 -22146, 67.06859, 133.4834 -22147, 68.08786, 124.3863 -22148, 71.55388, 136.8521 -22149, 69.55143, 119.9292 -22150, 68.24976, 132.8025 -22151, 69.17304, 120.0536 -22152, 70.54788, 136.8571 -22153, 67.5523, 115.2183 -22154, 66.68536, 135.8133 -22155, 66.47161, 121.4223 -22156, 68.24878, 143.2844 -22157, 70.94761, 133.8643 -22158, 67.82211, 121.5944 -22159, 66.99944, 123.4547 -22160, 69.05494, 128.4013 -22161, 67.15164, 119.0471 -22162, 69.05272, 147.0719 -22163, 67.94938, 113.3519 -22164, 70.70493, 150.7817 -22165, 65.96851, 115.2572 -22166, 65.66304, 104.3101 -22167, 67.91282, 121.6957 -22168, 68.97438, 122.827 -22169, 69.66398, 133.2072 -22170, 66.46308, 147.6569 -22171, 64.40454, 119.04 -22172, 67.10339, 127.6042 -22173, 68.39658, 110.7311 -22174, 65.04915, 123.1842 -22175, 65.33805, 133.3083 -22176, 69.8495, 128.4304 -22177, 70.79219, 116.7218 -22178, 69.86252, 142.5929 -22179, 64.08728, 114.6547 -22180, 67.75657, 127.4783 -22181, 66.57296, 125.5804 -22182, 65.95543, 119.1968 -22183, 67.27865, 124.621 -22184, 63.76783, 119.2237 -22185, 65.67411, 133.6584 -22186, 68.27234, 139.0601 -22187, 66.29509, 122.8579 -22188, 66.30592, 118.0936 -22189, 65.17403, 125.2493 -22190, 65.36657, 118.4034 -22191, 70.09668, 134.7715 -22192, 67.49154, 135.2386 -22193, 71.89162, 135.7549 -22194, 70.80254, 139.8002 -22195, 68.10091, 95.27771 -22196, 65.66029, 132.4741 -22197, 65.09694, 123.0223 -22198, 66.33209, 110.2627 -22199, 68.60514, 139.9802 -22200, 66.0317, 101.1566 -22201, 69.62638, 141.8247 -22202, 67.93519, 138.7177 -22203, 66.51344, 117.3527 -22204, 68.79437, 129.367 -22205, 69.85071, 133.4628 -22206, 68.56043, 126.5705 -22207, 65.15652, 110.9314 -22208, 67.67203, 121.017 -22209, 71.47108, 133.0386 -22210, 67.893, 125.5458 -22211, 65.36284, 122.8713 -22212, 68.20304, 126.67 -22213, 64.78973, 113.3012 -22214, 66.79185, 133.5896 -22215, 68.86132, 124.0532 -22216, 66.84413, 132.7674 -22217, 67.68374, 122.9456 -22218, 69.02992, 116.8819 -22219, 68.4131, 145.2036 -22220, 68.72312, 127.6754 -22221, 69.07539, 119.1678 -22222, 64.79406, 119.185 -22223, 68.20087, 125.924 -22224, 70.01234, 131.9024 -22225, 68.42995, 132.477 -22226, 66.58476, 110.4114 -22227, 68.27708, 109.3802 -22228, 68.22959, 153.4104 -22229, 64.99611, 124.0648 -22230, 69.04964, 137.6179 -22231, 66.26221, 124.3251 -22232, 69.57317, 148.4155 -22233, 71.58799, 128.2996 -22234, 64.67557, 122.1539 -22235, 64.75449, 126.3476 -22236, 68.73197, 133.4295 -22237, 67.67754, 141.1335 -22238, 67.92076, 125.3999 -22239, 66.36387, 115.1711 -22240, 64.70157, 123.7421 -22241, 66.85773, 131.6002 -22242, 67.53255, 129.7075 -22243, 66.06081, 125.8923 -22244, 68.08335, 131.1495 -22245, 70.50547, 131.9548 -22246, 65.92983, 122.5229 -22247, 69.70668, 125.4368 -22248, 70.89685, 150.7064 -22249, 67.66278, 115.7167 -22250, 70.95408, 136.2602 -22251, 71.28145, 140.2041 -22252, 68.15606, 147.0766 -22253, 67.59876, 113.8641 -22254, 67.48336, 136.762 -22255, 68.24318, 118.4243 -22256, 66.80036, 135.7861 -22257, 67.16489, 121.1942 -22258, 69.37906, 129.4147 -22259, 68.19199, 127.1902 -22260, 67.68815, 133.5415 -22261, 70.95609, 134.0273 -22262, 70.27042, 133.8297 -22263, 66.56488, 135.5664 -22264, 70.52776, 140.0465 -22265, 69.02233, 131.4256 -22266, 72.34913, 140.7812 -22267, 67.03635, 124.2948 -22268, 69.90606, 143.0028 -22269, 71.44901, 130.5197 -22270, 68.37323, 121.8766 -22271, 66.7327, 107.9074 -22272, 64.94584, 104.0162 -22273, 66.81655, 107.7306 -22274, 69.28764, 122.0171 -22275, 69.39732, 116.0082 -22276, 65.91704, 116.9297 -22277, 64.86837, 115.2735 -22278, 63.55164, 119.2598 -22279, 70.44002, 149.2576 -22280, 68.09522, 117.641 -22281, 68.10961, 126.8252 -22282, 67.27297, 146.7294 -22283, 64.1425, 91.37972 -22284, 64.02389, 92.55327 -22285, 66.53104, 139.6883 -22286, 66.97558, 125.6853 -22287, 70.25009, 142.8251 -22288, 68.34103, 121.3014 -22289, 67.49306, 124.8288 -22290, 68.9249, 136.115 -22291, 68.2984, 139.7633 -22292, 67.57662, 122.0482 -22293, 68.30339, 113.878 -22294, 64.49314, 136.2782 -22295, 70.97046, 138.3778 -22296, 66.36863, 134.281 -22297, 63.76287, 112.4485 -22298, 67.57329, 119.1817 -22299, 67.92684, 141.4374 -22300, 66.16697, 113.6853 -22301, 66.34329, 135.2088 -22302, 69.95923, 139.5936 -22303, 68.90018, 124.9902 -22304, 68.56348, 136.245 -22305, 68.30793, 141.0644 -22306, 69.43004, 133.9346 -22307, 67.64037, 122.9113 -22308, 71.4182, 132.1873 -22309, 69.04964, 142.7013 -22310, 67.39319, 121.8913 -22311, 69.45379, 129.8532 -22312, 63.44375, 109.1048 -22313, 68.43154, 135.2451 -22314, 65.74265, 118.765 -22315, 69.89797, 139.0575 -22316, 69.04994, 126.7366 -22317, 70.71294, 118.9324 -22318, 66.53418, 113.3842 -22319, 66.23135, 111.8218 -22320, 68.21149, 121.5553 -22321, 65.49434, 117.2374 -22322, 66.9114, 137.1524 -22323, 64.09729, 112.0671 -22324, 68.66012, 129.1182 -22325, 70.23702, 130.4602 -22326, 64.64689, 116.0481 -22327, 66.20455, 119.7629 -22328, 68.73289, 118.1634 -22329, 67.14691, 143.8829 -22330, 65.14466, 128.5075 -22331, 64.89881, 118.0226 -22332, 68.72325, 126.7209 -22333, 68.02931, 127.2642 -22334, 65.49921, 138.8997 -22335, 70.07897, 124.0463 -22336, 65.80961, 122.0785 -22337, 68.17208, 126.3151 -22338, 68.34963, 116.8118 -22339, 70.21958, 133.1982 -22340, 68.84447, 135.5874 -22341, 67.94979, 121.2596 -22342, 65.27381, 105.3339 -22343, 66.23461, 126.2458 -22344, 67.1436, 111.9571 -22345, 65.90468, 126.1104 -22346, 69.99086, 147.0435 -22347, 65.17115, 122.095 -22348, 69.63168, 149.5493 -22349, 66.90136, 127.7358 -22350, 64.91721, 127.0199 -22351, 71.97009, 144.7114 -22352, 65.46509, 114.3207 -22353, 69.56498, 142.8489 -22354, 68.3429, 136.2659 -22355, 63.43363, 130.6775 -22356, 65.46842, 122.375 -22357, 67.08889, 111.5552 -22358, 69.81623, 133.9541 -22359, 67.95191, 124.754 -22360, 69.45766, 123.6822 -22361, 66.40296, 126.6477 -22362, 68.39926, 122.2508 -22363, 68.96552, 122.0338 -22364, 70.89678, 159.438 -22365, 67.65672, 145.5204 -22366, 67.53701, 120.4889 -22367, 66.81162, 118.2279 -22368, 69.88334, 133.8676 -22369, 68.6168, 134.1446 -22370, 67.45962, 122.1682 -22371, 70.80403, 144.2832 -22372, 67.18316, 135.5907 -22373, 68.50765, 134.9876 -22374, 68.76787, 128.1724 -22375, 68.43434, 126.9071 -22376, 66.47823, 111.5383 -22377, 67.34436, 121.6583 -22378, 65.02414, 129.485 -22379, 67.19022, 111.6239 -22380, 68.52752, 114.7147 -22381, 68.88508, 139.316 -22382, 66.13478, 114.642 -22383, 67.98273, 132.5035 -22384, 69.229, 123.9145 -22385, 69.38501, 119.8229 -22386, 68.09481, 122.3788 -22387, 68.35242, 138.5489 -22388, 68.641, 125.5334 -22389, 70.81774, 123.9536 -22390, 67.41551, 146.1271 -22391, 70.62572, 144.159 -22392, 66.74351, 118.2665 -22393, 70.06192, 124.4469 -22394, 67.44022, 140.4945 -22395, 67.20582, 112.23 -22396, 68.96137, 121.5742 -22397, 67.16343, 118.3616 -22398, 69.11617, 127.4023 -22399, 67.19284, 119.2573 -22400, 70.04124, 127.3701 -22401, 65.39474, 118.9921 -22402, 69.78766, 136.6437 -22403, 65.78283, 106.2273 -22404, 70.85273, 136.7051 -22405, 67.26176, 114.9494 -22406, 65.82405, 117.3282 -22407, 67.87583, 118.4041 -22408, 68.89097, 131.2082 -22409, 68.26679, 146.8878 -22410, 69.18241, 106.3253 -22411, 70.00856, 126.6624 -22412, 67.79094, 130.9155 -22413, 71.07725, 142.6734 -22414, 68.53121, 125.742 -22415, 70.69622, 130.7612 -22416, 68.34285, 122.5753 -22417, 67.88412, 131.1011 -22418, 69.09173, 119.5692 -22419, 64.19111, 131.5028 -22420, 65.58191, 114.5981 -22421, 67.00245, 135.268 -22422, 72.50619, 141.3209 -22423, 67.29625, 123.9061 -22424, 64.37806, 122.5322 -22425, 66.53719, 106.8997 -22426, 66.73451, 120.6642 -22427, 67.1243, 126.1548 -22428, 68.93399, 141.4405 -22429, 68.1547, 121.1812 -22430, 64.69305, 105.483 -22431, 70.17224, 135.2665 -22432, 65.44791, 119.2957 -22433, 66.75949, 133.259 -22434, 72.58158, 159.1321 -22435, 66.85111, 120.6395 -22436, 67.85314, 132.4666 -22437, 66.56029, 115.992 -22438, 66.60117, 105.015 -22439, 68.16608, 137.8016 -22440, 68.02612, 131.4764 -22441, 70.43453, 134.9766 -22442, 70.448, 122.5178 -22443, 66.79366, 121.7954 -22444, 67.93008, 104.9369 -22445, 67.53134, 120.2005 -22446, 64.0635, 110.7893 -22447, 67.46311, 122.3789 -22448, 65.64829, 106.5113 -22449, 65.50176, 127.0283 -22450, 65.19088, 137.0147 -22451, 73.55973, 143.8236 -22452, 67.48872, 128.3561 -22453, 71.66711, 136.453 -22454, 66.5003, 134.2579 -22455, 70.47009, 134.5955 -22456, 68.77001, 104.3631 -22457, 66.6715, 133.7417 -22458, 66.8153, 119.2792 -22459, 67.02357, 146.3363 -22460, 67.20076, 133.7343 -22461, 70.29408, 122.478 -22462, 67.91383, 130.3713 -22463, 65.94586, 106.4359 -22464, 67.94159, 127.6529 -22465, 68.59362, 121.6743 -22466, 67.31884, 102.4131 -22467, 69.48282, 132.2356 -22468, 67.43331, 102.8806 -22469, 68.54895, 127.8072 -22470, 67.08363, 123.5613 -22471, 68.71345, 123.6214 -22472, 74.51784, 146.9867 -22473, 71.11623, 126.5249 -22474, 66.6034, 132.068 -22475, 65.16296, 131.9835 -22476, 67.40019, 119.562 -22477, 70.16146, 129.2907 -22478, 65.61241, 125.0266 -22479, 69.34532, 142.6343 -22480, 70.28985, 120.4244 -22481, 63.28424, 102.8488 -22482, 67.56905, 138.245 -22483, 64.16839, 117.9972 -22484, 68.38401, 113.6476 -22485, 63.44102, 105.99 -22486, 70.16228, 152.0325 -22487, 67.14157, 119.621 -22488, 67.3811, 134.1843 -22489, 71.23103, 135.0203 -22490, 71.63547, 135.9923 -22491, 69.82003, 141.106 -22492, 63.77542, 117.014 -22493, 68.54253, 133.6109 -22494, 64.10125, 112.2048 -22495, 67.39109, 142.0633 -22496, 69.56071, 117.9541 -22497, 67.46663, 132.0557 -22498, 66.90103, 114.3497 -22499, 66.12243, 122.077 -22500, 65.6892, 118.8169 -22501, 65.1204, 118.9654 -22502, 67.16597, 126.5318 -22503, 67.33179, 132.7412 -22504, 65.43456, 132.9256 -22505, 71.01314, 144.9404 -22506, 67.13382, 139.0221 -22507, 70.73742, 139.8123 -22508, 61.5772, 96.8142 -22509, 65.29383, 126.8247 -22510, 68.56296, 129.1019 -22511, 67.5144, 122.6961 -22512, 72.21583, 141.0306 -22513, 70.28404, 128.3399 -22514, 71.11178, 143.1083 -22515, 65.76568, 130.449 -22516, 68.03973, 128.1704 -22517, 68.16794, 130.1159 -22518, 66.20705, 121.4541 -22519, 67.45865, 135.8331 -22520, 68.06964, 107.1248 -22521, 68.40912, 142.847 -22522, 68.36422, 129.5642 -22523, 68.2454, 147.5186 -22524, 68.48681, 138.3336 -22525, 67.05044, 128.3177 -22526, 70.19008, 130.5503 -22527, 69.81118, 129.5179 -22528, 70.02186, 147.9327 -22529, 65.66764, 126.892 -22530, 68.29689, 128.3698 -22531, 68.96595, 113.4953 -22532, 64.81674, 125.2063 -22533, 67.12839, 125.9876 -22534, 68.09125, 106.3661 -22535, 68.70922, 133.285 -22536, 68.68883, 102.1817 -22537, 66.17566, 105.552 -22538, 66.59899, 112.7548 -22539, 66.343, 108.918 -22540, 69.56934, 147.6161 -22541, 70.46931, 121.3031 -22542, 69.28264, 134.4014 -22543, 65.39677, 118.5694 -22544, 65.71084, 117.2162 -22545, 68.83017, 137.2144 -22546, 66.59626, 119.4922 -22547, 64.3308, 120.3128 -22548, 68.47765, 137.3295 -22549, 65.57002, 122.3498 -22550, 70.5056, 139.8634 -22551, 64.50765, 117.6468 -22552, 65.13344, 115.206 -22553, 64.89306, 118.7128 -22554, 68.39202, 120.7594 -22555, 67.7322, 135.0784 -22556, 68.13899, 132.4274 -22557, 65.15771, 127.3552 -22558, 67.62358, 116.1185 -22559, 66.69655, 129.1073 -22560, 68.34154, 120.2991 -22561, 70.32266, 137.2463 -22562, 72.36994, 161.072 -22563, 71.00524, 135.5327 -22564, 67.51452, 117.0815 -22565, 68.86769, 134.6847 -22566, 71.92456, 140.8061 -22567, 69.60134, 137.1303 -22568, 71.14383, 145.1859 -22569, 69.61626, 119.6241 -22570, 68.93692, 131.6676 -22571, 69.42922, 132.3479 -22572, 67.17672, 140.0865 -22573, 69.72196, 128.3285 -22574, 70.60744, 132.7756 -22575, 67.34019, 127.3799 -22576, 66.31079, 126.9478 -22577, 67.23639, 129.5258 -22578, 66.2918, 121.0966 -22579, 69.50398, 136.2028 -22580, 66.49436, 113.3199 -22581, 70.58993, 133.791 -22582, 68.92044, 139.3391 -22583, 71.77031, 132.9198 -22584, 68.50443, 119.7086 -22585, 69.39218, 115.8239 -22586, 68.6537, 126.212 -22587, 66.18463, 133.7102 -22588, 68.33578, 125.5068 -22589, 66.10103, 120.5161 -22590, 67.31834, 134.4938 -22591, 68.14329, 140.9484 -22592, 67.54457, 113.9351 -22593, 68.89329, 132.902 -22594, 67.78014, 114.3622 -22595, 72.29726, 130.9845 -22596, 69.89756, 138.4082 -22597, 68.68682, 129.1788 -22598, 68.22197, 129.9893 -22599, 68.06326, 122.2425 -22600, 70.50201, 121.5432 -22601, 66.80934, 127.5672 -22602, 65.84644, 114.6007 -22603, 65.26085, 108.4305 -22604, 67.03193, 124.5872 -22605, 69.69241, 134.7945 -22606, 67.68945, 126.7584 -22607, 64.90842, 115.6715 -22608, 69.7312, 145.1096 -22609, 70.9839, 149.7127 -22610, 65.35669, 113.8631 -22611, 70.94864, 141.6714 -22612, 66.61118, 127.3027 -22613, 67.8403, 126.3388 -22614, 70.30731, 113.6596 -22615, 67.19256, 118.4278 -22616, 72.6701, 153.4343 -22617, 69.11157, 146.5177 -22618, 65.42909, 96.09124 -22619, 66.69501, 115.1204 -22620, 67.2699, 119.5571 -22621, 66.82154, 106.1513 -22622, 66.56659, 120.8269 -22623, 68.05305, 121.1583 -22624, 69.85664, 127.7646 -22625, 69.45607, 112.218 -22626, 65.00963, 133.8473 -22627, 70.59848, 142.1744 -22628, 70.32798, 145.7059 -22629, 71.92476, 137.7201 -22630, 72.18595, 134.2977 -22631, 68.29702, 125.3716 -22632, 72.45555, 135.889 -22633, 67.70906, 116.7369 -22634, 65.63799, 127.0389 -22635, 68.38226, 140.6609 -22636, 65.644, 134.9545 -22637, 69.68159, 129.241 -22638, 69.47913, 151.5039 -22639, 72.95987, 156.0008 -22640, 69.56484, 129.0326 -22641, 70.69665, 130.411 -22642, 66.5653, 130.9523 -22643, 66.0725, 113.1841 -22644, 68.68202, 131.7641 -22645, 64.4832, 117.5189 -22646, 66.84969, 112.0469 -22647, 66.68227, 105.1667 -22648, 68.65461, 122.6123 -22649, 69.72195, 118.0798 -22650, 69.39789, 117.1566 -22651, 70.61082, 125.1074 -22652, 66.22358, 110.4053 -22653, 70.31099, 126.7549 -22654, 68.85282, 134.3575 -22655, 69.84827, 129.8123 -22656, 69.80382, 120.1583 -22657, 66.79719, 113.3404 -22658, 68.78234, 136.1364 -22659, 68.63042, 142.019 -22660, 67.06382, 138.7234 -22661, 66.47369, 111.6471 -22662, 67.0678, 121.6606 -22663, 70.53877, 153.2208 -22664, 69.15369, 123.9976 -22665, 66.29498, 125.3838 -22666, 66.87256, 133.81 -22667, 67.12544, 134.5897 -22668, 69.56909, 131.9905 -22669, 67.03174, 136.702 -22670, 66.4968, 127.9662 -22671, 67.5556, 109.1244 -22672, 67.93723, 149.1814 -22673, 66.27955, 131.2398 -22674, 70.08345, 127.6921 -22675, 67.35558, 112.0268 -22676, 64.76129, 135.324 -22677, 69.37296, 119.6408 -22678, 68.95501, 122.0693 -22679, 67.90465, 120.3374 -22680, 66.71124, 117.9071 -22681, 65.76897, 119.6472 -22682, 69.74997, 139.8994 -22683, 68.41754, 144.6354 -22684, 70.48365, 141.2387 -22685, 68.69947, 126.1275 -22686, 67.91544, 139.3144 -22687, 64.26003, 138.8967 -22688, 69.46549, 139.5814 -22689, 72.00386, 126.9035 -22690, 68.50887, 137.5104 -22691, 68.6786, 148.859 -22692, 69.89895, 128.7758 -22693, 68.57138, 138.3081 -22694, 68.97025, 144.2462 -22695, 68.34718, 115.801 -22696, 72.38993, 135.652 -22697, 70.20578, 142.9711 -22698, 69.75085, 129.6653 -22699, 64.09194, 119.3224 -22700, 71.43266, 131.4454 -22701, 67.37224, 135.8829 -22702, 66.33348, 126.2756 -22703, 65.95623, 109.4862 -22704, 69.41866, 129.0734 -22705, 66.28843, 108.9547 -22706, 71.46665, 149.7074 -22707, 71.51152, 132.7706 -22708, 69.24771, 121.9716 -22709, 69.53177, 144.4003 -22710, 67.22302, 103.2602 -22711, 67.93135, 129.3014 -22712, 66.47411, 124.7407 -22713, 68.31675, 139.713 -22714, 73.35404, 150.7569 -22715, 67.46996, 125.8104 -22716, 68.76208, 145.3668 -22717, 66.09377, 139.3107 -22718, 67.45004, 123.2179 -22719, 67.8148, 123.4598 -22720, 67.34877, 126.6511 -22721, 71.09293, 136.7007 -22722, 66.02176, 142.9777 -22723, 66.60069, 127.9869 -22724, 69.93282, 138.0167 -22725, 68.7928, 138.5455 -22726, 65.98657, 111.6272 -22727, 66.96658, 125.4782 -22728, 68.02571, 120.8518 -22729, 67.76658, 132.3844 -22730, 71.68362, 121.7687 -22731, 68.13284, 137.313 -22732, 66.94959, 124.8775 -22733, 68.59926, 130.122 -22734, 68.17404, 138.4723 -22735, 65.94969, 128.6623 -22736, 67.78038, 145.0523 -22737, 69.16229, 133.4977 -22738, 68.84495, 135.0473 -22739, 62.87593, 87.80417 -22740, 65.38831, 114.5963 -22741, 69.61852, 138.186 -22742, 68.48205, 117.8466 -22743, 64.11049, 120.9648 -22744, 69.87984, 144.6479 -22745, 67.76735, 124.5242 -22746, 67.35451, 131.093 -22747, 70.00347, 141.6283 -22748, 67.782, 128.6523 -22749, 70.91393, 133.8196 -22750, 65.724, 116.8975 -22751, 69.41139, 111.6991 -22752, 67.93682, 132.6835 -22753, 68.58455, 127.992 -22754, 69.50539, 133.2801 -22755, 68.94904, 128.2592 -22756, 66.66785, 137.9687 -22757, 66.40117, 126.7388 -22758, 64.44764, 114.5613 -22759, 70.69015, 129.7884 -22760, 68.25112, 128.0135 -22761, 67.4473, 139.9757 -22762, 65.36833, 136.6826 -22763, 67.34133, 133.5039 -22764, 66.46421, 123.7168 -22765, 69.82447, 127.4811 -22766, 64.73067, 112.8504 -22767, 68.26578, 123.2698 -22768, 68.95561, 109.0392 -22769, 64.58086, 119.146 -22770, 74.19842, 141.6148 -22771, 66.6644, 121.794 -22772, 68.02958, 132.4556 -22773, 69.7998, 152.4869 -22774, 68.71084, 119.4949 -22775, 68.62699, 133.9088 -22776, 66.32223, 134.6167 -22777, 68.55855, 132.8311 -22778, 68.53141, 135.5661 -22779, 62.48689, 111.8165 -22780, 68.00704, 110.0622 -22781, 66.30784, 137.3814 -22782, 67.82081, 120.6221 -22783, 67.83951, 133.1991 -22784, 69.5902, 111.5373 -22785, 67.87211, 141.0278 -22786, 67.74583, 102.3371 -22787, 64.71388, 101.4857 -22788, 71.13759, 146.4352 -22789, 68.46782, 143.5551 -22790, 67.8517, 124.7309 -22791, 67.49456, 121.203 -22792, 68.90683, 126.8225 -22793, 66.26091, 108.851 -22794, 68.79987, 141.3204 -22795, 68.59418, 114.3444 -22796, 65.34823, 114.1506 -22797, 69.42848, 141.8919 -22798, 71.12497, 141.1445 -22799, 67.55908, 122.9483 -22800, 66.396, 119.9881 -22801, 68.62226, 119.503 -22802, 67.72435, 136.7854 -22803, 68.47464, 123.3189 -22804, 68.21036, 117.8225 -22805, 72.93173, 137.7735 -22806, 66.67029, 123.5324 -22807, 69.46618, 133.0678 -22808, 69.70422, 116.2886 -22809, 64.06811, 127.9847 -22810, 68.24092, 122.1935 -22811, 65.17573, 124.5714 -22812, 65.69849, 123.4044 -22813, 66.12188, 121.0018 -22814, 66.75351, 113.6246 -22815, 67.124, 130.327 -22816, 68.13272, 126.5551 -22817, 67.68052, 133.1014 -22818, 67.62642, 101.6002 -22819, 68.10599, 119.3721 -22820, 67.87029, 128.1651 -22821, 65.92455, 122.2294 -22822, 68.17315, 141.5252 -22823, 69.90983, 142.9065 -22824, 70.66076, 137.2266 -22825, 66.01225, 124.1513 -22826, 68.1509, 132.5444 -22827, 64.74223, 116.3991 -22828, 67.10415, 140.3787 -22829, 71.26494, 126.1828 -22830, 64.91946, 130.5654 -22831, 65.50098, 125.5682 -22832, 68.43887, 120.3856 -22833, 64.33844, 111.7705 -22834, 67.68823, 129.9065 -22835, 66.06957, 123.5877 -22836, 68.48965, 124.2906 -22837, 67.35924, 129.934 -22838, 67.16705, 118.2155 -22839, 66.10219, 125.8852 -22840, 69.4862, 124.0363 -22841, 70.51144, 140.7336 -22842, 68.89049, 125.4419 -22843, 67.11289, 115.4696 -22844, 69.51603, 139.5932 -22845, 68.86244, 131.8509 -22846, 67.76488, 133.5444 -22847, 65.95197, 126.4559 -22848, 65.55731, 110.9407 -22849, 72.43314, 128.1583 -22850, 68.05046, 126.5532 -22851, 63.42692, 114.5877 -22852, 70.12328, 133.688 -22853, 65.79126, 110.9996 -22854, 68.70108, 135.9715 -22855, 73.28207, 137.8167 -22856, 68.99273, 147.8318 -22857, 67.82843, 135.2744 -22858, 62.94505, 122.372 -22859, 69.51628, 126.2618 -22860, 67.94096, 116.288 -22861, 68.50625, 132.962 -22862, 67.95033, 114.1483 -22863, 68.24256, 128.3786 -22864, 66.74548, 120.3706 -22865, 68.97078, 134.1704 -22866, 67.89432, 119.747 -22867, 67.79059, 128.8443 -22868, 69.35969, 151.1659 -22869, 67.25605, 119.6419 -22870, 69.23614, 143.8642 -22871, 66.1292, 119.0279 -22872, 67.91232, 136.3911 -22873, 69.75562, 108.6263 -22874, 64.53749, 114.2815 -22875, 67.63726, 119.2335 -22876, 64.64337, 103.3826 -22877, 68.76465, 135.6549 -22878, 68.35968, 125.3602 -22879, 67.15012, 110.7928 -22880, 67.86118, 110.2807 -22881, 65.15809, 111.8642 -22882, 68.62459, 147.1759 -22883, 69.70212, 107.5978 -22884, 65.83099, 119.0626 -22885, 66.5626, 108.4966 -22886, 68.09845, 118.1344 -22887, 71.05128, 146.987 -22888, 67.73185, 113.9887 -22889, 70.68351, 137.5274 -22890, 66.52891, 121.9112 -22891, 69.66816, 132.621 -22892, 69.14886, 118.2569 -22893, 68.16218, 125.9458 -22894, 66.39514, 129.8475 -22895, 69.00165, 122.8649 -22896, 67.50031, 118.3179 -22897, 69.70684, 143.0038 -22898, 66.12548, 130.5276 -22899, 69.3575, 143.6705 -22900, 71.21111, 123.7803 -22901, 70.30626, 127.5549 -22902, 68.79866, 113.9144 -22903, 67.98332, 129.6498 -22904, 67.04034, 136.5138 -22905, 65.51177, 125.8274 -22906, 67.5647, 121.5267 -22907, 65.31898, 112.9453 -22908, 68.67641, 133.8246 -22909, 69.69018, 108.3043 -22910, 67.58645, 128.7129 -22911, 69.02146, 131.7672 -22912, 71.22346, 134.1668 -22913, 66.68869, 121.3149 -22914, 68.89188, 116.5565 -22915, 70.25429, 132.284 -22916, 66.69163, 113.6064 -22917, 71.23552, 149.4307 -22918, 72.23127, 136.0526 -22919, 69.14796, 127.1588 -22920, 68.3997, 137.7419 -22921, 69.1157, 137.5853 -22922, 67.44534, 123.8531 -22923, 67.22197, 120.25 -22924, 68.34089, 123.5174 -22925, 68.42363, 130.5575 -22926, 70.02078, 101.0972 -22927, 70.21496, 126.4946 -22928, 66.38077, 133.6296 -22929, 66.71388, 115.4801 -22930, 64.1655, 117.12 -22931, 71.24956, 137.0562 -22932, 69.89254, 147.3662 -22933, 68.98321, 135.968 -22934, 64.57034, 129.1319 -22935, 67.41889, 116.1147 -22936, 69.98766, 137.7019 -22937, 70.43488, 133.2956 -22938, 65.75904, 116.6186 -22939, 64.11045, 115.4852 -22940, 66.59156, 134.6647 -22941, 67.27675, 137.0794 -22942, 69.17155, 136.9795 -22943, 69.6518, 130.5147 -22944, 66.32536, 128.4373 -22945, 64.03352, 114.4831 -22946, 61.92639, 78.01476 -22947, 67.7671, 117.9652 -22948, 66.40118, 109.6265 -22949, 66.88433, 124.1093 -22950, 68.2887, 122.8747 -22951, 66.1441, 116.6754 -22952, 70.22583, 140.134 -22953, 68.68353, 137.0244 -22954, 71.08882, 137.2922 -22955, 64.53211, 112.4629 -22956, 66.54164, 115.2955 -22957, 67.46281, 130.815 -22958, 68.0421, 121.023 -22959, 65.46687, 124.5001 -22960, 68.52141, 113.6681 -22961, 67.96073, 126.2877 -22962, 66.57412, 121.4992 -22963, 67.40978, 137.7122 -22964, 67.55044, 146.7738 -22965, 64.99509, 110.056 -22966, 68.29555, 135.3666 -22967, 65.96557, 133.8862 -22968, 68.96821, 134.2673 -22969, 69.15112, 119.7562 -22970, 68.56283, 128.7529 -22971, 69.75078, 136.582 -22972, 67.47683, 102.3792 -22973, 70.38587, 126.0902 -22974, 68.33742, 135.0531 -22975, 68.81973, 142.3251 -22976, 68.62357, 110.3801 -22977, 63.33985, 102.0817 -22978, 69.12711, 117.5758 -22979, 67.89769, 121.003 -22980, 66.45348, 137.254 -22981, 65.60765, 117.6409 -22982, 69.61332, 124.3246 -22983, 65.2444, 100.6039 -22984, 70.00592, 138.7949 -22985, 68.27914, 126.7719 -22986, 68.01894, 140.9059 -22987, 66.99443, 125.0889 -22988, 66.27568, 120.1084 -22989, 67.53537, 142.9972 -22990, 66.97235, 112.1711 -22991, 70.63806, 145.3795 -22992, 62.8996, 122.5734 -22993, 69.89458, 138.0427 -22994, 71.93148, 145.0405 -22995, 68.87022, 125.7048 -22996, 68.93, 132.8748 -22997, 64.69495, 125.4599 -22998, 68.70088, 125.097 -22999, 69.00687, 141.8557 -23000, 67.0541, 127.0649 -23001, 66.03227, 105.2789 -23002, 65.47238, 123.0281 -23003, 68.47197, 116.8453 -23004, 72.86624, 155.6909 -23005, 69.44922, 122.5776 -23006, 67.63052, 125.2892 -23007, 68.2045, 100.3754 -23008, 66.53317, 124.1705 -23009, 67.27027, 129.1828 -23010, 65.41871, 117.4206 -23011, 71.23007, 141.3686 -23012, 65.94361, 116.2995 -23013, 68.6177, 135.2373 -23014, 70.50911, 124.1658 -23015, 69.85115, 120.489 -23016, 71.86882, 124.1575 -23017, 69.08754, 132.1762 -23018, 68.19593, 127.1534 -23019, 70.29545, 123.0092 -23020, 66.37047, 119.1916 -23021, 69.81223, 135.2679 -23022, 67.11791, 109.1436 -23023, 66.40278, 119.7731 -23024, 66.84852, 138.8225 -23025, 69.11523, 131.8907 -23026, 70.68754, 133.2559 -23027, 65.23047, 125.7246 -23028, 67.79963, 131.9513 -23029, 67.81254, 129.5695 -23030, 68.18637, 114.497 -23031, 64.72897, 113.9349 -23032, 67.22249, 131.9605 -23033, 67.93339, 115.2966 -23034, 66.48779, 120.5557 -23035, 66.56398, 120.0062 -23036, 66.75188, 105.1257 -23037, 66.02021, 126.5255 -23038, 67.9585, 127.2612 -23039, 67.75219, 110.8899 -23040, 73.95494, 154.3987 -23041, 68.63039, 141.3375 -23042, 62.37478, 129.29 -23043, 68.14198, 140.1522 -23044, 68.18139, 117.3218 -23045, 69.02633, 120.1428 -23046, 66.65396, 107.1014 -23047, 70.08721, 141.2284 -23048, 67.67278, 118.0272 -23049, 67.75081, 117.2739 -23050, 69.23325, 126.2547 -23051, 66.37194, 110.396 -23052, 70.10608, 147.4051 -23053, 69.31002, 138.6833 -23054, 68.90824, 136.5244 -23055, 68.92139, 134.8939 -23056, 67.23139, 132.9597 -23057, 65.72498, 138.466 -23058, 65.644, 115.7868 -23059, 67.33561, 143.0319 -23060, 69.78481, 131.0816 -23061, 70.59255, 139.4271 -23062, 68.63899, 122.564 -23063, 65.88659, 127.421 -23064, 68.58695, 138.1849 -23065, 72.62181, 131.941 -23066, 67.19948, 126.541 -23067, 63.83059, 95.14852 -23068, 66.5739, 121.3202 -23069, 68.18941, 124.102 -23070, 67.36899, 131.4176 -23071, 67.99917, 126.5831 -23072, 64.31329, 110.9314 -23073, 69.79204, 145.3659 -23074, 68.63117, 136.1348 -23075, 66.5155, 137.0524 -23076, 66.38747, 121.6402 -23077, 69.64946, 125.6207 -23078, 69.99201, 160.4327 -23079, 69.47095, 127.7372 -23080, 68.77016, 134.2468 -23081, 71.11019, 140.7725 -23082, 68.89861, 118.0075 -23083, 69.31258, 146.593 -23084, 69.5515, 139.4765 -23085, 64.91223, 119.4779 -23086, 68.37362, 118.1811 -23087, 69.53448, 128.3192 -23088, 71.24771, 154.2702 -23089, 68.83289, 127.9049 -23090, 70.97853, 139.8943 -23091, 68.7672, 143.2316 -23092, 70.09748, 131.3648 -23093, 66.41888, 138.25 -23094, 65.86975, 130.1757 -23095, 70.4954, 159.7426 -23096, 65.064, 105.9605 -23097, 66.23465, 146.7267 -23098, 63.36047, 101.3858 -23099, 65.49193, 111.6041 -23100, 69.78248, 123.3267 -23101, 67.16624, 108.0636 -23102, 69.51547, 125.7864 -23103, 68.25933, 117.6366 -23104, 69.56163, 123.3559 -23105, 68.51831, 132.3693 -23106, 68.80896, 133.7864 -23107, 68.56353, 140.9816 -23108, 67.83572, 124.3327 -23109, 69.41269, 142.6121 -23110, 69.68146, 129.8956 -23111, 67.64549, 143.3283 -23112, 66.05269, 122.8764 -23113, 66.27796, 107.2234 -23114, 65.97701, 122.1289 -23115, 66.49181, 104.5214 -23116, 69.4567, 127.3538 -23117, 65.33723, 121.5969 -23118, 66.57846, 124.3407 -23119, 68.01712, 137.5218 -23120, 71.9112, 138.2502 -23121, 69.96109, 142.6425 -23122, 66.49663, 115.0091 -23123, 69.70181, 127.0448 -23124, 68.75589, 117.8107 -23125, 68.24339, 124.7115 -23126, 71.0885, 134.7542 -23127, 69.22398, 128.7649 -23128, 65.73834, 132.8322 -23129, 66.723, 122.3498 -23130, 66.46585, 143.7961 -23131, 70.17314, 133.0561 -23132, 62.87311, 118.5005 -23133, 71.03165, 157.4647 -23134, 65.93252, 123.4121 -23135, 68.38672, 133.2561 -23136, 68.48179, 131.7267 -23137, 66.76412, 127.6081 -23138, 70.28787, 145.6777 -23139, 67.95232, 126.7402 -23140, 66.4042, 107.4818 -23141, 67.99874, 125.0152 -23142, 68.94294, 132.508 -23143, 66.99344, 117.7892 -23144, 67.73609, 127.2783 -23145, 65.91236, 138.3038 -23146, 69.29849, 141.5628 -23147, 69.19949, 127.7265 -23148, 67.43514, 143.9286 -23149, 71.4622, 132.334 -23150, 69.06087, 139.6586 -23151, 66.77321, 128.0555 -23152, 68.79889, 126.6591 -23153, 67.86558, 143.0202 -23154, 68.57647, 120.5964 -23155, 65.96871, 133.0051 -23156, 66.58142, 120.7591 -23157, 68.05952, 119.5858 -23158, 70.24508, 128.3668 -23159, 64.83437, 113.7229 -23160, 68.73522, 137.6596 -23161, 68.7765, 136.8831 -23162, 68.33747, 119.7698 -23163, 70.23944, 142.1361 -23164, 68.81975, 140.2789 -23165, 68.00236, 149.5672 -23166, 64.70248, 119.8107 -23167, 69.24303, 140.6072 -23168, 69.73554, 112.9331 -23169, 69.90308, 118.7222 -23170, 70.26048, 142.8739 -23171, 68.15806, 118.4471 -23172, 68.16444, 136.4492 -23173, 66.89046, 125.3586 -23174, 65.22883, 117.7991 -23175, 68.87187, 130.3033 -23176, 68.18349, 142.1478 -23177, 64.41925, 133.8882 -23178, 66.7988, 111.9541 -23179, 69.8922, 131.1349 -23180, 67.47421, 127.7576 -23181, 65.32392, 100.9973 -23182, 67.69222, 124.5089 -23183, 70.27339, 149.3882 -23184, 69.54348, 138.795 -23185, 73.32067, 131.1796 -23186, 66.05531, 120.903 -23187, 65.51404, 123.1225 -23188, 69.69787, 148.9949 -23189, 65.81341, 127.2974 -23190, 69.3073, 133.1362 -23191, 64.86268, 108.1662 -23192, 69.16539, 138.3731 -23193, 70.52093, 136.9358 -23194, 68.1878, 118.8524 -23195, 66.08498, 113.2371 -23196, 65.10427, 113.6349 -23197, 68.62122, 116.6541 -23198, 71.42976, 127.3845 -23199, 65.69791, 117.3124 -23200, 69.80748, 128.074 -23201, 69.92772, 136.1304 -23202, 69.41298, 130.348 -23203, 70.06942, 126.2846 -23204, 66.39166, 118.4999 -23205, 66.07042, 107.3307 -23206, 67.94108, 131.225 -23207, 66.88941, 127.8534 -23208, 68.96017, 124.9296 -23209, 69.5704, 156.8531 -23210, 68.2825, 128.9134 -23211, 66.7166, 130.1374 -23212, 66.72626, 108.1246 -23213, 66.57273, 114.7724 -23214, 68.04107, 126.3943 -23215, 68.6295, 139.1018 -23216, 68.49436, 113.7604 -23217, 66.39979, 114.3961 -23218, 68.28212, 132.8866 -23219, 68.52069, 139.9603 -23220, 69.03432, 120.0319 -23221, 64.99547, 129.0647 -23222, 67.91196, 112.3713 -23223, 66.91361, 116.2512 -23224, 70.70381, 139.5198 -23225, 67.40064, 137.1524 -23226, 69.05353, 127.2322 -23227, 65.85398, 121.7386 -23228, 66.79527, 121.806 -23229, 68.85892, 145.3855 -23230, 66.42832, 103.8422 -23231, 66.91067, 126.6949 -23232, 70.43889, 137.7195 -23233, 67.94999, 139.0592 -23234, 69.95065, 139.1737 -23235, 72.71908, 134.6013 -23236, 65.74199, 136.7099 -23237, 65.51557, 125.163 -23238, 70.21226, 119.1812 -23239, 69.16742, 128.4386 -23240, 68.82771, 105.6454 -23241, 68.60122, 132.7843 -23242, 65.56691, 127.4552 -23243, 69.79458, 120.7382 -23244, 68.50628, 131.7647 -23245, 66.57019, 116.6893 -23246, 70.03926, 134.5167 -23247, 67.9869, 141.6655 -23248, 71.22405, 151.3256 -23249, 68.74939, 126.1276 -23250, 67.24515, 139.1668 -23251, 67.73462, 114.4462 -23252, 67.46116, 127.3858 -23253, 69.2147, 140.1225 -23254, 67.51576, 126.9627 -23255, 66.10796, 114.8271 -23256, 68.5057, 117.2246 -23257, 66.73397, 122.3952 -23258, 69.36366, 125.575 -23259, 71.87173, 146.8516 -23260, 65.49077, 118.2955 -23261, 66.34021, 108.1274 -23262, 66.91425, 112.1228 -23263, 69.28626, 134.7612 -23264, 67.79093, 124.6467 -23265, 69.07817, 143.6054 -23266, 67.44134, 146.0127 -23267, 68.73085, 134.9284 -23268, 69.47641, 129.3397 -23269, 68.70536, 144.436 -23270, 64.93749, 106.7489 -23271, 67.24113, 111.1544 -23272, 66.56344, 131.8655 -23273, 65.53499, 94.12903 -23274, 63.90174, 118.1282 -23275, 69.67198, 133.5641 -23276, 64.43413, 124.1712 -23277, 64.51197, 115.5299 -23278, 67.70097, 133.1008 -23279, 64.90215, 123.7036 -23280, 67.99061, 129.6754 -23281, 67.82413, 120.6313 -23282, 68.52722, 126.7222 -23283, 69.2092, 121.3021 -23284, 66.20442, 115.7721 -23285, 71.109, 132.442 -23286, 68.57075, 114.2557 -23287, 68.00623, 137.8888 -23288, 64.09668, 113.0901 -23289, 68.75021, 138.3973 -23290, 65.47736, 116.194 -23291, 68.75545, 135.4326 -23292, 67.45601, 117.7914 -23293, 65.98877, 120.6623 -23294, 69.37016, 127.3013 -23295, 67.6734, 123.4882 -23296, 69.89525, 119.6832 -23297, 69.61509, 128.0375 -23298, 69.3937, 137.0006 -23299, 67.97247, 102.2394 -23300, 69.22724, 127.8642 -23301, 67.9542, 120.0739 -23302, 67.95068, 115.6076 -23303, 68.40984, 145.4263 -23304, 68.77759, 131.7281 -23305, 65.13204, 122.8043 -23306, 68.81528, 126.5719 -23307, 64.91737, 118.1884 -23308, 69.24, 141.1041 -23309, 64.37656, 106.7087 -23310, 66.94537, 128.9508 -23311, 67.93057, 122.6122 -23312, 67.94897, 110.6746 -23313, 67.85108, 123.105 -23314, 66.58719, 114.1358 -23315, 69.6734, 133.9095 -23316, 69.99226, 131.5353 -23317, 66.01009, 111.5487 -23318, 69.06337, 140.4059 -23319, 68.44652, 122.5025 -23320, 67.77966, 120.9614 -23321, 68.28074, 126.8558 -23322, 67.85813, 116.385 -23323, 66.32684, 104.7552 -23324, 64.69309, 116.3749 -23325, 69.99022, 153.7945 -23326, 71.14046, 139.3483 -23327, 73.11374, 141.5157 -23328, 67.07803, 128.1482 -23329, 67.86878, 111.8266 -23330, 66.00182, 122.9777 -23331, 66.90908, 135.2963 -23332, 66.6852, 127.4327 -23333, 67.09584, 138.9995 -23334, 69.32346, 129.5811 -23335, 71.51046, 152.7026 -23336, 67.95718, 126.8874 -23337, 71.95199, 148.9864 -23338, 64.63369, 101.6115 -23339, 67.76332, 102.2017 -23340, 67.47196, 128.7711 -23341, 68.9559, 128.348 -23342, 68.91935, 130.601 -23343, 69.72604, 129.9311 -23344, 69.36628, 126.0097 -23345, 69.36979, 160.0595 -23346, 70.82097, 125.9832 -23347, 67.88765, 130.1885 -23348, 66.24709, 108.1229 -23349, 65.29888, 126.1983 -23350, 68.06429, 115.6124 -23351, 68.31388, 157.1449 -23352, 66.80653, 129.4758 -23353, 70.76233, 128.8173 -23354, 67.91801, 131.1724 -23355, 67.7657, 137.7214 -23356, 68.41708, 129.1072 -23357, 70.60391, 134.6567 -23358, 70.95676, 152.5077 -23359, 67.80891, 119.3174 -23360, 68.05761, 144.4357 -23361, 71.64101, 137.6723 -23362, 69.56807, 131.7272 -23363, 68.37897, 124.4672 -23364, 69.52961, 139.0711 -23365, 67.91638, 129.7194 -23366, 65.90163, 130.2564 -23367, 66.40618, 120.6583 -23368, 66.75016, 127.253 -23369, 70.67254, 128.2802 -23370, 66.19564, 121.9578 -23371, 63.86903, 108.1252 -23372, 67.31392, 124.2722 -23373, 68.76809, 138.7117 -23374, 65.20943, 116.157 -23375, 66.98591, 115.0587 -23376, 67.42523, 136.1542 -23377, 66.50837, 120.1535 -23378, 67.6117, 121.1889 -23379, 66.61201, 121.5732 -23380, 70.86568, 118.6469 -23381, 71.32734, 128.9839 -23382, 65.4778, 112.1488 -23383, 67.97456, 143.301 -23384, 64.43034, 111.1606 -23385, 64.28602, 107.6355 -23386, 66.96798, 126.725 -23387, 70.1485, 131.5029 -23388, 69.33442, 151.3078 -23389, 64.16934, 112.0675 -23390, 68.13767, 119.5635 -23391, 67.08413, 112.2697 -23392, 67.41342, 121.7801 -23393, 66.12667, 114.907 -23394, 69.20029, 131.6151 -23395, 68.12415, 123.0866 -23396, 68.46751, 112.8145 -23397, 68.76315, 142.2609 -23398, 68.57141, 125.4749 -23399, 66.26613, 130.1712 -23400, 71.68987, 134.2174 -23401, 69.02855, 137.7087 -23402, 68.18153, 128.3747 -23403, 68.09645, 134.3938 -23404, 67.62189, 123.3117 -23405, 67.09138, 118.3389 -23406, 63.55618, 102.794 -23407, 62.85508, 114.4639 -23408, 68.7842, 131.0257 -23409, 63.50044, 120.7176 -23410, 67.44217, 134.7953 -23411, 67.98901, 129.3666 -23412, 70.35684, 147.6725 -23413, 69.72082, 128.5478 -23414, 64.46472, 100.3255 -23415, 67.97104, 130.713 -23416, 66.30166, 125.9627 -23417, 70.70031, 134.4612 -23418, 71.09133, 140.8249 -23419, 67.99134, 145.7668 -23420, 69.21008, 134.423 -23421, 66.88274, 126.4537 -23422, 68.36795, 125.8251 -23423, 68.49492, 134.5742 -23424, 68.58014, 153.277 -23425, 67.89223, 128.9499 -23426, 67.11189, 96.36193 -23427, 63.31715, 104.4658 -23428, 67.75509, 136.1973 -23429, 67.73474, 121.4205 -23430, 70.0064, 133.8839 -23431, 71.4794, 141.4209 -23432, 66.55546, 111.2872 -23433, 68.93126, 130.5566 -23434, 68.92078, 127.2883 -23435, 69.87076, 106.3125 -23436, 68.83485, 119.3079 -23437, 65.01842, 151.4337 -23438, 67.6557, 118.4406 -23439, 67.04163, 133.2765 -23440, 69.71126, 126.3546 -23441, 66.50183, 131.5315 -23442, 68.33511, 144.3527 -23443, 66.9407, 110.8551 -23444, 67.40925, 136.9725 -23445, 69.31165, 131.074 -23446, 64.06236, 115.105 -23447, 65.56181, 116.5971 -23448, 64.77319, 121.3992 -23449, 68.96452, 131.9731 -23450, 66.63747, 118.1281 -23451, 69.56752, 135.5865 -23452, 65.1007, 109.2654 -23453, 64.9936, 110.6938 -23454, 70.66323, 128.1262 -23455, 69.00077, 112.673 -23456, 70.10951, 114.8419 -23457, 67.34384, 114.9568 -23458, 68.60818, 134.9085 -23459, 67.23956, 107.1732 -23460, 72.29201, 139.9045 -23461, 67.08503, 120.075 -23462, 67.42026, 134.753 -23463, 69.11345, 124.4949 -23464, 72.35402, 138.0597 -23465, 65.26185, 121.3037 -23466, 68.44809, 119.1946 -23467, 63.33709, 129.6209 -23468, 69.63855, 127.8437 -23469, 70.94026, 120.1561 -23470, 68.87976, 129.9892 -23471, 66.86712, 117.3156 -23472, 71.04505, 130.1568 -23473, 68.38827, 119.0647 -23474, 67.52106, 122.7459 -23475, 69.87186, 132.0456 -23476, 71.55171, 117.5422 -23477, 66.46162, 127.9555 -23478, 72.02569, 124.1535 -23479, 67.57232, 118.5305 -23480, 69.00459, 120.4771 -23481, 65.95744, 133.5889 -23482, 69.42784, 138.1965 -23483, 66.84795, 110.233 -23484, 68.35329, 123.8493 -23485, 65.86502, 123.3062 -23486, 69.835, 140.2449 -23487, 67.66145, 126.0904 -23488, 68.19426, 144.2229 -23489, 69.32705, 129.9933 -23490, 67.61906, 116.2005 -23491, 73.40972, 133.009 -23492, 66.96963, 127.496 -23493, 66.12847, 105.4284 -23494, 67.31517, 123.035 -23495, 70.20341, 139.4022 -23496, 68.61279, 136.1018 -23497, 68.2315, 128.3552 -23498, 69.01795, 120.3067 -23499, 69.11662, 132.9447 -23500, 67.01546, 130.2632 -23501, 69.66929, 126.4905 -23502, 68.84648, 115.084 -23503, 68.62712, 120.257 -23504, 68.34286, 124.6374 -23505, 68.00429, 110.7882 -23506, 68.53424, 138.4216 -23507, 68.86421, 125.0711 -23508, 68.66789, 116.5181 -23509, 64.77087, 106.5228 -23510, 66.59801, 130.4351 -23511, 68.51877, 135.0892 -23512, 67.72455, 122.4271 -23513, 68.65578, 152.6253 -23514, 66.55626, 135.1086 -23515, 65.6087, 120.4908 -23516, 65.99372, 127.2212 -23517, 69.59156, 131.6555 -23518, 66.83509, 115.5445 -23519, 68.49693, 122.8879 -23520, 68.18592, 141.1364 -23521, 65.89922, 113.8338 -23522, 66.9475, 105.6898 -23523, 69.06182, 134.9376 -23524, 68.33972, 125.0717 -23525, 66.07267, 132.8536 -23526, 69.31936, 138.2366 -23527, 65.84808, 131.2502 -23528, 67.36294, 118.4514 -23529, 67.3593, 117.1267 -23530, 64.4803, 114.5619 -23531, 69.90125, 145.3534 -23532, 66.98612, 146.5458 -23533, 69.10503, 121.7325 -23534, 67.52838, 111.8378 -23535, 69.42915, 123.1078 -23536, 67.06781, 118.8862 -23537, 67.46411, 126.3954 -23538, 68.88653, 120.841 -23539, 67.0299, 111.8676 -23540, 64.80287, 122.305 -23541, 70.12057, 128.2378 -23542, 66.70331, 137.0292 -23543, 65.61686, 124.6061 -23544, 66.94092, 116.4586 -23545, 65.96306, 94.7257 -23546, 65.67991, 123.1875 -23547, 69.71521, 131.7122 -23548, 72.27532, 154.9474 -23549, 68.9462, 125.8252 -23550, 65.77925, 120.1731 -23551, 67.74371, 133.4557 -23552, 67.50658, 138.89 -23553, 64.7387, 129.9819 -23554, 70.40075, 138.2906 -23555, 66.31113, 118.736 -23556, 69.07813, 132.6275 -23557, 65.591, 118.3107 -23558, 67.68762, 120.8594 -23559, 66.44951, 120.1558 -23560, 68.08673, 126.8226 -23561, 66.24786, 127.0943 -23562, 70.99353, 123.479 -23563, 68.2099, 127.1802 -23564, 67.95421, 125.725 -23565, 68.83812, 129.5121 -23566, 65.96009, 128.081 -23567, 66.27192, 118.0759 -23568, 65.97624, 115.5401 -23569, 66.75536, 121.1873 -23570, 70.71061, 142.0151 -23571, 69.7805, 121.0935 -23572, 68.54296, 139.0712 -23573, 68.1192, 108.6708 -23574, 65.3068, 129.9528 -23575, 69.78927, 139.6959 -23576, 68.62776, 126.7958 -23577, 70.62247, 130.7473 -23578, 68.90663, 139.9702 -23579, 69.10172, 147.4603 -23580, 65.38912, 106.2248 -23581, 67.42929, 118.2165 -23582, 68.36866, 129.2801 -23583, 68.36248, 120.0642 -23584, 66.87574, 122.173 -23585, 69.29149, 127.6393 -23586, 65.28542, 129.8255 -23587, 66.6047, 119.5932 -23588, 66.85857, 137.179 -23589, 71.25571, 140.6042 -23590, 70.01811, 125.5674 -23591, 68.14057, 121.5594 -23592, 70.42527, 136.4209 -23593, 70.19124, 116.1543 -23594, 70.03089, 121.4123 -23595, 66.38573, 126.3671 -23596, 66.9214, 125.7389 -23597, 67.42805, 135.3317 -23598, 67.65681, 110.0211 -23599, 67.35105, 110.7792 -23600, 66.64091, 119.5543 -23601, 69.83869, 146.7883 -23602, 66.59553, 124.4923 -23603, 69.77893, 122.8878 -23604, 66.08192, 128.2059 -23605, 70.75962, 145.1159 -23606, 68.33049, 109.8427 -23607, 67.25612, 139.0113 -23608, 70.61119, 143.3182 -23609, 67.56781, 112.6521 -23610, 70.97495, 148.0819 -23611, 70.12654, 129.6234 -23612, 68.78941, 128.9925 -23613, 67.18784, 110.9939 -23614, 67.1599, 121.0722 -23615, 67.87817, 132.0587 -23616, 69.82444, 124.1746 -23617, 68.68474, 116.2746 -23618, 69.35291, 130.007 -23619, 68.57852, 135.4695 -23620, 67.33814, 133.6925 -23621, 68.19909, 124.0152 -23622, 63.92008, 113.4979 -23623, 68.02589, 121.0372 -23624, 66.5546, 127.0069 -23625, 67.95995, 112.8356 -23626, 67.45313, 138.8983 -23627, 69.72472, 146.8345 -23628, 65.79407, 117.257 -23629, 68.77865, 148.2023 -23630, 65.47726, 110.3392 -23631, 68.95735, 124.7896 -23632, 68.41169, 137.9051 -23633, 67.62647, 134.5912 -23634, 66.45056, 136.37 -23635, 68.41418, 136.993 -23636, 73.46216, 140.968 -23637, 65.43572, 118.0352 -23638, 67.99082, 135.9919 -23639, 67.52665, 122.5461 -23640, 67.73934, 115.2443 -23641, 65.96595, 119.5018 -23642, 68.87961, 121.7995 -23643, 68.08036, 127.2558 -23644, 67.36171, 120.6458 -23645, 64.38354, 119.3323 -23646, 69.75639, 126.066 -23647, 66.8137, 106.6755 -23648, 67.46087, 121.3847 -23649, 68.99738, 118.3578 -23650, 66.52827, 123.3633 -23651, 69.43908, 136.248 -23652, 67.88492, 122.1517 -23653, 70.61052, 147.686 -23654, 69.48816, 130.5616 -23655, 67.12804, 122.7826 -23656, 67.75649, 117.9294 -23657, 70.94686, 131.9377 -23658, 68.2358, 125.9982 -23659, 68.81174, 135.5761 -23660, 69.37167, 130.0714 -23661, 66.56234, 123.6984 -23662, 67.51121, 115.6791 -23663, 67.92882, 129.482 -23664, 64.63454, 109.9452 -23665, 67.79166, 118.3516 -23666, 67.04792, 125.6464 -23667, 68.56413, 112.2504 -23668, 67.53116, 124.9106 -23669, 67.71164, 130.67 -23670, 71.49767, 128.9497 -23671, 66.42399, 121.8209 -23672, 65.25687, 115.1695 -23673, 67.02666, 121.5475 -23674, 68.4504, 122.1388 -23675, 73.55566, 149.8402 -23676, 69.17741, 131.2888 -23677, 67.4203, 110.133 -23678, 67.42349, 130.7954 -23679, 70.42099, 127.0184 -23680, 67.02709, 116.7578 -23681, 66.33083, 129.3366 -23682, 69.55259, 133.0437 -23683, 69.55744, 135.4041 -23684, 67.25328, 138.7002 -23685, 66.1666, 105.7041 -23686, 68.87957, 98.57059 -23687, 69.62485, 131.5031 -23688, 68.47403, 129.3925 -23689, 65.07886, 140.2449 -23690, 67.07668, 137.308 -23691, 65.87754, 121.0767 -23692, 68.13293, 123.9844 -23693, 70.14968, 121.9132 -23694, 65.34486, 111.9794 -23695, 66.07233, 123.6313 -23696, 68.10652, 129.6434 -23697, 71.04529, 139.779 -23698, 64.75341, 119.3351 -23699, 67.33457, 110.3688 -23700, 64.26607, 127.348 -23701, 66.25028, 122.8633 -23702, 69.80613, 126.2564 -23703, 70.31933, 132.2946 -23704, 65.90373, 122.0525 -23705, 68.12881, 111.4134 -23706, 69.43281, 120.0944 -23707, 69.05555, 140.1024 -23708, 70.16747, 139.4727 -23709, 70.72975, 152.7356 -23710, 69.50996, 137.1134 -23711, 67.74268, 136.3711 -23712, 67.58253, 128.0786 -23713, 65.01312, 125.7965 -23714, 67.06595, 129.959 -23715, 68.32618, 129.2915 -23716, 67.4883, 132.394 -23717, 67.81802, 121.1499 -23718, 67.86423, 122.2616 -23719, 67.04793, 144.7241 -23720, 69.56793, 124.4291 -23721, 64.52939, 128.9372 -23722, 68.42798, 122.4175 -23723, 68.71113, 112.1148 -23724, 66.14989, 138.2484 -23725, 72.84817, 151.3727 -23726, 71.75528, 136.2952 -23727, 66.20062, 122.2395 -23728, 71.30122, 122.1991 -23729, 72.70475, 106.6605 -23730, 66.4848, 131.0492 -23731, 65.73936, 103.8932 -23732, 65.73932, 116.6705 -23733, 68.36851, 126.187 -23734, 66.78073, 123.7823 -23735, 65.25826, 95.63814 -23736, 69.25203, 125.6851 -23737, 68.19473, 113.3283 -23738, 67.42308, 127.9037 -23739, 68.59131, 121.6313 -23740, 69.93451, 112.2096 -23741, 68.35495, 137.9728 -23742, 67.77473, 133.3277 -23743, 70.20824, 136.6606 -23744, 64.81088, 111.9485 -23745, 70.52361, 135.5258 -23746, 68.65188, 115.0439 -23747, 67.0511, 131.1182 -23748, 69.31371, 132.4638 -23749, 67.36956, 128.4464 -23750, 70.15169, 114.8211 -23751, 65.51921, 113.3363 -23752, 70.00466, 104.466 -23753, 68.0189, 129.3333 -23754, 66.72787, 103.2365 -23755, 69.81422, 132.2248 -23756, 67.4484, 105.256 -23757, 64.50036, 126.8106 -23758, 67.42181, 127.379 -23759, 69.54484, 135.6098 -23760, 66.78251, 94.51209 -23761, 68.02583, 135.0232 -23762, 69.59756, 126.0523 -23763, 69.70111, 147.8201 -23764, 68.69898, 131.2838 -23765, 69.50665, 139.9177 -23766, 67.16676, 125.2779 -23767, 66.01105, 130.5078 -23768, 68.95166, 129.3768 -23769, 68.38876, 119.2589 -23770, 67.47329, 132.4444 -23771, 66.73831, 128.1593 -23772, 64.92467, 96.91718 -23773, 71.2568, 130.6852 -23774, 68.64395, 136.5972 -23775, 67.67603, 124.4685 -23776, 65.50539, 143.9237 -23777, 64.31386, 119.0699 -23778, 69.72695, 119.3308 -23779, 65.11523, 125.7234 -23780, 63.70715, 111.0903 -23781, 69.94478, 128.5573 -23782, 67.20119, 113.6719 -23783, 71.38651, 141.1154 -23784, 66.74038, 133.1715 -23785, 65.21928, 125.0902 -23786, 66.83913, 129.4363 -23787, 69.02398, 130.9462 -23788, 67.32826, 112.6738 -23789, 66.59493, 127.1637 -23790, 71.73466, 145.4267 -23791, 66.33824, 123.3295 -23792, 67.0491, 123.2213 -23793, 70.64134, 152.056 -23794, 69.59606, 118.9768 -23795, 66.78068, 119.4823 -23796, 69.39063, 149.617 -23797, 69.90303, 133.9469 -23798, 72.73727, 144.2981 -23799, 68.39263, 132.5303 -23800, 68.31048, 129.9349 -23801, 66.94796, 113.807 -23802, 68.97424, 131.1916 -23803, 63.82304, 120.9811 -23804, 67.42872, 134.8411 -23805, 67.44922, 122.6827 -23806, 68.4922, 143.6419 -23807, 65.45648, 99.10252 -23808, 67.46239, 125.3729 -23809, 68.06118, 119.3436 -23810, 69.35205, 127.3954 -23811, 67.1694, 120.7452 -23812, 69.16451, 138.1299 -23813, 67.84407, 117.4335 -23814, 69.74531, 136.4161 -23815, 69.50049, 118.8787 -23816, 65.59756, 109.2654 -23817, 65.7887, 121.8958 -23818, 67.73988, 121.1281 -23819, 67.45264, 107.8988 -23820, 66.76519, 118.5142 -23821, 69.16573, 122.5451 -23822, 67.64803, 130.9586 -23823, 68.99719, 126.3192 -23824, 66.95571, 114.573 -23825, 68.21681, 139.3253 -23826, 70.59044, 135.6509 -23827, 67.01016, 136.7692 -23828, 67.16363, 112.0325 -23829, 67.31394, 114.5343 -23830, 68.61835, 135.0315 -23831, 67.52474, 129.9562 -23832, 68.7303, 132.5218 -23833, 68.51045, 113.1181 -23834, 70.2755, 124.5574 -23835, 69.58278, 132.3214 -23836, 68.17009, 126.5205 -23837, 68.29276, 130.0106 -23838, 69.6923, 140.5433 -23839, 70.30843, 136.5605 -23840, 65.24029, 116.5097 -23841, 71.56487, 132.1166 -23842, 67.86942, 130.7553 -23843, 67.8101, 144.9624 -23844, 66.69452, 119.4778 -23845, 68.80517, 129.8844 -23846, 67.00182, 134.3311 -23847, 68.36228, 144.5173 -23848, 70.3389, 131.5169 -23849, 68.009, 126.9959 -23850, 65.48455, 136.5241 -23851, 69.68966, 125.4997 -23852, 68.552, 129.4829 -23853, 68.2096, 138.6158 -23854, 66.93118, 121.261 -23855, 67.46192, 119.6095 -23856, 69.29621, 107.5141 -23857, 68.12627, 130.5966 -23858, 66.35397, 124.3943 -23859, 68.31918, 120.5494 -23860, 67.79233, 119.2799 -23861, 66.99949, 124.8734 -23862, 69.77773, 131.3978 -23863, 69.52365, 147.8093 -23864, 66.95733, 129.7038 -23865, 68.37534, 117.5037 -23866, 67.07925, 137.0927 -23867, 64.60565, 98.9372 -23868, 66.65496, 139.758 -23869, 69.01472, 121.4022 -23870, 66.8597, 122.6126 -23871, 69.87952, 144.0689 -23872, 64.61346, 103.4199 -23873, 67.75415, 134.9398 -23874, 73.02684, 139.7916 -23875, 68.15447, 128.9553 -23876, 72.59702, 136.8067 -23877, 68.01914, 112.0903 -23878, 65.82187, 112.6344 -23879, 68.81957, 130.1162 -23880, 71.317, 144.7312 -23881, 70.00255, 137.785 -23882, 66.38261, 122.7683 -23883, 68.21355, 140.6809 -23884, 67.74003, 108.2607 -23885, 70.18718, 122.1478 -23886, 71.83265, 130.342 -23887, 67.36621, 116.9097 -23888, 68.57086, 135.0217 -23889, 71.04741, 151.1236 -23890, 66.59795, 123.6365 -23891, 68.81107, 118.8078 -23892, 65.33076, 116.2683 -23893, 68.52512, 129.2716 -23894, 68.01263, 133.3037 -23895, 68.81095, 129.318 -23896, 71.415, 142.9992 -23897, 73.38057, 154.3189 -23898, 69.0571, 127.9148 -23899, 66.30593, 125.7792 -23900, 67.19635, 120.2431 -23901, 66.82731, 118.848 -23902, 70.80376, 131.1233 -23903, 69.21079, 126.0975 -23904, 68.97666, 140.9174 -23905, 70.93475, 141 -23906, 69.29018, 137.2974 -23907, 67.88454, 132.3025 -23908, 68.839, 139.0026 -23909, 68.75738, 128.0374 -23910, 66.63057, 118.8852 -23911, 68.70439, 122.1627 -23912, 70.42439, 142.969 -23913, 68.09534, 120.9784 -23914, 68.73448, 155.5583 -23915, 66.32387, 126.5144 -23916, 68.38525, 133.0024 -23917, 71.26558, 129.0136 -23918, 70.30804, 139.5592 -23919, 72.37914, 125.4124 -23920, 70.68229, 145.6807 -23921, 69.25524, 116.9842 -23922, 68.61717, 118.0604 -23923, 69.95234, 154.2652 -23924, 67.21192, 122.616 -23925, 68.95803, 140.1877 -23926, 70.21225, 115.701 -23927, 66.06475, 117.0679 -23928, 69.89075, 153.5111 -23929, 65.70868, 118.8838 -23930, 67.40897, 131.353 -23931, 67.80336, 128.5892 -23932, 66.77537, 126.0811 -23933, 69.39472, 124.5088 -23934, 68.03254, 152.3259 -23935, 70.68853, 142.0573 -23936, 64.90623, 125.4661 -23937, 66.7301, 124.653 -23938, 66.05134, 125.7801 -23939, 65.12063, 107.4916 -23940, 70.73337, 136.9526 -23941, 70.21345, 129.7068 -23942, 67.41542, 144.5605 -23943, 69.81576, 121.2493 -23944, 69.08556, 124.4855 -23945, 68.79164, 125.9361 -23946, 64.48761, 124.4471 -23947, 65.63039, 122.1341 -23948, 63.8873, 101.9472 -23949, 64.23075, 110.6193 -23950, 68.96118, 138.7769 -23951, 67.28415, 117.8188 -23952, 67.95165, 129.1463 -23953, 66.13126, 121.0599 -23954, 69.68175, 125.9135 -23955, 68.97307, 132.694 -23956, 68.54922, 140.4031 -23957, 72.05551, 144.0404 -23958, 69.71957, 127.4787 -23959, 66.86686, 144.6107 -23960, 68.5857, 132.7412 -23961, 67.71756, 150.1169 -23962, 69.84981, 115.8517 -23963, 70.80466, 148.1321 -23964, 69.82289, 136.5182 -23965, 68.44916, 118.8654 -23966, 64.51651, 124.292 -23967, 66.39716, 102.9907 -23968, 70.74389, 119.446 -23969, 68.03206, 126.3614 -23970, 70.51117, 146.8083 -23971, 68.10873, 141.6847 -23972, 67.23845, 115.9517 -23973, 68.54145, 146.4722 -23974, 66.88341, 120.6493 -23975, 67.94309, 127.9486 -23976, 70.47829, 140.5446 -23977, 67.41672, 103.9911 -23978, 71.68845, 138.8903 -23979, 68.42777, 132.1107 -23980, 69.80496, 139.5662 -23981, 69.95499, 123.728 -23982, 66.12776, 129.0935 -23983, 66.77574, 104.4298 -23984, 68.88634, 146.4716 -23985, 66.04019, 122.0205 -23986, 66.82725, 105.2155 -23987, 71.84956, 114.3322 -23988, 66.5493, 120.0294 -23989, 66.64194, 122.2388 -23990, 69.40514, 125.8462 -23991, 68.9732, 149.142 -23992, 68.89927, 118.6997 -23993, 66.49234, 114.5492 -23994, 69.66246, 123.1604 -23995, 71.37386, 119.0819 -23996, 68.49401, 128.6116 -23997, 66.74375, 116.3968 -23998, 68.17463, 136.3225 -23999, 66.44601, 109.0425 -24000, 66.93173, 127.6166 -24001, 71.05722, 129.2659 -24002, 70.44551, 132.4324 -24003, 66.78778, 123.2117 -24004, 66.99974, 104.313 -24005, 66.93056, 129.3818 -24006, 68.64546, 156.5212 -24007, 68.33571, 116.6739 -24008, 67.13465, 131.0346 -24009, 66.99755, 137.65 -24010, 66.55502, 109.5773 -24011, 67.6653, 118.1356 -24012, 68.29447, 121.9493 -24013, 67.86169, 136.1423 -24014, 65.99617, 123.9677 -24015, 69.31348, 126.5029 -24016, 66.8696, 128.1357 -24017, 67.89663, 111.9666 -24018, 68.59532, 132.2773 -24019, 65.47889, 119.7798 -24020, 65.17519, 122.6844 -24021, 69.09782, 121.3777 -24022, 68.59388, 135.8185 -24023, 67.38888, 107.0327 -24024, 67.39861, 148.6724 -24025, 67.55792, 118.6378 -24026, 68.62413, 135.944 -24027, 68.57569, 143.4643 -24028, 69.64614, 139.2707 -24029, 70.87591, 153.1772 -24030, 66.54682, 120.1556 -24031, 66.75683, 122.6771 -24032, 69.0924, 132.2348 -24033, 66.26872, 125.055 -24034, 70.44345, 129.744 -24035, 65.63798, 100.8841 -24036, 66.14059, 125.2816 -24037, 69.02744, 116.3008 -24038, 69.11634, 135.7018 -24039, 66.91189, 124.487 -24040, 67.47984, 118.6579 -24041, 66.27411, 142.8314 -24042, 69.06754, 133.5337 -24043, 68.74367, 113.0626 -24044, 67.78497, 123.231 -24045, 66.80328, 121.5905 -24046, 67.49976, 125.0247 -24047, 65.05186, 123.9833 -24048, 69.20162, 105.2719 -24049, 69.61355, 124.7545 -24050, 70.41472, 130.2035 -24051, 62.91894, 121.8655 -24052, 69.06546, 125.3295 -24053, 68.80458, 123.1664 -24054, 67.55559, 144.891 -24055, 69.75067, 136.7792 -24056, 68.04394, 129.1908 -24057, 70.18295, 107.8295 -24058, 68.99489, 141.8741 -24059, 67.51961, 128.5576 -24060, 64.56646, 119.602 -24061, 71.95831, 135.2597 -24062, 69.0224, 144.1056 -24063, 66.51118, 122.3771 -24064, 67.9872, 121.1185 -24065, 67.45834, 111.0184 -24066, 67.4141, 136.7198 -24067, 65.22365, 112.0242 -24068, 69.31591, 142.3476 -24069, 69.34287, 135.2131 -24070, 68.50494, 143.4556 -24071, 70.94343, 137.6151 -24072, 69.26483, 122.2489 -24073, 64.8763, 111.4897 -24074, 67.3401, 121.8431 -24075, 65.85647, 117.6178 -24076, 68.28513, 129.4322 -24077, 71.49848, 135.5103 -24078, 68.14922, 125.2074 -24079, 73.22107, 136.736 -24080, 70.24483, 136.0741 -24081, 66.16476, 119.8647 -24082, 70.72408, 150.4398 -24083, 69.60885, 126.7483 -24084, 68.64307, 131.2725 -24085, 70.82908, 121.2912 -24086, 66.17383, 112.7295 -24087, 68.54875, 138.1077 -24088, 67.97518, 116.8066 -24089, 68.32635, 125.2183 -24090, 72.05565, 127.6232 -24091, 67.94268, 124.3097 -24092, 67.72877, 119.0444 -24093, 69.59699, 126.4719 -24094, 70.84343, 130.0128 -24095, 71.14967, 139.4641 -24096, 66.78035, 112.8561 -24097, 67.51289, 128.4778 -24098, 69.2969, 129.867 -24099, 68.04596, 113.2546 -24100, 66.49564, 127.5542 -24101, 71.87029, 151.8397 -24102, 68.3905, 132.1402 -24103, 65.00438, 113.921 -24104, 66.20503, 120.4717 -24105, 69.34408, 126.0365 -24106, 67.73769, 116.4037 -24107, 68.95293, 120.5159 -24108, 67.79797, 141.8728 -24109, 66.26302, 130.6336 -24110, 69.71346, 122.8188 -24111, 67.72305, 96.06788 -24112, 66.72756, 123.1148 -24113, 66.75114, 132.4506 -24114, 66.96514, 142.6672 -24115, 67.59748, 106.3744 -24116, 65.51196, 135.7343 -24117, 68.93433, 118.4039 -24118, 70.04973, 139.9917 -24119, 68.57453, 142.7562 -24120, 69.95846, 133.5556 -24121, 69.67227, 144.783 -24122, 67.48895, 121.146 -24123, 68.41794, 127.0591 -24124, 70.64777, 141.8289 -24125, 68.74365, 118.5769 -24126, 67.49912, 134.2321 -24127, 68.96778, 118.3576 -24128, 64.27649, 115.885 -24129, 69.76465, 126.8942 -24130, 68.8062, 140.9144 -24131, 69.53558, 118.5909 -24132, 66.76818, 117.2523 -24133, 70.02343, 144.426 -24134, 65.68234, 114.9949 -24135, 63.5547, 103.4864 -24136, 64.35694, 116.7422 -24137, 67.86944, 104.8291 -24138, 64.26485, 116.6974 -24139, 70.98567, 136.3881 -24140, 68.02723, 129.2539 -24141, 65.82659, 125.2597 -24142, 69.30638, 124.229 -24143, 66.25985, 138.3646 -24144, 67.35007, 121.1851 -24145, 70.33575, 156.0098 -24146, 69.03953, 128.1108 -24147, 69.32626, 140.6029 -24148, 67.11686, 121.2675 -24149, 67.96735, 143.4441 -24150, 70.20798, 128.3993 -24151, 69.09575, 132.1344 -24152, 67.32842, 130.276 -24153, 67.57214, 126.6289 -24154, 67.48418, 121.5747 -24155, 67.43897, 142.602 -24156, 70.60461, 136.0619 -24157, 69.67131, 116.3116 -24158, 68.79333, 134.0923 -24159, 68.6349, 140.4769 -24160, 66.747, 128.7257 -24161, 67.88882, 140.7871 -24162, 67.2596, 125.8938 -24163, 66.72282, 117.8449 -24164, 63.72796, 108.0979 -24165, 67.57522, 128.0214 -24166, 69.42324, 139.5001 -24167, 67.42113, 128.4317 -24168, 69.55405, 128.6576 -24169, 68.10755, 136.0476 -24170, 70.91036, 135.1862 -24171, 67.535, 117.3195 -24172, 68.98823, 132.1382 -24173, 65.828, 135.4497 -24174, 64.87945, 124.8061 -24175, 68.02627, 133.2315 -24176, 66.48368, 129.5454 -24177, 68.02029, 114.874 -24178, 69.4901, 125.2642 -24179, 69.58713, 127.6308 -24180, 70.01705, 128.6734 -24181, 68.28885, 134.9464 -24182, 68.65246, 128.2972 -24183, 65.70769, 129.3739 -24184, 70.41426, 133.9713 -24185, 66.89627, 114.3175 -24186, 69.1823, 133.4793 -24187, 68.80486, 137.2361 -24188, 69.21155, 161.8504 -24189, 64.35037, 111.6101 -24190, 70.26517, 134.1679 -24191, 69.56064, 122.5547 -24192, 65.5203, 120.5505 -24193, 69.15769, 123.7836 -24194, 69.66405, 138.799 -24195, 67.44392, 131.769 -24196, 67.8289, 148.232 -24197, 69.59938, 131.8266 -24198, 67.51364, 115.2855 -24199, 73.03159, 139.2101 -24200, 64.51111, 118.8058 -24201, 69.88715, 147.5768 -24202, 71.0594, 128.6246 -24203, 66.13664, 118.9781 -24204, 68.92441, 147.0122 -24205, 69.72196, 139.1363 -24206, 68.76197, 132.05 -24207, 70.53243, 127.2087 -24208, 66.13778, 113.9093 -24209, 67.43917, 125.6656 -24210, 65.85657, 133.1832 -24211, 67.41715, 126.6363 -24212, 68.04343, 114.9553 -24213, 67.46147, 140.3633 -24214, 71.45905, 139.5134 -24215, 70.03432, 136.4678 -24216, 66.67824, 137.1923 -24217, 69.72584, 123.3291 -24218, 68.9367, 119.3911 -24219, 69.55646, 131.0409 -24220, 68.60903, 127.2278 -24221, 66.65147, 129.0941 -24222, 69.74899, 132.0704 -24223, 66.28759, 103.6524 -24224, 65.4048, 121.4187 -24225, 67.43504, 125.4301 -24226, 66.8601, 111.9679 -24227, 67.42077, 104.6335 -24228, 66.83403, 98.53013 -24229, 67.45638, 109.922 -24230, 68.39069, 127.7844 -24231, 68.10474, 122.7165 -24232, 67.35962, 116.7826 -24233, 67.93121, 117.5358 -24234, 69.00845, 137.3313 -24235, 66.98731, 126.8991 -24236, 69.13794, 142.4036 -24237, 69.79289, 119.0381 -24238, 68.63362, 128.3377 -24239, 65.68681, 133.8128 -24240, 68.03586, 139.3538 -24241, 68.56161, 115.2544 -24242, 65.31821, 130.3495 -24243, 67.54969, 115.5331 -24244, 64.9513, 110.3166 -24245, 62.26498, 104.1348 -24246, 67.05169, 142.0848 -24247, 69.42594, 132.518 -24248, 66.76908, 121.5039 -24249, 67.59811, 134.4056 -24250, 67.74663, 126.3347 -24251, 68.95289, 137.2302 -24252, 70.92726, 140.5278 -24253, 67.5076, 131.3532 -24254, 68.09779, 133.6869 -24255, 66.72497, 130.3382 -24256, 68.17851, 130.9928 -24257, 69.70107, 148.6245 -24258, 69.81542, 140.4349 -24259, 69.17806, 114.3901 -24260, 67.5213, 106.7127 -24261, 65.07932, 126.1848 -24262, 65.76272, 118.194 -24263, 67.38848, 120.523 -24264, 66.55762, 128.3819 -24265, 69.23117, 139.317 -24266, 67.97129, 137.9738 -24267, 68.50282, 132.3038 -24268, 66.11285, 129.8084 -24269, 68.29893, 119.2646 -24270, 66.43765, 114.2571 -24271, 69.81484, 148.605 -24272, 70.8647, 148.6468 -24273, 70.65, 124.5929 -24274, 66.3832, 117.1383 -24275, 65.39059, 138.0883 -24276, 63.60936, 119.2431 -24277, 68.41909, 139.949 -24278, 67.5536, 140.8926 -24279, 67.57167, 127.7977 -24280, 69.75543, 134.612 -24281, 65.97912, 115.7997 -24282, 69.82973, 127.4906 -24283, 68.25923, 137.5393 -24284, 68.52437, 123.8685 -24285, 67.44386, 120.3718 -24286, 68.81971, 121.4659 -24287, 67.6395, 106.6431 -24288, 67.13938, 121.3981 -24289, 67.68633, 128.4577 -24290, 67.06687, 123.2179 -24291, 65.7778, 127.2213 -24292, 65.89887, 119.1833 -24293, 67.07721, 131.6767 -24294, 71.12368, 141.4488 -24295, 69.35961, 137.6262 -24296, 69.07129, 131.0639 -24297, 68.52627, 136.7567 -24298, 67.1445, 128.2922 -24299, 67.88215, 113.533 -24300, 64.0373, 100.1102 -24301, 67.57486, 136.41 -24302, 69.77337, 135.0577 -24303, 68.60777, 148.6195 -24304, 64.55533, 121.8647 -24305, 66.06962, 116.8535 -24306, 67.95484, 136.1466 -24307, 67.37979, 124.2873 -24308, 67.90461, 136.9687 -24309, 69.82622, 114.3628 -24310, 66.25075, 123.4614 -24311, 67.49232, 125.4319 -24312, 68.89903, 138.7552 -24313, 68.22911, 148.3492 -24314, 67.01689, 121.5691 -24315, 70.22735, 135.4663 -24316, 66.58757, 133.0016 -24317, 70.5615, 148.0778 -24318, 68.93279, 117.798 -24319, 69.06889, 150.3723 -24320, 68.51969, 125.8678 -24321, 64.25367, 126.0578 -24322, 71.94301, 139.7416 -24323, 70.01068, 129.4594 -24324, 69.18761, 129.8031 -24325, 69.14814, 132.6303 -24326, 67.04657, 127.9961 -24327, 71.45121, 147.6741 -24328, 64.21518, 119.9798 -24329, 69.94629, 135.4905 -24330, 70.26145, 132.4525 -24331, 69.17309, 132.7108 -24332, 67.97198, 130.1606 -24333, 66.57066, 131.3612 -24334, 69.86779, 115.1897 -24335, 66.85479, 97.71783 -24336, 69.74719, 126.6111 -24337, 65.94489, 132.2651 -24338, 65.87931, 103.3388 -24339, 64.62128, 101.6749 -24340, 68.54834, 130.3597 -24341, 67.92111, 123.939 -24342, 67.67285, 112.4801 -24343, 69.00279, 127.8311 -24344, 70.04797, 126.3484 -24345, 71.35258, 142.3712 -24346, 71.06775, 136.8046 -24347, 68.82243, 124.1371 -24348, 67.96857, 118.8369 -24349, 68.05889, 124.9371 -24350, 67.93692, 130.9467 -24351, 69.45398, 127.8837 -24352, 71.28182, 145.4692 -24353, 67.69446, 134.3376 -24354, 71.04547, 140.9563 -24355, 67.17175, 130.1958 -24356, 67.73543, 135.5123 -24357, 68.89435, 149.0303 -24358, 68.96831, 135.7274 -24359, 68.46784, 123.8383 -24360, 69.39747, 136.1145 -24361, 68.49673, 133.4028 -24362, 64.99401, 109.1885 -24363, 67.55392, 109.8925 -24364, 66.39846, 135.3121 -24365, 68.87766, 124.4382 -24366, 68.08728, 115.4819 -24367, 67.6748, 113.0279 -24368, 68.36341, 116.9069 -24369, 66.15639, 112.2191 -24370, 69.94863, 138.7619 -24371, 68.68161, 123.382 -24372, 65.57366, 108.7335 -24373, 67.47088, 124.634 -24374, 65.41412, 126.6553 -24375, 66.94215, 120.7258 -24376, 67.65712, 128.6122 -24377, 64.65079, 128.6303 -24378, 69.62877, 134.5557 -24379, 68.3735, 96.55141 -24380, 70.59634, 122.2144 -24381, 65.95534, 121.6048 -24382, 66.77646, 124.7321 -24383, 68.33367, 112.2217 -24384, 65.34891, 114.194 -24385, 70.0911, 138.6245 -24386, 66.96985, 128.6963 -24387, 69.5545, 109.8168 -24388, 68.5107, 136.2548 -24389, 67.75916, 114.7828 -24390, 67.28528, 156.6534 -24391, 69.10551, 135.7604 -24392, 70.04724, 118.1827 -24393, 67.97214, 130.4773 -24394, 64.98386, 100.1129 -24395, 67.57048, 125.9502 -24396, 65.91465, 107.5697 -24397, 70.47111, 140.7773 -24398, 67.52349, 126.2727 -24399, 68.45395, 134.877 -24400, 67.41775, 106.1401 -24401, 67.70655, 136.4734 -24402, 71.462, 148.1379 -24403, 66.73324, 128.8244 -24404, 64.50386, 105.9096 -24405, 69.11294, 127.3691 -24406, 69.38115, 129.7479 -24407, 68.33484, 127.2209 -24408, 69.29735, 126.0557 -24409, 68.37994, 135.6956 -24410, 68.96454, 134.9102 -24411, 70.49134, 133.6584 -24412, 70.57015, 134.172 -24413, 66.48853, 115.3811 -24414, 69.71507, 131.6692 -24415, 69.58669, 137.2034 -24416, 68.9727, 121.9887 -24417, 68.12075, 121.0738 -24418, 69.27581, 127.1409 -24419, 66.76377, 123.5561 -24420, 67.67916, 124.3837 -24421, 66.03738, 141.5574 -24422, 67.83577, 134.7204 -24423, 68.4144, 124.3957 -24424, 67.89829, 116.7193 -24425, 70.43392, 140.3597 -24426, 69.20164, 133.9186 -24427, 68.95842, 134.4443 -24428, 68.42838, 125.6241 -24429, 70.98873, 151.5456 -24430, 67.32737, 144.3687 -24431, 68.48893, 108.1511 -24432, 68.6021, 113.2208 -24433, 68.81368, 123.9034 -24434, 70.77293, 125.3918 -24435, 64.76018, 123.5229 -24436, 69.93755, 131.4882 -24437, 66.73936, 136.6536 -24438, 69.99554, 140.237 -24439, 69.93809, 139.2643 -24440, 68.76645, 140.7663 -24441, 65.93075, 122.8422 -24442, 65.71357, 110.0107 -24443, 69.81803, 135.7896 -24444, 65.60202, 122.6465 -24445, 69.04719, 110.6967 -24446, 71.79083, 116.5191 -24447, 65.47357, 130.9999 -24448, 68.56939, 121.2454 -24449, 67.3586, 113.1476 -24450, 69.31713, 118.5719 -24451, 68.04311, 140.9153 -24452, 70.58559, 140.6903 -24453, 65.81808, 116.2507 -24454, 69.49135, 130.3794 -24455, 67.24822, 121.8022 -24456, 67.92553, 126.7836 -24457, 70.37417, 153.1035 -24458, 67.27196, 126.1286 -24459, 71.48238, 143.7516 -24460, 68.10255, 137.9851 -24461, 67.81752, 114.8164 -24462, 64.53079, 100.9189 -24463, 66.93004, 122.4382 -24464, 67.74549, 128.7442 -24465, 69.06341, 144.9266 -24466, 68.05135, 131.0403 -24467, 65.22274, 113.4175 -24468, 70.59627, 132.1285 -24469, 66.67924, 123.53 -24470, 67.09362, 112.9607 -24471, 67.34935, 132.3745 -24472, 68.25905, 117.2967 -24473, 71.51413, 141.4801 -24474, 69.19176, 136.2781 -24475, 68.85149, 119.5382 -24476, 62.68591, 118.6002 -24477, 68.93339, 126.4631 -24478, 66.81582, 131.0701 -24479, 68.82523, 119.6506 -24480, 67.79889, 111.5895 -24481, 70.56176, 131.7029 -24482, 63.76528, 109.2093 -24483, 68.69047, 123.393 -24484, 68.5612, 133.2161 -24485, 65.9104, 135.1969 -24486, 69.50434, 154.9778 -24487, 67.01715, 103.3397 -24488, 67.42555, 112.6464 -24489, 69.80123, 123.7655 -24490, 69.35558, 142.1629 -24491, 69.40991, 134.6446 -24492, 68.14932, 124.156 -24493, 67.49197, 136.9491 -24494, 67.83128, 116.3515 -24495, 66.88311, 136.024 -24496, 66.16765, 112.1413 -24497, 68.34192, 148.7264 -24498, 68.47918, 115.6665 -24499, 64.1332, 126.2502 -24500, 69.76909, 137.5824 -24501, 67.87052, 128.4015 -24502, 65.65317, 122.6266 -24503, 69.10982, 127.845 -24504, 70.2136, 146.6532 -24505, 68.12511, 116.4182 -24506, 69.1089, 127.5322 -24507, 68.13285, 118.1504 -24508, 68.15041, 125.8468 -24509, 67.31379, 125.7108 -24510, 67.00484, 120.302 -24511, 67.77523, 136.9514 -24512, 67.94501, 124.8842 -24513, 69.49863, 107.795 -24514, 69.69959, 138.8638 -24515, 69.73603, 125.7504 -24516, 67.035, 110.6978 -24517, 68.55387, 106.0953 -24518, 67.66663, 118.1357 -24519, 68.19234, 130.5155 -24520, 67.83603, 125.6357 -24521, 65.6042, 121.2924 -24522, 70.79237, 135.705 -24523, 65.90734, 130.6877 -24524, 67.40279, 133.5585 -24525, 69.0652, 126.5715 -24526, 67.07127, 125.1982 -24527, 67.34987, 120.7703 -24528, 69.87618, 136.4152 -24529, 68.61786, 120.8313 -24530, 67.86452, 123.3904 -24531, 67.18841, 118.1254 -24532, 67.91023, 128.8423 -24533, 67.88438, 119.5715 -24534, 68.44835, 110.7671 -24535, 68.91398, 133.9166 -24536, 66.93704, 134.2708 -24537, 67.98509, 136.7816 -24538, 68.2376, 118.9982 -24539, 67.13801, 110.5575 -24540, 69.36053, 135.8541 -24541, 70.23741, 119.0039 -24542, 69.67473, 128.7848 -24543, 67.02658, 119.5814 -24544, 67.08012, 109.6164 -24545, 66.45348, 122.2987 -24546, 67.14627, 144.1873 -24547, 68.5299, 124.2064 -24548, 68.18035, 131.4399 -24549, 69.18019, 129.5663 -24550, 68.15579, 109.4756 -24551, 68.08451, 125.4961 -24552, 69.12967, 117.7697 -24553, 65.66134, 108.8434 -24554, 66.8266, 137.9539 -24555, 67.976, 125.9379 -24556, 68.6367, 126.662 -24557, 68.20125, 119.4097 -24558, 66.30752, 108.9388 -24559, 68.67523, 135.9253 -24560, 70.75177, 133.3227 -24561, 69.90591, 116.5433 -24562, 67.49121, 127.443 -24563, 69.43309, 126.7096 -24564, 66.64931, 119.9884 -24565, 67.25339, 122.7744 -24566, 70.0799, 116.5472 -24567, 67.30768, 124.8544 -24568, 68.90363, 139.9568 -24569, 67.79094, 134.4678 -24570, 70.02139, 141.1502 -24571, 65.08493, 113.6042 -24572, 68.00621, 143.7361 -24573, 72.3989, 144.9316 -24574, 67.83748, 132.585 -24575, 65.7028, 105.2162 -24576, 70.01957, 140.611 -24577, 67.87733, 116.6834 -24578, 70.66031, 122.3103 -24579, 69.84654, 131.7426 -24580, 67.08101, 123.8231 -24581, 68.19996, 120.8464 -24582, 66.47189, 117.481 -24583, 67.35479, 120.6077 -24584, 68.02985, 124.8289 -24585, 64.52777, 117.4798 -24586, 64.72981, 104.3111 -24587, 66.31479, 118.3695 -24588, 69.28443, 129.8202 -24589, 68.38512, 139.6485 -24590, 68.48504, 121.7782 -24591, 69.8409, 123.0627 -24592, 69.00164, 114.0904 -24593, 67.46717, 156.2682 -24594, 68.50704, 132.7862 -24595, 67.54149, 128.4227 -24596, 69.81014, 123.0582 -24597, 70.30911, 139.2419 -24598, 69.1204, 140.173 -24599, 71.55865, 136.6 -24600, 67.95604, 117.8046 -24601, 67.67595, 123.2158 -24602, 67.08059, 106.8189 -24603, 67.36378, 126.5004 -24604, 70.55218, 126.8437 -24605, 68.21612, 119.5574 -24606, 68.7151, 125.9951 -24607, 66.02245, 124.6736 -24608, 68.03719, 132.4732 -24609, 70.51604, 118.7315 -24610, 70.10402, 144.5009 -24611, 66.56804, 82.38298 -24612, 65.94065, 108.8379 -24613, 66.38829, 127.2815 -24614, 67.30654, 136.3496 -24615, 66.90193, 127.6108 -24616, 67.13761, 137.002 -24617, 68.93483, 143.9311 -24618, 67.95125, 118.8796 -24619, 72.47908, 148.1097 -24620, 65.52562, 123.3728 -24621, 69.32351, 146.246 -24622, 65.6099, 100.6414 -24623, 68.6201, 126.8121 -24624, 71.50024, 127.348 -24625, 66.67496, 115.2416 -24626, 66.73827, 129.1676 -24627, 67.26376, 128.3665 -24628, 69.70493, 139.7124 -24629, 69.81408, 111.8786 -24630, 69.24356, 155.8277 -24631, 63.65376, 110.0774 -24632, 67.32789, 137.1865 -24633, 68.6961, 132.4999 -24634, 66.62465, 120.2693 -24635, 69.65054, 142.7088 -24636, 69.0893, 137.7905 -24637, 66.75728, 110.8487 -24638, 66.06512, 106.9734 -24639, 66.00171, 115.4981 -24640, 68.70707, 101.3046 -24641, 69.29616, 136.4906 -24642, 68.68899, 138.3325 -24643, 69.36066, 141.9455 -24644, 71.21016, 133.633 -24645, 70.61617, 152.795 -24646, 66.60166, 131.846 -24647, 63.46025, 109.3417 -24648, 66.80019, 120.0755 -24649, 69.89469, 123.1536 -24650, 66.03755, 134.4459 -24651, 69.79279, 131.8303 -24652, 67.67011, 119.6221 -24653, 68.61358, 127.661 -24654, 67.29594, 119.9302 -24655, 68.06416, 126.1776 -24656, 67.08852, 133.3623 -24657, 67.22083, 133.1829 -24658, 68.52246, 121.9621 -24659, 69.21039, 126.6402 -24660, 68.11211, 125.7575 -24661, 69.80387, 128.2476 -24662, 64.30007, 108.2215 -24663, 67.06097, 135.8275 -24664, 65.65425, 108.0972 -24665, 71.03311, 137.8075 -24666, 67.66624, 121.9512 -24667, 65.33739, 121.2757 -24668, 69.54907, 124.4711 -24669, 67.45198, 109.1739 -24670, 67.84408, 110.1037 -24671, 69.48408, 122.6883 -24672, 66.19564, 122.6215 -24673, 68.96582, 125.7875 -24674, 68.91695, 122.4138 -24675, 67.15888, 115.731 -24676, 67.34512, 126.434 -24677, 68.00353, 131.0691 -24678, 68.05897, 115.6045 -24679, 67.12385, 130.4915 -24680, 68.24874, 123.1214 -24681, 70.06522, 132.9338 -24682, 67.50053, 119.1866 -24683, 69.12516, 131.2341 -24684, 69.0494, 137.1193 -24685, 67.66576, 120.0164 -24686, 69.54628, 124.9586 -24687, 68.28689, 135.0333 -24688, 69.39337, 112.8113 -24689, 67.30725, 120.8673 -24690, 68.34316, 139.0949 -24691, 70.90294, 143.8781 -24692, 64.06894, 99.60932 -24693, 67.2224, 121.3802 -24694, 68.69563, 137.2314 -24695, 66.13861, 120.2833 -24696, 69.54627, 137.3543 -24697, 66.14098, 125.3429 -24698, 70.63782, 151.2378 -24699, 70.03612, 125.3728 -24700, 67.57137, 122.2741 -24701, 66.91088, 107.3063 -24702, 66.91607, 120.8614 -24703, 68.68646, 137.1089 -24704, 66.02934, 132.9201 -24705, 67.42776, 113.7439 -24706, 69.3031, 134.3583 -24707, 69.24989, 121.6875 -24708, 68.89261, 133.0703 -24709, 68.86091, 126.9811 -24710, 71.90873, 134.0201 -24711, 68.26643, 129.7587 -24712, 66.59322, 113.153 -24713, 66.0497, 118.9106 -24714, 68.50987, 127.3332 -24715, 66.95287, 137.0653 -24716, 71.03063, 146.9723 -24717, 63.58121, 115.9351 -24718, 63.76497, 105.0288 -24719, 69.72296, 150.2475 -24720, 65.84023, 117.7307 -24721, 70.61722, 131.0053 -24722, 66.82089, 128.8345 -24723, 69.07869, 145.6238 -24724, 68.57406, 137.2053 -24725, 71.25702, 145.0337 -24726, 67.41157, 119.5434 -24727, 68.96896, 128.9336 -24728, 70.51128, 104.2914 -24729, 66.62109, 126.2567 -24730, 68.26107, 135.6492 -24731, 69.25005, 133.5514 -24732, 70.66498, 138.3137 -24733, 67.44799, 131.5456 -24734, 70.61052, 142.5544 -24735, 69.05707, 136.4888 -24736, 69.5556, 127.1593 -24737, 65.79335, 119.5829 -24738, 68.90813, 119.1438 -24739, 65.86615, 129.2224 -24740, 67.75381, 136.0158 -24741, 66.97192, 133.622 -24742, 67.12818, 138.6191 -24743, 68.03631, 112.7006 -24744, 69.2586, 132.689 -24745, 64.37881, 116.5423 -24746, 69.10476, 128.0676 -24747, 70.68086, 141.9627 -24748, 69.89281, 137.2342 -24749, 63.33113, 95.95417 -24750, 69.87096, 149.8839 -24751, 70.82192, 159.6344 -24752, 66.07971, 122.306 -24753, 71.10476, 114.7871 -24754, 68.65665, 117.2339 -24755, 65.5231, 123.7407 -24756, 69.2472, 119.0934 -24757, 70.19913, 124.0875 -24758, 68.23477, 115.1977 -24759, 70.12196, 127.7892 -24760, 66.798, 131.6398 -24761, 68.57737, 136.7561 -24762, 70.78151, 150.7636 -24763, 68.655, 134.1977 -24764, 70.04789, 116.0917 -24765, 67.3824, 131.8669 -24766, 69.704, 132.2823 -24767, 65.43275, 111.7034 -24768, 67.87092, 135.3133 -24769, 69.639, 122.774 -24770, 69.50107, 137.5292 -24771, 70.5769, 150.9049 -24772, 67.32704, 130.0925 -24773, 69.03615, 122.4746 -24774, 70.38448, 150.0339 -24775, 66.86316, 135.1726 -24776, 69.96058, 124.1244 -24777, 66.77948, 115.1505 -24778, 67.50335, 99.40058 -24779, 68.56426, 132.2101 -24780, 70.76528, 130.1221 -24781, 68.32253, 140.2104 -24782, 63.28029, 116.0598 -24783, 68.40535, 127.717 -24784, 70.47769, 132.7392 -24785, 70.92832, 133.3631 -24786, 68.42345, 121.5013 -24787, 68.17552, 113.1516 -24788, 71.41075, 126.4088 -24789, 70.02405, 138.9673 -24790, 70.06857, 132.7965 -24791, 67.87559, 131.4173 -24792, 68.09801, 132.7242 -24793, 67.93416, 125.6174 -24794, 70.56894, 127.3602 -24795, 64.3262, 114.3648 -24796, 67.77195, 114.3845 -24797, 67.75367, 113.554 -24798, 63.71439, 122.1264 -24799, 69.09925, 120.2482 -24800, 69.85179, 130.2025 -24801, 69.44092, 144.8549 -24802, 74.53177, 148.9104 -24803, 66.33132, 119.6675 -24804, 68.81086, 129.9323 -24805, 69.2946, 139.9604 -24806, 71.14495, 131.3502 -24807, 68.97051, 147.5332 -24808, 68.59823, 120.6693 -24809, 69.32375, 132.5228 -24810, 67.18403, 133.9888 -24811, 63.95584, 101.1775 -24812, 67.30139, 140.5981 -24813, 68.32525, 120.9681 -24814, 66.36458, 116.3494 -24815, 67.05441, 115.7106 -24816, 66.72856, 125.3558 -24817, 69.17136, 127.4447 -24818, 66.72634, 129.8871 -24819, 67.53447, 126.6146 -24820, 70.64693, 125.0381 -24821, 68.94919, 134.1113 -24822, 67.44368, 123.2024 -24823, 68.36479, 133.7593 -24824, 66.0173, 126.6746 -24825, 66.34051, 133.865 -24826, 69.11356, 140.5328 -24827, 66.78433, 146.9803 -24828, 64.69758, 116.5596 -24829, 67.88323, 132.9397 -24830, 70.79391, 140.861 -24831, 67.33031, 128.9386 -24832, 67.47175, 143.136 -24833, 71.1465, 131.7157 -24834, 71.09999, 132.7978 -24835, 67.31941, 117.9554 -24836, 65.17339, 94.40946 -24837, 70.79803, 141.7186 -24838, 70.54927, 150.3874 -24839, 68.88799, 114.2215 -24840, 65.19756, 127.3357 -24841, 67.13424, 126.6348 -24842, 70.79421, 134.6936 -24843, 66.08314, 116.8418 -24844, 67.55002, 122.1483 -24845, 67.74689, 132.8739 -24846, 70.05674, 146.0524 -24847, 69.39883, 144.6262 -24848, 69.51891, 120.1586 -24849, 67.9384, 125.9966 -24850, 63.84585, 135.1763 -24851, 68.53891, 134.0518 -24852, 65.58522, 127.3106 -24853, 66.56404, 97.80735 -24854, 67.21341, 137.2553 -24855, 67.11996, 105.438 -24856, 69.32371, 126.5148 -24857, 67.61647, 118.4966 -24858, 69.57478, 128.6012 -24859, 67.84663, 123.7062 -24860, 67.23558, 122.2566 -24861, 69.88379, 130.9158 -24862, 68.99994, 121.1935 -24863, 68.60312, 123.1076 -24864, 68.77791, 125.3572 -24865, 70.55859, 131.2843 -24866, 67.51836, 117.6823 -24867, 67.56651, 113.9729 -24868, 70.44326, 127.4526 -24869, 63.23624, 97.99816 -24870, 66.40576, 128.5103 -24871, 68.15859, 124.2586 -24872, 64.07289, 123.1365 -24873, 68.55598, 122.4432 -24874, 68.43131, 133.9318 -24875, 65.87921, 104.357 -24876, 66.68998, 128.4557 -24877, 65.95774, 127.8589 -24878, 70.30346, 137.8967 -24879, 69.37067, 120.4668 -24880, 67.55136, 133.2016 -24881, 64.66626, 117.3698 -24882, 66.40245, 132.6795 -24883, 70.0332, 134.9364 -24884, 73.06241, 141.5054 -24885, 67.73969, 107.6256 -24886, 69.27968, 139.7764 -24887, 64.56023, 114.473 -24888, 65.17345, 108.0286 -24889, 64.743, 106.8072 -24890, 71.01048, 161.8532 -24891, 69.12531, 149.3248 -24892, 68.90616, 144.6759 -24893, 69.68608, 134.7518 -24894, 70.89186, 139.6818 -24895, 66.75426, 130.7951 -24896, 66.84764, 112.43 -24897, 66.61327, 142.2755 -24898, 66.99191, 142.8088 -24899, 66.95526, 127.3362 -24900, 66.7864, 123.7754 -24901, 65.2558, 116.3788 -24902, 69.03557, 118.6868 -24903, 66.66842, 116.0167 -24904, 68.05827, 125.0539 -24905, 69.48675, 135.636 -24906, 69.11476, 132.8803 -24907, 69.57141, 126.5902 -24908, 68.45513, 119.3317 -24909, 67.61, 111.8791 -24910, 66.36029, 115.9904 -24911, 70.97938, 126.1772 -24912, 66.14233, 133.6664 -24913, 66.30402, 118.3665 -24914, 68.26234, 139.7222 -24915, 67.85823, 147.5064 -24916, 65.5061, 121.6958 -24917, 68.70761, 121.3583 -24918, 71.44954, 134.5787 -24919, 66.66413, 118.4386 -24920, 66.54027, 130.0576 -24921, 67.98947, 116.3439 -24922, 72.54953, 134.5143 -24923, 68.89705, 134.2033 -24924, 66.37489, 123.3152 -24925, 69.7564, 128.2928 -24926, 66.44678, 129.8237 -24927, 71.69485, 154.4811 -24928, 66.08091, 118.3239 -24929, 65.3417, 119.2852 -24930, 69.04974, 130.828 -24931, 65.11765, 99.42378 -24932, 69.44092, 141.7658 -24933, 66.63354, 123.5755 -24934, 69.01315, 136.6985 -24935, 67.57383, 135.223 -24936, 67.40523, 132.959 -24937, 67.01858, 122.8513 -24938, 65.90423, 115.7491 -24939, 70.35191, 118.6196 -24940, 72.35889, 143.9547 -24941, 68.90635, 135.0866 -24942, 68.40219, 109.4203 -24943, 68.51074, 139.2417 -24944, 68.94331, 128.0522 -24945, 67.83501, 125.6535 -24946, 67.62827, 122.4244 -24947, 67.79448, 121.2228 -24948, 69.17056, 154.7821 -24949, 67.9537, 126.585 -24950, 64.22634, 113.0611 -24951, 68.9995, 133.888 -24952, 68.21355, 131.1211 -24953, 67.77936, 122.7164 -24954, 67.83418, 138.3443 -24955, 66.69014, 119.1199 -24956, 67.54476, 104.238 -24957, 68.02864, 117.1596 -24958, 69.83059, 134.0241 -24959, 66.76934, 120.2857 -24960, 70.14626, 132.2209 -24961, 68.92465, 106.3021 -24962, 69.11543, 133.8436 -24963, 66.43732, 133.2403 -24964, 68.46555, 124.7422 -24965, 66.34781, 128.061 -24966, 66.7366, 124.5938 -24967, 66.08128, 130.3096 -24968, 66.55957, 115.0486 -24969, 69.08296, 127.4722 -24970, 63.61791, 115.7477 -24971, 65.37753, 126.6102 -24972, 67.4972, 122.9844 -24973, 68.70055, 123.2849 -24974, 71.32072, 125.5928 -24975, 65.57216, 123.7128 -24976, 66.19147, 123.2446 -24977, 70.06322, 115.418 -24978, 67.24989, 108.7178 -24979, 69.624, 141.5823 -24980, 66.7896, 120.8863 -24981, 69.79922, 154.4399 -24982, 66.30104, 107.3901 -24983, 68.36249, 118.7207 -24984, 63.77967, 111.4911 -24985, 67.58699, 127.7214 -24986, 69.71587, 133.9126 -24987, 68.81291, 120.8176 -24988, 68.86794, 142.8494 -24989, 66.10137, 103.381 -24990, 70.11839, 141.237 -24991, 69.97767, 125.3672 -24992, 71.91656, 128.284 -24993, 70.96218, 146.1936 -24994, 66.19462, 118.7974 -24995, 67.21126, 127.6603 -24996, 69.50215, 118.0312 -24997, 64.54826, 120.1932 -24998, 64.69855, 118.2655 -24999, 67.52918, 132.2682 -25000, 68.87761, 124.8742 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 -1,1,1 -1,2,3 diff --git a/DataStructures/CSVFile/testData2.csv b/DataStructures/CSVFile/testData2.csv deleted file mode 100644 index 1b8f19dc3070..000000000000 --- a/DataStructures/CSVFile/testData2.csv +++ /dev/null @@ -1,3 +0,0 @@ -id, height, width -1, 65.78331, 112.9925 -12, 67.62333, 114.143 diff --git a/DataStructures/CSVFile/testData3.csv b/DataStructures/CSVFile/testData3.csv deleted file mode 100644 index 8583b71ca3a3..000000000000 --- a/DataStructures/CSVFile/testData3.csv +++ /dev/null @@ -1 +0,0 @@ -id, height, width diff --git a/DataStructures/CSVFile/testData4.csv b/DataStructures/CSVFile/testData4.csv deleted file mode 100644 index 1c06bd9f986b..000000000000 --- a/DataStructures/CSVFile/testData4.csv +++ /dev/null @@ -1,7 +0,0 @@ -1,65.78331,112.9925 -2,71.51521,136.4873 -3,69.39874,153.0269 -4,68.2166,142.3354 -5,67.78781,144.2971 -7,69.80204,141.4947 -8,70.01472,80 diff --git a/DataStructures/Graphs/BFS.java b/DataStructures/Graphs/BFS.java deleted file mode 100644 index d06a66068632..000000000000 --- a/DataStructures/Graphs/BFS.java +++ /dev/null @@ -1,62 +0,0 @@ -import java.util.*; - -/** - * Implementation of a Breadth First Search - * - * @author Unknown - * - */ -public class BFS{ - - /** - * The BFS implemented in code to use. - * - * @param a Structure to perform the search on a graph, adjacency matrix etc. - * @param vertices The vertices to use - * @param source The Source - */ - public static void bfsImplement(byte [][] a,int vertices,int source){ //passing adjacency matrix and no of vertices - byte []b=new byte[vertices]; //flag container containing status of each vertices - Arrays.fill(b,(byte)-1); //status initialization - /* code status - -1 = ready - 0 = waiting - 1 = processed */ - - Stack st = new Stack(vertices); //operational stack - st.push(source); //assigning source - while(!st.isEmpty()){ - b[st.peek()]=(byte)0; //assigning waiting status - System.out.println(st.peek()); - int pop=st.peek(); - b[pop]=(byte)1; //assigning processed status - st.pop(); //removing head of the queue - for(int i=0;i> { - class Node { - E name; - - public Node(E name) { - this.name = name; - } - } - - class Edge { - Node startNode, endNode; - - public Edge(Node startNode, Node endNode) { - this.startNode = startNode; - this.endNode = endNode; - } - } - - ArrayList edgeList; - ArrayList nodeList; - - public Graph() { - edgeList = new ArrayList(); - nodeList = new ArrayList(); - } - - /** - * Adds a new Edge to the graph. If the nodes aren't yet in nodeList, they - * will be added to it. - * - * @param startNode - * the starting Node from the edge - * - * @param endNode - * the ending Node from the edge - */ - public void addEdge(E startNode, E endNode) { - Node start = null, end = null; - for (Node node : nodeList) { - if (startNode.compareTo(node.name) == 0) { - start = node; - } - else if (endNode.compareTo(node.name) == 0) { - end = node; - } - } - if (start == null) { - start = new Node(startNode); - nodeList.add(start); - } - if (end == null) { - end = new Node(endNode); - nodeList.add(end); - } - - edgeList.add(new Edge(start, end)); - } - - /** - * Main method used for counting the connected components. Iterates through - * the array of nodes to do a depth first search to get all nodes of the - * graph from the actual node. These nodes are added to the array - * markedNodes and will be ignored if they are chosen in the nodeList. - * - * @return returns the amount of unconnected graphs - * - */ - public int countGraphs() { - int count = 0; - Set markedNodes = new HashSet(); - - for (Node n : nodeList) { - if (!markedNodes.contains(n)) { - markedNodes.add(n); - markedNodes.addAll(depthFirstSearch(n, new ArrayList())); - count++; - } - } - - return count; - } - - /** - * Implementation of depth first search. - * - * @param n - * the actual visiting node - * - * @param visited - * A list of already visited nodes in the depth first search - * - * @return returns a set of visited nodes - * - */ - public ArrayList depthFirstSearch(Node n, ArrayList visited) { - visited.add(n); - for (Edge e : edgeList) { - if (e.startNode.equals(n) && !visited.contains(e.endNode)) { - depthFirstSearch(e.endNode, visited); - } - } - return visited; - } + class Node { + E name; + + public Node(E name) { + this.name = name; + } + } + + class Edge { + Node startNode, endNode; + + public Edge(Node startNode, Node endNode) { + this.startNode = startNode; + this.endNode = endNode; + } + } + + ArrayList edgeList; + ArrayList nodeList; + + public Graph() { + edgeList = new ArrayList(); + nodeList = new ArrayList(); + } + + /** + * Adds a new Edge to the graph. If the nodes aren't yet in nodeList, they + * will be added to it. + * + * @param startNode the starting Node from the edge + * @param endNode the ending Node from the edge + */ + public void addEdge(E startNode, E endNode) { + Node start = null, end = null; + for (Node node : nodeList) { + if (startNode.compareTo(node.name) == 0) { + start = node; + } else if (endNode.compareTo(node.name) == 0) { + end = node; + } + } + if (start == null) { + start = new Node(startNode); + nodeList.add(start); + } + if (end == null) { + end = new Node(endNode); + nodeList.add(end); + } + + edgeList.add(new Edge(start, end)); + } + + /** + * Main method used for counting the connected components. Iterates through + * the array of nodes to do a depth first search to get all nodes of the + * graph from the actual node. These nodes are added to the array + * markedNodes and will be ignored if they are chosen in the nodeList. + * + * @return returns the amount of unconnected graphs + */ + public int countGraphs() { + int count = 0; + Set markedNodes = new HashSet(); + + for (Node n : nodeList) { + if (!markedNodes.contains(n)) { + markedNodes.add(n); + markedNodes.addAll(depthFirstSearch(n, new ArrayList())); + count++; + } + } + + return count; + } + + /** + * Implementation of depth first search. + * + * @param n the actual visiting node + * @param visited A list of already visited nodes in the depth first search + * @return returns a set of visited nodes + */ + public ArrayList depthFirstSearch(Node n, ArrayList visited) { + visited.add(n); + for (Edge e : edgeList) { + if (e.startNode.equals(n) && !visited.contains(e.endNode)) { + depthFirstSearch(e.endNode, visited); + } + } + return visited; + } } public class ConnectedComponent { - public static void main(String[] args) { - Graph graphChars = new Graph(); - - // Graph 1 - graphChars.addEdge('a', 'b'); - graphChars.addEdge('a', 'e'); - graphChars.addEdge('b', 'e'); - graphChars.addEdge('b', 'c'); - graphChars.addEdge('c', 'd'); - graphChars.addEdge('d', 'a'); - - graphChars.addEdge('x', 'y'); - graphChars.addEdge('x', 'z'); - - graphChars.addEdge('w', 'w'); - - Graph graphInts = new Graph(); - - // Graph 2 - graphInts.addEdge(1, 2); - graphInts.addEdge(2, 3); - graphInts.addEdge(2, 4); - graphInts.addEdge(3, 5); - - graphInts.addEdge(7, 8); - graphInts.addEdge(8, 10); - graphInts.addEdge(10, 8); - - System.out.println("Amount of different char-graphs: " + graphChars.countGraphs()); - System.out.println("Amount of different int-graphs: " + graphInts.countGraphs()); - } + public static void main(String[] args) { + Graph graphChars = new Graph(); + + // Graph 1 + graphChars.addEdge('a', 'b'); + graphChars.addEdge('a', 'e'); + graphChars.addEdge('b', 'e'); + graphChars.addEdge('b', 'c'); + graphChars.addEdge('c', 'd'); + graphChars.addEdge('d', 'a'); + + graphChars.addEdge('x', 'y'); + graphChars.addEdge('x', 'z'); + + graphChars.addEdge('w', 'w'); + + Graph graphInts = new Graph(); + + // Graph 2 + graphInts.addEdge(1, 2); + graphInts.addEdge(2, 3); + graphInts.addEdge(2, 4); + graphInts.addEdge(3, 5); + + graphInts.addEdge(7, 8); + graphInts.addEdge(8, 10); + graphInts.addEdge(10, 8); + + System.out.println("Amount of different char-graphs: " + graphChars.countGraphs()); + System.out.println("Amount of different int-graphs: " + graphInts.countGraphs()); + } } diff --git a/DataStructures/Graphs/Cycles.java b/DataStructures/Graphs/Cycles.java index 429dd8de41db..b6fd8b4c58c5 100644 --- a/DataStructures/Graphs/Cycles.java +++ b/DataStructures/Graphs/Cycles.java @@ -1,3 +1,5 @@ +package DataStructures.Graphs; + import java.util.Scanner; import java.util.ArrayList; @@ -5,10 +7,10 @@ class Cycle { private int nodes, edges; - private int [][] adjacencyMatrix; - private boolean [] visited; + private int[][] adjacencyMatrix; + private boolean[] visited; ArrayList> cycles = new ArrayList>(); - private boolean [] finalCycles; + private boolean[] finalCycles; public Cycle() { Scanner in = new Scanner(System.in); @@ -17,8 +19,8 @@ public Cycle() { System.out.print("Enter the no. of Edges: "); edges = in.nextInt(); - adjacencyMatrix = new int [nodes][nodes]; - visited = new boolean [nodes]; + adjacencyMatrix = new int[nodes][nodes]; + visited = new boolean[nodes]; for (int i = 0; i < nodes; i++) { visited[i] = false; @@ -26,7 +28,7 @@ public Cycle() { System.out.println("Enter the details of each edges "); - for(int i = 0; i < edges; i++) { + for (int i = 0; i < edges; i++) { int start, end; start = in.nextInt(); end = in.nextInt(); @@ -50,7 +52,7 @@ private void dfs(Integer start, Integer curr, ArrayList temp) { temp.add(curr); visited[curr] = true; for (int i = 0; i < nodes; i++) { - if(adjacencyMatrix[curr][i] == 1) { + if (adjacencyMatrix[curr][i] == 1) { if (i == start) { cycles.add(new ArrayList(temp)); } else { @@ -61,7 +63,7 @@ private void dfs(Integer start, Integer curr, ArrayList temp) { } } - if(temp.size() > 0) { + if (temp.size() > 0) { temp.remove(temp.size() - 1); } visited[curr] = false; diff --git a/DataStructures/Graphs/DFS.java b/DataStructures/Graphs/DFS.java deleted file mode 100644 index 747fcbed5dfc..000000000000 --- a/DataStructures/Graphs/DFS.java +++ /dev/null @@ -1,63 +0,0 @@ -import java.util.*; - -/** - * Implementation of a Depth First Search - * - * @author Unknown - * - */ - -public class DFS{ - - /** - * Implementation in code of a DFS - * - * @param a structure to be DFS'ed - * @param vertices The vertices - * @param source The source - */ - public static void dfsImplement(byte [][] a,int vertices,int source){ //passing adjacency matrix and no of vertices - byte []b=new byte[vertices]; //flag container containing status of each vertices - Arrays.fill(b,(byte)-1); //status initialization - /* code status - -1 = ready - 0 = waiting - 1 = processed */ - - - Stack st=new Stack(vertices); //operational stack - st.push(source); //assigning source - while(!st.isEmpty()){ - b[st.peek()]=(byte)0; //assigning waiting status - System.out.println(st.peek()); - int pop=st.pop(); - b[pop]=(byte)1; //assigning processed status - for(int i=0;i> { - + ArrayList verticies; public AdjacencyListGraph() { @@ -19,7 +21,7 @@ public Vertex(E data) { } public boolean addAdjacentVertex(Vertex to) { - for (Vertex v: adjacentVerticies) { + for (Vertex v : adjacentVerticies) { if (v.data.compareTo(to.data) == 0) { return false; // the edge already exists } @@ -46,12 +48,12 @@ public boolean removeAdjacentVertex(E to) { * verticies * * @param from the data of the vertex the edge is from - * @param to the data of the vertex the edge is going to + * @param to the data of the vertex the edge is going to * @return returns false if the edge doesn't exist, returns true if the edge exists and is removed */ public boolean removeEdge(E from, E to) { Vertex fromV = null; - for (Vertex v: verticies) { + for (Vertex v : verticies) { if (from.compareTo(v.data) == 0) { fromV = v; break; @@ -60,17 +62,18 @@ public boolean removeEdge(E from, E to) { if (fromV == null) return false; return fromV.removeAdjacentVertex(to); } + /** * this method adds an edge to the graph between two specified - * verticies + * verticies * * @param from the data of the vertex the edge is from - * @param to the data of the vertex the edge is going to + * @param to the data of the vertex the edge is going to * @return returns true if the edge did not exist, return false if it already did */ public boolean addEdge(E from, E to) { Vertex fromV = null, toV = null; - for (Vertex v: verticies) { + for (Vertex v : verticies) { if (from.compareTo(v.data) == 0) { // see if from vertex already exists fromV = v; } else if (to.compareTo(v.data) == 0) { // see if to vertex already exists @@ -91,17 +94,18 @@ public boolean addEdge(E from, E to) { /** * this gives a list of verticies in the graph and their adjacencies - * + * * @return returns a string describing this graph */ + @Override public String toString() { StringBuilder sb = new StringBuilder(); - for (Vertex v: verticies) { + for (Vertex v : verticies) { sb.append("Vertex: "); sb.append(v.data); sb.append("\n"); sb.append("Adjacent verticies: "); - for (Vertex v2: v.adjacentVerticies) { + for (Vertex v2 : v.adjacentVerticies) { sb.append(v2.data); sb.append(" "); } @@ -112,18 +116,18 @@ public String toString() { } public class Graphs { - - public static void main(String args[]) { - AdjacencyListGraph graph = new AdjacencyListGraph<>(); + + public static void main(String args[]) { + AdjacencyListGraph graph = new AdjacencyListGraph<>(); assert graph.addEdge(1, 2); assert graph.addEdge(1, 5); assert graph.addEdge(2, 5); - assert !graph.addEdge(1, 2); + assert !graph.addEdge(1, 2); assert graph.addEdge(2, 3); assert graph.addEdge(3, 4); assert graph.addEdge(4, 1); assert !graph.addEdge(2, 3); System.out.println(graph); } - + } diff --git a/DataStructures/Graphs/KruskalsAlgorithm.java b/DataStructures/Graphs/KruskalsAlgorithm.java deleted file mode 100644 index 6fc8412c1ca0..000000000000 --- a/DataStructures/Graphs/KruskalsAlgorithm.java +++ /dev/null @@ -1,174 +0,0 @@ -// Java program for Kruskal's algorithm to find Minimum Spanning Tree -// of a given connected, undirected and weighted graph -import java.util.*; -import java.lang.*; -import java.io.*; - -class Graph -{ - // A class to represent a graph edge - class Edge implements Comparable - { - int src, dest, weight; - - // Comparator function used for sorting edges based on - // their weight - public int compareTo(Edge compareEdge) - { - return this.weight-compareEdge.weight; - } - }; - - // A class to represent a subset for union-find - class subset - { - int parent, rank; - }; - - int V, E; // V-> no. of vertices & E->no.of edges - Edge edge[]; // collection of all edges - - // Creates a graph with V vertices and E edges - Graph(int v, int e) - { - V = v; - E = e; - edge = new Edge[E]; - for (int i=0; i subsets[yroot].rank) - subsets[yroot].parent = xroot; - - // If ranks are same, then make one as root and increment - // its rank by one - else - { - subsets[yroot].parent = xroot; - subsets[xroot].rank++; - } - } - - // The main function to construct MST using Kruskal's algorithm - void KruskalMST() - { - Edge result[] = new Edge[V]; // Tnis will store the resultant MST - int e = 0; // An index variable, used for result[] - int i = 0; // An index variable, used for sorted edges - for (i=0; i= 0 && aVertex < this.numberOfVertices()) { - return true; - } else { - return false; - } - } - - public boolean edgeDoesExist(int from, int to) { - if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) { - return (this.adjacencyOfEdgeDoesExist(from, to)); - } - - return false; - } - - /** + private int _numberOfVertices; + private int _numberOfEdges; + private int[][] _adjacency; + + static final int EDGE_EXIST = 1; + static final int EDGE_NONE = 0; + + public AdjacencyMatrixGraph(int givenNumberOfVertices) { + this.setNumberOfVertices(givenNumberOfVertices); + this.setNumberOfEdges(0); + this.setAdjacency(new int[givenNumberOfVertices][givenNumberOfVertices]); + for (int i = 0; i < givenNumberOfVertices; i++) { + for (int j = 0; j < givenNumberOfVertices; j++) { + this.adjacency()[i][j] = AdjacencyMatrixGraph.EDGE_NONE; + } + } + } + + private void setNumberOfVertices(int newNumberOfVertices) { + this._numberOfVertices = newNumberOfVertices; + } + + public int numberOfVertices() { + return this._numberOfVertices; + } + + private void setNumberOfEdges(int newNumberOfEdges) { + this._numberOfEdges = newNumberOfEdges; + } + + public int numberOfEdges() { + return this._numberOfEdges; + } + + private void setAdjacency(int[][] newAdjacency) { + this._adjacency = newAdjacency; + } + + private int[][] adjacency() { + return this._adjacency; + } + + private boolean adjacencyOfEdgeDoesExist(int from, int to) { + return (this.adjacency()[from][to] != AdjacencyMatrixGraph.EDGE_NONE); + } + + public boolean vertexDoesExist(int aVertex) { + if (aVertex >= 0 && aVertex < this.numberOfVertices()) { + return true; + } else { + return false; + } + } + + public boolean edgeDoesExist(int from, int to) { + if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) { + return (this.adjacencyOfEdgeDoesExist(from, to)); + } + + return false; + } + + /** * This method adds an edge to the graph between two specified - * vertices + * vertices * * @param from the data of the vertex the edge is from - * @param to the data of the vertex the edge is going to + * @param to the data of the vertex the edge is going to * @return returns true if the edge did not exist, return false if it already did */ - public boolean addEdge(int from, int to) { - if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) { - if (!this.adjacencyOfEdgeDoesExist(from, to)) { - this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_EXIST; - this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_EXIST; - this.setNumberOfEdges(this.numberOfEdges() + 1); - return true; - } - } - - return false; - } - - /** + public boolean addEdge(int from, int to) { + if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) { + if (!this.adjacencyOfEdgeDoesExist(from, to)) { + this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_EXIST; + this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_EXIST; + this.setNumberOfEdges(this.numberOfEdges() + 1); + return true; + } + } + + return false; + } + + /** * this method removes an edge from the graph between two specified - * vertices + * vertices * * @param from the data of the vertex the edge is from - * @param to the data of the vertex the edge is going to + * @param to the data of the vertex the edge is going to * @return returns false if the edge doesn't exist, returns true if the edge exists and is removed */ - public boolean removeEdge(int from, int to) { - if(!this.vertexDoesExist(from) || !this.vertexDoesExist(to)) { - if (this.adjacencyOfEdgeDoesExist(from, to)) { - this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_NONE; - this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_NONE; - this.setNumberOfEdges(this.numberOfEdges() - 1); - return true; - } - } - return false; - } + public boolean removeEdge(int from, int to) { + if (!this.vertexDoesExist(from) || !this.vertexDoesExist(to)) { + if (this.adjacencyOfEdgeDoesExist(from, to)) { + this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_NONE; + this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_NONE; + this.setNumberOfEdges(this.numberOfEdges() - 1); + return true; + } + } + return false; + } /** * this gives a list of vertices in the graph and their adjacencies - * + * * @return returns a string describing this graph */ - public String toString() { - String s = new String(); - s = " "; - for (int i = 0; i < this.numberOfVertices(); i++) { - s = s + String.valueOf(i) + " "; - } - s = s + " \n"; - - for (int i = 0; i < this.numberOfVertices(); i++) { - s = s + String.valueOf(i) + " : "; - for (int j = 0; j < this.numberOfVertices(); j++) { - s = s + String.valueOf(this._adjacency[i][j]) + " "; - } - s = s + "\n"; - } - return s; - } + public String toString() { + String s = new String(); + s = " "; + for (int i = 0; i < this.numberOfVertices(); i++) { + s = s + String.valueOf(i) + " "; + } + s = s + " \n"; + + for (int i = 0; i < this.numberOfVertices(); i++) { + s = s + String.valueOf(i) + " : "; + for (int j = 0; j < this.numberOfVertices(); j++) { + s = s + String.valueOf(this._adjacency[i][j]) + " "; + } + s = s + "\n"; + } + return s; + } } diff --git a/DataStructures/Graphs/PrimMST.java b/DataStructures/Graphs/PrimMST.java index 25695050275c..32487feddefb 100644 --- a/DataStructures/Graphs/PrimMST.java +++ b/DataStructures/Graphs/PrimMST.java @@ -1,97 +1,91 @@ -// A Java program for Prim's Minimum Spanning Tree (MST) algorithm. -//adjacency matrix representation of the graph +package DataStructures.Graphs; import java.lang.*; - -class PrimMST -{ + +/** + * A Java program for Prim's Minimum Spanning Tree (MST) algorithm. + * adjacency matrix representation of the graph + */ +class PrimMST { // Number of vertices in the graph - private static final int V=5; - + private static final int V = 5; + // A utility function to find the vertex with minimum key // value, from the set of vertices not yet included in MST - int minKey(int key[], Boolean mstSet[]) - { + int minKey(int key[], Boolean mstSet[]) { // Initialize min value - int min = Integer.MAX_VALUE, min_index=-1; - + int min = Integer.MAX_VALUE, min_index = -1; + for (int v = 0; v < V; v++) - if (mstSet[v] == false && key[v] < min) - { + if (mstSet[v] == false && key[v] < min) { min = key[v]; min_index = v; } - + return min_index; } - + // A utility function to print the constructed MST stored in // parent[] - void printMST(int parent[], int n, int graph[][]) - { + void printMST(int parent[], int n, int graph[][]) { System.out.println("Edge Weight"); for (int i = 1; i < V; i++) - System.out.println(parent[i]+" - "+ i+" "+ - graph[i][parent[i]]); + System.out.println(parent[i] + " - " + i + " " + + graph[i][parent[i]]); } - + // Function to construct and print MST for a graph represented // using adjacency matrix representation - void primMST(int graph[][]) - { + void primMST(int graph[][]) { // Array to store constructed MST int parent[] = new int[V]; - + // Key values used to pick minimum weight edge in cut - int key[] = new int [V]; - + int key[] = new int[V]; + // To represent set of vertices not yet included in MST Boolean mstSet[] = new Boolean[V]; - + // Initialize all keys as INFINITE - for (int i = 0; i < V; i++) - { + for (int i = 0; i < V; i++) { key[i] = Integer.MAX_VALUE; mstSet[i] = false; } - + // Always include first 1st vertex in MST. key[0] = 0; // Make key 0 so that this vertex is - // picked as first vertex + // picked as first vertex parent[0] = -1; // First node is always root of MST - + // The MST will have V vertices - for (int count = 0; count < V-1; count++) - { + for (int count = 0; count < V - 1; count++) { // Pick thd minimum key vertex from the set of vertices // not yet included in MST int u = minKey(key, mstSet); - + // Add the picked vertex to the MST Set mstSet[u] = true; - + // Update key value and parent index of the adjacent // vertices of the picked vertex. Consider only those // vertices which are not yet included in MST for (int v = 0; v < V; v++) - + // graph[u][v] is non zero only for adjacent vertices of m // mstSet[v] is false for vertices not yet included in MST // Update the key only if graph[u][v] is smaller than key[v] - if (graph[u][v]!=0 && mstSet[v] == false && - graph[u][v] < key[v]) - { - parent[v] = u; + if (graph[u][v] != 0 && mstSet[v] == false && + graph[u][v] < key[v]) { + parent[v] = u; key[v] = graph[u][v]; } } - + // print the constructed MST printMST(parent, V, graph); } - - public static void main (String[] args) - { + + public static void main(String[] args) { /* Let us create the following graph 2 3 (0)--(1)--(2) @@ -101,13 +95,13 @@ public static void main (String[] args) (3)-------(4) 9 */ PrimMST t = new PrimMST(); - int graph[][] = new int[][] {{0, 2, 0, 6, 0}, - {2, 0, 3, 8, 5}, - {0, 3, 0, 0, 7}, - {6, 8, 0, 0, 9}, - {0, 5, 7, 9, 0}, - }; - + int graph[][] = new int[][]{{0, 2, 0, 6, 0}, + {2, 0, 3, 8, 5}, + {0, 3, 0, 0, 7}, + {6, 8, 0, 0, 9}, + {0, 5, 7, 9, 0}, + }; + // Print the solution t.primMST(graph); } diff --git a/DataStructures/HashMap/Hashing/HashMap.java b/DataStructures/HashMap/Hashing/HashMap.java index b51579bdf8bf..c4668b4ab925 100644 --- a/DataStructures/HashMap/Hashing/HashMap.java +++ b/DataStructures/HashMap/Hashing/HashMap.java @@ -1,39 +1,43 @@ +package DataStructures.HashMap.Hashing; + + class HashMap { - private int hsize; - private LinkedList[] buckets; - - public HashMap(int hsize) { - buckets = new LinkedList[hsize]; - for (int i = 0; i < hsize ; i++ ) { - buckets[i] = new LinkedList(); - // Java requires explicit initialisaton of each object - } - this.hsize = hsize; - } - - public int hashing(int key) { - int hash = key % hsize; - if(hash < 0) - hash += hsize; - return hash; - } - - public void insertHash(int key) { - int hash = hashing(key); - buckets[hash].insert(key); - } - - - public void deleteHash(int key) { - int hash = hashing(key); - - buckets[hash].delete(key); - } - public void displayHashtable() { - for (int i = 0;i < hsize ; i++) { - System.out.printf("Bucket %d :",i); - buckets[i].display(); - } - } + private int hsize; + private LinkedList[] buckets; + + public HashMap(int hsize) { + buckets = new LinkedList[hsize]; + for (int i = 0; i < hsize; i++) { + buckets[i] = new LinkedList(); + // Java requires explicit initialisaton of each object + } + this.hsize = hsize; + } + + public int hashing(int key) { + int hash = key % hsize; + if (hash < 0) + hash += hsize; + return hash; + } + + public void insertHash(int key) { + int hash = hashing(key); + buckets[hash].insert(key); + } + + + public void deleteHash(int key) { + int hash = hashing(key); + + buckets[hash].delete(key); + } + + public void displayHashtable() { + for (int i = 0; i < hsize; i++) { + System.out.printf("Bucket %d :", i); + buckets[i].display(); + } + } } \ No newline at end of file diff --git a/DataStructures/HashMap/Hashing/LinkedList.java b/DataStructures/HashMap/Hashing/LinkedList.java index 6c6cd9bb6df7..8c4ec0f732da 100644 --- a/DataStructures/HashMap/Hashing/LinkedList.java +++ b/DataStructures/HashMap/Hashing/LinkedList.java @@ -1,3 +1,5 @@ +package DataStructures.HashMap.Hashing; + class LinkedList { private Node Head; diff --git a/DataStructures/HashMap/Hashing/Main.java b/DataStructures/HashMap/Hashing/Main.java index 0acc781780de..66f65c1d9064 100644 --- a/DataStructures/HashMap/Hashing/Main.java +++ b/DataStructures/HashMap/Hashing/Main.java @@ -1,3 +1,5 @@ +package DataStructures.HashMap.Hashing; + import java.util.Scanner; public class Main { diff --git a/DataStructures/HashMap/Hashing/Node.java b/DataStructures/HashMap/Hashing/Node.java index 4a18ddd722eb..74ab01f9d2a9 100644 --- a/DataStructures/HashMap/Hashing/Node.java +++ b/DataStructures/HashMap/Hashing/Node.java @@ -1,3 +1,5 @@ +package DataStructures.HashMap.Hashing; + class Node { int data; Node next; diff --git a/DataStructures/Heaps/EmptyHeapException.java b/DataStructures/Heaps/EmptyHeapException.java index 38b4b756f3df..a0fda5f53786 100644 --- a/DataStructures/Heaps/EmptyHeapException.java +++ b/DataStructures/Heaps/EmptyHeapException.java @@ -1,6 +1,3 @@ -/** - * - */ package DataStructures.Heaps; /** diff --git a/DataStructures/Heaps/HeapElement.java b/DataStructures/Heaps/HeapElement.java index 6799f973f466..113146012918 100644 --- a/DataStructures/Heaps/HeapElement.java +++ b/DataStructures/Heaps/HeapElement.java @@ -1,6 +1,3 @@ -/** - * - */ package DataStructures.Heaps; import java.lang.Double; diff --git a/DataStructures/Heaps/MinHeap.java b/DataStructures/Heaps/MinHeap.java index 7b49b7512bac..4b435e6d81d7 100644 --- a/DataStructures/Heaps/MinHeap.java +++ b/DataStructures/Heaps/MinHeap.java @@ -1,6 +1,3 @@ -/** - * - */ package DataStructures.Heaps; import java.util.ArrayList; diff --git a/DataStructures/Heaps/MinPriorityQueue.java b/DataStructures/Heaps/MinPriorityQueue.java index 6da21ab5b03f..52e475abf4be 100644 --- a/DataStructures/Heaps/MinPriorityQueue.java +++ b/DataStructures/Heaps/MinPriorityQueue.java @@ -1,5 +1,7 @@ package DataStructures.Heaps; -/* Minimum Priority Queue + +/** + * Minimum Priority Queue * It is a part of heap data structure * A heap is a specific tree based data structure * in which all the nodes of tree are in a specific order. @@ -7,10 +9,10 @@ * respect of their parents, can either be greater * or less than the parent. This makes it a min priority queue * or max priority queue. + *

+ *

+ * Functions: insert, delete, peek, isEmpty, print, heapSort, sink */ - -// Functions: insert, delete, peek, isEmpty, print, heapSort, sink - public class MinPriorityQueue { private int[] heap; private int capacity; diff --git a/DataStructures/Lists/CircleLinkedList.java b/DataStructures/Lists/CircleLinkedList.java index 1f9a49e1ae90..f26798dea29a 100644 --- a/DataStructures/Lists/CircleLinkedList.java +++ b/DataStructures/Lists/CircleLinkedList.java @@ -1,54 +1,65 @@ -public class CircleLinkedList{ - private static class Node{ - Node next; - E value; - private Node(E value, Node next){ - this.value = value; - this.next = next; - } - } - //For better O.O design this should be private allows for better black box design - private int size; - //this will point to dummy node; - private Node head; - //constructer for class.. here we will make a dummy node for circly linked list implementation with reduced error catching as our list will never be empty; - public CircleLinkedList(){ - //creation of the dummy node - head = new Node(null,head); - size = 0; - } - // getter for the size... needed because size is private. - public int getSize(){ return size;} - // for the sake of simplistiy this class will only contain the append function or addLast other add functions can be implemented however this is the basses of them all really. - public void append(E value){ - if(value == null){ - // we do not want to add null elements to the list. - throw new NullPointerException("Cannot add null element to the list"); - } - //head.next points to the last element; - head.next = new Node(value,head); - size++;} - public E remove(int pos){ - if(pos>size || pos< 0){ - //catching errors - throw new IndexOutOfBoundsException("position cannot be greater than size or negative"); - } - Node iterator = head.next; - //we need to keep track of the element before the element we want to remove we can see why bellow. - Node before = head; - for(int i = 1; i<=pos; i++){ +package DataStructures.Lists; + +public class CircleLinkedList { + private static class Node { + Node next; + E value; + + private Node(E value, Node next) { + this.value = value; + this.next = next; + } + } + + //For better O.O design this should be private allows for better black box design + private int size; + //this will point to dummy node; + private Node head; + + //constructer for class.. here we will make a dummy node for circly linked list implementation with reduced error catching as our list will never be empty; + public CircleLinkedList() { + //creation of the dummy node + head = new Node(null, head); + size = 0; + } + + // getter for the size... needed because size is private. + public int getSize() { + return size; + } + + // for the sake of simplistiy this class will only contain the append function or addLast other add functions can be implemented however this is the basses of them all really. + public void append(E value) { + if (value == null) { + // we do not want to add null elements to the list. + throw new NullPointerException("Cannot add null element to the list"); + } + //head.next points to the last element; + head.next = new Node(value, head); + size++; + } + + public E remove(int pos) { + if (pos > size || pos < 0) { + //catching errors + throw new IndexOutOfBoundsException("position cannot be greater than size or negative"); + } + Node iterator = head.next; + //we need to keep track of the element before the element we want to remove we can see why bellow. + Node before = head; + for (int i = 1; i <= pos; i++) { iterator = iterator.next; - before = before.next; - } - E saved = iterator.value; - // assigning the next referance to the the element following the element we want to remove... the last element will be assigned to the head. - before.next = iterator.next; - // scrubbing - iterator.next = null; - iterator.value = null; - return saved; - - } - - } + before = before.next; + } + E saved = iterator.value; + // assigning the next referance to the the element following the element we want to remove... the last element will be assigned to the head. + before.next = iterator.next; + // scrubbing + iterator.next = null; + iterator.value = null; + return saved; + + } + +} diff --git a/DataStructures/Lists/CursorLinkedList.java b/DataStructures/Lists/CursorLinkedList.java index 04e2115df82b..6e1caefc620b 100644 --- a/DataStructures/Lists/CursorLinkedList.java +++ b/DataStructures/Lists/CursorLinkedList.java @@ -1,3 +1,7 @@ +package DataStructures.Lists; + +import java.util.Objects; + public class CursorLinkedList { private static class Node { @@ -93,8 +97,8 @@ public T get(int position) { while (start != -1) { T element = cursorSpace[start].element; - if (counter == position){ - return element; + if (counter == position) { + return element; } start = cursorSpace[start].next; @@ -107,9 +111,9 @@ public T get(int position) { } - public void removeByIndex(int index){ + public void removeByIndex(int index) { - if(index >= 0 && index < count){ + if (index >= 0 && index < count) { T element = get(index); remove(element); @@ -130,13 +134,13 @@ public void remove(T element) { head = temp_next; } else { // otherwise cases - int prev_index = head; + int prev_index = head; int current_index = cursorSpace[prev_index].next; - while (current_index != -1 ) { + while (current_index != -1) { T current_element = cursorSpace[current_index].element; - if(current_element.equals(element)){ + if (current_element.equals(element)) { cursorSpace[prev_index].next = cursorSpace[current_index].next; free(current_index); break; diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index f66c77ddf7eb..fd250d956faf 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -1,3 +1,4 @@ +package DataStructures.Lists; /** * This class implements a DoublyLinkedList. This is done using the classes @@ -13,7 +14,7 @@ * @author Unknown */ -class DoublyLinkedList { +public class DoublyLinkedList { /** * Head refers to the front of the list */ diff --git a/DataStructures/Lists/Merge_K_SortedLinkedlist.java b/DataStructures/Lists/Merge_K_SortedLinkedlist.java index bea2c31615b0..bdee79f8f5f7 100644 --- a/DataStructures/Lists/Merge_K_SortedLinkedlist.java +++ b/DataStructures/Lists/Merge_K_SortedLinkedlist.java @@ -1,3 +1,5 @@ +package DataStructures.Lists; + import java.util.Arrays; import java.util.Comparator; import java.util.PriorityQueue; diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index c9d2413a8375..74cb0cb88998 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -1,3 +1,5 @@ +package DataStructures.Lists; + /** * This class implements a SinglyLinked List. This is done * using SinglyLinkedList class and a LinkForLinkedList Class. @@ -8,10 +10,8 @@ * it grows and shrinks as it is edited. This is an example of * a singly linked list. Elements can only be added/removed * at the head/front of the list. - * - * @author yanglbme */ -class SinglyLinkedList { +public class SinglyLinkedList { /** * Head refer to the front of the list */ @@ -38,8 +38,7 @@ public void insertHead(int x) { public void insertNth(int data, int position) { if (position < 0 || position > getSize()) { throw new RuntimeException("position less than zero or position more than the count of list"); - } - else if (position == 0) + } else if (position == 0) insertHead(data); else { Node cur = head; @@ -66,13 +65,12 @@ public void deleteHead() { } /** - * This method deletes an element at Nth position - */ + * This method deletes an element at Nth position + */ public void deleteNth(int position) { - if (position < 0 || position > getSize()) { + if (position < 0 || position > getSize()) { throw new RuntimeException("position less than zero or position more than the count of list"); - } - else if (position == 0) + } else if (position == 0) deleteHead(); else { Node cur = head; @@ -105,8 +103,8 @@ public void display() { } /** - * Returns the size of the linked list - */ + * Returns the size of the linked list + */ public int getSize() { if (head == null) return 0; @@ -156,8 +154,6 @@ public static void main(String args[]) { * This class is the nodes of the SinglyLinked List. * They consist of a value and a pointer to the node * after them. - * - * @author yanglbme */ class Node { /** diff --git a/DataStructures/Matrix/Matrix.java b/DataStructures/Matrix/Matrix.java index dc1ac4263795..cfae1fd81b23 100644 --- a/DataStructures/Matrix/Matrix.java +++ b/DataStructures/Matrix/Matrix.java @@ -1,15 +1,17 @@ +package DataStructures.Matrix; + /** -* Matrix data-type. -* -* @author Kyler Smith, 2017 -*/ + * Matrix data-type. + * + * @author Kyler Smith, 2017 + */ public class Matrix { - public static void main(String[] args) { + public static void main(String[] args) { - int[][] data1 = new int[0][0]; + int[][] data1 = new int[0][0]; int[][] data2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int[][] data3 = {{1, 4, 7}, {2, 5, 8}, {3, 6, 9}}; @@ -38,28 +40,28 @@ public static void main(String[] args) { System.out.println("m2 / 2:\n" + m2.divide(2)); System.out.println("m2 + m3:\n" + m2.plus(m3)); System.out.println("m2 - m3:\n" + m2.minus(m3)); - System.out.println("m2 * m3: \n"+m2.multiply(m3)); - } + System.out.println("m2 * m3: \n" + m2.multiply(m3)); + } /** - * Data needs to be a deep copy as not to change the original state. + * Data needs to be a deep copy as not to change the original state. */ private int[][] data; /** - * Constructor for the matrix takes in a 2D array - * - * @param pData - */ + * Constructor for the matrix takes in a 2D array + * + * @param pData + */ public Matrix(int[][] pData) { /** Make a deep copy of the data */ - if(pData.length != 0) { + if (pData.length != 0) { int[][] newData = new int[pData.length][pData[0].length]; - for(int i = 0; i < pData.length; i++) - for(int j = 0; j < pData[0].length; j++) + for (int i = 0; i < pData.length; i++) + for (int j = 0; j < pData[0].length; j++) newData[i][j] = pData[i][j]; this.data = newData; @@ -69,178 +71,178 @@ public Matrix(int[][] pData) { } /** - * Returns the element specified by the given location - * - * @param x : x cooridinate - * @param y : y cooridinate - * @return int : value at location - */ + * Returns the element specified by the given location + * + * @param x : x cooridinate + * @param y : y cooridinate + * @return int : value at location + */ public int getElement(int x, int y) { return data[x][y]; } /** - * Returns the number of rows in the Matrix - * - * @return rows - */ + * Returns the number of rows in the Matrix + * + * @return rows + */ public int getRows() { - if(this.data == null) - return 0; + if (this.data == null) + return 0; return data.length; } /** - * Returns the number of rows in the Matrix - * - * @return columns - */ + * Returns the number of rows in the Matrix + * + * @return columns + */ public int getColumns() { - if(this.data == null) - return 0; + if (this.data == null) + return 0; return data[0].length; } /** - * Returns this matrix scaled by a factor. That is, computes sA where s is a - * constant and A is a matrix (this object). - * - * @param scalar : value to scale by - * @return A new matrix scaled by the scalar value - */ + * Returns this matrix scaled by a factor. That is, computes sA where s is a + * constant and A is a matrix (this object). + * + * @param scalar : value to scale by + * @return A new matrix scaled by the scalar value + */ public Matrix scale(int scalar) { - int[][] newData = new int[this.data.length][this.data[0].length]; + int[][] newData = new int[this.data.length][this.data[0].length]; - for (int i = 0; i < this.getRows(); ++i) - for(int j = 0; j < this.getColumns(); ++j) - newData[i][j] = this.data[i][j] * scalar; + for (int i = 0; i < this.getRows(); ++i) + for (int j = 0; j < this.getColumns(); ++j) + newData[i][j] = this.data[i][j] * scalar; - return new Matrix(newData); + return new Matrix(newData); } - + /** - * Returns this matrix divided by a factor. That is, computes sA where s is a - * constant and A is a matrix (this object). - * - * @param scalar : value to divide by - * @return A new matrix scaled by the scalar value - */ + * Returns this matrix divided by a factor. That is, computes sA where s is a + * constant and A is a matrix (this object). + * + * @param scalar : value to divide by + * @return A new matrix scaled by the scalar value + */ public Matrix divide(int scalar) { - int[][] newData = new int[this.data.length][this.data[0].length]; + int[][] newData = new int[this.data.length][this.data[0].length]; - for (int i = 0; i < this.getRows(); ++i) - for(int j = 0; j < this.getColumns(); ++j) - newData[i][j] = this.data[i][j] / scalar; + for (int i = 0; i < this.getRows(); ++i) + for (int j = 0; j < this.getColumns(); ++j) + newData[i][j] = this.data[i][j] / scalar; - return new Matrix(newData); + return new Matrix(newData); } /** - * Adds this matrix to another matrix. - * - * @param other : Matrix to be added - * @return addend - */ + * Adds this matrix to another matrix. + * + * @param other : Matrix to be added + * @return addend + */ public Matrix plus(Matrix other) throws RuntimeException { - int[][] newData = new int[this.data.length][this.data[0].length]; + int[][] newData = new int[this.data.length][this.data[0].length]; - if(this.getRows() != other.getRows() || this.getColumns() != other.getColumns()) - throw new RuntimeException("Not the same size matrix."); + if (this.getRows() != other.getRows() || this.getColumns() != other.getColumns()) + throw new RuntimeException("Not the same size matrix."); - for (int i = 0; i < this.getRows(); ++i) - for(int j = 0; j < this.getColumns(); ++j) - newData[i][j] = this.data[i][j] + other.getElement(i, j); + for (int i = 0; i < this.getRows(); ++i) + for (int j = 0; j < this.getColumns(); ++j) + newData[i][j] = this.data[i][j] + other.getElement(i, j); return new Matrix(newData); } /** - * Subtracts this matrix from another matrix. - * - * @param other : Matrix to be subtracted - * @return difference - */ + * Subtracts this matrix from another matrix. + * + * @param other : Matrix to be subtracted + * @return difference + */ public Matrix minus(Matrix other) throws RuntimeException { - int[][] newData = new int[this.data.length][this.data[0].length]; + int[][] newData = new int[this.data.length][this.data[0].length]; - if(this.getRows() != other.getRows() || this.getColumns() != other.getColumns()) - throw new RuntimeException("Not the same size matrix."); + if (this.getRows() != other.getRows() || this.getColumns() != other.getColumns()) + throw new RuntimeException("Not the same size matrix."); - for (int i = 0; i < this.getRows(); ++i) - for(int j = 0; j < this.getColumns(); ++j) - newData[i][j] = this.data[i][j] - other.getElement(i, j); + for (int i = 0; i < this.getRows(); ++i) + for (int j = 0; j < this.getColumns(); ++j) + newData[i][j] = this.data[i][j] - other.getElement(i, j); return new Matrix(newData); } - + /** * Multiplies this matrix with another matrix. * * @param other : Matrix to be multiplied with * @return product */ - public Matrix multiply(Matrix other) throws RuntimeException { - - int[][] newData = new int[this.data.length][other.getColumns()]; - - if(this.getColumns() !=other.getRows()) - throw new RuntimeException("The two matrices cannot be multiplied."); - int sum; - for (int i = 0; i < this.getRows(); ++i) - for(int j = 0; j < other.getColumns(); ++j){ - sum = 0; - for(int k=0;k + * [ a b c ] ... + * [ x y z ] ... + * [ i j k ] ... + * ... + * + * @return Matrix as String + * TODO: Work formatting for different digit sizes + */ public String toString() { String str = ""; - for(int i = 0; i < this.data.length; i++) { - str += "[ "; - for(int j = 0; j < this.data[0].length; j++) { - str += data[i][j]; - str += " "; + for (int i = 0; i < this.data.length; i++) { + str += "[ "; + for (int j = 0; j < this.data[0].length; j++) { + str += data[i][j]; + str += " "; } str += "]"; str += "\n"; @@ -248,20 +250,20 @@ public String toString() { return str; } - - /** - * Returns transposed matrix of this matrix. - * - * @return transposed Matrix. - */ - public Matrix transpose() { - - int[][] newData = new int[this.data[0].length][this.data.length]; - - for (int i = 0; i < this.getColumns(); ++i) - for(int j = 0; j < this.getRows(); ++j) - newData[i][j] = this.data[j][i]; - - return new Matrix(newData); - } + + /** + * Returns transposed matrix of this matrix. + * + * @return transposed Matrix. + */ + public Matrix transpose() { + + int[][] newData = new int[this.data[0].length][this.data.length]; + + for (int i = 0; i < this.getColumns(); ++i) + for (int j = 0; j < this.getRows(); ++j) + newData[i][j] = this.data[j][i]; + + return new Matrix(newData); + } } diff --git a/DataStructures/Matrix/MatrixFastPower.java b/DataStructures/Matrix/MatrixFastPower.java deleted file mode 100644 index 19f8528a36ec..000000000000 --- a/DataStructures/Matrix/MatrixFastPower.java +++ /dev/null @@ -1,191 +0,0 @@ -/** - * - * Java implementation of Matrix fast power - * It can calculate the high power of constant Matrix with O( log(K) ) - * where K is the power of the Matrix - * - * In order to do that, Matrix must be square Matrix ( columns equals rows) - * - * Notice : large power of Matrix may cause overflow - * - * - * other Matrix basic operator is based on @author Kyler Smith, 2017 - * - * @author DDullahan, 2018 - * - */ - -class MatrixFastPower { - - /** - * Matrix Fast Power - * - * @param matrix : square Matrix - * @param k : power of Matrix - * @return product - */ - public static Matrix FastPower(Matrix matrix, int k) throws RuntimeException { - - if(matrix.getColumns() != matrix.getRows()) - throw new RuntimeException("Matrix is not square Matrix."); - - int[][] newData = new int[matrix.getColumns()][matrix.getRows()]; - - for(int i = 0; i < matrix.getColumns(); i++) - newData[i][i] = 1; - - Matrix newMatrix = new Matrix(newData), - coMatrix = new Matrix(matrix.data); - - while(k != 0) { - - if((k & 1) != 0) - newMatrix = newMatrix.multiply(coMatrix); - - k >>= 1; - coMatrix = coMatrix.multiply(coMatrix); - - } - - return newMatrix; - } - - public static void main(String[] argv) { - - int[][] data = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; - Matrix matrix = new Matrix(data); - - System.out.println("original matrix : "); - System.out.println(matrix.toString()); - - matrix = MatrixFastPower.FastPower(matrix, 5); - - System.out.println("after power : "); - System.out.println(matrix.toString()); - - matrix = MatrixFastPower.FastPower(matrix, 1000000); - - System.out.println("notice, large power may cause overflow : "); - System.out.print(matrix.toString()); - System.out.println("you can use mod to fix that :-) "); - - } -} -class Matrix { - public int[][] data; - - /** - * Constructor for the matrix takes in a 2D array - * - * @param pData - */ - public Matrix(int[][] pData) { - - /** Make a deep copy of the data */ - if(pData.length != 0) { - int[][] newData = new int[pData.length][pData[0].length]; - - for(int i = 0; i < pData.length; i++) - for(int j = 0; j < pData[0].length; j++) - newData[i][j] = pData[i][j]; - - this.data = newData; - } else { - this.data = null; - } - } - - /** - * Returns the element specified by the given location - * - * @param x : x cooridinate - * @param y : y cooridinate - * @return int : value at location - */ - public int getElement(int x, int y) { - return data[x][y]; - } - - /** - * Returns the number of rows in the Matrix - * - * @return rows - */ - public int getRows() { - if(this.data == null) - return 0; - - return data.length; - } - - /** - * Returns the number of rows in the Matrix - * - * @return columns - */ - public int getColumns() { - if(this.data == null) - return 0; - - return data[0].length; - } - - /** - * Multiplies this matrix with another matrix. - * - * @param other : Matrix to be multiplied with - * @return product - */ - public Matrix multiply(Matrix other) throws RuntimeException { - - int[][] newData = new int[this.data.length][other.getColumns()]; - - if(this.getColumns() != other.getRows()) - throw new RuntimeException("The two matrices cannot be multiplied."); - - int sum; - - for (int i = 0; i < this.getRows(); ++i) - for(int j = 0; j < other.getColumns(); ++j) { - sum = 0; - - for(int k = 0; k < this.getColumns(); ++k) { - sum += this.data[i][k] * other.getElement(k, j); - } - - newData[i][j] = sum; - } - - return new Matrix(newData); - } - - /** - * Returns the Matrix as a String in the following format - * - * [ a b c ] ... - * [ x y z ] ... - * [ i j k ] ... - * ... - * - * @return Matrix as String - * TODO: Work formatting for different digit sizes - */ - public String toString() { - String str = ""; - - for(int i = 0; i < this.data.length; i++) { - str += "[ "; - - for(int j = 0; j < this.data[0].length; j++) { - str += data[i][j]; - str += " "; - } - - str += "]"; - str += "\n"; - } - - return str; - } - -} diff --git a/DataStructures/Queues/GenericArrayListQueue.java b/DataStructures/Queues/GenericArrayListQueue.java index 0d35227f0ad1..d287fdcee876 100644 --- a/DataStructures/Queues/GenericArrayListQueue.java +++ b/DataStructures/Queues/GenericArrayListQueue.java @@ -1,3 +1,5 @@ +package DataStructures.Queues; + import java.util.ArrayList; public class GenericArrayListQueue { diff --git a/DataStructures/Queues/PriorityQueues.java b/DataStructures/Queues/PriorityQueues.java index e709b13683a0..bbefa1f6949e 100644 --- a/DataStructures/Queues/PriorityQueues.java +++ b/DataStructures/Queues/PriorityQueues.java @@ -1,3 +1,5 @@ +package DataStructures.Queues; + /** * This class implements a PriorityQueue. *

@@ -6,7 +8,6 @@ * In this example I give numbers that are bigger, a higher priority. * Queues in theory have no fixed size but when using an array * implementation it does. - * */ class PriorityQueue { /** diff --git a/DataStructures/Queues/Queues.java b/DataStructures/Queues/Queues.java index cd66d5af0118..046964bcb114 100644 --- a/DataStructures/Queues/Queues.java +++ b/DataStructures/Queues/Queues.java @@ -1,3 +1,5 @@ +package DataStructures.Queues; + /** * This implements Queues by using the class Queue. *

diff --git a/DataStructures/Stacks/StackOfLinkedList.java b/DataStructures/Stacks/StackOfLinkedList.java index d9f737040271..093442112df5 100644 --- a/DataStructures/Stacks/StackOfLinkedList.java +++ b/DataStructures/Stacks/StackOfLinkedList.java @@ -1,3 +1,5 @@ +package DataStructures.Stacks; + /** * @author Varun Upadhyay (https://github.com/varunu28) */ diff --git a/DataStructures/Trees/AVLTree.java b/DataStructures/Trees/AVLTree.java index 720d46fd51df..b496be6961fa 100644 --- a/DataStructures/Trees/AVLTree.java +++ b/DataStructures/Trees/AVLTree.java @@ -1,19 +1,21 @@ +package DataStructures.Trees; + public class AVLTree { - + private Node root; - + private class Node { private int key; private int balance; private int height; private Node left, right, parent; - + Node(int k, Node p) { key = k; parent = p; } } - + public boolean insert(int key) { if (root == null) root = new Node(key, null); @@ -23,12 +25,12 @@ public boolean insert(int key) { while (true) { if (n.key == key) return false; - + parent = n; - + boolean goLeft = n.key > key; n = goLeft ? n.left : n.right; - + if (n == null) { if (goLeft) { parent.left = new Node(key, parent); @@ -42,38 +44,38 @@ public boolean insert(int key) { } return true; } - - private void delete(Node node){ - if(node.left == null && node.right == null){ - if(node.parent == null) root = null; - else{ + + private void delete(Node node) { + if (node.left == null && node.right == null) { + if (node.parent == null) root = null; + else { Node parent = node.parent; - if(parent.left == node){ + if (parent.left == node) { parent.left = null; - }else parent.right = null; + } else parent.right = null; rebalance(parent); } return; } - if(node.left!=null){ + if (node.left != null) { Node child = node.left; - while (child.right!=null) child = child.right; + while (child.right != null) child = child.right; node.key = child.key; delete(child); - }else{ + } else { Node child = node.right; - while (child.left!=null) child = child.left; + while (child.left != null) child = child.left; node.key = child.key; delete(child); } } - + public void delete(int delKey) { if (root == null) return; Node node = root; Node child = root; - + while (child != null) { node = child; child = delKey >= node.key ? node.right : node.left; @@ -83,43 +85,43 @@ public void delete(int delKey) { } } } - + private void rebalance(Node n) { setBalance(n); - + if (n.balance == -2) { if (height(n.left.left) >= height(n.left.right)) n = rotateRight(n); else n = rotateLeftThenRight(n); - + } else if (n.balance == 2) { if (height(n.right.right) >= height(n.right.left)) n = rotateLeft(n); else n = rotateRightThenLeft(n); } - + if (n.parent != null) { rebalance(n.parent); } else { root = n; } } - + private Node rotateLeft(Node a) { - + Node b = a.right; b.parent = a.parent; - + a.right = b.left; - + if (a.right != null) a.right.parent = a; - + b.left = a; a.parent = b; - + if (b.parent != null) { if (b.parent.right == a) { b.parent.right = b; @@ -127,25 +129,25 @@ private Node rotateLeft(Node a) { b.parent.left = b; } } - + setBalance(a, b); - + return b; } - + private Node rotateRight(Node a) { - + Node b = a.left; b.parent = a.parent; - + a.left = b.right; - + if (a.left != null) a.left.parent = a; - + b.right = a; a.parent = b; - + if (b.parent != null) { if (b.parent.right == a) { b.parent.right = b; @@ -153,39 +155,39 @@ private Node rotateRight(Node a) { b.parent.left = b; } } - + setBalance(a, b); - + return b; } - + private Node rotateLeftThenRight(Node n) { n.left = rotateLeft(n.left); return rotateRight(n); } - + private Node rotateRightThenLeft(Node n) { n.right = rotateRight(n.right); return rotateLeft(n); } - + private int height(Node n) { if (n == null) return -1; return n.height; } - + private void setBalance(Node... nodes) { for (Node n : nodes) { reheight(n); n.balance = height(n.right) - height(n.left); } } - + public void printBalance() { printBalance(root); } - + private void printBalance(Node n) { if (n != null) { printBalance(n.left); @@ -193,20 +195,20 @@ private void printBalance(Node n) { printBalance(n.right); } } - - private void reheight(Node node){ - if(node!=null){ - node.height=1 + Math.max(height(node.left), height(node.right)); + + private void reheight(Node node) { + if (node != null) { + node.height = 1 + Math.max(height(node.left), height(node.right)); } } - + public static void main(String[] args) { AVLTree tree = new AVLTree(); - + System.out.println("Inserting values 1 to 10"); for (int i = 1; i < 10; i++) tree.insert(i); - + System.out.print("Printing balance: "); tree.printBalance(); } diff --git a/DataStructures/Trees/BinaryTree.java b/DataStructures/Trees/BinaryTree.java index 0c6e89cd36ae..75d3af18e56b 100644 --- a/DataStructures/Trees/BinaryTree.java +++ b/DataStructures/Trees/BinaryTree.java @@ -1,272 +1,275 @@ +package DataStructures.Trees; + /** -* This entire class is used to build a Binary Tree data structure. -* There is the Node Class and the Tree Class, both explained below. -* -* @author Unknown -* -*/ + * This entire class is used to build a Binary Tree data structure. + * There is the Node Class and the Tree Class, both explained below. + */ /** -* This class implements the nodes that will go on the Binary Tree. -* They consist of the data in them, the node to the left, the node -* to the right, and the parent from which they came from. -* -* @author Unknown -* -*/ -class Node{ - /** Data for the node */ - public int data; - /** The Node to the left of this one */ - public Node left; - /** The Node to the right of this one */ - public Node right; - /** The parent of this node */ - public Node parent; + * A binary tree is a data structure in which an element + * has two successors(children). The left child is usually + * smaller than the parent, and the right child is usually + * bigger. + * + * @author Unknown + * + */ +public class BinaryTree { - /** - * Constructor of Node - * - * @param value Value to put in the node - */ - public Node(int value){ - data = value; - left = null; - right = null; - parent = null; - } -} + /** + * This class implements the nodes that will go on the Binary Tree. + * They consist of the data in them, the node to the left, the node + * to the right, and the parent from which they came from. + * + * @author Unknown + * + */ + class Node { + /** Data for the node */ + public int data; + /** The Node to the left of this one */ + public Node left; + /** The Node to the right of this one */ + public Node right; + /** The parent of this node */ + public Node parent; + /** + * Constructor of Node + * + * @param value Value to put in the node + */ + public Node(int value) { + data = value; + left = null; + right = null; + parent = null; + } + } -/** -* A binary tree is a data structure in which an element -* has two successors(children). The left child is usually -* smaller than the parent, and the right child is usually -* bigger. -* -* @author Unknown -* -*/ -class Tree{ - /** The root of the Binary Tree */ - private Node root; - /** - * Constructor - */ - public Tree(){ - root = null; - } + /** The root of the Binary Tree */ + private Node root; - /** - * Method to find a Node with a certain value - * - * @param key Value being looked for - * @return The node if it finds it, otherwise returns the parent - */ - public Node find(int key) { - Node current = root; - while (current != null) { - if(key < current.data) { - if(current.left == null) - return current; //The key isn't exist, returns the parent - current = current.left; - } else if(key > current.data) { - if(current.right == null) - return current; - current = current.right; - } else { // If you find the value return it - return current; - } - } - return null; - } + /** + * Constructor + */ + public BinaryTree() { + root = null; + } - /** - * Inserts certain value into the Binary Tree - * - * @param value Value to be inserted - */ - public void put(int value){ - Node newNode = new Node(value); - if(root == null) - root = newNode; - else{ - //This will return the soon to be parent of the value you're inserting - Node parent = find(value); + /** + * Method to find a Node with a certain value + * + * @param key Value being looked for + * @return The node if it finds it, otherwise returns the parent + */ + public Node find(int key) { + Node current = root; + while (current != null) { + if (key < current.data) { + if (current.left == null) + return current; //The key isn't exist, returns the parent + current = current.left; + } else if (key > current.data) { + if (current.right == null) + return current; + current = current.right; + } else { // If you find the value return it + return current; + } + } + return null; + } - //This if/else assigns the new node to be either the left or right child of the parent - if(value < parent.data){ - parent.left = newNode; - parent.left.parent = parent; - return; - } - else{ - parent.right = newNode; - parent.right.parent = parent; - return; - } - } - } + /** + * Inserts certain value into the Binary Tree + * + * @param value Value to be inserted + */ + public void put(int value) { + Node newNode = new Node(value); + if (root == null) + root = newNode; + else { + //This will return the soon to be parent of the value you're inserting + Node parent = find(value); - /** - * Deletes a given value from the Binary Tree - * - * @param value Value to be deleted - * @return If the value was deleted - */ - public boolean remove(int value){ - //temp is the node to be deleted - Node temp = find(value); + //This if/else assigns the new node to be either the left or right child of the parent + if (value < parent.data) { + parent.left = newNode; + parent.left.parent = parent; + return; + } else { + parent.right = newNode; + parent.right.parent = parent; + return; + } + } + } - //If the value doesn't exist - if(temp.data != value) - return false; + /** + * Deletes a given value from the Binary Tree + * + * @param value Value to be deleted + * @return If the value was deleted + */ + public boolean remove(int value) { + //temp is the node to be deleted + Node temp = find(value); - //No children - if(temp.right == null && temp.left == null){ - if(temp == root) - root = null; + //If the value doesn't exist + if (temp.data != value) + return false; - //This if/else assigns the new node to be either the left or right child of the parent - else if(temp.parent.data < temp.data) - temp.parent.right = null; - else - temp.parent.left = null; - return true; - } + //No children + if (temp.right == null && temp.left == null) { + if (temp == root) + root = null; - //Two children - else if(temp.left != null && temp.right != null){ - Node successor = findSuccessor(temp); + //This if/else assigns the new node to be either the left or right child of the parent + else if (temp.parent.data < temp.data) + temp.parent.right = null; + else + temp.parent.left = null; + return true; + } - //The left tree of temp is made the left tree of the successor - successor.left = temp.left; - successor.left.parent = successor; + //Two children + else if (temp.left != null && temp.right != null) { + Node successor = findSuccessor(temp); - //If the successor has a right child, the child's grandparent is it's new parent - if(successor.right != null && successor.parent != temp){ - successor.right.parent = successor.parent; - successor.parent.left = successor.right; - successor.right = temp.right; - successor.right.parent = successor; - } - if(temp == root){ - successor.parent = null; - root = successor; - return true; - } + //The left tree of temp is made the left tree of the successor + successor.left = temp.left; + successor.left.parent = successor; - //If you're not deleting the root - else{ - successor.parent = temp.parent; + //If the successor has a right child, the child's grandparent is it's new parent + if (successor.right != null && successor.parent != temp) { + successor.right.parent = successor.parent; + successor.parent.left = successor.right; + successor.right = temp.right; + successor.right.parent = successor; + } + if (temp == root) { + successor.parent = null; + root = successor; + return true; + } - //This if/else assigns the new node to be either the left or right child of the parent - if(temp.parent.data < temp.data) - temp.parent.right = successor; - else - temp.parent.left = successor; - return true; - } - } - //One child - else{ - //If it has a right child - if(temp.right != null){ - if(temp == root){ - root = temp.right; return true;} + //If you're not deleting the root + else { + successor.parent = temp.parent; - temp.right.parent = temp.parent; + //This if/else assigns the new node to be either the left or right child of the parent + if (temp.parent.data < temp.data) + temp.parent.right = successor; + else + temp.parent.left = successor; + return true; + } + } + //One child + else { + //If it has a right child + if (temp.right != null) { + if (temp == root) { + root = temp.right; + return true; + } - //Assigns temp to left or right child - if(temp.data < temp.parent.data) - temp.parent.left = temp.right; - else - temp.parent.right = temp.right; - return true; - } - //If it has a left child - else{ - if(temp == root){ - root = temp.left; return true;} + temp.right.parent = temp.parent; - temp.left.parent = temp.parent; + //Assigns temp to left or right child + if (temp.data < temp.parent.data) + temp.parent.left = temp.right; + else + temp.parent.right = temp.right; + return true; + } + //If it has a left child + else { + if (temp == root) { + root = temp.left; + return true; + } - //Assigns temp to left or right side - if(temp.data < temp.parent.data) - temp.parent.left = temp.left; - else - temp.parent.right = temp.left; - return true; - } - } - } + temp.left.parent = temp.parent; - /** - * This method finds the Successor to the Node given. - * Move right once and go left down the tree as far as you can - * - * @param n Node that you want to find the Successor of - * @return The Successor of the node - */ - public Node findSuccessor(Node n){ - if(n.right == null) - return n; - Node current = n.right; - Node parent = n.right; - while(current != null){ - parent = current; - current = current.left; - } - return parent; - } + //Assigns temp to left or right side + if (temp.data < temp.parent.data) + temp.parent.left = temp.left; + else + temp.parent.right = temp.left; + return true; + } + } + } - /** - * Returns the root of the Binary Tree - * - * @return the root of the Binary Tree - */ - public Node getRoot(){ - return root; - } + /** + * This method finds the Successor to the Node given. + * Move right once and go left down the tree as far as you can + * + * @param n Node that you want to find the Successor of + * @return The Successor of the node + */ + public Node findSuccessor(Node n) { + if (n.right == null) + return n; + Node current = n.right; + Node parent = n.right; + while (current != null) { + parent = current; + current = current.left; + } + return parent; + } - /** - * Prints leftChild - root - rightChild - * - * @param localRoot The local root of the binary tree - */ - public void inOrder(Node localRoot){ - if(localRoot != null){ - inOrder(localRoot.left); - System.out.print(localRoot.data + " "); - inOrder(localRoot.right); - } - } + /** + * Returns the root of the Binary Tree + * + * @return the root of the Binary Tree + */ + public Node getRoot() { + return root; + } - /** - * Prints root - leftChild - rightChild - * - * @param localRoot The local root of the binary tree - */ - public void preOrder(Node localRoot){ - if(localRoot != null){ - System.out.print(localRoot.data + " "); - preOrder(localRoot.left); - preOrder(localRoot.right); - } - } + /** + * Prints leftChild - root - rightChild + * + * @param localRoot The local root of the binary tree + */ + public void inOrder(Node localRoot) { + if (localRoot != null) { + inOrder(localRoot.left); + System.out.print(localRoot.data + " "); + inOrder(localRoot.right); + } + } - /** - * Prints rightChild - leftChild - root - * - * @param localRoot The local root of the binary tree - */ - public void postOrder(Node localRoot){ - if(localRoot != null){ - postOrder(localRoot.left); - postOrder(localRoot.right); - System.out.print(localRoot.data + " "); - } - } - } + /** + * Prints root - leftChild - rightChild + * + * @param localRoot The local root of the binary tree + */ + public void preOrder(Node localRoot) { + if (localRoot != null) { + System.out.print(localRoot.data + " "); + preOrder(localRoot.left); + preOrder(localRoot.right); + } + } + + /** + * Prints rightChild - leftChild - root + * + * @param localRoot The local root of the binary tree + */ + public void postOrder(Node localRoot) { + if (localRoot != null) { + postOrder(localRoot.left); + postOrder(localRoot.right); + System.out.print(localRoot.data + " "); + } + } +} diff --git a/DataStructures/Trees/FindHeightOfTree.java b/DataStructures/Trees/FindHeightOfTree.java deleted file mode 100644 index 675b1e8b57cb..000000000000 --- a/DataStructures/Trees/FindHeightOfTree.java +++ /dev/null @@ -1,100 +0,0 @@ -/** - * - * @author Varun Upadhyay (https://github.com/varunu28) - * - */ -import java.util.LinkedList; - -public class FindHeightOfTree { - - // Driver Program - public static void main(String[] args) { - Node tree = new Node(5); - tree.insert(3); - tree.insert(7); - tree.insert(1); - tree.insert(-1); - tree.insert(29); - tree.insert(93); - tree.insert(6); - tree.insert(0); - tree.insert(-5); - tree.insert(-6); - tree.insert(-8); - tree.insert(-1); - - // A level order representation of the tree - tree.printLevelOrder(); - System.out.println(); - - System.out.println("Height of the tree is: " + tree.findHeight()); - } -} - -/** - * The Node class which initializes a Node of a tree - * printLevelOrder: ROOT -> ROOT's CHILDREN -> ROOT's CHILDREN's CHILDREN -> etc - * findHeight: Returns the height of the tree i.e. the number of links between root and farthest leaf - */ -class Node { - Node left, right; - int data; - - public Node(int data) { - this.data = data; - } - - public void insert (int value) { - if (value < data) { - if (left == null) { - left = new Node(value); - } - else { - left.insert(value); - } - } - else { - if (right == null) { - right = new Node(value); - } - else { - right.insert(value); - } - } - } - - public void printLevelOrder() { - LinkedList queue = new LinkedList<>(); - queue.add(this); - while(!queue.isEmpty()) { - Node n = queue.poll(); - System.out.print(n.data + " "); - if (n.left != null) { - queue.add(n.left); - } - if (n.right != null) { - queue.add(n.right); - } - } - } - - public int findHeight() { - return findHeight(this); - } - - private int findHeight(Node root) { - if (root.left == null && root.right == null) { - return 0; - } - else if (root.left != null && root.right != null) { - return 1 + Math.max(findHeight(root.left), findHeight(root.right)); - } - else if (root.left == null && root.right != null) { - return 1 + findHeight(root.right); - } - else { - return 1 + findHeight(root.left); - } - } -} - diff --git a/DataStructures/Trees/GenericTree.Java b/DataStructures/Trees/GenericTree.Java index cc592e04082e..122c8933f938 100644 --- a/DataStructures/Trees/GenericTree.Java +++ b/DataStructures/Trees/GenericTree.Java @@ -1,3 +1,5 @@ +package DataStructures.Trees; + import java.util.ArrayList; import java.util.LinkedList; import java.util.Scanner; @@ -224,3 +226,4 @@ public class GenericTree { } } +} \ No newline at end of file diff --git a/DataStructures/Trees/LevelOrderTraversal.java b/DataStructures/Trees/LevelOrderTraversal.java index 1f657d92be97..bcf172495d13 100644 --- a/DataStructures/Trees/LevelOrderTraversal.java +++ b/DataStructures/Trees/LevelOrderTraversal.java @@ -1,74 +1,55 @@ -class Node -{ - int data; - Node left, right; - public Node(int item) - { - data = item; - left = right = null; +package DataStructures.Trees; + +public class LevelOrderTraversal { + + class Node { + int data; + Node left, right; + + public Node(int item) { + data = item; + left = right = null; + } } -} - -public class LevelOrderTraversal -{ + // Root of the Binary Tree Node root; - - public LevelOrderTraversal() - { + + public LevelOrderTraversal() { root = null; } - + /* function to print level order traversal of tree*/ - void printLevelOrder() - { + void printLevelOrder() { int h = height(root); int i; - for (i=1; i<=h; i++) + for (i = 1; i <= h; i++) printGivenLevel(root, i); } - + /* Compute the "height" of a tree -- the number of nodes along the longest path from the root node down to the farthest leaf node.*/ - int height(Node root) - { + int height(Node root) { if (root == null) - return 0; - else - { + return 0; + else { /** * Return the height of larger subtree */ - return Math.max(height(root.left),height(root.right)) + 1; + return Math.max(height(root.left), height(root.right)) + 1; } } - + /* Print nodes at the given level */ - void printGivenLevel (Node root ,int level) - { + void printGivenLevel(Node root, int level) { if (root == null) return; if (level == 1) System.out.print(root.data + " "); - else if (level > 1) - { - printGivenLevel(root.left, level-1); - printGivenLevel(root.right, level-1); + else if (level > 1) { + printGivenLevel(root.left, level - 1); + printGivenLevel(root.right, level - 1); } } - - /* Driver program to test above functions */ - public static void main(String args[]) - { - LevelOrderTraversal tree = new LevelOrderTraversal(); - tree.root= new Node(1); - tree.root.left= new Node(2); - tree.root.right= new Node(3); - tree.root.left.left= new Node(4); - tree.root.left.right= new Node(5); - - System.out.println("Level order traversal of binary tree is "); - tree.printLevelOrder(); - } } diff --git a/DataStructures/Trees/LevelOrderTraversalQueue.java b/DataStructures/Trees/LevelOrderTraversalQueue.java index ce7ad74542cf..d43d62d68f5f 100644 --- a/DataStructures/Trees/LevelOrderTraversalQueue.java +++ b/DataStructures/Trees/LevelOrderTraversalQueue.java @@ -1,62 +1,48 @@ +package DataStructures.Trees; + import java.util.Queue; import java.util.LinkedList; - -/* Class to represent Tree node */ -class Node { - int data; - Node left, right; - - public Node(int item) { - data = item; - left = null; - right = null; - } -} - + + /* Class to print Level Order Traversal */ public class LevelOrderTraversalQueue { - + + /* Class to represent Tree node */ + class Node { + int data; + Node left, right; + + public Node(int item) { + data = item; + left = null; + right = null; + } + } + Node root; - + /* Given a binary tree. Print its nodes in level order using array for implementing queue */ - void printLevelOrder() - { + void printLevelOrder() { Queue queue = new LinkedList(); queue.add(root); - while (!queue.isEmpty()) - { + while (!queue.isEmpty()) { /* poll() removes the present head. For more information on poll() visit http://www.tutorialspoint.com/java/util/linkedlist_poll.htm */ Node tempNode = queue.poll(); System.out.print(tempNode.data + " "); - + /*Enqueue left child */ if (tempNode.left != null) { queue.add(tempNode.left); } - + /*Enqueue right child */ if (tempNode.right != null) { queue.add(tempNode.right); } } } - - public static void main(String args[]) - { - /* creating a binary tree and entering - the nodes */ - LevelOrderTraversalQueue tree_level = new LevelOrderTraversalQueue(); - tree_level.root = new Node(1); - tree_level.root.left = new Node(2); - tree_level.root.right = new Node(3); - tree_level.root.left.left = new Node(4); - tree_level.root.left.right = new Node(5); - - System.out.println("Level order traversal of binary tree is - "); - tree_level.printLevelOrder(); - } } \ No newline at end of file diff --git a/DataStructures/Trees/PrintTopViewofTree.java b/DataStructures/Trees/PrintTopViewofTree.java index 27016ee2eee4..58f611305c51 100644 --- a/DataStructures/Trees/PrintTopViewofTree.java +++ b/DataStructures/Trees/PrintTopViewofTree.java @@ -1,87 +1,88 @@ -// Java program to print top view of Binary tree -import java.util.*; - +package DataStructures.Trees;// Java program to print top view of Binary tree + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Queue; + // Class for a tree node -class TreeNode -{ +class TreeNode { // Members int key; TreeNode left, right; - + // Constructor - public TreeNode(int key) - { + public TreeNode(int key) { this.key = key; left = right = null; } } - + // A class to represent a queue item. The queue is used to do Level // order traversal. Every Queue item contains node and horizontal // distance of node from root -class QItem -{ - TreeNode node; - int hd; - public QItem(TreeNode n, int h) - { +class QItem { + TreeNode node; + int hd; + + public QItem(TreeNode n, int h) { node = n; hd = h; - } + } } - + // Class for a Binary Tree -class Tree -{ +class Tree { TreeNode root; - + // Constructors - public Tree() { root = null; } - public Tree(TreeNode n) { root = n; } - + public Tree() { + root = null; + } + + public Tree(TreeNode n) { + root = n; + } + // This method prints nodes in top view of binary tree - public void printTopView() - { + public void printTopView() { // base case - if (root == null) { return; } - + if (root == null) { + return; + } + // Creates an empty hashset HashSet set = new HashSet<>(); - + // Create a queue and add root to it Queue Q = new LinkedList(); Q.add(new QItem(root, 0)); // Horizontal distance of root is 0 - + // Standard BFS or level order traversal loop - while (!Q.isEmpty()) - { + while (!Q.isEmpty()) { // Remove the front item and get its details QItem qi = Q.remove(); int hd = qi.hd; TreeNode n = qi.node; - + // If this is the first node at its horizontal distance, // then this node is in top view - if (!set.contains(hd)) - { + if (!set.contains(hd)) { set.add(hd); System.out.print(n.key + " "); } - + // Enqueue left and right children of current node if (n.left != null) - Q.add(new QItem(n.left, hd-1)); + Q.add(new QItem(n.left, hd - 1)); if (n.right != null) - Q.add(new QItem(n.right, hd+1)); + Q.add(new QItem(n.right, hd + 1)); } } } - + // Driver class to test above methods -public class PrintTopViewofTree -{ - public static void main(String[] args) - { +public class PrintTopViewofTree { + public static void main(String[] args) { /* Create following Binary Tree 1 / \ diff --git a/DataStructures/Trees/RedBlackBST.java b/DataStructures/Trees/RedBlackBST.java index 08a8fb072e2d..97a88e9a43de 100644 --- a/DataStructures/Trees/RedBlackBST.java +++ b/DataStructures/Trees/RedBlackBST.java @@ -1,330 +1,333 @@ +package DataStructures.Trees; + +import java.util.Scanner; + /** - * * @author jack870131 */ public class RedBlackBST { - private final int R = 0; - private final int B = 1; + private final int R = 0; + private final int B = 1; - private class Node { + private class Node { - int key = -1, color = B; - Node left = nil, right = nil, p = nil; + int key = -1, color = B; + Node left = nil, right = nil, p = nil; - Node(int key) { - this.key = key; - } - } + Node(int key) { + this.key = key; + } + } - private final Node nil = new Node(-1); - private Node root = nil; + private final Node nil = new Node(-1); + private Node root = nil; - public void printTree(Node node) { - if (node == nil) { - return; - } - printTree(node.left); - System.out.print(((node.color == R) ? " R " : " B ") + "Key: " + node.key + " Parent: " + node.p.key + "\n"); - printTree(node.right); - } + public void printTree(Node node) { + if (node == nil) { + return; + } + printTree(node.left); + System.out.print(((node.color == R) ? " R " : " B ") + "Key: " + node.key + " Parent: " + node.p.key + "\n"); + printTree(node.right); + } - public void printTreepre(Node node) { - if (node == nil) { - return; - } - System.out.print(((node.color == R) ? " R " : " B ") + "Key: " + node.key + " Parent: " + node.p.key + "\n"); - printTree(node.left); - printTree(node.right); - } + public void printTreepre(Node node) { + if (node == nil) { + return; + } + System.out.print(((node.color == R) ? " R " : " B ") + "Key: " + node.key + " Parent: " + node.p.key + "\n"); + printTree(node.left); + printTree(node.right); + } - private Node findNode(Node findNode, Node node) { - if (root == nil) { - return null; - } - if (findNode.key < node.key) { - if (node.left != nil) { - return findNode(findNode, node.left); - } - } else if (findNode.key > node.key) { - if (node.right != nil) { - return findNode(findNode, node.right); - } - } else if (findNode.key == node.key) { - return node; - } - return null; - } + private Node findNode(Node findNode, Node node) { + if (root == nil) { + return null; + } + if (findNode.key < node.key) { + if (node.left != nil) { + return findNode(findNode, node.left); + } + } else if (findNode.key > node.key) { + if (node.right != nil) { + return findNode(findNode, node.right); + } + } else if (findNode.key == node.key) { + return node; + } + return null; + } - private void insert(Node node) { - Node temp = root; - if (root == nil) { - root = node; - node.color = B; - node.p = nil; - } else { - node.color = R; - while (true) { - if (node.key < temp.key) { - if (temp.left == nil) { - temp.left = node; - node.p = temp; - break; - } else { - temp = temp.left; - } - } else if (node.key >= temp.key) { - if (temp.right == nil) { - temp.right = node; - node.p = temp; - break; - } else { - temp = temp.right; - } - } - } - fixTree(node); - } - } + private void insert(Node node) { + Node temp = root; + if (root == nil) { + root = node; + node.color = B; + node.p = nil; + } else { + node.color = R; + while (true) { + if (node.key < temp.key) { + if (temp.left == nil) { + temp.left = node; + node.p = temp; + break; + } else { + temp = temp.left; + } + } else if (node.key >= temp.key) { + if (temp.right == nil) { + temp.right = node; + node.p = temp; + break; + } else { + temp = temp.right; + } + } + } + fixTree(node); + } + } - private void fixTree(Node node) { - while (node.p.color == R) { - Node y = nil; - if (node.p == node.p.p.left) { - y = node.p.p.right; + private void fixTree(Node node) { + while (node.p.color == R) { + Node y = nil; + if (node.p == node.p.p.left) { + y = node.p.p.right; - if (y != nil && y.color == R) { - node.p.color = B; - y.color = B; - node.p.p.color = R; - node = node.p.p; - continue; - } - if (node == node.p.right) { - node = node.p; - rotateLeft(node); - } - node.p.color = B; - node.p.p.color = R; - rotateRight(node.p.p); - } else { - y = node.p.p.left; - if (y != nil && y.color == R) { - node.p.color = B; - y.color = B; - node.p.p.color = R; - node = node.p.p; - continue; - } - if (node == node.p.left) { - node = node.p; - rotateRight(node); - } - node.p.color = B; - node.p.p.color = R; - rotateLeft(node.p.p); - } - } - root.color = B; - } + if (y != nil && y.color == R) { + node.p.color = B; + y.color = B; + node.p.p.color = R; + node = node.p.p; + continue; + } + if (node == node.p.right) { + node = node.p; + rotateLeft(node); + } + node.p.color = B; + node.p.p.color = R; + rotateRight(node.p.p); + } else { + y = node.p.p.left; + if (y != nil && y.color == R) { + node.p.color = B; + y.color = B; + node.p.p.color = R; + node = node.p.p; + continue; + } + if (node == node.p.left) { + node = node.p; + rotateRight(node); + } + node.p.color = B; + node.p.p.color = R; + rotateLeft(node.p.p); + } + } + root.color = B; + } - void rotateLeft(Node node) { - if (node.p != nil) { - if (node == node.p.left) { - node.p.left = node.right; - } else { - node.p.right = node.right; - } - node.right.p = node.p; - node.p = node.right; - if (node.right.left != nil) { - node.right.left.p = node; - } - node.right = node.right.left; - node.p.left = node; - } else { - Node right = root.right; - root.right = right.left; - right.left.p = root; - root.p = right; - right.left = root; - right.p = nil; - root = right; - } - } + void rotateLeft(Node node) { + if (node.p != nil) { + if (node == node.p.left) { + node.p.left = node.right; + } else { + node.p.right = node.right; + } + node.right.p = node.p; + node.p = node.right; + if (node.right.left != nil) { + node.right.left.p = node; + } + node.right = node.right.left; + node.p.left = node; + } else { + Node right = root.right; + root.right = right.left; + right.left.p = root; + root.p = right; + right.left = root; + right.p = nil; + root = right; + } + } - void rotateRight(Node node) { - if (node.p != nil) { - if (node == node.p.left) { - node.p.left = node.left; - } else { - node.p.right = node.left; - } + void rotateRight(Node node) { + if (node.p != nil) { + if (node == node.p.left) { + node.p.left = node.left; + } else { + node.p.right = node.left; + } - node.left.p = node.p; - node.p = node.left; - if (node.left.right != nil) { - node.left.right.p = node; - } - node.left = node.left.right; - node.p.right = node; - } else { - Node left = root.left; - root.left = root.left.right; - left.right.p = root; - root.p = left; - left.right = root; - left.p = nil; - root = left; - } - } + node.left.p = node.p; + node.p = node.left; + if (node.left.right != nil) { + node.left.right.p = node; + } + node.left = node.left.right; + node.p.right = node; + } else { + Node left = root.left; + root.left = root.left.right; + left.right.p = root; + root.p = left; + left.right = root; + left.p = nil; + root = left; + } + } - void transplant(Node target, Node with) { - if (target.p == nil) { - root = with; - } else if (target == target.p.left) { - target.p.left = with; - } else - target.p.right = with; - with.p = target.p; - } + void transplant(Node target, Node with) { + if (target.p == nil) { + root = with; + } else if (target == target.p.left) { + target.p.left = with; + } else + target.p.right = with; + with.p = target.p; + } - Node treeMinimum(Node subTreeRoot) { - while (subTreeRoot.left != nil) { - subTreeRoot = subTreeRoot.left; - } - return subTreeRoot; - } + Node treeMinimum(Node subTreeRoot) { + while (subTreeRoot.left != nil) { + subTreeRoot = subTreeRoot.left; + } + return subTreeRoot; + } - boolean delete(Node z) { - if ((z = findNode(z, root)) == null) - return false; - Node x; - Node y = z; - int yorigcolor = y.color; + boolean delete(Node z) { + if ((z = findNode(z, root)) == null) + return false; + Node x; + Node y = z; + int yorigcolor = y.color; - if (z.left == nil) { - x = z.right; - transplant(z, z.right); - } else if (z.right == nil) { - x = z.left; - transplant(z, z.left); - } else { - y = treeMinimum(z.right); - yorigcolor = y.color; - x = y.right; - if (y.p == z) - x.p = y; - else { - transplant(y, y.right); - y.right = z.right; - y.right.p = y; - } - transplant(z, y); - y.left = z.left; - y.left.p = y; - y.color = z.color; - } - if (yorigcolor == B) - deleteFixup(x); - return true; - } + if (z.left == nil) { + x = z.right; + transplant(z, z.right); + } else if (z.right == nil) { + x = z.left; + transplant(z, z.left); + } else { + y = treeMinimum(z.right); + yorigcolor = y.color; + x = y.right; + if (y.p == z) + x.p = y; + else { + transplant(y, y.right); + y.right = z.right; + y.right.p = y; + } + transplant(z, y); + y.left = z.left; + y.left.p = y; + y.color = z.color; + } + if (yorigcolor == B) + deleteFixup(x); + return true; + } - void deleteFixup(Node x) { - while (x != root && x.color == B) { - if (x == x.p.left) { - Node w = x.p.right; - if (w.color == R) { - w.color = B; - x.p.color = R; - rotateLeft(x.p); - w = x.p.right; - } - if (w.left.color == B && w.right.color == B) { - w.color = R; - x = x.p; - continue; - } else if (w.right.color == B) { - w.left.color = B; - w.color = R; - rotateRight(w); - w = x.p.right; - } - if (w.right.color == R) { - w.color = x.p.color; - x.p.color = B; - w.right.color = B; - rotateLeft(x.p); - x = root; - } - } else { - Node w = x.p.left; - if (w.color == R) { - w.color = B; - x.p.color = R; - rotateRight(x.p); - w = x.p.left; - } - if (w.right.color == B && w.left.color == B) { - w.color = R; - x = x.p; - continue; - } else if (w.left.color == B) { - w.right.color = B; - w.color = R; - rotateLeft(w); - w = x.p.left; - } - if (w.left.color == R) { - w.color = x.p.color; - x.p.color = B; - w.left.color = B; - rotateRight(x.p); - x = root; - } - } - } - x.color = B; - } + void deleteFixup(Node x) { + while (x != root && x.color == B) { + if (x == x.p.left) { + Node w = x.p.right; + if (w.color == R) { + w.color = B; + x.p.color = R; + rotateLeft(x.p); + w = x.p.right; + } + if (w.left.color == B && w.right.color == B) { + w.color = R; + x = x.p; + continue; + } else if (w.right.color == B) { + w.left.color = B; + w.color = R; + rotateRight(w); + w = x.p.right; + } + if (w.right.color == R) { + w.color = x.p.color; + x.p.color = B; + w.right.color = B; + rotateLeft(x.p); + x = root; + } + } else { + Node w = x.p.left; + if (w.color == R) { + w.color = B; + x.p.color = R; + rotateRight(x.p); + w = x.p.left; + } + if (w.right.color == B && w.left.color == B) { + w.color = R; + x = x.p; + continue; + } else if (w.left.color == B) { + w.right.color = B; + w.color = R; + rotateLeft(w); + w = x.p.left; + } + if (w.left.color == R) { + w.color = x.p.color; + x.p.color = B; + w.left.color = B; + rotateRight(x.p); + x = root; + } + } + } + x.color = B; + } - public void insertDemo() { - Scanner scan = new Scanner(System.in); - while (true) { - System.out.println("Add items"); + public void insertDemo() { + Scanner scan = new Scanner(System.in); + while (true) { + System.out.println("Add items"); - int item; - Node node; + int item; + Node node; - item = scan.nextInt(); - while (item != -999) { - node = new Node(item); - insert(node); - item = scan.nextInt(); - } - printTree(root); - System.out.println("Pre order"); - printTreepre(root); - break; - } - } + item = scan.nextInt(); + while (item != -999) { + node = new Node(item); + insert(node); + item = scan.nextInt(); + } + printTree(root); + System.out.println("Pre order"); + printTreepre(root); + break; + } + } - public void deleteDemo() { - Scanner scan = new Scanner(System.in); - System.out.println("Delete items"); - int item; - Node node; - item = scan.nextInt(); - node = new Node(item); - System.out.print("Deleting item " + item); - if (delete(node)) { - System.out.print(": deleted!"); - } else { - System.out.print(": does not exist!"); - } + public void deleteDemo() { + Scanner scan = new Scanner(System.in); + System.out.println("Delete items"); + int item; + Node node; + item = scan.nextInt(); + node = new Node(item); + System.out.print("Deleting item " + item); + if (delete(node)) { + System.out.print(": deleted!"); + } else { + System.out.print(": does not exist!"); + } - System.out.println(); - printTree(root); - System.out.println("Pre order"); - printTreepre(root); - } + System.out.println(); + printTree(root); + System.out.println("Pre order"); + printTreepre(root); + } } \ No newline at end of file diff --git a/DataStructures/Trees/TreeTraversal.java b/DataStructures/Trees/TreeTraversal.java index 60a2cd4914e9..1c5f8a43715b 100644 --- a/DataStructures/Trees/TreeTraversal.java +++ b/DataStructures/Trees/TreeTraversal.java @@ -1,10 +1,10 @@ +package DataStructures.Trees; + import java.util.LinkedList; /** -* -* @author Varun Upadhyay (https://github.com/varunu28) -* -*/ + * @author Varun Upadhyay (https://github.com/varunu28) + */ // Driver Program @@ -38,13 +38,13 @@ public static void main(String[] args) { } /** -* The Node class which initializes a Node of a tree -* Consists of all 4 traversal methods: printInOrder, printPostOrder, printPreOrder & printLevelOrder -* printInOrder: LEFT -> ROOT -> RIGHT -* printPreOrder: ROOT -> LEFT -> RIGHT -* printPostOrder: LEFT -> RIGHT -> ROOT -* printLevelOrder: Prints by level (starting at root), from left to right. -*/ + * The Node class which initializes a Node of a tree + * Consists of all 4 traversal methods: printInOrder, printPostOrder, printPreOrder & printLevelOrder + * printInOrder: LEFT -> ROOT -> RIGHT + * printPreOrder: ROOT -> LEFT -> RIGHT + * printPostOrder: LEFT -> RIGHT -> ROOT + * printLevelOrder: Prints by level (starting at root), from left to right. + */ class Node { Node left, right; int data; @@ -53,20 +53,17 @@ public Node(int data) { this.data = data; } - public void insert (int value) { + public void insert(int value) { if (value < data) { if (left == null) { left = new Node(value); - } - else { + } else { left.insert(value); } - } - else { + } else { if (right == null) { right = new Node(value); - } - else { + } else { right.insert(value); } } @@ -103,9 +100,9 @@ public void printPostOrder() { } /** - * O(n) time algorithm. - * Uses O(n) space to store nodes in a queue to aid in traversal. - */ + * O(n) time algorithm. + * Uses O(n) space to store nodes in a queue to aid in traversal. + */ public void printLevelOrder() { LinkedList queue = new LinkedList<>(); queue.add(this); diff --git a/DataStructures/Trees/TrieImp.java b/DataStructures/Trees/TrieImp.java index c55586ff0065..24450f16c2cb 100644 --- a/DataStructures/Trees/TrieImp.java +++ b/DataStructures/Trees/TrieImp.java @@ -1,10 +1,11 @@ -//Trie Data structure implementation without any libraries */ +package DataStructures.Trees; /** + * Trie Data structure implementation without any libraries * * @author Dheeraj Kumar Barnwal (https://github.com/dheeraj92) - * */ + import java.util.Scanner; public class TrieImp { @@ -13,34 +14,37 @@ public class TrieNode { TrieNode[] child; boolean end; - public TrieNode(){ + public TrieNode() { child = new TrieNode[26]; end = false; } } + private final TrieNode root; - public TrieImp(){ + + public TrieImp() { root = new TrieNode(); } - public void insert(String word){ + public void insert(String word) { TrieNode currentNode = root; - for(int i=0; i < word.length();i++){ - TrieNode node = currentNode.child[word.charAt(i)-'a']; - if(node == null){ + for (int i = 0; i < word.length(); i++) { + TrieNode node = currentNode.child[word.charAt(i) - 'a']; + if (node == null) { node = new TrieNode(); - currentNode.child[word.charAt(i)-'a']=node; + currentNode.child[word.charAt(i) - 'a'] = node; } currentNode = node; } currentNode.end = true; } - public boolean search(String word){ + + public boolean search(String word) { TrieNode currentNode = root; - for(int i=0;i= min and <= max. */ - boolean isBSTUtil(Node node, int min, int max) - { + boolean isBSTUtil(Node node, int min, int max) { /* an empty tree is BST */ if (node == null) return true; - + /* false if this node violates the min/max constraints */ if (node.data < min || node.data > max) return false; @@ -40,23 +39,7 @@ boolean isBSTUtil(Node node, int min, int max) /* otherwise check the subtrees recursively tightening the min/max constraints */ // Allow only distinct values - return (isBSTUtil(node.left, min, node.data-1) && - isBSTUtil(node.right, node.data+1, max)); - } - - /* Driver program to test above functions */ - public static void main(String args[]) - { - ValidBSTOrNot tree = new ValidBSTOrNot(); - tree.root = new Node(4); - tree.root.left = new Node(2); - tree.root.right = new Node(5); - tree.root.left.left = new Node(1); - tree.root.left.right = new Node(3); - - if (tree.isBST()) - System.out.println("IS BST"); - else - System.out.println("Not a BST"); + return (isBSTUtil(node.left, min, node.data - 1) && + isBSTUtil(node.right, node.data + 1, max)); } } \ No newline at end of file diff --git a/Dynamic Programming/Edit_Distance.java b/Dynamic Programming/Edit_Distance.java deleted file mode 100644 index 87c50421892d..000000000000 --- a/Dynamic Programming/Edit_Distance.java +++ /dev/null @@ -1,89 +0,0 @@ - /** - Author : SUBHAM SANGHAI - A Dynamic Programming based solution for Edit Distance problem In Java - **/ - - /**Description of Edit Distance with an Example: - - Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one another, - by counting the minimum number of operations required to transform one string into the other. The - distance operations are the removal, insertion, or substitution of a character in the string. - - - The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the former into the latter is: - - kitten → sitten (substitution of "s" for "k") - sitten → sittin (substitution of "i" for "e") - sittin → sitting (insertion of "g" at the end).**/ - - import java.util.Scanner; - public class Edit_Distance - { - - - - public static int minDistance(String word1, String word2) - { - int len1 = word1.length(); - int len2 = word2.length(); - // len1+1, len2+1, because finally return dp[len1][len2] - int[][] dp = new int[len1 + 1][len2 + 1]; - /* If second string is empty, the only option is to - insert all characters of first string into second*/ - for (int i = 0; i <= len1; i++) - { - dp[i][0] = i; - } - /* If first string is empty, the only option is to - insert all characters of second string into first*/ - for (int j = 0; j <= len2; j++) - { - dp[0][j] = j; - } - //iterate though, and check last char - for (int i = 0; i < len1; i++) - { - char c1 = word1.charAt(i); - for (int j = 0; j < len2; j++) - { - char c2 = word2.charAt(j); - //if last two chars equal - if (c1 == c2) - { - //update dp value for +1 length - dp[i + 1][j + 1] = dp[i][j]; - } - else - { - /* if two characters are different , - then take the minimum of the various operations(i.e insertion,removal,substitution)*/ - int replace = dp[i][j] + 1; - int insert = dp[i][j + 1] + 1; - int delete = dp[i + 1][j] + 1; - - int min = replace > insert ? insert : replace; - min = delete > min ? min : delete; - dp[i + 1][j + 1] = min; - } - } - } - /* return the final answer , after traversing through both the strings*/ - return dp[len1][len2]; - } - - - // Driver program to test above function - public static void main(String args[]) - { - Scanner input = new Scanner(System.in); - String s1,s2; - System.out.println("Enter the First String"); - s1 = input.nextLine(); - System.out.println("Enter the Second String"); - s2 = input.nextLine(); - //ans stores the final Edit Distance between the two strings - int ans=0; - ans=minDistance(s1,s2); - System.out.println("The minimum Edit Distance between \"" + s1 + "\" and \"" + s2 +"\" is "+ans); - } - } diff --git a/Dynamic Programming/Ford_Fulkerson.java b/Dynamic Programming/Ford_Fulkerson.java deleted file mode 100644 index 534a9dc9a7df..000000000000 --- a/Dynamic Programming/Ford_Fulkerson.java +++ /dev/null @@ -1,71 +0,0 @@ -import java.util.LinkedList; -import java.util.Queue; -import java.util.Scanner; -import java.util.Vector; - -public class Ford_Fulkerson { - Scanner scan = new Scanner(System.in); - final static int INF = 987654321; - static int V; // edges - static int[][] capacity, flow; - - public static void main(String[] args) { - System.out.println("V : 6"); - V = 6; - capacity = new int[V][V]; - - capacity[0][1] = 12; - capacity[0][3] = 13; - capacity[1][2] = 10; - capacity[2][3] = 13; - capacity[2][4] = 3; - capacity[2][5] = 15; - capacity[3][2] = 7; - capacity[3][4] = 15; - capacity[4][5] = 17; - - System.out.println("Max capacity in networkFlow : " + networkFlow(0, 5)); - } - - private static int networkFlow(int source, int sink) { - flow = new int[V][V]; - int totalFlow = 0; - while (true) { - Vector parent = new Vector<>(V); - for (int i = 0; i < V; i++) - parent.add(-1); - Queue q = new LinkedList<>(); - parent.set(source, source); - q.add(source); - while (!q.isEmpty() && parent.get(sink) == -1) { - int here = q.peek(); - q.poll(); - for (int there = 0; there < V; ++there) - if (capacity[here][there] - flow[here][there] > 0 && parent.get(there) == -1) { - q.add(there); - parent.set(there, here); - } - } - if (parent.get(sink) == -1) - break; - - int amount = INF; - String printer = "path : "; - StringBuilder sb = new StringBuilder(); - for (int p = sink; p != source; p = parent.get(p)) { - amount = Math.min(capacity[parent.get(p)][p] - flow[parent.get(p)][p], amount); - sb.append(p + "-"); - } - sb.append(source); - for (int p = sink; p != source; p = parent.get(p)) { - flow[parent.get(p)][p] += amount; - flow[p][parent.get(p)] -= amount; - } - totalFlow += amount; - printer += sb.reverse() + " / max flow : " + totalFlow; - System.out.println(printer); - } - - return totalFlow; - } -} diff --git a/Dynamic Programming/KadaneAlgorithm.java b/Dynamic Programming/KadaneAlgorithm.java deleted file mode 100644 index 56d0ec6ff742..000000000000 --- a/Dynamic Programming/KadaneAlgorithm.java +++ /dev/null @@ -1,55 +0,0 @@ -import java.util.Scanner; - -/** - * Program to implement Kadane’s Algorithm to - * calculate maximum contiguous subarray sum of an array - * Time Complexity: O(n) - * - * @author Nishita Aggarwal - * - */ - -public class KadaneAlgorithm { - - /** - * This method implements Kadane's Algorithm - * - * @param arr The input array - * @return The maximum contiguous subarray sum of the array - * - */ - static int largestContiguousSum(int arr[]){ - int i,len=arr.length,cursum=0,maxsum=Integer.MIN_VALUE; - if(len==0) //empty array - return 0; - for(i=0;imaxsum){ - maxsum=cursum; - } - if(cursum<=0){ - cursum=0; - } - } - return maxsum; - } - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - Scanner sc=new Scanner(System.in); - int n,arr[],i; - n=sc.nextInt(); - arr=new int[n]; - for(i=0;i lcsMatrix[i][j-1] ? lcsMatrix[i-1][j] : lcsMatrix[i][j-1]; - } - } - } - return lcsString(str1, str2, lcsMatrix); - } - - public static String lcsString (String str1, String str2, int[][] lcsMatrix) { - StringBuilder lcs = new StringBuilder(); - int i = str1.length(), - j = str2.length(); - while(i > 0 && j > 0) { - if(str1.charAt(i-1) == str2.charAt(j-1)) { - lcs.append(str1.charAt(i-1)); - i--; - j--; - } else if(lcsMatrix[i-1][j] > lcsMatrix[i][j-1]) { - i--; - } else { - j--; - } - } - return lcs.reverse().toString(); - } - - public static void main(String[] args) { - String str1 = "DSGSHSRGSRHTRD"; - String str2 = "DATRGAGTSHS"; - String lcs = getLCS(str1, str2); - - //Print LCS - if(lcs != null) { - System.out.println("String 1: " + str1); - System.out.println("String 2: " + str2); - System.out.println("LCS: " + lcs); - System.out.println("LCS length: " + lcs.length()); - } - } -} \ No newline at end of file diff --git a/Dynamic Programming/CoinChange.java b/DynamicProgramming/CoinChange.java similarity index 71% rename from Dynamic Programming/CoinChange.java rename to DynamicProgramming/CoinChange.java index e9d3689d9952..7e4e6181ccc9 100644 --- a/Dynamic Programming/CoinChange.java +++ b/DynamicProgramming/CoinChange.java @@ -1,9 +1,8 @@ +package DynamicProgramming; + /** - * * @author Varun Upadhyay (https://github.com/varunu28) - * */ - public class CoinChange { // Driver Program @@ -20,18 +19,18 @@ public static void main(String[] args) { /** * This method finds the number of combinations of getting change for a given amount and change coins * - * @param coins The list of coins + * @param coins The list of coins * @param amount The amount for which we need to find the change - * Finds the number of combinations of change + * Finds the number of combinations of change **/ public static int change(int[] coins, int amount) { - int[] combinations = new int[amount+1]; + int[] combinations = new int[amount + 1]; combinations[0] = 1; for (int coin : coins) { - for (int i=coin; i + * Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one another, + * by counting the minimum number of operations required to transform one string into the other. The + * distance operations are the removal, insertion, or substitution of a character in the string. + *

+ *

+ * The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the former into the latter is: + *

+ * kitten → sitten (substitution of "s" for "k") + * sitten → sittin (substitution of "i" for "e") + * sittin → sitting (insertion of "g" at the end). + * Description of Edit Distance with an Example: + *

+ * Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one another, + * by counting the minimum number of operations required to transform one string into the other. The + * distance operations are the removal, insertion, or substitution of a character in the string. + *

+ *

+ * The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the former into the latter is: + *

+ * kitten → sitten (substitution of "s" for "k") + * sitten → sittin (substitution of "i" for "e") + * sittin → sitting (insertion of "g" at the end). + **/ + +/**Description of Edit Distance with an Example: + + Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one another, + by counting the minimum number of operations required to transform one string into the other. The + distance operations are the removal, insertion, or substitution of a character in the string. + + + The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the former into the latter is: + + kitten → sitten (substitution of "s" for "k") + sitten → sittin (substitution of "i" for "e") + sittin → sitting (insertion of "g" at the end).**/ + +import java.util.Scanner; + +public class Edit_Distance { + + + public static int minDistance(String word1, String word2) { + int len1 = word1.length(); + int len2 = word2.length(); + // len1+1, len2+1, because finally return dp[len1][len2] + int[][] dp = new int[len1 + 1][len2 + 1]; + /* If second string is empty, the only option is to + insert all characters of first string into second*/ + for (int i = 0; i <= len1; i++) { + dp[i][0] = i; + } + /* If first string is empty, the only option is to + insert all characters of second string into first*/ + for (int j = 0; j <= len2; j++) { + dp[0][j] = j; + } + //iterate though, and check last char + for (int i = 0; i < len1; i++) { + char c1 = word1.charAt(i); + for (int j = 0; j < len2; j++) { + char c2 = word2.charAt(j); + //if last two chars equal + if (c1 == c2) { + //update dp value for +1 length + dp[i + 1][j + 1] = dp[i][j]; + } else { + /* if two characters are different , + then take the minimum of the various operations(i.e insertion,removal,substitution)*/ + int replace = dp[i][j] + 1; + int insert = dp[i][j + 1] + 1; + int delete = dp[i + 1][j] + 1; + + int min = replace > insert ? insert : replace; + min = delete > min ? min : delete; + dp[i + 1][j + 1] = min; + } + } + } + /* return the final answer , after traversing through both the strings*/ + return dp[len1][len2]; + } + + + // Driver program to test above function + public static void main(String args[]) { + Scanner input = new Scanner(System.in); + String s1, s2; + System.out.println("Enter the First String"); + s1 = input.nextLine(); + System.out.println("Enter the Second String"); + s2 = input.nextLine(); + //ans stores the final Edit Distance between the two strings + int ans = 0; + ans = minDistance(s1, s2); + System.out.println("The minimum Edit Distance between \"" + s1 + "\" and \"" + s2 + "\" is " + ans); + } +} diff --git a/Dynamic Programming/EggDropping.java b/DynamicProgramming/EggDropping.java similarity index 93% rename from Dynamic Programming/EggDropping.java rename to DynamicProgramming/EggDropping.java index 0549f6647ad2..f53712bd9304 100644 --- a/Dynamic Programming/EggDropping.java +++ b/DynamicProgramming/EggDropping.java @@ -1,5 +1,7 @@ +package DynamicProgramming; + /** - * Dynamic Programming solution for the Egg Dropping Puzzle + * DynamicProgramming solution for the Egg Dropping Puzzle */ public class EggDropping { @@ -37,7 +39,7 @@ private static int minTrials(int n, int m) { return eggFloor[n][m]; } - + public static void main(String args[]) { int n = 2, m = 4; // result outputs min no. of trials in worst case for n eggs and m floors diff --git a/Dynamic Programming/Fibonacci.java b/DynamicProgramming/Fibonacci.java similarity index 98% rename from Dynamic Programming/Fibonacci.java rename to DynamicProgramming/Fibonacci.java index 2f65a8e9e0de..35af98add478 100644 --- a/Dynamic Programming/Fibonacci.java +++ b/DynamicProgramming/Fibonacci.java @@ -1,3 +1,5 @@ +package DynamicProgramming; + import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.HashMap; @@ -5,7 +7,6 @@ /** * @author Varun Upadhyay (https://github.com/varunu28) - * @author yanglbme (https://github.com/yanglbme) */ public class Fibonacci { diff --git a/DynamicProgramming/Ford_Fulkerson.java b/DynamicProgramming/Ford_Fulkerson.java new file mode 100644 index 000000000000..36100c68c6e2 --- /dev/null +++ b/DynamicProgramming/Ford_Fulkerson.java @@ -0,0 +1,73 @@ +package DynamicProgramming; + +import java.util.LinkedList; +import java.util.Queue; +import java.util.Scanner; +import java.util.Vector; + +public class Ford_Fulkerson { + Scanner scan = new Scanner(System.in); + final static int INF = 987654321; + static int V; // edges + static int[][] capacity, flow; + + public static void main(String[] args) { + System.out.println("V : 6"); + V = 6; + capacity = new int[V][V]; + + capacity[0][1] = 12; + capacity[0][3] = 13; + capacity[1][2] = 10; + capacity[2][3] = 13; + capacity[2][4] = 3; + capacity[2][5] = 15; + capacity[3][2] = 7; + capacity[3][4] = 15; + capacity[4][5] = 17; + + System.out.println("Max capacity in networkFlow : " + networkFlow(0, 5)); + } + + private static int networkFlow(int source, int sink) { + flow = new int[V][V]; + int totalFlow = 0; + while (true) { + Vector parent = new Vector<>(V); + for (int i = 0; i < V; i++) + parent.add(-1); + Queue q = new LinkedList<>(); + parent.set(source, source); + q.add(source); + while (!q.isEmpty() && parent.get(sink) == -1) { + int here = q.peek(); + q.poll(); + for (int there = 0; there < V; ++there) + if (capacity[here][there] - flow[here][there] > 0 && parent.get(there) == -1) { + q.add(there); + parent.set(there, here); + } + } + if (parent.get(sink) == -1) + break; + + int amount = INF; + String printer = "path : "; + StringBuilder sb = new StringBuilder(); + for (int p = sink; p != source; p = parent.get(p)) { + amount = Math.min(capacity[parent.get(p)][p] - flow[parent.get(p)][p], amount); + sb.append(p + "-"); + } + sb.append(source); + for (int p = sink; p != source; p = parent.get(p)) { + flow[parent.get(p)][p] += amount; + flow[p][parent.get(p)] -= amount; + } + totalFlow += amount; + printer += sb.reverse() + " / max flow : " + totalFlow; + System.out.println(printer); + } + + return totalFlow; + } +} diff --git a/DynamicProgramming/KadaneAlgorithm.java b/DynamicProgramming/KadaneAlgorithm.java new file mode 100644 index 000000000000..8d77c7a7c556 --- /dev/null +++ b/DynamicProgramming/KadaneAlgorithm.java @@ -0,0 +1,55 @@ +package DynamicProgramming; + +import java.util.Scanner; + +/** + * Program to implement Kadane’s Algorithm to + * calculate maximum contiguous subarray sum of an array + * Time Complexity: O(n) + * + * @author Nishita Aggarwal + */ + +public class KadaneAlgorithm { + + /** + * This method implements Kadane's Algorithm + * + * @param arr The input array + * @return The maximum contiguous subarray sum of the array + */ + static int largestContiguousSum(int arr[]) { + int i, len = arr.length, cursum = 0, maxsum = Integer.MIN_VALUE; + if (len == 0) //empty array + return 0; + for (i = 0; i < len; i++) { + cursum += arr[i]; + if (cursum > maxsum) { + maxsum = cursum; + } + if (cursum <= 0) { + cursum = 0; + } + } + return maxsum; + } + + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int n, arr[], i; + n = sc.nextInt(); + arr = new int[n]; + for (i = 0; i < n; i++) { + arr[i] = sc.nextInt(); + } + int maxContSum = largestContiguousSum(arr); + System.out.println(maxContSum); + sc.close(); + } + +} diff --git a/DynamicProgramming/Knapsack.java b/DynamicProgramming/Knapsack.java new file mode 100644 index 000000000000..025d3cd2b2e2 --- /dev/null +++ b/DynamicProgramming/Knapsack.java @@ -0,0 +1,37 @@ +package DynamicProgramming; + +/** + * A DynamicProgramming based solution for 0-1 Knapsack problem + */ + +public class Knapsack { + + private static int knapSack(int W, int wt[], int val[], int n) { + int i, w; + int rv[][] = new int[n + 1][W + 1]; //rv means return value + + // Build table rv[][] in bottom up manner + for (i = 0; i <= n; i++) { + for (w = 0; w <= W; w++) { + if (i == 0 || w == 0) + rv[i][w] = 0; + else if (wt[i - 1] <= w) + rv[i][w] = Math.max(val[i - 1] + rv[i - 1][w - wt[i - 1]], rv[i - 1][w]); + else + rv[i][w] = rv[i - 1][w]; + } + } + + return rv[n][W]; + } + + + // Driver program to test above function + public static void main(String args[]) { + int val[] = new int[]{50, 100, 130}; + int wt[] = new int[]{10, 20, 40}; + int W = 50; + int n = val.length; + System.out.println(knapSack(W, wt, val, n)); + } +} diff --git a/Dynamic Programming/LevenshteinDistance.java b/DynamicProgramming/LevenshteinDistance.java similarity index 98% rename from Dynamic Programming/LevenshteinDistance.java rename to DynamicProgramming/LevenshteinDistance.java index 1844e7e8a688..c4d53143f80b 100644 --- a/Dynamic Programming/LevenshteinDistance.java +++ b/DynamicProgramming/LevenshteinDistance.java @@ -1,3 +1,5 @@ +package DynamicProgramming; + /** * @author Kshitij VERMA (github.com/kv19971) * LEVENSHTEIN DISTANCE dyamic programming implementation to show the difference between two strings (https://en.wikipedia.org/wiki/Levenshtein_distance) diff --git a/DynamicProgramming/LongestCommonSubsequence.java b/DynamicProgramming/LongestCommonSubsequence.java new file mode 100644 index 000000000000..fad223748bdd --- /dev/null +++ b/DynamicProgramming/LongestCommonSubsequence.java @@ -0,0 +1,68 @@ +package DynamicProgramming; + +class LongestCommonSubsequence { + + public static String getLCS(String str1, String str2) { + + //At least one string is null + if (str1 == null || str2 == null) + return null; + + //At least one string is empty + if (str1.length() == 0 || str2.length() == 0) + return ""; + + String[] arr1 = str1.split(""); + String[] arr2 = str2.split(""); + + //lcsMatrix[i][j] = LCS of first i elements of arr1 and first j characters of arr2 + int[][] lcsMatrix = new int[arr1.length + 1][arr2.length + 1]; + + for (int i = 0; i < arr1.length + 1; i++) + lcsMatrix[i][0] = 0; + for (int j = 1; j < arr2.length + 1; j++) + lcsMatrix[0][j] = 0; + for (int i = 1; i < arr1.length + 1; i++) { + for (int j = 1; j < arr2.length + 1; j++) { + if (arr1[i - 1].equals(arr2[j - 1])) { + lcsMatrix[i][j] = lcsMatrix[i - 1][j - 1] + 1; + } else { + lcsMatrix[i][j] = lcsMatrix[i - 1][j] > lcsMatrix[i][j - 1] ? lcsMatrix[i - 1][j] : lcsMatrix[i][j - 1]; + } + } + } + return lcsString(str1, str2, lcsMatrix); + } + + public static String lcsString(String str1, String str2, int[][] lcsMatrix) { + StringBuilder lcs = new StringBuilder(); + int i = str1.length(), + j = str2.length(); + while (i > 0 && j > 0) { + if (str1.charAt(i - 1) == str2.charAt(j - 1)) { + lcs.append(str1.charAt(i - 1)); + i--; + j--; + } else if (lcsMatrix[i - 1][j] > lcsMatrix[i][j - 1]) { + i--; + } else { + j--; + } + } + return lcs.reverse().toString(); + } + + public static void main(String[] args) { + String str1 = "DSGSHSRGSRHTRD"; + String str2 = "DATRGAGTSHS"; + String lcs = getLCS(str1, str2); + + //Print LCS + if (lcs != null) { + System.out.println("String 1: " + str1); + System.out.println("String 2: " + str2); + System.out.println("LCS: " + lcs); + System.out.println("LCS length: " + lcs.length()); + } + } +} \ No newline at end of file diff --git a/Dynamic Programming/LongestIncreasingSubsequence.java b/DynamicProgramming/LongestIncreasingSubsequence.java similarity index 96% rename from Dynamic Programming/LongestIncreasingSubsequence.java rename to DynamicProgramming/LongestIncreasingSubsequence.java index ccbb88468bd3..2b07e040db13 100644 --- a/Dynamic Programming/LongestIncreasingSubsequence.java +++ b/DynamicProgramming/LongestIncreasingSubsequence.java @@ -1,8 +1,9 @@ +package DynamicProgramming; + import java.util.Scanner; /** * @author Afrizal Fikri (https://github.com/icalF) - * @author Libin Yang (https://github.com/yanglbme) */ public class LongestIncreasingSubsequence { public static void main(String[] args) { diff --git a/Dynamic Programming/LongestValidParentheses.java b/DynamicProgramming/LongestValidParentheses.java similarity index 98% rename from Dynamic Programming/LongestValidParentheses.java rename to DynamicProgramming/LongestValidParentheses.java index 1a42b258d144..bc5f18ae0593 100644 --- a/Dynamic Programming/LongestValidParentheses.java +++ b/DynamicProgramming/LongestValidParentheses.java @@ -1,3 +1,5 @@ +package DynamicProgramming; + import java.util.Scanner; /** diff --git a/Dynamic Programming/MatrixChainMultiplication.java b/DynamicProgramming/MatrixChainMultiplication.java similarity index 99% rename from Dynamic Programming/MatrixChainMultiplication.java rename to DynamicProgramming/MatrixChainMultiplication.java index d84ecf2299b6..66b2a35824e2 100644 --- a/Dynamic Programming/MatrixChainMultiplication.java +++ b/DynamicProgramming/MatrixChainMultiplication.java @@ -1,3 +1,5 @@ +package DynamicProgramming; + import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; diff --git a/Dynamic Programming/RodCutting.java b/DynamicProgramming/RodCutting.java similarity index 83% rename from Dynamic Programming/RodCutting.java rename to DynamicProgramming/RodCutting.java index 5ee38e0ced33..d57c69ce9ae4 100644 --- a/Dynamic Programming/RodCutting.java +++ b/DynamicProgramming/RodCutting.java @@ -1,8 +1,9 @@ +package DynamicProgramming; + /** - * A Dynamic Programming solution for Rod cutting problem + * A DynamicProgramming solution for Rod cutting problem * Returns the best obtainable price for a rod of - * length n and price[] as prices of different pieces - * + * length n and price[] as prices of different pieces */ public class RodCutting { diff --git a/MinimizingLateness/MinimizingLateness.java b/MinimizingLateness/MinimizingLateness.java index a6613cbcb369..48d9093bc2dc 100644 --- a/MinimizingLateness/MinimizingLateness.java +++ b/MinimizingLateness/MinimizingLateness.java @@ -1,52 +1,54 @@ +package MinimizingLateness; + import java.io.*; import java.util.*; public class MinimizingLateness { - private static class Schedule { // Schedule class - int t = 0; // Time required for the operation to be performed - int d = 0; // Time the job should be completed - int s = 0; // Start time of the task - int f = 0; // End time of the operation + private static class Schedule { // Schedule class + int t = 0; // Time required for the operation to be performed + int d = 0; // Time the job should be completed + int s = 0; // Start time of the task + int f = 0; // End time of the operation - public Schedule(int t, int d) { - this.t = t; - this.d = d; - } - } + public Schedule(int t, int d) { + this.t = t; + this.d = d; + } + } - public static void main(String[] args) throws IOException { - // TODO Auto-generated method stub - StringTokenizer token; + public static void main(String[] args) throws IOException { + // TODO Auto-generated method stub + StringTokenizer token; - String ch; - BufferedReader in = new BufferedReader(new FileReader("input.txt")); - int indexCount; // size of array index - ch = in.readLine(); - indexCount = Integer.parseInt(ch); // The first line specifies the size of the operation (= the size of the array) - System.out.println("Input Data : "); - System.out.println(indexCount); // number of operations - Schedule array[] = new Schedule[indexCount]; // Create an array to hold the operation - int i = 0; - while ((ch = in.readLine()) != null) { - token = new StringTokenizer(ch, " "); - // Include the time required for the operation to be performed in the array and the time it should be completed. - array[i] = new Schedule(Integer.parseInt(token.nextToken()), Integer.parseInt(token.nextToken())); - i++; // ë‹¤ìŒ ì¸ë±ìФ - System.out.println(array[i - 1].t + " " + array[i - 1].d); - } + String ch; + BufferedReader in = new BufferedReader(new FileReader("input.txt")); + int indexCount; // size of array index + ch = in.readLine(); + indexCount = Integer.parseInt(ch); // The first line specifies the size of the operation (= the size of the array) + System.out.println("Input Data : "); + System.out.println(indexCount); // number of operations + Schedule array[] = new Schedule[indexCount]; // Create an array to hold the operation + int i = 0; + while ((ch = in.readLine()) != null) { + token = new StringTokenizer(ch, " "); + // Include the time required for the operation to be performed in the array and the time it should be completed. + array[i] = new Schedule(Integer.parseInt(token.nextToken()), Integer.parseInt(token.nextToken())); + i++; // ë‹¤ìŒ ì¸ë±ìФ + System.out.println(array[i - 1].t + " " + array[i - 1].d); + } - int tryTime = 0; // Total time worked - int lateness = 0; // Lateness - for (int j = 0; j < indexCount - 1; j++) { - array[j].s = tryTime; // Start time of the task - array[j].f = tryTime + array[j].t; // Time finished - tryTime = tryTime + array[j].t; // Add total work time - // Lateness - lateness = lateness + Math.max(0, tryTime - array[j].d); - } - System.out.println(); - System.out.println("Output Data : "); - System.out.println(lateness); - } + int tryTime = 0; // Total time worked + int lateness = 0; // Lateness + for (int j = 0; j < indexCount - 1; j++) { + array[j].s = tryTime; // Start time of the task + array[j].f = tryTime + array[j].t; // Time finished + tryTime = tryTime + array[j].t; // Add total work time + // Lateness + lateness = lateness + Math.max(0, tryTime - array[j].d); + } + System.out.println(); + System.out.println("Output Data : "); + System.out.println(lateness); + } } diff --git a/Misc/MedianOfRunningArray.java b/Misc/MedianOfRunningArray.java index 113f19c72b9b..32bbf51947a1 100644 --- a/Misc/MedianOfRunningArray.java +++ b/Misc/MedianOfRunningArray.java @@ -1,10 +1,12 @@ +package Misc; + import java.util.Collections; import java.util.PriorityQueue; -/********************** -author: shrutisheoran -***********************/ +/** + * @author shrutisheoran + */ public class MedianOfRunningArray { private PriorityQueue p1; private PriorityQueue p2; @@ -21,7 +23,7 @@ public MedianOfRunningArray() { */ public void insert(Integer e) { p2.add(e); - if(p2.size() - p1.size() > 1) + if (p2.size() - p1.size() > 1) p1.add(p2.remove()); } @@ -29,9 +31,9 @@ public void insert(Integer e) { Returns median at any given point */ public Integer median() { - if(p1.size()==p2.size()) - return (p1.peek() + p2.peek())/2; - return p1.size()>p2.size() ? p1.peek() : p2.peek(); + if (p1.size() == p2.size()) + return (p1.peek() + p2.peek()) / 2; + return p1.size() > p2.size() ? p1.peek() : p2.peek(); } public static void main(String[] args) { @@ -41,7 +43,7 @@ public static void main(String[] args) { MedianOfRunningArray p = new MedianOfRunningArray(); int arr[] = {10, 7, 4, 9, 2, 3, 11, 17, 14}; - for(int i = 0 ; i < 9 ; i++) { + for (int i = 0; i < 9; i++) { p.insert(arr[i]); System.out.print(p.median() + " "); } diff --git a/Misc/PalindromicPrime.java b/Misc/PalindromePrime.java similarity index 87% rename from Misc/PalindromicPrime.java rename to Misc/PalindromePrime.java index bb2c82480634..b13a23d83792 100644 --- a/Misc/PalindromicPrime.java +++ b/Misc/PalindromePrime.java @@ -1,3 +1,5 @@ +package Misc; + import java.util.Scanner; public class PalindromePrime { @@ -20,9 +22,9 @@ public static boolean prime(int num) { // checking if number is prime or not public static int reverse(int n) { // Returns the reverse of the number int reverse = 0; - while(n != 0) { + while (n != 0) { reverse *= 10; - reverse += n%10; + reverse += n % 10; n /= 10; } return reverse; @@ -33,8 +35,8 @@ public static void functioning(int y) { System.out.print(2 + "\n"); // print the first Palindromic Prime int count = 1; int num = 3; - while(count < y) { - if(num == reverse(num) && prime(num)) { // number is prime and it's reverse is same + while (count < y) { + if (num == reverse(num) && prime(num)) { // number is prime and it's reverse is same count++; // counts check when to terminate while loop System.out.print(num + "\n"); // print the Palindromic Prime } diff --git a/Misc/heap_sort.java b/Misc/heap_sort.java index 991d689ba70f..bb5c2365af04 100644 --- a/Misc/heap_sort.java +++ b/Misc/heap_sort.java @@ -1,72 +1,67 @@ -public class heap_sort -{ - public void sort(int arr[]) - { +package Misc; + +public class heap_sort { + public void sort(int arr[]) { int n = arr.length; - + // Build heap (rearrange array) for (int i = n / 2 - 1; i >= 0; i--) heapify(arr, n, i); - + // One by one extract an element from heap - for (int i=n-1; i>=0; i--) - { + for (int i = n - 1; i >= 0; i--) { // Move current root to end int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; - + // call max heapify on the reduced heap heapify(arr, i, 0); } } - + // To heapify a subtree rooted with node i which is // an index in arr[]. n is size of heap - void heapify(int arr[], int n, int i) - { + void heapify(int arr[], int n, int i) { int largest = i; // Initialize largest as root - int l = 2*i + 1; // left = 2*i + 1 - int r = 2*i + 2; // right = 2*i + 2 - + int l = 2 * i + 1; // left = 2*i + 1 + int r = 2 * i + 2; // right = 2*i + 2 + // If left child is larger than root if (l < n && arr[l] > arr[largest]) largest = l; - + // If right child is larger than largest so far if (r < n && arr[r] > arr[largest]) largest = r; - + // If largest is not root - if (largest != i) - { + if (largest != i) { int swap = arr[i]; arr[i] = arr[largest]; arr[largest] = swap; - + // Recursively heapify the affected sub-tree heapify(arr, n, largest); } } - + /* A utility function to print array of size n */ - static void printArray(int arr[]) - { + static void printArray(int arr[]) { int n = arr.length; - for (int i=0; i 0) { + remainder = number % 10; + sum = sum + (remainder * remainder * remainder); + number = number / 10; + } + if (sum == temp) { + return true; + } else { + return false; + } + } - /** - * Checks whether a given number is an armstrong number or not. Armstrong - * number is a number that is equal to the sum of cubes of its digits for - * example 0, 1, 153, 370, 371, 407 etc. - * - * @param number - * @return boolean - */ - public static boolean checkIfANumberIsAmstrongOrNot(int number) { - int remainder, sum = 0, temp = 0; - temp = number; - while (number > 0) { - remainder = number % 10; - sum = sum + (remainder * remainder * remainder); - number = number / 10; - } - if (sum == temp) { - return true; - } else { - return false; - } - } - private static int inputInt(String string) { - System.out.print(string); - return Integer.parseInt(scan.nextLine()); - } + private static int inputInt(String string) { + System.out.print(string); + return Integer.parseInt(scan.nextLine()); + } } \ No newline at end of file diff --git a/Others/BrianKernighanAlgorithm.java b/Others/BrianKernighanAlgorithm.java index cb27eec150ef..a35234f0e2af 100644 --- a/Others/BrianKernighanAlgorithm.java +++ b/Others/BrianKernighanAlgorithm.java @@ -1,55 +1,49 @@ +package Others; + import java.util.Scanner; /** - * * @author Nishita Aggarwal - * + *

* Brian Kernighan’s Algorithm - * + *

* algorithm to count the number of set bits in a given number - * + *

* Subtraction of 1 from a number toggles all the bits (from right to left) till the rightmost set bit(including the - * rightmost set bit). - * So if we subtract a number by 1 and do bitwise & with itself i.e. (n & (n-1)), we unset the rightmost set bit. - * + * rightmost set bit). + * So if we subtract a number by 1 and do bitwise & with itself i.e. (n & (n-1)), we unset the rightmost set bit. + *

* If we do n & (n-1) in a loop and count the no of times loop executes we get the set bit count. - * - * + *

+ *

* Time Complexity: O(logn) - * */ public class BrianKernighanAlgorithm { - - /** - * @param num: number in which we count the set bits - * - * @return int: Number of set bits - * */ - static int countSetBits(int num) - { - int cnt = 0; - while(num != 0) - { - num = num & (num-1); - cnt++; - } - return cnt; - } - - - /** - * - * @param args : command line arguments - * - */ - public static void main(String args[]) - { - Scanner sc = new Scanner(System.in); - int num = sc.nextInt(); - int setBitCount = countSetBits(num); - System.out.println(setBitCount); - sc.close(); - } + + /** + * @param num: number in which we count the set bits + * @return int: Number of set bits + */ + static int countSetBits(int num) { + int cnt = 0; + while (num != 0) { + num = num & (num - 1); + cnt++; + } + return cnt; + } + + + /** + * @param args : command line arguments + */ + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + int num = sc.nextInt(); + int setBitCount = countSetBits(num); + System.out.println(setBitCount); + sc.close(); + } } diff --git a/Others/crc32.java b/Others/CRC32.java similarity index 98% rename from Others/crc32.java rename to Others/CRC32.java index de98e4198c9b..80eb3d5c730c 100644 --- a/Others/crc32.java +++ b/Others/CRC32.java @@ -1,3 +1,5 @@ +package Others; + import java.util.BitSet; /** diff --git a/Others/CountChar.java b/Others/CountChar.java index 6504aabb4929..217a3be238f8 100644 --- a/Others/CountChar.java +++ b/Others/CountChar.java @@ -1,43 +1,44 @@ +package Others; + import java.util.Scanner; /** * @author Kyler Smith, 2017 - * + *

* Implementation of a character count. * (Slow, could be improved upon, effectively O(n). - * */ + */ public class CountChar { public static void main(String[] args) { - Scanner input = new Scanner(System.in); - System.out.print("Enter your text: "); - String str = input.nextLine(); + Scanner input = new Scanner(System.in); + System.out.print("Enter your text: "); + String str = input.nextLine(); input.close(); System.out.println("There are " + CountCharacters(str) + " characters."); } - + /** * @param str: String to count the characters - * * @return int: Number of characters in the passed string - * */ + */ private static int CountCharacters(String str) { - int count = 0; + int count = 0; - if(str == "" || str == null) //Exceptions - { - return 0; - } + if (str == "" || str == null) { + return 0; + } - for(int i = 0; i < str.length(); i++) { - if(!Character.isWhitespace(str.charAt(i))) { - count++; - }} + for (int i = 0; i < str.length(); i++) { + if (!Character.isWhitespace(str.charAt(i))) { + count++; + } + } return count; - } + } } diff --git a/Others/CountWords.java b/Others/CountWords.java new file mode 100644 index 000000000000..c3e0ddf1e3c7 --- /dev/null +++ b/Others/CountWords.java @@ -0,0 +1,28 @@ +package Others; + +import java.util.Scanner; + +/** + * You enter a string into this program, and it will return how many words were + * in that particular string + * + * @author Marcus + */ +public class CountWords { + + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + System.out.println("Enter your text: "); + String str = input.nextLine(); + + System.out.println("Your text has " + wordCount(str) + " word(s)"); + input.close(); + } + + private static int wordCount(String s) { + if (s == null || s.isEmpty()) + return 0; + return s.trim().split("[\\s]+").length; + } + +} diff --git a/Others/Dijkshtra.java b/Others/Dijkshtra.java index 17f8391777aa..c2b1558e88db 100644 --- a/Others/Dijkshtra.java +++ b/Others/Dijkshtra.java @@ -1,82 +1,84 @@ -/** - * @author Mayank K Jha - */ +package Others; import java.util.Arrays; import java.util.Scanner; import java.util.Stack; +/** + * @author Mayank K Jha + */ + public class Dijkshtra { - public static void main(String[] args) { - Scanner in = new Scanner(System.in); + public static void main(String[] args) { + Scanner in = new Scanner(System.in); - // n = Number of nodes or vertices - int n = in.nextInt(); - // m = Number of Edges - int m = in.nextInt(); + // n = Number of nodes or vertices + int n = in.nextInt(); + // m = Number of Edges + int m = in.nextInt(); - // Adjacency Matrix - long[][] w = new long[n + 1][n + 1]; + // Adjacency Matrix + long[][] w = new long[n + 1][n + 1]; - // Initializing Matrix with Certain Maximum Value for path b/w any two vertices - for (long[] row : w) { - Arrays.fill(row, 1000000L); - } + // Initializing Matrix with Certain Maximum Value for path b/w any two vertices + for (long[] row : w) { + Arrays.fill(row, 1000000L); + } /* From above,we Have assumed that,initially path b/w any two Pair of vertices is Infinite such that Infinite = 1000000l For simplicity , We can also take path Value = Long.MAX_VALUE , but i have taken Max Value = 1000000l */ - // Taking Input as Edge Location b/w a pair of vertices - for (int i = 0; i < m; i++) { - int x = in.nextInt(), y = in.nextInt(); - long cmp = in.nextLong(); - - // Comparing previous edge value with current value - Cycle Case - if (w[x][y] > cmp) { - w[x][y] = cmp; - w[y][x] = cmp; - } - } - - // Implementing Dijkshtra's Algorithm - Stack t = new Stack<>(); - int src = in.nextInt(); - - for (int i = 1; i <= n; i++) { - if (i != src) { - t.push(i); - } - } - - Stack p = new Stack<>(); - p.push(src); - w[src][src] = 0; - - while (!t.isEmpty()) { - int min = 989997979; - int loc = -1; - - for (int i = 0; i < t.size(); i++) { - w[src][t.elementAt(i)] = Math.min(w[src][t.elementAt(i)], w[src][p.peek()] + w[p.peek()][t.elementAt(i)]); - if (w[src][t.elementAt(i)] <= min) { - min = (int) w[src][t.elementAt(i)]; - loc = i; - } - } - p.push(t.elementAt(loc)); - t.removeElementAt(loc); - } - - // Printing shortest path from the given source src - for (int i = 1; i <= n; i++) { - if (i != src && w[src][i] != 1000000L) { - System.out.print(w[src][i] + " "); - } - // Printing -1 if there is no path b/w given pair of edges - else if (i != src) { - System.out.print("-1" + " "); - } - } - } + // Taking Input as Edge Location b/w a pair of vertices + for (int i = 0; i < m; i++) { + int x = in.nextInt(), y = in.nextInt(); + long cmp = in.nextLong(); + + // Comparing previous edge value with current value - Cycle Case + if (w[x][y] > cmp) { + w[x][y] = cmp; + w[y][x] = cmp; + } + } + + // Implementing Dijkshtra's Algorithm + Stack t = new Stack<>(); + int src = in.nextInt(); + + for (int i = 1; i <= n; i++) { + if (i != src) { + t.push(i); + } + } + + Stack p = new Stack<>(); + p.push(src); + w[src][src] = 0; + + while (!t.isEmpty()) { + int min = 989997979; + int loc = -1; + + for (int i = 0; i < t.size(); i++) { + w[src][t.elementAt(i)] = Math.min(w[src][t.elementAt(i)], w[src][p.peek()] + w[p.peek()][t.elementAt(i)]); + if (w[src][t.elementAt(i)] <= min) { + min = (int) w[src][t.elementAt(i)]; + loc = i; + } + } + p.push(t.elementAt(loc)); + t.removeElementAt(loc); + } + + // Printing shortest path from the given source src + for (int i = 1; i <= n; i++) { + if (i != src && w[src][i] != 1000000L) { + System.out.print(w[src][i] + " "); + } + // Printing -1 if there is no path b/w given pair of edges + else if (i != src) { + System.out.print("-1" + " "); + } + } + } } \ No newline at end of file diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index e8ad2680fdbf..af8e33b0b320 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -49,7 +49,9 @@ class Graph { // mapping of vertex names to Vertex objects, built from a set of Edges private final Map graph; - /** One edge of the graph (only used by Graph constructor) */ + /** + * One edge of the graph (only used by Graph constructor) + */ public static class Edge { public final String v1, v2; public final int dist; @@ -61,7 +63,9 @@ public Edge(String v1, String v2, int dist) { } } - /** One vertex of the graph, complete with mappings to neighbouring vertices */ + /** + * One vertex of the graph, complete with mappings to neighbouring vertices + */ public static class Vertex implements Comparable { public final String name; // MAX_VALUE assumed to be infinity @@ -97,7 +101,9 @@ public String toString() { } } - /** Builds a graph from a set of edges */ + /** + * Builds a graph from a set of edges + */ public Graph(Edge[] edges) { graph = new HashMap<>(edges.length); @@ -114,7 +120,9 @@ public Graph(Edge[] edges) { } } - /** Runs dijkstra using a specified source vertex */ + /** + * Runs dijkstra using a specified source vertex + */ public void dijkstra(String startName) { if (!graph.containsKey(startName)) { System.err.printf("Graph doesn't contain start vertex \"%s\"\n", startName); @@ -133,7 +141,9 @@ public void dijkstra(String startName) { dijkstra(q); } - /** Implementation of dijkstra's algorithm using a binary heap. */ + /** + * Implementation of dijkstra's algorithm using a binary heap. + */ private void dijkstra(final NavigableSet q) { Vertex u, v; while (!q.isEmpty()) { @@ -157,7 +167,9 @@ private void dijkstra(final NavigableSet q) { } } - /** Prints a path from the source to the specified vertex */ + /** + * Prints a path from the source to the specified vertex + */ public void printPath(String endName) { if (!graph.containsKey(endName)) { System.err.printf("Graph doesn't contain end vertex \"%s\"\n", endName); @@ -168,7 +180,9 @@ public void printPath(String endName) { System.out.println(); } - /** Prints the path from the source to every vertex (output order is not guaranteed) */ + /** + * Prints the path from the source to every vertex (output order is not guaranteed) + */ public void printAllPaths() { for (Vertex v : graph.values()) { v.printPath(); diff --git a/Others/EulersFunction.java b/Others/EulersFunction.java index 01b7575d4dc5..0f848442bc92 100644 --- a/Others/EulersFunction.java +++ b/Others/EulersFunction.java @@ -1,11 +1,16 @@ -// You can read more about Euler's totient function -// https://en.wikipedia.org/wiki/Euler%27s_totient_function +package Others; + +/** + * You can read more about Euler's totient function + *

+ * See https://en.wikipedia.org/wiki/Euler%27s_totient_function + */ public class EulersFunction { // This method returns us number of x that (x < n) and gcd(x, n) == 1 in O(sqrt(n)) time complexity; public static int getEuler(int n) { int result = n; for (int i = 2; i * i <= n; i++) { - if(n % i == 0) { + if (n % i == 0) { while (n % i == 0) n /= i; result -= result / i; } @@ -13,6 +18,7 @@ public static int getEuler(int n) { if (n > 1) result -= result / n; return result; } + public static void main(String[] args) { for (int i = 1; i < 100; i++) { System.out.println(getEuler(i)); diff --git a/Others/Factorial.java b/Others/Factorial.java index 11265ec00e12..652607e5107b 100644 --- a/Others/Factorial.java +++ b/Others/Factorial.java @@ -1,49 +1,50 @@ +package Others; + import java.util.Scanner; /** * This program will print out the factorial of any non-negative * number that you input into it. - * - * @author Marcus * + * @author Marcus */ -public class Factorial{ +public class Factorial { + + /** + * The main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + System.out.print("Enter a non-negative integer: "); - /** - * The main method - * - * @param args Command line arguments - */ - public static void main(String[] args){ - Scanner input = new Scanner(System.in); - System.out.print("Enter a non-negative integer: "); - - //If user does not enter an Integer, we want program to fail gracefully, letting the user know why it terminated - try{ + //If user does not enter an Integer, we want program to fail gracefully, letting the user know why it terminated + try { int number = input.nextInt(); - - //We keep prompting the user until they enter a positive number - while(number < 0){ - System.out.println("Your input must be non-negative. Please enter a positive number: "); - number = input.nextInt(); + + //We keep prompting the user until they enter a positive number + while (number < 0) { + System.out.println("Your input must be non-negative. Please enter a positive number: "); + number = input.nextInt(); } - //Display the result - System.out.println("The factorial of " + number + " will yield: " + factorial(number)); - - }catch(Exception e){ + //Display the result + System.out.println("The factorial of " + number + " will yield: " + factorial(number)); + + } catch (Exception e) { System.out.println("Error: You did not enter an integer. Program has terminated."); - } - input.close(); } - - /** - * Recursive Factorial Method - * - * @param n The number to factorial - * @return The factorial of the number - */ - public static long factorial(int n){ - if(n == 0 || n == 1) return 1; - return n * factorial(n - 1); - } + input.close(); + } + + /** + * Recursive Factorial Method + * + * @param n The number to factorial + * @return The factorial of the number + */ + public static long factorial(int n) { + if (n == 0 || n == 1) return 1; + return n * factorial(n - 1); + } } diff --git a/Others/FibToN.java b/Others/FibToN.java index ae2de417aa50..03aad56fd833 100644 --- a/Others/FibToN.java +++ b/Others/FibToN.java @@ -1,32 +1,33 @@ +package Others; + +import java.util.Scanner; + /** - * * Fibonacci sequence, and characterized by the fact that every number * after the first two is the sum of the two preceding ones. - * + *

* Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21,... - * + *

* Source for the explanation: https://en.wikipedia.org/wiki/Fibonacci_number */ -import java.util.Scanner; - public class FibToN { - public static void main(String[] args) { - //take input - Scanner scn = new Scanner(System.in); - int N = scn.nextInt(); - // print all Fibonacci numbers that are smaller than your given input N - int first = 0, second = 1; - scn.close(); - while(first <= N){ - //print first fibo 0 then add second fibo into it while updating second as well - - System.out.println(first); - - int next = first+ second; - first = second; - second = next; - } - } + public static void main(String[] args) { + //take input + Scanner scn = new Scanner(System.in); + int N = scn.nextInt(); + // print all Fibonacci numbers that are smaller than your given input N + int first = 0, second = 1; + scn.close(); + while (first <= N) { + //print first fibo 0 then add second fibo into it while updating second as well + + System.out.println(first); + + int next = first + second; + first = second; + second = next; + } + } } diff --git a/Others/FloydTriangle.java b/Others/FloydTriangle.java index f8d479a8dbac..70479dd24e63 100644 --- a/Others/FloydTriangle.java +++ b/Others/FloydTriangle.java @@ -1,17 +1,19 @@ +package Others; + import java.util.Scanner; class FloydTriangle { public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - System.out.println("Enter the number of rows which you want in your Floyd Triangle: "); - int r = sc.nextInt(), n = 0; - sc.close(); - for(int i=0; i < r; i++) { - for(int j=0; j <= i; j++) { - System.out.print(++n + " "); - } - System.out.println(); - } - } + Scanner sc = new Scanner(System.in); + System.out.println("Enter the number of rows which you want in your Floyd Triangle: "); + int r = sc.nextInt(), n = 0; + sc.close(); + for (int i = 0; i < r; i++) { + for (int j = 0; j <= i; j++) { + System.out.print(++n + " "); + } + System.out.println(); + } + } } diff --git a/Others/GCD.java b/Others/GCD.java index 58a2b5eef5aa..bba2ccf88706 100644 --- a/Others/GCD.java +++ b/Others/GCD.java @@ -1,7 +1,11 @@ -//Oskar Enmalm 3/10/17 -//This is Euclid's algorithm which is used to find the greatest common denominator -//Overide function name gcd - +package Others; + +/** + * This is Euclid's algorithm which is used to find the greatest common denominator + * Overide function name gcd + * + * @author Oskar Enmalm 3/10/17 + */ public class GCD { public static int gcd(int num1, int num2) { @@ -29,8 +33,8 @@ public static int gcd(int[] number) { } public static void main(String[] args) { - int[] myIntArray = { 4, 16, 32 }; - + int[] myIntArray = {4, 16, 32}; + // call gcd function (input array) System.out.println(gcd(myIntArray)); // => 4 System.out.printf("gcd(40,24)=%d gcd(24,40)=%d\n", gcd(40, 24), gcd(24, 40)); // => 8 diff --git a/Others/GuassLegendre.java b/Others/GuassLegendre.java index 289516aee3ea..409f626478ba 100644 --- a/Others/GuassLegendre.java +++ b/Others/GuassLegendre.java @@ -1,44 +1,46 @@ +package Others; + import java.lang.Math; -/* - * author: @AKS1996 + +/** * Guass Legendre Algorithm * ref https://en.wikipedia.org/wiki/Gauss–Legendre_algorithm * + * @author AKS1996 */ - public class GuassLegendre { - public static void main(String[] args) { - for(int i=1;i<=3;++i) - System.out.println(pi(i)); - - } - - static double pi(int l){ - /* - * l: No of loops to run - */ - - double a = 1,b=Math.pow(2,-0.5),t=0.25,p=1; - for(int i=0;i{ - @Override - public int compare(Node o1, Node o2) { - if(o1.freq>o2.freq){return 1;} - else if(o1.freq li){ - Iterator it=li.iterator(); - while(it.hasNext()){Node n=it.next();System.out.print(n.freq+" ");}System.out.println(); - } - - //Function for making tree (Huffman Tree) - public static Node make_huffmann_tree(List li){ - //Sorting list in increasing order of its letter frequency - li.sort(new comp()); - Node temp=null; - Iterator it=li.iterator(); - //System.out.println(li.size()); - //Loop for making huffman tree till only single node remains in list - while(true){ - temp=new Node(); - //a and b are Node which are to be combine to make its parent - Node a=new Node(),b=new Node(); - a=null;b=null; - //checking if list is eligible for combining or not - //here first assignment of it.next in a will always be true as list till end will - //must have atleast one node - a=(Node)it.next(); - //Below condition is to check either list has 2nd node or not to combine - //If this condition will be false, then it means construction of huffman tree is completed - if(it.hasNext()){b=(Node)it.next();} - //Combining first two smallest nodes in list to make its parent whose frequency - //will be equals to sum of frequency of these two nodes - if(b!=null){ - temp.freq=a.freq+b.freq;a.data=0;b.data=1;//assigining 0 and 1 to left and right nodes - temp.left=a;temp.right=b; - //after combing, removing first two nodes in list which are already combined - li.remove(0);//removes first element which is now combined -step1 - li.remove(0);//removes 2nd element which comes on 1st position after deleting first in step1 - li.add(temp);//adding new combined node to list - //print_list(li); //For visualizing each combination step - } - //Sorting after combining to again repeat above on sorted frequency list - li.sort(new comp()); - it=li.iterator();//resetting list pointer to first node (head/root of tree) - if(li.size()==1){return (Node)it.next();} //base condition ,returning root of huffman tree - } -} - - //Function for finding path between root and given letter ch - public static void dfs(Node n,String ch){ - Stack st=new Stack(); // stack for storing path - int freq=n.freq; // recording root freq to avoid it adding in path encoding - find_path_and_encode(st,n,ch,freq); - } - - //A simple utility function to print stack (Used for printing path) - public static void print_path(Stack st){ - for(int i=0;i st,Node root,String s,int f){ - //Base condition - if(root!= null){ - if(root.freq!=f){st.push(root);} // avoiding root to add in path/encoding bits - if(root.letr.equals(s)){print_path(st);return;} // Recursion stopping condition when path gets founded - find_path_and_encode(st,root.left,s,f); - find_path_and_encode(st,root.right,s,f); - //Popping if path not found in right or left of this node,because we previously - //pushed this node in taking a mindset that it might be in path - st.pop(); - } - } - - public static void main(String args[]){ - List li=new LinkedList<>(); - Scanner in=new Scanner(System.in); - System.out.println("Enter number of distinct letters "); - int n=in.nextInt(); - String s[]=new String[n]; - System.out.print("Enter letters with its frequency to encode\n"); - for(int i=0;i 0 && haystack.charAt(i) != needle.charAt(q)) { - q = pi[q - 1]; + q = pi[q - 1]; } if (haystack.charAt(i) == needle.charAt(q)) { @@ -26,11 +29,12 @@ public static void KMPmatcher(final String haystack, final String needle) { if (q == n) { System.out.println("Pattern starts: " + (i + 1 - n)); - q = pi[q - 1]; + q = pi[q - 1]; } } } - // return the prefix function + + // return the prefix function private static int[] computePrefixFunction(final String P) { final int n = P.length(); final int[] pi = new int[n]; diff --git a/Others/Krishnamurthy.java b/Others/Krishnamurthy.java new file mode 100644 index 000000000000..f2f3533a7549 --- /dev/null +++ b/Others/Krishnamurthy.java @@ -0,0 +1,30 @@ +package Others; + +import java.util.Scanner; + +class Krishnamurthy { + static int fact(int n) { + int i, p = 1; + for (i = n; i >= 1; i--) + p = p * i; + return p; + } + + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + int a, b, s = 0; + System.out.print("Enter the number : "); + a = sc.nextInt(); + int n = a; + while (a > 0) { + b = a % 10; + s = s + fact(b); + a = a / 10; + } + if (s == n) + System.out.print(n + " is a krishnamurthy number"); + else + System.out.print(n + " is not a krishnamurthy number"); + sc.close(); + } +} diff --git a/Others/LinearCongruentialGenerator.java b/Others/LinearCongruentialGenerator.java index b03c10daec2a..7ce224e0e9fe 100644 --- a/Others/LinearCongruentialGenerator.java +++ b/Others/LinearCongruentialGenerator.java @@ -1,56 +1,59 @@ +package Others; + /*** * A pseudorandom number generator. - * + * * @author Tobias Carryer - * Date: October 10, 2017 + * @date October 10, 2017 */ public class LinearCongruentialGenerator { private double a, c, m, previousValue; - + /*** * These parameters are saved and used when nextNumber() is called. * The current timestamp in milliseconds is used as the seed. - * + * * @param multiplier * @param increment * @param modulo The maximum number that can be generated (exclusive). A common value is 2^32. */ - public LinearCongruentialGenerator( double multiplier, double increment, double modulo ) { + public LinearCongruentialGenerator(double multiplier, double increment, double modulo) { this(System.currentTimeMillis(), multiplier, increment, modulo); } - + /*** * These parameters are saved and used when nextNumber() is called. - * + * * @param seed * @param multiplier * @param increment * @param modulo The maximum number that can be generated (exclusive). A common value is 2^32. */ - public LinearCongruentialGenerator( double seed, double multiplier, double increment, double modulo ) { + public LinearCongruentialGenerator(double seed, double multiplier, double increment, double modulo) { this.previousValue = seed; this.a = multiplier; this.c = increment; this.m = modulo; } - + /** * The smallest number that can be generated is zero. * The largest number that can be generated is modulo-1. modulo is set in the constructor. + * * @return a pseudorandom number. */ public double nextNumber() { previousValue = (a * previousValue + c) % m; return previousValue; } - - public static void main( String[] args ) { + + public static void main(String[] args) { // Show the LCG in action. // Decisive proof that the LCG works could be made by adding each number // generated to a Set while checking for duplicates. LinearCongruentialGenerator lcg = new LinearCongruentialGenerator(1664525, 1013904223, Math.pow(2.0, 32.0)); - for( int i = 0; i < 512; i++ ) { + for (int i = 0; i < 512; i++) { System.out.println(lcg.nextNumber()); } } diff --git a/Others/LowestBasePalindrome.java b/Others/LowestBasePalindrome.java index d0df5c30f511..97b445b2ff61 100644 --- a/Others/LowestBasePalindrome.java +++ b/Others/LowestBasePalindrome.java @@ -1,144 +1,146 @@ +package Others; + import java.util.InputMismatchException; import java.util.Scanner; /** * Class for finding the lowest base in which a given integer is a palindrome. * Includes auxiliary methods for converting between bases and reversing strings. - * + *

* NOTE: There is potential for error, see note at line 63. - * + * * @author RollandMichael * @version 2017.09.28 - * */ public class LowestBasePalindrome { - - public static void main(String[] args) { - Scanner in = new Scanner(System.in); - int n=0; - while (true) { - try { - System.out.print("Enter number: "); - n = in.nextInt(); - break; - } catch (InputMismatchException e) { - System.out.println("Invalid input!"); - in.next(); - } - } - System.out.println(n+" is a palindrome in base "+lowestBasePalindrome(n)); - System.out.println(base2base(Integer.toString(n),10, lowestBasePalindrome(n))); - } - - /** - * Given a number in base 10, returns the lowest base in which the - * number is represented by a palindrome (read the same left-to-right - * and right-to-left). - * @param num A number in base 10. - * @return The lowest base in which num is a palindrome. - */ - public static int lowestBasePalindrome(int num) { - int base, num2=num; - int digit; - char digitC; - boolean foundBase=false; - String newNum = ""; - String digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - - while (!foundBase) { - // Try from bases 2 to num-1 - for (base=2; base0) { - // Obtain the first digit of n in the current base, - // which is equivalent to the integer remainder of (n/base). - // The next digit is obtained by dividing n by the base and - // continuing the process of getting the remainder. This is done - // until n is <=0 and the number in the new base is obtained. - digit = (num % base); - num/=base; - // If the digit isn't in the set of [0-9][A-Z] (beyond base 36), its character - // form is just its value in ASCII. - - // NOTE: This may cause problems, as the capital letters are ASCII values - // 65-90. It may cause false positives when one digit is, for instance 10 and assigned - // 'A' from the character array and the other is 65 and also assigned 'A'. - - // Regardless, the character is added to the representation of n - // in the current base. - if (digit>=digits.length()) { - digitC=(char)(digit); - newNum+=digitC; - continue; - } - newNum+=digits.charAt(digit); - } - // Num is assigned back its original value for the next iteration. - num=num2; - // Auxiliary method reverses the number. - String reverse = reverse(newNum); - // If the number is read the same as its reverse, then it is a palindrome. - // The current base is returned. - if (reverse.equals(newNum)) { - foundBase=true; - return base; - } - } - } - // If all else fails, n is always a palindrome in base n-1. ("11") - return num-1; - } - - private static String reverse(String str) { - String reverse = ""; - for(int i=str.length()-1; i>=0; i--) { - reverse += str.charAt(i); - } - return reverse; - } - - private static String base2base(String n, int b1, int b2) { - // Declare variables: decimal value of n, - // character of base b1, character of base b2, - // and the string that will be returned. - int decimalValue = 0, charB2; - char charB1; - String output=""; - // Go through every character of n - for (int i=0; i9 and store it in charB2 - if (charB1 >= 'A' && charB1 <= 'Z') - charB2 = 10 + (charB1 - 'A'); - // Else, store the integer value in charB2 - else - charB2 = charB1 - '0'; - // Convert the digit to decimal and add it to the - // decimalValue of n - decimalValue = decimalValue * b1 + charB2; - } - - // Converting the decimal value to base b2: - // A number is converted from decimal to another base - // by continuously dividing by the base and recording - // the remainder until the quotient is zero. The number in the - // new base is the remainders, with the last remainder - // being the left-most digit. - - // While the quotient is NOT zero: - while (decimalValue != 0) { - // If the remainder is a digit < 10, simply add it to - // the left side of the new number. - if (decimalValue % b2 < 10) - output = Integer.toString(decimalValue % b2) + output; - // If the remainder is >= 10, add a character with the - // corresponding value to the new number. (A = 10, B = 11, C = 12, ...) - else - output = (char)((decimalValue % b2)+55) + output; - // Divide by the new base again - decimalValue /= b2; - } - return output; - } + + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + int n = 0; + while (true) { + try { + System.out.print("Enter number: "); + n = in.nextInt(); + break; + } catch (InputMismatchException e) { + System.out.println("Invalid input!"); + in.next(); + } + } + System.out.println(n + " is a palindrome in base " + lowestBasePalindrome(n)); + System.out.println(base2base(Integer.toString(n), 10, lowestBasePalindrome(n))); + } + + /** + * Given a number in base 10, returns the lowest base in which the + * number is represented by a palindrome (read the same left-to-right + * and right-to-left). + * + * @param num A number in base 10. + * @return The lowest base in which num is a palindrome. + */ + public static int lowestBasePalindrome(int num) { + int base, num2 = num; + int digit; + char digitC; + boolean foundBase = false; + String newNum = ""; + String digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + while (!foundBase) { + // Try from bases 2 to num-1 + for (base = 2; base < num2; base++) { + newNum = ""; + while (num > 0) { + // Obtain the first digit of n in the current base, + // which is equivalent to the integer remainder of (n/base). + // The next digit is obtained by dividing n by the base and + // continuing the process of getting the remainder. This is done + // until n is <=0 and the number in the new base is obtained. + digit = (num % base); + num /= base; + // If the digit isn't in the set of [0-9][A-Z] (beyond base 36), its character + // form is just its value in ASCII. + + // NOTE: This may cause problems, as the capital letters are ASCII values + // 65-90. It may cause false positives when one digit is, for instance 10 and assigned + // 'A' from the character array and the other is 65 and also assigned 'A'. + + // Regardless, the character is added to the representation of n + // in the current base. + if (digit >= digits.length()) { + digitC = (char) (digit); + newNum += digitC; + continue; + } + newNum += digits.charAt(digit); + } + // Num is assigned back its original value for the next iteration. + num = num2; + // Auxiliary method reverses the number. + String reverse = reverse(newNum); + // If the number is read the same as its reverse, then it is a palindrome. + // The current base is returned. + if (reverse.equals(newNum)) { + foundBase = true; + return base; + } + } + } + // If all else fails, n is always a palindrome in base n-1. ("11") + return num - 1; + } + + private static String reverse(String str) { + String reverse = ""; + for (int i = str.length() - 1; i >= 0; i--) { + reverse += str.charAt(i); + } + return reverse; + } + + private static String base2base(String n, int b1, int b2) { + // Declare variables: decimal value of n, + // character of base b1, character of base b2, + // and the string that will be returned. + int decimalValue = 0, charB2; + char charB1; + String output = ""; + // Go through every character of n + for (int i = 0; i < n.length(); i++) { + // store the character in charB1 + charB1 = n.charAt(i); + // if it is a non-number, convert it to a decimal value >9 and store it in charB2 + if (charB1 >= 'A' && charB1 <= 'Z') + charB2 = 10 + (charB1 - 'A'); + // Else, store the integer value in charB2 + else + charB2 = charB1 - '0'; + // Convert the digit to decimal and add it to the + // decimalValue of n + decimalValue = decimalValue * b1 + charB2; + } + + // Converting the decimal value to base b2: + // A number is converted from decimal to another base + // by continuously dividing by the base and recording + // the remainder until the quotient is zero. The number in the + // new base is the remainders, with the last remainder + // being the left-most digit. + + // While the quotient is NOT zero: + while (decimalValue != 0) { + // If the remainder is a digit < 10, simply add it to + // the left side of the new number. + if (decimalValue % b2 < 10) + output = Integer.toString(decimalValue % b2) + output; + // If the remainder is >= 10, add a character with the + // corresponding value to the new number. (A = 10, B = 11, C = 12, ...) + else + output = (char) ((decimalValue % b2) + 55) + output; + // Divide by the new base again + decimalValue /= b2; + } + return output; + } } diff --git a/Others/Node.java b/Others/Node.java deleted file mode 100644 index ab495b77de01..000000000000 --- a/Others/Node.java +++ /dev/null @@ -1,16 +0,0 @@ -public class Node { - public Object anElement; - public Node less; - public Node greater; - - public Node(Object theElement) { - this(theElement, null, null); //an empty node at the end will be by itself with no children, therefore the other 2 parameters are always null - //obviously the node can still be a child of other elements - } - - public Node(Object currentElement, Node lessSide, Node greaterSide) { - anElement = currentElement; - this.less = lessSide; - this.greater = greaterSide; - } -} diff --git a/Others/Palindrome.java b/Others/Palindrome.java index d482dfd01bce..28e9b5e38e25 100644 --- a/Others/Palindrome.java +++ b/Others/Palindrome.java @@ -1,3 +1,5 @@ +package Others; + class Palindrome { private String reverseString(String x) { // *helper method diff --git a/Others/PasswordGen.java b/Others/PasswordGen.java index bde0a50fe621..8d49e6c65633 100644 --- a/Others/PasswordGen.java +++ b/Others/PasswordGen.java @@ -1,23 +1,25 @@ +package Others; + import java.util.Collections; import java.util.Random; import java.util.List; import java.util.ArrayList; -/* - Creates a random password from ASCII letters - Given password length bounds - - author: AKS1996 - date: 2017-10-25 -*/ +/** + * Creates a random password from ASCII letters + * Given password length bounds + * + * @author AKS1996 + * @date 2017.10.25 + */ class PasswordGen { - public static void main(String args[]){ - String password = generatePassword(8,16); - System.out.print("Password: " + password); + public static void main(String args[]) { + String password = generatePassword(8, 16); + System.out.print("Password: " + password); } - - static String generatePassword(int min_length, int max_length){ + + static String generatePassword(int min_length, int max_length) { Random random = new Random(); String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; @@ -25,10 +27,10 @@ static String generatePassword(int min_length, int max_length){ String numbers = "0123456789"; String specialChars = "!@#$%^&*(){}?"; - String allChars = upper+lower+numbers+specialChars; + String allChars = upper + lower + numbers + specialChars; List letters = new ArrayList(); - for(char c:allChars.toCharArray()) + for (char c : allChars.toCharArray()) letters.add(c); // Inbuilt method to randomly shuffle a elements of a list @@ -36,7 +38,7 @@ static String generatePassword(int min_length, int max_length){ String password = ""; // Note that size of the password is also random - for(int i = random.nextInt(max_length-min_length) + min_length; i>0; --i) { + for (int i = random.nextInt(max_length - min_length) + min_length; i > 0; --i) { password += letters.get(random.nextInt(letters.size())); } diff --git a/Others/PerlinNoise.java b/Others/PerlinNoise.java index 1d0f795a3a35..dbd0a86e4512 100644 --- a/Others/PerlinNoise.java +++ b/Others/PerlinNoise.java @@ -1,3 +1,5 @@ +package Others; + import java.util.Random; import java.util.Scanner; @@ -6,11 +8,11 @@ */ public class PerlinNoise { /** - * @param width width of noise array - * @param height height of noise array + * @param width width of noise array + * @param height height of noise array * @param octaveCount numbers of layers used for blending noise * @param persistence value of impact each layer get while blending - * @param seed used for randomizer + * @param seed used for randomizer * @return float array containing calculated "Perlin-Noise" values */ static float[][] generatePerlinNoise(int width, int height, int octaveCount, float persistence, long seed) { @@ -20,14 +22,14 @@ static float[][] generatePerlinNoise(int width, int height, int octaveCount, flo Random random = new Random(seed); //fill base array with random values as base for noise - for(int x = 0; x < width; x++) { - for(int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { base[x][y] = random.nextFloat(); } } //calculate octaves with different roughness - for(int octave = 0; octave < octaveCount; octave++) { + for (int octave = 0; octave < octaveCount; octave++) { noiseLayers[octave] = generatePerlinNoiseLayer(base, width, height, octave); } @@ -35,12 +37,12 @@ static float[][] generatePerlinNoise(int width, int height, int octaveCount, flo float totalAmplitude = 0f; //calculate perlin noise by blending each layer together with specific persistence - for(int octave = octaveCount - 1; octave >= 0; octave--) { + for (int octave = octaveCount - 1; octave >= 0; octave--) { amplitude *= persistence; totalAmplitude += amplitude; - for(int x = 0; x < width; x++) { - for(int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { //adding each value of the noise layer to the noise //by increasing amplitude the rougher noises will have more impact perlinNoise[x][y] += noiseLayers[octave][x][y] * amplitude; @@ -49,7 +51,7 @@ static float[][] generatePerlinNoise(int width, int height, int octaveCount, flo } //normalize values so that they stay between 0..1 - for(int x = 0; x < width; x++) { + for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { perlinNoise[x][y] /= totalAmplitude; } @@ -59,8 +61,8 @@ static float[][] generatePerlinNoise(int width, int height, int octaveCount, flo } /** - * @param base base random float array - * @param width width of noise array + * @param base base random float array + * @param width width of noise array * @param height height of noise array * @param octave current layer * @return float array containing calculated "Perlin-Noise-Layer" values @@ -72,13 +74,13 @@ static float[][] generatePerlinNoiseLayer(float[][] base, int width, int height, int period = 1 << octave; //2^k float frequency = 1f / period; // 1/2^k - for(int x = 0; x < width; x++) { + for (int x = 0; x < width; x++) { //calculates the horizontal sampling indices int x0 = (x / period) * period; int x1 = (x0 + period) % width; float horizintalBlend = (x - x0) * frequency; - for(int y = 0; y < height; y++) { + for (int y = 0; y < height; y++) { //calculates the vertical sampling indices int y0 = (y / period) * period; int y1 = (y0 + period) % height; @@ -99,8 +101,8 @@ static float[][] generatePerlinNoiseLayer(float[][] base, int width, int height, } /** - * @param a value of point a - * @param b value of point b + * @param a value of point a + * @param b value of point b * @param alpha determine which value has more impact (closer to 0 -> a, closer to 1 -> b) * @return interpolated value */ @@ -143,8 +145,8 @@ public static void main(String[] args) { final int length = chars.length; final float step = 1f / length; //output based on charset - for(int x = 0; x < width; x++) { - for(int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { float value = step; float noiseValue = perlinNoise[x][y]; diff --git a/Others/PowerOfTwoOrNot.java b/Others/PowerOfTwoOrNot.java index 36facfeddb76..349eb9de5807 100644 --- a/Others/PowerOfTwoOrNot.java +++ b/Others/PowerOfTwoOrNot.java @@ -1,33 +1,36 @@ +package Others; + import java.util.Scanner; /** -*A utility to check if a given number is power of two or not. -*For example 8,16 etc. -*/ + * A utility to check if a given number is power of two or not. + * For example 8,16 etc. + */ + public class PowerOfTwoOrNot { - - public static void main (String[] args) { - - Scanner sc = new Scanner(System.in); - System.out.println("Enter the number"); - int num = sc.nextInt(); - boolean isPowerOfTwo = checkIfPowerOfTwoOrNot(num); - if (isPowerOfTwo) { - System.out.println("Number is a power of two"); - } else { - System.out.println("Number is not a power of two"); - } - } + public static void main(String[] args) { -/** -* Checks whether given number is power of two or not. -* -* @param number -* @return boolean -*/ -public static boolean checkIfPowerOfTwoOrNot(int number) { - return number != 0 && ((number & (number-1)) == 0); - } + Scanner sc = new Scanner(System.in); + System.out.println("Enter the number"); + int num = sc.nextInt(); + boolean isPowerOfTwo = checkIfPowerOfTwoOrNot(num); + if (isPowerOfTwo) { + System.out.println("Number is a power of two"); + } else { + System.out.println("Number is not a power of two"); + } + } + + + /** + * Checks whether given number is power of two or not. + * + * @param number + * @return boolean + */ + public static boolean checkIfPowerOfTwoOrNot(int number) { + return number != 0 && ((number & (number - 1)) == 0); + } } diff --git a/Others/QueueUsingTwoStacks.java b/Others/QueueUsingTwoStacks.java index 271c35c1859d..d138f71aabfb 100644 --- a/Others/QueueUsingTwoStacks.java +++ b/Others/QueueUsingTwoStacks.java @@ -1,3 +1,5 @@ +package Others; + import java.util.Stack; /** diff --git a/Others/removeDuplicateFromString.java b/Others/RemoveDuplicateFromString.java similarity index 85% rename from Others/removeDuplicateFromString.java rename to Others/RemoveDuplicateFromString.java index ce8f3499cede..d3590dc92417 100644 --- a/Others/removeDuplicateFromString.java +++ b/Others/RemoveDuplicateFromString.java @@ -1,14 +1,14 @@ +package Others; + import java.io.BufferedReader; import java.io.InputStreamReader; /** - * * @author Varun Upadhyay (https://github.com/varunu28) - * */ -public class removeDuplicateFromString { - public static void main (String[] args) throws Exception{ +public class RemoveDuplicateFromString { + public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String inp_str = br.readLine(); @@ -21,13 +21,14 @@ public static void main (String[] args) throws Exception{ /** * This method produces a string after removing all the duplicate characters from input string and returns it * Example: Input String - "aabbbccccddddd" - * Output String - "abcd" + * Output String - "abcd" + * * @param s String from which duplicate characters have to be removed * @return string with only unique characters */ public static String removeDuplicate(String s) { - if(s.isEmpty() || s == null) { + if (s == null || s.isEmpty()) { return s; } diff --git a/Others/ReturnSubsequence.java b/Others/ReturnSubsequence.java index ef3aaed09dd9..bb1b413afd1d 100644 --- a/Others/ReturnSubsequence.java +++ b/Others/ReturnSubsequence.java @@ -1,58 +1,41 @@ -/* -This program will return all the subsequences of the input string in a string array; -Sample Input: -abc -Sample Output: -"" ( Empty String ) -c -b -bc -a -ac -ab -abc - - */ +package Others; import java.util.Scanner; public class ReturnSubsequence { - /* - Main function will accept the given string and implement return subsequences function - */ public static void main(String[] args) { System.out.println("Enter String: "); - Scanner s=new Scanner(System.in); - String givenString=s.next(); //given string - String[] subsequence=returnSubsequence(givenString); //calling returnSubsequence() function + Scanner s = new Scanner(System.in); + String givenString = s.next(); //given string + String[] subsequence = returnSubsequence(givenString); //calling returnSubsequence() function System.out.println("Subsequences : "); - for(int i=0;i stack=new Stack<>(); + private static Stack stack = new Stack<>(); //Main function public static void main(String[] args) { //To Create a Dummy Stack containing integers from 0-9 - for(int i=0;i<10;i++) - { + for (int i = 0; i < 10; i++) { stack.push(i); } System.out.println("STACK"); //To print that dummy Stack - for(int k=9;k>=0;k--) - { + for (int k = 9; k >= 0; k--) { System.out.println(k); } @@ -28,8 +28,7 @@ public static void main(String[] args) { System.out.println("REVERSED STACK : "); //To print reversed stack - while (!stack.isEmpty()) - { + while (!stack.isEmpty()) { System.out.println(stack.pop()); } @@ -38,13 +37,13 @@ public static void main(String[] args) { //Function Used to reverse Stack Using Recursion private static void reverseUsingRecursion(Stack stack) { - if(stack.isEmpty()) // If stack is empty then return + if (stack.isEmpty()) // If stack is empty then return { return; } /* All items are stored in call stack until we reach the end*/ - int temptop=stack.peek(); + int temptop = stack.peek(); stack.pop(); reverseUsingRecursion(stack); //Recursion call insertAtEnd(temptop); // Insert items held in call stack one by one into stack @@ -52,11 +51,9 @@ private static void reverseUsingRecursion(Stack stack) { //Function used to insert element at the end of stack private static void insertAtEnd(int temptop) { - if(stack.isEmpty()) - { + if (stack.isEmpty()) { stack.push(temptop); // If stack is empty push the element - } - else { + } else { int temp = stack.peek(); /* All the items are stored in call stack until we reach end*/ stack.pop(); diff --git a/Others/ReverseString.java b/Others/ReverseString.java index 9f4d9775bb43..8dbf6cbd4b7a 100644 --- a/Others/ReverseString.java +++ b/Others/ReverseString.java @@ -1,46 +1,46 @@ +package Others; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * This method produces a reversed version of a string - * - * @author Unknown * + * @author Unknown */ -class ReverseString -{ - - /** - * This method reverses the string str and returns it - * @param str String to be reversed - * @return Reversed string - */ - public static String reverse(String str){ - if(str.isEmpty() || str == null) return str; - - char arr[] = str.toCharArray(); - for(int i = 0, j = str.length() - 1; i < j; i++, j--){ +class ReverseString { + + /** + * This method reverses the string str and returns it + * + * @param str String to be reversed + * @return Reversed string + */ + public static String reverse(String str) { + if (str.isEmpty() || str == null) return str; + + char arr[] = str.toCharArray(); + for (int i = 0, j = str.length() - 1; i < j; i++, j--) { char temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; - } - return new String(arr); } - - /** - * Main Method - * - * @param args Command line arguments - * @throws IOException Exception thrown because of BufferedReader - */ - public static void main(String args[]) throws IOException - { - BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); - System.out.println("Enter the string"); - String srr=br.readLine(); - System.out.println("Reverse="+reverse(srr)); - br.close(); - } + return new String(arr); + } + + /** + * Main Method + * + * @param args Command line arguments + * @throws IOException Exception thrown because of BufferedReader + */ + public static void main(String args[]) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + System.out.println("Enter the string"); + String srr = br.readLine(); + System.out.println("Reverse=" + reverse(srr)); + br.close(); + } } diff --git a/Others/RootPrecision.java b/Others/RootPrecision.java index 3e3b73b82836..388f1b2ec7b6 100644 --- a/Others/RootPrecision.java +++ b/Others/RootPrecision.java @@ -1,3 +1,5 @@ +package Others; + import java.util.Scanner; public class RootPrecision { diff --git a/Others/SJF.java b/Others/SJF.java index 923ece654939..e6b995f4846c 100644 --- a/Others/SJF.java +++ b/Others/SJF.java @@ -1,14 +1,16 @@ +package Others; /** -*

Shortest job first.

-*

Shortest job first (SJF) or shortest job next, is a scheduling policy -* that selects the waiting process with the smallest execution time to execute next -* Shortest Job first has the advantage of having minimum average waiting time among all scheduling algorithms. -* It is a Greedy Algorithm. -* It may cause starvation if shorter processes keep coming. -* This problem has been solved using the concept of aging.

-* @author shivg7706 -* @since 2018/10/27 -*/ + *

Shortest job first.

+ *

Shortest job first (SJF) or shortest job next, is a scheduling policy + * that selects the waiting process with the smallest execution time to execute next + * Shortest Job first has the advantage of having minimum average waiting time among all scheduling algorithms. + * It is a Greedy Algorithm. + * It may cause starvation if shorter processes keep coming. + * This problem has been solved using the concept of aging.

+ * + * @author shivg7706 + * @since 2018/10/27 + */ import java.util.Scanner; import java.util.ArrayList; @@ -71,17 +73,17 @@ class Schedule { void startScheduling() { - + processes.sort(new Comparator() { @Override - public int compare (Process a, Process b) { + public int compare(Process a, Process b) { return a.arrivalTime - b.arrivalTime; } }); - while(!(arrivals.size() == 0 && remainingProcess.size() == 0)) { + while (!(arrivals.size() == 0 && remainingProcess.size() == 0)) { removeFinishedProcess(); - if(arrivals.get(timer) != null) { + if (arrivals.get(timer) != null) { remainingProcess.addAll(arrivals.get(timer)); arrivals.remove(timer); } @@ -91,12 +93,12 @@ public int compare (Process a, Process b) { private int beta = 1; @Override - public int compare (Process a, Process b) { + public int compare(Process a, Process b) { int aRem = a.remainingTime; int bRem = b.remainingTime; int aprior = a.priority; int bprior = b.priority; - return (alpha*aRem + beta*aprior) - (alpha*bRem + beta*bprior); + return (alpha * aRem + beta * aprior) - (alpha * bRem + beta * bprior); } }); @@ -105,13 +107,13 @@ public int compare (Process a, Process b) { timer++; } - System.out.println("Total time required: " + (timer-1)); + System.out.println("Total time required: " + (timer - 1)); } void removeFinishedProcess() { ArrayList completed = new ArrayList(); for (int i = 0; i < remainingProcess.size(); i++) { - if(remainingProcess.get(i).remainingTime == 0) { + if (remainingProcess.get(i).remainingTime == 0) { completed.add(i); } } @@ -126,7 +128,7 @@ void removeFinishedProcess() { } public int timeElapsed(int i) { - if(!remainingProcess.isEmpty()) { + if (!remainingProcess.isEmpty()) { gantChart.add(i, remainingProcess.get(0).pid); remainingProcess.get(0).remainingTime--; return 1; @@ -140,7 +142,7 @@ public void ageing(int k) { if (remainingProcess.get(i).waitTime % 7 == 0) { remainingProcess.get(i).priority--; } - } + } } @@ -163,11 +165,11 @@ public void solve() { System.out.println("Process no.: " + i + " Wait time: " + processes.get(i).waitTime + " Turn Around Time: " + processes.get(i).turnAroundTime); } - System.out.println("Average Waiting Time: " + waitTimeTot/noOfProcess); - System.out.println("Average TAT Time: " + tatTime/noOfProcess); - System.out.println("Throughput: " + (float)noOfProcess/(timer - 1)); + System.out.println("Average Waiting Time: " + waitTimeTot / noOfProcess); + System.out.println("Average TAT Time: " + tatTime / noOfProcess); + System.out.println("Throughput: " + (float) noOfProcess / (timer - 1)); } - + } public class SJF { diff --git a/Others/SieveOfEratosthenes.java b/Others/SieveOfEratosthenes.java index 4b6fd5b78491..465e600a59e9 100644 --- a/Others/SieveOfEratosthenes.java +++ b/Others/SieveOfEratosthenes.java @@ -1,7 +1,7 @@ +package Others; + /** - * * @author Varun Upadhyay (https://github.com/varunu28) - * */ public class SieveOfEratosthenes { @@ -9,27 +9,27 @@ public class SieveOfEratosthenes { * This method implements the Sieve of Eratosthenes Algorithm * * @param n The number till which we have to check for prime - * Prints all the prime numbers till n + * Prints all the prime numbers till n **/ public static void findPrimesTillN(int n) { - int[] arr = new int[n+1]; + int[] arr = new int[n + 1]; - for (int i=0;i<=n;i++) { + for (int i = 0; i <= n; i++) { arr[i] = 1; } arr[0] = arr[1] = 0; - for (int i=2;i<=Math.sqrt(n);i++) { + for (int i = 2; i <= Math.sqrt(n); i++) { if (arr[i] == 1) { - for (int j=2;i*j <= n;j++) { - arr[i*j] = 0; + for (int j = 2; i * j <= n; j++) { + arr[i * j] = 0; } } } - for (int i=0;i skyline) { - Iterator it = skyline.iterator(); - - while(it.hasNext()) { - Skyline temp = it.next(); - System.out.print(temp.coordinates + "," + temp.height); - if(it.hasNext()) { - System.out.print(","); - } - } - - } - - public ArrayList findSkyline(int start, int end) { - if(start == end) { - ArrayList list = new ArrayList<>(); - list.add(new Skyline(building[start].left, building[start].height)); - list.add(new Skyline(building[end].right, 0)); - - return list; - } - - int mid = (start + end) / 2; - - ArrayList sky1 = this.findSkyline(start, mid); - ArrayList sky2 = this.findSkyline(mid + 1, end); - - return this.mergeSkyline(sky1, sky2); - } - - public ArrayList mergeSkyline(ArrayList sky1, ArrayList sky2) { - int currentH1 = 0, currentH2 = 0; - ArrayList skyline = new ArrayList<>(); - int maxH = 0; - - while(!sky1.isEmpty() && !sky2.isEmpty()) { - if(sky1.get(0).coordinates < sky2.get(0).coordinates) { - int currentX = sky1.get(0).coordinates; - currentH1 = sky1.get(0).height; - - if(currentH1 < currentH2) { - sky1.remove(0); - if(maxH != currentH2) skyline.add(new Skyline(currentX, currentH2)); - } else { - maxH = currentH1; - sky1.remove(0); - skyline.add(new Skyline(currentX, currentH1)); - } - } else { - int currentX = sky2.get(0).coordinates; - currentH2 = sky2.get(0).height; - - if(currentH2 < currentH1) { - sky2.remove(0); - if(maxH != currentH1) skyline.add(new Skyline(currentX, currentH1)); - } else { - maxH = currentH2; - sky2.remove(0); - skyline.add(new Skyline(currentX, currentH2)); - } - } - } - - while(!sky1.isEmpty()) { - skyline.add(sky1.get(0)); - sky1.remove(0); - } - - while(!sky2.isEmpty()) { - skyline.add(sky2.get(0)); - sky2.remove(0); - } - - return skyline; - } - - public class Skyline { - public int coordinates; - public int height; - - public Skyline(int coordinates, int height) { - this.coordinates = coordinates; - this.height = height; - } - } - - public class Building { - public int left; - public int height; - public int right; - - public Building(int left, int height, int right) { - this.left = left; - this.height = height; - this.right = right; - } - } - - public static void main(String[] args) { - SkylineProblem skylineProblem = new SkylineProblem(); - skylineProblem.run(); - } + Building[] building; + int count; + + public void run() { + Scanner sc = new Scanner(System.in); + + int num = sc.nextInt(); + this.building = new Building[num]; + + for (int i = 0; i < num; i++) { + String input = sc.next(); + String[] data = input.split(","); + this.add(Integer.parseInt(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2])); + } + this.print(this.findSkyline(0, num - 1)); + + sc.close(); + } + + public void add(int left, int height, int right) { + building[count++] = new Building(left, height, right); + } + + public void print(ArrayList skyline) { + Iterator it = skyline.iterator(); + + while (it.hasNext()) { + Skyline temp = it.next(); + System.out.print(temp.coordinates + "," + temp.height); + if (it.hasNext()) { + System.out.print(","); + } + } + + } + + public ArrayList findSkyline(int start, int end) { + if (start == end) { + ArrayList list = new ArrayList<>(); + list.add(new Skyline(building[start].left, building[start].height)); + list.add(new Skyline(building[end].right, 0)); + + return list; + } + + int mid = (start + end) / 2; + + ArrayList sky1 = this.findSkyline(start, mid); + ArrayList sky2 = this.findSkyline(mid + 1, end); + + return this.mergeSkyline(sky1, sky2); + } + + public ArrayList mergeSkyline(ArrayList sky1, ArrayList sky2) { + int currentH1 = 0, currentH2 = 0; + ArrayList skyline = new ArrayList<>(); + int maxH = 0; + + while (!sky1.isEmpty() && !sky2.isEmpty()) { + if (sky1.get(0).coordinates < sky2.get(0).coordinates) { + int currentX = sky1.get(0).coordinates; + currentH1 = sky1.get(0).height; + + if (currentH1 < currentH2) { + sky1.remove(0); + if (maxH != currentH2) skyline.add(new Skyline(currentX, currentH2)); + } else { + maxH = currentH1; + sky1.remove(0); + skyline.add(new Skyline(currentX, currentH1)); + } + } else { + int currentX = sky2.get(0).coordinates; + currentH2 = sky2.get(0).height; + + if (currentH2 < currentH1) { + sky2.remove(0); + if (maxH != currentH1) skyline.add(new Skyline(currentX, currentH1)); + } else { + maxH = currentH2; + sky2.remove(0); + skyline.add(new Skyline(currentX, currentH2)); + } + } + } + + while (!sky1.isEmpty()) { + skyline.add(sky1.get(0)); + sky1.remove(0); + } + + while (!sky2.isEmpty()) { + skyline.add(sky2.get(0)); + sky2.remove(0); + } + + return skyline; + } + + public class Skyline { + public int coordinates; + public int height; + + public Skyline(int coordinates, int height) { + this.coordinates = coordinates; + this.height = height; + } + } + + public class Building { + public int left; + public int height; + public int right; + + public Building(int left, int height, int right) { + this.left = left; + this.height = height; + this.right = right; + } + } + + public static void main(String[] args) { + SkylineProblem skylineProblem = new SkylineProblem(); + skylineProblem.run(); + } } diff --git a/Others/StackPostfixNotation.java b/Others/StackPostfixNotation.java index be77eeadb69e..01e4c8a8eb1c 100644 --- a/Others/StackPostfixNotation.java +++ b/Others/StackPostfixNotation.java @@ -1,38 +1,40 @@ +package Others; + import java.util.*; public class StackPostfixNotation { public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); + Scanner scanner = new Scanner(System.in); String post = scanner.nextLine(); // Takes input with spaces in between eg. "1 21 +" System.out.println(postfixEvaluate(post)); } // Evaluates the given postfix expression string and returns the result. public static int postfixEvaluate(String exp) { - Stack s = new Stack (); - Scanner tokens = new Scanner(exp); + Stack s = new Stack(); + Scanner tokens = new Scanner(exp); - while (tokens.hasNext()) { - if (tokens.hasNextInt()) { - s.push(tokens.nextInt()); // If int then push to stack - } else { // else pop top two values and perform the operation - int num2 = s.pop(); - int num1 = s.pop(); - String op = tokens.next(); + while (tokens.hasNext()) { + if (tokens.hasNextInt()) { + s.push(tokens.nextInt()); // If int then push to stack + } else { // else pop top two values and perform the operation + int num2 = s.pop(); + int num1 = s.pop(); + String op = tokens.next(); - if (op.equals("+")) { - s.push(num1 + num2); - } else if (op.equals("-")) { - s.push(num1 - num2); - } else if (op.equals("*")) { - s.push(num1 * num2); - } else { - s.push(num1 / num2); - } + if (op.equals("+")) { + s.push(num1 + num2); + } else if (op.equals("-")) { + s.push(num1 - num2); + } else if (op.equals("*")) { + s.push(num1 * num2); + } else { + s.push(num1 / num2); + } - // "+", "-", "*", "/" - } - } - return s.pop(); + // "+", "-", "*", "/" + } + } + return s.pop(); } } diff --git a/Others/TopKWords.java b/Others/TopKWords.java index e2d3c6fa533a..840c3c2f7010 100644 --- a/Others/TopKWords.java +++ b/Others/TopKWords.java @@ -1,3 +1,5 @@ +package Others; + import java.io.*; import java.util.*; @@ -24,8 +26,8 @@ public Map getDictionary() { in = fis.read(); // read one character while (-1 != in) { - if (Character.isLetter((char)in)) { - s += (char)in; //if get a letter, append to s + if (Character.isLetter((char) in)) { + s += (char) in; //if get a letter, append to s } else { // this branch means an entire word has just been read if (s.length() > 0) { @@ -56,6 +58,7 @@ public Map getDictionary() { return null; } } + public static void main(String[] args) { // you can replace the filePath with yours CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); diff --git a/Others/TowerOfHanoiUsingRecursion.java b/Others/TowerOfHanoi.java similarity index 80% rename from Others/TowerOfHanoiUsingRecursion.java rename to Others/TowerOfHanoi.java index b5ee7ad71e10..2eca7fc744a0 100644 --- a/Others/TowerOfHanoiUsingRecursion.java +++ b/Others/TowerOfHanoi.java @@ -1,23 +1,23 @@ +package Others; + import java.util.Scanner; -class TowerOfHanoi -{ - public static void shift(int n, String startPole, String intermediatePole, String endPole) - { - if (n == 0) // if n becomes zero the program returns thus ending the loop. - { +class TowerOfHanoi { + public static void shift(int n, String startPole, String intermediatePole, String endPole) { + // if n becomes zero the program returns thus ending the loop. + if (n == 0) { return; } - - + + // Shift function is called in recursion for swapping the n-1 disc from the startPole to the intermediatePole shift(n - 1, startPole, endPole, intermediatePole); System.out.println("\nMove \"" + n + "\" from " + startPole + " --> " + endPole); // Result Printing // Shift function is called in recursion for swapping the n-1 disc from the intermediatePole to the endPole shift(n - 1, intermediatePole, startPole, endPole); } - public static void main(String[] args) - { + + public static void main(String[] args) { System.out.print("Enter number of discs on Pole 1: "); Scanner scanner = new Scanner(System.in); int numberOfDiscs = scanner.nextInt(); //input of number of discs on pole 1 diff --git a/Others/countwords.java b/Others/countwords.java deleted file mode 100644 index da871047dd58..000000000000 --- a/Others/countwords.java +++ /dev/null @@ -1,26 +0,0 @@ -import java.util.Scanner; - -/** - * You enter a string into this program, and it will return how many words were - * in that particular string - * - * @author Marcus - */ -public class CountWords { - - public static void main(String[] args) { - Scanner input = new Scanner(System.in); - System.out.println("Enter your text: "); - String str = input.nextLine(); - - System.out.println("Your text has " + wordCount(str) + " word(s)"); - input.close(); - } - - private static int wordCount(String s) { - if (s == null || s.isEmpty()) - return 0; - return s.trim().split("[\\s]+").length; - } - -} diff --git a/Others/krishnamurthy.java b/Others/krishnamurthy.java deleted file mode 100644 index 52480eb09722..000000000000 --- a/Others/krishnamurthy.java +++ /dev/null @@ -1,28 +0,0 @@ -import java.util.Scanner; - -class krishnamurthy { - static int fact(int n) { - int i, p = 1; - for (i = n; i >= 1; i--) - p = p * i; - return p; - } - - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - int a, b, s = 0; - System.out.print("Enter the number : "); - a = sc.nextInt(); - int n = a; - while (a > 0) { - b = a % 10; - s = s + fact(b); - a = a / 10; - } - if (s == n) - System.out.print(n + " is a krishnamurthy number"); - else - System.out.print(n + " is not a krishnamurthy number"); - sc.close(); - } -} diff --git a/Searches/BinarySearch.java b/Searches/BinarySearch.java index 6877a55f1d95..e290cefb84fe 100644 --- a/Searches/BinarySearch.java +++ b/Searches/BinarySearch.java @@ -2,7 +2,7 @@ import java.util.Arrays; import java.util.Random; -import java.util.concurrent.ThreadLocalRandom +import java.util.concurrent.ThreadLocalRandom; import java.util.stream.IntStream; import static java.lang.String.format; @@ -38,7 +38,7 @@ class BinarySearch implements SearchAlgorithm { * @return index of the element */ @Override - public > int find(T array[], T key) { + public > int find(T[] array, T key) { return search(array, key, 0, array.length); } @@ -77,7 +77,8 @@ public static void main(String[] args) { int size = 100; int maxElement = 100000; - int[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(); + Integer[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().boxed().toArray(Integer[]::new); + // The element that should be found int shouldBeFound = integers[r.nextInt(size - 1)]; diff --git a/Searches/InterpolationSearch.java b/Searches/InterpolationSearch.java index b2395797c207..1b4f64a818b5 100644 --- a/Searches/InterpolationSearch.java +++ b/Searches/InterpolationSearch.java @@ -7,73 +7,69 @@ import static java.lang.String.format; /** - * * Interpolation search algorithm implementation - * + *

* Worst-case performance O(n) * Best-case performance O(1) * Average performance O(log(log(n))) if the elements are uniformly distributed if not O(n) * Worst-case space complexity O(1) * - * * @author Podshivalov Nikita (https://github.com/nikitap492) - * */ class InterpolationSearch { - /** - * @param array is a sorted array - * @param key is a value what shoulb be found in the array - * @return an index if the array contains the key unless -1 - */ - public int find(int array[], int key) { - // Find indexes of two corners - int start = 0, end = (array.length - 1); - - // Since array is sorted, an element present - // in array must be in range defined by corner - while (start <= end && key >= array[start] && key <= array[end]) - { - // Probing the position with keeping - // uniform distribution in mind. - int pos = start + (((end-start) / (array[end]-array[start]))*(key - array[start])); - - // Condition of target found - if (array[pos] == key) - return pos; - - // If key is larger, key is in upper part - if (array[pos] < key) - start = pos + 1; - - // If key is smaller, x is in lower part - else - end = pos - 1; - } - return -1; - } - - // Driver method - public static void main(String[] args) { - Random r = new Random(); - int size = 100; - int maxElement = 100000; - int[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(); - - - //the element that should be found - Integer shouldBeFound = integers[r.nextInt(size - 1)]; - - InterpolationSearch search = new InterpolationSearch(); - int atIndex = search.find(integers, shouldBeFound); - - System.out.println(String.format("Should be found: %d. Found %d at index %d. An array length %d" - , shouldBeFound, integers[atIndex], atIndex, size)); - - - int toCheck = Arrays.binarySearch(integers, shouldBeFound); - System.out.println(format("Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); - } + /** + * @param array is a sorted array + * @param key is a value what shoulb be found in the array + * @return an index if the array contains the key unless -1 + */ + public int find(int array[], int key) { + // Find indexes of two corners + int start = 0, end = (array.length - 1); + + // Since array is sorted, an element present + // in array must be in range defined by corner + while (start <= end && key >= array[start] && key <= array[end]) { + // Probing the position with keeping + // uniform distribution in mind. + int pos = start + (((end - start) / (array[end] - array[start])) * (key - array[start])); + + // Condition of target found + if (array[pos] == key) + return pos; + + // If key is larger, key is in upper part + if (array[pos] < key) + start = pos + 1; + + // If key is smaller, x is in lower part + else + end = pos - 1; + } + return -1; + } + + // Driver method + public static void main(String[] args) { + Random r = new Random(); + int size = 100; + int maxElement = 100000; + int[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(); + + + //the element that should be found + Integer shouldBeFound = integers[r.nextInt(size - 1)]; + + InterpolationSearch search = new InterpolationSearch(); + int atIndex = search.find(integers, shouldBeFound); + + System.out.println(String.format("Should be found: %d. Found %d at index %d. An array length %d" + , shouldBeFound, integers[atIndex], atIndex, size)); + + + int toCheck = Arrays.binarySearch(integers, shouldBeFound); + System.out.println(format("Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); + } } diff --git a/Searches/IterativeBinarySearch.java b/Searches/IterativeBinarySearch.java index c6f8e7f1a8d9..8df51a7d789b 100644 --- a/Searches/IterativeBinarySearch.java +++ b/Searches/IterativeBinarySearch.java @@ -11,7 +11,7 @@ * This class represents iterative version {@link BinarySearch} * Iterative binary search is likely to have lower constant factors because it doesn't involve the overhead of manipulating the call stack. * But in java the recursive version can be optimized by the compiler to this version. - * + *

* Worst-case performance O(log n) * Best-case performance O(1) * Average performance O(log n) @@ -19,24 +19,21 @@ * * @author Gabriele La Greca : https://github.com/thegabriele97 * @author Podshivalov Nikita (https://github.com/nikitap492) - * * @see SearchAlgorithm * @see BinarySearch - * */ public final class IterativeBinarySearch implements SearchAlgorithm { /** * This method implements an iterative version of binary search algorithm - * + * * @param array a sorted array - * @param key the key to search in array - * + * @param key the key to search in array * @return the index of key in the array or -1 if not found */ @Override - public > int find(T[] array, T key) { + public > int find(T[] array, T key) { int l, r, k, cmp; l = 0; diff --git a/Searches/IterativeTernarySearch.java b/Searches/IterativeTernarySearch.java index 598b3b3eb366..798cf444f47f 100644 --- a/Searches/IterativeTernarySearch.java +++ b/Searches/IterativeTernarySearch.java @@ -7,24 +7,20 @@ import static java.lang.String.format; /** - * * A iterative version of a ternary search algorithm * This is better way to implement the ternary search, because a recursive version adds some overhead to a stack. * But in java the compile can transform the recursive version to iterative implicitly, * so there are no much differences between these two algorithms - * + *

* Worst-case performance Θ(log3(N)) * Best-case performance O(1) * Average performance Θ(log3(N)) * Worst-case space complexity O(1) * - * * @author Podshivalov Nikita (https://github.com/nikitap492) - * @since 2018-04-13 - * * @see SearchAlgorithm * @see TernarySearch - * + * @since 2018-04-13 */ public class IterativeTernarySearch implements SearchAlgorithm { @@ -35,10 +31,10 @@ public > int find(T[] array, T key) { int left = 0; int right = array.length - 1; - while (right > left) { + while (right > left) { - int leftCmp = array[left].compareTo(key); - int rightCmp = array[right].compareTo(key); + int leftCmp = array[left].compareTo(key); + int rightCmp = array[right].compareTo(key); if (leftCmp == 0) return left; if (rightCmp == 0) return right; diff --git a/Searches/LinearSearch.java b/Searches/LinearSearch.java index 7664d7debb99..8a69b758d6dd 100644 --- a/Searches/LinearSearch.java +++ b/Searches/LinearSearch.java @@ -7,17 +7,14 @@ * Linear search is the easiest search algorithm * It works with sorted and unsorted arrays (an binary search works only with sorted array) * This algorithm just compares all elements of an array to find a value - * + *

* Worst-case performance O(n) * Best-case performance O(1) * Average performance O(n) * Worst-case space complexity * - * * @author Varun Upadhyay (https://github.com/varunu28) * @author Podshivalov Nikita (https://github.com/nikitap492) - * - * * @see BinarySearch * @see SearchAlgorithm */ @@ -33,7 +30,7 @@ public class LinearSearch implements SearchAlgorithm { */ @Override public > int find(T[] array, T value) { - for (int i = 0; i < array.length ; i++) { + for (int i = 0; i < array.length; i++) { if (array[i].compareTo(value) == 0) { return i; } diff --git a/Searches/SaddlebackSearch.java b/Searches/SaddlebackSearch.java index ed9c9108c480..eee2f0bb6559 100644 --- a/Searches/SaddlebackSearch.java +++ b/Searches/SaddlebackSearch.java @@ -27,10 +27,10 @@ public class SaddlebackSearch { /** * This method performs Saddleback Search * - * @param arr The **Sorted** array in which we will search the element. + * @param arr The **Sorted** array in which we will search the element. * @param row the current row. * @param col the current column. - * @param key the element that we want to search for. + * @param key the element that we want to search for. * @return The index(row and column) of the element if found. * Else returns -1 -1. */ diff --git a/Searches/SearchAlgorithm.java b/Searches/SearchAlgorithm.java index d1a93fb7eacc..00dce17f0226 100644 --- a/Searches/SearchAlgorithm.java +++ b/Searches/SearchAlgorithm.java @@ -1,18 +1,16 @@ package Searches; /** - * The common interface of most searching algorithms + * The common interface of most searching algorithms * * @author Podshivalov Nikita (https://github.com/nikitap492) - * **/ public interface SearchAlgorithm { /** - * - * @param key is an element which should be found + * @param key is an element which should be found * @param array is an array where the element should be found - * @param Comparable type + * @param Comparable type * @return first found index of the element */ > int find(T array[], T key); diff --git a/Searches/TernarySearch.java b/Searches/TernarySearch.java index cefd374098cc..ced67b0f56e7 100644 --- a/Searches/TernarySearch.java +++ b/Searches/TernarySearch.java @@ -8,49 +8,43 @@ import static java.lang.String.format; /** - * - * - * * A ternary search algorithm is a technique in computer science for finding the minimum or maximum of a unimodal function * The algorithm determines either that the minimum or maximum cannot be in the first third of the domain * or that it cannot be in the last third of the domain, then repeats on the remaining third. - * + *

* Worst-case performance Θ(log3(N)) * Best-case performance O(1) * Average performance Θ(log3(N)) * Worst-case space complexity O(1) * - * * @author Podshivalov Nikita (https://github.com/nikitap492) - * * @see SearchAlgorithm * @see IterativeBinarySearch - * */ -public class TernarySearch implements SearchAlgorithm{ +public class TernarySearch implements SearchAlgorithm { /** - * @param arr The **Sorted** array in which we will search the element. + * @param arr The **Sorted** array in which we will search the element. * @param value The value that we want to search for. * @return The index of the element if found. * Else returns -1. */ @Override - public > int find(T[] arr, T value){ + public > int find(T[] arr, T value) { return ternarySearch(arr, value, 0, arr.length - 1); } /** - * @param arr The **Sorted** array in which we will search the element. - * @param key The value that we want to search for. + * @param arr The **Sorted** array in which we will search the element. + * @param key The value that we want to search for. * @param start The starting index from which we will start Searching. - * @param end The ending index till which we will Search. + * @param end The ending index till which we will Search. * @return Returns the index of the Element if found. * Else returns -1. */ private > int ternarySearch(T[] arr, T key, int start, int end) { - if (start > end){ + if (start > end) { return -1; } /* First boundary: add 1/3 of length to start */ @@ -60,8 +54,7 @@ private > int ternarySearch(T[] arr, T key, int start, i if (key.compareTo(arr[mid1]) == 0) { return mid1; - } - else if (key.compareTo(arr[mid2]) == 0) { + } else if (key.compareTo(arr[mid2]) == 0) { return mid2; } diff --git a/Sorts/BinaryTreeSort.java b/Sorts/BinaryTreeSort.java index 26942754f910..b4403b6e0816 100644 --- a/Sorts/BinaryTreeSort.java +++ b/Sorts/BinaryTreeSort.java @@ -4,93 +4,89 @@ import static Sorts.SortUtils.print; /** - * * @author Podshivalov Nikita (https://github.com/nikitap492) - * * @see SortAlgorithm - * */ public class BinaryTreeSort implements SortAlgorithm { - interface TreeVisitor> { - void visit(Node node); - } + interface TreeVisitor> { + void visit(Node node); + } - private static class SortVisitor> implements TreeVisitor { + private static class SortVisitor> implements TreeVisitor { - private final T[] array; - private int counter; + private final T[] array; + private int counter; - SortVisitor(T[] array) { - this.array = array; - } + SortVisitor(T[] array) { + this.array = array; + } - @Override - public void visit(Node node) { - array[counter++] = node.value; - } - } + @Override + public void visit(Node node) { + array[counter++] = node.value; + } + } - private static class Node>{ - private T value; - private Node left; - private Node right; + private static class Node> { + private T value; + private Node left; + private Node right; - Node(T value) { - this.value = value; - } + Node(T value) { + this.value = value; + } - void insert(Node node) { - if (less(node.value, value)){ - if (left != null) left.insert(node); - else left = node; - } - else { - if (right != null) right.insert(node); - else right = node; - } - } + void insert(Node node) { + if (less(node.value, value)) { + if (left != null) left.insert(node); + else left = node; + } else { + if (right != null) right.insert(node); + else right = node; + } + } - void traverse(TreeVisitor visitor) { - if ( left != null) - left.traverse(visitor); + void traverse(TreeVisitor visitor) { + if (left != null) + left.traverse(visitor); - visitor.visit(this); + visitor.visit(this); - if ( right != null ) - right.traverse(visitor ); - } + if (right != null) + right.traverse(visitor); + } - } + } - @Override - public > T[] sort(T[] array) { + @Override + public > T[] sort(T[] array) { - Node root = new Node<>(array[0]); - for (int i = 1; i < array.length; i++) { - root.insert(new Node<>(array[i])); - } + Node root = new Node<>(array[0]); + for (int i = 1; i < array.length; i++) { + root.insert(new Node<>(array[i])); + } - root.traverse(new SortVisitor<>(array)); + root.traverse(new SortVisitor<>(array)); - return array; - } + return array; + } - public static void main(String args[]) { + public static void main(String args[]) { - Integer[] intArray = {12, 40, 9, 3, 19, 74, 7, 31, 23, 54, 26, 81, 12}; - BinaryTreeSort treeSort = new BinaryTreeSort(); - Integer[] sorted = treeSort.sort(intArray); - print(sorted); + Integer[] intArray = {12, 40, 9, 3, 19, 74, 7, 31, 23, 54, 26, 81, 12}; + BinaryTreeSort treeSort = new BinaryTreeSort(); + Integer[] sorted = treeSort.sort(intArray); + print(sorted); - Double[] decimalArray = {8.2, 1.5, 3.14159265, 9.3, 5.1, 4.8, 2.6}; - print(treeSort.sort(decimalArray)); + Double[] decimalArray = {8.2, 1.5, 3.14159265, 9.3, 5.1, 4.8, 2.6}; + print(treeSort.sort(decimalArray)); - String[] stringArray = {"c", "a", "e", "b","d", "dd","da","zz", "AA", "aa","aB","Hb", "Z"}; - print(treeSort.sort(stringArray)); - } + String[] stringArray = {"c", "a", "e", "b", "d", "dd", "da", "zz", "AA", "aa", "aB", "Hb", "Z"}; + print(treeSort.sort(stringArray)); + } } diff --git a/Sorts/BogoSort.java b/Sorts/BogoSort.java index f3f923d32edf..299c6b90ec5d 100644 --- a/Sorts/BogoSort.java +++ b/Sorts/BogoSort.java @@ -4,26 +4,23 @@ /** - * * @author Podshivalov Nikita (https://github.com/nikitap492) - * * @see SortAlgorithm - * */ public class BogoSort implements SortAlgorithm { private static final Random random = new Random(); - private static > boolean isSorted(T array[]){ - for(int i = 0; i> boolean isSorted(T array[]) { + for (int i = 0; i < array.length - 1; i++) { + if (SortUtils.less(array[i + 1], array[i])) return false; } return true; } // Randomly shuffles the array - private static void nextPermutation(T array[]){ + private static void nextPermutation(T array[]) { int length = array.length; for (int i = 0; i < array.length; i++) { @@ -33,7 +30,7 @@ private static void nextPermutation(T array[]){ } public > T[] sort(T array[]) { - while(!isSorted(array)){ + while (!isSorted(array)) { nextPermutation(array); } return array; @@ -50,7 +47,7 @@ public static void main(String[] args) { SortUtils.print(bogoSort.sort(integers)); // String Input - String[] strings = {"c", "a", "e", "b","d"}; + String[] strings = {"c", "a", "e", "b", "d"}; SortUtils.print(bogoSort.sort(strings)); } diff --git a/Sorts/BubbleSort.java b/Sorts/BubbleSort.java index 274979a456b1..edad5e354c08 100644 --- a/Sorts/BubbleSort.java +++ b/Sorts/BubbleSort.java @@ -3,10 +3,8 @@ import static Sorts.SortUtils.*; /** - * * @author Varun Upadhyay (https://github.com/varunu28) * @author Podshivalov Nikita (https://github.com/nikitap492) - * * @see SortAlgorithm */ @@ -15,17 +13,17 @@ class BubbleSort implements SortAlgorithm { * This method implements the Generic Bubble Sort * * @param array The array to be sorted - * Sorts the array in increasing order + * Sorts the array in increasing order **/ @Override - public > T[] sort(T array[]) { + public > T[] sort(T array[]) { int last = array.length; //Sorting boolean swap; do { swap = false; - for (int count = 0; count < last-1; count++) { + for (int count = 0; count < last - 1; count++) { if (less(array[count], array[count + 1])) { swap = swap(array, count, count + 1); } @@ -47,7 +45,7 @@ public static void main(String[] args) { print(integers); // String Input - String[] strings = {"c", "a", "e", "b","d"}; + String[] strings = {"c", "a", "e", "b", "d"}; //Output => e, d, c, b, a print(bubbleSort.sort(strings)); diff --git a/Sorts/CocktailShakerSort.java b/Sorts/CocktailShakerSort.java index 5f4b89942645..c3b5df999d23 100644 --- a/Sorts/CocktailShakerSort.java +++ b/Sorts/CocktailShakerSort.java @@ -1,20 +1,18 @@ package Sorts; /** - * * @author Mateus Bizzo (https://github.com/MattBizzo) * @author Podshivalov Nikita (https://github.com/nikitap492) - * */ class CocktailShakerSort implements SortAlgorithm { - /** - * This method implements the Generic Cocktail Shaker Sort - * - * @param array The array to be sorted - * Sorts the array in increasing order - **/ + /** + * This method implements the Generic Cocktail Shaker Sort + * + * @param array The array to be sorted + * Sorts the array in increasing order + **/ @Override public > T[] sort(T[] array) { @@ -47,19 +45,19 @@ public > T[] sort(T[] array) { } - // Driver Program - public static void main(String[] args) { - // Integer Input - Integer[] integers = { 4, 23, 6, 78, 1, 54, 231, 9, 12 }; - CocktailShakerSort shakerSort = new CocktailShakerSort(); + // Driver Program + public static void main(String[] args) { + // Integer Input + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + CocktailShakerSort shakerSort = new CocktailShakerSort(); - // Output => 1 4 6 9 12 23 54 78 231 - SortUtils.print(shakerSort.sort(integers)); + // Output => 1 4 6 9 12 23 54 78 231 + SortUtils.print(shakerSort.sort(integers)); - // String Input - String[] strings = { "c", "a", "e", "b", "d" }; - SortUtils.print(shakerSort.sort(strings)); - } + // String Input + String[] strings = {"c", "a", "e", "b", "d"}; + SortUtils.print(shakerSort.sort(strings)); + } } diff --git a/Sorts/CombSort.java b/Sorts/CombSort.java index 83e24edaec9c..23e38323ef36 100644 --- a/Sorts/CombSort.java +++ b/Sorts/CombSort.java @@ -4,57 +4,54 @@ /** - * * Comb Sort algorithm implementation - * + *

* Best-case performance O(n * log(n)) * Worst-case performance O(n ^ 2) * Worst-case space complexity O(1) - * + *

* Comb sort improves on bubble sort. * - * - * @see BubbleSort - * @see SortAlgorithm - * * @author Sandeep Roy (https://github.com/sandeeproy99) * @author Podshivalov Nikita (https://github.com/nikitap492) - * + * @see BubbleSort + * @see SortAlgorithm */ class CombSort implements SortAlgorithm { // To find gap between elements private int nextGap(int gap) { // Shrink gap by Shrink factor - gap = ( gap * 10 ) / 13; - return ( gap < 1 ) ? 1 : gap; + gap = (gap * 10) / 13; + return (gap < 1) ? 1 : gap; } /** * Function to sort arr[] using Comb + * * @param arr - an array should be sorted * @return sorted array */ @Override public > T[] sort(T arr[]) { - int size = arr.length; + int size = arr.length; // initialize gap int gap = size; - + // Initialize swapped as true to make sure that loop runs boolean swapped = true; - + // Keep running while gap is more than 1 and last iteration caused a swap while (gap != 1 || swapped) { // Find next gap gap = nextGap(gap); - + // Initialize swapped as false so that we can check if swap happened or not swapped = false; - + // Compare all elements with current gap - for (int i = 0; i < size - gap ; i++) { + for (int i = 0; i < size - gap; i++) { if (less(arr[i + gap], arr[i])) { // Swap arr[i] and arr[i+gap] swapped = swap(arr, i, i + gap); @@ -63,13 +60,13 @@ public > T[] sort(T arr[]) { } return arr; } - + // Driver method public static void main(String args[]) { CombSort ob = new CombSort(); - Integer arr[] = {8, 4, 1, 56, 3, -44, -1 , 0 , 36, 34, 8, 12 , -66, - 78, 23, -6, 28, 0}; + Integer arr[] = {8, 4, 1, 56, 3, -44, -1, 0, 36, 34, 8, 12, -66, -78, 23, -6, 28, 0}; ob.sort(arr); - + System.out.println("sorted array"); print(arr); } diff --git a/Sorts/CountingSort.java b/Sorts/CountingSort.java index 7243a27a9dd4..7f10da6cca76 100644 --- a/Sorts/CountingSort.java +++ b/Sorts/CountingSort.java @@ -9,15 +9,11 @@ import static Sorts.SortUtils.print; /** - * * @author Youssef Ali (https://github.com/youssefAli11997) * @author Podshivalov Nikita (https://github.com/nikitap492) - * */ class CountingSort implements SortAlgorithm { - - @Override public > T[] sort(T[] unsorted) { return sort(Arrays.asList(unsorted)).toArray(unsorted); @@ -27,9 +23,9 @@ public > T[] sort(T[] unsorted) { * This method implements the Generic Counting Sort * * @param list The list to be sorted - * - * Sorts the list in increasing order - * The method uses list elements as keys in the frequency map + *

+ * Sorts the list in increasing order + * The method uses list elements as keys in the frequency map **/ @Override public > List sort(List list) { @@ -42,8 +38,8 @@ public > List sort(List list) { list.forEach(v -> frequency.put(v, frequency.getOrDefault(v, 0) + 1)); // Filling the sortedArray - for(Map.Entry element : frequency.entrySet()) { - for(int j=0; j element : frequency.entrySet()) { + for (int j = 0; j < element.getValue(); j++) { sortedArray.add(element.getKey()); } } @@ -57,10 +53,9 @@ public > List sort(List list) { * The same as method {@link CountingSort#sort(List)} } but this method uses stream API * * @param list The list to be sorted - * **/ private static > List streamSort(List list) { - return list.stream() + return list.stream() .collect(toMap(k -> k, v -> 1, (v1, v2) -> v1 + v2, TreeMap::new)) .entrySet() .stream() @@ -86,7 +81,7 @@ public static void main(String[] args) { System.out.println("\n------------------------------\n"); // String Input - List unsortedStrings = Stream.of("c", "a", "e", "b","d", "a", "f", "g", "c").collect(toList()); + List unsortedStrings = Stream.of("c", "a", "e", "b", "d", "a", "f", "g", "c").collect(toList()); System.out.println("Before Sorting:"); print(unsortedStrings); diff --git a/Sorts/CycleSort.java b/Sorts/CycleSort.java index eba541a061e8..837c3c320454 100644 --- a/Sorts/CycleSort.java +++ b/Sorts/CycleSort.java @@ -4,11 +4,10 @@ import static Sorts.SortUtils.print; /** - * @author Podshivalov Nikita (https://github.com/nikitap492) + * @author Podshivalov Nikita (https://github.com/nikitap492) */ class CycleSort implements SortAlgorithm { - @Override public > T[] sort(T[] arr) { int n = arr.length; @@ -24,7 +23,7 @@ public > T[] sort(T[] arr) { if (less(arr[i], item)) pos++; // If item is already in correct position - if (pos == j) continue; + if (pos == j) continue; // ignore all duplicate elements while (item.compareTo(arr[pos]) == 0) @@ -41,7 +40,7 @@ public > T[] sort(T[] arr) { // Find position where we put the element for (int i = j + 1; i < n; i++) - if (less(arr[i], item)){ + if (less(arr[i], item)) { pos += 1; } @@ -60,7 +59,7 @@ public > T[] sort(T[] arr) { return arr; } - private > T replace(T[] arr, int pos, T item){ + private > T replace(T[] arr, int pos, T item) { T temp = item; item = arr[pos]; arr[pos] = temp; @@ -68,9 +67,8 @@ private > T replace(T[] arr, int pos, T item){ } - public static void main(String[] args) { - Integer arr[] = { 4, 23, 6, 78, 1, 26, 11, 23 , 0, -6, 3, 54, 231, 9, 12 }; + Integer arr[] = {4, 23, 6, 78, 1, 26, 11, 23, 0, -6, 3, 54, 231, 9, 12}; CycleSort cycleSort = new CycleSort(); cycleSort.sort(arr); diff --git a/Sorts/GnomeSort.java b/Sorts/GnomeSort.java index ef5dca141436..8d5f62d438d2 100644 --- a/Sorts/GnomeSort.java +++ b/Sorts/GnomeSort.java @@ -7,19 +7,20 @@ * * @author Podshivalov Nikita (https://github.com/nikitap492) * @since 2018-04-10 - * **/ -public class GnomeSort implements SortAlgorithm{ +public class GnomeSort implements SortAlgorithm { @Override public > T[] sort(T[] arr) { int i = 1; int j = 2; - while (i < arr.length){ - if ( less(arr[i - 1], arr[i]) ) i = j++; + while (i < arr.length) { + if (less(arr[i - 1], arr[i])) i = j++; else { swap(arr, i - 1, i); - if (--i == 0){ i = j++; } + if (--i == 0) { + i = j++; + } } } @@ -27,8 +28,8 @@ public > T[] sort(T[] arr) { } public static void main(String[] args) { - Integer[] integers = { 4, 23, 6, 78, 1, 26, 11, 23 , 0, -6, 3, 54, 231, 9, 12 }; - String[] strings = {"c", "a", "e", "b","d", "dd","da","zz", "AA", "aa","aB","Hb", "Z"}; + Integer[] integers = {4, 23, 6, 78, 1, 26, 11, 23, 0, -6, 3, 54, 231, 9, 12}; + String[] strings = {"c", "a", "e", "b", "d", "dd", "da", "zz", "AA", "aa", "aB", "Hb", "Z"}; GnomeSort gnomeSort = new GnomeSort(); gnomeSort.sort(integers); diff --git a/Sorts/HeapSort.java b/Sorts/HeapSort.java index 9be2c2e70345..77e63c7085b8 100644 --- a/Sorts/HeapSort.java +++ b/Sorts/HeapSort.java @@ -11,13 +11,14 @@ * Implements MinHeap * * @author Podshivalov Nikita (https://github.com/nikitap492) - * */ public class HeapSort implements SortAlgorithm { private static class Heap> { - /** Array to store heap */ + /** + * Array to store heap + */ private T[] heap; /** @@ -90,14 +91,11 @@ private T getRoot(int size) { } - - - } @Override public > T[] sort(T[] unsorted) { - return sort(Arrays.asList(unsorted)).toArray(unsorted); + return sort(Arrays.asList(unsorted)).toArray(unsorted); } @Override @@ -108,7 +106,7 @@ public > List sort(List unsorted) { Heap heap = new Heap<>(unsorted.toArray((T[]) new Comparable[unsorted.size()])); heap.makeMinHeap(0); // make min heap using index 0 as root. - List sorted = new ArrayList<>(size); + List sorted = new ArrayList<>(size); while (size > 0) { T min = heap.getRoot(--size); sorted.add(min); diff --git a/Sorts/InsertionSort.java b/Sorts/InsertionSort.java index f29c3537ce0d..9a7169f77dfa 100644 --- a/Sorts/InsertionSort.java +++ b/Sorts/InsertionSort.java @@ -4,10 +4,8 @@ import static Sorts.SortUtils.print; /** - * * @author Varun Upadhyay (https://github.com/varunu28) * @author Podshivalov Nikita (https://github.com/nikitap492) - * */ class InsertionSort implements SortAlgorithm { @@ -17,7 +15,6 @@ class InsertionSort implements SortAlgorithm { * Sorts the array in increasing order * * @param array The array to be sorted - * **/ @Override @@ -51,7 +48,7 @@ public static void main(String[] args) { print(integers); // String Input - String[] strings = {"c", "a", "e", "b","d"}; + String[] strings = {"c", "a", "e", "b", "d"}; sort.sort(strings); diff --git a/Sorts/MergeSort.java b/Sorts/MergeSort.java index e14334b163bf..90392293b58f 100644 --- a/Sorts/MergeSort.java +++ b/Sorts/MergeSort.java @@ -5,22 +5,18 @@ /** * This method implements the Generic Merge Sort * - * * @author Varun Upadhyay (https://github.com/varunu28) * @author Podshivalov Nikita (https://github.com/nikitap492) - * - * * @see SortAlgorithm - * */ class MergeSort implements SortAlgorithm { - /** * This method implements the Generic Merge Sort + * * @param unsorted the array which should be sorted - * @param Comparable class + * @param Comparable class * @return sorted array */ @Override @@ -32,18 +28,17 @@ public > T[] sort(T[] unsorted) { } /** - * - * @param arr The array to be sorted - * @param temp The copy of the actual array - * @param left The first index of the array + * @param arr The array to be sorted + * @param temp The copy of the actual array + * @param left The first index of the array * @param right The last index of the array - * Recursively sorts the array in increasing order + * Recursively sorts the array in increasing order **/ - private static > void doSort(T[] arr, T[] temp, int left, int right) { + private static > void doSort(T[] arr, T[] temp, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; doSort(arr, temp, left, mid); - doSort(arr, temp,mid + 1, right); + doSort(arr, temp, mid + 1, right); merge(arr, temp, left, mid, right); } @@ -52,27 +47,26 @@ private static > void doSort(T[] arr, T[] temp, int lef /** * This method implements the merge step of the merge sort * - * @param arr The array to be sorted - * @param temp The copy of the actual array - * @param left The first index of the array - * @param mid The middle index of the array + * @param arr The array to be sorted + * @param temp The copy of the actual array + * @param left The first index of the array + * @param mid The middle index of the array * @param right The last index of the array - * merges two parts of an array in increasing order + * merges two parts of an array in increasing order **/ private static > void merge(T[] arr, T[] temp, int left, int mid, int right) { System.arraycopy(arr, left, temp, left, right - left + 1); - int i= left; + int i = left; int j = mid + 1; int k = left; while (i <= mid && j <= right) { if (temp[i].compareTo(temp[j]) <= 0) { arr[k++] = temp[i++]; - } - else { + } else { arr[k++] = temp[j++]; } } @@ -81,9 +75,9 @@ private static > void merge(T[] arr, T[] temp, int left, arr[k++] = temp[i++]; } - while (j <= right) { - arr[k++] = temp[j++]; - } + while (j <= right) { + arr[k++] = temp[j++]; + } } // Driver program @@ -98,7 +92,7 @@ public static void main(String[] args) { print(arr); // String Inpu - String[] stringArray = {"c", "a", "e", "b","d"}; + String[] stringArray = {"c", "a", "e", "b", "d"}; mergeSort.sort(stringArray); //Output => a b c d e print(stringArray); diff --git a/Sorts/PancakeSort.java b/Sorts/PancakeSort.java index 395b75f93a75..330e9d0f6a60 100644 --- a/Sorts/PancakeSort.java +++ b/Sorts/PancakeSort.java @@ -7,20 +7,18 @@ * * @author Podshivalov Nikita (https://github.com/nikitap492) * @since 2018-04-10 - * **/ public class PancakeSort implements SortAlgorithm { - @Override - public > T[] sort(T[] array){ + public > T[] sort(T[] array) { int size = array.length; for (int i = 0; i < size; i++) { T max = array[0]; int index = 0; for (int j = 0; j < size - i; j++) { - if ( less(max, array[j]) ) { + if (less(max, array[j])) { max = array[j]; index = j; } @@ -33,7 +31,7 @@ public > T[] sort(T[] array){ public static void main(String[] args) { - Integer[] arr = {10, 9, 8, 7, 6, 15, 14, 7, 4, 3, 8, 6, 3, 1 ,2, -2, -5, -8, -3, -1, 13, 12, 11, 5, 4, 3, 2, 1}; + Integer[] arr = {10, 9, 8, 7, 6, 15, 14, 7, 4, 3, 8, 6, 3, 1, 2, -2, -5, -8, -3, -1, 13, 12, 11, 5, 4, 3, 2, 1}; PancakeSort pancakeSort = new PancakeSort(); System.out.println("After sorting:"); pancakeSort.sort(arr); @@ -41,7 +39,4 @@ public static void main(String[] args) { } - - - } diff --git a/Sorts/QuickSort.java b/Sorts/QuickSort.java index 36b042c13821..373da49462b8 100644 --- a/Sorts/QuickSort.java +++ b/Sorts/QuickSort.java @@ -3,23 +3,17 @@ import static Sorts.SortUtils.*; /** - * * @author Varun Upadhyay (https://github.com/varunu28) * @author Podshivalov Nikita (https://github.com/nikitap492) - * - * * @see SortAlgorithm - * */ class QuickSort implements SortAlgorithm { - - /** * This method implements the Generic Quick Sort * * @param array The array to be sorted - * Sorts the array in increasing order + * Sorts the array in increasing order **/ @Override @@ -32,17 +26,16 @@ public > T[] sort(T[] array) { /** * The sorting process * - * @param left The first index of an array + * @param left The first index of an array * @param right The last index of an array * @param array The array to be sorted - * **/ private static > void doSort(T[] array, int left, int right) { if (left < right) { int pivot = partition(array, left, right); doSort(array, left, pivot - 1); - doSort(array, pivot , right); + doSort(array, pivot, right); } } @@ -50,23 +43,23 @@ private static > void doSort(T[] array, int left, int ri * This method finds the partition index for an array * * @param array The array to be sorted - * @param left The first index of an array + * @param left The first index of an array * @param right The last index of an array - * Finds the partition index of an array + * Finds the partition index of an array **/ private static > int partition(T[] array, int left, int right) { int mid = (left + right) / 2; T pivot = array[mid]; - while(left <= right) { - while(less(array[left], pivot)){ + while (left <= right) { + while (less(array[left], pivot)) { ++left; } - while(less(pivot, array[right])) { + while (less(pivot, array[right])) { --right; } - if(left <= right) { + if (left <= right) { swap(array, left, right); ++left; --right; @@ -79,15 +72,15 @@ private static > int partition(T[] array, int left, int public static void main(String[] args) { // For integer input - Integer[] array = {3, 4, 1, 32, 0, 1, 5, 12 ,2, 5 ,7 ,8 ,9, 2, 44, 111, 5}; + Integer[] array = {3, 4, 1, 32, 0, 1, 5, 12, 2, 5, 7, 8, 9, 2, 44, 111, 5}; QuickSort quickSort = new QuickSort(); - // quickSort.sort(array); + // quickSort.sort(array); //Output => 0 1 1 2 2 3 4 5 5 5 7 8 9 12 32 44 111 print(array); - String[] stringArray = {"c", "a", "e", "b", "d"}; + String[] stringArray = {"c", "a", "e", "b", "d"}; quickSort.sort(stringArray); //Output => a b c d e diff --git a/Sorts/RadixSort.java b/Sorts/RadixSort.java index 9fd1ab7b8356..a207f6bbdda3 100644 --- a/Sorts/RadixSort.java +++ b/Sorts/RadixSort.java @@ -1,10 +1,9 @@ package Sorts; import java.util.Arrays; - + class RadixSort { - - + private static int getMax(int arr[], int n) { int mx = arr[0]; for (int i = 1; i < n; i++) @@ -13,49 +12,44 @@ private static int getMax(int arr[], int n) { return mx; } - private static void countSort(int arr[], int n, int exp) - { + private static void countSort(int arr[], int n, int exp) { int output[] = new int[n]; int i; int count[] = new int[10]; - Arrays.fill(count,0); - + Arrays.fill(count, 0); + for (i = 0; i < n; i++) - count[ (arr[i]/exp)%10 ]++; - + count[(arr[i] / exp) % 10]++; + for (i = 1; i < 10; i++) count[i] += count[i - 1]; - - for (i = n - 1; i >= 0; i--) - { - output[count[ (arr[i]/exp)%10 ] - 1] = arr[i]; - count[ (arr[i]/exp)%10 ]--; + + for (i = n - 1; i >= 0; i--) { + output[count[(arr[i] / exp) % 10] - 1] = arr[i]; + count[(arr[i] / exp) % 10]--; } - + for (i = 0; i < n; i++) arr[i] = output[i]; } - + private static void radixsort(int arr[], int n) { int m = getMax(arr, n); - - for (int exp = 1; m/exp > 0; exp *= 10) + + for (int exp = 1; m / exp > 0; exp *= 10) countSort(arr, n, exp); } - - static void print(int arr[], int n) - { - for (int i=0; i> T[] sort(T[] arr) { @@ -24,7 +21,7 @@ public > T[] sort(T[] arr) { // Initial index of min int min = i; - for (int j = i +1 ; j < n; j++) { + for (int j = i + 1; j < n; j++) { if (SortUtils.less(arr[j], arr[min])) { min = j; } @@ -32,7 +29,7 @@ public > T[] sort(T[] arr) { // Swapping if index of min is changed if (min != i) { - SortUtils.swap(arr, i , min); + SortUtils.swap(arr, i, min); } } @@ -52,7 +49,7 @@ public static void main(String[] args) { SortUtils.print(sorted); // String Input - String[] strings = {"c", "a", "e", "b","d"}; + String[] strings = {"c", "a", "e", "b", "d"}; String[] sortedStrings = selectionSort.sort(strings); //Output => a b c d e diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java index 31c2c6077897..49be29b9d200 100644 --- a/Sorts/ShellSort.java +++ b/Sorts/ShellSort.java @@ -6,45 +6,44 @@ /** * @author dpunosevac * @author Podshivalov Nikita (https://github.com/nikitap492) - * * @see SortAlgorithm - * */ public class ShellSort implements SortAlgorithm { - /** - * This method implements Generic Shell Sort. - * @param array The array to be sorted - */ - @Override - public > T[] sort(T[] array) { - int N = array.length; - int h = 1; - - while (h < N/3) { - h = 3 * h + 1; - } + /** + * This method implements Generic Shell Sort. + * + * @param array The array to be sorted + */ + @Override + public > T[] sort(T[] array) { + int N = array.length; + int h = 1; + + while (h < N / 3) { + h = 3 * h + 1; + } - while (h >= 1) { - for (int i = h; i < N; i++) { - for (int j = i; j >= h && less(array[j], array[j-h]); j -= h) { - swap(array, j, j - h); + while (h >= 1) { + for (int i = h; i < N; i++) { + for (int j = i; j >= h && less(array[j], array[j - h]); j -= h) { + swap(array, j, j - h); + } } + + h /= 3; } - h /= 3; + return array; } - return array; - } + public static void main(String[] args) { + Integer[] toSort = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - public static void main(String[] args) { - Integer[] toSort = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + ShellSort sort = new ShellSort(); + Integer[] sorted = sort.sort(toSort); - ShellSort sort = new ShellSort(); - Integer[] sorted = sort.sort(toSort); + print(sorted); - print(sorted); - - } + } } diff --git a/Sorts/SortAlgorithm.java b/Sorts/SortAlgorithm.java index e6004156559b..d4d0309da27d 100644 --- a/Sorts/SortAlgorithm.java +++ b/Sorts/SortAlgorithm.java @@ -4,15 +4,15 @@ import java.util.List; /** - * The common interface of most sorting algorithms + * The common interface of most sorting algorithms * * @author Podshivalov Nikita (https://github.com/nikitap492) - * **/ public interface SortAlgorithm { /** * Main method arrays sorting algorithms + * * @param unsorted - an array should be sorted * @return a sorted array */ @@ -20,11 +20,12 @@ public interface SortAlgorithm { /** * Auxiliary method for algorithms what wanted to work with lists from JCF + * * @param unsorted - a list should be sorted * @return a sorted list */ @SuppressWarnings("unchecked") - default > List sort(List unsorted){ + default > List sort(List unsorted) { return Arrays.asList(sort(unsorted.toArray((T[]) new Comparable[unsorted.size()]))); } diff --git a/Sorts/SortUtils.java b/Sorts/SortUtils.java index b3392352becd..d5f592ad984d 100644 --- a/Sorts/SortUtils.java +++ b/Sorts/SortUtils.java @@ -7,18 +7,17 @@ * The class contains util methods * * @author Podshivalov Nikita (https://github.com/nikitap492) - * **/ final class SortUtils { - /** * Helper method for swapping places in array + * * @param array The array which elements we want to swap - * @param idx index of the first element - * @param idy index of the second element + * @param idx index of the first element + * @param idy index of the second element */ - static boolean swap(T[] array, int idx, int idy){ + static boolean swap(T[] array, int idx, int idy) { T swap = array[idx]; array[idx] = array[idy]; array[idy] = swap; @@ -28,6 +27,7 @@ static boolean swap(T[] array, int idx, int idy){ /** * This method checks if first element is less then the other element + * * @param v first element * @param w second element * @return true if the first element is less then the second element @@ -39,9 +39,10 @@ static > boolean less(T v, T w) { /** * Just print list + * * @param toPrint - a list which should be printed */ - static void print(List toPrint){ + static void print(List toPrint) { toPrint.stream() .map(Object::toString) .map(str -> str + " ") @@ -53,23 +54,24 @@ static void print(List toPrint){ /** * Prints an array + * * @param toPrint - the array which should be printed */ - static void print(Object[] toPrint){ + static void print(Object[] toPrint) { System.out.println(Arrays.toString(toPrint)); } - /** * Swaps all position from {@param left} to @{@param right} for {@param array} + * * @param array is an array - * @param left is a left flip border of the array + * @param left is a left flip border of the array * @param right is a right flip border of the array */ static > void flip(T[] array, int left, int right) { while (left <= right) { - swap(array, left++ , right--); + swap(array, left++, right--); } } } diff --git a/divideconquer/ClosestPair.java b/divideconquer/ClosestPair.java index 93a5d164dd88..375d3e1a949c 100644 --- a/divideconquer/ClosestPair.java +++ b/divideconquer/ClosestPair.java @@ -1,348 +1,372 @@ package divideconquer; /** + * For a set of points in a coordinates system (10000 maximum), + * ClosestPair class calculates the two closest points. + * + * @author: anonymous + * @author: Marisa Afuera + */ + +public final class ClosestPair { + + + /** + * Number of points + */ + int numberPoints = 0; + /** + * Input data, maximum 10000. + */ + private Location[] array; + /** + * Minimum point coordinate. + */ + Location point1 = null; + /** + * Minimum point coordinate. + */ + Location point2 = null; + /** + * Minimum point length. + */ + private static double minNum = Double.MAX_VALUE; + /** + * secondCount + */ + private static int secondCount = 0; + + /** + * Constructor. + */ + ClosestPair(int points) { + numberPoints = points; + array = new Location[numberPoints]; + } + + /** + * Location class is an auxiliary type to keep points coordinates. + */ + + public static class Location { + + double x = 0; + double y = 0; + + /** + * @param xpar (IN Parameter) x coordinate
+ * @param ypar (IN Parameter) y coordinate
+ */ + + Location(final double xpar, final double ypar) { //Save x, y coordinates + this.x = xpar; + this.y = ypar; + } + + } + + public Location[] createLocation(int numberValues) { + return new Location[numberValues]; + + } + + public Location buildLocation(double x, double y) { + return new Location(x, y); + } + + + /** + * xPartition function: arrange x-axis. + * + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ * @return pivot index + */ + + public int xPartition( + final Location[] a, final int first, final int last) { + + Location pivot = a[last]; // pivot + int pIndex = last; + int i = first - 1; + Location temp; // Temporarily store value for position transformation + for (int j = first; j <= last - 1; j++) { + if (a[j].x <= pivot.x) { // Less than or less than pivot + i++; + temp = a[i]; // array[i] <-> array[j] + a[i] = a[j]; + a[j] = temp; + } + } + i++; + temp = a[i]; // array[pivot] <-> array[i] + a[i] = a[pIndex]; + a[pIndex] = temp; + return i; // pivot index + } + + /** + * yPartition function: arrange y-axis. + * + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ * @return pivot index + */ + + public int yPartition( + final Location[] a, final int first, final int last) { + + Location pivot = a[last]; // pivot + int pIndex = last; + int i = first - 1; + Location temp; // Temporarily store value for position transformation + for (int j = first; j <= last - 1; j++) { + if (a[j].y <= pivot.y) { // Less than or less than pivot + i++; + temp = a[i]; // array[i] <-> array[j] + a[i] = a[j]; + a[j] = temp; + } + } + i++; + temp = a[i]; // array[pivot] <-> array[i] + a[i] = a[pIndex]; + a[pIndex] = temp; + return i; // pivot index + } + + /** + * xQuickSort function: //x-axis Quick Sorting. + * + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ */ + + public void xQuickSort( + final Location[] a, final int first, final int last) { + + if (first < last) { + int q = xPartition(a, first, last); // pivot + xQuickSort(a, first, q - 1); // Left + xQuickSort(a, q + 1, last); // Right + } + } + + /** + * yQuickSort function: //y-axis Quick Sorting. + * + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ */ + + public void yQuickSort( + final Location[] a, final int first, final int last) { + + if (first < last) { + int q = yPartition(a, first, last); // pivot + yQuickSort(a, first, q - 1); // Left + yQuickSort(a, q + 1, last); // Right + } + } + + /** + * closestPair function: find closest pair. + * + * @param a (IN Parameter) array stored before divide
+ * @param indexNum (IN Parameter) number coordinates divideArray
+ * @return minimum distance
+ */ + + public double closestPair(final Location[] a, final int indexNum) { + + Location[] divideArray = new Location[indexNum]; + System.arraycopy(a, 0, divideArray, 0, indexNum); // Copy previous array + int totalNum = indexNum; // number of coordinates in the divideArray + int divideX = indexNum / 2; // Intermediate value for divide + Location[] leftArray = new Location[divideX]; //divide - left array + //divide-right array + Location[] rightArray = new Location[totalNum - divideX]; + if (indexNum <= 3) { // If the number of coordinates is 3 or less + return bruteForce(divideArray); + } + //divide-left array + System.arraycopy(divideArray, 0, leftArray, 0, divideX); + //divide-right array + System.arraycopy( + divideArray, divideX, rightArray, 0, totalNum - divideX); + + double minLeftArea = 0; //Minimum length of left array + double minRightArea = 0; //Minimum length of right array + double minValue = 0; //Minimum lengt + + minLeftArea = closestPair(leftArray, divideX); // recursive closestPair + minRightArea = closestPair(rightArray, totalNum - divideX); + // window size (= minimum length) + minValue = Math.min(minLeftArea, minRightArea); + + // Create window. Set the size for creating a window + // and creating a new array for the coordinates in the window + for (int i = 0; i < totalNum; i++) { + double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); + if (xGap < minValue) { + secondCount++; // size of the array + } else { + if (divideArray[i].x > divideArray[divideX].x) { + break; + } + } + } + // new array for coordinates in window + Location[] firstWindow = new Location[secondCount]; + int k = 0; + for (int i = 0; i < totalNum; i++) { + double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); + if (xGap < minValue) { // if it's inside a window + firstWindow[k] = divideArray[i]; // put in an array + k++; + } else { + if (divideArray[i].x > divideArray[divideX].x) { + break; + } + } + } + yQuickSort(firstWindow, 0, secondCount - 1); // Sort by y coordinates + /* Coordinates in Window */ + double length = 0; + // size comparison within window + for (int i = 0; i < secondCount - 1; i++) { + for (int j = (i + 1); j < secondCount; j++) { + double xGap = Math.abs(firstWindow[i].x - firstWindow[j].x); + double yGap = Math.abs(firstWindow[i].y - firstWindow[j].y); + if (yGap < minValue) { + length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // If measured distance is less than current min distance + if (length < minValue) { + // Change minimum distance to current distance + minValue = length; + // Conditional for registering final coordinate + if (length < minNum) { + minNum = length; + point1 = firstWindow[i]; + point2 = firstWindow[j]; + } + } + } else { + break; + } + } + } + secondCount = 0; + return minValue; + } + + /** + * bruteForce function: When the number of coordinates is less than 3. + * + * @param arrayParam (IN Parameter) array stored before divide
+ * @return
+ */ + + public double bruteForce(final Location[] arrayParam) { + + double minValue = Double.MAX_VALUE; // minimum distance + double length = 0; + double xGap = 0; // Difference between x coordinates + double yGap = 0; // Difference between y coordinates + double result = 0; -* For a set of points in a coordinates system (10000 maximum), -* ClosestPair class calculates the two closest points. - -* @author: anonymous -* @author: Marisa Afuera -*/ - - public final class ClosestPair { - - - /** Number of points */ - int numberPoints = 0; - /** Input data, maximum 10000. */ - private Location[] array; - /** Minimum point coordinate. */ - Location point1 = null; - /** Minimum point coordinate. */ - Location point2 = null; - /** Minimum point length. */ - private static double minNum = Double.MAX_VALUE; - /** secondCount */ - private static int secondCount = 0; - - /** - * Constructor. - */ - ClosestPair(int points) { - numberPoints = points; - array = new Location[numberPoints]; - } - - /** - Location class is an auxiliary type to keep points coordinates. - */ - - public static class Location { - - double x = 0; - double y = 0; - - /** - * @param xpar (IN Parameter) x coordinate
- * @param ypar (IN Parameter) y coordinate
- */ - - Location(final double xpar, final double ypar) { //Save x, y coordinates - this.x = xpar; - this.y = ypar; - } - - } - - public Location[] createLocation(int numberValues) { - return new Location[numberValues]; - - } - - public Location buildLocation(double x, double y){ - return new Location(x,y); - } - - - /** xPartition function: arrange x-axis. - * @param a (IN Parameter) array of points
- * @param first (IN Parameter) first point
- * @param last (IN Parameter) last point
- * @return pivot index - */ - - public int xPartition( - final Location[] a, final int first, final int last) { - - Location pivot = a[last]; // pivot - int pIndex = last; - int i = first - 1; - Location temp; // Temporarily store value for position transformation - for (int j = first; j <= last - 1; j++) { - if (a[j].x <= pivot.x) { // Less than or less than pivot - i++; - temp = a[i]; // array[i] <-> array[j] - a[i] = a[j]; - a[j] = temp; - } - } - i++; - temp = a[i]; // array[pivot] <-> array[i] - a[i] = a[pIndex]; - a[pIndex] = temp; - return i; // pivot index - } - - /** yPartition function: arrange y-axis. - * @param a (IN Parameter) array of points
- * @param first (IN Parameter) first point
- * @param last (IN Parameter) last point
- * @return pivot index - */ - - public int yPartition( - final Location[] a, final int first, final int last) { - - Location pivot = a[last]; // pivot - int pIndex = last; - int i = first - 1; - Location temp; // Temporarily store value for position transformation - for (int j = first; j <= last - 1; j++) { - if (a[j].y <= pivot.y) { // Less than or less than pivot - i++; - temp = a[i]; // array[i] <-> array[j] - a[i] = a[j]; - a[j] = temp; - } - } - i++; - temp = a[i]; // array[pivot] <-> array[i] - a[i] = a[pIndex]; - a[pIndex] = temp; - return i; // pivot index - } - - /** xQuickSort function: //x-axis Quick Sorting. - * @param a (IN Parameter) array of points
- * @param first (IN Parameter) first point
- * @param last (IN Parameter) last point
- */ - - public void xQuickSort( - final Location[] a, final int first, final int last) { - - if (first < last) { - int q = xPartition(a, first, last); // pivot - xQuickSort(a, first, q - 1); // Left - xQuickSort(a, q + 1, last); // Right - } - } - - /** yQuickSort function: //y-axis Quick Sorting. - * @param a (IN Parameter) array of points
- * @param first (IN Parameter) first point
- * @param last (IN Parameter) last point
- */ - - public void yQuickSort( - final Location[] a, final int first, final int last) { - - if (first < last) { - int q = yPartition(a, first, last); // pivot - yQuickSort(a, first, q - 1); // Left - yQuickSort(a, q + 1, last); // Right - } - } - - /** closestPair function: find closest pair. - * @param a (IN Parameter) array stored before divide
- * @param indexNum (IN Parameter) number coordinates divideArray
- * @return minimum distance
- */ - - public double closestPair(final Location[] a, final int indexNum) { - - Location[] divideArray = new Location[indexNum]; - System.arraycopy(a, 0, divideArray, 0, indexNum); // Copy previous array - int totalNum = indexNum; // number of coordinates in the divideArray - int divideX = indexNum / 2; // Intermediate value for divide - Location[] leftArray = new Location[divideX]; //divide - left array - //divide-right array - Location[] rightArray = new Location[totalNum - divideX]; - if (indexNum <= 3) { // If the number of coordinates is 3 or less - return bruteForce(divideArray); - } - //divide-left array - System.arraycopy(divideArray, 0, leftArray, 0, divideX); - //divide-right array - System.arraycopy( - divideArray, divideX, rightArray, 0, totalNum - divideX); - - double minLeftArea = 0; //Minimum length of left array - double minRightArea = 0; //Minimum length of right array - double minValue = 0; //Minimum lengt - - minLeftArea = closestPair(leftArray, divideX); // recursive closestPair - minRightArea = closestPair(rightArray, totalNum - divideX); - // window size (= minimum length) - minValue = Math.min(minLeftArea, minRightArea); - - // Create window. Set the size for creating a window - // and creating a new array for the coordinates in the window - for (int i = 0; i < totalNum; i++) { - double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); - if (xGap < minValue) { - secondCount++; // size of the array - } else { - if (divideArray[i].x > divideArray[divideX].x) { - break; - } - } - } - // new array for coordinates in window - Location[] firstWindow = new Location[secondCount]; - int k = 0; - for (int i = 0; i < totalNum; i++) { - double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); - if (xGap < minValue) { // if it's inside a window - firstWindow[k] = divideArray[i]; // put in an array - k++; - } else { - if (divideArray[i].x > divideArray[divideX].x) { - break; - } - } - } - yQuickSort(firstWindow, 0, secondCount - 1); // Sort by y coordinates - /* Coordinates in Window */ - double length = 0; - // size comparison within window - for (int i = 0; i < secondCount - 1; i++) { - for (int j = (i + 1); j < secondCount; j++) { - double xGap = Math.abs(firstWindow[i].x - firstWindow[j].x); - double yGap = Math.abs(firstWindow[i].y - firstWindow[j].y); - if (yGap < minValue) { - length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); - // If measured distance is less than current min distance - if (length < minValue) { - // Change minimum distance to current distance - minValue = length; - // Conditional for registering final coordinate - if (length < minNum) { - minNum = length; - point1 = firstWindow[i]; - point2 = firstWindow[j]; - } - } - } - else { - break; - } - } - } - secondCount = 0; - return minValue; - } - - /** bruteForce function: When the number of coordinates is less than 3. - * @param arrayParam (IN Parameter) array stored before divide
- * @return
- */ - - public double bruteForce(final Location[] arrayParam) { - - double minValue = Double.MAX_VALUE; // minimum distance - double length = 0; - double xGap = 0; // Difference between x coordinates - double yGap = 0; // Difference between y coordinates - double result = 0; - if (arrayParam.length == 2) { - // Difference between x coordinates + // Difference between x coordinates xGap = (arrayParam[0].x - arrayParam[1].x); // Difference between y coordinates - yGap = (arrayParam[0].y - arrayParam[1].y); - // distance between coordinates - length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); - // Conditional statement for registering final coordinate - if (length < minNum) { - minNum = length; - - } - point1 = arrayParam[0]; - point2 = arrayParam[1]; - result = length; + yGap = (arrayParam[0].y - arrayParam[1].y); + // distance between coordinates + length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // Conditional statement for registering final coordinate + if (length < minNum) { + minNum = length; + + } + point1 = arrayParam[0]; + point2 = arrayParam[1]; + result = length; + } + if (arrayParam.length == 3) { + for (int i = 0; i < arrayParam.length - 1; i++) { + for (int j = (i + 1); j < arrayParam.length; j++) { + // Difference between x coordinates + xGap = (arrayParam[i].x - arrayParam[j].x); + // Difference between y coordinates + yGap = (arrayParam[i].y - arrayParam[j].y); + // distance between coordinates + length = + Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // If measured distance is less than current min distance + if (length < minValue) { + // Change minimum distance to current distance + minValue = length; + if (length < minNum) { + // Registering final coordinate + minNum = length; + point1 = arrayParam[i]; + point2 = arrayParam[j]; + } + } + } + } + result = minValue; + } - if (arrayParam.length == 3) { - for (int i = 0; i < arrayParam.length - 1; i++) { - for (int j = (i + 1); j < arrayParam.length; j++) { - // Difference between x coordinates - xGap = (arrayParam[i].x - arrayParam[j].x); - // Difference between y coordinates - yGap = (arrayParam[i].y - arrayParam[j].y); - // distance between coordinates - length = - Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); - // If measured distance is less than current min distance - if (length < minValue) { - // Change minimum distance to current distance - minValue = length; - if (length < minNum) { - // Registering final coordinate - minNum = length; - point1 = arrayParam[i]; - point2 = arrayParam[j]; - } - } - } - } - result = minValue; - - } - return result; // If only one point returns 0. - } - - /** main function: execute class. - * @param args (IN Parameter)
- * @throws IOException If an input or output + return result; // If only one point returns 0. + } + + /** + * main function: execute class. + * + * @param args (IN Parameter)
+ * @throws IOException If an input or output * exception occurred - */ - - public static void main(final String[] args) { - - //Input data consists of one x-coordinate and one y-coordinate - - ClosestPair cp = new ClosestPair(12); - cp.array[0]=cp.buildLocation(2,3); - cp.array[1]=cp.buildLocation(2,16); - cp.array[2]=cp.buildLocation(3,9); - cp.array[3]=cp.buildLocation(6,3); - cp.array[4]=cp.buildLocation(7,7); - cp.array[5]=cp.buildLocation(19,4); - cp.array[6]=cp.buildLocation(10,11); - cp.array[7]=cp.buildLocation(15,2); - cp.array[8]=cp.buildLocation(15,19); - cp.array[9]=cp.buildLocation(16,11); - cp.array[10]=cp.buildLocation(17,13); - cp.array[11]=cp.buildLocation(9,12); - - System.out.println("Input data"); - System.out.println("Number of points: "+ cp.array.length); - for (int i=0;i getPoints() { * @param list, the initial list of points * @return leftSkyLine, the combination of first half's and second half's skyline * @see Point - * @see produceFinalSkyLine */ public ArrayList produceSubSkyLines(ArrayList list) { @@ -72,7 +73,7 @@ public ArrayList produceSubSkyLines(ArrayList list) { } } ArrayList leftSubSkyLine = produceSubSkyLines(leftHalf); - ArrayList rightSubSkyLine= produceSubSkyLines(rightHalf); + ArrayList rightSubSkyLine = produceSubSkyLines(rightHalf); // skyline is produced return produceFinalSkyLine(leftSubSkyLine, rightSubSkyLine); diff --git a/out/production/github-repo/.gitignore b/out/production/github-repo/.gitignore new file mode 100644 index 000000000000..bf2ba9450292 --- /dev/null +++ b/out/production/github-repo/.gitignore @@ -0,0 +1,5 @@ +/bin/ +.idea/* +.classpath* +.project* +*.iml diff --git a/out/production/github-repo/BellmanFord$Edge.class b/out/production/github-repo/BellmanFord$Edge.class new file mode 100644 index 0000000000000000000000000000000000000000..db5a9fa02abc8d2e4bdca1d283fb1ea3c4f3bab9 GIT binary patch literal 547 zcmY+A%TB^T7=_Q2LIui25EKMOMT0dF7wj}HB$6~Cy3nv6puv(-l5%n5OSvE>E_?tV z%6O)_fW`Um^ZhgP{qy++poOzIVyGlwpsJz+We%0888|j@A|Mu&O)aTcf!O@Toz<@d zQr$bp^Cr^oOoQPy8#k`+&Tj?sjg5|N+vhz2y*(W|0-3JsI}eLV-wB>&-(w}$oeree zlYy)9|Dvw8@X-Bm#1Yf>eJ5ypayD~V&8_q6YJ}^Br25oAAn`O^1OunzDt>nDnwMj_ zlqO81Or%jav4yyagfdCQ4V-R{hisPAsir6WQS-4sb_R2SNJG6TxrRoKzh>}Lb&6P8 zD01it2eMhUn7N?R$k1mQy+K2izHD8rAgm8)R%L~VRb4^13i=AscXl;w(-yB7= literal 0 HcmV?d00001 diff --git a/out/production/github-repo/BellmanFord.class b/out/production/github-repo/BellmanFord.class new file mode 100644 index 0000000000000000000000000000000000000000..ff44335db2dbf47abb7a8cc4194de9934fdddeb3 GIT binary patch literal 3763 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 ayS7|~ifa$AQPCQ~I`$#Te0=|t!2bX`+SVZe literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/AnyBaseToAnyBase.class b/out/production/github-repo/Conversions/AnyBaseToAnyBase.class new file mode 100644 index 0000000000000000000000000000000000000000..692426540f0ec5935599277c2b393a6e80b06d73 GIT binary patch literal 3410 zcmaJ^T~Hg>75*0etPl&n1`8XEu&_xgurW5aDvF9u-?(waqD!`fm+rG=O@ zb<@;Io5XdSw5b~>Z5rGeUh>f70W)>S)0sZCuYKrSrf;3*t#6$^n0|LxU}4h^==w0OqB_3L=LE72ggbgvlWCD9Di=#3GjD=#>Dj%gM47ud4V?5RKCC zHGEf&Zb1 z>Y5e!&zhELcPa2hTP75Edvh5>!LC8mGKLrDXN>%~K9i-UdN7yPvlDvWl=Gs}YtNYl z1&xD@wq)cBCWE$jTgyFq!5GgK2c6t?UNvnps?|Rx;uo+WE(DSp*q-KWz3d&^gnv!kC(z<0C zdHR*j9G9Ylh>h8L`r44b;G9jx85Uc`8>||EThg;;=6o(M4<^s?bgqe(Nv3P^ljf(F z8O=Dh6^`pUbJnz(U)dB_Dl^V(YrCL3A2bX0_B8wT!rYi)GtJuV=r1p9R-m=yR7LZ% zCCT;9>3KbE^Qc{&Dh5b71?4ia4mZ2#PA5sUlL>_~k%m4_pTYhunw;_x+!- z6hs~$eP>eh+?$!0lJ!S5T)>!$pK5py?{CAdSa=mb)9`bApy3y|L+WbyB|g+}7k3mu z!$-KS;bZ(t!QLmEuxHWCW{kXwUu*aTztQk1R^;fG9NkkO9y^T8Ts6`xa*4{N$ad9o z!8YbueV0jQ&h1=U8u~o>ysyZ+Cl=&g;317l9Y=Xf*jtV@P9}6KQ7iB*NF#dfKxgMx zvyAIp-V@!C*{WPkNPpgeygOBAw=C}r_mB=hyYqQ{nH^k_&MhpDT)Ds-jO-3Xr+O2K z7TMKqX3ovF)pgv9Tv{|nuE-f7X6gfB0*Ur1}OK47b!zxkg`?`QSKGPl>5X8Wt|wM ztQRj)?iUv*8^jo8Sd3FPiX`O$F+mv-7b%;>CCY;$MR`a}CWnrA_OD~l@B@TW_fZ@7 zdSbqiukGOqYU{jhA>YY$>|MjYi#L7B>c&4?*H9Pt)%hOA{GON^QbYa~9H{e!)RVD5 zoi`M4jO*{h=lSfWN{7FDKVx;g4zrH3qG0v@#sYmwfd4^=|Ajt0;``2vekFp0(uM)0 zo#Rs&++xXBWMUsH?W4smoW~0Y$Z|N0;D#JY9xB{-8VL-rz+WPT7di4U#wd3hVg|!B zmA&g~MvA=Qt{eCYe#sCOqt5?Jq{@F#_Xw4oDoVq@$;xv1K6DA8e8PR10q%IZs`tlT z9EeN93gWFHbq!$&py>V-d-<5W2O)xTo|%q$S0RVTGBIy>|6IsB-Q|Gvr|^du2sbQ< z;0huS(8xL*;B+04H8j=n=4e{O!MJ}FjgJ?_>FM{^aOm-BxFOrMy0Kp8{~c3vTe*vH zfj=Dh`+*nJG^*L$^~fL!gH1QbQe0yhBxp;7Xc*`{Uu`v4Ohd6>(4xX29rPV0_B-QXqx lr%CA`pR#)oZ>d-rSLNSSDO)NHYKbEdt(TYeCB`j7>c76j`qKaa literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/AnyBaseToDecimal.class b/out/production/github-repo/Conversions/AnyBaseToDecimal.class new file mode 100644 index 0000000000000000000000000000000000000000..cf44dd28cfba812eb10a111b33fdfd79eeb75787 GIT binary patch literal 1970 zcmaJ?T~`}b6x}zOWWqRn1yVjkQ>`|nEvZ(iKuLwrDjG^H6s1+mB$*@w$xKWp*uMKO zeCqPSmp;@!1eUDj4{-VB5Ac8ZAnrR!11(w3T5~_nId|WE_C0szkAHvr9l(cpqG19l z6}MD;(t{-|Yw#nj!G{&u+}3ahpGwDPDpoaUNQLmZ?7xsrCWJNF-_@{=dm((OVI246 z!VL|Zcp#fCY5OXKujOQ0#X}X31cEm$+j3I^{`mBkfRc9dra*tjvdz1VO4h7x8rd=} z;f#|r%3DUwlJmAvaZ6TRU@DV#?0vIVw;a2kT(X}o8+CKjSut}~#V9WjwPIMdz`6LN z%&xI-B+G_fOm4U}%PuZ>yBf73afZ6M1$^0>z-VisczjvVqTOdSOjb(FwlM&1-} zxnY$luRx!N7_;n{)H0@H7kjcP3j|_TeV&$zgtK)x;5iJoPd&zb8)nQYFd&I*I=)Ag zLg=WWuERw`$H$oS@EK|4W36h_u@4G3`F{n)!#kn7p4~NbE^Ft+)H&(b0$b(wy6I`% zHFvR?d7LwY+r@A3Y$&zd}gMzw0%d4a3lmY=EO_5pL@WV}m}pSVM=^Gdpw z#uVbz&b$a!$)hYK?6xx%3FOL-yoW(vl%iW=CUKchFvr`l#FP{=;5|^il36cEpe~da zaDgAN34SdB1>}t=+bPbH>;?Nk;sD}T4tzMzHs~395#v~I1rXwG&U)|;E;33k{u2Sh z0p%n3wvXW7ehK9Ofdd3Hmzz-6WOIm6>Lq%Pplu)Et+3uiZ?uWNa6boE_%<=n#Nerj zaNE&}h#q376Ggn?6OL0*xpzOp7{mzM^BCqgK7t}=dl>b&CtCdQF5Y8o7!Pp?app6E z2be~}%XSTyafN@3tBjE1%rHk@JC0j2{du; z5F-=M5DbsLh;|GSrL>cZC=;bw<;TGBFUNl|k+B!V@q79v_`?Ae4Ny~+ifUvyOpX`G z?;@F9C$~A;Zjo7xktuTMC#Uy04{*MM4;Uez6^}g&g|XM^^$~B8KSi05hIxF%k%C!9 zM&LgtNKnNMAs=A)A67+={Ft_J=|H>m%-$Ffx^W1KB`J{c5ItY_=Yz6Hp)6LVDu`M@sXw^>AS6OGsVPdVsWBSkwybnypcSU80{Tj{?gkR8U)6s> zJ#P3NfwA&R6mEI#jvs}c;-hdoju;lWt?Bw9`-L~XL7h5hv%Se~><7h4-3>#p&Bdt>TcV_r8pAq+XmVuTtE-aD!Ak7bKd!p1M5@Fn z%@9aeqHeqHJ@M5^ga4GyDRCCk7!VjvgdYE##GHj9ZYaV{3%79FqQiG291C}GPhj+< z>jg4LCqJ)kdiD4}sIuLOJxWd~gY4dsepD=lt!_+*Jh#a+bA=Nd$~qZ(pW{-bz*(9{wWDHg_;#OWU;d9!1(lCQXh)0>|7v{J96ymiv%O zs0Jl;IT5Aq8DM6?CVGytrzp2TWS(*#Q1CKF@tEDG7{e=^#yjNDz*)2sHt?c%2(sjX zyFQRR#xpZ;$B literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/BinaryToDecimal.class b/out/production/github-repo/Conversions/BinaryToDecimal.class new file mode 100644 index 0000000000000000000000000000000000000000..f223193910bf55c93c607542ac1c48b13f8ca516 GIT binary patch literal 1294 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/DecimalToBinary.class b/out/production/github-repo/Conversions/DecimalToBinary.class new file mode 100644 index 0000000000000000000000000000000000000000..40f3e38bbe40f09b95dc88d65313bddc88048853 GIT binary patch literal 1766 zcmb_c+j84f6kW%XBU^}Eob-|#HM9XIp;6kVx7ZDB;uZ`}Tk14znlgjzh(tw}JhI#i z4?Ho$8}EDp&-B5`&?z6lZ}hDnL0L!g)P{PPGJ|Kdb+pgfYp=EU_W9$_-+l+Mg!?+u zSk!R@r=&Tp;Y^zDvpQ6qldJP7T+nb)$1?KLSs1u{f|2~`xP%oApXeCEVhWe#`-(KH z(yYmdVhUF^ToV{5IGz)(2q?MPO#yYy-?0UT%8qAWZ`G@IuwhkQdNO6dX1SYI;K=We zQw{f=roeQ0&G#PKLDTWQrdhOWPTg`h{8h)Zf+u-`)-A^qIGo!qKd>HJrfYe-W+e<9 zZ#N$$wSry3jP}`PR83-gA+asDn@2$G@G0>jw5al_2_zk_(FzF_Cu)U`YgTHO=h*>y zyjuya+PCXgBcjiO3XD{p@R8HBdx7HAm_m`-hwbsldQdj2k#E%}IwZp zTBu>&z;)a(a1&o@xMiS%4S^%wb8&H3TaLS92SiB6y?703;5Ig;xntliwhY|Ewt%@B z7vt@zO?K<{M&tiRyz-r()YjIWcv#+!Fz>t>a*^k4L$Nc<{aNq{JbzZl^J-QqI zBhFr~Sez{~t<`AQ9*6T}pR}DEJxn@HVxFm7>EE_fp&z%ELz#Q?pd=azc4dY8rQSrA z7fCw0B2-$=Fa##JGWiyKC+GGde&r&8N!o$Psbh+3BR+s>yvMIJju9*lzQ}JGtQ{b6 z0Hqr~2!-wp?I@wfdSEoXj}Iak{)IX)FL@?O-&aaOx%3R`)>9<+F|e#Yg_cPv&yj9J zzca43@lJl?XB?YIHdZF5$6!qTkPtr}VDP8CuL~1NH~-747YuoZp{;!kXGYq{OtvxF z##kGNBsnG0Hpg2Mq@+^OFf~n6(Q#_}h}7muuE4J~%-}vgjEFCh+&oKmf zA%Shi%us}iE#$aL5N{o`n4@Q&Cq|HX#ek#`><~T%6Q$*?@iw{-_tC9>-$%Fl-G9=( kKyD^^E>ia?k~>WeXUKMmy3bPgdFsCK|LYc5h)QPu1>1FkTL1t6 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/DecimalToHexaDecimal.class b/out/production/github-repo/Conversions/DecimalToHexaDecimal.class new file mode 100644 index 0000000000000000000000000000000000000000..ea3454bb513eabfffca343deed8545d28a3aa897 GIT binary patch literal 1742 zcmah~ZBrXn6n-`d*-co;CA?T@s1dadPy#Kqr3I=GN{I%jg`g4NmT*ZHlU*j+)WQcp z`7itd`l+LJ2At~j2lzw$5zc6R?h;-q%=lr?z31F>&V8P9&Q1RK=fz6^6Zk5ME==mU ztK(i20Zb_|9YGK?YIk3W_o8?ovk}Z8V_-gt2UrNkCtkda;vp8Jbj>QSNdq6K^+N+W z9ZMRz>h``|+0Hs%)>*VF+jD!KtZUG+8rm|hQ}-;#Tem6=86*-z!y8Vcx+!Zb+jF*8 z&pNZmG3q#^!6-L#C_SbjQkGBW?Gk-81U51n!qc{6d-pX2Q-kXoLK$~UYKY}*M=txB z*R0J7E%BUNv?}XX%~pET81l+C6Ak2u?1`+^Z2}yfmqoj3Ro2`^`P6DEQ$(^Qi@r@m zcPcxW+p(TlqZP|3jjnn%+bPjS+u>&u3SBis33aYvSGHtLL+?5N<`Ki%Rz0iu^^&#g zqheP`qiWfXhMv^Mxwt8xrd2Buc;^MjBww*NYgTQK*qeak=d+N|bg|N`U3ArL)QWP! zR+Z{)a(=An@F-{|D}GyGWmaXR2h~{tSHfsD<&S{BNLCYs$vb#kG4dRr-%I1zNdMr7c$^nYhrI(XV$txf2Gi9qb%j1?*HlxlB&pqllM?H1n z6r9O@?AhwMIrke`%UE?5_^iWT-IG;LjN9NH-A8S*-O)#!D38(7s&YU&eYCHeS)g6z zRNEg(E|(dUQNMgfPf%yy{Ya>3V&q%YM!9NSTZRsy{p_b2pbY!QAl~NQJaWK0c$Zp4 zO#v+`_!(h@xK93tKtULX2<3)_aex+~&m_J_qEE!Wy+53Ij&T3P0rWn7f9kuys~=wd zIeY-RMSfyz5bC}G7?dWWXoEmINyU)h?kYMkM12gMK9(Wgm!O^^wIFT%800RXFwn1u zYZPe=<2n(J_!$F#qf+u`{Hv%jQ7>9qcELt;^Y%2+K4c42O%)H`jT^YhwG}fy zdQK>LjPrjYz=(0OpCC#Dw@%u%@5cd~Lj2xR2#T?MAtY|(3oYViz7Q7U`GPJc@&!ZO z$`?df+@{pU9ZEw?QbxpG%BYy7Y!!2qrpQpXiFwL)@qjWW7V^I!toZN;n(}BCbZWP$ H1#stIeoS`- literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/DecimalToOctal.class b/out/production/github-repo/Conversions/DecimalToOctal.class new file mode 100644 index 0000000000000000000000000000000000000000..b60fca823a2388a3d2de0661e432e2c208f6812c GIT binary patch literal 1290 zcmaJ=%Tg0T6g{0}G9ioz2@xNlh=>7|_>2k&DiMeVK?5ko#%5??bTSi@3F_V|ckcZH z*RlwfRQUmZgWsZ_4pf1PPF3IT`#SgB+dbcYeEACC3ZBG~!k~#v6E5Il93foNr^_*1 ziQ_7=+Hx&=tCzw2;<%0*CWhj$Fc`zI-bb{!sl}+y7}FWIOx!kcM<6=lcup`X5Ki|m z2t>yH6(w-6;CSjmt+cEvb8^|GB~kEg=`P5MqxBtQBv^B*0-c3%-&kdG-*BH`Jw~4%kd$@0*fN2vCEX-h5pySVu@6;T3 zMO9d*F`jPqvgWKyS9!sZg@<^gMbW|><}EB}xW}5*(SHw^Ty|^BEI(Iv@SCalrW&Xc z2dM8LwLL(`&*Z&wE#M_6S>gx}r}uT}+X?$M0`4Zx^4@k6la1QM+hZ0m$~uTyJFtJ= zxaq0aL0(7j)$!(Ab~~7s!5YnF{}o}NOg9Zjj|+o*W=8O`t4o@NcY+|iFezcXtK*5W1(BwFe?m@?{Ut)s1u1aXp@ zT^O3(C2|7V(2N9SlD2koN}-#L^|G}AvKymyl8hz!DtdJ%Q)D|p{RAT;)Sq!IJ=~kI zgj38EjGMw~dP7_j=%Wmy1y68>Cxf--k>)9ierBZ*`botkrirtHa};2Tz&ScYIR6X8 CAQ=t- literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/HexToOct.class b/out/production/github-repo/Conversions/HexToOct.class new file mode 100644 index 0000000000000000000000000000000000000000..08a385eb909a6b7a5dca22569c6c0adc0685640b GIT binary patch literal 1843 zcmaJ?OHBOIc4{%S$Y8yVpeTCb+Sgi%|K*2g53e86f`tY$38!|Q( zLyA;*Y*1tBHp`-HSarLguNb1R?I-mb6~$2zLtH{=YgM#V z+jkZgb4$xBOislY_)^7J*ioTjS49EiGKwm6d@Z5FE$y3uWbCOZ!4Q!9DxQGl=wCJ+ z-A*v1U@zK|Xm&X;9hpo%e!OXxn^wZ*zoF6wMUN9(X*Cfw9#5-Og; z7NVxY5ioUF5;`xM4`z7^yuQ1y7o4|L%?aTUIo6|URkw3mjpgc0rq1_^Z7u8Oo>Owi znEehEN}9buJkfuSmTZ_s{cxRix_laQO>+-a#c24GOG~Mxx8r|Xb94@hM~q3d8Pu>c zt7f(CkejYm*vg*POrJ4`0rFaP5;#5hkOO~uFyivyu{YGDQ58=AaaD*JH1$JA+)bva zu_$Iy!pKF}>RgRlJtO59OY%SFpktj>UUu1(O$_jZ((itQd>{bglvlaW@GbG}Pai@0 zjSCO1Q3hP4f&|xU(}580aMvcriW+hFCA|ZDPli4DbOYY|-g$2}&Xw;+B+~H){L{YS zsIP&*v_BMzm7@Ng`Db3~=YRf;{mNrrH`H}P0%7hV2%?jpz$j%G*>*Ej4~DrPC;J4w zvJBUc5QcCaK3apgfh7E-ID`~eUiwTT%`*ah4DWHp%Szh_tsab0-ww}fs4_B=^fxnU z6E~!l&rgK%(PhNPJo`EpXTffDBI6*=?LnK?>XATmm9d!%gTrH!^h~Dj~yeNrTzsX+ehdOM;qv3 zf4Up!X`uJC?^huc?KTTK!zRqK>{&KxfpuEMJeFPRQ_YCDML*DE5O>@%U!&)YOMQ^q TS(m!X1m}2C3|*Gq9=!iAqv3q^ literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/HexaDecimalToBinary.class b/out/production/github-repo/Conversions/HexaDecimalToBinary.class new file mode 100644 index 0000000000000000000000000000000000000000..ad102cb2e26ed33ba35b5eb3945cd48c6541d3d4 GIT binary patch literal 1724 zcmah~YjYD-7=BJJyPI@d(rp8!7HC0f+R!VtT1t_o6$qv+y0scn=_Wm-TQ<9ybi=?m z$KjXo#jom&g^`gT;NS3*{sPBw#OEZbOi5>)$-HOJdwZVuve{q%`S~S)IRr_Z#q|Vw zu$)8=D@v>;@F8yKxS528>q^`*kWbR*wz_+TDT6qxy; ztna%7n7Sn&IjgelRvm9M$hp2#f4nH5mzyr3Ksr;{a~?WVp5s@h?6B_ol|==u`Hd=L z6;y|vR>n82TB(^*pr;&EYn}|{s#|eG(ztkB;^T4&m-(261+pu4=#(FTj&WkGyYdlp)1C}Ud#&DtIugvET&6-rz zo4A0tO`OB9j(aAyK}`u|9Xlo@?hBlHvq!mx>+Q(8i3)bfa(HRj#5871xY*P2z=Vga zi7Hszx&Ij#*JWBD^(F$&5ls8>ekeJ&XwXnA z*z$IRsXJW1ka?t2<&tVnttR~)fr(?VJ0aRFXP^-Vhh+LQosRVAYZiMHk(*Le_#S7X zdD5?hYI2#eJVy8upXCe6mqG0S&k^1tIFA^gxf+!3P_sat;Mq0)3}QTG{DjC4O~;Fr zNg9DDL*f|ali6}b24lPlHJ5gpZ|M`GZZexnJx6qD=s9BRKO+7DTJah5>;VibK`}mY zfF#cYbREEajbt^W6VTB`lx|FrzCs*tWo;ueKQ7V6vT2=USrK}l#}su@YPqd#KHt!y z{+~vP+`TlEGM?g0n~QaV_=*rY6rM!HcdvfSeoxmZRLLzOy`-V~*2^CCH;D|>9w*>z z6O@Vnqcn=kO-gf&P9X9(;^HrcCh#ui+iZSk6*|q;RM#&^6{A+KU5r_lU5s0Oc2TqX z?V@g_?V@3ww2LXtIz_2l1C)k!nlfPxQYNjp?7|E5u%Sb1+4YH+^ReiBJRMKRo+3Sw zj?Z4vE}hm6aOO#zMg5_g+p1}hp95f!-;5#L=2mQz-hG}PcjBZEOO`(ev4G5$Sc^;bX;xzmM8_6=uZsL_ZmGS_~2hN0%S)3 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/HexaDecimalToDecimal.class b/out/production/github-repo/Conversions/HexaDecimalToDecimal.class new file mode 100644 index 0000000000000000000000000000000000000000..84bcf2666c67585f75ad424fe805a626166bcc94 GIT binary patch literal 1560 zcmah}-Bue_6#h;oFkv#3G=Tzbkbpl;LTR9-&_ba?0E$;;Qj{SIIb(!en0LbzpM z9t%p`R^pBli#nG2a2Lx4bgU@tUI-r=SjC#MWDQ)xx{eJ40}5hOogXQ2Ux_W{__2-$ zI&uQNcWuY^Rs^(UYEK}TtrexfK+bmLcC&gU-CgUbLQ6DPD_E61%eB?LV+?v_yCE={ z%hsG@={D?|)5zSHC)TdChW3?*~VtYa%vv7AyS@42>9T1ssR zh$4ULv`MKfPgLeJj-*|*OSZ?{+Obs;=+Apr;hTq6-6y8wAuFj`wj*#U`Q&W8U#aDm z7#}<5S-@as>tM^NH$7g8vT#sqdj2KYC|HDzwLzPnUCHEWaiq%{jeM=?7UZU_IyQP< zBd)7jOpIWZ7&EgsZqD7BU$}i|c4l=gyS}lxN$MuHv18&9J~8nr@+NliSm2`HgzkJg z_Dp<+&lTFfi7)U(;L3*MNjIS~le8K^qCLgLVnWB4CceT`69)=^90`Hpw_Cf`v@1pF zl3XXwb`qT#E+$MIg5(czWTK!jig+rJ_`l%`MBb#?IeI1wY-*ROJ$-?&S9@HqOE+sZ z*uKGJ>g?b+_=$ZUo-Fd!kc(N)GPT>t6wK8-WI=uC=~<1GC@owvC8WH#_tKAMYAIpvF&<@+w~gNYdVqz-yQ~QbPPe-hD`8s>A+!0tD%@@B;e& zbA(ROxBVPOG~9wY-9mqE>Q`J?rsV|&_D>OsUTh&6Zz0ygU<*TUnsu4&0(%-}Q(~-Z rgj~nSYo0t*1Jms^xW;;v-#D)OOvmV-@tKDCHiKCb61YL10B-&T_<37{ literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Conversions/OctalToDecimal.class b/out/production/github-repo/Conversions/OctalToDecimal.class new file mode 100644 index 0000000000000000000000000000000000000000..5ffc7dee2518c9215ead220e23029b23acb37342 GIT binary patch literal 1695 zcmZ`)?Q+vb6g_Llk)tTY<%j3;I3o4Ez2ttvt_xyz+C=G^|`fYl|0LDmg-UH`pvS+X@yOq zOrNqXkm%UliUYfm>y_%Z<@-)ZT;28C-AJXA{D!buTe6A$z+>eS+GU>F5_82g@DqNP!!HJYm3Y5NWD7YB zy9R7D3^;gdpowP$J5Fg#qdGZwl3HwcC#05LiAW=~0t*~Rm2n)4oExzNKEOGy#$XaG z4(<_bgtptSk=S{OdGHvYLf_ zb}7B-)-1a;KfXo+c70z!}s8%BTe7BYgN*l z1;e(@8atpk1)iy`mI!E@PQ6wzS1sAyf%c|dmrc@f0YhY_V;i69_zXJ&p~)LJZ%s|# zp1Cu-xRhI7S!FSk0$`Lk`?^%ODn+xV<8wTa%NIJn#6y8z4|tZKim!A$f|qbtM*(cl z;EL^@2Sh>4#Z{O(zD7w$84q>DaY;uK69N~vh&?m-xcP0}Iy5+GH*Ouw z#dTOH35@=~Tv+01Asf4Urfl39Q&Te>U&XXbZrPJA)eC zF?i!Z3QlpPqD~#}^L06OjCg&b+Zi);Se2mvc+uoLZktCuRy|n7#wC6i2Km(i{1g!d z$90%bY2K+TbR>@lmxJ!GO(%|I82_bS7VY=NY<>@mBsBdcvUwdM6qPucuBB$;M95H|M9lRaLm3 zX) z84rE{KZzf}v*Wul#4wH?vhV($*?snTH~a19m#+YxXgLXtJ5Vf>m*DgU%Zhzt#sh4dc&O`+ja}?9Z2m7jL*uW!3>*L6LZPw^H@jglXFN#7(K*9<%iS+E_ow6Q zv$Cyu&kSp=UU~WTUCLW4N|pB9gVCuv688)G%nI-(dv1s GKAK_FJMTDIZ!TvK3a)LQIc+lJlB>sy9vG(6KS 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Bags/Bag.class b/out/production/github-repo/DataStructures/Bags/Bag.class new file mode 100644 index 0000000000000000000000000000000000000000..3e1a024c14c74bd0080a3b96790a308c6fe0c0c0 GIT binary patch literal 3086 zcmai0TUQfT6#h;wOo#(2A}FH7Hf=)?BWP_ah!@lr8_*U6QQJC%F^(pam`qfZ-tYHk zU;9vBd}zCBuw|{TzICnskiPW~bhWkLnVEzcA$GAimwoo-JKx^>On(3O=U)Kq!`D&7 zaHbipn3ltgg0oSCFe`_1ayTEQ_`*88hS%lrhSa~PK#M}foPvxzJ`=&bob?DUH6x45 z3XCY)rTmJVugb%mT;=6pMo~af!8Iu^$xS%|OF>1!bpS zX6Yr(DwG656NP!5(o06EY#q<(dEK-GcBGGKmNsdXDjBO%(#xr%TGk%oQhi9EdD6(5 znmiNeeXR2ElEmOrUAlFb!)&AeiW#=E$1ViY;6>pp*s9_3&omkypfR~s$!In=Zn^Y4e*>m%cP}cu8wO( z7Xo4P7C~)(USM+~eMP&jrE;2?O`V#%qGzljc_~G&G1|6TK_F7d&D+G2&^k>_Mxwrv zP9m9tX=#SZ`>q*>*dj(fq3uqfie=F5e>CcmS>yRup`}bT2`RHVFp*n8X00=35*ZBWq81& z;$~`Owa6o}No3{uuNR#xR7x5Bgds~b!uHrL3qZv#^s9Ip&!|YEPoVp8eI&IPRNTUC z6^nRN#ZkP-Jg9gJ`&GP+cT~KKBLeY8PQ0xwoxLZ}*+7>)H=yDL9N=P5!TTycz=u>{ zDO)E2M=M5dUgyKmDmyh+xD+Gfv4b%cAK_zpspsYD6BVE0GXqpbS8hrrbaOvx&i$7K+V8c*nFuHjcOr2VAokx%VhL&IXY4f zKtnu34XJXV@U8JCa-nSLdA3}k!r+@7YK%haG+WqWvFKW!@S3z@Q8)Pn_IsbeTAzFP z^pzJ4yAxwxZXZ34SOrHU;J>iznh%6sKYl=@t0>{+`11JPO4rK%&?L_FPGcv(mND=t zLx6v5SgsTNhzHQifA%id3T5nPj=Q;=phTaNM?M>xv}VMee$JK!D936JOSD$i2l0OmVFHl(|6i7d!@ zw*)+%Tt;YCEFmn}p`h;pnr7r;*8?as$ytUBUG$OGg(h03h;$D&(tj68dXgmdGm<1P z=6H9pFb;+=%nO8>r-RH|z$SD>OX731M(SEJqfTxQQO1YK#r_RviM=OTMPz)}PiPjn zgElUr0)17iyYukR&^-_R9SjSG4P%7aJ;eMT#&(Q)fcDgZ_SAuP@m(MF0hL+~P^skr zm0HKBCDYc7z~2ZfINs^vK0)04IJmgS$hlo4%TQ;NlHMh>d`CNPDo=V+*|E+StbR57@Mfb{=kS>!_lWTy3dhYZYBpY~yBy z%ua{QU(r25n|>bOefS4geWHr(RqT*U>Ak-0an`b{oRS}8{{SW;D3bGQ{KZ>hkyz}Q z3MOzJXK({&v49M}qXpdN-(o!<6Kvs^k+ze(h;izJek`0~k%@XII+D|rNbXw^_y_#W o@Cxbw3*EGJIC>S6JPlxq!7Ek;DMhUcqJoN2K*4g65>OK_r^5k8hG{dMG4d<^0M8h$ z#0MXJF#1ErsOz*S;Dez__sqVnz4qSc%$J`ZKLO}R)v;;Ff{g0><-PxV)@d18J{K z$wIjY1H+uRfSJvQzOBX`-D~syVP4erEVLqSp&2a(?pU~s5rKwT-|+&+TZvbuK4>6q zVH9Hq#x2~#eFGB~Ch>q(EMzccVHz_QW;N17%n5Y-zZDG@7wA9G&i@%7>Ft8gq3Dh#>&tA)`e{&pZ*SZm$B>&LIfilAPR^z@ccQ$lPL?b|S0P`iz~P1H`&Q$qdL=C5yCgiGQQ zKS7#^CNzLL%BQHoGuob$%nK5c=!VTm#aM^Y%lxXXU=XVq!WwSFEfbFuqaOxN;|%Gw up$lix$qJ;o(@YoN8xgJffer)bcn!M0!_d=7&=EloPVi|mrGZ6`!~6{~JVHbO literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Buffers/CircularBuffer$TestWriteWorker.class b/out/production/github-repo/DataStructures/Buffers/CircularBuffer$TestWriteWorker.class new file mode 100644 index 0000000000000000000000000000000000000000..b9944a81af293a18fc62f2478825b5aec815db56 GIT binary patch literal 1402 zcma)6-BJ@t6#hCu2F77kK-^VVQE(;EHK-seE~4=-8c-o(?cPwGNs|l=lkB8N(Kpyv z@CEi}Z>SQaw8{tA*VqT}4RpWmWCg9gAXVw^^Y@)|`g}cqe|q-;z&M_|7{FLJF7%)u z7ad%3(TOo5jGJY`#brzy-4%1X>f#!vTpF&s_yyBOywOD<^K*?fFYrh=xKrM=pJJ-ivpebdPNEBF9wmCOV-LNF3EC8 zO<%F@%WzS~fsxzFPF)L{^e(BUeijE>J*&s7rcAF8MJmpRve{I0nA}?hBj4b#i89uci~K}&yiRyJ(? zoRNULP)}lC-3?5W{a@eWc{3>w$B+>ik!8Q4maDa3Wi?!j>W$yyrcR!}SbzCy?83!M z;}e%BuUz#oh{FO0?1XoX(8Krm!NU<8b#TYSUEK3<9|aE&@X$fg!z|`J{Ddx0m~0nU;u;$}7q@^sRPw5tif%RaDhA zd;JB{H&W}G#gRXwg$xyGpM$#DmN~0k5T#nIWJO?Kurniz^P9lwJ#`{*@P#2;scz`d zBD~3*&k&;PWuQXBcQr$$8b$M7T9Fn7}I2$ylaDwX~%I!|ZtoeJsJWathsC?;%Zs z4xm8mL)z!)QDmxF+Mn3;rmd5V&f=^sWVl_(IYxIAYstaSrpfb^Q^;YMyGzf0elSnL F{TE#yKd%4) literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Buffers/CircularBuffer.class b/out/production/github-repo/DataStructures/Buffers/CircularBuffer.class new file mode 100644 index 0000000000000000000000000000000000000000..06e219fd6056a332303b285f2d09385205002f13 GIT binary patch literal 2332 zcma)8O>@&$6g`rah{%fb#b;bXp%5GgFa?LUBv69+sA)oIVn_{bgCZ-Ah$E-6M3{Dl zcHey$ELe2YO&9G86%5YQZL4<2@?Ei8PAynOCcN9Kr>z3;&*qgccQYaShdezB@Ld&m`l%Y2)v&Z%_ONsj#tO|IcHtJY}xfJs~|00|mxHJ@jqonk%gtdX?r=63xUo)=V77sEG_l6^!jz6>{{1 zi7{kNOyHb?BOQ3fTFt3iwQ0W^u2WTQR3?r|rgw1EL=Ef2)H%~`gNgU?fkgLA)Uj@2 zLv|k9k#-dHcOu3lDVW&N(W9@ua)RJX87P?i&LhmXUuqK#;Wj{M;vv>vfi}1Nz_BT_ zkq%mU*?d3T2%JirF9nH=XeB{WN6(b9NR6((ievkZusiKluFG%Hd5W_I|-Nx*%X zm-ICsdY-(%ky5)Ff#ownSEJ@Q8-n159O!Yk5#ul~!b800x}ZvP`7|J%=B$dgqM7oF zW(tOLH+Ti%1jm!Kp7KIfIlq@}LdhncL6sqq-GWw5G|}}8-Pv>#`V%C#u&dle&)?bf zGZ@+QA6!fR!lMbC;y8*Pj=c=m!+!%QBr(kK2>O_I0679Zhat|u-Z&*r<6T-zjx#*3 z;4Gheq5Q`Ks*b!uQx%1`u+B1-U`?gdTIKN*=-Q9a5l9q(l)7f8PY)DKsDl3jT{8CK49aC?`RB#@Xtw7&Jod7138Aj@U4)ZBU zW^b8RGRuLart(eR-|=$)Vzx}DcAun=|J*KRm~8?^2;wkIa(I}{9b9P+s7yj*GNE#HALn?@3aEtNFx*7BEi64>-mt0;UpJ`gXiF5TQ~9m8xBM zt3&Y!bjBEu$mwVH5q5Bt-8;?9XV@sg_I8}7O;aAzxJ(o(cTAzcSx}PL7dS&L;|i|Q zCu01QvGDu?Nx5^;fY5Wg?+3mdm literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph$Vertex.class b/out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph$Vertex.class new file mode 100644 index 0000000000000000000000000000000000000000..6e2b80ef7b13e0d0423bb04efa00ede9cb08f50e GIT binary patch literal 1956 zcma)7T~k|C6kR6?34}|VVu*#J#+tVI074at5sG5^VcI~|P-uNSggbCCB+ShX)B5b6 z&_`eT!izJ7PVJ2P+^4?#PdXjz+V|chjnmF#GIyVI_Sqk6?S0P4^MC*N6Tlqq4nD}=VSqZJb6J$N{!bru@)gM>&fy+FC8w!Q~L-rt*xN+OuZycKcM>(E;M`r|z z#jn(+Nkz2MXxUZsh9&J8_RiUi+yDa;IA>rIHx=GSfioC2@C`~NW8fBU z8z^Hnf;EMFzh~GlRRnhoe2ec4e2iMeB6GY}l4A)b0bq z_oM2*CgwU1!q}TF@^fU^mLLz^J9Y(O)A~sspR{YbV-osUy5!UAg&X#c29kUUV|*)v z{Mah6mz)I+x7j`t4dOHvI$Ie8|-yJ;iq-n>&WeK0zS+48i+P5IV*{cIp`6 z-(8=NC`S=;KN zLm~SZ11E^APCdn-!Y??_$&kX|h^|dPMmWdsDTV|16$8PeN3Z`8``ihPBRYp5P!kxS zJWImk$Pv&qDbJF0lG-E*pCiCD;R^La2Y3M)>XZw-YnAF)c@)GdMXM}*4Fq3dFoIm_ zWrx%h_ogx9lRD-oSr&pb_`X2nGS literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph.class b/out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph.class new file mode 100644 index 0000000000000000000000000000000000000000..8f75352c54082cec16b46b9633035d29522d1ac5 GIT binary patch literal 2890 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 Z4A*h|1zN-l?BO-_oFx-%dbxo|{{>WD=qCUG literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Graphs/ConnectedComponent.class b/out/production/github-repo/DataStructures/Graphs/ConnectedComponent.class new file mode 100644 index 0000000000000000000000000000000000000000..61885c9aaf8de2da07d32536c18cd9bcee787cfd GIT binary patch literal 1548 zcmZ`(+fEZv6kVs3P8mlT5Gtr>E2!mWyCj=J-d(pvgpz&$Ev=S~T zxQI&%MldSjvQVx_7*lW+K$LDOx9#6;0@O($+G#5H4KLAR+J@f;mw*kf59 zi7S}EH3ex*3hBCnDcq27Q$Yr|7~+lM4b#~SXGk{Yz4NdPYMtlI{1VNG8eWG)e>u&K zXiLky;Oa9A3|+}|e_&#pKGbN5Yua@!Pn}IAgDy06N<`OXv@t5i-BvG4lhX5|Xe^lt zma5@YC_sC5rR?ZMy0(@}Q9R=xjuC4hgi;OD}#Q zP!e>|+DTf9c1C;iz$(}`&m5yQ;(-P1BU!0BpbOokwO~IE5JJK1E1Kv5OROVwe-%yH zL6xr|tj^O?L32&heNDjXRxRh-grI7^CIl~)m*uh0R(zYMJ@K_i!X_5-tg*N=6kbE5 znf`89kU{3|D0h>y; zp`fka*g3E37JWr+#85^b9Qv5L7{@ZE@dyvGf+ak`V?4!cJi|vk$7j627rexGyut>d wzwidX@fLsZj)n1_#qq%#RJ=M297GQdD$2TX2#0A@AMpuslEmZ_WC`KOKdnE6i~s-t literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Graphs/Cycle.class b/out/production/github-repo/DataStructures/Graphs/Cycle.class new file mode 100644 index 0000000000000000000000000000000000000000..9aaf6f5ff108cd3db21bb33187382ad2e5873f07 GIT binary patch literal 2947 zcmbtWTXR!Y6#jP3p-IC5dJDI<5I~^~y&#lwX$h86u%#EUwTOs%NKV^R(vx^{f)sD4 z^@7(K9~||;ad_cbh13zp@j+kw3%)qxyYDh6e(RjjrcB|*$z<=f*Is+=wZ8SOo&5Ii z4?h9uz$Z~Wis3Luq6lHQ5|7|y7^f=nBu1lHfiaPuieNm7(|B4mXT;{22+qp@cRIXuz-x7b3{WJR^f6Zn84u!gw(Z zS7C*dOd)lb<4wGo~}y-tTzUq~&%c`B7Lo zVLN7~w{&Yox9!+olEF1Kk1OcCOoXuy+Kx3`m^p8`W9In`H8q3Tl$jYfU0c>ArLviB z-ZNc~=PidR>E4vhTp9}i!uI+d|nT$eoG+S^})-hX(v@)n_n-IysZtP)n z%aF=IE7}yQ7q?3AhmkkX4NuM%3|z!Z3hVpG9yjhyS#c-Z7SB#_BG(Vb!?6eFuw4KQ# z1v`_rTmx6}J_{9ZO)|Wz_`tx2_(=SJECaEte+Y>csuul@oS(K*?13`X=xm;JUFd2% z%P!0nJVs!dGo<)jq$dihpXc(zhs=?nJuJIkDq4^>2ZWsA%6P&JQ+WpDCOBp*YMMQmKSP8(YUs1vIgPX~*=mnH7xKdgO(Wj|L3m~0pS;&tO3^(lfejb0YLk0n0l z1J=P@YH`vBN6L4l1dd4id0GIwf__RNUlKSq`Us$ty(2hEjX-B$#U0eDjyghCUFysM zdN{E_l0Tr+7RUu8(V5mYSV5=g^+nYGjF7L}#V)#q2DYoP<=$2UEsEGwv$=?P5nI@$ zei!{h<1#DFx7tc&5!-w+eYV(UTM^;?{X}elL^;8{2H1K-#AX;a^;w+qafvg|H8|`O gN$4}PK%ZO*A<4KZAj=&X?1$uS5>H`}`VfZx104^emH+?% literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Graphs/Cycles.class b/out/production/github-repo/DataStructures/Graphs/Cycles.class new file mode 100644 index 0000000000000000000000000000000000000000..0c9d94c75c56db361d66a102f5ee612cae127cb3 GIT binary patch literal 556 zcmaJ-O-sW-5Ph4bO_N6ZrLEcz@m3Yg#al&?ie7>u)oS&$jiF6R)3Qkff0h>u3jP3p zlsKCTy+{K)v-9T7d$ale`S=2Gj9mj7sv5QoD5%P?EyIq6nua<<=EMuU=#(MV+V3%_ zo$0g7khi_Sy^1FTSKRV}Pe{q0I^6GZ;mP_BRHKm>GBoXT9`SA@Vke4)8(Now&qkru zd3Ag@Y?JDQdjUhG^<7!10wHqvhQt)g#ZM^xIa2oFJ5)O9 lrBDef5$?(HfrR=r`k07T7K13FM18qW85<V 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 V8mywl%)%pFM4MXqBAM54=^y=-xDx;X literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Graphs/PrimMST.class b/out/production/github-repo/DataStructures/Graphs/PrimMST.class new file mode 100644 index 0000000000000000000000000000000000000000..0bd41fd3761bced5264165a753f57fc125a7f5fc GIT binary patch literal 2199 zcmaJ?U2_v<6n@_9XTkz)+HEOPh=`E3NvkbHpir^pDB_k8_^$^_;VtKcD{m8-TsI z7DF#44NNJYtgNgUI2uC-jzw`CCrq4-A&Y4Pr(%d=QZ6|YGjcy|A}{wd2HuwzXJb%N zkjpu_(BU4rpEocoAmo!3*f>@5mjcHRW}QmIRTy6r&<}aO7fc8!$pPZjsoH`ousP@X z?&(H#-mRZ=<|~xMbG4FFnRV)(ytjpFaNS!H*pWNx1WqBSH%dXH?k(n4h@CEN)6vWR6$8x)c=L zK%o0&287b5K$PoM&tGsqVu6LgDcziL7Tf8Wi*?Trm;qsoo1L4>${K}7=Zj9=_32#D zhgO#P(jx%^2CZb;1SOwYGzcoy8h*eI85lD#K&q;aOrR&ZK0T7)`Q`DDN~c~XIbAPN zGb}^L3bjVP9pHsVF9j% zH?Ye>8p9R`dY?eYn)m$t4Y$Nnt@&1;!^vZS z(RHevqOQ>K^Ws*&{Gh^C*vWO1wXPGov$*K`3j*7c*?|`z?b_)-{WAMk;LV`ciozL9 zzUY`9ja%|n%U_dYa%nx{+1w++*R+?fqQF*cL0`B75xfSCQjP&7+j$z{F61ja_z>cI z9wOMmRS$(xx&f>f0Iy>wZ;)-FL>m7@w9b7ju1rKSs*=%c&0NN=l&y_6p?!(&AzK^n zUxp?330upkcQo7-ii`SW6UhaFDFipiWx>L4c>v>+<;`|+hjQk$P zS{_W9Lrrw8(Q}p!2iqoFWRi$YEV7qn_LH35Jg2aqR2<~(F#nG5_iGAyoWw=U;A5UX z#Tk6Y`(0}9<2=5>Y)I{8j!P$pT~e#zEG^~e7_`qJ!;_A8;P7dU(}PvwAA}_H`-HE; z7DSlU{cyw-=5{w6vDP@HV64cgHL%~n0RwjUe^3CAvGoaJ;y-K^;=sSqlU&*f@LFH(5=h!8?sIXr}wxXzN`J%>M@6hu_L&+D4YN(=ErC6g>?=Yz{snS-h zC=RU%F**#Y^iU<8s1m-Wj8bW=+DR4h^cii1n;A+q(X;j`h?5MEER$dBd$>VjZiW;m dT1Alf3F=LJj(7Qi5X9&qi4mTUP!qv>{{vZbq=End literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/HashMap/Hashing/HashMap.class b/out/production/github-repo/DataStructures/HashMap/Hashing/HashMap.class new file mode 100644 index 0000000000000000000000000000000000000000..7758cc08fb095605e150226ba4d906eb2f1361ca GIT binary patch literal 1463 zcma)5+fEZv6kTTq7&;x07FsV;5m2C%OBL@zy#N|Xs+iPZ3@;At5e7<2+NlY?nfMbX zKKbH{FB%1-!4L2Y{0INQ7-L@^0Om5NMfnE3S80pea2&G|z3i zT4K%vd?ar-))r;$uCrL?NjzUII^}t%<|;ot6fPsYWtX_={a`~H#B3{gPH~l#{49Pg z#xhBgT)=|`>8o;sjye`F-AY~7Je7e?NtUH21E-_p*4N9^!0Yc?sUpGHvoZxDrzx+mADShe8^ zB=SDETg~37xfPFNAe}X89^2(KTk+(QtZ`@_Ipv0&dnk}(^MgR2b@+l|o&U&28tW=I z<0jL4qKL%~PAu#>3d)}dbN@xk2)lX1r?HzPIm$F|VnRyF6^%2_rEi@ILYU1V3uNnItnqTw1j)PpgVQ_6_jtDH6%pWDP zi2<}@m<$f_wuf)qX&ojDjs6IZz~-(j#Y`YYn|D9?OgC^;2;dvj3pE=d%@u|!nq4+Y zHLvGV&tayN`5>2i#q)qpoJ7FcGJGOkv=TcM7`p@9MN$gbKpT2}T8cso#COE`_oHt| zo_ir~EMsq?CFd(LPSa2tXubv{P5UszkFXwl4`6HuFct!~P@e!$;P}2Et$%_XBS9{_b^AT6!Y118sS54!O|(B1?Dv=5Rwp?) tU^dm&geQPT|iA)#}$E`+r})0Wg7uG%^@Y zVGnGzjF=crBaX2Ym+=&eIF`guY5a`iDl(D8WD+M#oJ`{voKo>AwUkUu3&iK8;|dIx zXPwZggh8_!HUrrx&O41emz-7o^!(e!#kwm?OmBFPq<~luNKAXa7tRP6h2a}~bDkLj zon_CLi_Mi~8C-LgYmDT|^{P|5;RK#KN5Ob_$7=|Te2elU=W|T65L}(v^BMsLDA{ zX;tbYzVW-xeaAu%dM)J8WnnM61&;iWHmRb67JfySi5Uy0afU3{eOCr^wfcj@CeB(o zhw~N=Da6cgaxL%I!~9&m>2ngspqm%SD)wT{VdpO|-<8$S#H@u2n6q#Z^QyjAVE8*? zcFfSXFCVgVyKpOO4K|L1^(J3*mo=kTFJ1{eKjfDnofY=H>ll!4scgpl%YnfftfM=4cy;%m9)B2ictO|8+rZ~ z8U8CVUL2m@aejQpL3Z?V{eheSNP4P;j1MTQz z#A=nHANzR{IDmr@>mu7IKo?*_;FkK2WA+|xJ5z6V_45&=8{`Tt!pEr8%Xy*L66N%LiI`eaaFTag!fzY zwRX(=@@X`R(%HH~YF9`^Z@HVIDv;Tv+D_`sQb#ui*~X(>hv=|C{iB$|7-uw&D~w#l zaV+74cAY0qH)ffu98&YP|67rN`x%GmG*72Tx2OIW61u9WoRvr3Vn8Xh;;)fe zGDc|hZ*)|)(0P;lMEU8Lk9@s_?2i0C0syDjyK!;3H9O9FiJ^ U&;v*z_8D!|G{C?RVPYtJ1?V{`=l}o! literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/HashMap/Hashing/Main.class b/out/production/github-repo/DataStructures/HashMap/Hashing/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..94c4fde301e7018d61af02a736a050dc92461346 GIT binary patch literal 1423 zcmah}OHUI~6#i~om|+;8P^+k@gNPQC)(5@->jO|L<)Kv)bYX^eVh78VOm9_m=gN(V zOHE8PaY5ov7m#S;5AY|sP`^8!C?q5_xpU^czH`oZ?)2yHZ$AJGW8T1SWHg*K5W%Sy zoW>a)!v@acoR0H4F6g+ZV?@KK@{Jj2#U=H~>bR^@uIRX`aO2}E*? zOEjYD(ye3)MceZnUxC>EBi2l8gTZNv<*Hj`yP_mV?1avxa_h zDPR<;b-(CbcNGUMYL2vO-NYVr3mn~H?y!K0zMZ1v&#tHu+7%W{A=Vwou5hQOXJW~&s`8?orVtK6-Pf>Q0>#62~4-wtyto&@6mmpr?; z-sCB))}*t{-B;`MCmSnwtC^rE?}lS9a}9|AYO7g5TTxV0SSp#?{zgSq zAOAsf-b!8m1MLoz2)oq_@Jnap|Yh@S=Tqv3ir$CqlKR2mF5lz7RltyJt)r3DnB z7fF7r>K6gYMK_;&sbweyWz*mW#FxOmkI&|Y5&QXWhVMN%K&=G_aflWsix-HZiMCJQ z5m|_98;H()MXal79nDH=q0~d!5=w*eJ6adM!rVaHNNjIx9qnWLKNAUfz@r+9@f_kg z%QMAuUm+VZ?FS&m8?=6c(X7vSweZmoDgLNJfp_c<2ct@NRdmNzsFq(hU1Pz0Kuz)5F W$GLtCYB&KTlkLA4BUn#uGyNCh;5j=0 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/HashMap/Hashing/Node.class b/out/production/github-repo/DataStructures/HashMap/Hashing/Node.class new file mode 100644 index 0000000000000000000000000000000000000000..3cb375f729dd5c3b9e25ad7c6025090ae1303df2 GIT binary patch literal 392 zcma)&%}T>S6ot>UX=7q+YSb#Y5kzRSFdKJ@8$~R{c2UWGnhthKO-p{n*K$z=7e0Uw zC7y{sfQvaZbGYZbbLZ>(;}gIIj$E`5IIys1WZ%Ytjh=utlcf|8Lmo5rS_+)Sx3nf@ zUZrJ~t0KCW#r#38>s@D0(P%YOmjdl8o$2zLx&CmFaJ!)|;Kw>sqw0C8@<%yc(h1^K zDwm1OwYmS9Ryo&&fIC@Ld8+QTDRd0^d?8NHPhX{{1XoO;e<{PaBcBlbCAi%2Q X4mu2X==6SL@M|ambsGck*4f=3);LNM literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Heaps/EmptyHeapException.class b/out/production/github-repo/DataStructures/Heaps/EmptyHeapException.class new file mode 100644 index 0000000000000000000000000000000000000000..00420007b50e752e3f002daad73814a281ae1b2a GIT binary patch literal 388 zcma)2u};G<5PcUy0%@V82$-3mAd!Wws0$P^L@Y(!-CzZy#EERDg3n??V&DV#D8#uS z7`kwl&iCG(-#hu^^X(nLIR**V(2LQJu|tS1lvZv`*gMW1#X_W|&_z0RM(JWSoDssy z`d$)xnbPvMt>)6)iFwJ)Aggmx&V*4O|B#`3P?j*vu7ne;(&nx;(xx|3G&Y@7jeGXx z0rqy9*8x@Ynbt wKCH+&Vl-wx;5#}weFeR66(HuEEZGjvb+N&C|9c9X-0=~i!yT`+#VEk`7fqU89{>OV literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Heaps/Heap.class b/out/production/github-repo/DataStructures/Heaps/Heap.class new file mode 100644 index 0000000000000000000000000000000000000000..9773c0023ca2a3686704df3c3bf89de63f9e1a93 GIT binary patch literal 333 zcmah_J#WHL3_O!S+VGXNdr^~xEZw>`6-Y=7NbIk{iW22Z$xBuK8bf~oKdP#qK(G|C z*t*mCeD?A8@B`o#o`bQ23BgTRM>!WiN0g5 zby}6JgDGL0mMu3|o0)&#CD_W`j&s(0S#SGGL%W-*YhwOLb0$2R0P{?JDZ$#BUcv>!n3>$YzrJ(6@0@S<|F{4C2jCj+r;x_g5sc%S z96m|mQ+$@fb=*i|F@*%K4r56^Z_45GVce1dU&sZAG?tUNoy3ZO@yvZGAj$$`PNU%k zUdwly75|5pfK}afesW4p$KNSE*xq&P!ID7YrssRXErG0EK6;+t5Qwj~8m_>2)$`r2 zy3e=W&Nt3>lRH+mRd<>jPREmLwHXhddM^YnRLf4_)Phd89&|hIi_)6ww4?D((|zvx zk~{8&d1dX&U}jMfux;(E;s@@I+gZ}KR3S3ajJCaZQ(#U9D7U&y^_X~FA9ayA+T~CL zyCNT19c+(79!%;7Dp>9(cibRSf5Ogd`R(h^3+vJ{!_L#R;h;s)Jby>vU_i7h4Re3& zI!#JEW4~YH{FXqv6+Cr2Qh%kqz-TRS>d)>wZDm@j*6McZ?p;sXn%1r^$c`~FiB%IP zVVTHaB8jqzJGh&~mnPOw5ID8pS5cZPU9Z`2I|4&2Z82w}f_rjUXPLPo*Ymh!qKK+M z?tOj2g!bVh*+Q`>?#cZF_mN@f25^Fc9Z+yzm;L zF!u_vLh%)hzqu8|2OO>N_%z2Uj9?mLID-$lpJO1yaGLw_Hy+Z6a5haMBcwT_XtubP z_tPQG)X$RV(g2=|ZiX I+AWjjHa%LQN2?)Cmg)@hNGf(wfj=a;yrnxc2z`y{6*_Z|&a7+bN1c)A zGYY+?&=2`Bh~Oa!zNR0K=toT>IO>Nam{kOi6v06k2H}58{7t&BMXeue_(xsf*BrLO zFYzgxZK&`MjK4UE-ik!HSr1|43&jh{Oo2QK+>tL=DeTTDIQHkE;N5}2{A8(MX^aG( zeS^g2Yb34V9!8i&tcR3!BAOdLn4I-6dN{SVhCbU*t%wDM{yo)@w&x_`JpaG^hDli? w=R_U*70LMTh#PzVpsI z^UTaMv+IBS=Pw@vcnE)tA%zJQdJG{<)L> zM8}F^PQ|lP*fBJqC?Y3@C`z(A6~k%F%f$tGJSW?4$?Ds3`W;z)S5{|KJRimPVz>`Q zd3;|^ejq15l+_FJ_>qdUQM{<)B^58L_^|>tug^bb=yM7hhfe6H^xl$V=6Z+BqO(sy z&6qh;(4CTPD0pbiao^B@?&xEVU78YwVy{^7o`X3fZxoz;{WMYCXBJGSUqL*z#=yRg zqY5IASXmlx7%~gSNGU&Q*hloq93@Rd)|8$*s@taQePQh^efZWDY`ZrCI&fyqqJsAI zb%(v+iBrolWZyLPTkdqfFjt09H|FS5Cx`Vp7m}OEb1Htq(kj@qHpI`ABS}MS#wa^i zaDOV(u|8Z$aXGn!YL-I1vRpbw5QsuH{SOR-`8j97P3ruV zG3S_8VIP}FL9<8IoL-pe9b9#Emca#kvLrTUmFy|wkSUDSd@}V&8)@jld6K@;QU`5Y zUy#1ikVdD9a~gh%S4bTVKf|jUeva1^B=6Nz8jfIG#V<7c60a-RGE&Orl78qt$q~y* z>e;N3O*&RmdPT(r4Hxl-hBt9Z!2=^!SvfhY7n75QQSdHwB}o8h!M)U@V7rUkjo)S0 zXvrC!e%LA%vc({N1+DH`(keMgYude?mmc3 z!|!ok!&h)X!yg3Sh&X)$PnK(SXUz#k=#eywUVeI#gSKtiN!xI2(>P@oX3D-4Y+e_% zPYSkJC8eX2CyXg_y=~na;!r_-g*ieR4#bKe;~2K?SZud&O1K|213?Sh?QTWRH?*rbtyyV+RQcjNYeQF|5Gv4tWt%xf%j&>5!H`?zfu9FBiO&+~#u^gG3LIwwjw z4vA)eG`enhi<$H0f6;u7y~8*-y~3PcqRR2NHd%C0%~N-%QJFI+TomPt6Q~ z>iQqn9Zu`2>6|4wjHCu!dwG*M-4Q8J*hXtm`^o8G@>H|vl94YiH$wNFaD+3Dp>UGr zty2cJ@^za6M-Ts+q~-bB#SeuLx)I~L2fbW>o|1ndj0k_n)5}oO*AY6tjPRck>0CjT zg5j@kMOJel+6%S~yr*@gOylgwsL!7x+yR=6;-7yZI}tJ#H9# zxz-qhC+X(uOI&Y3)oq#ytN5}C&e1;L7TQ(p{}k${2*v&A`>D?M<5OaPmM%j4?Mz%o zViUi{m^evvb0COh};$a_Q z1fdNzJm&=R-9PHPkFW8ug!ub37INKGQyHvg#k?fWOG(@}ACigY8$E|Ax1M{~7#;EV z^0V2GX9XL>c*>V_dpjwa=efzX)5W57vm`xCf3J%o?b#1d?8T#QkicF%##M+nQpmUk z49Q&ekzM3HVOswhWDGZxPE_U2euU=p%VBoD>?uFfj^gRD^CJ9`4|llh}i)9Hv<@d}AG$DdLg$)?Wx^GivyrkoREk{B|SZhB@n%V2D}j{A-`wJ&4KC&OJ! zNLI$kRj7%#))^%gP)pcaX~6*M3bqOKghz~^Ey#{q5hfOKXf=_pB3{<@skv?S@fB>k zM z_!v3d;6IV&erqKcj^Vglu_uY5KoMO4EH%2!R2AH&yN{YD>vxa9~PR2kSeTssN_Rv4o2 H?V0}qae-iw literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Heaps/MinHeap.class b/out/production/github-repo/DataStructures/Heaps/MinHeap.class new file mode 100644 index 0000000000000000000000000000000000000000..e219480d562e86480b4d515d22d267360247173a GIT binary patch literal 3904 zcmb7H{Z|y{6@F%SVU}h1kQI}wdA-RdXsN(x9t%AMlL;P4dk~G9-jIwhD zkEAl48^e_pmy=7#hL`6|A#2PlP%;YYDt3+-3yhwo2KZAvCl#(rWisNe+LRl+%ZtZY zd&kJnS+;I31lf%`*33-K80S5)!fW9(Vp5^Kn0Gc{ohxv2&bA6OqjuJ?d3uThW8Sg# zDTm2bup{-cVyPyBN;!uSn1!NYuT92-Qz76~KN+-;<NKoqj+e_$BQ&p8WjQs<|P zImfgL``JVanmwxK^ukQ<;F_Zg3@+G{C9yH9WKS7~O<}C&lc`7ANJ9@Uk@S_8I%M1W zg7lS!G`dt=)bInmM(SwzAzs(;BfOy?`JkTCa17%reyrgqxU697NGX>~`l0tEM=U3) zXR}5&=~zkW6%}u4xPrGd{1k61cyz=nD<^05Vsg?j3f_fXNfN+Wa4+>J*zV$X<9FFL zT5?9GpR!7YY%z#mL92U~v`S9Wns%=yZKlkS;OX)z7B&0~KiBXJTvKsf!#nt;hNm&0 zVGxHkyo)6bCvZf=ukdRPpOw{b@VbJX8>Zp@YANVFg3D~Q9QZEECPTN-A-3PI0 z_$@AJcoGLS{7&$Vh|}lre7RQl)|^m;9!az4<) zQn1A;DIJ|WZA_8tZ5!SYhYIQ|%n{OXAXWq!$FOzBV!MS?!u_Zj2wK=~_bYO~sjT-1 z8`HhRCXE!_&E~Sc8@C6H+H1g$EfkqyUSpYq&M>XsqqbRaIQ|Vi&kG*W?-kSOoG9fu z2AciR=(^!8X3m@cMe`;04&&hT3UhjiD#zdYWYI-6Pu-zLWzL{*QIvP4GWY9lc->2= z>wj2xIIXLubC%>Vk{WRB%(8u2obi z7~ZvtYK2X_g9}x`UlASY{yS>Z-OH$1LhTWf^0L?gv77mtHJVuQq;dD~|DSp$0xgV$29{$Q|uN%fb zt~G|>NxHfE4A)yxb(dzsDxOfmIob!@L5GS1A3^;Hp|~G?Kh@cOd`j#u(nW~BU5Q0B zCV~LoLETL>oNQ`b!KM#Inuugq(G-&CZ%{q#MpW2T6=vzE<0p>0o!c#uN z2tu1`c+LsryMM-aA7AHV8Sy{RSjcr#O=U@6#k?fWOG(@}ACigY8@-4sx1Rgf86ENW z^3(3evx?1OobV;x-cCy9d2Vv;>}1hWEJ-KRpLS8CJ^KNQeR#$V64-}lxeB>AGHwAw zGFN?MS9njD*1rxJ!_A}6dJ-XF$!r^gzg|7?&Ow}*n_DYp;<9}YXg`m;+!SK%U6+b z*P`Q+{(Wo_`6ATF5+dO}k*dUOaCjZ_&5|c+I!^=G*Qv;R;)+9GU1_ zLIY0|bSi?r{{z6%-Sd@PrP=jTpE%?0#}jy-4N_vZ&U5!F`{6a_=M7TxZ{(5W&#UpR zAb+=l{N3>L*N;~)ileNkWU>XZJJ=fzA5`u@QT~lg?RKt7d3n3}^?!~#>9%IcOSs%n zL+S7`+Pb8#Jlc7El|enJ6K7Q_#BcWD)U$A7q!&N<!EXf5g)&NF$WXfNnQfQB*mM&Qoown@!PXClcP%4X z86(%BCa!KUN-Ch1@o=RD1E{OmCeRZeF@m-rJ8DIkSi<48M7oZ6S=XoLwzbFCu;rfP zMMP!4{XNE{v2HCKU0y%!K^yHexZK^|}W%n_C}AbMQIsYqiD8Pd@aA%rJM5AQ`Z;ZMUxzKC|* z7;@A4sHBxz@)oJWBR){Ce0fR=sD>4kubL!(fuKdd(FY)IIYI|je4e3*9fbia3`zL* GrT+rElV7U< literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Heaps/MinPriorityQueue.class b/out/production/github-repo/DataStructures/Heaps/MinPriorityQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..00a41c04312d561884ba91073578a61b75496724 GIT binary patch literal 2562 zcma)8NmEo;6#ibn*Yx0HkV&O6qQ(G?HqJw!i2|Z%BPvcfL>|oxJZ-w$9#U!sGq}hP z$R@i)C|Sf!Qn9Iusce(7+*y?@vq_~=iHodLR?K(qdqSgBDvLh%zH{&W&UZ$5_|LcB z1K5enVKgEh!b&_BO;EpY5Q1ldfd*Pvc^-?)Fv`XD|N=oIr8l(jlz_Z*U*~iw+hxsAy-Tmia9&qd6;JN zokLFgc+Sb>X!AtTF4|qRoTN!7owsuZ+A7%7WT#)Xh0|3Hl_Lc!d3DIjK8MfRHr0At zI|&Dz{K4t0(C7DgfyoaPQz;GpY|cp&j%qrfIdoOr9?2*hc_&SX;Ixw-Oi$R?`EJ5a z*#&x}Q%4fhmMo2J7ZO*jx2?{Um7eURD^7Z{O9jNrP141>WsYg=nuhR5rkG3G1CB(g z;YFWg0&1ceohH_x$wWlNDy%lK1)BpnW#TkQd)14^dy7tL!p@mEi*q#8BAZbY=W!u` zizZ^YWa3Rh-HE7)?da67>3?NG$gDN-s)(2XY?HS&i}r`duh>b(vrIK|BhOqhWSJrl z8r(=ZnNFrRU0|?mYnsWeu(DY@J)xnQwe(UnJ%@O2OWR9_UH^4ISje~u(NN#^@_%D80&y4m{c0;*(i&33on8l3JN3u3`QdE@*g#yNl{3usS*qEgHEG zUsS&jJsL5_z6;-n@s)bHjxA>js1#Y?UMTa_)- zz2aHW$YQhi{E+wD)cIcj9Dd`TE*P$FRf^dz`n8)W-BX5TdRW3thZZIr`_cnF;(=BR zCV#%=al5esaa5wG47YkIZY2@fY##0>44KrxE~7glurp}=8Wj%^7@bFu3L_FLAygYK zVMPgM36-}sZSL96yi-EeV#eGe>!U~gjBFnb9ON_@P%Ij0z(+^6stnLn8J`e*PvO)4 zX81Jeevg%{p0IX3R(DXv>Z?AhjQ_Q0wpLYUf@X(MjRYEStjuKHg2~3^OxDr}hm~tm z`;t&n=1+`ne`HFcJd0}Xj4|2I;3o+Nzg2-pVqaiq+2I=R&=^}du9(Bj!i`z*^V71= zbxYCiAjHEtMms)-AvudEASz=sXk4P8jajsozgM_yI2R+RK8fRx#NCIg10}m`Pq+Wr zecf}#Xh@tnQl}gYPgX@6!MG sI0)Y-$6GAl56I?2>|<);_!tLpyNq)$$KgI=gt@-XAu5x-OW}9_3(9T4RsaA1 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Lists/CircleLinkedList$1.class b/out/production/github-repo/DataStructures/Lists/CircleLinkedList$1.class new file mode 100644 index 0000000000000000000000000000000000000000..dd2586d092308295ebfa28f89d4c6ac53e396415 GIT binary patch literal 238 zcma)$O$x#=5QX3P7p;QbxObtrvk2b69}pB5JwZ%|8VxBVsfTmn0X&qLZe2OUo5zF4 z$Gkt!7l1W}0zzOwNb;(7iuc+uVY1Oq89r)z=i;b+Sl;AA62?2LOy#vLPaLjQA&?Lj zTNz{?T&+Uw*k?`OXTOBmiZD7@%Wh+&_v{I21I>)IWp=*YSOvoTFIGAQp%wpcrX3eC Tbfgc5PfSqapM{i0xjQAXiF0(A_O5Jkth-hMM8?oAyw|1bk#Z-2iZ;)PW&bg zRV5Dm0DctWtsRQmToPf+vpX|ycHUd>{`&pnCxBO|ImqFOgFK!VINR1{$Hp@odjeLd zW(kLb$&nIpKZK!*x`B*i6${jR?_?tTNi-cL(@4dQo*yT1qw7bbK=u6alRDCo9bMcK zDD?f~P->(=bA{6O;eM;b`rN4urmQXZ#`07)0vR4RJ`TrflrU)$B#>|Wp`UaF-c}Yt zE3|A?2Nc~+MHi_=9ZWwDRdgtaK}ujUlEFYmzV_!qD>?DGC!4)XxvyXT=3iIHa0LpP z>gvEoMPU4&a+d7dOm!Qx7Xrqtsm)7)>e9smmG=Id#f|SQh6J4cWEzdsdtdM9#?>?P zT>oMhCEU=a>f#!%yRhNd@C3Z&&z(T&>S+@=*j);bE#90w@07uhR3WgQ zdM+*bU-(5L46Ti}%-lDQCdZ<84#TUR!Sw29u)Z^7;wEhw7VR2sfv>}*)^UrGt*i_i zjOnL1Z=+|LfPu|RC`}|o6-g#TxkP0&Z$*PJv^YvmACQ*TEh7D6RbgWE2?U literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Lists/CircleLinkedList.class b/out/production/github-repo/DataStructures/Lists/CircleLinkedList.class new file mode 100644 index 0000000000000000000000000000000000000000..ee1e4bc3a282985396d3d8b02ebe81e3f08a3cca GIT binary patch literal 1922 zcmb7EO-~zF6g|%#f7S*J%7Ib^)~>ks3b9t zk7Kx-z!>f&5yHB*N->n<_#}xaHWGAx8pCIC+)pAIoHt|Gis3;F+XAVIZ7X-HExTRS z6)<+3rsCGMzU3w=G!K+)3M^M2NKe*0x7YA`uId)6R@dtmw=B2OR#nS>rkdI_r}Ik! ziJH~2rH&L>`5&p}z3tKl^P^?Uw!962aBlH2No@JF##u=1^p5Jv-IMh;u_voeL$)7F z*V5;K)9?-~YFQYqE~{nFqkPkOgEXS*H>_hV<<niMf$Sc^JQGPrgZi~AYJohYO%fn?3;xefKu(yx&D_ZZyN za#Fa0s{;Aa2PcILvO4Wy3YYP&!1ZBUc6#mhSB_;<$@XzWbv(Ug*3?LOUfdUmt>7V0f_&C&(TMgU(| zX3JHQwTUWiQ~x|n$2D!$lAhI9Da>O*;KoQ&1tx|pf??pWj+8pLB5?R0vozYI2S3gc zV^{nkJ2$xe^;>q!_Zzl4_AtYb%{aeAA^!2be2Xs#f%klS3I=UX0oQ4I8vG&&?$h~G zi2O^0_C@{$!r~Oh3BvjC2_nDnI*e;vCz%X_8U)M`@G7S8K0T=b0@v{YPv$w#3{L_d zVwS5ec%Qp27-5;nPc#DPfW@`9;35~`v?qX@!wu@waNm=Eh@6S<(1D3?ar5N4fMw)-8rcANK!YXpM3KA6jNzRo6x`)_ zw@5n-F*fLSo~|VV`dmexSGwGjX|4S^V$(lp&dL4BcTSP=Iln;Sk*2(3tQi?&`Z+Ey zYgd8G&Uc3R@$XkWr`L^wcAp@zECx&Zit#g{166BC(_Z4c6v(tl1uN8dn?&x=TE!ae zGS^Mq#g|yeE=t&=N5AC;8#>Rdg8$AWd#3*hZqmmu0PYb}cVL!Sw`hfllp*p0>zl;L za}P3gcY^q-v-qjA_#ESO$1cH0C0=7ZhTHrXfBD0uXZQ|7gSlPBM+^*+^d;_-v?jP? KB2H_J=j1fgc5Pj=7F?OA%1RA~y1ZYue5D^k5h$5r_QY2Fjv3lUPaaYBy<3#>I^cQjA zf<%SHfh!U}3h~x8MKqUk*qxoX^Jd=6?$2M}z5{rI`wr^3Wy8d6y>%_zwQx_sQn8w; zBo}D=2lBn_$1>UPznLDWFn=asPon)q=0&OmYC%B6Owb7eu7U!~6fV{lOg1TK`G&7Fd(8y8JRtkNrJYqTxzD}?vp z7>2iTjM`^HHMF?5nGo#CB*i9WmFOCg?ggljFsn{UNwLl T*dS=&CN9xBOkm;;yK{a6xiGlD literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Lists/CursorLinkedList.class b/out/production/github-repo/DataStructures/Lists/CursorLinkedList.class new file mode 100644 index 0000000000000000000000000000000000000000..a67d0ef9f9a10dfa06d14287a58ea628dd2695ed GIT binary patch literal 3873 zcmb7GTXS1i75=uamMq1$*oiH>aho)?WjC%>Hy1~Co4UCedzw!g^Y%LchVXI}Z8#Ig*)YyU;KQe)@Z;GChv#IOm0?x}Lu}_G$YD;7 zm{DB7d=wX9$?{T^E|+D<%dj9rA&g=a+vWC>LSU*mXDY`Kn5*k*ZP!YVuEfidkgVHGZ$b7I*ecOO=W zWUTpuA)X4U|L1IaX6EoHF9_y}m4c(tH1_nV%=D>j=H!vFquI>(*`o^av0|a@7zO9F zk*}D3W{>fP(pJH8Miu-$y{Cy{OoMD-Xy#O9;k;?j80Yhhrg@^6GxDbm+mf|sR2EM- z7cHjXp{)UBh;5s1x>~B<*1xqYs!-z@$H-ltG)g)c3V`V=*;c`kgerv1yt!aXE}ADU z8H>h1-YCouOrO7G<{U{BGhuVn&&1K$D$JQzrY|V8_T25=OM2@p$FvQnXe(?n&MK#a zTZ5(DU2Ie`iRocv@?`(K$v9hk#(VFMjFD@?O@>uhDwZwBDpIvnYl!|DTHH1lii_rx zSH}e+`QiqN4r;{obGQEoa5^?n&^Gg!t>rUXvdzV;cRpU-_SP}STqv#kM)a~^ULgb* zk%;VqZBkO-{$0(J|0(H5Klv#PvniqG_$mfeWty3nYxwb8p+kZMOM* z#j?$*VqvP1&nxV`2cC^l)cQe)2aPx_j^vvNByPcf zMkNBXs|aSUDYd-zZ!tIKQuGWZIfP}XOZsji@;a{y;31AlL^<|w)r~kqXk`F<`P%tcG@{g-h)%wN`u-KfRuHe+Lh0qTf372V0Cl|M5sr@% z!4MO?pU*i!6bETNL~B|{-pyxq^7YK};B({Lf7HV;v;l+QbG?Q*lP`uOs%ZFGa0hX9 zTLXBEkMU`4{>I+`T@UuXg>BDBl!7BQ=^yRlr0zPp`w66P1r0w!uTQaeN#>pf_+O#gpX8i<*$QCKc z7q9~_>ga`uW+HG!$eU`B?!;4@B6Yo75sFt;gnp1l_#_%sJRTahup*6o?C4%B)z3I z$m^ET)*9S=&+^(^$uq2gz#RL|dTyr374Q<=!^L+n8D}|1uk7OW+5EJ}K--a-71ZCt_A{$!eOERTV%6!=E>-LajXkm6_3zW=`$zWQ_t?+=#IFBm_Nl*+&A(z8 zf3NioKF@;}XRXW-ilSdT0SY|Pt;?f$Rl7w9gwf8gE)U0PR)&0we3G39Ot9?usNd*+ E0fdbKA^-pY literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Lists/DoublyLinkedList.class b/out/production/github-repo/DataStructures/Lists/DoublyLinkedList.class new file mode 100644 index 0000000000000000000000000000000000000000..08b787030e4d2cd5c46899bc19b9627b19c51702 GIT binary patch literal 2418 zcmb7F+iw(g6#ix}o$l|lT#O`Pe z$1q~xDIC{P&{5P7IcJ&E8oCOHP1l@ookq!RI99#CVAow4D;EZ7RGC*Ya+3r+b%27tmnM)abyw<2h*YHjGhfIF40uiOoYX=1g0T zMQ(MwK0H%%37x#1=6>3)*UFNLF;Q(eCF_VStfe00pzpkS(M(_sIul4?bpj7#wTAU_ z+Fv#+XZuGRbzAVFReAlx@cD$R6(R-&GICA z(JVKZdfaD3c>c%LiOY4@njvx32F+6i<Je-vkRIhFyuj-r z9b0s41@1%VtZ9EzRD6_3`+(o4w=nJdZb6^yx{20eW*)ICh-Y%7qRDv*frkS!pv5aGC>?e=pNSS$m;w= zP5S`9@c|A70COx-+(X%+P-X}%%<46_9>Wn9^C;DEjC_v} z$8n-9U?+;iKehz*V1RlsK)vHZ)TB7Oig@{+eAF*9sSrbL71jy@Ff@m_D2yxOH)Otx zRwcOX542ob{8KFKbEI>Ube^X6&XAzz6(}K#UVTte(%4S|y^^;=yN4b^;aGO8DcBNi{reNj=Tntt#se9oIT@&U+*ffs zDUpPwtFRX$`WM>OE6jEz4iEwasz zE1shW#Sh5+fuI4`xf4CF6Mu#59VD~!Sdk@d1uEh?9-7C>MH;-uc$JR6B^BS1lE{X6)CMy7hJ2TfGAo4gTWY|rtJ+5PM1t)i2f{%4v8ct zzWSg(>7!dT8jafzFrGVYM4_5V&fMj@=R5b@?|c07!9xHenAOmUWCR^ZMX(n`Aq;B> zBB>x9#y<7mui$`&gBS_nkcOz*j^eO_BMOcxIHusZf=mb}LO3a~Vac#uDIlfQhtZ@gR}RU0Ga zv|G$c`-+jXxYC|2=M8J#uuV0uF9w|(CP|_Nvs$r?+lpSGDd7_p4YMTBow%M|G?t9C zWt0}u6l9hbGXB0{FYstbgKerRlB>#l3^cySMA^+*emYrDfxMG8S9a~ZoHUi#uC)Qf zN`sCq=+n`K?hr4!Cxu#W+wvICxqoq64U|h!p&W13l;~dTl^fxqjZB89i zi0inZa$Z!UEH3GoR-+lj1$r8?)I5x>%9_b7$~>+3V`=Vo)saOyU3R(ARWsNur)TM| zLyx6Vq$ABnr6NlOfvtSnb&pWLC*y_^>ozn0iw`^H+B*t#Ce{a%vBOvYw;+~jMaiSy zM)_EJnpvt!+c_@{Y7W&)>i6;$!?ZXlNJ}~_KQ-xP_J4Y)45$SQwA7eqY(A_kU}qX^AscI> zO&;1)v2lgX3V32w%ot)!@DgFX;{9LK%QtlEErq?qZoEeVA25WE*pE**g3rj{3!CUG hd*>T_;5%mV;}4%M^GrYa!fcm47~nMo8I-?+zW`UPG@Sqd literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist$Node.class b/out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..4ee7cc2e65b674fe8ff9880b183ab42a1308e6af GIT binary patch literal 1236 zcmbW0&2G~`6ot=qew+qFP56fv3Is@8f%_9+QN*SQDI%0bsxH`66MIw~f+N`u>eKK9 zEI=YcV!;FOP>3^5P+5SGqbPG{=FU0yoAJz#pWnU%=%BrX3f4?>(=@m0sN%MbJ2vhL z%Av}XK)US4`Z#0Q8;4rpbmLejyCapRIu&$!&$zIkC6geVBs%qbQJSUxOPw6)!xxAB zagyn<7sYRNIAW%0Om+m->`jz5Hw1n$y^%hN;wXD6*lrcncH0Ns#%{iiWisi#$-9A0 z_SIm-jWv4XK#dMm5}EOQvTQhc456T|fl#Xq%MhZvY|nDE z&wPpTyth6@$@_}3w=#uzGKKXyS2x%;r~)S<^ioWmpjfs0gA%O5M`y$h^qxiw}k z%`5nf!d%7s0_zhy7VSVtGwJ6x&TIiL=b$xQ!Bx%}yq$a_fbFfnCeh#JGYWeqr^v=N i8VM;@usS#TlR`dn(SInIzn-tUfm4ii+EmbFw0;55dM_&g literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist.class b/out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist.class new file mode 100644 index 0000000000000000000000000000000000000000..cad713261be1f5345aba86774e947250c592457b GIT binary patch literal 2649 zcmbVO-&Y$&7`;P6R>M+K3T>k;Dh--Y)1;IZC5Qqo5DCy41ly`ONfubL*^RrK9{E>% z@YNR|^o3$Q$K#U^9-sV!s&_WQ1S>se5H0F(GSiu1UsVPcTt zdwqBx(^2#w7sU)d=)){NRN_Z!nA0#HMHCB4xT}VHN?cUKl7?jsd4cenQ!xbeylorq zf+aoA@B|_=rfvGO0-^t%d8siuCcwcU36UEsL*58s8~G72}En^Y(?n_Sjop{bC6J# zk3>viTy$S82|OtT+DP++$;n47kyc-uF86F!z3S>C2+x#wNgbU+P9X- z3QQ%tiIO4!;u}(+=rr82v1lrGT|JE}Hxx!XhA=E}=@h&KV)KsUd%i2{tA@YlRJ?%* zK8|69Qz3@5j#aE_Sl4kM50tY{G!%7g;8P8oI=1kcj)!=p<1s!Lm^c%e11{?L0$=Lb z##cHdN;=A@=rE8LNT10YO9_g!q`jM2FYOy;KZ+gf3JfQkcinN4OXZ`8VUJkKdfhsh z^YS*IQzDt_pv6wZF8iiqXEq$3F194z^iUhk1*cY*uJj#pO)m$6Y3~NkrdweHmY(9P zGhEvhL&Q6cJ5E%iY1SFIopW7zpjwginhjx$4dK5qxI<%+LKqr%s=uJ;;WK*15yDT= zyOzFwgh=Sh&(K0R#4B6rL%jMMqSN7YJbZ+{L+D%a@N_S?`@co{_%ssljYp1fZYv&{ z4px1?qd%>-0*mke{wp5-k>SEYig(b@^)TzYj5nE7ifP@#RZLNu#VD3=4eLmthm6rD0sdb$-%4v8dvA6SfY_k1+599du$od;;?u45F?q6KG{|f%72s Z)lY$%tFU1)`CHsq_cTe}+qi?Ne*i`w;Q;^u literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Lists/Node.class b/out/production/github-repo/DataStructures/Lists/Node.class new file mode 100644 index 0000000000000000000000000000000000000000..cc71f2345765cefb2e780f398fd2a7d829404635 GIT binary patch literal 385 zcmZ`#!A`7i*ieTcSUuav&xi`~W}7 z_!hl-c=L8AGxPTC*Z0RKfODLL7TQf7iEPeeKug);X) zvaat{NpR!5DiV3CjIbT6Y>_^5z=NEdS;M7R2@fugJv88W*g=zU`tPd zY$+4oqSotAamK6KyuZc8NsKUIjKt+)m%GQO2`h}oAH0JG-3_b(ZBSb?Wnqso;2_|I c@s;gw*vFa+==|E?Z$mj?JBGg#t*!Uq2en>H1ONa4 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Lists/SinglyLinkedList.class b/out/production/github-repo/DataStructures/Lists/SinglyLinkedList.class new file mode 100644 index 0000000000000000000000000000000000000000..5e9b53ad0b55ae3d164e001846b196554022bfdf GIT binary patch literal 2769 zcmaJ@Yi|@~6no;T4FMJVUo7hC+7c~9_e}(!*34+g=*|HU?ZTG#N_nhZE?{nVmFZaIx z0l)y>ief!d8pfgs;8+B$I3D5Xg(ycSG>nIFG71e7GCw8Fi($MZ{pkqK;H-voQ8XYW zXI_@kD`C7U{cF+~QA{E&O-6$$r)b!U^BSh2h$AH{)6!VdT!`W#vKn#<)M?YmD2OLV z4A&TU?NZt;*{0KeyzA1h?c-3r!hG#tmYU8|6HMl8pe%$hu-oKa9SWaTY)uYzFr z=2P@`kOverB(1zTR?1D9_DL~T5K9))M)s6pTQaXKs_wMqDCk-}_PCXw%FfZ#MKdF4 zh$Cv{1;$Yivf4c=A(dHvMippz^RmEI5b>?X+-U`&?or>$BE)pbCd9mFq-L0}f^f0m zSdy25x^dS?UrZTA4;}A`@iJ!CbWJ~A#GiO>HOo1aE4p)D-lRdxSWYo(aIP_kZRTB$ zrc8I-xBgJp4sm9C^YOTlCox%ZPJ}1A&$!{ zCiJ0nwnBb%yil^!=3z^yZhn}!trADalju^=_Mg`*23vJ(z!N(1((K0p1?^RgCrWwO z%9)2|(`M0UY~M0@iLB{333uAaC$5-wAyKds54Lgz+w`~GX)}>7&`Y9lK9OY_60)FU zi^SaniYRuHCbE;ToP;R^uh+2~T^foyE`hhVu8PO!>_ExNW=va$gKauol&FS;3}$p( z#;k@p9akjE>yrMaRnvc%FdZAQNkMBh*8XMrAF}NNgY83?jvaVP#}Kw^ctgjVg1@nP z;@IQ`Gffq!d2^OsbNA}Ez2e09oa36T$Y7x)2Yh?0(0`oLaG9)W>^C4_iR=2Q;?I4R9q2MRd!yo3noQ3j0vcB9w2v1Dn~_ zc#HMu;aK+#(2G9Km_D|$mBR*t`~}u6A#ggrh+wL(=LXc9^wxJ1YSmo~D$Uvv;k(&{ z4z!@tbDi*yS6tH(@ob~>2WBC(xQEz=N&fy7x7u03BeChWiJn<~l}JBxNkEUp$#?t_zT@+Va|tPZdj{^}&5d1&ea z)ZjHP__yyX|I7-G>Q-wJixATlNc@Va0Q-c!ROdzk_7g(EYaT*%k6^fsdJoFg059sdj%xlJ5ayX2^^zx$ zBE@%!(YST8lrGG0QQiygOm!z}0CM$K!Z(w5Q5Po38{)`rS>%p0m@JT8MOp@XO+ zmbaPBJCw{-;(nLc^&Z9jJ|*@62JsOq`D60+DM5Wk5q?hbeX)YnEif*y`gs(l15 yRT74B7o8e~8|Im15e#rwewt#fWh9nW^&Q#;P{4aumY-B{LK*49BBSTM?c_f#{TUMg literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Matrix/Matrix.class b/out/production/github-repo/DataStructures/Matrix/Matrix.class new file mode 100644 index 0000000000000000000000000000000000000000..ac81a8f906b66ca01069115e09f0773dbe945c5a GIT binary patch literal 5253 zcmcgwdvH`|75{yE_i=ZVKprH#lCa^q$>z~)Xxb(uRjj2BbZT&{rnS>rr&ArramIF9I?nh{|8X3x7R6NjoqKOK8gRqz83;LHJ*k$srwI(lP8o9S-X_qT|atj_Noj0uSkU zSiZ+~d_}%r)p0_;kLY+*zF(77gKmyay6|-!-|(Ou-xSVcI=-c2M91SgzOCa49j9D) zQo-IEOa>LSojY4Oi3YqS+91O?$8q4n{e?z=Cq%gNF91Cqp zMY}_T+k@Q^Qu5p4J;BJ`!NIW1EuuX**q2Z!m_?a_L-wt;z5(l7r(lbcSlV_6x!gF_ zlS~bU5;g5X8nNH{G>R0L*rJqot_jD&$z~3GbU}<%d-%{96;^P?LPMg8rYHNuG{!Mt zPIEew!JfVC!2!coW>LY@7fNo7grcEXl5)P*)^bs@pU(j*B6C}Oh#EAX&_#GdJd%pW zL}`M~GYVzC*76%!?iAVJAnol9?+Z&b?E{e%l{EXVzx0Nh9r0v;h>ATM_xFSblHs^v zS~MIJ?Rqp7Nrnd^bVco@6NwZ(c7`5E1ta8^-DvL})R2suNKlyPE1!uEQJUoT`7>EA zoK|or2ZOQ1Ks-U0y;N|640}4`sllGmrmzGy%gleZfRcF^s1{#ueKzjEMiYr6Lj07DTs@pHY|-t!rvp+P-f4w$^)=Hh7sE zb1X9FBz;^Jtrdnj3``B{jA6iA;f)3wxXmZQBA}GF#%s*)k-3|5zc*SZ0$pG_g-~S? zb_s!oi3)0?$bHz6%|q^Hg+)`b+m?zY!_iP0UJ47h#FJj4&YK8E`3fHld80<9R!eA~ z&c+sWD6HI0iR4h+S1kW zkR}nCNji{7h6rvgo}z4_iN+UQ63$lAO#cnJ1FYOi4~= zmCUzv7MQzL+5`67P)Ek5*9c^A<{3-X7z)QwG{e~W1~-4f7#7aPUSzPv?^#zbHre!V zR(7$;rc<-BOAIy_myW@5EW_?4lU(m?+_JRlrL(b@rP<48W3NcFSEkt)h*TSH8bBk~aOScdLlbL7VUuk$nmMxJuq_L>bEM&f zO<^t8!HyAi8S6Q6u(A9Z8#r=u4ZD$9Tlj!74(i)laS^Nh<0Dw_ANOm4aVfNRt+~WM zK8jUZy}i&b)KL^xmIOGKS9Qm*U7fx9-mu2^TNRZ*hVLx0D%49*97=FBBRBzMb9@^& zTEnt#Vn}XBG0pSQnAQ9?aK4tNZKPRu@_iRt42M_Kuq9Z`fVOaL5h}=Sq0V`zMXTX3 z&BkVGkw07U2_qbB9GAg)l?&`Hw7a1Ak4O0gbae%buE22xE|R1bSTSf}>@+TOS3D2j z;y`irIZn*PO0Yz?B*1G5rFV22mI~iZ2~nb?OIu1e^DDf$qVzR5v~w~T7u9B1<{0XB zFsnPMV3)B)wzK?ijs$h~6EecSq^n@&Au^yf_gJM1``ktfh<-Gjb=1^Yb}_ zIg&RHb50}Y1(bK?v*i6Rvc}Ea1~PK%ot|5NNg>bk%H3uRE*TkqV`hd|5^ca^jKK)~ zf1KHSf~VCfX6s3wkf+eg`5v4}$D$c4txVUk*H30Tkoj0y z7q8PWJ7mFZ4i6`@ugHPY1lI(X5oRCCfjfaLb(OZUbFigISCK!!6)YFBBTXju@ULsY z$X`_?%i;Zdnj@QcN+@SkC3}R{RBU8p6tz;A<{3PSQW+HoN~-{G|TS%z=20ltL=c$+bN2RGpoJM6pcuJ5oOB^Q+sYoH=6MiRrRCzlJZ~D%&z0yd^_m(pU4Q z+?K(~zsXu^c>YQzr`FQj?{AAR0K&H6MWo2l0@pH6)FC&7jbz%1Cee>#6=&&Rmz6cd<9ix z^&@Oy;U$J%u+U;Pk-8*7R#GF){j&}hBsDwbzAo+vi8t^8}|Me DRNXa< literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Queues/GenericArrayListQueue.class b/out/production/github-repo/DataStructures/Queues/GenericArrayListQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..9795201a52868accc14e41dbcbe5a867d4ea07fc GIT binary patch literal 2497 zcmb_c+j1L45Iti_UP<2gBFnb~!p#QRiY*A?W*ZYHwu6HbC$Vuz0)(|RkvCag*j>5G zd;)(!UU-9-JU{@2!c{;)6%Tv_A3~)lPVdULd`VS8u@AE|-96oXx=+ua|NQhbfKwHmqFTx1HRq>sp(6+w-Rs63cd} zV)=EKHb)P$nO<3$nxSFuu;qE$_3diKo3lM@&Cx{#b)7M$?TYQsC`2-&s|wMx)gqmB zcSVd9Qu%7Za#k(ZmUB}W_1A4rVLU%)`PQ=U)(eu0m%A)!d%1JEqFuYN zlW`zsHvM~jZPvE^oqQ5U+t@nREpOh@WnJ-^3tls%zp+ zOqeKPU7=^!s97u%Hg0pw7Fa27T^H&5jtK`@h3;MBuwd-G?ah~K{w5hx(qvO#X7N#U zD_1vIz!o3No1U-ByjiWw&9L@%HFt^Z@W~Nvm1T^BpnJuPTN5LP)Y`+z7G@b6mQ&YD zw}gCqa@r;Z`9K$|VikyDT`p3t30GY3{kXWggY~|$BTH0 zr_3J7C{Jy|q^9?){D<{lXp|nw+!^`w7pmud3DABz_ zog@*5dWe*Plg;A3N;!vy-Xx!E{7XIwNh8}pT+oKK4AJ(s1Wz=B(;Tnw3obed9_l1` z*vmJ#UyW}eNiuch@54+TX`u5y zy6z&yf^`3ZjxF?1nfhf%*t=gikd6L`bOU|SFZY=biH~2=-@w2D-9R?>A8v`q-bZ+B zi55F7ljgkxy2nInrUqFX8MkmCX2?yj(QzC{H%E4aLp#ZVUE#>qSm4h&HeXTt8{765 zNAPcCR2N3oFvipg4xWr?z+E+tDNOSeS0i|vmLacYd_&0$cf#frIv!%gz&q)oV?)RI vrPGXldgqBaMLYR=QppB}wnz9obV<@}EmIr|+;Kw9(~63atg|>1n4SF>@-+eH literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Queues/PriorityQueue.class b/out/production/github-repo/DataStructures/Queues/PriorityQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..6d01394dbbdcd5fd6649e10065a8c2beee610b81 GIT binary patch literal 1243 zcma)*OHWf#6ouD)w1v{jOF$_~p(1U;R>YtNHKIa-R#9q5KuEllBVK54@jeJR_D|@* zI51)2#6%=fqjTqu{U64N>)e)t8WRUSkG;?S&RYBQe);+S6M(ZA3L}iZdeq~j9Qx&u z40A|@kgmf(7(on%a4Lk1f>6oW$eT}u0%cM`_^~HEF=pGwrULaoBSCA@6(xs@i>76| zmlf#A$+OJ<4X#fmLqJJ+Ex?<){UY^el+hIh1FZeS`{6%MX9{b zgqBQEu)Ze5Dt(#Gcxlb04Tk3^-*hItVv&hu;Z_WX^JUL2hzV1wZv9PylUXs=jR=~M zji3RM2%;mTQ*8_(nmjxn|j-Lf=N*bm9+rrKFrzkoXVh z3Yzx0Q;RF2K=0JgcDE&S`zbciw3bIxGl=t9!+doOs?^DqDy8}})p8DjR5WvJ;ckw3 zm2-P~2TD4&4K*G67~Y1K*0!O)@#|V;9s!Qs(ES^FNa#fy5;*MVd;<6F+{v>Yyory5 zBei?JvR-3uA^i@4XNZ14aJD71gSyY@x6q#>%1P5=Q(G98flFO4kdUD+eJK-rg${qc z7npjg?r!aV^S807^ehYX2UWQmq}&Y60|PWWNC_DV$x`qT`fFpP127B?}1X`IJA zF8DU$6xh$2qZBUE(5bJGv#O5!^|8wFiBR&C`do1^eVv(!})wKPXn znb!=ezARY)jQQ8e4)JjH5(UR=pb-j@xrh&v=9d0q+&I99)EM1}vr@k6RnC$j`^xr) z^eyO`6jJF=MM(YtBwB??j{&F+S7bf^+8iZsf(|54n$!7HU;cwRe}K7XuF7omnY}fi XSrR2PAenzQNgUt=Y6cTLuHwWmUnj;f literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Queues/PriorityQueues.class b/out/production/github-repo/DataStructures/Queues/PriorityQueues.class new file mode 100644 index 0000000000000000000000000000000000000000..04d2e57917a8c70b2c45b0e5074823febb6d23ef GIT binary patch literal 1070 zcma)5>rN9<5dKb~yRb?6{yJ?>@L;>!YCx6^Dg!-rhq^H&dI`4aBCD4=Cu6i6+ zi^_j4ixqnM^Il0-)}*hEz3=P{Uh2BQWd4B+WFhdwQV{y8o_!Xokm{+gJzocnwmHx0 zRjFNpq4bOVrreU*igY)!%+v11yg?V5?<(V@zrnhRBfNvQB?Jfke^y-nU zwPc>VL}v{*2fgSM7(Yg5CUnl>KIUv(cW?tY1&06aZ#mSJvhp3= z!fgk4Kw2Vc4hs$zk+ZSn;4bb7OdJD|v+4Z<@T9n@N&%;qUNu9sv|Cp`?Y}|_je4M} zT(TGPVz51Z?U@a^0T-ZTm4qx`RlO|^gx>jb6M za=IAc*=Yx05JR+L7{)1jO!5vo_yZp9BC>AN%4d4xO>}0WMsyirQCN$kACUTt=q{}F z9oU&Bco*wu=!qtrCc588_CD@?H}D-W@RNiALdq?&eoY#0FoFioVH*>8%Wq*DD|pwU rmt;$-zJ3RA6z4O@Vt*PY4oDc4P?B&^!l4Yq zVF^dlynHN$;~AX5Ndu=0oK|2o?dLW3g`+^3RFHYvaXQX~@7oIs)Cb&2KJr^$s6g`_ z+gG4_lcCcLI2m(2H$2OOk;&pThYPJ)iVRj=&$-cQ&N%)Zd#1sip=zscH>Pdhm34Ph z3m>}_*;>75hjuOWJN2;RJ3;A|lBVig8WtVYhnkj&OdSSw)!!zT7(*ua>HGhl~SMcD;6D3B>! zFfeZ793~Xx|Knc4YN=Lg*xp=eYG&T4(?4n1>b`^8LO`QDXmxnJt{SDdt$4Fr#<2D$K!_e5pG>WWdQEwkM zV?Vaz05|3Pb()YNf zJrsyVB5{$Qvbd+qp00hMbOHjkleU24L_0yKlLR=$(xuaW(P^ibwA22?>69Bp(=a5TZuWX+!{@KN(3&{=}!|AOu% z9#A3ZWfs1|f9fhhuMxD0gSd`kxPfs@^}$YbVe@>jyLzw&)Z9<(l9ul7@g8ME70PFN zcv4u6I;2M@cOzjlzSR|0Sp1LUie9DbDJObydso&B`ZRO@Y7R!4#h%L&wS`e$mA>5I%RZfC LuSFKGtJwD&!;Isz literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Queues/Queues.class b/out/production/github-repo/DataStructures/Queues/Queues.class new file mode 100644 index 0000000000000000000000000000000000000000..f559e41e6d1fd9e901db3c7fef7b5dd30f06c2a2 GIT binary patch literal 866 zcmaJj*AVBC~}jBhcdt8;4%nLFV#!7$;tvDUOD{-`N!1m^M*eRRbF`=!?SOWpBk^O@>~ zrj3LjZqst;u~!-LTSB~OMPWchIi)`mJfg2-(}z+g1*R59SR~6K$w+4Bcfr2t@F7A& zJ6~dwbbFY95)PA<#}vxsQJ23WP33^QKaqN3?jr5hiq-&`^;%YAPNSjlJF>L_NHt01 z)@wy`OHUhD6#lL~_V@|LJPRQiC<%^vHIF7~pd=xIgvJgupr&;$M8VTi*i`f z@leMj0d3nd%L3;L4@}Q2d5z|#*KAnsOvy7hciowyQ?_OWqH}i5_T~k`xy$Rkbf0E{ z&VpUDip}bV)p%lVRA|W-oK3T`ZZ>SW4~&|(ZMy>F?@7TRyH>eiyPnF)Y+AkPZga{l zt7M*4tqX`3{FeFE1k%cL#jL9g6o$a+4xO~RW$h}I^i0$ncFhkepxf?ZweG!ChtIj+ zvb>W0BQa~Pni3_a+1Rv}Y{{cfC0PBgg>8Dr{N7CA0}Q6nj{$+f_X{T7Mp9VDfR4{n zc#ML;kjiejQr2ms=unf|mf<-DaqCz~p@>z1ewk&aV%D};0HWVoXxf#s)ez`jbLw@g zY*-bmYSlc$c5fRgtl{$%zQCAVl~QudB=2(4Xfh(AaAT=gp`e`d9_}Z zc?Sh9o=v7jU&R#2wD7HN>{y!~W7Vt|oZ3!GFI|?5LOV?!^cK_|+nHJO%h9mRDvR8G zhM8qim@BMtZ_dBiCdRC6hp0&%YHZo5vmD;J69_1~s>}{&r?ad6$1CPJzVZS+xpy5I zC!!$2;G68@8x{Q65FB-W>VXW$AnT*EL|Dc=+4 zae+I**dsxdU-^_Z+H$WDel~OrZ6$wz&t^jHeaY*<=0SrTQa(Nkfjlmw5SKH zvso&jsCP^M!rt2x`W&IBCB!Ad0bh3nC8YVbyYQ4m*IAFRD9>~LU%tjFzG)L>EdU(h zKc^*1651Q2S+)KlofIZ9#Zij0z*&lu_Qlb)J!s*UFi~~*ZJQwJHbEi?CGX1n)2Cwp z!kuiRu|VwbzNT7YWs(eEqeD(BKMAq-_V1xqno-1fr%e4V65c`*+iX~yk7|dFyh|cg n1;JqKBp=v}YRnA#LQ<4{H`WF#iE#WMLP}aU{d&OUfeH(igt{>2bNM1&IM{R1hV5bv9f5=Y_Y&w;lpvMaV=#&4 zD&`@L!ElCS9^2vvEO2$$%tWPDNA7`j)-J0FJ1oYo{|@0Fu3-6Mg~l5p3mfzvg@6<2^pvF|-bal+ z;qUN0n=HAqTjlmH_ocd@8B^hb3>e1C>pbL@(2uHNJCOl|K|tRqn?%OISm z1Pv}7hQZ>e@*)4iOE!1vg!iRWpN|P}zfK|hJ3KR_0~MHI?3#q8w}esMSTN`W5fu7B!F9{0FXwZfkEC28!)K3fLbPdYK@liL0|| z3Gs;zmSZ>?Vlp?@dU~8WU7hOWLk-g5}Fda5>2GPBXbIkaC$D=gh8eoO_)t| zHPKC%9`#+o^tLd4|1jt5W{4Be1s&Zad#JQt455#BCGF+ literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/AVLTree$Node.class b/out/production/github-repo/DataStructures/Trees/AVLTree$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..f1a679d7369397877ea69c17a032dbbe49348d88 GIT binary patch literal 1956 zcma)5T~8BH5IuKWcA+j%5kUnJ1c5F>ODTSVph1mI8hn88;DgC_U16aXvTcq2Cm%Gi zG4a74;Eyt%*)5^Q-MVRZ=63GPnRDje`|J0Qp8!gDGJpZBi7AO$7jsX{eK8NjJj@`2 zM+PW z?54ff^jl7|<-3jizVFgLJ*dcHPHHw3`uq?|KeK(ePB6WB-^i*XsYSVRlf8;D&F7fm zyEULmW3DtI6?ifXJXr;v6a!DbKsGBJ`G1h#IIcnAI#+L4pQazRmfA3^@94KC+t97$ zHd0?1*KmV&B*+-OcSSs6(Tg(c3<>?jo`mArz zKXVa+>p{>60L?G~GXdp(+{P>;LbSWM?@OZMxya&lvf?|K?{wavNReb%ORw9A={**v zgv2Eo3zVR!e=!CqhDSV5E>cb^nH&pC|Hzr3oS1WnV!^YaoV$_7sU5m79{SrlS`VtB*=@#d@s_qmA6^ckMh05YPz!CbwMDE2Y{`r=V{s&j)^^m6i61kL?Wq6#>py4wp$r9|_uR|wMj4uMoXMW^ zo^#%F-uHRV`@ZMqcej4_5rEYg3t|!W1+WBP*0DbbH%w{zrHM;3AdMx>fgrU8MH-SO zA;W{x9Fk#Dq+w}N(xjysk>)G1nvo_e!<+q-RZcQ+-+tOGIl0CxuFCNF21KFF_K7StqgtgGM_t41`k+SP40qOE4S$mu!hDbXW^(~OIYH4*3V{xjvb7=kxU|0Fy+r!cYO5>n+aa* zd>TJ!9yVLZ@?Z;tF_9YV5L;S;w_;`nX|CcfDqPGlN|^*i)0ZC2#H}p}i9^GQ-)1@0 zzzQ@Qh#;zA$>&D9Xn)Ip-3yO~1zjqoNN4R~GdXHyYujpb>Dsnd1MlKJgSBl9 zlXkmYkLWmI-d=0qiY)h`S;M3Ej`EJKS;kG!jK{5Pw!XEsmAB;#+KLA&iwAA3D>WRt zw{1IxXJdaBIt8azis?HZt}1q_RaP2i<5X9ZWSE0;b@3Uiiceotys}zWiXx!zXf|gJ zGc?kpEC!W!iX_r4>b{sImO0F_IkylpU8$TkXk|3$>bAEXkksmGD#|TKgWD?9wwb3% ziIrI3zV(eoyPS+H&OkdlJDjs;9>dd13r_Wzxgla0Hjl8PG zs*_8NO{cmmor3NEy=^{GiW+9(^g0#;%bN17x6 zTW;3YQqRk|=fXdMYZ~*yAHcmQT%}FGa~-ZRBxJrPItg#pMR?s;qrFOg7rJK*9`{;L zrRO|?ob!!AXQ%f>r_m;pl`HI{R`94v_+w)zpD`1Ng}D?Qv6@|I8lkYJh^&{P5b29tff3bgN&+H~i71)4CfldbD4i(k zQwS+W$8P^4Lcu!;LurGy?T5+BDl+pR zS?MJ9jYPf$8(6hFv6rJb9>NeF#vyFN2w6PA7vMAt`x!izXSa@FDNMS!tD5>EjpQZr zk!SZTPl^`Ut-gs$lIgv{i@AvqMbcVkQ%rl(*?$6sYkH2i9rvVyWyI$6GgIU@2GV4X1>*&hpg9ftRKqQY|Y zecH2=!p54R4_PM0C=1QgSj-~QfM-}hjxjl&Wdt0jzb6S)Cm78eb^*8xB!>^;e;AWx|6*1Vjd38ic{5EbMMH@HSAgKQz?w9H7 z8RCA0xL+ggbHx2Ralb*_ZxZ)g#C@K)FA(=T#C_?1#?22x2lrO8CUIY(0+u0KA!t=t z%eC0AR#2(D$3VPN6jl{^swLvq1TEI4duNJ6(xZinvWU7k7noe3*74C>Ftr8=trIE zDXqSY=4hp7WxF@L&^v+q7D~?mm&_JH@_Jwr3t}fd+Su(+3z<8g_X%9*vpLS^a)P&b zoi*&I`CFT(9?q!JYR|jZ&Z@VA-bl2Tz;z3L9XmDcpL~Zk`3iO%T}Kk+10xWYsyl&& zVz>CZe$HC@p|WLvXapP!F8S7X4mnD!!eulvg|Mn@Jm|-`zr2c7a1pB@i`gWq`^K@D zF`+OkJ9f6(_)VC$$@xOTDM4;bOH9 Ovky|o&F{@7xc&`Lf2v0S literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/BinaryTree$Node.class b/out/production/github-repo/DataStructures/Trees/BinaryTree$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..58129b1de81a1fedf48fbbaf4efa25f839b1ff46 GIT binary patch literal 665 zcma)(OH0E*6ot>Ek7$jy*7v(=ebq-@xKmuH2!)~x#r?F7ni5l)B!WN7MG;*11N>3q zxlwRg37mWHme*ieZ#vokG7chVY$reSHL@FZ7E>>Ms6|%QF)(Wb@G%$BD z!$tSjD0q!9H1;&mQDh>8_2wBHuVS0D%6 zC5a#WsJgGP+|Pp3`6EB{<70)j&A#1@tsBywrnJSTADWBgv1RPFZUy8oH@j^e+-U1d z{kxbI7BW8TAYo78s+-uhIrn9t_;;4Qj(*l2Mp5=KhBXg^D0mpch=-y`2_r7n6{`Qa z6NQr4)dL;g*DqTg)8?gQHU)mE&pax8ssTP{4oVo9DZxl1NzzCdpi~mtv{pnOXWs;? zCpgG3F4netP_;KWwfP=0HPu5_Bqx%8Wru@F>MZiqZSJ*0*Ihd8VH$NTU>{TbQ~7b@ en(R&AbXS#TGvssl&9ZVZhhfG7Ib5v31HJ(3$g6#nkayqV7MN?Y1Oaln?Xw8IRg$Re_7Tb4pQMFtU&#mDru474+oSx}U? zBpUr8Q4`!yV?u_UVeP{`w z5X)s~EkIP}HW}6ha5vVAVoZh&KHTHOMg>na)ov>2&B>&hY3wqxSu@MsOe&RAsBUR8 zaz-qd$;Wf~jG3+5kTE$nB$7sEpUBhY_F@I^l0-6*Tc+TysTHG*meHb?MAD4ryLXzI z4aUwcx*6A!iW^-UjZ8w;&ZZ}~D?y)AMsh|!o{mJaU7@z7xppM&L1^wh<~{}0tl*31 zGZ`~UUWKuo5#Q5lq%8ytDuJi-Jn+yk@q5#Tt*Gray7I*BOPUYZf%0a|?$lmxiRu;w ze>NYFo7rqC!>ydzou+jG85`b?){GA8s41x=5p|lm_0}WR)QtL~FOh7^w3~!lJ6cSP zhQCW5&30Ch&X|q~e>#=TIdUMD%4g!{%7i>}(Qtmu-fiqPbWFlz9k(E;<6czj*d)?s z1Qn)_CcotV79G|a~J0s zBL;S{m10*IjP1)ZahQTBNx||K%T*#(w~j<|q+=T0Qes9rZA$V_lH?zTa}{6eMQW}) zTzoVAf?Ucrp-{$5y4El)mfipm38w`f@!rVaMoeLonZRzQ;F6c8sOYTDVt))}H@6-uxg6=)`n zHFUlfA+(?#txUrx0j|SR#4LzaHVg+M0bvHJ2~s1KnGAsoHMCm@?*KF(YRi1ZKBgwk z&2pH0O~xLoG@XHWb0~NkzE2JAs2k`|p1u~ah3EIEr<(-5&H zL@Z(f-kCi_tOV`>OeC=Z1UX(NQ-wOrvB|k!A%Bun`z;Qw@t8wvs5En%o7kxH6RtiJ5b=nYN z*o<%!Q-@I^k{t4Sk4@HIX}n{{#j-+TwiS4TEMCVs?)KvdzQIvkz+3ngZ{s(-i$BndOE}KTKcQSWr3&$$3gUfLi!*8- z&Z-6YP%XnpY9&5atMQ47;ZtScGnK*@>LGkNl$a(F)Z2-v_75f|B|9;_YA@yvC1xc` z22jkDoLu2k1K32Vw90oGs-ileN~!})P<~OI8a%{VYH->tz5{#2tX>gXWr(u36o#XW zxipiDk>QRp6$QNVEqwTn9pigO^aqsUM>fEpSZ)`H@8==pG(Cuy(tM&+)Gv2BL@8gw zE;zeaxc&dYPr&?1IW53K2WK5;MiH9ig&?t8r`Ov2-STF)OwIA8;+^_g z{iq9(o2L(BPC!3{!p)~KmK*Lq6pbtHLrEXT^`TUBH0lg@mGNwAz@LoOUu>5b+1mbQ zsb8`jkGG8v(X3~m5Sl{C4J93c-`*Qx83_Y%mN{6;uED}!c$7jF)2c?fF-K{m#lpV; xH^Sn?rQGpXelu*>Vksn+vCvf!%2YA2j2j&m7r!O)lFOJi{4^4km!HuJ;D1)#f{_3K literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/GenericTree$1.class b/out/production/github-repo/DataStructures/Trees/GenericTree$1.class new file mode 100644 index 0000000000000000000000000000000000000000..66fb12a127cf8f612a0fdefccba5c888ce8cfc51 GIT binary patch literal 223 zcmaiuO$x#=5QSf~npy>Wgd(mDf;aFF7ve%M5aUo=LJCRh;aqqC4<$}_?wn!fG4S5U zyg$zufEC6PQeq^KotxGh+EtbW@;y27mAQDLMXeuNV7hh2HlcFmk>b6%Nn`@EjgI;p zeQRRtDX7jL)K7T66qp5gg5Pd5eT)Ia1*C-5d;7#U*iPaa)Ed~Ew@CP2Kj}1KX@eobULV=At#_Z!BdZ#V{9@|w=wCT0F^qy<@6VvDcB{$1+&{r#FEWeyd-O^XyX-LlY)geR9S>vr?p9$gLim9>vO6RxPJj#Pv<%S literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/GenericTree.class b/out/production/github-repo/DataStructures/Trees/GenericTree.class new file mode 100644 index 0000000000000000000000000000000000000000..20cb03ecb2cd3c0abc2816111985f08dfa735fcf GIT binary patch literal 5739 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/LevelOrderTraversal$Node.class b/out/production/github-repo/DataStructures/Trees/LevelOrderTraversal$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..9be8ca9a5c1661adca01fb256c2fb2d5cdf21152 GIT binary patch literal 678 zcmb7B%TB^T6g|VMf<+Nu;1iVv)+jFAY208;NQf>lF5C@e#FA2yY0H1PXiQxA0e+P6 zOm*o3)AZcAGxwZ1ckbuc`v-svG>a%;s{{+%X0>Br*T9~IhJ^!x+)zeRKybcYGO!Dimn>N)9^0^^4c4{ zP_GcZcwzHgz?oZu?8227c+s`MS!;e;_xO?iJE{NWo)@UQcru_hIq=z0wKsL8|0uO* z^54yzaYvFDsfj?TKaI7kZaq_9`=hzDv7AX8%c$5`!J&->6m2Y_Y@>v-g(HE}e?62y z#Ynb&8I0QZgRye?WZ9N!q&2S)8l0%bf#>+s5D~^s8tDzFRE%ZjoHTt`iL1<9GO~IR$uPD!TkKN--@Ce-00000 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/LevelOrderTraversal.class b/out/production/github-repo/DataStructures/Trees/LevelOrderTraversal.class new file mode 100644 index 0000000000000000000000000000000000000000..4702f99be9fa1a929b8a3f3bc3e16e2bd3ee8588 GIT binary patch literal 1560 zcmb7E+fEx-6kTULwy_y5wF$RO34tWFO~3?5S_&aefFy1Wq#{DfTMqUKOfrnoc#IM$ zkNuEJtrV%sODgJAt<={_`I&w}F6+!V7>OvN53|p0@3r<`XP#+ zy;fBMR>|{}zwF9-UDdhk*J^=4vAiM!xf%G4O3?6Cy?EbOv}JXm+zr2~{QJH268i(d*Wx8SFYFFPxf{ zggyJd;|1-E1jH`C51XU3d*q5P!gU#a#nu zX}b}l%`hU%m)-}PD=YHGml)v+ICq5foZi}hv`{#N(L`*~yl$WU1(|SdH(~x{h!^kw z)A+FvzaMeV2Z=q5UhWKWJVzGIGa6yFcv8%Kl(h(S;ta+(GcZoC4j6CIDMXfYwldFk zO_H$&M|^U;m$1P`2%0UwPQ-H9_6~)%9RPRnvY7w5sQxxv#dNp Q4HPIN2+6KugY*F(0Pa6gm;e9( literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/LevelOrderTraversalQueue$Node.class b/out/production/github-repo/DataStructures/Trees/LevelOrderTraversalQueue$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..d7fb6367785252711287e467ae8df38352cdc450 GIT binary patch literal 712 zcmb7CO-}+b6r3&}tGLLDU!bU{92BD%<)-n1F(Dxkqw!v#!jg4Ky1V=@55&ZSKfoVl zoPt*mWV7@7+V`e2ZNGm$zW~%xSwaW9Is3Tw|=5nF1a{EqG`{jB9g=}`KQv5Hm2klYBQ zv^N-%G#w4SuyQF-Ta1Sk>02-GqC0`>lLdR5r!TbAnAyp-yg;?%w=R{+u1|yc*0?AA z7pXmy|4k;1PBwXwdK1Vzjbq(Y51y&t`_JpeNKT}K99#!$IC8LrWd|8#9jqd2<5=Ko z@xv2v4R6ht!JyXZj#Q7wm^d+(&KF`snfGn;IVAa08WBd_EK(rgx<)*6z5_bQ6W5sy zU?IU+te#CFsvoebr703sF-6iq>Ya-gHi%nD5pyJW>3NOqc@&77oGs5uSToCAN)zgsNd{DYB4b(P0yS;^PM^0x$OM-_4zA+A-ss85q%o^V+f(I3Jn;jMiSSR zxS_@~Jx3OkOOB*W%N=RWJ2~krImV83iiWl5Nl$jDyM_fS zN6ftGjtW#Hx|ey`gdd_dZRX{ix4lX?W7T5N`m~)jtYyP7)&9sBb~j8iNS-be8FWj*;|S(@OfB>DW|GW4CZjW#%M!)21p$TZwsjRRic z9aEUrF@whfgQxGFhLnyccq-8Bhq8?PdXfWR=GVtP(_+hYq%o^w4)X${T`3DX7V%6& zM#mDK>sUsMjuo^B^q-1=z}ZsF`PEICF$ptl4tbjDO*~oB?9|RLmamtNC zLFP%NHIe%J^0I2trT=fH!Qt@#@KM(eP$yX*`3l7Snv`=Bi1_n=qB6(v)MsePHD(rZ z%=HZym-&)3@`Vxnb9^X6)H!67t=uKKsR4^WZr?b$>46Cxq3^nOC6z*{U((FDFBI{Oh-Ul1d(x^EBqK5FXE?4x!c zXZKM@OZ|78=~ZiR0k!y%B_3Gb{eG_)hM^b^pqlam-?&!9X=%k3bmA(;DO2d;i1y+& z`mjc%$uw0a?PS}DF(O-72J$}2DT-Bkb}-Ltw5ogqODDB1TIv!0iMWQuPxYF1AEGWq S{~n%%7^RtO%=c+P6YvK@sBatq literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/Node.class b/out/production/github-repo/DataStructures/Trees/Node.class new file mode 100644 index 0000000000000000000000000000000000000000..4bf870cbe21ed8a57d0efdebd7b3a970385b3e54 GIT binary patch literal 1988 zcmai!ZBrXn6vzLY1U77!(1t==(pFllhCoScp|*t52P!2P9yAmRO2;L+!j?RBvq9@S zzlbj!XLwyl!i>x~zG`RuE`9;0qyEokErutD;oN)AJ$vr&p7X!?{jXns1u%rC2F_x* z4I$hV^O25Q2FKfCM#Phn*=QT?U`)qd0|ti0+zaErj1R<&8+eG1C2&H_BOQ|lIwi0Z zX)#k`KGBiU5GtszTn(|zL(8?Yu2ajoHAhvG^NymODd$y6LyKdtturc=XOIRht)X?) zF4^uFeerbP0*7&iYUs$=B{fqkt}18VS}o8M&6IOiVZm~2S^LhAyKYyR#4c5p!^AC{ zR-wk=_N;5=Hm0qLA7@q^yX2-zvrb+)8iH{-s@-$WIm-7&8tZb^^&K6aBcnD|!S{sL zm6hi)&udDK>CQZ}HmzjMwF^lCZ>W66uDZNvcQfpZ%D=!j4*g>En5vDXSa!BggOM%Q zoSd4ly>dul=N)TPIaRALC>$m(B5vY5E|@rn9u4P??1hBBW8#XK76fVhrn6Em3A zaK^h;!78mK*-5*!_Mm1LSU3}N_>^tymC0u&vY6NL*u(-BP4vmx3B)y=KCCDvo?ywu zGCnu)1y(ei+&g4;^_j}Cd;f7|UsPRHWT(nCZge%OW|xz5(nmrmtH?69T9t|_u_5Ov zo<__;YQ|lSAJ|MC7aw-Zjf?X#@q>ZP*y+(X15p>AV90yec~o4`$`iI}w{iDW-!i3N zwZEmPC{B47jw+TnxoigT!_mw4c$P0c$ba^l7Sc#>qyRX!LX#%b_Hs3W0RI3Zu>&m; z+eY9eR{>n2jd)pxm~j|wxQWa3bvL5%uAkEoSuvL;n(=e~$S)-4WGwMB0zcpihu~{O z6T1j4#dgrLjo=mr#2c%lbqkj`)tdwKEu0Xq1PD>kBf5+*=eKD`(18^1afkZ4hikZx zyBNnK-e-?;@-5{g-t#Em=hv+WT{OCMvQpbV@psIxNoHYs#bR)%Bm5KEc3~{-cqoB7 z%xHTZkvcl+I4N+ANS%>;h&?<2NJGaI3z(tur*WOn=N6xapqY(>d^7=Ku_Ar+@}ca< z`5%Bi)Kg73r}pDy*`;|N`ItD1#CbxT<)d*D?F8YI-H+2$ooLgM(c@6}*m={dIJIk0}mkenV(_k7s})Z0;RB zES=deqkPJdz4X>>X4m4@-`j#5@-#Py6P#~Qa|I$7iCm(V%2eTVD$il7UADG{C49{v zuy4F;^b+s_Mlrxw5)f3s-C=g%Dh7F-B)uYqhUXe*B84bIZxGRO{S8KReE26i0^GU5 IodAaZ0cdiHn*aa+ literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/PrintTopViewofTree.class b/out/production/github-repo/DataStructures/Trees/PrintTopViewofTree.class new file mode 100644 index 0000000000000000000000000000000000000000..c27001bbc648c9594fcf013b4420fca0e48a50ae GIT binary patch literal 1052 zcmZ`%ZEq4m5PlX84$jjeNNcIJ*ZNXkD)>_0QsakenwVfUfe;(NxX=Z*Ic~{uwCT^% z)RNf5AK)i{k#Y9GU{iV@W@ny#=H{8%`Ss_=PXL>EY2hkXOgI)ISWS{y)8>weyB6ZO zm&ARnCy=*LKv5$l6B{NTFvMR;PX@0UqWMCD!FZ$g1;bobdSZ9jYYM;4n=T>gs%mk! z!F{RY31|deIbbMM-|~Rh0)N;FhQ1h7>b@ZR(U)FOSN(<*N2;x{Eh^CC(qovLU}6Z9KsyLwQHJt~#RD9qtRqBkco6 zdQPDF&LIuWQEg{idfY#DbTJc8Z9Kzs8!xn~^_gWZcEXUFPWnUhK(uH$M*dwmZCA7@ ziutnBrE@KR`OLz}>YV@nRy!U9qDQ-m#0S+yho$Xgyqk}3}#=ihfBMV z&Cgy1J7i222&=GZ$MqKh)9*qyMNx%LMrW)z0{a?XUnd(6!8+39+hYPUxIs}8SlK=n! literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/QItem.class b/out/production/github-repo/DataStructures/Trees/QItem.class new file mode 100644 index 0000000000000000000000000000000000000000..40c6118ac0174ae84b621e9932bf4d5ebd275acf GIT binary patch literal 469 zcmah_%T5A85Ug2Vf~z1tP{2px1u&6|H;osK2?;?BWD}3WGRhFxHN&iamj`0v!4L4G zjI|q%Bp$k^d(u_a-9Nuy-vBO9DUp_0RX4hI71ARH-yZ_F>J66p&iwGEFfkHowjIZu=tXFw3I~1=Zb`iOolI;r z9{d1)D8rkD1aIqM-uun&{AS;K`}_0v*KYv3cu~WXIvlhd%;Tx8)-619AkenehJ{TF zTQziQ=n9lB^cMj!5U2!6lo)|>q(5e)qvS*jxPv&><}gxes#Afj;Tx5yQD&w=HZ?l! zjg2OL&?g6x3N8*txHJ>xy%vp_XF3)A+FzWtHao?~2i;?8 zJwmi>8GoGz2z^uF6BB3j5_=q~g=w`^mWu7+K7~;GCh^1SY-1UD#i^DL_>8Wzj1QFIp&UBG8jpR%(fah7;+zYN1+$XQH`U;5> zx$ke!ApIXG`ErJ`U!I}j``;mdqB=wEww${y>;4*#eq*=91L86�Kiju?dfp-NY*< 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/TreeNode.class b/out/production/github-repo/DataStructures/Trees/TreeNode.class new file mode 100644 index 0000000000000000000000000000000000000000..444f4e12bd944ccdde7b59ddc56bf6ce6f633e9e GIT binary patch literal 424 zcmaJ-!A`A~Al7g(&VS+*KK%L6g-;0O3o z#<#%P!_H*hzIpR@e}2Ed0i2`lp@N2sGWHEL4YV8_I5=dmp2Rx?>oeG?m}rKR!421Z zq*amVLWxB$QeuO{{83yml$D&$sIzh@GpVo0+39yBzj7Zwj(j-S^05uihYOG4 z_}@htYR1}2c{c6cjprhvm90)U#woqOLO)~Cp^=0z16NGbiRnWqaffi1R0JC(;zsxh v7Pgltg&})b!dk-qpn3^a!hpI!{Wd8VHPo?32sGDTQtO1qD$^tcD{uV|9W_so literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/TreeTraversal.class b/out/production/github-repo/DataStructures/Trees/TreeTraversal.class new file mode 100644 index 0000000000000000000000000000000000000000..0fdbab458d0a75475092bb804f55ee51842d3f38 GIT binary patch literal 1081 zcmZuwZBG+H5Pr7M-nAUGw6uz#loz#7rHU055KJUSk_Lzn67`GQvVkMlJF|Bs@n`7= zNHp;W_;>tnoY|{Z;@u^)JI}m5GjsRj*Vpd=ns|}JIA$%(<&eTWi-jz1f0rod2b@kn6!WpJzn@-5d_yS;8(=|kD} z2r0ILj`WVCc3JO(!_lc53M{m?Wh4(G-Rnd>t-{8kR(*M><+;+K^wueNSGvAHrS`sc zCeLNVlm1DAqFn!E-PD%)gtCOD&!7=p6;kuu3^k9{?=dSk`9U} z2}~x^d}8(ujgV3pN2?kS>yD)h}Sv{Q_A=axpS8K%5vE z9Ux;dl8=!A)i;L9C=nZ@H&2}vh~hYIQI`v(Em0FIM1Ga%ZxHouOyM=Au}dCDn87<# j@d0x<#XLNU(Dcu9+m*OA@}4$rpW!A&@U&(~Poer7Yhd&3 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DataStructures/Trees/TrieImp$TrieNode.class b/out/production/github-repo/DataStructures/Trees/TrieImp$TrieNode.class new file mode 100644 index 0000000000000000000000000000000000000000..d8d403716d47848d8cce61a248491f242f3aebf8 GIT binary patch literal 616 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 S2C1h=5#v!V9cLhg6aN8@?0sGU literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/Edit_Distance.class b/out/production/github-repo/DynamicProgramming/Edit_Distance.class new file mode 100644 index 0000000000000000000000000000000000000000..ea592ae09df98421b7a83dbbcb8ee6bbe84a1298 GIT binary patch literal 2089 zcmah~O>7ip7=FH;*`3+xl%FkAD7LsR3jMFGxF{5`lokuyA1puCR=U&Kp`EfjyP2Je z#48#TZ=5`sNYI3fF_A-SB;n@8gLe~8CML#%o+SuA-|UuFN;KL1zW06S{rjHhoo{}4 z^xb^`hj7)vZk#ai28J~B%l)K=;UrFB#6TRQQaY{UO#@>%BQ0ljmpS@cgP9gcJ&H(G6))m|q~~4A6C0 z3jG4{YvrK8J+(D;{UN>8qU+N~Zq#Ch3UkfQvSQ;WfQR~TTpDDIgIJ@O5nJoUWER? z(Cn4anb?CCHf7>%%$RrwvjRIKOgAUiFlXXjT$bMRCi1Y^{fHmBK{{M=)1zKc4bwIJ zH7uBLP%z=*ioos-uW8pQ`-QrjiRY2#5Pd*ERoMl+GgSmvB{*pYFe5-6U(xG`u}E1V8=!elMBnPLu@yhYNz6akl4kL z)i~i~HQ_AT!4O^5_OT8Q%I1jc)zB@G1G*6$L64-k+wfOR}nkb#pQUbnr~C{-$RKVQI%}mino4&REuiG2NWwlc_S|F zJpLoHw?%ekz@pD)d+Tj{)@j98p=J|GR8&rEW^SA!|PIR`ZrQc|&8* zA4HuOTGZBow%)IJWF>-Wfk*=VytW5m@V0NpVZ!qo+PU{)kn1tt_=6bbI*B1%!b!ft z!&t%y$~cXWa27X_!!3;CYkJ(r6n?}x{7k=J81ox0MihLC?PSa%iy7AHr?fwkZsH7H zq?BZaLA*rCV4hwapwz%@`*4tw$$BAs>VVE$=Hn=q_YOWmCv6FSc|NaaCY9(yH_s%c z9!h+%@jEkSI2ZBa= z9->P;k{)7+awFHrJea;YPB8K>#2>J1l7PNin>2!=&;rceLwx2g5^K&k?ZRl9q>MPpW_`5v~-tYLd<$0~Mq^Pfs_>5)Pc7fW5mu2onJ-I)FZtj$`4 z@G_b(Pm=STd7A(`gt0&nT+HH1M9raEU&xYdFyb8Pf1O?L;fMVQ0gN%~Fpg4E7<-5` NWeA(#V90mv_&;v>zl8t* literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/EggDropping.class b/out/production/github-repo/DynamicProgramming/EggDropping.class new file mode 100644 index 0000000000000000000000000000000000000000..1e343d7fc9f2a8de48b1c2c457babe59c2413c7d GIT binary patch literal 1239 zcmaJ>O-~b16g`i=nSr4qv<_-Z@mmYlR;yx+it#fx0>#v@5RD9Ftb=Wb41>`X8&)n| zxzZ>mCdP%jP~*a#iSaM^3tYK%VXWuPV1UH9nD_2I@7#Oex$kDa{{Hw0z!4lXVPdy| zJ_CDVi>+46#9r(((Sd9S1~6!1KXL{R7|09gC*7tS3=71v0}}%BoHyeLY#ec$&e%d@ z+VQX2({&<=5wB|3Cv4wU{t76A+wQ!;_L1}Vn|8ykj{9ECw;K(&Su0$q)z16g+#Kx_ z0v*JzGPX{-mMxVAN&>>=r}kN1!*}Kv>H(d5{F?k40_{$%cCqexK5sWUN#=%1U{~*q z+H-&FH*A;O-t6SatbNxm)NK~71iq>nsL8*Fki%(EUAFy<7g&OXU(Xn@jIyTZ)R1(mQ9`2^<01*a@Z$u4ZFH>?VEvG)C zt!-2eX_l5+#^#)*6=Sio+N3NmY2roedw7^$Mo&%_E%GAxhqe-PQybDPo#*2!%F+|E zEQh2eEqxisBr!Qtw4|KLN5>Ye574HDGm)QvhR(>!l$RvyeOc1Ez7A_Y&83Rz{43rz z7AhR03Z<=+8aGi}n(B7a&Y~BGuo=g>pC)<6Hj}l1z)4l$D~Tp6UrJ z^zmIXL|t^YSV9-VAfg`TC$|0$&7Vj{#xJys7S$LLNeHr9{6j=O-O%UDtvlD&C)FsW zpK_xqxy1^S=a3Y5frDXF2BS!9=M1Xx>JBAx TF2hz?L`<}=v`4VHinHqvzw+Nq literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/Fibonacci.class b/out/production/github-repo/DynamicProgramming/Fibonacci.class new file mode 100644 index 0000000000000000000000000000000000000000..7ec477c9a538a7e40076e37905cad66f53cb9b6e GIT binary patch literal 2235 zcmaJ?-%}G;6#i~@!-i!60Sy`gMW{3p3;jXWO2CRpL4H>Jg{WndEO9m2WR{I1o#~tZ zMEh7Dc)_%zabCEdixqmIPYo9-B|i;j(Avhv&`Gs6gYgopVgD>{rUC}qGM(ZWhG*R?!vBSb<6SyVL54moZDttBE5il6B$SMW<2P@0ej`hsr zqvTpodEB)~Ba+JGgQn`s#j=~Rrfk{5mZ@q>hU6>_#L>-S{#*|c6F60M%s8d8$8K3> zp+Z{2T>~q)Co`YuPEpY50;bQu+m0@=}4otNfaTLC_D(DXm zE^lslR)M3JsyR^`eO)6s_mhbu9a2vn2d+RS(i&k0vr^as#}moJN@PUIbT=&C7*-8Z z_?@Xrl_FA#W$CSzUZRMD;Sf`WDTi5SrV>jsC{Hd@iBg(R&3xHfq#mO*)FG)}R)MBW z(eZd|HfF8O|DdU~bu@X8XmS?O4Af(-dh4*V*4w@(U;&lqIX1oA9s!D z$Hz=05C4cTzpYHNhtSF%l$F;|cM#q|!`$E-XuF7vy+&hv7y27CRo)D~9h8YO0npB0 z2k}LjxD!Lf+e>S2B{j}qz>n$1CrA)h3@4DpSwa}3U8Ut5Ir3WZO@eyGb0I$GU!ys; ziRB0!$6jDMF0sbPw~!o+OR(fsBQhA5!0Rn*OZ92>5e{&X>m^c4$$xWH&1L?sV1c%qnDnWQaAMJbnnG`@Pe>t!>-fT-3ZVyd zBmDM#>1%IK=QplGb1GgYgVdpuionx=Rt?W5QK7{XTW|fJh!v|EnC{T8&F5 zBQ6lPf@YSN3}o~BYYe*B6FEekr@!|3N#yNN8s0O1SP1|6ykia7x$3Rz_Z0{<1w;H5 U%~JHjZ*}EvwQx5|TL`It0m1gst^fc4 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/Ford_Fulkerson.class b/out/production/github-repo/DynamicProgramming/Ford_Fulkerson.class new file mode 100644 index 0000000000000000000000000000000000000000..97e5cde5c2299b2c102544358f18dde62a263f5d GIT binary patch literal 3144 zcmai0ZE##w8Gg?0-Ft7gH_c`@n>HVfDW&bEk_1VPa z-M!lqK}B1jejy4Xf)=c3bcR0-x&`Yn@Pj|h_`_kwKh7|YGdj-L8Ts2@waff)@)Tku6Z6oe1QT5uB{mPb>^Y!E4=CCAbb zm-}%Ib3quG(J?P~J4ogUNiE1FBXzPGazS(;A4DGtk~*oO7{o@*$U|uz9GsL(SsqVm zI4u<)k(@=jd`ZKj{=^6K7j--q#Fz0E9bc8kAD7G5bbMXI83Cn~GIIiv@e}4LbGYo- znc+!ta#nFvz@I!gCLodmt$Xvil4ItaDKk^H$eR+-Q)a%-IY%;qiRR%uJa@Tb`>-#hJHD0$axSE#}Ou zojO#^&lSyV*3QihkL8Q$V`Jsaf>kW#bHt})O`G65V>2H7j7hCYr%2^d*R@%kqp`>u zVu5uz%Q>AdE{wUL1F>XsfH4SLAmGefMFLd3O%xbY!7N%iM}n>=YRXDEd6_41QlPy- zaDUk9*@yyZqZsOe5py^`&Z;Gvxj+t6GU>4kJu|YMQ)$jzn zSs*y+VjQz&Z6nRK8j?vfI4PfDqUs5(cAADK4LpT&QsEm0K8afld=uYdA*T8h{UaK_ zZQwh2+Q6+CGVm$H1va=w8nRf;l|bJC^O62qXZG8<{)RHsnt|`)83T9VPDy>w!1wX2 zflo`Dp*k=xT@uf827Z9&4g3%<2z1mn*v$)8dfYBK27ZJWnFj+e;l~Dkg7dW)U3k?z z8+aM782BkJ82A}32yFhp4KCZpbmj?K!>a~2s^Id^r;ZfTp8yjf{xEtVWB%bt{z74;g!&JQPZg|b6+%gnN2HpbQz$eHu! z%k)~mcu02s>cxnQhV~lRweiSEhgHK3m31dsH46nRmlhaYOQE5yy@=|Q(;G_;{1372 z)WkQk z=+G|h&lcRrHRj%*llP;|&Z`Fa7Bk7!rzA zBm(g&ClJ?EkD-U!B%xA8^9ar3XmLH%PL6sR#*s^C4X>}D&9A?KPzCK3gz3H>LjvoG zwT)4P(290+Bf=zgFm+KTqZ7Na0b@+!1iEmTQWHHmflYi$`x;_Chh5Z^8R4Vn#q2-h z<^|%-fFKzPvi20AO)Fnv}LODk6{Vw86~$SV@G46yk2gD3mvA+_Wh4;3IZ;b{LhBjP zqk8wtI7**`QGL}xJgQ6Y|H(>ACtC?xs}@dPX%BB>_1vnpO*h^c(U(?U?b5obGF@}D z??$UfhoXUp*$k1W9&fxZ`RR#9jx_kYUTU*KZr^kSlJ!R{q<@aoft#+Rh${;cg6Ik|Ubocs|N5JHzpO zni{|6fWE`g{5{X_b0Gi7@8w^4>+c-LE42P0yX`7&7d|A!tr!*elAggXF^k<|0e6Tq z{BpfS`Zeqk7qM5okA31#*e^byM>(5kiE0yj`7ZiW@FWgk4=I%x4r4E=0IuU0_L0(s z#XByAZt)KGv;Y0{be`OMc=rnaiKKhuL;M5x;yzlrioal-HZ`!{agb8}keVRH&!hMQ z4w3TVezH5cdv-s+YIl-$AE0ak>#tM&BeZJxg1Cmx>*&)k^%4K;ApV81s|fhoS2&?9 kLI`S5#BEx`VZK$@@X&P%u3>D2Pn(|_5(AEK_2I#P1F1gd9smFU literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/KadaneAlgorithm.class b/out/production/github-repo/DynamicProgramming/KadaneAlgorithm.class new file mode 100644 index 0000000000000000000000000000000000000000..3dca5b4812067381d1b16e7d89bba71e5d449008 GIT binary patch literal 1265 zcmah}%Wl(96r3B|F-={dkCf6jJX)Y>O5?sLkGA1aK#B-ZDX0?ahFjN4T^ze|Yy>+N zd<7C4gv5poEC2!G1K6`*%?I!Yl(`O40aap=>vQJZbI#1f@|T|KpC)ZlESC_MfYP>+aA=Nu6=~8nF-m_4)x#um-0Pn5rtcrEWyQe4ejE_!-epq_Vz=Q^V;lQ( zk%yMuaDE}Z`d%o*G2 zl1~D9v8sj|jvuyM9Ot{*#kUyHAe4nX4>Gg)6nq+`cMz``WYEnsn}S{FVQjT8pcj42 z_9+92sOGO6X7D*z`n;r7dbD|c_$dtSm9{uE{2WILrJ?e@N+GYmK(;Wi7oM?Jc_PHi zo$q=575lVwR~em*`_X|zq&ProhnWpx7(*E0c@jr3j-!|$K21b%nrrW6#{jc#jIuUJ zRvK>%G0L!Rvv-h42RjRlbj|^dFm|}YFgZ~OO5b6d%9t?gH4HW!9S?aX%*CW8b{-1|50hEpjY$Dr4JXOUN;v zpyWwfSf-^m$xTtDO>~CzXK|kLmiR?cLM!dfeLOGO-~b16g{u=rc;JOi|te>Rz>`10b4DI37{@C#>QevYA}R_JlY0F`awzoi7O38 zH}2TzmIWI(x=>?`J2(C)@VqHnO^j{l&3)&dd*3~0CjD{ncLdwPnMlFn4xG3PCaqDjDx`2^P%?rqzjdDdGly~cudmFXoO7p&2t`a$xZwYIKGtJ4C3RmMfe0$s`6BEPv* zPC#t&()R}fzO5FQMedAERV7yEqbFz!M2bNB7;j7E(ejtco1Rq zS(pgo3MK^x|D#zT+?l7a{J2u0y50^nt6GmJtEQd^n8~&qe^eB=*IShu35^ZbIc;rj zBQr-~Ey}B?8eNTe{r-jptTj!l(iNG^rRFijCm!JI02rYCu(@_~m*HLTZjO9{c+bFx zAXmQ!TIgXMY!lFn5O=ngPlUzdAzNC+b`x?bE|+=%tic{HSRaApS+5YsAbmW+{8a=F5aL6D?@(JNEF}07 zf&uG8-BW$$AoVa(vH=fFh!FlL9yiz4Nz b739V|2YjrEc&-?%3(+mDTd<3MhlYOwACAQS literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/LevenshteinDistance.class b/out/production/github-repo/DynamicProgramming/LevenshteinDistance.class new file mode 100644 index 0000000000000000000000000000000000000000..03b0cade40f3bc4cb79d6162805e96fd3e229ed2 GIT binary patch literal 1769 zcma)5ZBJWe7`~pKw{keZEF3lpNPXE>UIwGgZor1yK(w>02oq;WWT)*39BfaU_H<_7 zm-sK#5EBwZOt!>s(L_J_#UJB$m&JKKr$w0X!K8ie>$%^b>%Pw)fB*a|fGfCfq8BqJ z(R&8QrA(WM;c67uIxvel1M?=Ln2F-LlsBSSh~j+-Z<@G;+tPVaq9p?#7+4n2uY0~1 zEC?vc(G3B0u~Kveda|DH-ffigZtb3vFHsZARtipO!>M`l-d3u?j#n2*W|toMPT4E0 z)+*aIr(E{@?WwH$(Dmy(f$RB8UOjO9f;%r@(B_pJWfo3mGMUkgfN=PiGS7cOpldyF z3SX``)x*lHTWFM=z}+gg6A4^QW_O*3&Q!@^sr8`7it{HmVS0~gclokHr5?z4oQM<9 zO0K`fHbTiZtiwWEWrs1!=4Qsghs;rSJYS$cxp^{6$evT%CLg`0m<7!BN~2bAmpw`6 zxl`zwl$}}VgUwtb`-IyKuT*qv0>j7BCJrBw$h*N; zuInc(|8J-QXO7y*<#*iz89SzG z4Ttk4$J@b9xM-ZVUf6MJx9F-SGoy>IM?9(rE;mG}G-$V5RC|@FRZclzI@c+4lXRzA zb^W5irBha6^u&DH6frOwR1SOUOP+M3M{oF`*DI2)s;tk3POHaH#|Z5u?uUHR2HxVg z*2}LJP$A@0dG_-*MagkO8+!)vgdl>mJoQi+#W`ZD<$wXic{Ak#P$PqD^j0Y2@xeWq z@u59v@q@uQ@u0+m2SW$6Dq+TcXkoO8PG+2q99|1XrZZtHZ&joDfg>bR}*{0<#T+SrG#rj0P6txKU6Q?@?&FH(yk zrjF=2G~0NPd#tnSld$&QfI7s8VH%I9xx?9jGch=oZW7Z^!bV6;l5&z1TqWf;mo#4>G8i@4Mr&9LtvWJr z+7Tp_*)FmtiAIRHPxz7j$We4-AEQJH`}`JTtf_|MNx^)@vbuo@{)8}~2;c?!ULqpe z;w7RYF7JO~<^_A}z$JFlTBfg=Q7+SLOwY#jm8UR%LG<%y=!lt3baJ$vF^k891YJCu z=x(BiZsQZrai)nkj<&b8YnPdBnwvbsB3E#YG|Fvm?b<9C|1xh1(&1D21=CMHHNtkL IX^9~94~^Dfvj6}9 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/LongestCommonSubsequence.class b/out/production/github-repo/DynamicProgramming/LongestCommonSubsequence.class new file mode 100644 index 0000000000000000000000000000000000000000..b0bcf9e541e301943192deb8f8400520de9eae94 GIT binary patch literal 2516 zcmb7EU2_v<6n@@hH=Cy0QqrbSs93)sA5BUF7HFYRQYlEj$A_MGRO zeSdoR?L7edQSe{~j(9MNqi!6Na!f-+%HtmNAf{p51GkNMO=>6PZ9?8ox^c>l*Cp(9 z3*wk`V@lemJvf82Zp^rmaAQ`Q-q0|o;hcc$a5|SRj|w>bfjI#smR~Xjw#3spbE=YE zG>fywVuluPJfAc&b4D>OpX)}YyqqoxgyZAab4E6uJX6f4ibgh@&ZP$8`CQ5@m1FsA zHlIsW7E9*46*HGKNBGW^S&qjN0tfx^72}FAkTDpLC>I$wve^>YY!VP@UZ;4iu;@~` zI4Dcpl+5-;DU70obj~-$&`C^7CRv&^Sj9E6F+b1bZHcmxygX?XtbR4TsUf7{ybZPM z6&U$XO)y{6KAe21K+mSKj#tu|C9^ofakKiYkvB3aV06TNIm#|6v_K*s_u>Uaxp>)40=0^6SCvR;smOJMXOk~)@P>Uak!f%fsl zMB-#(W+E|ja(0Flw~mj^&POh?F{IU&hR(%FA{@ULf>8_D!JUaVyh{D`v91!PFR|Lk`?!zsUL;_^6f&nKa>h znv6KmWEM=oEjKcpg>QX`{o0Yh1p<=GMsbWe75}L~jL$})VCI$tdi}A@3)0vE0j+3W zF^eS*cBlVYICnYU=%}j+kYC?AIuh4QWi!ie^A%R)vzIWPA2`D=vCK54k!3)5eJghI zk!O|AY4N==4I3!Pq#2HR12v6&JbQY{$Wy-q^zl^N!4nctcyW8d9j7)x$pwZQyaVwS z6$f_l?y`(dJWpM>0Zj1%pIYQP(!yZJLE<#p{tn)U7WxsYxE-v*aTA^p#V2riowtKt zXBEn1$P!ci_moRvUOzx}3@gqd)u&3+XV}`K_|&M=IlZciwb~zw^hluPaYlXW29F){ zzB1(Uxop%*zfV<`qG6wl_bOaB(Q9S&xul>?IwH!Y=`|dB(h;c}2>2WwkMNN-v_1Ar zuew;+4XeBlf}tMeF0|Y1-D&YP2Oo7ee=YEkvF&Ih$y>-(2LkBC0s3R;#%ap4*oKQl zn3R_}ma81hM?`-ipGM7RtCL>AED7Hy6iU+&Vd*ZL1?;9uo#{DbZX zaEQ8ifL5`u#)R6FNCAh2sHm~rCO)V12_{qdCxpkOy+xvxRk&mo-@$$U4qB$<4h<=C zg}4REEzJ1TTbK;`6lJN()so|+{1iRmhOLU$bE`^iRjsYne(9G$ZcKy^- zSb#6XRp?c;J)T~a69c()le>0u)WoW9CA$u0T*j*yBIE6hloM2#eW5-<$$cA?hv?F9K#1rLNz6eUvWdZ843l5$HE(;| zyJa%ee-|B7;rm$m8e8jJdA(J1lBrJiQ$^Q0hmXeoW{z$e$-w4_ZMMTv#dbTJJPz#j z-p#te%ABmt#bwlSgo{1Oc8}sXj$xh@UFCvHQi68PM1`#QibW5PY7{Mc9E{G86hE^` U0@@)S;%Z}=_Oka8S{*q2FGOr0K>z>% literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/LongestIncreasingSubsequence.class b/out/production/github-repo/DynamicProgramming/LongestIncreasingSubsequence.class new file mode 100644 index 0000000000000000000000000000000000000000..c8e6ba84e702ddd062573d97ce4e99d644b46b6f GIT binary patch literal 1480 zcmb7E+in|G6kTU7p4ge(n!0srJ0+<@9mla7NCGq$N?S@T+@z9G1d5OtPmbJa?Xek; z5qa-d@Pdet^3oUj&_+;I;+4PP3;G^a4eN{@rAQSLw&u(}>+H+gYajcsH^09Gu#CG2 z4C9)Gr8qvohY4s{R?CXot|pMcM+tn4Pn31t!kUG3f!Mm|d*P;lo}b?lFmAQ?q`+9! z^W|2rRhPk6PQ6LwT(#{w%^fH3)P4XO;RCNLuvERh?>jBey&tq2fzxVvexqD%`wiI* zE4~{@r%R;Pt9Rx1J?Xo0jfGl{=L=lO?^Yi=KRD&4!5gwlk{hXk|5|i(6 z6VSRYkNOFEq1P)T3P1A<5G_7UKFpv$lKWh%m70J_7j2?T zKw$h#_3ipY>4yJ;YWv+#QUXoQDA^a-YnLm2rx$Wa(rHoRRQ{a@YI>G0f8^+yl-G)K z>Fplvvqbkf=d(nU5f|ov3ucava%z%*k+00}V20OrnD-noAe3fYN4YEWE%-JI&mn%J zp<#?`ECPoxPTTG~U;^j3i(?Y!iKyT|p~K{R^$%#@Jca%oMs?vC%#F;8#FoBlB#q1g zCKi*10=FL<;_&3vQ^XdJU_HZ-s-{QPW-&y2m|vR}N11;NSz2>^FRExacz%&_TWrcS6UFlguJ zK|8s0#@IW+bUO2$*<3XWNu!kg1@WY@afn#bSU)`ZJM)A|`{bu#MFse~AoVF0zr?~B zTxRiEuBXIDDPV3uJQq=87?C+*Y63Y@SHzWdl~$klFdKc1v^a*Qkt{E7pR6!BBc;78 zyj)NJ1XF*Kev!CmY!>x`UfMR4_~`@ORpg6$=>Q`R>VsMZw z7B#|ZcZ7HZMl(Cgo^^XY8vGTq%dzh{UWco^O9c+9$gwO^>}w>s#Q)4?{`yw%CD!mQ zahJPOB~nCBM<^MaWg9x`9JNwn1Ya{(HoAyAj67B1JYugA7jH1CrYELS6UP)lpu}hm G<$nMzu@HO! literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/LongestValidParentheses.class b/out/production/github-repo/DynamicProgramming/LongestValidParentheses.class new file mode 100644 index 0000000000000000000000000000000000000000..0eb525fcac690cc0cf6b4b1b834214efe416993d GIT binary patch literal 1711 zcma)6U2_vv7=BK7H`^xLHci=zO+gTaP0}VRHHaxyY(;`eTMb5_I@4{klP)Hkve`KF z*6{~;tIRl+n_kF_1LG7%7%si=(!b!pV9@%U4Kr=2%s7*rkN5j|-uLVu|NQnCz%;&$ zB97@O-bP+7XQFrqXLYRh|-2n?58&spfURvrJcz1pNCQEJ!hX4Upxd4DEUgEhA!Fj<=4@a&db zTk_it-)^;BuaPUYy@t~Xs&><@FWJ811#3>n=@bOU8&2>7t$=BjuG?SRxu(q+mB44H zLaHdBxnAA5DIj8Y1s@hSPAUfS7m!WM4{uN zj$=Ab5PZva=`dz39}FzXQ96Oowdv4EwfzRej{b)!b9ZV~^@4N*x0$QdY|nH20(&G7 zt+cy-&AH%8UMF6_L{_q3U<3&kXrPEo20lhfN7=w@SP&QqY1$iI$D)BHd?LL*HBiB2 zmU*M=1_nMu)xcrAY~XWT(Q(zlH7pzW0ttci|8Jf^e78A^tJj@cuus(M7l(=zHG(yA zWy#*fg7zGna^Cmt4VGl3WNU_YBb9Awt69aOwBD1Vve5~g7WtHIF?)Qv?Of4Y?*`1} z*e#CJ;b#-`oI*CN-*avTa+C!QS*e3fWu?xIuH9rK_sv}oS|N3f2-;m@+|9kjiQLUS z8iHWvJz@cUT^cpzlvqVshgNI0I}VQX9me^90R?Oz5?n`l%W)Unwe)?6yFB#a5Z6d3 z9E8cU(KEmpUgB*)_L34hi$7_nQ}%26cf``$=+kaPQ||DjlroRcO+1P&OexCZl$uee z7MpYivdT5uJGBy6RdRALm+`>$FQ|sBf zTF*z!$StHZW+b#c-m|1mTQMVQ{T7TVxo2gfl|@sfKKlS_Uj0@RTRY#G>K)dtgjg?; z43Hc-yFMRF2g zlKx5ZGm8%WlKk$GCwd>{K8m043M25n<3~nGlJ#-?fL9q!VXh56vm{i!PFoLAL+tRV z>Nu(6l+ab z5AdUmZwv82@UZXA&c2!1-S3~zF8~Lq8AxLzixkSTY|65wqoQM*A>{Qt3pda$#Q2703hex3pA5v7kL9xbV5QmO?Dx}%&?65W9!tcahByK(7@JIyy z{tdt9CUU5n(2+5bmBm1Yq4IACLqW=#9;e*%-i_LbUcoBWGPwdHnjDkcgt!N+;}Lmct(hJL ztkI5~l3bP`nXDv8W~+pB6z9oJ>T)V&y+e5=FpEkj+C0+QWZs{jB1 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/MatrixChainMultiplication.class b/out/production/github-repo/DynamicProgramming/MatrixChainMultiplication.class new file mode 100644 index 0000000000000000000000000000000000000000..8a90deb45540c88039118ff9bdb0b8496a42aae1 GIT binary patch literal 4092 zcmb7HYjjlA75>i5ow<|YqL3Gm$t1%gFcU%oV+uk-Bt$KtNhUQ24JhW48IlW=nJ_a! zpte?|t&i4LTdUG)HGQPD4B?0d>M~RfhXjpU-96p^2n2N_?qNA<-yZ(@r(y&<@)O$e8YohJ$TN8Z+h`O zUeGb@ynlLnTB`e&7n|{I556OJzN=$I!uy_NeqYCn@){cc0|71FYbFGW+K!mV&AOqC z6|d_eClO0E2)GBDQz`SLK*^kK#cH$C84471S$zpJGn9%6gcp)&Y`gVj!W^)AJ5$NN zlsPb9CHm^x%}mNV(a=N%TG~3rv!a#10RiWM1CmPfHz?qc3wNWHurf{D3x@XcKua>p z12?u=iCD+bz@b=bk9jCgPGMWJ*NpEqQP-$MG6IXcGG_15c5_hKqN7X44|VLKrGvzgi410}0W;odreXw*iIzM#48v~r9Lfl8ve z&Jyr6_QrD&^mZkOQoXU;Eg7#0I|~-@f34JFpcT6XmR+lH=a3awn3pM>0hvF6L%;79ne9L^C?C=d+9PSgfAZ487r210>t0Ru1Lya5YG42)t-V8wM4R6=;!Kof2; z@Cvd9#xcPd7KuAi7+MVeh z0yWq5`~peAV9qLO&BRh>Cdtfon}dU~L{wnILh1T}e9UDJ3$8ra8u}mGo=nm%cY)&I z2L-9XLm#GN^a;D;LU+s7#hO&5=QN{)I8V&ZhKA67YO-d`Db3%de3dtox9R<6x+8Xi zm$41*w&Ltc>|!}r_QjOP z=i!?%+@(6-HLjl1w{^82XKSBRnE60&{lCCp)8%A5n&wMFj1KvN%sRYPw$&Mj zFVEdY7tGxV?Zrwy-o^Ypal=262CZT5b2{p4-aMmfy=E?D6 zT-9+FoL$x95a&ra(8kfNm^#`?8@2#C5aFr-o%lF8JnTG3IX58Q&>Anm(LD}lp_YZq zmxa4fCy|9`0tM|g&hP}hP5!fRk6>MmCRdxa3s}_c^OtDjFt)iyv3Lc=Z`gN6h>_`6 zxXj|l_L^6*MBo`TkXR~k8H+kbQCL{yzKG&(=Y}jwCQ#bdt&v)$C>N>alFDMmzLDuS zm7cOO_(tK=derb1${l0yU(2XajMu$msB~^GSBqhJ%wHaMOdv3d3Y$3NAilpUk;+TM z*ffgD^76AN;!WjQtRzHY89||3YtcMsc|@JNI)PQT_F*iQmaNWVjoSGKS6Ni?z6q@T z5Rr-x7b(n#V;!SFrCOL4)iNxMNEShPb%i5C#ybGZ^%u!>L38vKbT|AMvn8|i-{gh^D3 zRS1b7Hi-4874@hSjhuI4lh}o@=)g^4AL_+DoMYH5j$(^AhMUDHY!#01t9S6C-A-^X3prD+43L2;4DJ-5dv6T7z+O@{dbSD7=yUTpf zqmmKKhj=|hT$T^*nh~s*(XC;0%b2ufVP7pHoTIcJ8E(1HI$1Lt_6jxy&?pxjw343{ zA%0cVvspB=QM9tsrK?Nr+m(~JWGa|5ZqVRZxsGW0fssRdjvAd(r`BlK-Y~XlGj+9E zLa5bL6<7Ph<%C$;HG#T(HT;?TtOnH!u3QVVgMThX2&a>OKt&k8JJ<(1*z@)%m;qk9 zm7f~e|)GHy$t$+%6yOLqq+snIJxn{4pnAoIpWspqr?`jCx7Rja=& zT;`0N0qg(ou9=PdYy-=pE=pOxvK}qEodrju3O7Z3P5$y>w5zqhmXlxWp|xy8l|C&> zMy0>DUv`k%{+`WR3CmF)tQ|(NO_gX7Mvg3hznn*A}rx>CK>4`_ldz>;)QTADW@5&H2v6(wq>9P($X+I8= z(&*a=`bascZGXpv?bk^DtqsJPQv(X9{UR0ND0zT~-28J^ud)tU oegT`iN3mrbH;*BF0bBVvZ5zX4=`^8QovqWuWGNsgq3%ll7X+!oW&i*H literal 0 HcmV?d00001 diff --git a/out/production/github-repo/DynamicProgramming/RodCutting.class b/out/production/github-repo/DynamicProgramming/RodCutting.class new file mode 100644 index 0000000000000000000000000000000000000000..b8783024cc6d2e957d8d3468c308e868b00a7b96 GIT binary patch literal 1277 zcmaJ=$!-%t5PhAQ@i>!7>?~%9?ZoWPg3TJ1EI-{GHXHc*Z!t(u^xD3qIE2*kQ!MvueujQS$?n} z*PFN|hDg+x9`E;Lmy2uiq0Cn$F&D!?;WZnP!78cs?{dwmG6+~=!+Sz3Yq8!4%I{Hg9jjOn3;<}A_+z?3rS6P908`N1@bIYMXPusO1 z!~5)(5>wi2OZdMs79VefuFrsagL#RTkX}81iz@HI8aBX+Z z#8kF0@}KKySa0bhFp%9D$O8S%PW~mt7sEGF3#%M{VmCrdIKbx~;~xUhK!woDwU4Jf zcfs8l-GX>SqXYe1BTZ)%1GMc{020{4lclCYk4pXugOR{|Qor}nS{T1wO77k}=o9)gL%jO^jXvFZrqTQ|p3J>wDXj@VN*JJv z#cf(WWE&%V97D8DaX-(fY5M0#Nl~0(`olQ;q7*xv!bdr75!+HG{Y(BQKw|YyPZ-b z-tUym_<&O!`!xL)#s@@7TQK{go9G-%y@R!hu1(mR=x$3q*px0wrYUkra}q=BD~(CA fQ$1x`SU7^CJSEBT7$XF~A@(;&)&e8E>A>h8#{LPI literal 0 HcmV?d00001 diff --git a/out/production/github-repo/MinimizingLateness/MinimizingLateness$Schedule.class b/out/production/github-repo/MinimizingLateness/MinimizingLateness$Schedule.class new file mode 100644 index 0000000000000000000000000000000000000000..60eb646daddba6aeb48ae8a03872cfcb8ae2ae0a GIT binary patch literal 598 zcma)3!A`Y!vK_Gn@ zM&aU0Ak}c))1H9QnGK{s&I==XyPWpr{NC?RSSfh3z@PN|d8qQAqOll-RLXRNksK^l zo8v~2oOdRE9811A^KLj`8a{>5(DN5El5yN#Egk;~TnO0R*>WDp>rly+R(o4x|Iv4_ zj+%oEEC;rNH3beV6Ndt=)vx{4Q%?5;`*a=r}$(sot5Yd5s8Ow1solVuGkiCKx9fH9SsQ`t&h34{}l zqulYlRW7TtK=8Ef*xnfdU-a-*0snY0OQ-gv?WjwY!i;jKtr;EGnJi|k{8h`f^}cTO zdvi8(97?8`q+l=GPA+MA%2DNVtl4ym=?j+a2y{oUCFiZ1RxEEhx!9EFGVqkXKHwD> z6dn3Dk1L*?uOCnA1AAGy%p&IbmtZ!_&GGuK9g+#OWac#LrfYbjA@ppX*u~gbWp-A% zDtkp)*;;zjcCu=5yjXEOBC=f9S`s*R?ZJv1*kW4av<0N+E=}77GHB%M)Cjarc~)j2 zWtD0?N*t4zt4+!Y0rUJ~MwL9f=#(Xxz?>>p+>E+l>n`kRW_4Is7{+55Ag{G*n`$Bt zTL(JLW}yNh+bLDNVQ~@lEj-~xFE%?3GLc{&ho7Oll>BmsOX3a zZVC)HgW93{4Ppd(YiM?AE;;MhINl0l5e2Q0`aL!GZKE<)vGZ(I7|V!-@iyMk;@vRb z)7x7*?tQI&fSAOGVSI!Yjghm^{%>|?W&KSwi+(SP`^Hb-OR$wnPHig!kO+Z6C-1L9`f+-EJxYZrOITo`Vg8TfXERP=vU%^_e zBTC=^9^rRe|Fl4G{st%yau?$&xCV}_L3~*|ew;E`GX`;pdU(?TQ5@zjgd;f0Bn)oZ zML!b|!F9Bx*WpWd`qvOxL-5j26*4t=7e?Iw6+)e66%TQZ_^Sv<{NJMWWWW~>YNvGS zdt6^fTY9jweGR*ky@3d`wWg0&(ZTTgvWCv7m7rjXb#$fIuv@$Nvm;+4Qbl)Xdlh>c zmL6KF=;e)fHa_>or7v#y;-LsH_h)b8BK<-m5xI(o>soDLq8qE|i^#?H%inz@d_M-+gyU>Oob5P^ zM=?QbmQ3at^$FSil-zzscE6zKDu(a_hVcuYz^}CZjuHIH=zlOO0(i34nOU+wfk}D~ zu}8O&qJNAXVn-Ntj2OD{2jh;jUmc7dWt@*_ej|by{Ivg!r*HxR?tjA5v;~P_9w(_u zBFW(tH3O%aX#oBWx=D#=cy>nOtdMw?qw_ar?!gd3{KfzM&(YIQEMvTJoO%n+u}%;t LKenv?0L*^@76Sc2 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/MinimizingLateness/data06_lateness.txt b/out/production/github-repo/MinimizingLateness/data06_lateness.txt new file mode 100644 index 000000000000..e2bac0d1cbd0 --- /dev/null +++ b/out/production/github-repo/MinimizingLateness/data06_lateness.txt @@ -0,0 +1,7 @@ +6 +3 6 +2 8 +1 9 +4 9 +3 14 +2 15 \ No newline at end of file diff --git a/out/production/github-repo/Misc/MedianOfRunningArray.class b/out/production/github-repo/Misc/MedianOfRunningArray.class new file mode 100644 index 0000000000000000000000000000000000000000..e5422127df06070e3edc332ad21e858def50322b GIT binary patch literal 1953 zcmaJ?U31%15IxslvRyS%oF;7=5(*T^cW9tcnh$6Lg@9AHbx3i;M-^Lfl-QDy<;;X< z{sk`#)0w^&hB_U>Fg)|df8bZ}P&g|qV<+SA;JtgV_U<`ncP0P%{MX+ByoGPl7{;Q8 zr8M5d`)NdQBZXev6mLS#C)RR(=-DY#bi@h#cd6_H2Pa7 zcf`A!#64N_V%F054C@;1D@1Bn6o#@p=AJp*@a@X%9nW?>+uy(2uo~99LMm^U9n)`k zmcqn71Jrtt~kC`w!HZzUXIk}6cP)zWBW@A(XsJ$h1jxNVy@n-?O3-P)lJJ= zGdC+d$zXzp# z432dnBA|--`@1|-IGgv);_j+h3jq_=07GG5Y`n__)}0cnrtJvYMn^>6_eg0zK(mRs z!Z_0_lYD=dFb33E5!3TnrHvJKP{TEablz=vMeCL=1sUolcSc&J<0ZVTaQ>9GY4}`6 z0S_c>L&pmk(Q!%47x+@gSNK}TLomrEOohH6NoVVH6eXmDfWv8Z*D;214O=?O*goPC zq-j;+X2Y(OEKkQYW^~xtq2x>A?CPkXs=?9Wf<-Xe1ag}@R*`)iXbW3*D;1vEuER>| zp0#Irbt~sFv%-a=76p^L>{e^0XZo(kkr)am;p7u(Pt+`xq`w`_YXQ%XKVZ}9_O}$y zVPyvso>g`CxIK3S6(|hD8C(sx@?Ck2OhIm|^vf+O)4QVhyqfMkfxSCJqrPJVW#V zv8RX!y8|SiLi;Jmb(uE9cn~WFgMJ?~XYeXd^i~$UhS#}MGPof^Bj5x~P5c6FvWet< zahgbRiE}B%9w8%s>o_eDf)_;_ZwM(|q^@C1(hA-nvodFhC*A~~DXwx;iOZKFr0_k1 zMdU^Z*+NSFfXl6eGk-vD;%w_U+&qj|o}uT-@f(j|v~N7_yzwN!6~;Zp2kYC%`p!{9 zyE+>oTj7{QbZ&&-q**F^16M+#f3vPqU-uBbg##E_BlTOl5H-@dLd?)|g*bl+Bb6&? z@mwL9$Q6u)afVhi`e>6zPi{53G-9NF#O&nM$P5KE(f2blhv;XzbFBVA6N8!aO~%6OaY hSG;)@@8BA%E>e3Dd5#4Q?`pWN{t2|s^EiTq{{Y+&v26eV literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Misc/PalindromePrime.class b/out/production/github-repo/Misc/PalindromePrime.class new file mode 100644 index 0000000000000000000000000000000000000000..72f46d9fb155c6146de64ad440bf63e8d4c330e4 GIT binary patch literal 1653 zcmaJ=U2_v<6n@^#$0nOC`D)Xeq!LsxZG|XQD>g-eQW{O68mv~-ahojdLb97~cB{Sb z41YnGamMk68*bntWnji1;EaDn|AC|8^ClV6DIF)1_v5_hoaZ^uIs4ncPk#k4i*Ge# za8AW+6z}3a4GQMu>HP@KYxn^3(o)tih6N25@L>cWN%KW%xg?j%Di$@waZWB*B3P39 zRkDC{C>j1TQ-cQy^ZoZ1bAm+A!T4#zvEtRMn{)%{9Zd$J>O*J_#b%+@k2oA1S&)!W97QED3YW~t`6mc2ROLo?h> z#;1>X7Eokpx*zC!Rp}!jk27yuyp@R=v;@ zuv6G|{KEJ2Q?aV!Q+%eQh8sFgWb*$kF%5+xK@uhs5!CN{`;Z1?@!)jmht!Be? zb*zIr2}Z2rrjD=i4a+*Jc>;-Hj_Vt@%{tXMV5;qQJd+ZS_4{KvrHbA5J@(c#TI|q7 z@yG|+^nl|t*D#Q^+QYzf50?23nAur2+V+}k``94y;Zag;^9QdYd&WU#YmW`-uNdAI zyW81z`5G)PPA&E)M>>a%cH6WY0(p+mOG7%4jrE*93if~eBc9WrbLv}sIq^JB@bk>@ zBL_lY!!W`172ZnRg|trZLp@ErvB116tAS$~Yc zK7!T92&KYZs54ze7V=LJ9VX2X8;BsrBxz{m5JR5nB}k#4i2DiNVn}h8Unk52W8T0? z(u&Gi8vt)3NDG0(<=oxu-6zm~{0Yfyu6-Y&z{5SEJb3;`@F5)ny=wZvaf~2A;3TDp z6Lho(oM9q`)f5RLg_y(?Prx+)8UlYq5vjjOA}Z(o1$>|fpAVF?_b{GIXj|o6Hlek@ zD|2nmKY0FUZit?xnqVOkB}_gs;-*-5mP*RfB?Is-%k1kv)8ir;s8A$>al-Q}9Kb&v z$iAGtkKiLIc&rOOSPn1bvcF(9Pt`|$#wl*c?&0{J5OjHl`1(E)`7V;FR2S(kMj5lG zP^sT#hx$TIvt&^D5Vap6p*V>ose6XXpQJ=ZigS@dTqT=f*Ooa&l6oBH@pg}T5_3Hn Vm4S@G&_9R?QIfOw4m}l|{SOGUOHKd) literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Misc/heap_sort.class b/out/production/github-repo/Misc/heap_sort.class new file mode 100644 index 0000000000000000000000000000000000000000..f062de13f1330973e329fc5f6980e2e143c4933b GIT binary patch literal 1705 zcmaJ?&2Af27(LfB$ z?0~ZGBd}vpsY2=+7A~Sy9)MRsYrTyC@S!2Q}SHr(cJvDT%< zZaFNE-XuKwnq%^5Z82P}br5WOtG+CH=%l2A3}<2#Vx%k+`8a~l+$3z9|CN?m};IE2i;sP#G`5J}ucCu8+JQda+0T0rV0Di0ZsnmxWc%pXjzCodw2nXAK!~G-UrOA$CZ3edPPPeC!-OJa05{g)N)nD*!Yw7{)lJxhrxO z63st__<@TU&T))~pn~&Un~?$Dz?<9&DKtmv{43vz#`(5$G@sEL>du1w9jv^Qv3rO; zRF0n<|B;EntfLf4s-rk|q3YOawVHQqRP9HwDL_egY-wEOkk+Y0CaqG6QxQrm9V}a+&<0BwA?0y0x<*Df$*IgDmyqMj zn8G^ps8NZeiEBcLvCGWB_tbBJZ|S4(d?tT1r_5(AKE~A_p*(|Hf6AW96ncoK^d1sDBzrI( z#>A83-)PXoz-he~m;?MEEBrzXxKt;ZA9x^Bg*^@OEYD{SLuFv)yy zW7_Fqh(uGvJy_097&(0#mqKC7OghI@3lx8ml$Q9%u*}^`NI4&+#M?XtE$zPe6TH?) S{Au=SfiFrS%_41Lc;{~{0x84* literal 0 HcmV?d00001 diff --git a/out/production/github-repo/NodeStack.class b/out/production/github-repo/NodeStack.class new file mode 100644 index 0000000000000000000000000000000000000000..4fd06fd870c1e8211c473afd4957b77e0ef2f699 GIT binary patch literal 3835 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/CRCAlgorithm.class b/out/production/github-repo/Others/CRCAlgorithm.class new file mode 100644 index 0000000000000000000000000000000000000000..8b6c6b7ee946cfeb73ab3f828f5b1f3baf3f34b0 GIT binary patch literal 3637 zcmaJ^ZE#d)6@K3R$W4|@zBds__-@#I&{&}<5{l9U>b6Nhf~0`8Ty}4EFC@F^-J6i0 zwpJ*pwN`3NA+3c*%2uc2j1CF3b!r`Fs?%To@`ui-zx?4i{+GeV=e&0}*_w_*n#7@MHyA@HGQZMG*84$Ax1FIUytwK@zr*;RsSlN3a%- z2%j`?DuPO1X+%Uvg=BXafOQ0ZZ?zh&s7Wi9&0?6_7rLtI0IR) z$SfbF_MmgdRtTQ3UE1kYs1&A^vU}22CS@ndJgQ(6m4 zXKdHG+Nc?WbA?QQHFWQ zIx#{{ZC^HFjU2XIN6rPNa;V{@9p*IJx8FnM8QwC8Df+7I?LTpnJ-dYEgNGGbj419EL0>jvXHs68Kxfk3J=6@v;;lW!L~5Jt zQ5{Ipkah4+#>k*h46LQ=?%;HkNq*aQINLX7*_Ik9mk9=>tTiO3D zi{2%&nZ!6}PsZy!ly+?^so~;Rfj1SNaR|f;7wJ*)|FqatM#i4>=nRnGbITW1t+(6bj&0Ch z;}ud_?ktq0q3DwitynJcDsANk7zqy-_pSHfMdY&gBLyP){C6Ws^-V~;I4v)z`Q z*+-PEAa5tSNp}Hi6JI@L*dpc-br4A*vowsfqANi4eT@Us0vc@4mMKZONjdk zqbO%7MZ=7`_FZlQ+V?We?A7<1zChttg~ygvuDe&ce_7?nmsPI6SNZU=%6-c!*W9c8 z)UwL`7+@d-2@Wzn5_6MOZ3#dYuwqCV{Z!PlfIyn5cUaJqSc6j~_L~;cvVXz;S=tX$ zrzN;+4bxgSgSEHO5G0}+ALcpSR0Ne0P%Q$cL6_G>1Ub|Z0_*rKb{{76ZR=^V4kixh zG6xE9kSJOT9!S9}5V(tg@{9as2C4%N{F2J-3N=-TuV1{F!)HE1aA3_eHU+yv(GYp% zb66Eh&Y*T{u;^llF8+P%99B=`dIujDq}V1tv!P>aa1LvvM`Y79l%M}|iQKjMk4ufu zV0%Y2M0qizH#bm2j(=VAP#%>$h4kgkL+9jjUtdhlV4bi05!TLOUFa&RI`oxV?l1ZI zV{H_Zpk`q(tR1|>n8W&=p;e*xutD)1x>0r;6?_X_0($m+A=do-pYnJ@lzay^T|pyH zfh+9xBR5eOI?hJVqpL(>dWl56NYv*!2&grUm7-N6yc(%-NH^9qtSaz4%5k3cynsf2 zJ;eC&@Br6``0=nCFJh424^QGH4C5kE@G{Qwi{Mqf!q@pF{G8{TjN}iP#vi%@vg?wLEgR^&3d4OaGHL}XbIsK z(WZB_w31%vaigXR_#%98h<@^2p`IoVx3NF!)G)`_Hp1&LqiP_>ef zTZG|ixk-M7Cq+o+=P!^;Na*6$N^xr!8@P*U1K#65NAI&OKj7&76_fiR_TkrfoS-{^ z-*ABZ7SG{hoWt+%0)EfJezMTuEjUIQnci!Wz|q1)zf{uTjVQm1a;E7&XjZ`$k&b_( P;SK_lu4BA9fUo`+1r!dU literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/CountChar.class b/out/production/github-repo/Others/CountChar.class new file mode 100644 index 0000000000000000000000000000000000000000..b2d89909b65946d116602c4168f37d2efb958cd4 GIT binary patch literal 1463 zcmZ`(+inwA6kW$-dz{JSX2-;Z6dV%3c0$Y@np+Dl&=iLN4uK@xP9~#xs57?gan-!@ z0e!C2mr7M%c!388fy65kKf*s$QOi1GD~@8&XwKPZpM6<-uRZhezqjuJT)>8b1kUI< z+l6yDZy-bq9Jma{IHz%N_(#rzDTzSJ5=*v5a_TJ!C1+ z0zCy!TE8sFN~<=bP_9=k`-Y>c@7)VKsgj!b28RU(d;t5w>9}Pgj|F9L+r%R7(CWHN zB*|@tOM3Qi-c(Y@T@&|EFtLRDCYDvKp@YR-t2?C)n{^sX?5&-Yd`&#SLlY^am9!#Y zCM|ZmS?Z*TRTXXx1p(-IWa2TNn0Sh3ItY0kmO%eOrl@LXUR-}}TkOR?Rbjj4*;@hu zMP|I&N~fHiSNxDoTW*n%M61UKE)>mLS@GC*yu$%#JI4InblayUB^71#73vr>;=}vkTsiks_*I`+y*zShF=`T$|hi9wjtY|nj-x;`l9r4P|Q5MjBuqAe9f7kpu zXa17yZhA%k>*B116d4^vnl@w3piK zaHfI5zc7>;ZXo^!hyFnLg%B?S;-CLN9eGI)&F{f+L?|C+lq7pFf?j4zFyE-3Z4490 r?4jzXM+W1xWj-H^>f{8UaiTd*Z689rFooEK5b=KzqI#0*0J5I}@JB=d literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/CountWords.class b/out/production/github-repo/Others/CountWords.class new file mode 100644 index 0000000000000000000000000000000000000000..0ba38e35e1fcf971296e9bd32b043b7ea95031d2 GIT binary patch literal 1357 zcmZuwTT|0e5dKcnk~9r1v_K1@)+=qfRK*)t6$Gu8ix$BGK7=*{!8GY4smj0b)&IbY zJQPP~c=W*^<+vxUQ-<~-**$x9zuo?H=hI1EaLv1y?P7Tv4mdR^)^6uiP~@>()o%}yQ>UeeXRxYJ1yc?Bz2Rj`J2hWN#@7izju z)~KU!@qbYAKy{J|-r%i*5u~_QV33l$yOfhwuz__2?=UE0Q^6MAD=2d8z|OAoVN}63 zcBqoJu`u+slCSL@Y9-?MoT+f+xLSq5$0yg{U{ANQIX(;;ou*cZ{X~=23m1H*g2ji{ z3S6gYw*q5cZVEeRW)Q2~$>0e)&5KYalW61{$o)A+#tAWjZlb2ubpmO^1v2#c;R|uHMoIT!>>td}G%ElA literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/Dijkshtra.class b/out/production/github-repo/Others/Dijkshtra.class new file mode 100644 index 0000000000000000000000000000000000000000..2efdd3cd6197bf57b23b43b80c07863f5c8fe9d0 GIT binary patch literal 2467 zcmZuyTWl0n82--QW_COD%CsyL1k}0(VWG-aS}3%oXiK4mV!2e2>2}&qyEnJ9g(50y zK~(g`@*o5>Xe7}GBZ&(Uf+mI+pM3De2ctfqL=&GR@j}4w%(iqX&F-H0&wu;=|2zMg z{r2{kR{=bZcLG?7HU(S!Xvfw7T-YX;4h8GIbO4H)HU`j%?NYl#L013;XbYeWJEior zT)N%$uH~ntv`a3#73`4?d*!AlfM@Wml=ex4=M?M@ASg2gVW{Yp&!}Ab0x;39VnD&5 z0!zTR&PrHzgMd3!-7Vm0PWG7sMeSC?+?I*=n(3WJZ;YDK_GHwEbsK3*?kANVd(aw@ zwhnvHOpk;&Swq7kgLc}eXQsGeB?QVtJ?%rrs1c4CiGgsJowgDK^%BXQP96|&^|T3y zgZ#DfH%4_do}whRtj-;mIoz>ilnIUW0Kv*;$;Uj>uPld@v8`CRD{3SXW}1ZvT11>b z!nu1KJX@e7-`6&x!}N5Iq=_SlUw&`5W2vc*t7e9+%j>Q+VVeWQY+$ZAT{7ubBjr$~ zpq7Wva}@}5B{S)$x!IDe7T#rSr6ftigLsIwIfUi6pPPBcovy2Q(bSn1(}0Xm|mKr?NZ8Ff2r!#Iu# zRLnfSri>NqGt(N5;dRorSPI8Ayn#0ryrtm;-X@hRRxcJPo;ep(O=s)q9WtXliab@< z*obZNtn?hKRx;e0NM&q}jcLTm>b%gb202ek!aQiRA!3KBIZU~%4vCHFv@u4KJpEQI z#*q*8w6)0)Rfe=D69Y~RM@|_vVi~ieUyf~S^(-gL9I4F6pg`4RAr6hXM(XneCRI#n zjkLs5ww&xx^bxN~$bO2_W;{7+woGGrh$SyyG9!WSlG({?InA=qNTtj~pFm}(Egvvdr?DcR zgsH2Y$J$JP)lTMAGdr1#TZpWkcnx#~PYPn|dDy&CbkBZ{u*zH^ut^y*4Yof=ffVLt z;ADvSWS)q^HBhStJ-V+(SHk7$#935K?#k6pN=l9HqcrYiif=BXV9!NpbzUdf=aGPw zA7X)oeIJDq_7dh~QMk*2ygucx1nDqo$z}KXJA>XVicaCH(&C8fium1;fF6*#l5?1F zoR}_*~>oGgvr_<#yBT+&57Ah%IBZT-56V&{Ja_QJmNSW0>#jGy0{ttJVBV+&o literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/Dijkstra.class b/out/production/github-repo/Others/Dijkstra.class new file mode 100644 index 0000000000000000000000000000000000000000..a4369f075c48b47b0a3dcef0b4c5e9c9468fc6e1 GIT binary patch literal 1060 zcmZuw+fLg+5IviVy>{ZnSuUmY-qJQ9h4ezNP$UGDB1M2m6czEbN!-LVILI;mnSMo! zM5Lnj1Nu=_XKkk-K_u_anVB#J% z4yEfcOcwVqYY7`kzeCiqE5Zz{!;l*l4JV|Ee5uuowVJj5vEOn&xJsEd>N>B6&f+?z zX6=SpS`A9pG$t?! z5<_+Z8sVu6m{TTGYohZ8WmM>9bf;&BVBbT^O**yEDR7JIY?Of8xI@UmU1}PUKT)v+ z`KHd0*!zLx5UFZeXs6K2f}g@TuP2bAyb>~)C7ERsHy75PjQF^Z2Nci1!VDf#b&f~> zC7uvczi+nj3+7((j1HlRjI9rmt?i{^Y}rPL(=pE3xe#k1&IrpkL#)R*Z|6hILu`q> zoe8lW5iF5QM>rzn1-G@x5iz*PMIBF&RD&{{FK&#+dQ83qiWsBYq^SDK3mE?Ze$vg* literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/EulersFunction.class b/out/production/github-repo/Others/EulersFunction.class new file mode 100644 index 0000000000000000000000000000000000000000..290af7238324b62736382432d045e14933c237ec GIT binary patch literal 818 zcmZvZJ#W)c6o%jHIC0{-Z9Ygs?NHiKO45NWAch1MM5RiBA_ZmXZt&O-1QOL+TbTC<~aK$vo`C|>vyf$Tqy{obM1C-i@*&huI9jk&|goQ2{7+MhHYlQ<@~ z=Z?9If|_wYEnrM#Q^4oS4Rx`}UzFm10}@~rY1#~<2ECw9?tFxJ$AbowHl>njEb(kD z8t9i9W#r44k(b|aSc3kJ-AdlAR7UnIRPD<21xm`Ab|q*YpZ;*1N-$_0Y2x_wo2|b_ z#&K*WoVUE1P;yoBfMOa&mMD{>$U0@V81EpD+bAfM4fgBUMwT6#6lN_)uc?k4u`V%M zLFyNDAuKC-f}}~*B1&h-BlgOhYkJGc4ql@09-8wBi4V|^1OdOx9W0>olmf~`yG)rf ft*szRYD7sv$knZ>8kBSf+D~ZWgo=U%NoM~6zqp!0 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/Factorial.class b/out/production/github-repo/Others/Factorial.class new file mode 100644 index 0000000000000000000000000000000000000000..56ce6d6569862159225fe287ea3f40b8e8af779d GIT binary patch literal 1575 zcmaJ>U2{`K7=AWQa`JKbN+`q-@n}WTLK_AApe-n13#ln>O+YK6vq_e8@#LJ$$qB*_ z@JBe~g?C(W0T-zwGyVYojK4tZvq{><$}pMi?)&{b@4kEf{O9*S09?ZNDdcd`!lfiW z#78Ma@Uc04lECE@=CNQjiwRsY!c_~OrjW+P1U@tSHM3k#;6@53@wpL}%(86ZW&*cN zWZA-sg)ao+i`vuSRe_1(^j(4I4Zo=bj#RX#Zui=C71U(ir6yDH8`8Zi18wAyG8%5_ zuCc9!TPo<5mSrRK>ESLgQ(J0J;6(9W<)M5eORn@V4dcUmY~~CB8*d;laBM(kypDy6jaA$>4r?~nu_17J z$qQBBNXPTNSx>cOs2?duQ`u6%ykp@@8&%Y7+yPs0ZIfkbB@?IJ>xNEU{U>nFS$CD} zDo2g7cKog$WE}Qz-m&o&Y62$@cKUixyG<1kc5O>Jd!!xz0YkpVrdhsWpPV1H>pD-g za+@aE97@J=&&Id7&*tu@-Mbip#ibzdNrvE^rfw2(xC_wRrAp+1-wI^g*^*s{Eoo~{ zhN?Md<2%#MqX!3vs{LYX^@pm#%NO2T2XVek&3Ob66oBC`1c6WfSZULcl<_hFsu zBXOnh3$jL$>?1W$Jl*+=@=K&Qw_#@v^>Mh+$C1oYbNCI%`pEQ=rSntRt0r)A7<-Nl3+E|7SeQ+)8GJvZW~?%?>EvYo yXC(5`UlB_^%m0**HpxprqhW~Ke3DJu(|CWZyOWfrs5cd(h$PLWe86)A7yboxx0W`$9spWDb*&CB`pyr9yFQm$ozdd;H*M z`2dL~{s6!FBm5WQxt$4^uqDrJ&pr1%=Q+1O|9txa;31ynki!iFH?vs7dJYOUWVt0v zSz?tOHc>Tj+rS-x%yU2RlZJp=u5<;o?Qq`{m}>cf*B%XeUbN@*`b1`0q3iU!PUOq? zf1s8e`mtp1CWl@W+dF=5FKlm7X5jdNz-;+V>&W@w*nKBBusccQ2M1eeo51^+2#6-B zPIN$x;w4O)ie1VS$0DP|@7o>M2?8%-578FT-}zBYp-k+#VX!YS(McTl{Yz(WU@`T?J{MqW4JD~hBU-sx>0%XGem3%_fDyrDo#30zRdCfe zPa(dh+mo!B6r98qpCy$96fn&-iy0J&$iu&&k_ptmLwS7+^%PpGdIJ50+R*A6pE9MT z&saEyQ98kulBK<^>z3BA^t$%t?6>TuLUyas5U8G~b^%vm@qZ1oSY}4E$?u6d&KJja{C1{SEKP<4$e7Q0ytVu@9w8aRh?MyhUL*}#er NoO6)}uX9Vm>R-y^tFHh6 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/FloydTriangle.class b/out/production/github-repo/Others/FloydTriangle.class new file mode 100644 index 0000000000000000000000000000000000000000..6145bfaf12f13043ff7aae2f5fc9e224e7bbf711 GIT binary patch literal 1249 zcmaJ=T~pIQ6g}G{O=*K5P(`g8RHT4XKk)-W1*ulchf{Qh@j*k0G?*rxG!=R0m*|7f z`cP(M#y4O53H}tu5zhu3P#8P2cW>@Jd+yz{x8Hw#`3m3~o+if=Q5Eig@NNOjmTFA+S0?Cr!2+DTeiSF=Me?zh*16@c99FE%C%dF$BfqS?w z0pkWH@Ic_+q!-$O$-A0fq>bsnHUod9Zmv|Ea>ZQr8|I4Tg{I?4KQNr>9 zZ%VS*!NiNX7%QmyHY?s5o zLZ#JuXjdtxe3kUJoQ|I>c(q2zXR)m+1?|orn2_(K_ze>79-QS%?jG!nYLjnISU|5y zkSh!B5dS*`x@W%&3m%y{gPaDf?D}<%T->VFY;RE@lP&b`8=xJT*zm=Jc>jY>g#Pvn zQpN0kVlrw`&oI%!znuKVxHu@_EYr(z7u>ahb%;+<`Y3HY3dYe*-`ED=7>@I+1t*YU zgoi~O3X#C84aDX@Ls^Gf{0yxl-h@8bL}FAK?N-(`yXSE1L(&|A~p2z`!qe3nOBshhkFXoa0X|2t8Py7Ic8&I&ZC!} gg7ZXVpl%VW>FCpu6@rreL_%yLyUEjn>{8f)-vekDkN^Mx literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/GCD.class b/out/production/github-repo/Others/GCD.class new file mode 100644 index 0000000000000000000000000000000000000000..d718c9566a29ddd9649fd3750e94e867d48fde2e GIT binary patch literal 1137 zcmZuxO-~b16g{sWGjuF66sfgSu_)-YB1Np9ttJMdX;Q68jfSuq+OZDygA7v=T=OS% zX-wF#(FGEt`~ZK8i3@ioisubu3W=L}_uhBjx#ylYGvEGv-Um=bS%Zox4H~9nxQI(K zGBxCoAHro7Ga9a7R^|m2a{@})={nv$fv}l-CJuvj8ftI-sQnw3hfLdI^tb5%eD;k>|b-Lo36 z9$9MvOVnKUk;0)IqS;g+w9EsFYp?g)9!WZu(-laX%hgqD!z#3`ZmUrDT&LSA`LZpy zMImGV*%r_`o0YD2-*v4`CiPz5ZP*VSIn)pZ&q~5LP9Ppf0%Iz!#xaj;GD)c@#&I1t z1Tvh-EY8i$7jt)~n^~F77iWrdGSdX~fvVcds@?EZ+>GNEZpU#4v_u;ibPQbIT=(n_ zE$j6;<@n)nPOtEUlX;xawmLjL=CdC!3#e-n)TS*Fvm#9x9f;t(c1zl*ZdmQUU3($D ztK^QD7a+*4_&h|E%_IAPxkn8>oU9bE9G6qVB;PZYZy*qXkaqGp%&fpwaE<0aL405k z!bv_AzZk;^V+kbyI!3w1XYG)vnDKaF&=ynXOJ zy+cUYr=9RM3{%5Nw$Q0*lr0iS;uOx}wBIgyNXg1L&yk$F<7{}EaTH-?MDaDG0u8T8 z9p+XhAD%5o?q>4)?=WiQGqZaLmA67-`{0K$5RfDVU{FAYb4{>G25Dsd##!-iJs;ddg57~BT6BpTOf2xvAn)YRq(z#OWtQM4 OF-fiRD$g?y;lf`Ks?*B= literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/Graph$Edge.class b/out/production/github-repo/Others/Graph$Edge.class new file mode 100644 index 0000000000000000000000000000000000000000..17a86a157cb0c0333b3cb0ff4f890f9447fb8c3e GIT binary patch literal 523 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/InsertDeleteInArray.class b/out/production/github-repo/Others/InsertDeleteInArray.class new file mode 100644 index 0000000000000000000000000000000000000000..fe38cd9feaf9b7200193ecae15790a00e4e5cbd6 GIT binary patch literal 1542 zcmZ`(O>7%g5dNOM>$M%XX_9VhJH}mp>mj!lKnc$z5y2599gXAJB+bW^W+9H_aXcT#38gw2$D)BH1Iq%jCC7Dw zQv%V#%&LI4;x(nfc*Sw$gK&b^Srz?=FRD+iEyQQ+* zm40wmwq+p8?rGn*Z!8kCV>_sn)PvSNaOJ>%7OpM468*5V@oTM06}9Qngs#)ljw-MF!5Ma1Q5FcnL2PaOg@RJJJmVjt_N?+mzQWJFwnuIgM6` zGH|oHEw9&ZT6JmlDUeM8YZ$rX7I>pBDm9rqGW2^W!%mpfwfd1Hkn<&W_W#E&ux~i) zYWuPdjvN;m+1coPj*UJuHOaDELWMJtqNR`DqI@(WYH2-pNB_@3mg#8dFpXKz7# z6`H5`j`fw;PdPP^O&s7YfrCg>!{EpgbR?l;Mg+(h&iw8|#*$=DW*xh=$(b9a&# zq6?a-fUf`&Xq+4*VB%bsO8c#d6w}1;aG%Bu~ae6w}ziVN)~p z&oQ2fn;Mad)tlHmkhNy95Bfb7x*4nf8?>Le%Bi@8RG9X@O0;JuQNm29B27bUZopKI z>d~$Y;C>t6DC>WaepjSLp-B4x7TrayJc`|;C@*+&EkjOG=e4QQ_ zk-=qTQO7je^zPyjypKcpi1&~27(T({_zX|rOP-r3;5KG(53~3VbNGShPei_tBL3w0 zfYVe1yV@TLk+Zyw;SXZvII=W;A$p!0ki*Z+VX^K*_>sGjhsKJ&X1+W}dJ$hRTb@gB zIn14h!TLUB9~Qg2hh;oPYXXOfegdg&g6IYc24;kTS#HzxHmgjGsDw}!Ad}P+2Osbs OCmYGIpg96W@bo{*UsUe^ literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/KMP.class b/out/production/github-repo/Others/KMP.class new file mode 100644 index 0000000000000000000000000000000000000000..7db0aea59f6923fdd15e9ae375826b9d4d2f6200 GIT binary patch literal 1655 zcmaJ?%TgOh6g{nZiD7t29&7`$ab5@^zz>2G@o>Nnfgq3w6qS@W8KemsTN)|DDCJZt zi=_C7tQ?m&Y?CZxSCYyyi~NQ+-sA_oh;n*l7dTK6>Ym%T`<{Ex={w@De}4S~zzlXw z4B%QE*Wo6Zc6LDF1(MNfjJXh^4Pq5F34$7PPa^afF%RV25t-J^Pca8 zivmh|d{;odT`#)=eRS#N(^bdcpWY4w&)=VmayY?0qmpNA3&bnV*9W0fx-V0n3TM5( z>y~9fCX>~iu*AdyW9idpPkUr?;c={S)HqmWtU*WYuJn8<(6cR5Z#a#Jpn*FE#sutA zz1C=kZZUAb@E)u*{Zi=FBZg<>h@gtBZ@b%p&R(46fOu4a-$aV*pSnv zg#wBOwk&*tZ5DNWQ4Bi9uk8&k2xi zUYtu=m3ou=c1IhpK3(L^hlF#T8oNVx8V%Pk3rwDIXXB>?eMypmBTV=|+wrjes^oL& z(+3HVjQGA@kbu#UGJ&8Of~%RGVjnMMpYXFYNn z7^H1=4&Xd4aMgv27@|i8f6CJepS_7#KA~(RVhQCb)MJzclL02rbQ94+5C0_MXeSE8 z7~x9prf`XvI^wuYE5+1RG>kJQ1-(r; z!$5{#Aq-3iUaEF^Ap3$xO!*#m#Khl((HOEN#hf4h-Q373NXPH%kxLb7;)PmCR_;pQRrjt^3(9UoV7RatlpVj3z2>`( zvL~xeKPW$*BidiG6!6I8r}6^A<5H)~RTt9431LX0g`vOU@Oy zUD;PzA6HLX7(!BDu${(sBm;;Z*lL6anGiJ})2J#lJ;+lm5 zu3H#GT43MKqAoVw%Ch5IxPe81QQK|U(q7$8VHZ$&+_Z2Dw*~eqH?J0a)3vBFAKI%S z0s~tqEG|8CRByJaijNzCQzeb63&{?RZY`Vl>dk;{aAcK4j%4;UsQ!d&O#*HO-el*t z0u$}GiMLHHpx2cXqq?v=dv18nqad$5IG>!Ih^*HgZ&@JCnc6ibT}GMavAyuV;~x!b zok=5inccud)Jv6G!-37;E5W}J2y<~vz=@@lZf{QV3xm_ee*H5z1CqPGOX{ zsG16DRPf*QR&YrzH#$G2Jx5=9tepEtY_4y9OuwKZ+y)zlPT8Py6g~X2kN5;eS#)LjL|=0qVv3%WNd`ir*9Fu_X^<+Xoc{M_6mAD z(t>fcg=j84qo@BxDm`G<7n0ieYxF#r(Ri!m);B*SwWR(GHUr+mytjegq~3xR?`t8} zLO&taF}~9{@V}AxgNm_Ek+Xd{o>+~xO literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/LinearCongruentialGenerator.class b/out/production/github-repo/Others/LinearCongruentialGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..0f12bae81ab2b03a930651e94deb8ec3a46bdff2 GIT binary patch literal 1289 zcmah|U2hXd6g}gw#qI_OF~PxU2_X=B`7mkICTV~s#C!#Z06~!uPm|5y46Jvp^)4-M zt<d(J&~{p#&+e*l=q-4Z^> z7bWb&ObNr7Ez+Aa=1XJdjk)09VqtOa;Q$j*SbRP6^x3y`7R-^q!oq^xQNksBWhyNc zS#!~NmrGbe)4>%1A-S4dK37Lzpc|_vI!b%%GDwv`;erlza*0l@*=*L=1#(N#CLa#8 zbf|8noedS=lN$kV4z(g*2J14`=G?!`C0n{DFwt5~wp83}m@FADMPWNmRhVcQTvMTn zWfH~n0;NtGB)S`D6$=z~=*OzVD57_w%`}Jv97AK5M^C9uriAL7WS56PwpM2^xsKGK zz;NwB>ydmS8-WbljkP4!VSCu!%ZbSbO#!`XbrW|XD^dGOtu5E{k6L2j` zV_#j>rsuK$>F1mQcW~9kHC%Twic`kia8X6Y#Svphj5&&m!1#ytaj@*-CR(P-$1YZI z%S8=!2dge_3@G9x0!?{p)J&X)jTn@SvZ@F-5(nJ8DG-ff)~VTeg~MfXHu?Q)4y|i~0?s5?K*iEy%gI?I+G zFzR{F$>KS3k7)`%jngyac=L?88SIJBpakbFzRN1i?c*0I%ISXHA1RnYpZXp9?w3(4 z6gFE~;XD^NpX7Ce+e#Ow~7bw5L;qNoz=fD3n&1Wsxuq8c1uvvo5vG^=u v=PmFUV@CLL250SDrf?1oW*(t5=P8!J6i+TPZ!qHEQ}GukC-52XGMN4c0G;Lz literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/LowestBasePalindrome.class b/out/production/github-repo/Others/LowestBasePalindrome.class new file mode 100644 index 0000000000000000000000000000000000000000..53da47c8db89b198d446a982223e47864cc48418 GIT binary patch literal 2929 zcmaJ@TXR!Y6#jN@Ck>}iTGEmq=1Om zBI<~vj*f%Q=!g$};XxfIFf!wd_qW)Lq0F&Dx-EIBzPtC!^@C#wYwwuZbyV6SCc&ai^FtNWOOZ#17Z z6*i(Ouy|tsVW99l%cA@NyS)~QT z$;|IRn=uQHmAA!_QJiDEwg!F_JQAaAjhm^AVcTYrc8Vt|rO-U(7@3#HjDnj#kteze zn{o}(X0WbQH*Er0YtC{;>45)!ccY*c%|#aM;&MkxG@T^`gw!rCaKmT6Leoq6vYi!d z=xUmNZSxEf{x3jDLqTC%R|ACZ6w!l4_a&!DzY?pz7O<;8G-~$40)~!zkWkp@0^>Hc-U$t- zbv%TkD3o+KC@ZYrZ#!l&L5#??frN%d9cOS>$2q*BkXZH6m=tu7vKL9VY{C-OY}IjI ztY5_ig^t@>Gg7v4S(EW!!|SXdVU-d_qOd|$x=09+2~l`M$0OLK<4s)9@Rq#a*0CQ4 z6rgbbj-CCF?0Pi0d(UJ0Mn<39f8gMu)ZwSnW8)K(Pd_ttE&z_iOM|CXW74dda z$2+*BV-H4jyo>h~I`1+w3N5RtPt2Y&Gem!ls5U$Q7o96PCfO9OHQUP9rihxRvA_}7 zT&Kou2Qq$M_IIt}BnQ)3F>G@)q1hTS2caNJv}(XO@u}J7StlhLyjM6ynya7V9Qx#h zL)X=qmPVmq+F6Adr|%Bl*89hDwl|7<7yY1<{|~epFWozc37T^zhbY`A8p8x~rakA( zOFE->OUE6eeJo2Z4c-$0^K{wB@v8bCKDAB`c28p~@8K={5&-;U6UT+mt=#qTO@hJS za~}bvXc?QvMG&fB9R>RFsTMFU_)z51sh{G(8_fMZPepA_nTTmBE5ky zMc*@GGomb_30^nDe&z+VVjbFe(vC1Xc)pn$5f&O{mYwKD3=eZR&Vmh=EY$d*wyM^B8z^7@n~mZINF&Tj7PKzHh+Ue{F9`w4nl-rZ4CP= zh_L*Dz;gBXwFeO`UO{yA@W+Im0IOP(tE-22@M;_Y+~yhs-_ zWR5{hW{7{rMJqvRhwKD{sWS!Eh9v3a;R;`c zY?Mv96*!PZj$DbPTV(Uk5d@n=Tf!JFky!8Y^aETbMLxwxE7a;|!3PPJj~31KRg`-n zsZiz#7fMYaA;ASoS*55!W^i@b1=@qp@Dx{G=JGK~EhLk{o)l^|At+D_mERk~D bkz5hkR?|`|A|2WqL!c`vSLPV~dNBSkVRvmu literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/Palindrome.class b/out/production/github-repo/Others/Palindrome.class new file mode 100644 index 0000000000000000000000000000000000000000..37e0d478f7ef6e871d2fef09640db08282288714 GIT binary patch literal 1128 zcmZuwTW=Ck5dIFku!Sx~dZDdWMQbatwRkDsXiSu(2?@0(m>PXBIlu{Q-R{=CH2UtJ z@JSP2dC(V{XyT&}{wU*|W!sX{Y?z&$Gc(^e-x>b?`}rHd1~yYj6I-V1`LFm#hPm?)-w?B=&)e^| z`9U;BvMJh*-3e<_O($^MV#}06XHExNmwa?gA;U0#mRp1_kIOo4$t%;F(K}u`0{cNu3|X>?FsNXfe0`XJ8O(;~q$)*ZaT5wX zK=v16uZ<%p+iL@;1H`|FiL#OWOUQOfXkoMbupnwirI^P8wM$|Gi?~SHBr297fVY$_ z>lcham^21RsNWD*`$mbtv;ijibf$!ar^3FIL{@G?I>gEiYfrEiBCN|)r6Q)w$!Q%T ztWSuC`4x%tIfDBd!YKnJjS#*=-WSA`e#uae1E~QfPl@EHjT|dO6tbk)GHu}s0ZS!^ XgeoV5DkFsAP%>g81nxCLu1@( literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/PasswordGen.class b/out/production/github-repo/Others/PasswordGen.class new file mode 100644 index 0000000000000000000000000000000000000000..59231185897a46cd9abb7407897cb8c8b5efaa52 GIT binary patch literal 2117 zcmZ`)Yi|=r6g}fO+4XuMt`jFXK+7AOS9k_+D3F9#zjk961Yu4+;38gJ6 zANnh*s;WdkRDG#Rph*0Heyr3#&|gtiYSS}oI}b=L@6OyibMLwL+&iF&ts<3X=jKg;=B(wIgXO6) z)4Ohr+0?|dZqBer4bPHtO&Rtltdc-$cF3PFy;A3}Q7X;2UjCx#bko_OpITAl`YCxwRjUULRo|_L(wbVc?W;_!Mr89AB|ZaM3y(KI z)OTfv1>Eusr_wU5s;eNarS@b0PaAgG92ytckm_3*!qOhb*UHGpW8rBHosX?AzFppGSMg!!9kMeTmK*U@{_c)O|_y6*dTP$15a596Ka#r?~bZHHQ&i#2|Db6r85v c>i<~g;hOlHaSHU(GK9YW0M@DKSO5S3 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/PerlinNoise.class b/out/production/github-repo/Others/PerlinNoise.class new file mode 100644 index 0000000000000000000000000000000000000000..0059d3b4a4d50d4faed47084596089134cfdf815 GIT binary patch literal 3518 zcmZ`*ZEPE79six*?tDJKB+kWgn?lyLi_@)58amgcU7^jEEou6arKFT}(6e)mFLP|y zxunThx6-9yV=rYb>&nVNDohnp1#Cj;#I%Bh2GWEyK$`e40Rq0zen8^uR5kpb=UftP zof6+Y|M$1w^S9r>^{Zsxp)_<=W)}l@)pkOxgArj{`jBttoQ-(!0>Soe%BGBCkPfj^r7u?Ux#SF#ZR6c zw@TF_&w)wHDJy8sjC$QDS>^H0VYlX#$F~V|CpH1HD65HF8N^xl^8mh6-GZYu~FFSAW%dK=Dd znWLqOC7jXuFhSjxDOJkjqz!x*FSA3vUa#6R-c+RIEY2BNhxKfPf$!lJ1LyIoNQLz_ ze)?wKZh~y{zWjt;VC%iUtmr&joEZ=^50~v(w@;)ccLY(hQg@DXAVy7ZvQDM5zg(Sm znVfA+a<(m*I|_tfe`T5;mksw5Wy^+1IRN@w!6sCyLa9V3nRUl2GL{HcMYjE7O>m!a zv1o!GWDg}nEC|8iFftvVhB)tuTM-@JS*uyRHGxcr09{Z<6=ZM62=3xCZRO4ef=~pg z`20MnPQDev-EbAkn>_f?#%D+}!!!d7PXTLjHz`fbj2s&K&QmW=-hWrEeh)rhPpJM@ zTi=DRM|%hUL(PG!2=s*gS>4oEUBY^QHeyCrUqW*_Wa`~!BpqHvaA-cFTwb~{uk-nl zRBgS4R9Z9jG+mnd+XxLy;dLXYM{<$Yz*yEWjf>cm($`Pq^i(9J=W`K%Hfly0WV1gT zGh+<0Hm#b`ZZmeci@uC*dG1Q-6ZxU}7(@MSKFa3@^TyKUrC<7mM=wKqkr}Ge=5SXk zQXZ13H|7nIVOsqKi}uS#&9Ik1l5J^10w$V~V$;&tfK~Vcd;Vp<`$!K``zw?b_;%RB z5}Q~-26O1Z)6`zTeK>=SxPUIa$@f*#?^6C-Wbp@V#fQk@pM3wD^nb8j4(2zEyOF-{ zK|3P!nc-hMbnIiy4tYAuC_)iRA2Htjl--3tGUKffU;d|A!zSie!6|%^ zrwDrJX9$TUCa)`s;tQzo$^UICwlnZeXv)WE`53{Q@bQ$s1>NUUZlZ}FAzDXKUAnBx zu-u6rMwMFxd;`N=S=}lz8VIbJ%?1rKxKPf8{8`mhIqNf~Y6eSYu$a|M%?ut{UCoBc z(#952A>vDdmXOSwk-8eOLbcW^5f?EHPc62=)VfWhYl9gUuM}ac=HikW^_bB*Gm#FM zD#4$MrxK|c)w~Pv!+DkPI+hMB!>do`{xB;VKoq+PvONUcJ`Q6)n?HnY7{-GH)?SQo z%^yS_U&C=c#w~gTuT%D8>i-mD5-wNhYcFlTL~HS-&_{5#(`%kyc5)msTHb?QJjH3> zfL@*w?4w-=SUZ1;JxB|Uk*DwwPhnaX=|>DTg|iZ1s_3-@1P?q3FbN1l!nV3O0w{Mye;A))vvyqo?(2*@$6A2xUVqKVtN#Tz+dVVJKzf;_0xr^m2)` z-qVn7xR!17XOm{qY`laG=>{{oCEG*{#?QZw7~`2ui%4Gv87U*5i_a&C#}DPM{5hqI zSS8osYvOytTYpcUJ6Z{3RfLF*pk8^mH*!@0N;A{9bF5>t20p2G<{zTqisPk8%`d`$) zjyL{~>#JOOLwJ<SqOF6}JI8tAHmRx*!iDj|Nme|_lXJ{xsuF1SYMBYRjH4Vf* ROB0YQGQ#o-EY^py{{eQf#OnY6 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/PowerOfTwoOrNot.class b/out/production/github-repo/Others/PowerOfTwoOrNot.class new file mode 100644 index 0000000000000000000000000000000000000000..9c224fa16c192e5925d7f04b07433f065d8508b6 GIT binary patch literal 1082 zcmZuvTTc@~7(KJQbjxisTc6ZMG~W?Nu?wuB8eg5Aa73&uocBWFL0EIrGgqXU@#;lOMkT%wWkt4{qtW-HkjZ3@9kbYBGr_ z19vbjk)i<;cayl6#C;tPbj%1O<~`qw76sJ&#F~KiJlJpr`pTZ~F1PCIZn$c%*NCLc zfn(R!?9h|*Q&5Yxy{166T#2^buvuIQ_S~?txw;or!sQ^EBVXP2e1YNoyYi0x-Y(W` zf2&xHLeJlti}mbqiwv0ymIaii!=?7dR^-)+Rmb*yHzcp>x9S3-Bw%{Yjx3?K0zK8p zc6MLejo2nLp#f*xb#_aeoz~bP4dzP|+>#(44=Z3)gI4IcFFkqa!E^1?@(d<=(I+qv zpXaPC9kV7L;*o54Y~l%?3iQA5BR8}dkJVPtF=t{P3nmuv%)}VRnO{3;%WGP;)sPul z!KM}M1p*_TB|nJ%TOPhRcCLdvSChy%IHu9v~&l6iX?l#$w}0vhGESt}-Of5*?-V7-v(Io57{n zNTDspS(g1N6mS_iTFJ8e3PxysG_J3b_gdVcoM1|aC4^4jd>yC0U&SE+>D)g0ayf0| k(`V?~0W|gNUsLS_#?B;=#&wDyrtX5$za*2pK|sOHKXoYNO8@`> literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/Process.class b/out/production/github-repo/Others/Process.class new file mode 100644 index 0000000000000000000000000000000000000000..adfd5dd5467e0f67c989973939713fd92621fe73 GIT binary patch literal 403 zcmY+AyH3ME5Jm6g<-8L@c$Abtftz$7B!mDSIG*~qb@@j8glqC%qJ1NbP! zIN63~&z+e&5ADzI*EfI>&YLLX#KWnFGeUW576f`Cv=p=1sd#2Kn$QSy&g?f&iq$SBb{ZpgyuBOInrZO^wy`(u}YTyBwXvr;sPc40KkLXgsLb)&CzqLJ2o7fjx9$N+oZ26-M)~7)$32thlmn- X^49jrA^M`*2Lp~Ukce=+cMbmlHwjLP literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/QueueUsingTwoStacks.class b/out/production/github-repo/Others/QueueUsingTwoStacks.class new file mode 100644 index 0000000000000000000000000000000000000000..7b4f71f0ffcfbfb0f3c9b09a96618b90720249d1 GIT binary patch literal 1114 zcmb7D+fUPA6#so=Tenf=IzUtuymbtz;stdGiN+;M7QqZ5Vq#Lp=T=zTrR_$h4_*@W zK@&|hCO)VSKKmev!+84x{G*KLYl#%$#WwkR&iT&y{m!kwet-Q5;54QZ*o^@R2NDQj zAc2Dz6w*)}hj3U(M-n)SV?t7dloHagIMNbEBphdmPUxoYPBOG8sX2!5WowBuwB>b^ zU#%I7+@94ID`e@+TScuhr`fvDH;iGotUC<*^3!ga+m3pz#%uh#qnoAKRjc4?#T6$* zn1-gC3_Z%t{IXWp)QV=7)Pif1TgKzm>=L1L?QqQ?84VAWp?3?*yzZ7g1|molteRcq zSzRRBw?h)6f>%Zx+8L6;T>qj-7?q*ogp89IlWrym!V_Rlrvpk;x?67*D5tWeOt6BmkRV~!-Fb}>ZZeO zicczmdmq&6VSuX8a9nQCK&_ex@cng5ouP)i)OM~Jgcz%GzH*5s#L%q-NjE@g9$u0gTEd`Wx>)!>%8yqU#ei(EczA|1{jFJr2bgw zhm9dP7(tzOah2BX4zjq58QjAH9$*O%$@4MYKEZuF#Unh!b9!Il1>WH$KHxPz;tkgD f7T@vSYi5t%F!W&$amDbNSoTso=@%wFg#CX28Cw92 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/QueueWithStack.class b/out/production/github-repo/Others/QueueWithStack.class new file mode 100644 index 0000000000000000000000000000000000000000..bc85bd49ea2c8aac61d52817e3118c2fe4a8adc1 GIT binary patch literal 1154 zcmbtS-A)rh6#izrblYVSs1&eO3Zk_w+WMauj4>$0i)uqah}>=KhAyLz+`>TJTPlvV0UVAX;~oUhC#fYd}up%@JJw0DsKs> zPu$m*zW!dnd46p@v_fm!4%#O~ zN!#%)FA&I2$H?@Qlyb~oR+640-*76ap$pedZ1 zoB;!42F`J~fvSN5<_*-4H*gbqGC6b%0u!hG(VTms-xeqi8_O`eiJsfzE;5FBy8Kak z847(QNM@vo{z;H%Oi-MpY8?s6fPCc`qVgTet79a-LhYv`pJj7~Vg@S3If?~>m`4r^ zI8Q4^1c51JsS=pRObovw1ps>G3)H0}B)9u${1$-<(pZux)3VlM6zah&E)b3&o_vhw z&>5CnCA^U%Xzx*AWXe7u%WF}UVy44CzoJvAPt=hh^(PMQ5cWOdxsM_q3^=I9+!yJj z3PoquOaI56KFz&C+)s&TmAIds!9Dkn`!*?I->Jx-L{+3CzD~Zz{yn5(7lNN2?eaA@ r;{IIJPjj1$WphzebDwU$v&1OQDZgz7v8&3P~ zKjE84AAD{5ko3qoK6+03FZiGMQ2k~T8rtB|hq*g*@0~l}{qCLF=P!Qy9l%GZ>KMT# z4WDV4>BVJS(GkT}9TChbaZTy2Ynao~i%SX2tM7smH*_pwDS^**oWd8%cUi}mSV;u z*)n}wt=r02P_}CVXYy-7S^Bl<4O#K_<&ApPu`M%@OTJgx41C+&z0AlJ({=?;W_R*? z=Ds=YnC|X$+Zvv1`n!xZc#K&fQt$q*;_cgKM^1y;lq9l10SJE0?irGZ_Ql;hur-v7>>A3b0u8R_!uo zDUg09BviQ<4~rjeJBRZIiWt=(4V17e0ENUdP=;+_5BCi?s2FhJ31t4OjRcY%*lUG7 zX$9<4O)G8O5JVF>dXt><~uNhQl4t7lKhEv)EnJ%hpB5)#m zY^y}QI^lH=TqmFH3h}@mvs#sIQQ-XlYQ0WVB?7NS{bA~ad?Yk4LscE*sAP`|P3&>Y z@oEHqgw4Z{nq6D0RD*}%gK(EH9qH}{<#5Ti@3G3JKgYCU+2zTF@ZuHagSApiK?iN$ zbm~$mhO!IC(1O!^qel4NfsdO|%}qJR)il3s55#j#h{v2nFizPMDs{ZgxzTb!hC#rG z?F`P+OKtuIafSnK9U!uOfavxU#F~gV(UYHQKwEu+!~uG@o6u8z4H)M*8t8A}jU$Eu zWq69@OB;8-*#R;_C<;Of{YYZ~?<0vkSL+xI!DU(i@DARkUkcYSf%gbFjTvMyNuW9E zW7JF$Ixhxi3i>ndi}AaX`vZEefz*$r;E_U`8f@Z3o~og%(b=)lpD{s1{kgFQPBxH^ z{DkCGxOj?TV!rc3RQ&q)pUUMC!$m{(CU_JGuaBJdldUx2jS|>dLc2&<*EwGz7{zXm zFvh97z)~nKSD4}?ziIxOKEQ{BJ4(w%jtDhi`td&T0!a-Y3vv1{RzTnr>Ld8{A8~G& Ay8r+H literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/ReturnSubsequence.class b/out/production/github-repo/Others/ReturnSubsequence.class new file mode 100644 index 0000000000000000000000000000000000000000..29c4eed5bf34c12d7993faaabdfeeb5967573a55 GIT binary patch literal 1665 zcmZ`(TT>fl7=FI&h7HR?AZch?iAIYwCmKbpEmT^d#Zm**Zi`|)bO}4j(qt1in~vW1 zS9s}-x3w3+u_HggJ8%3I-gw(_TAy!|84ih)+3)b4pXYtQ{PF6yLjd!5q+=5E!}t)F zBlt+i6)m?xqKp*+Zxt2 z+z}YM=D3c(B%oxn+XCupW6u_dmK@jKY}a>f@4mHLqa;>pl&#vf3fb_S(F)t!*88- zmRDh{_y98+NKMzj?K`!iS+-o)_85Mo;ykh4Zai6KUk;kIjtUYOHGQl6c*AN27&KfU zpX5wn!aH5Pz{N~|!0f;Z70YFf;;}%)tXs9(vb^eMqwSULHAgZy*~iW$S*(GxNNV`h zKnWWHW4B!2_R?KI3uz6T2DWgQ4mg`ZG0{; zewr8oPQ@445jcBVwbFKKd$wobOFT626~30sHwM1N1A*lK_4-7Pt=)aQ?4J;sKeT+i z&OvLmsYrB*bsELH90i|vZL7|H#)D!`iUqW$G^%lq5`#LzF$&2cI|{n)Hrq!*lRYPf zJ+24_-nGAHIcGB2{!a6C)NHrnSA*BV86B3B6pXGcWPPwpxoUaK45`v!l_9KV({}d+ zrZTJj4n3*~e0C79zM78gBYvYhBzT+8f0F+efC6?CNv`L3D{^O-5zZYz{K7*B=eZ7b zg?NK!qj#P{inn3BiMJ?`&VMpknEQ?A2*s2R)E5ZvJjc)hv{Jr<$VTB;3~x%MPNi~L zO{lYnKOs)ZY(kx*?5Qe#e*L%1s|0yx7$49O;V;f}5<0Vv;9ZQe)G=J;ejVdMUGvPH zA(S-1sj>>ZgA3f_obhRTa15!R!9`+9QIp}PAWMsL2)*VttRbf%uc5#LNq9+ybooHK z@I-I$FqNg|A3x6Ivw%(zD?SII3D)<@$UQMd7t;${q^r3e+ICO`#R!S z4r3CRbd2M&ju@_l@jkAGu%aW2oLoN8>988Yhw}ADa#@q+kL77y!!;S2mp<1ud?Jm@ z8a~xf5EyQIX6-A1Xz`)BXJ$H{-N=-sDJu{z+jYnEI<6%!fBb#UH#AJAo+&tC^`GDc$Mcc7%b#}KcchlT%&=M;)Yi6Tjy0*Ocj6rY5ZVSv6 zH@qFoZD&f>9ydz?y3@9uddaGF+_v3xSSh$`+K#|fYHI*W*>mZZm8FHvhb;=W7c|{E z6HlDrDln$<-!xl26mi!td$gj!Wa>Bxs*dJayDhKTB9x;&?YH`UE&MC;WcnoRQQK)- zuD9mpod*P-DkvId4S`Uu*67izmzy28W?i=>nP>l-s6{zf1E-NNFokIYpW%jqB5rE9 zWncrhse$t5+WHL*pBpHlESHRd1*EBpQofQemGjq<$|bpyG_Z*~1}dmZzb_2jMU{R^ zJcC*=a1UDs7Lnobk4Z~l_J8Lq5P6kzWBZ|1^8~a#v(d3OzLY~REDTJ&FF^9u>a=$# z*B;>tk{_NO4CtATR4MPb$ufo8?66kcPj5Ffx2Y(Py0Xk&s%}ETI%+1emUL=Rj`6|D z18UUlcAhfXS0Bbbt}UsU$<&FcjwI>BmtRxMvZ&?|YgHr_Dp>)u{IcWxT?puM#@t`y zEr1ye^UTq6eVvvJcfox){S4xXa(RR6h%$z7hG)Zfz*!`D3p4dOT4eBVOc>yPe<+uT z=-*@VDFTV-80sQeeI&%e;U7;i92@CEi-dED?-1cN(M9NyI6OG~lg`f(mL57icPQ;CQyv3X;J~52EKtTM3sTa_>MaHH{9VO3L+3VMgmA%fU3G*?6Pq?4@ z1>;>ray%N>ms_7eAbBD>I|GOKX=R0a{4KF5wPzEs(q0tbx#gxK9@nD_w! SSxzXLe65Z0wnSS1@BIVh2X*WK literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/ReverseString.class b/out/production/github-repo/Others/ReverseString.class new file mode 100644 index 0000000000000000000000000000000000000000..13037961397317571fe780376b95fd5b5c52bf3a GIT binary patch literal 1577 zcmZux-%}e^6#j0qWW%xu1}GFmiPhGSP*N3ZD}}a+RMAi>6g0(Oo8*!#CcBx6ZKlrab3w(9cwyn4C5wl8HgflKu1ogpGL86;5I%}md|x;7#PRZD85kgO9Ru$ ztKFt@-_fz9ASw#69eq*u&QX;0HO-nAQ?nY|T zsrc34498+9xt~)VJWbrgCdY?;Q!Sr5?%OGX*tD76D3a3C4wY)+#MSGuvWDFjfuE$i zOXhlfGu?4Pr_3ytUfccmmK&hM65Irjk{2=facNt1SIh5)^{J~8KalRvg(Zn40X7>QjVV>Hs>O3tf z_-|KFQ38$;a)Mwl5N?_`UZ#GHm=vmI-h2TgIFEOTVv_rJ zxk5a34i~voWoGdnl9VwR1%wUnU#IB`gJ@z%NXzLT?^HFB~CS zc!J>$j1ETfPhiGI+jt}0#@Hs6Ba9b1crzAjV`A|sCMnvO>K-_ALgg&U1cAf|WtK4J t31o#pZeTGeB+snVDp0>f{L71X;pwtIMkw;}QSu%k*Lt=bYW&_2oon43W36}VR zuVUl{5Ka65ehNQ{@qb&)Afd^<_ndR@`JdlCZGZp$@e9BlN;>*rYAB{LjTs#Y+>_IN z>CWotg{9*G9;&NbAFQRl~sbb{C^+cCgF*%oW=NYSoyVi8I@wTeqq;+w+`&!eWD?%&{e)w?4J) zz>&2DQf9eaED0on1MbpLf+(JD{>NfM)o%wi=an1X>k{*<#5B;40fB)C`C?%W^9G*c znLMyy;5ilzEMeKeBnlc<46I^J!wUm1u`ZCkswo2f-A-)o>^n6=UkFtXTcOh+zwBEs zzPsyNWv|%|**M2;@b-E0$_?33&2zqlWsjnKpKMUlZ`1AyZL#-Vp-jX={R?4gH07Z> z0Ti<&MSHu*ukCP;s!jj1>~*PBETOXz<+O4Pb!_|$+6k_8g@=%eM0zOO zPof;>Nz%wd)3F$?V}xE0%Z*};r6lb*ZV)ZUtO;64V(@jIV|-n0hKwDm3Ss)E_LtGE%mD8V9;g1EX(FYPU90!iB6lB!rx@B{oP zacp0MH$dJF5flO`~GL5q?L-sc8 z3x=X2193MQ_eAu-dp>O{PUvyJ%Ok1ga#SCuhW` z-1d1eu-zn*!JwIX@Mu7+>OU|8Bc%MN=M6=F;tLWr-Eb0lq9s+B0vTN@Z3_h$6nEvn zyti-!!@{w`%oWydF_hMUI=zwb65_@Qj}mvmq=*c;IP|9ir^wTooECozqB`4igX92w{09a(yFYoQ9VbTA{w d7ZQ3U>RT#WTM$u3g>aRpifxi**r8cN?H4JNU;6+6 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/Schedule$1.class b/out/production/github-repo/Others/Schedule$1.class new file mode 100644 index 0000000000000000000000000000000000000000..4533374dcc830b00ce5b81d640c2512e7e56013c GIT binary patch literal 889 zcmZWn*>2N76g`uem^g0hF6>*Nfo6kH2?>c*kx)cMP)aMM>ifhQC9WJB*-pQT7bF&m z2gEZUg*fB5sB&!0a?hMO=U!j``TO%1fLC~4MhR65CLWhz;E9P{i%8AHQxnfj>MN&>GXbL?PL#mL&e_%fJwj>qT9O}eXy7AcRsX&{q@wtcfoSt5(X^E>@CJDG&h zLEf~-?5$C_h+K8(>2Gm;^x^P@&VV24UEum*>;=;!mCVA4iMovjnl{R?Y*h5Fg|@(Y z){Cq}8{61ni*g;R?X&27ZERKw$o<%x o$9G)I3onz@MUj{Z8@Q9&-^IOjy^jZ64LrmnY;tFjUE<2;AGp7`<^TWy literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/Schedule$2.class b/out/production/github-repo/Others/Schedule$2.class new file mode 100644 index 0000000000000000000000000000000000000000..8da06bfddc5bcf9e378e75fb62c1efa96dff8f07 GIT binary patch literal 1114 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 Aga7~l literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/SkylineProblem$Building.class b/out/production/github-repo/Others/SkylineProblem$Building.class new file mode 100644 index 0000000000000000000000000000000000000000..efd7c562275a9e2d763a5b1c1bdfe6c406a6cc19 GIT binary patch literal 612 zcmZ`$O-lk%6g_Vo9ml3LO-<9%a$yr>3wK3}gkV52Fx-#&(r4ocqXw1rpIS)Jq94$Y zitZaN2yAmd-#zEt`#!(kKLAv5pd*A#1RAn3+L0zFO9jY*$-<4W`H!4WRM_C{@o4^L_4Ot@ll&X6zv^Tx8Q!xr(>MqSPj zt<(6`blB$JjZGK~@%pG^J1yH2GG7)|$;=SGmJ(P9m3{_D zTBJFedL4c#BunD2^5cPhZyPYMZeRmN17YX}BGRlu*Rap9yK?1U0*08xs5rLUt2EjJ z-l4+<%5v4@%1IRI>>B-w3R(<0MWk`*i4=&%q#(b}NL7^jG0J985G0>9kLFO4C`7a*{?THX(NZ=V6ydX}!>H>voDar`XXJdXO^(cNM6$SiA WYEr41rcA*$lH?<#DTG~YfqetPY`JsJk9`dd4NXGP3BzdO1$H800$GHt zE4-fS6<*H*MvsrAC6_6j0l-tI1z+W zpVhaE`B+5vHjf~b`=Mj|BRleBy=rEpF+p3|5p*jEMAY-`IF>0}>%H15KIbY7!$stX z8&7&v{>DC=+0V9)0*X3x9O}@J(~(C`LyOQ{yXx;~f+5vi-wvkT!FVPdekZjfSFEiS z;+P*h%io}a7ebB^NiV=KWQ4Tl1+mHfEv{TB$nae?PnRI`4T{-VLN%L9WL~+ipu}f6 w<%B%xkyTHqAcDbt^GAzqRJr0QsRyMbdo4Xkr_Z2$lO literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/SkylineProblem.class b/out/production/github-repo/Others/SkylineProblem.class new file mode 100644 index 0000000000000000000000000000000000000000..50c2006541f9510a5c0388f3a243c840802e2a2a GIT binary patch literal 4275 zcmai0TXa;_8UFUnIdhW93537^LuR;xVMvHXi5fJ>RZ>Hsjer5IIZRHHfw}d}3?+P-v+m^3;o_9-6ncE^5hr&lZD%%Cj@hZ8Cv&B2 zQ9%tVgziseQ^f&=VCR-&3fkV>I1gMr#B+yBnNzm&h{f#+?L)bwl|E)UDVh6=T5&2x zAS)VQ$(w>sDa-p(*?fujwGW-P&RRWbD?8aUQgrAOO|)^VXelf`*+{8U3V}kBYEN4# zrqVqlNlSQ;KQv{hCZ{Oqj{nUQ z1m`O|>yF>;IM(z~s!-hNZY|oGyuzBsE^hQmCKjVmiAJR1VRR(LtCrO%2aC326?5Xr z@|)?M&Q~bztFx~nyMF;R13Ym@-NwpA3-2@Vl0x%HYBFmTOAh0HUqfmZK1jH0nMh^F zt4SJVG`7@%s(M4PTAF+_E`_4y@Ef$V3|}yl;;50=?cS$Xq5pP=ER2Ztld+viy9#J` zL)UgTgm^pPP05nu*xBNvWX%^35^Yr`WG!QzJIK0bKTvq3;hhVEZv<-LT@6t$yv@a& zV&N|DY*3YMRanj>%WRRK^L~#}2#@4SPSQS*l9sX5XWG|plj1kA1APih+(uAe%?5sA z;u2mKgI7%a6hBi~{r@|eiS6h$F@smx%DN2v+{7>NO9Q_$@oW6X#6vh};sj2b7{VbF zzeS&kyKuMMaM{FbxWZ&N@jG0VGp;Gb8(-&pVWNy#_PSeJnA=xv$HeP$^mV);!<>na z$n;ITYTzva@HY9VIbF?t6N4V2-wWP%Ogt>pB*snrL4f@c@0$1%-c^V+L}%iD;j^uV z>hP)4c9J#JUc0SQ{x{i;Oc&VNq$@Gde#=VbdIqIcvpL&VhILtKjJGHx1&pkHt~e;& zlP?D!5>4jpZ=HV9-Q4Bt0D7HYiano}j(CS(67?IlG|0P3*0^@O*q*cAw<9DZd{};@6i>g+CHvOj(6t*HLzZNA4sg^?=k&*Y2K^nTJ7?{9Xe%1y|zGr6-i*6}A!H-EMT_|HP- z2q{mF2KaoTkK;X@_3*3s)f2N&uTco#UXCGm(ZGF_P0s-R*vXlan&2p#--k|1;Nx=$ zj9x)-7TVC(GV})$v9}Pq1|v8Sk6prct~K>*QLVkXjBvl6i0Z-K*U=KyHSeR#rwsE# zP|eK$HIWF$wDB@p%UHyniv?BCMYRnrlueF{(1yiWi6#75*N#nCifvfN8ef7#SdLL@ z9!JzgKR|?=upSR!02-~L*o6m)dll)}O+tc#-}kKrBiMtz^sWuV*hg&u`>Ah5;6to3 za6qa5kV_@a&!=DtO*|HeC9c9qj9x|C32p2e+U5`%O?1TKvsf}xqg8$Z(-s|wyWkSu zUjKU0uwn6Jk=WvVYj!QdRMKdjiH_Jy*gJh^qK*j%9(s2#6RzK7=Y^E8|P6La7Y+KskQ|Nf_<7#S-&3a z3o&=@coFY)xu3sp4VKZ#)M2`G)x=A%>J)uOZ4w)ZN3=`WBr98vM?w+pB6_2`8;Xb# z(R`L?5RdaJ*QlyxRcw&R%*;PscUPZLo5cFGh!($u4YDN1$1mcp|J{!@5v?!e*;KW) zyXV(i`OWnfITA*ohiT&;(#wqnXnr^lEM`&nK#)5PFuhkc0=tt1vDNgcKgN|HJO1XLFj zPuhmAwqTNyhDB7OJM0>>P7T(mUfQ&+zOkDV9LSo*%hOK8`#BfM_|<|KM&6kc^Vnwl9n|nsQ7K2LxNSiRUV42T4!A3*2;ON>a*+v r7hKo9UeSsyX$Lhra_m9;QH4C`0epg$2)6$K9Z9e<`6}{zC)9rdrxfX; literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/StackPostfixNotation.class b/out/production/github-repo/Others/StackPostfixNotation.class new file mode 100644 index 0000000000000000000000000000000000000000..7a389f88c98dc668a75810d69936a016f5c65eb0 GIT binary patch literal 1817 zcmaJ?O>qQ3dhvCBqvRszqhhYrkN*EtuLBnDgy_gs5V_80tB`eFPVMK9N(3~tw8kR+~ zBG_sOpM~)`)+W1yV7TE*DRRTbcUf$c+@Q!6^~iAm}8*fhC+DFsaNynq9sijK91m7xwwu|jIm0O zgl>j3Z0gv;O)>aF$CtRJ<15_OF@ss7!l^{Et23?HWdEHytLTJY<;-?M z4|)YNaF?0`TM?rYOY$eOlIGZ%qh2c-wPjY|y}d2Ax^*U*1f@1l;=|-rYBIv+%C0=4 zYC9oZ+-}dc!zaKDR09oGHBkd8zpx0$bH%g zw(v5)P$T@10X<-=F~)VArxbU^Jur0u^&15rUg8>TDshIg-jXL61pIKlf>)^#XOqEt zxQ{-8Z}Sm)4&cvCHxO8Qgy76$XbprqA*1lqR6`#^7+{zYguU<+%@BAEuM_VhHifA=QAAdb_? zp{Sz`iCRSPmWH==1d-72j*c2!2xCa>7j<01u!hSzbR@)bMJ!3NysKjbsXB~eOf2IX z-qX>H_r>yo;7kY)lNvtM(TXVzA8EL%AiQAbtTA)RQqY`QG;f))oatm@6TW9VnE?f% zLEEwYgo1<7z2eR(1?rGHPvgdv?O0>Qr8&!+H0N^CotrjuQ>JGNy3ADltX)u`54lCh zpLV@@5=PQ-EN>`h777;0j?}oHwY)-X(#?-ZmE%vfiKsqf`4{c9Z@Z4^Ei2d;?JOZH z`gSfhYUZhAkap3JPos0Nhe?Q zSs%+>qPLdRt}K`Hl}!6~I~y#K)y1viBpu(%Sl&QF6^?$mQ3E$4EsRC$GkfY z*A&!F*cr$4iypJ=e>VI7A4s2Yi(c9iIVot^sdkU(0s|eGHEOo3}gzY0QhoGO&OQb2N|@hBF3iEE>3p zTm^u%E*Hwc60RF?;2Ox|Qv)7m73{Bos=9Ck1h+bN7# zoUUDCU#iT202<^JDmYnKq71?RpEwPU;aCV}}YRr`(pmR=`Xzjh8 z_HwE{?1ZaH=iCBgHRkz@aacJ}lPo$pP0w}#j`G26;{(i>LG(LM0iM~$TwfwJOgg|_ z@7jdY)%`01KT4gWTpRdE1NBgOszoDSCe>2X#xa~AMLX%0&kauERm$iy@C_|$DSNVo z;MGm2DP?pEHCMZSL0}W1(O{xki>s$L5KaU-zJ=Sdav!yK(Y^(p+I10i14hTn2I@D^ z5LeeREI5s;h<8WS2WSf5E{^diseJ+biRKOLS8v?Mfd@Dk#Pm9vC{uUnooMUZE8X!L z25wo09uGxA8#olHxi@y2dx?8Qp4ZV5*D7k^NLZ+8e<=5$;VTCJnqL^5r#0^1;|Kgy zrXMopHFCuM8)5xL{zIMwt@0v(J9vd_Gs4(U53MZbA^sw~mNpi*oh9r*53lAjsd4Jg zu*l1Z;!AYnHcn#&F~;pBhJK>x!z$jucjT?%HLT+dWA_qIKN0oeXUaBlp3%<|Lof04 z6Hy-?k^h+Ie-M`!dW~1L%5P^Bod^-l9dt2TkZ5k>6jzm=RVfY9XXW&$Y!PNYPs+^@ z#^1!)!&cB4B}PmEViK<})6lD-Ptk}9C(al_ZJT&Py987L y75YQlbQs(bN!|$gmo=Q=L literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Others/TopKWords.class b/out/production/github-repo/Others/TopKWords.class new file mode 100644 index 0000000000000000000000000000000000000000..bf4ae0386e447b591f8fcb01ca3725a1057be1e9 GIT binary patch literal 2677 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/README-ko.md b/out/production/github-repo/README-ko.md new file mode 100644 index 000000000000..c53868cc1310 --- /dev/null +++ b/out/production/github-repo/README-ko.md @@ -0,0 +1,187 @@ +# 알고리즘 - ìžë°” + +## ì´ [개발브런치](https://github.com/TheAlgorithms/Java/tree/Development)는 기존 프로ì íŠ¸ë¥¼ Java 프로ì íЏ 구조로 재개발하기 위해 작성ë˜ì—ˆë‹¤. 기여ë„를 위해 개발 지사로 전환할 수 있다. ìžì„¸í•œ ë‚´ìš©ì€ ì´ ë¬¸ì œë¥¼ 참조하십시오. ì»¨íŠ¸ë¦¬ë·°ì…˜ì„ ìœ„í•´ [개발브런치](https://github.com/TheAlgorithms/Java/tree/Development)로 전환할 수 있다. ìžì„¸í•œ ë‚´ìš©ì€ [ì´ ì´ìŠˆ](https://github.com/TheAlgorithms/Java/issues/474)를 참고하십시오. + +### ìžë°”로 êµ¬í˜„ëœ ëª¨ë“  알고리즘들 (êµìœ¡ìš©) + +ì´ê²ƒë“¤ì€ 단지 ì‹œë²”ì„ ìœ„í•œ 것ì´ë‹¤. 표준 ìžë°” ë¼ì´ë¸ŒëŸ¬ë¦¬ì—는 성능ìƒì˜ ì´ìœ ë¡œ ë” ë‚˜ì€ ê²ƒë“¤ì´ êµ¬í˜„ë˜ì–´ìžˆë‹¤ + +## ì •ë ¬ 알고리즘 + + +### Bubble(버블 ì •ë ¬) +![alt text][bubble-image] + +From [Wikipedia][bubble-wiki]: 버블 소트(sinking sorë¼ê³ ë„ 불리움)는 리스트를 반복ì ì¸ 단계로 접근하여 정렬한다. ê°ê°ì˜ ì§ì„ 비êµí•˜ë©°, 순서가 ìž˜ëª»ëœ ê²½ìš° 그접한 ì•„ì´í…œë“¤ì„ 스왑하는 알고리즘ì´ë‹¤. ë” ì´ìƒ 스왑할 ê²ƒì´ ì—†ì„ ë•Œê¹Œì§€ 반복하며, ë°˜ë³µì´ ëë‚¨ìŒ ë¦¬ìŠ¤íŠ¸ê°€ ì •ë ¬ë˜ì—ˆìŒì„ ì˜ë¯¸í•œë‹¤. + +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n) +* í‰ê·  성능 O(n^2) + +###### View the algorithm in [action][bubble-toptal] + + + +### Insertion(삽입 ì •ë ¬) +![alt text][insertion-image] + +From [Wikipedia][insertion-wiki]: 삽입 ì •ë ¬ì€ ìµœì¢… ì •ë ¬ëœ ë°°ì—´(ë˜ëŠ” 리스트)ì„ í•œë²ˆì— í•˜ë‚˜ì”© 구축하는 알고리즘ì´ë‹¤. ì´ê²ƒì€ í° ë¦¬ìŠ¤íŠ¸ì—서 ë” ë‚˜ì€ ì•Œê³ ë¦¬ì¦˜ì¸ í€µ 소트, íž™ 소트, ë˜ëŠ” 머지 소트보다 훨씬 ì•ˆì¢‹ì€ íš¨ìœ¨ì„ ê°€ì§„ë‹¤. 그림ì—서 ê° ë§‰ëŒ€ëŠ” 정렬해야 하는 ë°°ì—´ì˜ ìš”ì†Œë¥¼ 나타낸다. ìƒë‹¨ê³¼ ë‘ ë²ˆì§¸ ìƒë‹¨ ë§‰ëŒ€ì˜ ì²« 번째 êµì°¨ì ì—서 ë°œìƒí•˜ëŠ” ê²ƒì€ ë‘ ë²ˆì§¸ 요소가 첫 번째 요소보다 ë” ë†’ì€ ìš°ì„  순위를 가지기 ë–„ë¬¸ì— ë§‰ëŒ€ë¡œ 표시ë˜ëŠ” ì´ëŸ¬í•œ 요소를 êµí™˜í•œ 것ì´ë‹¤. ì´ ë°©ë²•ì„ ë°˜ë³µí•˜ë©´ 삽입 ì •ë ¬ì´ ì™„ë£Œëœë‹¤. + +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n) +* í‰ê·  O(n^2) + +###### View the algorithm in [action][insertion-toptal] + + +### Merge(합병 ì •ë ¬) +![alt text][merge-image] + +From [Wikipedia][merge-wiki]: 컴퓨터 과학ì—서, 합병 ì •ë ¬ì€ íš¨ìœ¨ì ì¸, 범용ì ì¸, ë¹„êµ ê¸°ë°˜ ì •ë ¬ 알고리즘ì´ë‹¤. ëŒ€ë¶€ë¶„ì˜ êµ¬í˜„ì€ ì•ˆì •ì ì¸ 분류를 ì´ë£¨ëŠ”ë°, ì´ê²ƒì€ êµ¬í˜„ì´ ì •ë ¬ëœ ì¶œë ¥ì— ë™ì¼í•œ ìš”ì†Œì˜ ìž…ë ¥ 순서를 유지한다는 ê²ƒì„ ì˜ë¯¸í•œë‹¤. 합병 ì •ë ¬ì€ 1945ë…„ì— John von Neumannì´ ë°œëª…í•œ ë¶„í•  ì •ë³µ 알고리즘ì´ë‹¤. + +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n log n) (ì¼ë°˜ì ) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) +* í‰ê·  O(n log n) + + +###### View the algorithm in [action][merge-toptal] + +### Quick(퀵 ì •ë ¬) +![alt text][quick-image] + +From [Wikipedia][quick-wiki]: 퀵 ì •ë ¬sometimes called partition-exchange sort)ì€ íš¨ìœ¨ì ì¸ ì •ë ¬ 알고리즘으로, ë°°ì—´ì˜ ìš”ì†Œë¥¼ 순서대로 정렬하는 체계ì ì¸ 방법 ì—­í™œì„ í•œë‹¤. + +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) or O(n) with three-way partition +* í‰ê·  O(n log n) + +###### View the algorithm in [action][quick-toptal] + +### Selection(ì„ íƒ ì •ë ¬) +![alt text][selection-image] + +From [Wikipedia][selection-wiki]: 알고리즘 ìž…ë ¥ 리스트를 ë‘ ë¶€ë¶„ìœ¼ë¡œ 나눈다 : 첫 ë¶€ë¶„ì€ ì•„ì´í…œë“¤ì´ ì´ë¯¸ 왼쪽ì—서 오른쪽으로 ì •ë ¬ë˜ì—ˆë‹¤. 그리고 ë‚¨ì€ ë¶€ë¶„ì˜ ì•„ì´í…œë“¤ì€ 나머지 í•­ëª©ì„ ì°¨ì§€í•˜ëŠ” 리스트ì´ë‹¤. 처ìŒì—는 ì •ë ¬ëœ ë¦¬ìŠ¤íŠ¸ëŠ” 공백ì´ê³  나머지가 ì „ë¶€ì´ë‹¤. 오르차순(ë˜ëŠ” 내림차순) ì•Œê³ ë¦¬ì¦˜ì€ ê°€ìž¥ ìž‘ì€ ìš”ì†Œë¥¼ ì •ë ¬ë˜ì§€ ì•Šì€ ë¦¬ìŠ¤íŠ¸ì—서 찾고 ì •ë ¬ì´ ì•ˆëœ ê°€ìž¥ 왼쪽(ì •ë ¬ëœ ë¦¬ìŠ¤íŠ¸) 리스트와 바꾼다. ì´ë ‡ê²Œ 오른쪽으로 나아간다. + +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n^2) +* í‰ê·  O(n^2) + +###### View the algorithm in [action][selection-toptal] + +### Shell(쉘 ì •ë ¬) +![alt text][shell-image] + +From [Wikipedia][shell-wiki]: 쉘 ì •ë ¬ì€ ë©€ë¦¬ 떨어져 있는 í•­ëª©ì˜ êµí™˜ì„ 허용하는 삽입 ì¢…ë¥˜ì˜ ì¼ë°˜í™”ì´ë‹¤. ê·¸ ì•„ì´ë””어는 모든 n번째 요소가 ì •ë ¬ëœ ëª©ë¡ì„ 제공한다는 ê²ƒì„ ê³ ë ¤í•˜ì—¬ ì–´ëŠ ê³³ì—서든지 시작하ë„ë¡ ìš”ì†Œì˜ ëª©ë¡ì„ 배열하는 것ì´ë‹¤. ì´ëŸ¬í•œ 목ë¡ì€ h-sorted로 알려져 있다. 마찬가지로, ê°ê° 개별ì ìœ¼ë¡œ ì •ë ¬ëœ h ì¸í„°ë¦¬ë¸Œ 목ë¡ìœ¼ë¡œ ê°„ì£¼ë  ìˆ˜ 있다. + +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(nlog2 2n) +* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) +* Average case performance depends on gap sequence + +###### View the algorithm in [action][shell-toptal] + +### 시간 복잡성 그래프 + +ì •ë ¬ ì•Œê³ ë¦¬ì¦˜ì˜ ë³µìž¡ì„± ë¹„êµ (버블 ì •ë ¬, 삽입 ì •ë ¬, ì„ íƒ ì •ë ¬) + +[복잡성 그래프](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) + +---------------------------------------------------------------------------------- + +## 검색 알고리즘 + +### Linear (선형 íƒìƒ‰) +![alt text][linear-image] + +From [Wikipedia][linear-wiki]: 선형 íƒìƒ‰ ë˜ëŠ” 순차 íƒìƒ‰ì€ ëª©ë¡ ë‚´ì—서 ëª©í‘œê°’ì„ ì°¾ëŠ” 방법ì´ë‹¤. ì¼ì¹˜ í•­ëª©ì´ ë°œê²¬ë˜ê±°ë‚˜ 모든 요소가 íƒìƒ‰ë  때까지 목ë¡ì˜ ê° ìš”ì†Œì— ëŒ€í•´ ëª©í‘œê°’ì„ ìˆœì°¨ì ìœ¼ë¡œ 검사한다. + 선형 ê²€ìƒ‰ì€ ìµœì•…ì˜ ì„ í˜• 시간으로 실행ë˜ë©° 최대 nê°œì˜ ë¹„êµì—서 ì´ë£¨ì–´ì§„다. 여기서 nì€ ëª©ë¡ì˜ 길ì´ë‹¤. + +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(n) +* ìµœê³ ì˜ ì„±ëŠ¥ O(1) +* í‰ê·  O(n) +* ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) iterative + +### Binary (ì´ì§„ íƒìƒ‰) +![alt text][binary-image] + +From [Wikipedia][binary-wiki]: ì´ì§„ íƒìƒ‰, (also known as half-interval search or logarithmic search), ì€ ì •ë ¬ëœ ë°°ì—´ ë‚´ì—서 ëª©í‘œê°’ì˜ ìœ„ì¹˜ë¥¼ 찾는 검색 알고리즘ì´ë‹¤. ëª©í‘œê°’ì„ ë°°ì—´ì˜ ì¤‘ê°„ 요소와 비êµí•œë‹¤; 만약 ëª©í‘œê°’ì´ ë™ì¼í•˜ì§€ 않으면, ëª©í‘œë¬¼ì˜ ì ˆë°˜ì´ ì œê±°ë˜ê³  ê²€ìƒ‰ì´ ì„±ê³µí•  때까지 나머지 절반ì—서 게ì†ëœë‹¤. + +__ì†ì„±__ +* ìµœì•…ì˜ ì„±ëŠ¥ O(log n) +* ìµœê³ ì˜ ì„±ëŠ¥ O(1) +* í‰ê·  O(log n) +* ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) + + +[bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort +[bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort +[bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" + +[insertion-toptal]: https://www.toptal.com/developers/sorting-algorithms/insertion-sort +[insertion-wiki]: https://en.wikipedia.org/wiki/Insertion_sort +[insertion-image]: https://upload.wikimedia.org/wikipedia/commons/7/7e/Insertionsort-edited.png "Insertion Sort" + +[quick-toptal]: https://www.toptal.com/developers/sorting-algorithms/quick-sort +[quick-wiki]: https://en.wikipedia.org/wiki/Quicksort +[quick-image]: https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif "Quick Sort" + +[merge-toptal]: https://www.toptal.com/developers/sorting-algorithms/merge-sort +[merge-wiki]: https://en.wikipedia.org/wiki/Merge_sort +[merge-image]: https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif "Merge Sort" + +[selection-toptal]: https://www.toptal.com/developers/sorting-algorithms/selection-sort +[selection-wiki]: https://en.wikipedia.org/wiki/Selection_sort +[selection-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/250px-Selection_sort_animation.gif "Selection Sort Sort" + +[shell-toptal]: https://www.toptal.com/developers/sorting-algorithms/shell-sort +[shell-wiki]: https://en.wikipedia.org/wiki/Shellsort +[shell-image]: https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif "Shell Sort" + +[linear-wiki]: https://en.wikipedia.org/wiki/Linear_search +[linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif + +[binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm +[binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png + + +-------------------------------------------------------------------- +## 나머지 ì•Œê³ ë¦¬ì¦˜ì— ëŒ€í•œ ë§í¬ + +전환 | 다ì´ë‚˜ë¯¹í”„로그래ë°(DP) |암호|ê·¸ 외 것들| +----------- |----------------------------------------------------------------|-------|-------------| +[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](Dynamic%20Programming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| +[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](Dynamic%20Programming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| +[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](Dynamic%20Programming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| +[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](Dynamic%20Programming/KadaneAlgorithm.java)|more coming soon...| +[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](Dynamic%20Programming/Knapsack.java)| +[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](Dynamic%20Programming/LongestCommonSubsequence.java)| +[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](Dynamic%20Programming/LongestIncreasingSubsequence.java)| +[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](Dynamic%20Programming/RodCutting.java)| +and much more...| and more...| + +### ìžë£Œ 구조 +그래프|íž™|리스트|í| +------|-----|-----|------| +[너비우선íƒìƒ‰](DataStructures/Graphs/BFS.java)|[빈 íž™ 예외처리](DataStructures/Heaps/EmptyHeapException.java)|[ì›í˜• 연결리스트](DataStructures/Lists/CircleLinkedList.java)|[제너릭 ì–´ë ˆì´ ë¦¬ìŠ¤íŠ¸ í](DataStructures/Queues/GenericArrayListQueue.java)| +[깊ì´ìš°ì„ íƒìƒ‰](DataStructures/Graphs/DFS.java)|[íž™](DataStructures/Heaps/Heap.java)|[ì´ì¤‘ 연결리스트](DataStructures/Lists/DoublyLinkedList.java)|[í](DataStructures/Queues/Queues.java)| +[그래프](DataStructures/Graphs/Graphs.java)|[íž™ 요소](DataStructures/Heaps/HeapElement.java)|[단순 연결리스트](DataStructures/Lists/SinglyLinkedList.java)| +[í¬ë£¨ìŠ¤ì¹¼ 알고리즘](DataStructures/Graphs/KruskalsAlgorithm.java)|[최대힙](Data%Structures/Heaps/MaxHeap.java)| +[행렬 그래프](DataStructures/Graphs/MatrixGraphs.java)|[최소힙](DataStructures/Heaps/MinHeap.java)| +[프림 최소신장트리](DataStructures/Graphs/PrimMST.java)| + +스íƒ|트리| +------|-----| +[노드 스íƒ](DataStructures/Stacks/NodeStack.java)|[AVL 트리](DataStructures/Trees/AVLTree.java)| +[연결리스트 스íƒ](DataStructures/Stacks/StackOfLinkedList.java)|[ì´ì§„ 트리](DataStructures/Trees/BinaryTree.java)| +[스íƒ](DataStructures/Stacks)|And much more...| + +* [Bags](DataStructures/Bags/Bag.java) +* [Buffer](DataStructures/Buffers/CircularBuffer.java) +* [HashMap](DataStructures/HashMap/HashMap.java) +* [Matrix](DataStructures/Matrix/Matrix.java) diff --git a/out/production/github-repo/README.md b/out/production/github-repo/README.md new file mode 100644 index 000000000000..06a88dfe149d --- /dev/null +++ b/out/production/github-repo/README.md @@ -0,0 +1,197 @@ +# The Algorithms - Java +[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JP3BLXA6KMDGW) + + +NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. + +### All algorithms implemented in Java (for education) + +These are for demonstration purposes only. There are many implementations of sorts in the Java standard library that are much better for performance reasons. + +## Sort Algorithms + + +### Bubble +![alt text][bubble-image] + +From [Wikipedia][bubble-wiki]: Bubble sort, sometimes referred to as sinking sort, is a simple sorting algorithm that repeatedly steps through the list to be sorted, compares each pair of adjacent items and swaps them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. + +__Properties__ +* Worst case performance O(n^2) +* Best case performance O(n) +* Average case performance O(n^2) + +##### View the algorithm in [action][bubble-toptal] + + + +### Insertion +![alt text][insertion-image] + +From [Wikipedia][insertion-wiki]: Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. +In the figure, each bar represents an element of an array that needs to be sorted. What happens at the first intersection of the top most and second top most bars is to swap these elements, represented by bars, because the second element has a higher precedence than the first element does. By repeating this method, insertion sort completes sorting. + +__Properties__ +* Worst case performance O(n^2) +* Best case performance O(n) +* Average case performance O(n^2) + +##### View the algorithm in [action][insertion-toptal] + + +### Merge +![alt text][merge-image] + +From [Wikipedia][merge-wiki]: In computer science, merge sort (also commonly spelt mergesort) is an efficient, general-purpose, comparison-based sorting algorithm. Most implementations produce a stable sort, which means that the implementation preserves the input order of equal elements in the sorted output. Mergesort is a divide and conquer algorithm that was invented by John von Neumann in 1945. + +__Properties__ +* Worst case performance O(n log n) (typical) +* Best case performance O(n log n) +* Average case performance O(n log n) + + +##### View the algorithm in [action][merge-toptal] + +### Quick +![alt text][quick-image] + +From [Wikipedia][quick-wiki]: Quicksort (sometimes called partition-exchange sort) is an efficient sorting algorithm, serving as a systematic method for placing the elements of an array in order. + +__Properties__ +* Worst case performance O(n^2) +* Best case performance O(n log n) or O(n) with three-way partition +* Average case performance O(n log n) + +##### View the algorithm in [action][quick-toptal] + +### Selection +![alt text][selection-image] + +From [Wikipedia][selection-wiki]: The algorithm divides the input list into two parts: the sublist of items already sorted, which is built up from left to right at the front (left) of the list, and the sublist of items remaining to be sorted that occupy the rest of the list. Initially, the sorted sublist is empty and the unsorted sublist is the entire input list. The algorithm proceeds by finding the smallest (or largest, depending on sorting order) element in the unsorted sublist, exchanging (swapping) it with the leftmost unsorted element (putting it in sorted order), and moving the sublist boundaries one element to the right. + +__Properties__ +* Worst case performance O(n^2) +* Best case performance O(n^2) +* Average case performance O(n^2) + +##### View the algorithm in [action][selection-toptal] + +### Shell +![alt text][shell-image] + +From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. + +__Properties__ +* Worst case performance O(nlog2 2n) +* Best case performance O(n log n) +* Average case performance depends on gap sequence + +##### View the algorithm in [action][shell-toptal] + +### Time-Complexity Graphs + +Comparing the complexity of sorting algorithms (Bubble Sort, Insertion Sort, Selection Sort) + +[Complexity Graphs](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) + +---------------------------------------------------------------------------------- + +## Search Algorithms + +### Linear +![alt text][linear-image] + +From [Wikipedia][linear-wiki]: linear search or sequential search is a method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched. + The linear search runs in at the worst linear time and makes at most n comparisons, where n is the length of the list. + +__Properties__ +* Worst case performance O(n) +* Best case performance O(1) +* Average case performance O(n) +* Worst case space complexity O(1) iterative + +##### View the algorithm in [action][linear-tutorialspoint] + +### Binary +![alt text][binary-image] + +From [Wikipedia][binary-wiki]: Binary search, also known as half-interval search or logarithmic search, is a search algorithm that finds the position of a target value within a sorted array. It compares the target value to the middle element of the array; if they are unequal, the half in which the target cannot lie is eliminated and the search continues on the remaining half until it is successful. + +__Properties__ +* Worst case performance O(log n) +* Best case performance O(1) +* Average case performance O(log n) +* Worst case space complexity O(1) + +##### View the algorithm in [action][binary-tutorialspoint] + +[bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort +[bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort +[bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" + +[insertion-toptal]: https://www.toptal.com/developers/sorting-algorithms/insertion-sort +[insertion-wiki]: https://en.wikipedia.org/wiki/Insertion_sort +[insertion-image]: https://upload.wikimedia.org/wikipedia/commons/7/7e/Insertionsort-edited.png "Insertion Sort" + +[quick-toptal]: https://www.toptal.com/developers/sorting-algorithms/quick-sort +[quick-wiki]: https://en.wikipedia.org/wiki/Quicksort +[quick-image]: https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif "Quick Sort" + +[merge-toptal]: https://www.toptal.com/developers/sorting-algorithms/merge-sort +[merge-wiki]: https://en.wikipedia.org/wiki/Merge_sort +[merge-image]: https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif "Merge Sort" + +[selection-toptal]: https://www.toptal.com/developers/sorting-algorithms/selection-sort +[selection-wiki]: https://en.wikipedia.org/wiki/Selection_sort +[selection-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/250px-Selection_sort_animation.gif "Selection Sort Sort" + +[shell-toptal]: https://www.toptal.com/developers/sorting-algorithms/shell-sort +[shell-wiki]: https://en.wikipedia.org/wiki/Shellsort +[shell-image]: https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif "Shell Sort" + +[linear-wiki]: https://en.wikipedia.org/wiki/Linear_search +[linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif +[linear-tutorialspoint]: https://www.tutorialspoint.com/data_structures_algorithms/linear_search_algorithm.htm + +[binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm +[binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png +[binary-tutorialspoint]: https://www.tutorialspoint.com/data_structures_algorithms/binary_search_algorithm.htm + + +-------------------------------------------------------------------- +## Links to the rest of the algorithms + +Conversions | Dynamic Programming |Ciphers|Miscellaneous| +----------- |----------------------------------------------------------------|-------|-------------| +[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](Dynamic%20Programming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| +[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](Dynamic%20Programming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| +[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](Dynamic%20Programming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| +[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](Dynamic%20Programming/KadaneAlgorithm.java)|more coming soon...| +[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](Dynamic%20Programming/Knapsack.java)| +[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](Dynamic%20Programming/LongestCommonSubsequence.java)| +[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](Dynamic%20Programming/LongestIncreasingSubsequence.java)| +[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](Dynamic%20Programming/RodCutting.java)| +and much more...| and more...| + +### Data Structures +Graphs|Heaps|Lists|Queues| +------|-----|-----|------| +[BFS](DataStructures/Graphs/BFS.java)|[Empty Heap Exception](DataStructures/Heaps/EmptyHeapException.java)|[Circle Linked List](DataStructures/Lists/CircleLinkedList.java)|[Generic Array List Queue](DataStructures/Queues/GenericArrayListQueue.java)| +[DFS](DataStructures/Graphs/DFS.java)|[Heap](DataStructures/Heaps/Heap.java)|[Doubly Linked List](DataStructures/Lists/DoublyLinkedList.java)|[Queues](DataStructures/Queues/Queues.java)| +[Graphs](DataStructures/Graphs/Graphs.java)|[Heap Element](DataStructures/Heaps/HeapElement.java)|[Singly Linked List](DataStructures/Lists/SinglyLinkedList.java)| +[Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](DataStructures/Heaps/MaxHeap.java)| +[CursorLinkedList](DataStructures/Lists/CursorLinkedList.java)| +[Matrix Graphs](DataStructures/Graphs/MatrixGraphs.java)|[Min Heap](DataStructures/Heaps/MinHeap.java)| +[PrimMST](DataStructures/Graphs/PrimMST.java)| + +Stacks|Trees| +------|-----| +[Node Stack](DataStructures/Stacks/NodeStack.java)|[AVL Tree](DataStructures/Trees/AVLTree.java)| +[Stack of Linked List](DataStructures/Stacks/StackOfLinkedList.java)|[Binary Tree](DataStructures/Trees/BinaryTree.java)| +[Array Stack](DataStructures/Stacks/StackArray.java)|And much more...| +[ArrayList Stack](DataStructures/Stacks/StackArrayList.java)|| + +* [Bags](DataStructures/Bags/Bag.java) +* [Buffer](DataStructures/Buffers/CircularBuffer.java) +* [HashMap](DataStructures/HashMap/Hashing/HashMap.java) +* [Matrix](DataStructures/Matrix/Matrix.java) diff --git a/out/production/github-repo/Searches/BinarySearch.class b/out/production/github-repo/Searches/BinarySearch.class new file mode 100644 index 0000000000000000000000000000000000000000..e8ce337c1b0dd1f8c7b79f41eef91e15be0dac3b GIT binary patch literal 3839 zcmb7H`F9)D75>H=X=HiaC?;}nVuMJXRJKDL9B{#Q+}Z{=qH+Sr1f0;4CuuBAJeo11 zQECI-XrVy&eWNs`3tiF{QtCL#Nlt(6>HpHdprzlNnb@O5P3ejCmiz9#@80h&Z}Rtl zU%3w8eq2qV7sV9PSnR@+IGMszcsd5Mh-#_r5-3)?m`tc4YMhj zIGaL0Ry0^r4R!USE?0IZ9IPhsoCY_A2D}uSIG4g_u$IJn3eV#O4KHf=tb)XpX`9}( zf>>_oqylx$sTc}&6inMV-mI4lcTtoqQhEwbSy(59Ys!5{RK1$nP_VmDG=y8O8I93d z(-!V}u$`p3Wz()GIGj6OI4jPHQA^m>(K)BSDqN{%vORSuuOKd5SFBU_f03lYD+bSd z+pCZVEe5ZzZW(=gagnCQ{IRoWR&C)mUAj0twKy@+R^1eNrzfX#Qj&ktzC^=!S;5%< z=UYB6rB%yV_7o`6QP-^2xK7lKiYaWKm5Gmn?xH8kD+^*Z#QNX|wJyA&E=(%xZLzNC zxu#v6^aCy2DnoZi6yETdcDXX(e#DxdX^lQ1?21#D@obpS6RA{PtUY2Gb;G9NNz?X> zs^L=GuBf(rK&Di8qvkZN%B(T(G-Wzy!pqwgV~s1%nX4IPX7H4T&oPfRd|tyBG<=a# zmZ+C1Vo*9Vcpoz%mmg}cKeje__$GetdvmvX;DetkI!(81%$qW=cSbYzkaStcUASAv zVce(TB^_VFmo>bs;}v{GL3-A4yoTqB)dj<=IhDqa1YS+!HBPVV_$t1p;p;lSfp6;g z7QU_HJNT}S@8SDt{D3S!Ok+XEkMLs+Khg11yg{FJ{0wjE_&HuvkZD^+I?m%4I`-p$ zhPQP562DS#wCE$6Eg9KmiRnakf8|ithnK6Y@UpBsW6h_|*jc}pvX)_2y&7rsW4jtp zl+GGukD%-LHGV_DM&hp>Zdg4^?rtnpk^ zSlpE~T##n}k@#-k6efg%JGcA{7Bg1WaZRsQzhPJ;>6oIv2GbdRjLGXUM-8#X==YN# zZEwouz%3@AFn#(Zw1qsQBF_ zs0*fXc*Y)*8;WGz?W87C_!Iu@_uahg+3&EDs)jeyAWRA#Xq&td)yqx0?3s=|O7>!N zb=5Krm)`E#HkoNkr2O*`GwQbuS9nbO>8Sp;x}tvEtcn-KEwgUY(7SVw{twPX!*M-> zNq1KZHtlqloHfa~w;dy+Om}#5hJ7FaA{s9V;k)wLAQXHS_O+;pIyfH!M@_qL0V}w~ z?@Kem`_mGLwt8Bc(pK7Owz0-8M}$<`%Vd&m@}#hu1YbKR=M&4aN45Aue%VQBTBJaW ze%UcmoF=tp0@qv1fdYwT$E^!8JQPi4`Xd{Dv~AwV?+An;7Y$pLC1&y6Xeo*CTs|9t zU4BXU0I})orO2DFAlLHZgttX5yKz4uiS!2cRm+gCUvKVIG`b;uQo}_Zf59akC-9h# z0u~tK?aDUobIyt}TJT>Cwq~&`%AVsg5xUr}ZtOH%CQt>(S!wct)$=y1Va^hbhCw&} z5ydUk7c}`}eElq=F&GF=Mtli@iBMVu7x~c6=vRsXFRyfCpFF|>iiw@kwG2s)l*vGXVFyO-& zz+0J*YUR}e>xb82|xU~J_2C3IZiE*8-+;%mqTT%iW?<0HuVT2mOpFtv?Pu9tIg zc5v(LUeXSc+Cf7*6x7Gs#>YToze zSa9=}H?v#b%!c03E=nBny`JU&6OQnPG${{o6{p?<80RVx@mlH#yp}qo*B_-Vorop> zg+WEx8G`U2Ne^Ly@MIZ@t2CsOY}YrT7SffYJ@M(0fh#h=o6!1SzKmoHm(i(kNGZ62 zE^wuH;BV-jQ2W%8ezmfJ4~=bL$9ViI(o2`Hb0X1~=u>W%$?+afyLDLO@e^4_+n|uYj{+{C;6wm&->djC0dx2bV_!>AduTdxaS)B z-=Tc82p?}L!sE0D6lM<%g(t`@3nwwWm(i5ze5-U&S_vN$GSEwj1Ro?KEcu_n2Imwh a?=g4&iasoHFQrbA=QJ@t?XSwj#`q8asJw9i literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Searches/InterpolationSearch.class b/out/production/github-repo/Searches/InterpolationSearch.class new file mode 100644 index 0000000000000000000000000000000000000000..f2601cfe4bbdd24dd3cba02f62b5614cbce71357 GIT binary patch literal 2829 zcma)8X?GJ<7=EUi17A+zKk%9}i$!$AyG81Pe*t+40 z`|=Y|K5+Et2e(r6=nwGtWBlw<@wqeMkYW$o<=*$c_g$a&eQ)yX-#`8WU>iQopcf^9 zJsEVMlz?&Wd@nD`U3e6a>19$c2leu}7CDr`6F4kzBm)a2eW+;aXeXY;u{53%IG({2 zPGoQrPiOE9o=xMq3{F8BNbRs)J1iPV=&72rY;xuI;yT*`cK=;WmfsL)*Z}w zO{cb7?em&CsC8|=b;gvUkyH?&U_i*Q?AFu*sn9FUsp`DIR+dv>P+*#M5~vE)1n9Ec zk@e}C9MowI-lG%ycYG0MnTpr+t7@OEt8wcpIFIVQEZmAd13lO0NY-x83xm*?je{zj z^J>A`6lQub%Wckrjne}2797+qxbQ4A@Vo^dfrSuFhHc>tUNF#qqf%Q~z^sLh$O$Z3 zco8od*jb6N%T24?j7G1J+fp0NML?3u$uP&>Pzw=vmz#_FA?GM}Hk>2xYAR8g4^5v| z)sVBeqi@8uw;o^MKrCzj(4 zo!XlQZo1Y`t)jBh5zqF@y|nD`JXU@4AMI1D(j=Exa8~R$0&EIrh}73U>vx zZs37c3*A=ynWkISQ>16A(rh#wJLd)K0YfYw;%p-m&m5KD6*K z9x<@_TASML8E;;VO-4@$$6C(FYUufVM7!AfS5E>TGx15!n{PH4N7-eIlpGlZiedfM zovTk&h^4(jWqPhbmgJNSDXcalob`VrdQOpx-t z??Lh}qz&Uwj2mnJK(Yg!7{YLzy|DzrGw{Pt=$N{M#AHuxXRlct8Te5lI+8TA>8v;pVP1rpSjH_aC0*(m z*l~1|evqj@gf48y8Wad=k?SKUVHXZ_oxvU~az9I`KfnQek8%X^(=h;)-%1;4e2u#? zN_e{PB|A$)y9O6o7!B1iW1`6OmMXPZiWnYr-AqI5tHo0UY_;T?4!(n!nOY&(M76+ literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Searches/IterativeBinarySearch.class b/out/production/github-repo/Searches/IterativeBinarySearch.class new file mode 100644 index 0000000000000000000000000000000000000000..22cd1ff979448a6688865525999121a917ef50b1 GIT binary patch literal 3494 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Searches/SaddlebackSearch.class b/out/production/github-repo/Searches/SaddlebackSearch.class new file mode 100644 index 0000000000000000000000000000000000000000..7180f5e10f9a4ccbe057109c43b832f65ebf723f GIT binary patch literal 1582 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 A82|tP literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/BinaryTreeSort$TreeVisitor.class b/out/production/github-repo/Sorts/BinaryTreeSort$TreeVisitor.class new file mode 100644 index 0000000000000000000000000000000000000000..5cff65582fb95a167525da5db274715470bf494e GIT binary patch literal 412 zcmaKoK~DlP5QX31LSX?x@Z!ao=s_=TVmz^ggCr&1XWIIHYY tF6Xq$YXF2A@0HJha0J1+$*P7HtMV42y?^O|aSYfC&_x{~vt9HW%^$jMZSMd8 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/BinaryTreeSort.class b/out/production/github-repo/Sorts/BinaryTreeSort.class new file mode 100644 index 0000000000000000000000000000000000000000..9e614b0e58fef402a02593026e6f4a8a07c300cc GIT binary patch literal 2177 zcmZ`(OLG)e6#ni^Pj{!&F>PlEl~71P9+Ma0A*e|VlLUca9^!<+5KudlW@wo7#GXzR z#0NeW{sdjRaiyi3gpvYXT9#J1aN|#K>CV#f@!i`~BvX}i)jj9jbI<+G^Y)Mbe)|Z( zGx*R#KQ0-#Y$1iBBv%Z~Tgc$5+*~v8ss$6T8F<}-g-eon24*ZQpk!cC&v#u{pM_TV z`l&yO%1_TX?ftv(!>@nn`F)?t?=wB0O$_yX+i~^jdF?0p{cPa6iL!|sCIS;TP24h3 zF|lMKG*LCNY~l?Qk%^jt*uaW_HeFrx1?-71^rP{LSF8Cof#yOrisyn_5LY7ut5nQJ zzF$`e=)*x6#3KUfT=yI?#uY~EWDxq(D@zN0H0v!?i0V#OOI~Hpivqc?E4BDWKo{+k z(noDzEC{{mwuG1aA)?jD1&-wACvSSI-ay3*%LC)prDZRYC_~-b=mkW;H6f7kqR6`~ zuyb2WEvi=OW7n23?3X2BAnlFO-(G&4!Tjtj&%3t2JxqfUnzR&RuXJn5TUNPqHUydq zK{@o|m5BA}8J-;++%n4qU?e9!btmq$B`*jWRYP40aTJ8*A=L#hDzmO_o0F~|3z$I| zk0w>gZZ?<*W54W24AqS5Ens_P2mD1&#iCydmb^;+W&`x;>Wb_JN28`Pl4d z&jhmnZH>)6EcwD(kZ-jqlia8+Qes+!&X7S~lLn zy8_v*P;3lg*uZ->-p4%wXXA2`nY{Z!gFY!HN36u|Mr=qQON zx84}ZIcavK0c~dCreER=wk5$yI$9}LqaePqB(_Ps;SqM^wwxR_3wjXNeEEu=%56WS z%CfUzoHjo*K5Wi}x9UeVCVF5SpiLnuJY&_XtoSq6<)BVrF^FNs;=VXzd^6Ag5vDQ2UfjhRUgpT9c>7CSpf1h(3wVXN8WAjFPq9}i;>#}1;Rtyr Ttx`N2;L30vN5hhEh`eU`f`nH6+YtQ`;M_ z82t@;Suc9i3qNLB#!mSG{tb2f1>SVj`nCDlX>5B-m~XD=Q+ z#a0Z1n2+HiE=3W;LJR|VOCH~j@pxHo?`U{81|4|~@5%GL+}@WyiyD@6EbCa&v8v+( z9al6IWQchUYZ|T!L>#kLuI~yY7H^n0&1}=PtJy1_ZI(}ScFlI@1eEmnx`4V+FIxh= zi+0UgZtiYd&YHPhr6sXgFPYVK)3N0_Fskm3-4HMq3w6hBWG~e#b*V9|Za1W6l?8^= zn||V|S*v6h>brZUBV){tUl$NIS6(1&I*xf;VCX-51qM3-+}?WzVsmYc8M_OvS^8|r z+zYTp3wEVux=n}RPvzETW}XWo$Gda0b7>hv;_0nfx7=0B*=@R}Yu9Vc+W~)N`-W9= zXC+l#KCk&&*}5gr-wr(RBD+}k!lDwacsfp$1~-z>Yn9ZZ0L*6^azSI?EI z!HmTU^`=v@F57aVx}T2AX*rg03?r#wJ&tSGh~o&3#!40F=-j$nXwP~$P1da0{x6LKuGWTX(a6FBMR8^su2rspXxAAz)_c^c=6LHQFQ zG4vQ=WOxo?f;Nr}HHqw7W|4WuGKV?kLMn532dUH#P?D+geW+V=nUT~1!q@ggME9#K z+XpvHc7P$*>Xe zWW-qZq^5d8H_my|i1guiU(<}JujocxDvJ*hD?UKi(&WT_(9*3xLQhdi^fGwDC=|nq zzCtmQNEC`%qQ9^_Ipuq`=FxA=6jn*{2I<-&=r8a(zQp-wjUjAW&J+GBdo&Z?F zM_ITym&GF9)}JK{=d+Mlws0W}Q)f(E)R{{bR%}#ktlGG2qiW+F3-4OEB4Dltogk_T z82Q4MfL!Zt`vQ~eLC4=1>@@svQ#IO*$V zg`N7e0%!BL*YB!(s@ztcR(Y+v(^H}DP$|41E|6|^2OXA*8hsUp>b}6t3(>Nz`UK1V zSE|RFPX&&SQ@!7NPWSfaCYeomk!pT>!6J3s)Vi;XMbh<9&g{BmIZX9bCf)0`C9E=HO+#;^0G2 zd3RKmaHhCTF2%)zMT2X540fY&*KcwZQ%PI>z0z)V!yvk|L#CtX$5GJcMP%FW)0FcE z>RmZFTHt_>jR~F{TdCD_%DSi81OLVsdMdTTz7``{(>)G|G{?s_>{8gGW+tB%W#bz& zxF{%hN9dJl1#P5w+o~CK#Cvto;^tI&3(W3d+8@u%lO1Mk)c0BdattQ zEa}dX_HmTxpTi0M8s>2kCu2rSMA#@0Im>FEKjfypIo9yy;{sk|Hbvxl_Bp}GJdw#= zH0mT#rx=-p{2PY&2U3XnzX*SW!4x!|w~!}DU-VBNqYwJl%{+#z8`dt;UR}B~u}!;X zY)y9~ww8>I?JmdGH4o#D#IxK?;@GaEo%LT~)*r&UzEJuF_9vxXWbDVt){WdtY@c(y zdOA1Z)y>=?uWscgy^V#_#1S=`)NxoOR>Vyzbqfplj3aIE|M)c(`v%LgUd4nw6)O^Z d6PJix;MHzX+0&eAis%f^Fl#VcCMJcm{{fluGrj-- literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/CocktailShakerSort.class b/out/production/github-repo/Sorts/CocktailShakerSort.class new file mode 100644 index 0000000000000000000000000000000000000000..e78929cc01fb5d99351402b4df89bbd70598b07f GIT binary patch literal 1674 zcmZ`)T~ixX7=8}f-Lna)-G&A#g0@=PgpX3O#Fjv`MbSw37(=nKUUW&eVId@$%~Gv1 zevH#mZ~Ot?I?iybHTn!Qn@CsAmW?b^ESxytT1HGk7>2@DpB4bN{)&Ns^2 zzU|hEoA$QjDPNX|ElPo_sk?Tj}|S^%JXVP^l)t{yg@b#`}cjm4iT`gVDH z$!-P>lUIog0@0#dt=s;tM_xu}*Jfsp?QE6^xoj?_kkTQXwqv_>f&L?06n)RFSF-{8 zwpS&eeTVz#91ECk-FK>v$AGhk1M;Dp)y7)Sh!>Ep0GH9RVq@1UI}5IwP z#}GeL=|Pga5jbP$rydUjFo1Kkgrb#EOcvkr3peTeYV7G;BsZj0GTLxb`vI*;#u(1X zq*O*~EGe~nQ{1Qa(ephL)Rbo*kq?qGV?2^#ul+~T$Y=^cPiiW0_{ShmWoeaeo>oc9 zPM-cqw)fh9CiUE2`@6B9ScMi;zRcFZx+APtXT>pAYhj4qVgA2}3A}{sBxIJ>EnLI` zMzDxWxQ)wjkU|q___RO8IKIS{fPs$?r5wi##F1FR7;}}jh-o4Y@t!{H5O;{Yk&O;h zN;{7WWGsR&@G?((82K4qp%!6XpYZk}Rz1R;kYg2piSd`|8Hag*m=NLsy%1vLU+8Uy znGz|9H2wSoF4FxEQAe54!@8o(n;?Q3?O(*!D8I3yPoR||WKJ)ZG;1J`x@82?u$BWU zwLq9wCXkkK27iZ|w4$M6T5+WmeuGhZ47oHu_6y8?M9n9Nl_H5=f+ym|lAbtKEE$RC ziY1viU0fcY2&1}>YcQZ`8mq|Q4sPHchw(Y)@HKJ)-J@aIB!80SukuIZDqdw%cW6&> Sq&o0j0vhum}Sx#xWMJKwpRKVSTM0^kN7M$wDu zC{$dFVg}dcazn!hGBT}UHVO?N%FWFP<}e>dE{Z&E$+Uuo+Zq-GLV3Gky9I$@D!n0~ zEH<|-fxeR6upaEzE0(ivR%(n4l$u*+ZNqeIx$guOcgJoE7^QO4aogF&X1yZ4oPgG_ zzIIp477*H|+-T&-7Au9lKG@dGeZ0m4d~)>2{6<0?mrRh3=zb!?miGLq^eZ zbJy9jmTftU*eju@q+mJ>^y?VHu!cK2KEk4okFg}sdv+=U{iphNkaa9$MaLMD8t&>S z;+}vm=V5J+Q&@9P!+jkktm=4xHBR~zVXgAm+Tz^e{w;F7Q>!)|+uf=20i8xaaqSv= zR%%w8CYw4}%iQ_VG>4_g(FqKn(bT^^S1ig5?TK02wbs6n!WYwBNT>RB5ijqxU5gZh z&0W$@_~~{t`;b#|ISk9JQ}DRg>De%EYRRM;N1W*Hqie#dm+}86(4m{&z&Jn0UQi%@ z!3uwz9d`rtvb2I$oj8K{g-!r*t|2ctj0^O2KLH60dgq)uBeHmd*#X-4s1e;UVzvCJ z@(h}?4`uX6hJzkd)JsVsjEf%JpkLB~V=>;s2mwb~p(4<~APMnpFiqa^4+)28S2HKK z#tO=;l2pD!IH5d6ej<5&!8NPtiwDMvlSCZ&k7X z^6&kZe`J0ppyIKcLJ$2Exn_9#6j@&5wb$9=EE&z=UCh(V^MTLdJ{G(V3M6z96a0;^ zhSXm7vWmB3sm97YGX>BLAXCTz(EU zz}w|O-a~{8)6AnFB0_{9<43FHa&2@>wEaQ8u;0OK_98kDJ3N7E=xZfs)&TtpTPnhHj6wHlN Ow)ZKF;J~Cn+5Z4x@M94G literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/CountingSort.class b/out/production/github-repo/Sorts/CountingSort.class new file mode 100644 index 0000000000000000000000000000000000000000..9fd99ffb00fd0ae0b1b5153e060cc662d03d06f5 GIT binary patch literal 6184 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/CycleSort.class b/out/production/github-repo/Sorts/CycleSort.class new file mode 100644 index 0000000000000000000000000000000000000000..d5a138fae1b1466b4f85dee5dd21f4a7b3cdc61d GIT binary patch literal 2139 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 MEEJnQO94aw0=CDA^8f$< literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/HeapSort.class b/out/production/github-repo/Sorts/HeapSort.class new file mode 100644 index 0000000000000000000000000000000000000000..9d14649b0b099a2350eb881b410df850d48d8786 GIT binary patch literal 2127 zcmah~TUQ%Z6#h;!$-pp_2`wOqwWYKMD3_MnDxoN%wb*bo6iD&XAxy)xA&E1Su2mnr ztmW_U)dyenrJ$_3eD;s%uW0?wnS>-5mM>@T*=JwAz0Y^f{PptpKLFgo69YYX-@rUR zFp$7P2R_6{Ixb0hN5{uH?i$dsD3?!k+%wRDwES3-9?Lpb40K^t$C?ahq69uQkioi+ z`#LrRw7ZU77BCl!MaNqx*uL-h0`Xb5=mv8F(d3A9S}5&00$pjh=qy+EcN}ls-YL-1 zoi63=-u$?f!G`>8!yu#5T0h0=c6_GEl& zxmS={<>gyy?n6N*^mWcJiC^qiR4upAzP6t;N%^T&9}+fNCpWQnNr2eId@!1zRnu6CM20m^kYEBmWeDL zn7DwXj!hHW_{_vre9oFOMV*dnw5-{Rh%(m~CceZ&hA9Vi^7Ec&KaJ3#dO0DGw0{TwVsDPBK;|UpeI7rY>t)H*k@!Xb-s0Ct9N<@wmRuuSrTl85=!-_?1cogIwdvXyFa& zX6S(Pc#~g35`tbbc#ASZ**!XTh{$t9$9{tr!JmlzLTj`k)2_M#62V)lT9O*835(FZP za}43S8i@3tKK8#(zZOO{Z(>s0<(m@h{#H B<<y=_-uvf=se=KgNW4Yr(Cmyvv<*LJ$MoxoH3K~RSGyuQG6!|nxPzg+kGZV-As zUu`P{>(dG>7w$H8oCi+1>-e4WMsIh|2^2`B_=-5m+;<-e%#1G+5FS^ZYeyjI1cAfk z*;j(ij8cEN_dor_)|O&4;=(O+OaQ33!bX*fi+g`_a!u^2#FIKnK*T?dyvb;xU^Hg%Np;8?)${Lt;V0TWIfO{m9VGS>SM6caLb zZ$D_e*S%;&Bl@3Ll4p@aUdIPnY~VwI+;9v7v@AZtbut+?%AEE5M_jh%RyOD4_L`iQ zKj2KsnwBdE(7wkMJ^7{D+K=SnRTFB3f9(*VOMDRPZeoQj=Yb hTcEYLyTy|wl-S@M=AY!WHC7xWhDDY5a+#xH`9A?#JKq2R literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/MergeSort.class b/out/production/github-repo/Sorts/MergeSort.class new file mode 100644 index 0000000000000000000000000000000000000000..e7a13db9e68b2066a7ef85980eb272fd419752ff GIT binary patch literal 2228 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 SkEmc>pGQ<7ryMg1PX7xdrab5X literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/SelectionSort.class b/out/production/github-repo/Sorts/SelectionSort.class new file mode 100644 index 0000000000000000000000000000000000000000..43ad5cf39cbcf920f13f877ea94bec8fac3a44ee GIT binary patch literal 1531 zcmZ`(O>Y}j6g@AV58D|x6BEZx8wXmx?AVD*C~mPG(-0DBa8jfRp{5%q&fre)m&TJK z_Sv(61uLX(*usWJMXeA^{s-beL@IFJ*s5)mF6Q0)?z`{YbI+ZbKmU3B6u@=tMiIyL zDBeLqE;n@Cj6%V?I*L(f@sSw?62^OB+zMkOjQ4fqbZqMQKtLWz*+&*x;J^P@=NW9i<*sXorbLD;*RQ&sHUm#Jlx}M+9TTaVq z_-?l&wDitqkbLnC z=FLxX{HFJu=e@l>@`+i#-S}$9?hWZjEVtRQ{bP^)EtmI-#dB$vdACxkq$NgX0Hm~S z$!mV1G0XSdPO}uKXnRfS^3pil;jzHnc(mH_ou=bSa{Y1jI2b9Ob10zq17PCC2B85G z_fe~R>@}QiHyF@_`m0iK19M2|*fOw<4-MP~6`dVTVp!Y2NBEdz<931g=7$FmXqt)zsu7AJHS8Q01(NBH1#degI)2GR& z&mBYQ{AlKL`JR1k_XI9ZjAKx}RISPk{ej&&cJ6#BXI9OOA&vA`dmJCxP7Za5lG(=< zeo}F;8-9QxT1v}xp1VA)pjDS2LHt5z3Q4Y75HxU+zA;F^0xoeUq^!)6m(K{M(caEJ zT@O`Ki^}0ctfvY}O8KIoCe+1;xSUO>YuSXdc8aMVpeNLVa-xc#{{1VVq<+M7HkD9L z5&G;T#MmF%pNXXe^;a=Xf1dbB)?dI3t6pN=G*ZaXU&B@0#H+Z)^KHBt@T`!_9F~}| z1eG`5!prm&`WtwKUPv+>b|Jkh#NfAyE#fS(qt|#o=vAJ*&a*cH4%#!QLOjC-A(CfM z&k*Cvno_GYBFJEwxzt0%SWW8jy%~7|r5@5xp;~ptOa@jpwZLlTZeVq`&f~CI2&}2i z;_rc{n~{MNHVx_2euGwj1bru${T1Qg5!qciMKt^b)Adl?V1;a;O`I`tR=^nd>RwnB=uV}l1hgxSc~_vn?A6_g<;7Vyn3S_V zE!)eDIq6Tyz*GCSQ44F{lE6T@(g?z(T&3pvzETTJv_vUzGBs0PkWXdKm-TAyN@KAp z1C^kV{*PTiEbuGw^8|Dm1oF8+^8elw^sEW&+>Gye^B=~U$w}hrt%P#!$qm_TLyuLw zYF&oQ0ej1gPmYak33HsW#X>Qqa->^{v_V;BCd6-Y7zwF+8tT-;EH)QJ2q&G=7(QY0>J4<>B z2YJ)CLBQg>=%yrJT>H7pQ3^^u^B&?Yl`hy^jmX%G0qR!E0oyUi9Y=)(y%;Q#d`$*z zkFskQwW2d*_^)9ZPEC7MTv`9&Xs>Y1$!iI1=rztIw7j0somUvnCiGE$&iv>qx?Unl zUF}xUeOJl6zOw%9g(g=b9OHgm zr@YPmU0NRESkyz2IERs8RFZKH#u%&66MMTarR`=OK72gDUY>T*bB4K-v^ex^@u0l+ z(Q7{~NtnN(3(@}zruc=J_=)sS=mrk(u#2q6aEKsUOs}z=D)`ureS$XKZLUJEOlx*B zlDcg~(y%8YX=;(^vGb9%jRAabX{H@(DLuBOl=4Ry)9+#4IG%lnp3jI)jI1Kw8Koi$ xZ2cDha`!L-$(g%2715GuA;J+HrOz$WbBr_z`t@vIz^khHR-6U%wH4rB_RL+ literal 0 HcmV?d00001 diff --git a/out/production/github-repo/Sorts/SortAlgorithm.class b/out/production/github-repo/Sorts/SortAlgorithm.class new file mode 100644 index 0000000000000000000000000000000000000000..feb94680a5f3ab11fea77f7712f25b7cb6ba2433 GIT binary patch literal 891 zcmah{O;6iE5PjpMF-cs$6Z%05rF_^4YI@*=5fVbGRLN=&iF(Ot6RfbviP73df?vfE zkU%~6M^&A*2~|>~US?F-(P@)(3uJa5|D7WQcB;rK*gvLQ=-9x*} zr=tyF!_HnNu?$+CjAGZB2KZmc;RzGZd2-}`ONKpPb@YD-i(c3l!4ILNjvv8dd@3VC z&1-WvQA^vSU=S)9pANa=Ofu4K`X_|>e@oRT886SrthK4PSuX_dzuo30PIoz`tF*&J z_5Ck0ZExc5pY%>lY+BgDHeoq$MTC`Sc4T1(wuLe(CL9Y5Gzm*N6XL1-CH~$!^ZTrb z*%W%(kyeVl;`tYB=PSXC!y~1{CBdFhPL@5Xnn!G0C8bQ0d1ECJX$26ra%raK=$5!L zW?0*RQDh0C0zy?su-Gf(C3~|R`zWvntTmd=TM*$M#!nP(Q8bXAFAUtEbj?o+m}6Vw mbYKlVAzUd|zWNGa0X`+5SVC14wKU4Tmm6nkcx{@T*8Y{yo8tK>Xj%u@u~tXigp~8 zkLecV<-4FjS1=>cJYtj#XH+0OI5Z^?8M6wyKzr6G=@ZrBv~Evo(_r;?V>bBP$afD@Hh1lHvoEkA!+EBovX5lawE z-C=}iMl+*>eDU8Ut85!3hh+J%s-!ucH7ZUyJFg!%WP7*OdUuzspo%0mD410-2SdSS z74t9!;zumYVMMKbT6gBGLZ!VK#W+gsO|ar9t9T8zf{F?URjL-^IH=%?imO;u@jBj! z<4u~r6~{FdZ{xa(ckr%)8!B$f)813@K0c5esvpH>l3DL25B8C&VHR{-#fSKaP1Pqo zKIU~@asP<4?&)1RfzG<9UKfGZyxZLRq$SW5q}9KyL%f1*u4}ESI5kLut`!Bk2YuRI zr6)}jE0vijKEbCeYPB3RP%B>~2U+3a)*cUR;3lnHHaQr28xYJ?OL@nzO6lYNf|eeO zs{yh*igHHn4_<}U0UnfKCq8T7I=5JHbkY*Gs%-HtFH6HpySLM)MWAI?cg9Rjj+u^S z^zM9gg+#n&9j4?&|9pkgr$gSnW-XuB%RF|UpU;YOgL%}l9J5N5YEid&s4`>O$F%&M zK;N2#)J)}J9d1W7p1=_91vN{{oVc7HmSdi&wm6oDR$!oEhOE&OwJJBW%6f@?u`}43 z%UK7y$P@YZgV}U85bHZA_(H{(_*TUz4yxFLYXV#9*TN_*So3;1>kb>ckGtYytt**xlasifO(;dCbXcMzr@&zlt|wNim!E&ZNj@O#7u7f7bTagtwa zLG%Bw^p1S6Z*Xe*k;gRC%o&cJQSgJn)>Zthm5;#Y2isvce~NVR2MnO_!|}?WFdMl_ z^DX#pO5KL|jf)T-;j`Hls@TM}>KULLJ>0d(*+?ttd>s+~0r6D#@I5fIS%Y0o))k$?4wIU4#Yh$z1QEDa2K?zxo}@g(b9{zlT;S ziH1PQ5@NCf9&?+dEs?~Cr;8^Ju!K8!#4z>-ssJm~^^ig0AT zo+dyEEXKo9cc3m|UA^Q{m$VGaG!i%<#&CUfX~BNiU52?zh+)2y-90~}Bh`IVh@P9F z`*+ZG{?`3}WJHhVHrMI|sXECNPPtM0JWm$#0PQ5j8NcvJo+}GqPbKM>Thbk&rqfUA znRrxA5I?C=KdH_?(0<`IdvOWt6A3<+(D5rhgAJVyWY&p8I81#QM_j8he8YE?QNO}> d_?nF}&b`EYil1kZ#c6-_9G-VqQ#g+o{sRCi>zx1q literal 0 HcmV?d00001 diff --git a/out/production/github-repo/StackArray.class b/out/production/github-repo/StackArray.class new file mode 100644 index 0000000000000000000000000000000000000000..5658d70714f85b297599c398f0a545cdf344248f GIT binary patch literal 1981 zcmZ`(ZBrXn6n^gRk|l8oF98ZfFt(`4g27g-wzSxa&{9Kb4P}JdnJ%!x!sf+fgT+re zf@^8&GI;H>XltyG*n0qrh5dQd707zM{G3iPM%=C++(XTo=in-lq< z;uSZiGRut5ls1^6Gv^iEo3+B4TUm0}e0q9vrFF+&b}F9Shfc$(Y*qylCnOWF3VZn$ z5>~Fcn-Yjz@`_$CO~mxP0uHu3rZTFk1fyK5ZV9yQI)07d9qQ_WQx0+UvaCfN_nU?m9YMt@R=;v9N(vJL40_esLOGx=Ot8wEUUjbK`vTE|v*R{H zR3nxz)hg@moF^6NZ1T@a?PU0npm`O3%A)o`=pP$lTvh2^M$hS7TjXs z1YW6l(rMeo=N9rul_$+=c?f$AZc^o?3T`L8_r@S93@f*S6jDK%m8y->U|0fjX9I4D>Z7 z$}3IW;y48yD%UBn(+QR1xSL%l%R@eAu`m6KQB1F9mhmRXyq9l}4o#LvOOq9+txF5 z+er#2@pTpo79HU_3lnqb#x>&3BaIszzg!E4>=B17qmo00w+v__aoU{Wkj+C@BN&+` z8}ku*6$i;^)z~1V?13c2U)=Pc{71@{r0TE^WLJCGRqcQo8tg{M3s~ZMhpK!*7Au&b z_>=gOI^9zYtp;MqFyu8LM~ZJ*$ZM7Dki3!&ULA@Tsbm#s;y7pz3j;O@xYA%|MXq5Uj zuLtNvjpgpLK>?@g0VUs43~WXt^k&%tUBVo-B|}+cTMT;M<6TWP$b$A4A|}p?Kly$M z`7aa_oe2er%Z6w_!!-6`=uP1xJO_N=Qg^(i?lx%F6*-6eGYb=54-+P2LgPNy_^Yx$ rY{{B9p0!(L{Q&2~tdn8Z$p7A&82!MHoVK4@l10K~0v|G};iG>6DV0Si literal 0 HcmV?d00001 diff --git a/out/production/github-repo/StackArrayList.class b/out/production/github-repo/StackArrayList.class new file mode 100644 index 0000000000000000000000000000000000000000..9043d39d8655e4be6799d0e4cf9f3d638ba4caa4 GIT binary patch literal 1719 zcmZ`(ZBrUo6n++v1-dBFsEM`))1*aAg4*;2u{Oq+goJ2PtX9*sy~-9h;ca#oXXtO} zFX(T`mv&mxG&7xk?vLv9Im-sYp)lNg?sLz5&U4Q>mw*2K^Dh9mairt37&K&MSdJox zl?XnMVHIBpa!0H+vF?hsF4jg2Q^@Mrj3JI}l*m>L7jaLP_hrb-@Ic2yfeW&D6v4Kf z-;u=~9gj6c9akN{C|HiGVZ88MovKXJwJMo4+g2@sbMz@%<(hJvwy7aK$Y-SkR#dH= z$=6)7Y}&b19t>5LRnst$dfMYqbZx6v&du#{f4yEJ=Sab-ncL0kk!kO$qY9DHLj71( z_LObO+6P0*E;|~=29Rk;R9i*4Nmn3xzbp_ zm|K!+4a5DYffVKp%;ScRCkDPmQNwzA(8oKMlmaF5)kejvnl)FsR=qaJIjv*Yz*pEa z@DXl{wQt~KEQoc(Kn4rcH=yZJ(8A_R2AD)rB>3E9L*X~V44$W1UpC1&13do4^(V9u32S1>&>&qwCb71>>ZaK zWU4C5+0on&YtS3wRAJ+dr~aq!QioD$-K+G@57MFexgOWIJ?}w1Za&6y_ss1m_dpIOLg8j=v%_%2k;2d>eWjk&eZ^SjT#&YxQHlcww({T!O)I z5)oYHf5a5VDC`oY&G7pHB`r|YGDU6RDz@=Hd*d2MV4@?CtLt1v@PytUQobe~?O)?A zg0z4{`W1}y8^n2+;omWG7JZl=z%7K>lOv2J%tq%7(&Up=@p1Tkn|@m2>EAFi{Ra|l zT-ZM&i+Pf=Bv|f|825?5>)m81k;n(&Q~pE&lIdKU3H%v1g;{=WjD|{WjQx#^ZH%v+ zgD3WP+qe{X$>Tw02h3iW;|BO2&FpP4%snjP0kU}56*R*PFM2W<)R(s8F=&g_ z#OLZOTjDIqi*)2%mM{S?OxVMBdy*CDCX0{UKfmTDfAXAm|4QfSp7qd8cIiIxf`0lR D^UF?M literal 0 HcmV?d00001 diff --git a/out/production/github-repo/ciphers/AES.class b/out/production/github-repo/ciphers/AES.class new file mode 100644 index 0000000000000000000000000000000000000000..1ec176cd7e98a45df942e9223e6e15d37599b42c GIT binary patch literal 23712 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/ciphers/AESEncryption.class b/out/production/github-repo/ciphers/AESEncryption.class new file mode 100644 index 0000000000000000000000000000000000000000..7bfe98e1201fe8f5853e68a37b7a470d808b3cf6 GIT binary patch literal 2674 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 C6R!{e literal 0 HcmV?d00001 diff --git a/out/production/github-repo/ciphers/RSA.class b/out/production/github-repo/ciphers/RSA.class new file mode 100644 index 0000000000000000000000000000000000000000..62159919c337853dc6bf08688efe0d862f2b66c3 GIT binary patch literal 2528 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 literal 0 HcmV?d00001 diff --git a/out/production/github-repo/data_structures/Stacks/BalancedBrackets.class b/out/production/github-repo/data_structures/Stacks/BalancedBrackets.class new file mode 100644 index 0000000000000000000000000000000000000000..397af56265866cb30f61b82d0b2ebfdcb912ab57 GIT binary patch literal 2375 zcma)8+iw(A82_E_Wwz6)l(t*StzAT6x9w87SfpDjZJ~;6x5YwBserS)Lp!kDU1n#v zicdTk^+jV$e9#z;X`&bd4~2*U6BA-geDKK^6JuiH3x9wihWa}@+wM?#Fzq+zobUeq zzVDp&r$^u31+WWms%XQ2fCFh_#ydpn`6eMdgf|Lpk zqjEPE!eJG!Vq9{LsMv_33MN!EOOMT%4B?nur$RU`HKrB3reZx#C^)I$lt8f0%$s(< zfG--G5bzHbvWCE_q?tET&Rp8Cj_BzeIgQCeM$b*?mMPB_rr(}5O9HWER=4$2CEIc` zwqqHk?r~esoGo<^>N!21F|vaekA_`J2-KOSQ|Ss@ARJAe(a-DMRGXoZW#(rRvEu^b zB58<3?~VUe5vWgBT$UpVtagX*z0oJpD_>r4lL$R1Nz);f7{) zhOrGR(NBN%Lec=tyhGAgjT^X$>=&WyC7( z%T;PHaYn;g%xcJCj;MOPxhX5iYj^<#8Lp_|94vti2l9j{QZmjt2D=?8oQ^DYr#GUY zq``)x;XE#A*n+JBYpStblm;C$mo+R67ja2IizQLWsB89`+SkuBVD4 zvsU4PoJ|dH;HtpZ|2dNa4b^l;(`SqfXU4;FGvwgf1qsxEW$Db(AC1YeQqJo+#~3{= z&>9_zdAh%hsqAslDG~84-dT48CA=mTmeeDGUMmFhHSiT2f>AXb;{~l6y5Q5y z!zLs}sg&cyKk;(YYbeiqDIb`XHCC<+A0@q5H1b)2xEHgE*o%tGs*De73E2ggMLaUO zLWv>j^=x+BDHi!Gl?=LED!2UPEDud0Hh~Bq&o;iyfRDuM1c6Q5b#oP510A;@Zg5kB zr}+(*nJw7Nz2++589d8VNRBxL4JMM;N9G1A+lzRJ0u>p9YN<$Qwc=cFr@^Hr|LI>W)+2rM8t zIggpn1t{Mmw1C=%E1#l{N0sa`-*u0muPWI6m>^mev^^%6t_lLa>(>HeesKpK)?H_O ze;K1RTDfmyHSMTJgjj7tk?33|K37@SyXe4s=)?zz<3l`$FR&e7Vh6tFpT}>o8+ZBE z{D3{Uj|6^1KYqoF_znB;I|lIw{r!dEGX5Qmx0%{e`V2DS1N!ac8p5CGqHm4?ZMLzM zHH_l+%av`XYzH|pXp3k;P{B?GyA(XnUm<{hFeS7WQT}-d@izjfMGsSR+gsqQ$bg^R zfi`s$^|$a;QjFZhs>X%|tR@(ZsrYR)eS~)M?x2|?5RNaPrEv{E3uvX%JT|P5tzDLN z-p6p)eKgV0x_Km0U9{aW4~a6*ovHXp{9do0S{tbqcDaqcfv&Y|JoOaGS?j-dgIS+M zn$Q1w0xcjrU2rnn0Y^Ru6{hz0}{ b^t%eYHhUrXQGJVS8+UT<1t&n>z>!R619=-o8><3h%xE$u0?8xo>!>b}C^wsx zwm`fQ^prrRrG0fVeCVj~Ms_?_a;=~%y|xUsIe!=9(VZR$q)ac;fiK{m`@RYro*WDm zJEc}nk91FU1OI8L!dk-%SdXrx4og2vhjbl3%8)dfQu;a=hFx{0jc@kX%5GndqzeaY zE|Rcaq+r`v7uf#ag-T|-=1KpycG>BxZX^&Zn>QE!+{P9^F2Ucl7<44Um=XoUL7F_n z>>jb{T%r03QJs5%Wgu4FFmmSy)1rY_1SzF9YWb6$53O literal 0 HcmV?d00001 diff --git a/out/production/github-repo/divideconquer/ClosestPair.class b/out/production/github-repo/divideconquer/ClosestPair.class new file mode 100644 index 0000000000000000000000000000000000000000..b719c6ce57b01d80b27d8aaea8123b0feadfd7e2 GIT binary patch literal 5809 zcmd5=dw7%88ULMrUy?8B*EDStOfj%ZxugjNL9M2sf-OpsOQmvGA#KwVNRyH#2r5He zx9QYP=Tvm+Ty-)pQ$#2TS})Ui9nN`~x@SJq-Jd<1kDHqg5%xRhOF~d__&olxKJB@@ z=e*bRd*5@uKDU3@5P;+HrVF!hy%Pc4Ae&9HxzT}}WdD5^Y`EFU<`&u9>LTq2vbjw* zKa|aY3%BDAIr@=o?sQ=@ek_~2q=38a)2KxLNYXvBxmVJE;=q0Ojqe^%KMve4S-04y z8Tq{dJYb)8tTnSw872V?Vt3HiaK{2-Jc1g(LSK5RAcpbOiu z-GMOgxnoFk6zz zSh^_@?dyy6ahlBbw8zq|sdzHOsb~?fMbqi%dVw*^W_QNd#yevjspOh$EIqL)ks?o~ zH5yNk&I_C(VDFX8lLSV8k^Pg&*b`6A&Gt}hvp{K|)YI9N$|f^hni@~WGp7jX!Irv( z?3z-YF@f^g@nnoFwD|03dxDfoX-HyWG#!`o98u4#jMJH;4{uMwY;JRRq+`)cEboy( zkUEdh_gwfEMiW^X&9e4vJkeP!skyoC@KzK@QLJMe7OChWH7v(W_#nXKZrOu;fXX}lxP07giwj?`aQdyk#wq>FntLH>}Rp5wr2U?k6 zv|@dc6|Qw>W#b*I+fr%rAGt|9HnB#ED&j8fIEW#Ex+8S2j`+~moe`yX`g+wFap{Bt zPpJjc=@w{>Oezyis0D|$uvoyEh;?Oh8(isl_saaFln9)y)?$p9$=Q5sRZa~~)xi>+ zDwd0=G<80`TFo#fV#)5zO1jsc&Sqk#r_vonWAMlvlK!|&qtOVf94g zOwwVLvnskaIx!JVc28`}q~po%DJl=5>2Bhz>NA!FN;()IV`@htmpfWevbfq(SsHhG zT&9bsD2FFV4JH=hS`%|H*Th+vZ=wzJ1xEev#5XYyt&;mm6P;LKA|{(IbeqUxt%-~r zt;1Reo-*+>JZ<7~e9OdoT;RYnCZ5G}CZ5L&CKgK7KbO-za(Xrv(9DC*H>a{H(W?(@ zk~CtmiFS0DcoDy#$1Ta;Y^J6&nu$8_l8Im9Wr3p(inQW+noQMLnkB?4C^f0B8db^q z8f#3vf>&kpnu%ZGbpdUiMSO#aG`?niV+}DeFPo8SnyH4E2r~ZTNfvcHo;f^$o@`G| zbG$DTO?Jd;Btwx?^V(O%I%HA?Ss!>tMN4h#`IM9*v2Bn+M~U_v1F$}{by|`a^jFvp~3*G@aHTu(Jc-EZ}8I_l>pY> zgTXjdJ|^*ApT#@Y&Of4`ZHYv*x^ zA#FQKLSj2K+32C8sO+i1`__CD_HyoRRcSZtAY2VP2R>cz97Jg-%)ts$OJ%-V$Qq_tZeY8K*tn6QxCx_hvvTuzQr+<4d zwrtb(5x)G&5ibN-YUYNudM&UM?m&Ycuq7I7J{zfxcAxIEb;^+=V80#CQ2ijv@2}UY z?V8WV-SskMHMNN|cf@cbTiyrQKheV5LKJu&#mWn-*7AJo8jztvyANGE@_`zYbe(m zJU)*U+foqgDTuA`S17TS)ox#Tz0Whbt-o9-(Q3~pM0+TDFjVcO%DrL!Vakp({a!D;JHfftckIMb z5s%-aR>%205!3J43O^$;-0yi1ep*8%@+wmDcpddu(aMeem2Bf01LZgGF93WG zf@n8${b5$6N8rN{OVnc+i^rMsPcY}7!W2A>7CeX9e7w!W3oLAV2=^CRBws=rui_%S zhO7Bz+Jx8n<@zSJfOv>|A0^LI z!Xcg&h64Xvyh5*L#k!C;Q#oIyEvg8+se8PlRnY!9isqq?6^iDirdjl20fvbw=vT$R zN`#s2vVd1g{O8k~que#X(FU%Tz$Tt%jcjFNd&I-6l(HcB#17U=c?|?;=_OpXW30H7 zwX>BM%xrNnzD8{Z=7|l|w}98rd~pFQ>H_fHEbOeStxW4@g~sYS7v+r19jvhnctWy- zbisXq2V>-}klZzrW)B=d6U8>goj1ePoyr{t}mijhPi^XCrmWy%d;z6zwA@mYl7m4w>Tuk7H z_p!J~OvV;*93Ch9pAjeGd2te65si3*aC}=#Wtxm43c{S{X#I7*m}gK>aQ zUWbJyB1q#yuwow!!o*FObXhPdp&?iChE-4Fl1)^>3sJna8-XPra|cGu4sU~93-jc? z7&(ZVHaXX=`7!yqjq{OS)aK`Q&c_t(cW^$Azxj28^ExlW`MF0j)O#_pK#&}hsI)+k zEF{zw2u>1?DQ0nzaGVz>6n2!7Q0v8slCTw#%Em!VVZR$wm+ZjFm8T5iRO!snAf^ps zIv2H*1Bx(k$iCBZ`vMZEgJ`O3E+RNdu$cQx2(>4|R=A{Cd8w4Dc}|O`MOrcAP%BQi zglRe1XB4JVa^*};E%8N$=UC(uT<*!S$Y#s zM59$g)(W`C0C7Bl&e zmW3iI&J!tdjp!9m^503n5q%2s^3&-9OjkhX^IN=y@37YM+eEyAYxuz=sQWSn;1X3Q zO_Y3$4+vke7t>g6zl&=vloHzV`OeQeRx{Qfc`-_t1mE%UQ%5cy!-6-4qwjHCg6nws O$rXN6^LjiJ&i?{RYtu^r literal 0 HcmV?d00001 diff --git a/out/production/github-repo/divideconquer/SkylineAlgorithm$Point.class b/out/production/github-repo/divideconquer/SkylineAlgorithm$Point.class new file mode 100644 index 0000000000000000000000000000000000000000..12fe3e5c65d0275512b2b1dc452087a68c5fe8e0 GIT binary patch literal 1031 zcmb7BOKTHR7(I7pl4)Yv#%Q9owYC~-62YX!ogzv>2*d|Oigh=cT+(SLGj(QC+8^NB z$I6{h1vlLY7Qux-z#k=^JDG^qP+Eq2zsH?(&iDBF>-!G?w{ar_16S0wkVOiMCa#$% z3y58wCeNNg`mWR|-tG98W$T^gA+mW_4U<3N7EZ+%+q3RGcJ@ zXu}B!e(F13B#>)*o(xu9D-0#mORcW6<8-C%doKqvsJFNFT+%*pdw$?V8~t(&yF<~Q zjGhbVl`6|p!MZ@E>-QbciWE_`ax$js3ju9=SzxjqS@zZ=YdfhkYuUC8!*Zk1I0YMv z(RK+Kp_dgp+x7>6Egw2+D8-{K-P*KvtQ;m_=8#rb2G>n236xJV3W2=B*Imo&)t_`W zrOlyoD%{Kb@pvq9%_**3<457xV->V%aG1#QKEr68?>g;t?Hlyk>>;$;+#$r57?9&# zAQAAI_Z!0AVhZmt$;`qK#`r8F62vkh_LPuDfdbAYGId(@ma2V)c0fmiB3HEl?_uK0wRQT8JWqwGFR<1-9hDd~Te zc@Qg=hHQWOUcm)UK;R<(Her;C`hAg~zzi-W1svP@tADDWRkI{`ZY=n}*2jQZ++`M` PVIFx}wPgcWxtz>zC$_VR literal 0 HcmV?d00001 diff --git a/out/production/github-repo/divideconquer/SkylineAlgorithm$XComparator.class b/out/production/github-repo/divideconquer/SkylineAlgorithm$XComparator.class new file mode 100644 index 0000000000000000000000000000000000000000..c8da5b264552fb38298e9569e7c62fdd2eb145e8 GIT binary patch literal 1168 zcma)6TWb?R6#gc+ZMGYm*4Dc<+HJeJ*sUP=kP;{XVI|l?r1(174C&O(u5NY<{wH4q zwZ#YV*&ijI*hxKl%b)fV+l`n6!A>Q7EBF0I+=Gh zSQ_dY8VsfAR8Gu&hFWhZ&*f0Kf&VEMq22%R*^|CF^hQA_qtkJlum{qYQHNp6ng_0* zFciAMP%y0Yh~{lP9*FQAA9!S0>jf_NPIxHQIx`lO5QgRV-C+EYhdc^G2E*}v5q3R3 znF!i!&2ei^{Y-i_H=!br#p6Kw5yR0u;bsDC&-0U_>J9_r3_FX#2|QrfwR&g#oZBAv zNA}U+Ot?||x2(Q+KMw|TQ-)aV*5fpP>^t*R)|rOQ(@P$BCrnstz) z56~OU?_iA!hZX8egaN*xO8uP_g;lK6itq^=)rtyT#`T6U348Mr`4+WH6uuC4 zn(ZQCt7R(wvl+OD`-wLL4``OF9un`vjQ16x6>p`{{EcFZ+7FawiBp+ILQ=_O=J66S}RgbuxOIUzSr%B4?kyb?lx z2m>L!Do}mC*O{I%T%+K)0{TEMXS%(%k!XwsX&L|XJQ{ZSNpCf}=Yu3t|87Ft8Xu549m*;FNXLj3@j%yXBrklM? zU1?$kk61aYkQPu9Eu#WzuahNe?I7KUiqqq!d(IfQX{jG{GKM{BxR%s?qgt4&51(4VNdWft~EL3%Qe!xmW`$JHp?xIkC$$4W~F=^MhZse@@ZqnD<>OG z;N6NxU3UR0UTNLY0u6ro`mCH``vnx}u6U@fXDX^H>%<=Ss>5!ZwsHdBR|H=7c`F@Y z-NFC2RFM&<=w{45OHN1h-xIc1POgsUv4usgFvU6=u}Mb@PU#rLX@TbTOstL}4C^?9 z(>h+mSsl%ILB~tjuVVz~bi6K?QH%*}eKMTDM(vr&*U*phh4BjLYEEf@GEx#qMp%d#p)HY?#vM3;k0w}_F+ znE8Bjdwcsc;Pccgf%{}&kU6?-TOd~6jJ=L+vnZC6>uR}x9ema6_@5y7oRc?xH&Y8B z29+{N=GsI{4-`tk#^fD{h~In*MGt<>~V47OoAHNk8< zi7oNks7X96c^m323IRxvpl56<3)cML(y?}NpPf+x5%-xg#HgF8C1^*R)CFj%TTR*m zj;E9*1b;#(rIx-+sQMJT)WTyoux-V>;^u9Kr4}Ab-STfYP{^gW7_J@U^1q~=&Z}zs@`pfST0~cH2x(= zaFFHdAQ^|S8;8-3PV}LRBb4T7^sx7P@fJ?tGEQQaJM-wrN7O&YDSS?^uQ2RY?JTM= zPP`Y1q7nV3Uq2}&Jc2cR&FS3D8jj*TlC&vA9!83iN~}7xQqqVR#vV#R>?O_tA1%Sw z5PoEAHBz=qDKfSi8DnG{BR8Y!A#|~8i+F^F5Zd_@JF5SrUy0Lw#N(j*oZcmpJof`7 z9hW6nvy13Y#Y;5a#fDT|y|}6@VE5WqP5D;Mb<)kK@YuYvJg<MNL}mP@`&z z(S7k$)bA4RT*sDjH63SDg{5PMI@ zopQoW5l`r@bY$ev6ALSTIAjVkLHqB zj5bMR9N~uuh`-QJ^8QAR5bYGCY3CZ7hv Date: Thu, 9 May 2019 19:40:28 +0800 Subject: [PATCH 128/521] docs: update .gitignore --- .gitignore___jb_tmp___ | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitignore___jb_tmp___ diff --git a/.gitignore___jb_tmp___ b/.gitignore___jb_tmp___ new file mode 100644 index 000000000000..e69de29bb2d1 From db43a76f0b2875c0dd8e00fec1517d00b2b3c9aa Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Thu, 9 May 2019 19:42:22 +0800 Subject: [PATCH 129/521] Delete .gitignore___jb_tmp___ --- .gitignore___jb_tmp___ | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .gitignore___jb_tmp___ diff --git a/.gitignore___jb_tmp___ b/.gitignore___jb_tmp___ deleted file mode 100644 index e69de29bb2d1..000000000000 From 36dc276f297a1fab6a3cb2fd7b41cefdec7ff5e0 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Thu, 9 May 2019 19:43:06 +0800 Subject: [PATCH 130/521] docs: delete duplicate files --- .gitignore | 39 +++- out/production/github-repo/.gitignore | 5 - .../github-repo/BellmanFord$Edge.class | Bin 547 -> 0 bytes out/production/github-repo/BellmanFord.class | Bin 3763 -> 0 bytes .../Conversions/AnyBaseToAnyBase.class | Bin 3410 -> 0 bytes .../Conversions/AnyBaseToDecimal.class | Bin 1970 -> 0 bytes .../github-repo/Conversions/AnytoAny.class | Bin 986 -> 0 bytes .../Conversions/BinaryToDecimal.class | Bin 1294 -> 0 bytes .../Conversions/BinaryToHexadecimal.class | Bin 1998 -> 0 bytes .../Conversions/BinaryToOctal.class | Bin 1237 -> 0 bytes .../Conversions/DecimalToAnyBase.class | Bin 2529 -> 0 bytes .../Conversions/DecimalToBinary.class | Bin 1766 -> 0 bytes .../Conversions/DecimalToHexaDecimal.class | Bin 1742 -> 0 bytes .../Conversions/DecimalToOctal.class | Bin 1290 -> 0 bytes .../github-repo/Conversions/HexToOct.class | Bin 1843 -> 0 bytes .../Conversions/HexaDecimalToBinary.class | Bin 1724 -> 0 bytes .../Conversions/HexaDecimalToDecimal.class | Bin 1560 -> 0 bytes .../Conversions/OctalToDecimal.class | Bin 1695 -> 0 bytes .../Conversions/OctalToHexadecimal.class | Bin 1774 -> 0 bytes .../Conversions/RomanToInteger$1.class | Bin 813 -> 0 bytes .../Conversions/RomanToInteger.class | Bin 1562 -> 0 bytes .../DataStructures/Bags/Bag$1.class | Bin 197 -> 0 bytes .../Bags/Bag$ListIterator.class | Bin 1738 -> 0 bytes .../DataStructures/Bags/Bag$Node.class | Bin 1426 -> 0 bytes .../github-repo/DataStructures/Bags/Bag.class | Bin 3086 -> 0 bytes .../CircularBuffer$TestReadWorker.class | Bin 1347 -> 0 bytes .../CircularBuffer$TestWriteWorker.class | Bin 1402 -> 0 bytes .../Buffers/CircularBuffer.class | Bin 2332 -> 0 bytes .../Graphs/AdjacencyListGraph$Vertex.class | Bin 1956 -> 0 bytes .../Graphs/AdjacencyListGraph.class | Bin 2890 -> 0 bytes .../Graphs/AdjacencyMatrixGraph.class | Bin 2832 -> 0 bytes .../Graphs/ConnectedComponent.class | Bin 1548 -> 0 bytes .../DataStructures/Graphs/Cycle.class | Bin 2947 -> 0 bytes .../DataStructures/Graphs/Cycles.class | Bin 556 -> 0 bytes .../DataStructures/Graphs/FloydWarshall.class | Bin 2503 -> 0 bytes .../DataStructures/Graphs/Graph$Edge.class | Bin 1012 -> 0 bytes .../DataStructures/Graphs/Graph$Node.class | Bin 720 -> 0 bytes .../DataStructures/Graphs/Graph.class | Bin 3164 -> 0 bytes .../DataStructures/Graphs/Graphs.class | Bin 1442 -> 0 bytes .../DataStructures/Graphs/MatrixGraphs.class | Bin 825 -> 0 bytes .../DataStructures/Graphs/PrimMST.class | Bin 2199 -> 0 bytes .../HashMap/Hashing/HashMap.class | Bin 1463 -> 0 bytes .../HashMap/Hashing/LinkedList.class | Bin 1498 -> 0 bytes .../DataStructures/HashMap/Hashing/Main.class | Bin 1423 -> 0 bytes .../DataStructures/HashMap/Hashing/Node.class | Bin 392 -> 0 bytes .../Heaps/EmptyHeapException.class | Bin 388 -> 0 bytes .../DataStructures/Heaps/Heap.class | Bin 333 -> 0 bytes .../DataStructures/Heaps/HeapElement.class | Bin 2173 -> 0 bytes .../DataStructures/Heaps/MaxHeap.class | Bin 3904 -> 0 bytes .../DataStructures/Heaps/MinHeap.class | Bin 3904 -> 0 bytes .../Heaps/MinPriorityQueue.class | Bin 2562 -> 0 bytes .../Lists/CircleLinkedList$1.class | Bin 238 -> 0 bytes .../Lists/CircleLinkedList$Node.class | Bin 1196 -> 0 bytes .../Lists/CircleLinkedList.class | Bin 1922 -> 0 bytes .../Lists/CursorLinkedList$Node.class | Bin 881 -> 0 bytes .../Lists/CursorLinkedList.class | Bin 3873 -> 0 bytes .../Lists/DoublyLinkedList.class | Bin 2418 -> 0 bytes .../DataStructures/Lists/Link.class | Bin 1343 -> 0 bytes .../Lists/Merge_K_SortedLinkedlist$Node.class | Bin 1236 -> 0 bytes .../Lists/Merge_K_SortedLinkedlist.class | Bin 2649 -> 0 bytes .../DataStructures/Lists/Node.class | Bin 385 -> 0 bytes .../Lists/SinglyLinkedList.class | Bin 2769 -> 0 bytes .../DataStructures/Matrix/Matrix.class | Bin 5253 -> 0 bytes .../Queues/GenericArrayListQueue.class | Bin 2497 -> 0 bytes .../DataStructures/Queues/PriorityQueue.class | Bin 1243 -> 0 bytes .../Queues/PriorityQueues.class | Bin 1070 -> 0 bytes .../DataStructures/Queues/Queue.class | Bin 1489 -> 0 bytes .../DataStructures/Queues/Queues.class | Bin 866 -> 0 bytes .../Stacks/LinkedListStack.class | Bin 1872 -> 0 bytes .../DataStructures/Stacks/Node.class | Bin 387 -> 0 bytes .../Stacks/StackOfLinkedList.class | Bin 1189 -> 0 bytes .../DataStructures/Trees/AVLTree$Node.class | Bin 1956 -> 0 bytes .../DataStructures/Trees/AVLTree.class | Bin 4616 -> 0 bytes .../Trees/BinaryTree$Node.class | Bin 665 -> 0 bytes .../DataStructures/Trees/BinaryTree.class | Bin 3099 -> 0 bytes .../DataStructures/Trees/GenericTree$1.class | Bin 223 -> 0 bytes .../Trees/GenericTree$Node.class | Bin 959 -> 0 bytes .../DataStructures/Trees/GenericTree.class | Bin 5739 -> 0 bytes .../Trees/LevelOrderTraversal$Node.class | Bin 678 -> 0 bytes .../Trees/LevelOrderTraversal.class | Bin 1560 -> 0 bytes .../Trees/LevelOrderTraversalQueue$Node.class | Bin 712 -> 0 bytes .../Trees/LevelOrderTraversalQueue.class | Bin 1491 -> 0 bytes .../DataStructures/Trees/Node.class | Bin 1988 -> 0 bytes .../Trees/PrintTopViewofTree.class | Bin 1052 -> 0 bytes .../DataStructures/Trees/QItem.class | Bin 469 -> 0 bytes .../Trees/RedBlackBST$Node.class | Bin 798 -> 0 bytes .../DataStructures/Trees/RedBlackBST.class | Bin 6374 -> 0 bytes .../DataStructures/Trees/Tree.class | Bin 1971 -> 0 bytes .../DataStructures/Trees/TreeNode.class | Bin 424 -> 0 bytes .../DataStructures/Trees/TreeTraversal.class | Bin 1081 -> 0 bytes .../Trees/TrieImp$TrieNode.class | Bin 616 -> 0 bytes .../DataStructures/Trees/TrieImp.class | Bin 3364 -> 0 bytes .../Trees/ValidBSTOrNot$Node.class | Bin 642 -> 0 bytes .../DataStructures/Trees/ValidBSTOrNot.class | Bin 926 -> 0 bytes .../DynamicProgramming/CoinChange.class | Bin 1897 -> 0 bytes .../DynamicProgramming/Edit_Distance.class | Bin 2089 -> 0 bytes .../DynamicProgramming/EggDropping.class | Bin 1239 -> 0 bytes .../DynamicProgramming/Fibonacci.class | Bin 2235 -> 0 bytes .../DynamicProgramming/Ford_Fulkerson.class | Bin 3144 -> 0 bytes .../DynamicProgramming/KadaneAlgorithm.class | Bin 1265 -> 0 bytes .../DynamicProgramming/Knapsack.class | Bin 1150 -> 0 bytes .../LevenshteinDistance.class | Bin 1769 -> 0 bytes .../LongestCommonSubsequence.class | Bin 2516 -> 0 bytes .../LongestIncreasingSubsequence.class | Bin 1480 -> 0 bytes .../LongestValidParentheses.class | Bin 1711 -> 0 bytes .../DynamicProgramming/Matrix.class | Bin 637 -> 0 bytes .../MatrixChainMultiplication.class | Bin 4092 -> 0 bytes .../DynamicProgramming/RodCutting.class | Bin 1277 -> 0 bytes .../MinimizingLateness$Schedule.class | Bin 598 -> 0 bytes .../MinimizingLateness.class | Bin 2122 -> 0 bytes .../MinimizingLateness/data06_lateness.txt | 7 - .../Misc/MedianOfRunningArray.class | Bin 1953 -> 0 bytes .../github-repo/Misc/PalindromePrime.class | Bin 1653 -> 0 bytes .../github-repo/Misc/heap_sort.class | Bin 1705 -> 0 bytes out/production/github-repo/NodeStack.class | Bin 3835 -> 0 bytes .../github-repo/Others/Abecedarian.class | Bin 598 -> 0 bytes .../github-repo/Others/Armstrong.class | Bin 1414 -> 0 bytes .../Others/BrianKernighanAlgorithm.class | Bin 985 -> 0 bytes out/production/github-repo/Others/CRC32.class | Bin 1231 -> 0 bytes .../github-repo/Others/CRCAlgorithm.class | Bin 3637 -> 0 bytes .../github-repo/Others/CountChar.class | Bin 1463 -> 0 bytes .../github-repo/Others/CountWords.class | Bin 1357 -> 0 bytes .../github-repo/Others/Dijkshtra.class | Bin 2467 -> 0 bytes .../github-repo/Others/Dijkstra.class | Bin 1060 -> 0 bytes .../github-repo/Others/EulersFunction.class | Bin 818 -> 0 bytes .../github-repo/Others/Factorial.class | Bin 1575 -> 0 bytes .../github-repo/Others/FibToN.class | Bin 882 -> 0 bytes .../github-repo/Others/FloydTriangle.class | Bin 1249 -> 0 bytes out/production/github-repo/Others/GCD.class | Bin 1137 -> 0 bytes .../github-repo/Others/Graph$Edge.class | Bin 523 -> 0 bytes .../github-repo/Others/Graph$Vertex.class | Bin 2044 -> 0 bytes out/production/github-repo/Others/Graph.class | Bin 3774 -> 0 bytes .../github-repo/Others/GuassLegendre.class | Bin 1229 -> 0 bytes .../Others/InsertDeleteInArray.class | Bin 1542 -> 0 bytes out/production/github-repo/Others/KMP.class | Bin 1655 -> 0 bytes .../github-repo/Others/Krishnamurthy.class | Bin 1427 -> 0 bytes .../Others/LinearCongruentialGenerator.class | Bin 1289 -> 0 bytes .../Others/LowestBasePalindrome.class | Bin 2929 -> 0 bytes .../github-repo/Others/Palindrome.class | Bin 1128 -> 0 bytes .../github-repo/Others/PasswordGen.class | Bin 2117 -> 0 bytes .../github-repo/Others/PerlinNoise.class | Bin 3518 -> 0 bytes .../github-repo/Others/PowerOfTwoOrNot.class | Bin 1082 -> 0 bytes .../github-repo/Others/Process.class | Bin 403 -> 0 bytes .../Others/QueueUsingTwoStacks.class | Bin 1114 -> 0 bytes .../github-repo/Others/QueueWithStack.class | Bin 1154 -> 0 bytes .../Others/RemoveDuplicateFromString.class | Bin 1747 -> 0 bytes .../Others/ReturnSubsequence.class | Bin 1665 -> 0 bytes .../Others/ReverseStackUsingRecursion.class | Bin 1770 -> 0 bytes .../github-repo/Others/ReverseString.class | Bin 1577 -> 0 bytes .../github-repo/Others/RootPrecision.class | Bin 1026 -> 0 bytes out/production/github-repo/Others/SJF.class | Bin 500 -> 0 bytes .../github-repo/Others/Schedule$1.class | Bin 889 -> 0 bytes .../github-repo/Others/Schedule$2.class | Bin 1114 -> 0 bytes .../github-repo/Others/Schedule.class | Bin 4649 -> 0 bytes .../Others/SieveOfEratosthenes.class | Bin 1248 -> 0 bytes .../Others/SkylineProblem$Building.class | Bin 612 -> 0 bytes .../Others/SkylineProblem$Skyline.class | Bin 569 -> 0 bytes .../github-repo/Others/SkylineProblem.class | Bin 4275 -> 0 bytes .../Others/StackPostfixNotation.class | Bin 1817 -> 0 bytes .../Others/TopKWords$CountWords.class | Bin 2228 -> 0 bytes .../github-repo/Others/TopKWords.class | Bin 2677 -> 0 bytes .../github-repo/Others/TowerOfHanoi.class | Bin 1427 -> 0 bytes out/production/github-repo/README-ko.md | 187 ----------------- out/production/github-repo/README.md | 197 ------------------ .../github-repo/Searches/BinarySearch.class | Bin 3839 -> 0 bytes .../Searches/InterpolationSearch.class | Bin 2829 -> 0 bytes .../Searches/IterativeBinarySearch.class | Bin 3494 -> 0 bytes .../Searches/IterativeTernarySearch.class | Bin 3660 -> 0 bytes .../github-repo/Searches/LinearSearch.class | Bin 2889 -> 0 bytes .../Searches/SaddlebackSearch.class | Bin 1582 -> 0 bytes .../Searches/SearchAlgorithm.class | Bin 251 -> 0 bytes .../github-repo/Searches/TernarySearch.class | Bin 3801 -> 0 bytes .../Sorts/BinaryTreeSort$Node.class | Bin 1689 -> 0 bytes .../Sorts/BinaryTreeSort$SortVisitor.class | Bin 1213 -> 0 bytes .../Sorts/BinaryTreeSort$TreeVisitor.class | Bin 412 -> 0 bytes .../github-repo/Sorts/BinaryTreeSort.class | Bin 2177 -> 0 bytes .../github-repo/Sorts/BogoSort.class | Bin 1989 -> 0 bytes .../github-repo/Sorts/BubbleSort.class | Bin 1427 -> 0 bytes .../Sorts/CocktailShakerSort.class | Bin 1674 -> 0 bytes .../github-repo/Sorts/CombSort.class | Bin 1693 -> 0 bytes .../github-repo/Sorts/CountingSort.class | Bin 6184 -> 0 bytes .../github-repo/Sorts/CycleSort.class | Bin 2139 -> 0 bytes .../github-repo/Sorts/GnomeSort.class | Bin 1717 -> 0 bytes .../github-repo/Sorts/HeapSort$Heap.class | Bin 2181 -> 0 bytes .../github-repo/Sorts/HeapSort.class | Bin 2127 -> 0 bytes .../github-repo/Sorts/InsertionSort.class | Bin 1455 -> 0 bytes .../github-repo/Sorts/MergeSort.class | Bin 2228 -> 0 bytes .../github-repo/Sorts/PancakeSort.class | Bin 1766 -> 0 bytes .../github-repo/Sorts/QuickSort.class | Bin 2039 -> 0 bytes .../github-repo/Sorts/RadixSort.class | Bin 1808 -> 0 bytes .../github-repo/Sorts/SelectionSort.class | Bin 1531 -> 0 bytes .../github-repo/Sorts/ShellSort.class | Bin 1376 -> 0 bytes .../github-repo/Sorts/SortAlgorithm.class | Bin 891 -> 0 bytes .../github-repo/Sorts/SortUtils.class | Bin 3119 -> 0 bytes out/production/github-repo/StackArray.class | Bin 1981 -> 0 bytes .../github-repo/StackArrayList.class | Bin 1719 -> 0 bytes out/production/github-repo/ciphers/AES.class | Bin 23712 -> 0 bytes .../github-repo/ciphers/AESEncryption.class | Bin 2674 -> 0 bytes .../github-repo/ciphers/Caesar.class | Bin 2746 -> 0 bytes .../ciphers/ColumnarTranspositionCipher.class | Bin 5352 -> 0 bytes out/production/github-repo/ciphers/RSA.class | Bin 2528 -> 0 bytes .../github-repo/ciphers/Vigenere.class | Bin 1904 -> 0 bytes .../Stacks/BalancedBrackets.class | Bin 2375 -> 0 bytes .../divideconquer/ClosestPair$Location.class | Bin 507 -> 0 bytes .../divideconquer/ClosestPair.class | Bin 5809 -> 0 bytes .../SkylineAlgorithm$Point.class | Bin 1031 -> 0 bytes .../SkylineAlgorithm$XComparator.class | Bin 1168 -> 0 bytes .../divideconquer/SkylineAlgorithm.class | Bin 2695 -> 0 bytes 208 files changed, 35 insertions(+), 400 deletions(-) delete mode 100644 out/production/github-repo/.gitignore delete mode 100644 out/production/github-repo/BellmanFord$Edge.class delete mode 100644 out/production/github-repo/BellmanFord.class delete mode 100644 out/production/github-repo/Conversions/AnyBaseToAnyBase.class delete mode 100644 out/production/github-repo/Conversions/AnyBaseToDecimal.class delete mode 100644 out/production/github-repo/Conversions/AnytoAny.class delete mode 100644 out/production/github-repo/Conversions/BinaryToDecimal.class delete mode 100644 out/production/github-repo/Conversions/BinaryToHexadecimal.class delete mode 100644 out/production/github-repo/Conversions/BinaryToOctal.class delete mode 100644 out/production/github-repo/Conversions/DecimalToAnyBase.class delete mode 100644 out/production/github-repo/Conversions/DecimalToBinary.class delete mode 100644 out/production/github-repo/Conversions/DecimalToHexaDecimal.class delete mode 100644 out/production/github-repo/Conversions/DecimalToOctal.class delete mode 100644 out/production/github-repo/Conversions/HexToOct.class delete mode 100644 out/production/github-repo/Conversions/HexaDecimalToBinary.class delete mode 100644 out/production/github-repo/Conversions/HexaDecimalToDecimal.class delete mode 100644 out/production/github-repo/Conversions/OctalToDecimal.class delete mode 100644 out/production/github-repo/Conversions/OctalToHexadecimal.class delete mode 100644 out/production/github-repo/Conversions/RomanToInteger$1.class delete mode 100644 out/production/github-repo/Conversions/RomanToInteger.class delete mode 100644 out/production/github-repo/DataStructures/Bags/Bag$1.class delete mode 100644 out/production/github-repo/DataStructures/Bags/Bag$ListIterator.class delete mode 100644 out/production/github-repo/DataStructures/Bags/Bag$Node.class delete mode 100644 out/production/github-repo/DataStructures/Bags/Bag.class delete mode 100644 out/production/github-repo/DataStructures/Buffers/CircularBuffer$TestReadWorker.class delete mode 100644 out/production/github-repo/DataStructures/Buffers/CircularBuffer$TestWriteWorker.class delete mode 100644 out/production/github-repo/DataStructures/Buffers/CircularBuffer.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph$Vertex.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/AdjacencyMatrixGraph.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/ConnectedComponent.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/Cycle.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/Cycles.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/FloydWarshall.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/Graph$Edge.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/Graph$Node.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/Graph.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/Graphs.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/MatrixGraphs.class delete mode 100644 out/production/github-repo/DataStructures/Graphs/PrimMST.class delete mode 100644 out/production/github-repo/DataStructures/HashMap/Hashing/HashMap.class delete mode 100644 out/production/github-repo/DataStructures/HashMap/Hashing/LinkedList.class delete mode 100644 out/production/github-repo/DataStructures/HashMap/Hashing/Main.class delete mode 100644 out/production/github-repo/DataStructures/HashMap/Hashing/Node.class delete mode 100644 out/production/github-repo/DataStructures/Heaps/EmptyHeapException.class delete mode 100644 out/production/github-repo/DataStructures/Heaps/Heap.class delete mode 100644 out/production/github-repo/DataStructures/Heaps/HeapElement.class delete mode 100644 out/production/github-repo/DataStructures/Heaps/MaxHeap.class delete mode 100644 out/production/github-repo/DataStructures/Heaps/MinHeap.class delete mode 100644 out/production/github-repo/DataStructures/Heaps/MinPriorityQueue.class delete mode 100644 out/production/github-repo/DataStructures/Lists/CircleLinkedList$1.class delete mode 100644 out/production/github-repo/DataStructures/Lists/CircleLinkedList$Node.class delete mode 100644 out/production/github-repo/DataStructures/Lists/CircleLinkedList.class delete mode 100644 out/production/github-repo/DataStructures/Lists/CursorLinkedList$Node.class delete mode 100644 out/production/github-repo/DataStructures/Lists/CursorLinkedList.class delete mode 100644 out/production/github-repo/DataStructures/Lists/DoublyLinkedList.class delete mode 100644 out/production/github-repo/DataStructures/Lists/Link.class delete mode 100644 out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist$Node.class delete mode 100644 out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist.class delete mode 100644 out/production/github-repo/DataStructures/Lists/Node.class delete mode 100644 out/production/github-repo/DataStructures/Lists/SinglyLinkedList.class delete mode 100644 out/production/github-repo/DataStructures/Matrix/Matrix.class delete mode 100644 out/production/github-repo/DataStructures/Queues/GenericArrayListQueue.class delete mode 100644 out/production/github-repo/DataStructures/Queues/PriorityQueue.class delete mode 100644 out/production/github-repo/DataStructures/Queues/PriorityQueues.class delete mode 100644 out/production/github-repo/DataStructures/Queues/Queue.class delete mode 100644 out/production/github-repo/DataStructures/Queues/Queues.class delete mode 100644 out/production/github-repo/DataStructures/Stacks/LinkedListStack.class delete mode 100644 out/production/github-repo/DataStructures/Stacks/Node.class delete mode 100644 out/production/github-repo/DataStructures/Stacks/StackOfLinkedList.class delete mode 100644 out/production/github-repo/DataStructures/Trees/AVLTree$Node.class delete mode 100644 out/production/github-repo/DataStructures/Trees/AVLTree.class delete mode 100644 out/production/github-repo/DataStructures/Trees/BinaryTree$Node.class delete mode 100644 out/production/github-repo/DataStructures/Trees/BinaryTree.class delete mode 100644 out/production/github-repo/DataStructures/Trees/GenericTree$1.class delete mode 100644 out/production/github-repo/DataStructures/Trees/GenericTree$Node.class delete mode 100644 out/production/github-repo/DataStructures/Trees/GenericTree.class delete mode 100644 out/production/github-repo/DataStructures/Trees/LevelOrderTraversal$Node.class delete mode 100644 out/production/github-repo/DataStructures/Trees/LevelOrderTraversal.class delete mode 100644 out/production/github-repo/DataStructures/Trees/LevelOrderTraversalQueue$Node.class delete mode 100644 out/production/github-repo/DataStructures/Trees/LevelOrderTraversalQueue.class delete mode 100644 out/production/github-repo/DataStructures/Trees/Node.class delete mode 100644 out/production/github-repo/DataStructures/Trees/PrintTopViewofTree.class delete mode 100644 out/production/github-repo/DataStructures/Trees/QItem.class delete mode 100644 out/production/github-repo/DataStructures/Trees/RedBlackBST$Node.class delete mode 100644 out/production/github-repo/DataStructures/Trees/RedBlackBST.class delete mode 100644 out/production/github-repo/DataStructures/Trees/Tree.class delete mode 100644 out/production/github-repo/DataStructures/Trees/TreeNode.class delete mode 100644 out/production/github-repo/DataStructures/Trees/TreeTraversal.class delete mode 100644 out/production/github-repo/DataStructures/Trees/TrieImp$TrieNode.class delete mode 100644 out/production/github-repo/DataStructures/Trees/TrieImp.class delete mode 100644 out/production/github-repo/DataStructures/Trees/ValidBSTOrNot$Node.class delete mode 100644 out/production/github-repo/DataStructures/Trees/ValidBSTOrNot.class delete mode 100644 out/production/github-repo/DynamicProgramming/CoinChange.class delete mode 100644 out/production/github-repo/DynamicProgramming/Edit_Distance.class delete mode 100644 out/production/github-repo/DynamicProgramming/EggDropping.class delete mode 100644 out/production/github-repo/DynamicProgramming/Fibonacci.class delete mode 100644 out/production/github-repo/DynamicProgramming/Ford_Fulkerson.class delete mode 100644 out/production/github-repo/DynamicProgramming/KadaneAlgorithm.class delete mode 100644 out/production/github-repo/DynamicProgramming/Knapsack.class delete mode 100644 out/production/github-repo/DynamicProgramming/LevenshteinDistance.class delete mode 100644 out/production/github-repo/DynamicProgramming/LongestCommonSubsequence.class delete mode 100644 out/production/github-repo/DynamicProgramming/LongestIncreasingSubsequence.class delete mode 100644 out/production/github-repo/DynamicProgramming/LongestValidParentheses.class delete mode 100644 out/production/github-repo/DynamicProgramming/Matrix.class delete mode 100644 out/production/github-repo/DynamicProgramming/MatrixChainMultiplication.class delete mode 100644 out/production/github-repo/DynamicProgramming/RodCutting.class delete mode 100644 out/production/github-repo/MinimizingLateness/MinimizingLateness$Schedule.class delete mode 100644 out/production/github-repo/MinimizingLateness/MinimizingLateness.class delete mode 100644 out/production/github-repo/MinimizingLateness/data06_lateness.txt delete mode 100644 out/production/github-repo/Misc/MedianOfRunningArray.class delete mode 100644 out/production/github-repo/Misc/PalindromePrime.class delete mode 100644 out/production/github-repo/Misc/heap_sort.class delete mode 100644 out/production/github-repo/NodeStack.class delete mode 100644 out/production/github-repo/Others/Abecedarian.class delete mode 100644 out/production/github-repo/Others/Armstrong.class delete mode 100644 out/production/github-repo/Others/BrianKernighanAlgorithm.class delete mode 100644 out/production/github-repo/Others/CRC32.class delete mode 100644 out/production/github-repo/Others/CRCAlgorithm.class delete mode 100644 out/production/github-repo/Others/CountChar.class delete mode 100644 out/production/github-repo/Others/CountWords.class delete mode 100644 out/production/github-repo/Others/Dijkshtra.class delete mode 100644 out/production/github-repo/Others/Dijkstra.class delete mode 100644 out/production/github-repo/Others/EulersFunction.class delete mode 100644 out/production/github-repo/Others/Factorial.class delete mode 100644 out/production/github-repo/Others/FibToN.class delete mode 100644 out/production/github-repo/Others/FloydTriangle.class delete mode 100644 out/production/github-repo/Others/GCD.class delete mode 100644 out/production/github-repo/Others/Graph$Edge.class delete mode 100644 out/production/github-repo/Others/Graph$Vertex.class delete mode 100644 out/production/github-repo/Others/Graph.class delete mode 100644 out/production/github-repo/Others/GuassLegendre.class delete mode 100644 out/production/github-repo/Others/InsertDeleteInArray.class delete mode 100644 out/production/github-repo/Others/KMP.class delete mode 100644 out/production/github-repo/Others/Krishnamurthy.class delete mode 100644 out/production/github-repo/Others/LinearCongruentialGenerator.class delete mode 100644 out/production/github-repo/Others/LowestBasePalindrome.class delete mode 100644 out/production/github-repo/Others/Palindrome.class delete mode 100644 out/production/github-repo/Others/PasswordGen.class delete mode 100644 out/production/github-repo/Others/PerlinNoise.class delete mode 100644 out/production/github-repo/Others/PowerOfTwoOrNot.class delete mode 100644 out/production/github-repo/Others/Process.class delete mode 100644 out/production/github-repo/Others/QueueUsingTwoStacks.class delete mode 100644 out/production/github-repo/Others/QueueWithStack.class delete mode 100644 out/production/github-repo/Others/RemoveDuplicateFromString.class delete mode 100644 out/production/github-repo/Others/ReturnSubsequence.class delete mode 100644 out/production/github-repo/Others/ReverseStackUsingRecursion.class delete mode 100644 out/production/github-repo/Others/ReverseString.class delete mode 100644 out/production/github-repo/Others/RootPrecision.class delete mode 100644 out/production/github-repo/Others/SJF.class delete mode 100644 out/production/github-repo/Others/Schedule$1.class delete mode 100644 out/production/github-repo/Others/Schedule$2.class delete mode 100644 out/production/github-repo/Others/Schedule.class delete mode 100644 out/production/github-repo/Others/SieveOfEratosthenes.class delete mode 100644 out/production/github-repo/Others/SkylineProblem$Building.class delete mode 100644 out/production/github-repo/Others/SkylineProblem$Skyline.class delete mode 100644 out/production/github-repo/Others/SkylineProblem.class delete mode 100644 out/production/github-repo/Others/StackPostfixNotation.class delete mode 100644 out/production/github-repo/Others/TopKWords$CountWords.class delete mode 100644 out/production/github-repo/Others/TopKWords.class delete mode 100644 out/production/github-repo/Others/TowerOfHanoi.class delete mode 100644 out/production/github-repo/README-ko.md delete mode 100644 out/production/github-repo/README.md delete mode 100644 out/production/github-repo/Searches/BinarySearch.class delete mode 100644 out/production/github-repo/Searches/InterpolationSearch.class delete mode 100644 out/production/github-repo/Searches/IterativeBinarySearch.class delete mode 100644 out/production/github-repo/Searches/IterativeTernarySearch.class delete mode 100644 out/production/github-repo/Searches/LinearSearch.class delete mode 100644 out/production/github-repo/Searches/SaddlebackSearch.class delete mode 100644 out/production/github-repo/Searches/SearchAlgorithm.class delete mode 100644 out/production/github-repo/Searches/TernarySearch.class delete mode 100644 out/production/github-repo/Sorts/BinaryTreeSort$Node.class delete mode 100644 out/production/github-repo/Sorts/BinaryTreeSort$SortVisitor.class delete mode 100644 out/production/github-repo/Sorts/BinaryTreeSort$TreeVisitor.class delete mode 100644 out/production/github-repo/Sorts/BinaryTreeSort.class delete mode 100644 out/production/github-repo/Sorts/BogoSort.class delete mode 100644 out/production/github-repo/Sorts/BubbleSort.class delete mode 100644 out/production/github-repo/Sorts/CocktailShakerSort.class delete mode 100644 out/production/github-repo/Sorts/CombSort.class delete mode 100644 out/production/github-repo/Sorts/CountingSort.class delete mode 100644 out/production/github-repo/Sorts/CycleSort.class delete mode 100644 out/production/github-repo/Sorts/GnomeSort.class delete mode 100644 out/production/github-repo/Sorts/HeapSort$Heap.class delete mode 100644 out/production/github-repo/Sorts/HeapSort.class delete mode 100644 out/production/github-repo/Sorts/InsertionSort.class delete mode 100644 out/production/github-repo/Sorts/MergeSort.class delete mode 100644 out/production/github-repo/Sorts/PancakeSort.class delete mode 100644 out/production/github-repo/Sorts/QuickSort.class delete mode 100644 out/production/github-repo/Sorts/RadixSort.class delete mode 100644 out/production/github-repo/Sorts/SelectionSort.class delete mode 100644 out/production/github-repo/Sorts/ShellSort.class delete mode 100644 out/production/github-repo/Sorts/SortAlgorithm.class delete mode 100644 out/production/github-repo/Sorts/SortUtils.class delete mode 100644 out/production/github-repo/StackArray.class delete mode 100644 out/production/github-repo/StackArrayList.class delete mode 100644 out/production/github-repo/ciphers/AES.class delete mode 100644 out/production/github-repo/ciphers/AESEncryption.class delete mode 100644 out/production/github-repo/ciphers/Caesar.class delete mode 100644 out/production/github-repo/ciphers/ColumnarTranspositionCipher.class delete mode 100644 out/production/github-repo/ciphers/RSA.class delete mode 100644 out/production/github-repo/ciphers/Vigenere.class delete mode 100644 out/production/github-repo/data_structures/Stacks/BalancedBrackets.class delete mode 100644 out/production/github-repo/divideconquer/ClosestPair$Location.class delete mode 100644 out/production/github-repo/divideconquer/ClosestPair.class delete mode 100644 out/production/github-repo/divideconquer/SkylineAlgorithm$Point.class delete mode 100644 out/production/github-repo/divideconquer/SkylineAlgorithm$XComparator.class delete mode 100644 out/production/github-repo/divideconquer/SkylineAlgorithm.class diff --git a/.gitignore b/.gitignore index bf2ba9450292..b1dfd9119628 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,36 @@ -/bin/ -.idea/* -.classpath* -.project* +/gradle/wrapper/gradle-wrapper.properties +##----------Android---------- +# build +*.apk +*.ap_ +*.dex +*.class +bin/ +gen/ +build/ +out/ + +# gradle +.gradle/ +gradle-app.setting +!gradle-wrapper.jar +build/ + +local.properties + +##----------idea---------- *.iml +.idea/ +*.ipr +*.iws + +# Android Studio Navigation editor temp files +.navigation/ + +##----------Other---------- +# osx +*~ +.DS_Store +gradle.properties + +.vscode \ No newline at end of file diff --git a/out/production/github-repo/.gitignore b/out/production/github-repo/.gitignore deleted file mode 100644 index bf2ba9450292..000000000000 --- a/out/production/github-repo/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/bin/ -.idea/* -.classpath* -.project* -*.iml diff --git a/out/production/github-repo/BellmanFord$Edge.class b/out/production/github-repo/BellmanFord$Edge.class deleted file mode 100644 index db5a9fa02abc8d2e4bdca1d283fb1ea3c4f3bab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmY+A%TB^T7=_Q2LIui25EKMOMT0dF7wj}HB$6~Cy3nv6puv(-l5%n5OSvE>E_?tV z%6O)_fW`Um^ZhgP{qy++poOzIVyGlwpsJz+We%0888|j@A|Mu&O)aTcf!O@Toz<@d zQr$bp^Cr^oOoQPy8#k`+&Tj?sjg5|N+vhz2y*(W|0-3JsI}eLV-wB>&-(w}$oeree zlYy)9|Dvw8@X-Bm#1Yf>eJ5ypayD~V&8_q6YJ}^Br25oAAn`O^1OunzDt>nDnwMj_ zlqO81Or%jav4yyagfdCQ4V-R{hisPAsir6WQS-4sb_R2SNJG6TxrRoKzh>}Lb&6P8 zD01it2eMhUn7N?R$k1mQy+K2izHD8rAgm8)R%L~VRb4^13i=AscXl;w(-yB7= diff --git a/out/production/github-repo/BellmanFord.class b/out/production/github-repo/BellmanFord.class deleted file mode 100644 index ff44335db2dbf47abb7a8cc4194de9934fdddeb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3763 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 ayS7|~ifa$AQPCQ~I`$#Te0=|t!2bX`+SVZe diff --git a/out/production/github-repo/Conversions/AnyBaseToAnyBase.class b/out/production/github-repo/Conversions/AnyBaseToAnyBase.class deleted file mode 100644 index 692426540f0ec5935599277c2b393a6e80b06d73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3410 zcmaJ^T~Hg>75*0etPl&n1`8XEu&_xgurW5aDvF9u-?(waqD!`fm+rG=O@ zb<@;Io5XdSw5b~>Z5rGeUh>f70W)>S)0sZCuYKrSrf;3*t#6$^n0|LxU}4h^==w0OqB_3L=LE72ggbgvlWCD9Di=#3GjD=#>Dj%gM47ud4V?5RKCC zHGEf&Zb1 z>Y5e!&zhELcPa2hTP75Edvh5>!LC8mGKLrDXN>%~K9i-UdN7yPvlDvWl=Gs}YtNYl z1&xD@wq)cBCWE$jTgyFq!5GgK2c6t?UNvnps?|Rx;uo+WE(DSp*q-KWz3d&^gnv!kC(z<0C zdHR*j9G9Ylh>h8L`r44b;G9jx85Uc`8>||EThg;;=6o(M4<^s?bgqe(Nv3P^ljf(F z8O=Dh6^`pUbJnz(U)dB_Dl^V(YrCL3A2bX0_B8wT!rYi)GtJuV=r1p9R-m=yR7LZ% zCCT;9>3KbE^Qc{&Dh5b71?4ia4mZ2#PA5sUlL>_~k%m4_pTYhunw;_x+!- z6hs~$eP>eh+?$!0lJ!S5T)>!$pK5py?{CAdSa=mb)9`bApy3y|L+WbyB|g+}7k3mu z!$-KS;bZ(t!QLmEuxHWCW{kXwUu*aTztQk1R^;fG9NkkO9y^T8Ts6`xa*4{N$ad9o z!8YbueV0jQ&h1=U8u~o>ysyZ+Cl=&g;317l9Y=Xf*jtV@P9}6KQ7iB*NF#dfKxgMx zvyAIp-V@!C*{WPkNPpgeygOBAw=C}r_mB=hyYqQ{nH^k_&MhpDT)Ds-jO-3Xr+O2K z7TMKqX3ovF)pgv9Tv{|nuE-f7X6gfB0*Ur1}OK47b!zxkg`?`QSKGPl>5X8Wt|wM ztQRj)?iUv*8^jo8Sd3FPiX`O$F+mv-7b%;>CCY;$MR`a}CWnrA_OD~l@B@TW_fZ@7 zdSbqiukGOqYU{jhA>YY$>|MjYi#L7B>c&4?*H9Pt)%hOA{GON^QbYa~9H{e!)RVD5 zoi`M4jO*{h=lSfWN{7FDKVx;g4zrH3qG0v@#sYmwfd4^=|Ajt0;``2vekFp0(uM)0 zo#Rs&++xXBWMUsH?W4smoW~0Y$Z|N0;D#JY9xB{-8VL-rz+WPT7di4U#wd3hVg|!B zmA&g~MvA=Qt{eCYe#sCOqt5?Jq{@F#_Xw4oDoVq@$;xv1K6DA8e8PR10q%IZs`tlT z9EeN93gWFHbq!$&py>V-d-<5W2O)xTo|%q$S0RVTGBIy>|6IsB-Q|Gvr|^du2sbQ< z;0huS(8xL*;B+04H8j=n=4e{O!MJ}FjgJ?_>FM{^aOm-BxFOrMy0Kp8{~c3vTe*vH zfj=Dh`+*nJG^*L$^~fL!gH1QbQe0yhBxp;7Xc*`{Uu`v4Ohd6>(4xX29rPV0_B-QXqx lr%CA`pR#)oZ>d-rSLNSSDO)NHYKbEdt(TYeCB`j7>c76j`qKaa diff --git a/out/production/github-repo/Conversions/AnyBaseToDecimal.class b/out/production/github-repo/Conversions/AnyBaseToDecimal.class deleted file mode 100644 index cf44dd28cfba812eb10a111b33fdfd79eeb75787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1970 zcmaJ?T~`}b6x}zOWWqRn1yVjkQ>`|nEvZ(iKuLwrDjG^H6s1+mB$*@w$xKWp*uMKO zeCqPSmp;@!1eUDj4{-VB5Ac8ZAnrR!11(w3T5~_nId|WE_C0szkAHvr9l(cpqG19l z6}MD;(t{-|Yw#nj!G{&u+}3ahpGwDPDpoaUNQLmZ?7xsrCWJNF-_@{=dm((OVI246 z!VL|Zcp#fCY5OXKujOQ0#X}X31cEm$+j3I^{`mBkfRc9dra*tjvdz1VO4h7x8rd=} z;f#|r%3DUwlJmAvaZ6TRU@DV#?0vIVw;a2kT(X}o8+CKjSut}~#V9WjwPIMdz`6LN z%&xI-B+G_fOm4U}%PuZ>yBf73afZ6M1$^0>z-VisczjvVqTOdSOjb(FwlM&1-} zxnY$luRx!N7_;n{)H0@H7kjcP3j|_TeV&$zgtK)x;5iJoPd&zb8)nQYFd&I*I=)Ag zLg=WWuERw`$H$oS@EK|4W36h_u@4G3`F{n)!#kn7p4~NbE^Ft+)H&(b0$b(wy6I`% zHFvR?d7LwY+r@A3Y$&zd}gMzw0%d4a3lmY=EO_5pL@WV}m}pSVM=^Gdpw z#uVbz&b$a!$)hYK?6xx%3FOL-yoW(vl%iW=CUKchFvr`l#FP{=;5|^il36cEpe~da zaDgAN34SdB1>}t=+bPbH>;?Nk;sD}T4tzMzHs~395#v~I1rXwG&U)|;E;33k{u2Sh z0p%n3wvXW7ehK9Ofdd3Hmzz-6WOIm6>Lq%Pplu)Et+3uiZ?uWNa6boE_%<=n#Nerj zaNE&}h#q376Ggn?6OL0*xpzOp7{mzM^BCqgK7t}=dl>b&CtCdQF5Y8o7!Pp?app6E z2be~}%XSTyafN@3tBjE1%rHk@JC0j2{du; z5F-=M5DbsLh;|GSrL>cZC=;bw<;TGBFUNl|k+B!V@q79v_`?Ae4Ny~+ifUvyOpX`G z?;@F9C$~A;Zjo7xktuTMC#Uy04{*MM4;Uez6^}g&g|XM^^$~B8KSi05hIxF%k%C!9 zM&LgtNKnNMAs=A)A67+={Ft_J=|H>m%-$Ffx^W1KB`J{c5ItY_=Yz6Hp)6LVDu`M@sXw^>AS6OGsVPdVsWBSkwybnypcSU80{Tj{?gkR8U)6s> zJ#P3NfwA&R6mEI#jvs}c;-hdoju;lWt?Bw9`-L~XL7h5hv%Se~><7h4-3>#p&Bdt>TcV_r8pAq+XmVuTtE-aD!Ak7bKd!p1M5@Fn z%@9aeqHeqHJ@M5^ga4GyDRCCk7!VjvgdYE##GHj9ZYaV{3%79FqQiG291C}GPhj+< z>jg4LCqJ)kdiD4}sIuLOJxWd~gY4dsepD=lt!_+*Jh#a+bA=Nd$~qZ(pW{-bz*(9{wWDHg_;#OWU;d9!1(lCQXh)0>|7v{J96ymiv%O zs0Jl;IT5Aq8DM6?CVGytrzp2TWS(*#Q1CKF@tEDG7{e=^#yjNDz*)2sHt?c%2(sjX zyFQRR#xpZ;$B diff --git a/out/production/github-repo/Conversions/BinaryToDecimal.class b/out/production/github-repo/Conversions/BinaryToDecimal.class deleted file mode 100644 index f223193910bf55c93c607542ac1c48b13f8ca516..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1294 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 diff --git a/out/production/github-repo/Conversions/DecimalToBinary.class b/out/production/github-repo/Conversions/DecimalToBinary.class deleted file mode 100644 index 40f3e38bbe40f09b95dc88d65313bddc88048853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1766 zcmb_c+j84f6kW%XBU^}Eob-|#HM9XIp;6kVx7ZDB;uZ`}Tk14znlgjzh(tw}JhI#i z4?Ho$8}EDp&-B5`&?z6lZ}hDnL0L!g)P{PPGJ|Kdb+pgfYp=EU_W9$_-+l+Mg!?+u zSk!R@r=&Tp;Y^zDvpQ6qldJP7T+nb)$1?KLSs1u{f|2~`xP%oApXeCEVhWe#`-(KH z(yYmdVhUF^ToV{5IGz)(2q?MPO#yYy-?0UT%8qAWZ`G@IuwhkQdNO6dX1SYI;K=We zQw{f=roeQ0&G#PKLDTWQrdhOWPTg`h{8h)Zf+u-`)-A^qIGo!qKd>HJrfYe-W+e<9 zZ#N$$wSry3jP}`PR83-gA+asDn@2$G@G0>jw5al_2_zk_(FzF_Cu)U`YgTHO=h*>y zyjuya+PCXgBcjiO3XD{p@R8HBdx7HAm_m`-hwbsldQdj2k#E%}IwZp zTBu>&z;)a(a1&o@xMiS%4S^%wb8&H3TaLS92SiB6y?703;5Ig;xntliwhY|Ewt%@B z7vt@zO?K<{M&tiRyz-r()YjIWcv#+!Fz>t>a*^k4L$Nc<{aNq{JbzZl^J-QqI zBhFr~Sez{~t<`AQ9*6T}pR}DEJxn@HVxFm7>EE_fp&z%ELz#Q?pd=azc4dY8rQSrA z7fCw0B2-$=Fa##JGWiyKC+GGde&r&8N!o$Psbh+3BR+s>yvMIJju9*lzQ}JGtQ{b6 z0Hqr~2!-wp?I@wfdSEoXj}Iak{)IX)FL@?O-&aaOx%3R`)>9<+F|e#Yg_cPv&yj9J zzca43@lJl?XB?YIHdZF5$6!qTkPtr}VDP8CuL~1NH~-747YuoZp{;!kXGYq{OtvxF z##kGNBsnG0Hpg2Mq@+^OFf~n6(Q#_}h}7muuE4J~%-}vgjEFCh+&oKmf zA%Shi%us}iE#$aL5N{o`n4@Q&Cq|HX#ek#`><~T%6Q$*?@iw{-_tC9>-$%Fl-G9=( kKyD^^E>ia?k~>WeXUKMmy3bPgdFsCK|LYc5h)QPu1>1FkTL1t6 diff --git a/out/production/github-repo/Conversions/DecimalToHexaDecimal.class b/out/production/github-repo/Conversions/DecimalToHexaDecimal.class deleted file mode 100644 index ea3454bb513eabfffca343deed8545d28a3aa897..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1742 zcmah~ZBrXn6n-`d*-co;CA?T@s1dadPy#Kqr3I=GN{I%jg`g4NmT*ZHlU*j+)WQcp z`7itd`l+LJ2At~j2lzw$5zc6R?h;-q%=lr?z31F>&V8P9&Q1RK=fz6^6Zk5ME==mU ztK(i20Zb_|9YGK?YIk3W_o8?ovk}Z8V_-gt2UrNkCtkda;vp8Jbj>QSNdq6K^+N+W z9ZMRz>h``|+0Hs%)>*VF+jD!KtZUG+8rm|hQ}-;#Tem6=86*-z!y8Vcx+!Zb+jF*8 z&pNZmG3q#^!6-L#C_SbjQkGBW?Gk-81U51n!qc{6d-pX2Q-kXoLK$~UYKY}*M=txB z*R0J7E%BUNv?}XX%~pET81l+C6Ak2u?1`+^Z2}yfmqoj3Ro2`^`P6DEQ$(^Qi@r@m zcPcxW+p(TlqZP|3jjnn%+bPjS+u>&u3SBis33aYvSGHtLL+?5N<`Ki%Rz0iu^^&#g zqheP`qiWfXhMv^Mxwt8xrd2Buc;^MjBww*NYgTQK*qeak=d+N|bg|N`U3ArL)QWP! zR+Z{)a(=An@F-{|D}GyGWmaXR2h~{tSHfsD<&S{BNLCYs$vb#kG4dRr-%I1zNdMr7c$^nYhrI(XV$txf2Gi9qb%j1?*HlxlB&pqllM?H1n z6r9O@?AhwMIrke`%UE?5_^iWT-IG;LjN9NH-A8S*-O)#!D38(7s&YU&eYCHeS)g6z zRNEg(E|(dUQNMgfPf%yy{Ya>3V&q%YM!9NSTZRsy{p_b2pbY!QAl~NQJaWK0c$Zp4 zO#v+`_!(h@xK93tKtULX2<3)_aex+~&m_J_qEE!Wy+53Ij&T3P0rWn7f9kuys~=wd zIeY-RMSfyz5bC}G7?dWWXoEmINyU)h?kYMkM12gMK9(Wgm!O^^wIFT%800RXFwn1u zYZPe=<2n(J_!$F#qf+u`{Hv%jQ7>9qcELt;^Y%2+K4c42O%)H`jT^YhwG}fy zdQK>LjPrjYz=(0OpCC#Dw@%u%@5cd~Lj2xR2#T?MAtY|(3oYViz7Q7U`GPJc@&!ZO z$`?df+@{pU9ZEw?QbxpG%BYy7Y!!2qrpQpXiFwL)@qjWW7V^I!toZN;n(}BCbZWP$ H1#stIeoS`- diff --git a/out/production/github-repo/Conversions/DecimalToOctal.class b/out/production/github-repo/Conversions/DecimalToOctal.class deleted file mode 100644 index b60fca823a2388a3d2de0661e432e2c208f6812c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1290 zcmaJ=%Tg0T6g{0}G9ioz2@xNlh=>7|_>2k&DiMeVK?5ko#%5??bTSi@3F_V|ckcZH z*RlwfRQUmZgWsZ_4pf1PPF3IT`#SgB+dbcYeEACC3ZBG~!k~#v6E5Il93foNr^_*1 ziQ_7=+Hx&=tCzw2;<%0*CWhj$Fc`zI-bb{!sl}+y7}FWIOx!kcM<6=lcup`X5Ki|m z2t>yH6(w-6;CSjmt+cEvb8^|GB~kEg=`P5MqxBtQBv^B*0-c3%-&kdG-*BH`Jw~4%kd$@0*fN2vCEX-h5pySVu@6;T3 zMO9d*F`jPqvgWKyS9!sZg@<^gMbW|><}EB}xW}5*(SHw^Ty|^BEI(Iv@SCalrW&Xc z2dM8LwLL(`&*Z&wE#M_6S>gx}r}uT}+X?$M0`4Zx^4@k6la1QM+hZ0m$~uTyJFtJ= zxaq0aL0(7j)$!(Ab~~7s!5YnF{}o}NOg9Zjj|+o*W=8O`t4o@NcY+|iFezcXtK*5W1(BwFe?m@?{Ut)s1u1aXp@ zT^O3(C2|7V(2N9SlD2koN}-#L^|G}AvKymyl8hz!DtdJ%Q)D|p{RAT;)Sq!IJ=~kI zgj38EjGMw~dP7_j=%Wmy1y68>Cxf--k>)9ierBZ*`botkrirtHa};2Tz&ScYIR6X8 CAQ=t- diff --git a/out/production/github-repo/Conversions/HexToOct.class b/out/production/github-repo/Conversions/HexToOct.class deleted file mode 100644 index 08a385eb909a6b7a5dca22569c6c0adc0685640b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1843 zcmaJ?OHBOIc4{%S$Y8yVpeTCb+Sgi%|K*2g53e86f`tY$38!|Q( zLyA;*Y*1tBHp`-HSarLguNb1R?I-mb6~$2zLtH{=YgM#V z+jkZgb4$xBOislY_)^7J*ioTjS49EiGKwm6d@Z5FE$y3uWbCOZ!4Q!9DxQGl=wCJ+ z-A*v1U@zK|Xm&X;9hpo%e!OXxn^wZ*zoF6wMUN9(X*Cfw9#5-Og; z7NVxY5ioUF5;`xM4`z7^yuQ1y7o4|L%?aTUIo6|URkw3mjpgc0rq1_^Z7u8Oo>Owi znEehEN}9buJkfuSmTZ_s{cxRix_laQO>+-a#c24GOG~Mxx8r|Xb94@hM~q3d8Pu>c zt7f(CkejYm*vg*POrJ4`0rFaP5;#5hkOO~uFyivyu{YGDQ58=AaaD*JH1$JA+)bva zu_$Iy!pKF}>RgRlJtO59OY%SFpktj>UUu1(O$_jZ((itQd>{bglvlaW@GbG}Pai@0 zjSCO1Q3hP4f&|xU(}580aMvcriW+hFCA|ZDPli4DbOYY|-g$2}&Xw;+B+~H){L{YS zsIP&*v_BMzm7@Ng`Db3~=YRf;{mNrrH`H}P0%7hV2%?jpz$j%G*>*Ej4~DrPC;J4w zvJBUc5QcCaK3apgfh7E-ID`~eUiwTT%`*ah4DWHp%Szh_tsab0-ww}fs4_B=^fxnU z6E~!l&rgK%(PhNPJo`EpXTffDBI6*=?LnK?>XATmm9d!%gTrH!^h~Dj~yeNrTzsX+ehdOM;qv3 zf4Up!X`uJC?^huc?KTTK!zRqK>{&KxfpuEMJeFPRQ_YCDML*DE5O>@%U!&)YOMQ^q TS(m!X1m}2C3|*Gq9=!iAqv3q^ diff --git a/out/production/github-repo/Conversions/HexaDecimalToBinary.class b/out/production/github-repo/Conversions/HexaDecimalToBinary.class deleted file mode 100644 index ad102cb2e26ed33ba35b5eb3945cd48c6541d3d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1724 zcmah~YjYD-7=BJJyPI@d(rp8!7HC0f+R!VtT1t_o6$qv+y0scn=_Wm-TQ<9ybi=?m z$KjXo#jom&g^`gT;NS3*{sPBw#OEZbOi5>)$-HOJdwZVuve{q%`S~S)IRr_Z#q|Vw zu$)8=D@v>;@F8yKxS528>q^`*kWbR*wz_+TDT6qxy; ztna%7n7Sn&IjgelRvm9M$hp2#f4nH5mzyr3Ksr;{a~?WVp5s@h?6B_ol|==u`Hd=L z6;y|vR>n82TB(^*pr;&EYn}|{s#|eG(ztkB;^T4&m-(261+pu4=#(FTj&WkGyYdlp)1C}Ud#&DtIugvET&6-rz zo4A0tO`OB9j(aAyK}`u|9Xlo@?hBlHvq!mx>+Q(8i3)bfa(HRj#5871xY*P2z=Vga zi7Hszx&Ij#*JWBD^(F$&5ls8>ekeJ&XwXnA z*z$IRsXJW1ka?t2<&tVnttR~)fr(?VJ0aRFXP^-Vhh+LQosRVAYZiMHk(*Le_#S7X zdD5?hYI2#eJVy8upXCe6mqG0S&k^1tIFA^gxf+!3P_sat;Mq0)3}QTG{DjC4O~;Fr zNg9DDL*f|ali6}b24lPlHJ5gpZ|M`GZZexnJx6qD=s9BRKO+7DTJah5>;VibK`}mY zfF#cYbREEajbt^W6VTB`lx|FrzCs*tWo;ueKQ7V6vT2=USrK}l#}su@YPqd#KHt!y z{+~vP+`TlEGM?g0n~QaV_=*rY6rM!HcdvfSeoxmZRLLzOy`-V~*2^CCH;D|>9w*>z z6O@Vnqcn=kO-gf&P9X9(;^HrcCh#ui+iZSk6*|q;RM#&^6{A+KU5r_lU5s0Oc2TqX z?V@g_?V@3ww2LXtIz_2l1C)k!nlfPxQYNjp?7|E5u%Sb1+4YH+^ReiBJRMKRo+3Sw zj?Z4vE}hm6aOO#zMg5_g+p1}hp95f!-;5#L=2mQz-hG}PcjBZEOO`(ev4G5$Sc^;bX;xzmM8_6=uZsL_ZmGS_~2hN0%S)3 diff --git a/out/production/github-repo/Conversions/HexaDecimalToDecimal.class b/out/production/github-repo/Conversions/HexaDecimalToDecimal.class deleted file mode 100644 index 84bcf2666c67585f75ad424fe805a626166bcc94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1560 zcmah}-Bue_6#h;oFkv#3G=Tzbkbpl;LTR9-&_ba?0E$;;Qj{SIIb(!en0LbzpM z9t%p`R^pBli#nG2a2Lx4bgU@tUI-r=SjC#MWDQ)xx{eJ40}5hOogXQ2Ux_W{__2-$ zI&uQNcWuY^Rs^(UYEK}TtrexfK+bmLcC&gU-CgUbLQ6DPD_E61%eB?LV+?v_yCE={ z%hsG@={D?|)5zSHC)TdChW3?*~VtYa%vv7AyS@42>9T1ssR zh$4ULv`MKfPgLeJj-*|*OSZ?{+Obs;=+Apr;hTq6-6y8wAuFj`wj*#U`Q&W8U#aDm z7#}<5S-@as>tM^NH$7g8vT#sqdj2KYC|HDzwLzPnUCHEWaiq%{jeM=?7UZU_IyQP< zBd)7jOpIWZ7&EgsZqD7BU$}i|c4l=gyS}lxN$MuHv18&9J~8nr@+NliSm2`HgzkJg z_Dp<+&lTFfi7)U(;L3*MNjIS~le8K^qCLgLVnWB4CceT`69)=^90`Hpw_Cf`v@1pF zl3XXwb`qT#E+$MIg5(czWTK!jig+rJ_`l%`MBb#?IeI1wY-*ROJ$-?&S9@HqOE+sZ z*uKGJ>g?b+_=$ZUo-Fd!kc(N)GPT>t6wK8-WI=uC=~<1GC@owvC8WH#_tKAMYAIpvF&<@+w~gNYdVqz-yQ~QbPPe-hD`8s>A+!0tD%@@B;e& zbA(ROxBVPOG~9wY-9mqE>Q`J?rsV|&_D>OsUTh&6Zz0ygU<*TUnsu4&0(%-}Q(~-Z rgj~nSYo0t*1Jms^xW;;v-#D)OOvmV-@tKDCHiKCb61YL10B-&T_<37{ diff --git a/out/production/github-repo/Conversions/OctalToDecimal.class b/out/production/github-repo/Conversions/OctalToDecimal.class deleted file mode 100644 index 5ffc7dee2518c9215ead220e23029b23acb37342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1695 zcmZ`)?Q+vb6g_Llk)tTY<%j3;I3o4Ez2ttvt_xyz+C=G^|`fYl|0LDmg-UH`pvS+X@yOq zOrNqXkm%UliUYfm>y_%Z<@-)ZT;28C-AJXA{D!buTe6A$z+>eS+GU>F5_82g@DqNP!!HJYm3Y5NWD7YB zy9R7D3^;gdpowP$J5Fg#qdGZwl3HwcC#05LiAW=~0t*~Rm2n)4oExzNKEOGy#$XaG z4(<_bgtptSk=S{OdGHvYLf_ zb}7B-)-1a;KfXo+c70z!}s8%BTe7BYgN*l z1;e(@8atpk1)iy`mI!E@PQ6wzS1sAyf%c|dmrc@f0YhY_V;i69_zXJ&p~)LJZ%s|# zp1Cu-xRhI7S!FSk0$`Lk`?^%ODn+xV<8wTa%NIJn#6y8z4|tZKim!A$f|qbtM*(cl z;EL^@2Sh>4#Z{O(zD7w$84q>DaY;uK69N~vh&?m-xcP0}Iy5+GH*Ouw z#dTOH35@=~Tv+01Asf4Urfl39Q&Te>U&XXbZrPJA)eC zF?i!Z3QlpPqD~#}^L06OjCg&b+Zi);Se2mvc+uoLZktCuRy|n7#wC6i2Km(i{1g!d z$90%bY2K+TbR>@lmxJ!GO(%|I82_bS7VY=NY<>@mBsBdcvUwdM6qPucuBB$;M95H|M9lRaLm3 zX) z84rE{KZzf}v*Wul#4wH?vhV($*?snTH~a19m#+YxXgLXtJ5Vf>m*DgU%Zhzt#sh4dc&O`+ja}?9Z2m7jL*uW!3>*L6LZPw^H@jglXFN#7(K*9<%iS+E_ow6Q zv$Cyu&kSp=UU~WTUCLW4N|pB9gVCuv688)G%nI-(dv1s GKAK_FJMTDIZ!TvK3a)LQIc+lJlB>sy9vG(6KS z3@IzNXSS#+Gml)fY|AUNP$pX!kaVZXj1yJMHt+U2o2I*AY__SHtU3*&T{m3IzYmm> zw`CDyx~e<&uIY9y$L{9uIUU2^a1M(IsP2(QAek8gQuAEPZWXc>0ny-Jr*os{x~A>1 zI2FFZ;(yr(5Ks_wHHahJ9oO6?_O9=(*yjE9;2y7eM&mOQ72s5Go1PuRvIV9yA3dEX zXxwmHY-Q>hW`St2(H_vG)|{T(FmGEvDO01pUi1-an8ph%so`y`XsFKJHZLa4KC3#U8PJV%Mnc-CplU#qTV&yJ#+0-ftie+ z9U}S2huanpLJ!xN1zINao*&+cKCZ%WhJlK6uxzjHml=iqMb|Sq|FF|zvSh!s<>c47 zTpoKejSfrqQID#LddGKab2I$r>NvxfGr<>{i|9{{@+5B|Bq8z4$?`cvO`cLvMsklJ zehXYq@hSI}IL)&*IH!>2E#?oC8U~AHCRC{VE-_aOm%`=TK0;D+QA$cb!pSA2eS{Yy zsl?n*Sa<*_^%#-gA&2k;%08mAzhLHR?H;7rGS$h*sQ03rlxKg&SUM?xQrbh5vRO(- zir-5Idj~(Hew-~ z@?+-!R)8*@)n4T%gtG<11u%3bO{7 zMLA$-L_tpQ2mFhYxGpH>h4c@ir1KTL+NTqD7#?EK_+;!c)Zzn-rS_p64`rN5!7s6l ztNhR|1#qYP5p3ilZ89_ZFt}ly?BR^h20p;ppNN0>2;&bS`AJ29U5S-O&VioL7ym|0!5&QyQ;6Xg}3t|klC8Us~ew+tCz>gBQ-rZqm7?@f1 z{dv9sY%mrO0wY3NG_BX>SXo1mTUD-V^-zTA!D-us%9Upm@6AmhCCv9Ksv`PU$JU#W zbNolkHDPjc&iI{GA(%kOx-+>|uFNmj+UQ7_{b^?l5PJMpH+=@!B^aQ*B7igeqmZ+Z_*(N zsyeO{)D&imiBU<8sKC+^JDU$X%hw%OFLc(IwYO+3H(Bq_dds$&OP1%zzH7`#VdSCi z_`$6}dsfi$6iy_<#N$}9`PlLN97l~*Mqt@bZ(Hqd(|w*^Z#^R=bPHo{7&}}n)t^|;tV+{zS1WgxpJ+QE zwxOeIBLx1#o&7Usg@Ixzw!2;J-hkQ7=W3fxk);zj%}Q?&@xBytjaJ9A^-V{H+0UCf zCFPjdjS&;07&kG9oeJX{Mc#M)PP^Um0=;slEwgo6?v3ZRZi`~#7zzqwVR#6;&}ww- zwQkX|xEd~-xPq$&t|=6fo{;$T6oxjch?pdO8%Vtd6%Hh&i=NM%W!u{K3#X>}?96O^ z3+DbgzFvkI$x!=mhONrsWf)EHV~lSh6TE6j@y9_>-^KS<3d2J~G9v03+D5U5w!Pe~ zQl=^M<%thaJ99tZG?w-1P5@4QnbT_N)bNpJ0h;o zH%wnt#!-TE;9LcKky24^FTY3n2aL>XWYTYF$b`^+p>rvOl&%=qg&d>4VG*F?{BJ{Q z;EH5CfpM;aaGl6UJE4?bbrcj{4JQSwKzVB`AN1W(jK?ojE+si+Z9+DT4P&!Gsooo@WsSDVJ!Wtwt4D>OM&#k^gRO# zuWZ|N_9oJGO;=!RurED1^qiTY0B-BK9Q#96g%eUw4CtMw>oYdnvuw-j3#4lGBWB$5 zGZqJyZ63@{My7KpM-yr&52l8k97)Gg>(H6@K3Eh~ng90rWAI(aV~VZCis|gCjM`~i zU?U+&ATJHWblqyF-4)o62m0klyIqgERNBr3xU0bLmVpzyp4@Xb`l1Nd+g*}tq2x0{ zw@pHSDIrm=K(iNKv!~Ja^rJ2oFr3aD!+dF}>yYD}YpQ!)z$z{mpd(j630HJ91vZmX z3zYtS4+86PJ9tQIG2gJwN0;SG)c9k5@Fn@HJl7O;zAiFKQ{w0;GvXPopv^RXApMn- z6s~g2`py!rab5@laGe;SGUq9REdFmWM&Vx5YP1TMT8yg%0U?f|SjSCni-L35z-9>E zr7#878#`~mL;J$17Ev0Ybpn-A2IH1$MJb0Z++GM0{|{mh3EIY;5Y(a#I`=J3&spbu pJ=}a3_ZDo9(J;4})d%NU#eKi@2e?FAW)m`K@QCtQQx%tTe*yeuC~p7& diff --git a/out/production/github-repo/DataStructures/Bags/Bag.class b/out/production/github-repo/DataStructures/Bags/Bag.class deleted file mode 100644 index 3e1a024c14c74bd0080a3b96790a308c6fe0c0c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3086 zcmai0TUQfT6#h;wOo#(2A}FH7Hf=)?BWP_ah!@lr8_*U6QQJC%F^(pam`qfZ-tYHk zU;9vBd}zCBuw|{TzICnskiPW~bhWkLnVEzcA$GAimwoo-JKx^>On(3O=U)Kq!`D&7 zaHbipn3ltgg0oSCFe`_1ayTEQ_`*88hS%lrhSa~PK#M}foPvxzJ`=&bob?DUH6x45 z3XCY)rTmJVugb%mT;=6pMo~af!8Iu^$xS%|OF>1!bpS zX6Yr(DwG656NP!5(o06EY#q<(dEK-GcBGGKmNsdXDjBO%(#xr%TGk%oQhi9EdD6(5 znmiNeeXR2ElEmOrUAlFb!)&AeiW#=E$1ViY;6>pp*s9_3&omkypfR~s$!In=Zn^Y4e*>m%cP}cu8wO( z7Xo4P7C~)(USM+~eMP&jrE;2?O`V#%qGzljc_~G&G1|6TK_F7d&D+G2&^k>_Mxwrv zP9m9tX=#SZ`>q*>*dj(fq3uqfie=F5e>CcmS>yRup`}bT2`RHVFp*n8X00=35*ZBWq81& z;$~`Owa6o}No3{uuNR#xR7x5Bgds~b!uHrL3qZv#^s9Ip&!|YEPoVp8eI&IPRNTUC z6^nRN#ZkP-Jg9gJ`&GP+cT~KKBLeY8PQ0xwoxLZ}*+7>)H=yDL9N=P5!TTycz=u>{ zDO)E2M=M5dUgyKmDmyh+xD+Gfv4b%cAK_zpspsYD6BVE0GXqpbS8hrrbaOvx&i$7K+V8c*nFuHjcOr2VAokx%VhL&IXY4f zKtnu34XJXV@U8JCa-nSLdA3}k!r+@7YK%haG+WqWvFKW!@S3z@Q8)Pn_IsbeTAzFP z^pzJ4yAxwxZXZ34SOrHU;J>iznh%6sKYl=@t0>{+`11JPO4rK%&?L_FPGcv(mND=t zLx6v5SgsTNhzHQifA%id3T5nPj=Q;=phTaNM?M>xv}VMee$JK!D936JOSD$i2l0OmVFHl(|6i7d!@ zw*)+%Tt;YCEFmn}p`h;pnr7r;*8?as$ytUBUG$OGg(h03h;$D&(tj68dXgmdGm<1P z=6H9pFb;+=%nO8>r-RH|z$SD>OX731M(SEJqfTxQQO1YK#r_RviM=OTMPz)}PiPjn zgElUr0)17iyYukR&^-_R9SjSG4P%7aJ;eMT#&(Q)fcDgZ_SAuP@m(MF0hL+~P^skr zm0HKBCDYc7z~2ZfINs^vK0)04IJmgS$hlo4%TQ;NlHMh>d`CNPDo=V+*|E+StbR57@Mfb{=kS>!_lWTy3dhYZYBpY~yBy z%ua{QU(r25n|>bOefS4geWHr(RqT*U>Ak-0an`b{oRS}8{{SW;D3bGQ{KZ>hkyz}Q z3MOzJXK({&v49M}qXpdN-(o!<6Kvs^k+ze(h;izJek`0~k%@XII+D|rNbXw^_y_#W o@Cxbw3*EGJIC>S6JPlxq!7Ek;DMhUcqJoN2K*4g65>OK_r^5k8hG{dMG4d<^0M8h$ z#0MXJF#1ErsOz*S;Dez__sqVnz4qSc%$J`ZKLO}R)v;;Ff{g0><-PxV)@d18J{K z$wIjY1H+uRfSJvQzOBX`-D~syVP4erEVLqSp&2a(?pU~s5rKwT-|+&+TZvbuK4>6q zVH9Hq#x2~#eFGB~Ch>q(EMzccVHz_QW;N17%n5Y-zZDG@7wA9G&i@%7>Ft8gq3Dh#>&tA)`e{&pZ*SZm$B>&LIfilAPR^z@ccQ$lPL?b|S0P`iz~P1H`&Q$qdL=C5yCgiGQQ zKS7#^CNzLL%BQHoGuob$%nK5c=!VTm#aM^Y%lxXXU=XVq!WwSFEfbFuqaOxN;|%Gw up$lix$qJ;o(@YoN8xgJffer)bcn!M0!_d=7&=EloPVi|mrGZ6`!~6{~JVHbO diff --git a/out/production/github-repo/DataStructures/Buffers/CircularBuffer$TestWriteWorker.class b/out/production/github-repo/DataStructures/Buffers/CircularBuffer$TestWriteWorker.class deleted file mode 100644 index b9944a81af293a18fc62f2478825b5aec815db56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1402 zcma)6-BJ@t6#hCu2F77kK-^VVQE(;EHK-seE~4=-8c-o(?cPwGNs|l=lkB8N(Kpyv z@CEi}Z>SQaw8{tA*VqT}4RpWmWCg9gAXVw^^Y@)|`g}cqe|q-;z&M_|7{FLJF7%)u z7ad%3(TOo5jGJY`#brzy-4%1X>f#!vTpF&s_yyBOywOD<^K*?fFYrh=xKrM=pJJ-ivpebdPNEBF9wmCOV-LNF3EC8 zO<%F@%WzS~fsxzFPF)L{^e(BUeijE>J*&s7rcAF8MJmpRve{I0nA}?hBj4b#i89uci~K}&yiRyJ(? zoRNULP)}lC-3?5W{a@eWc{3>w$B+>ik!8Q4maDa3Wi?!j>W$yyrcR!}SbzCy?83!M z;}e%BuUz#oh{FO0?1XoX(8Krm!NU<8b#TYSUEK3<9|aE&@X$fg!z|`J{Ddx0m~0nU;u;$}7q@^sRPw5tif%RaDhA zd;JB{H&W}G#gRXwg$xyGpM$#DmN~0k5T#nIWJO?Kurniz^P9lwJ#`{*@P#2;scz`d zBD~3*&k&;PWuQXBcQr$$8b$M7T9Fn7}I2$ylaDwX~%I!|ZtoeJsJWathsC?;%Zs z4xm8mL)z!)QDmxF+Mn3;rmd5V&f=^sWVl_(IYxIAYstaSrpfb^Q^;YMyGzf0elSnL F{TE#yKd%4) diff --git a/out/production/github-repo/DataStructures/Buffers/CircularBuffer.class b/out/production/github-repo/DataStructures/Buffers/CircularBuffer.class deleted file mode 100644 index 06e219fd6056a332303b285f2d09385205002f13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2332 zcma)8O>@&$6g`rah{%fb#b;bXp%5GgFa?LUBv69+sA)oIVn_{bgCZ-Ah$E-6M3{Dl zcHey$ELe2YO&9G86%5YQZL4<2@?Ei8PAynOCcN9Kr>z3;&*qgccQYaShdezB@Ld&m`l%Y2)v&Z%_ONsj#tO|IcHtJY}xfJs~|00|mxHJ@jqonk%gtdX?r=63xUo)=V77sEG_l6^!jz6>{{1 zi7{kNOyHb?BOQ3fTFt3iwQ0W^u2WTQR3?r|rgw1EL=Ef2)H%~`gNgU?fkgLA)Uj@2 zLv|k9k#-dHcOu3lDVW&N(W9@ua)RJX87P?i&LhmXUuqK#;Wj{M;vv>vfi}1Nz_BT_ zkq%mU*?d3T2%JirF9nH=XeB{WN6(b9NR6((ievkZusiKluFG%Hd5W_I|-Nx*%X zm-ICsdY-(%ky5)Ff#ownSEJ@Q8-n159O!Yk5#ul~!b800x}ZvP`7|J%=B$dgqM7oF zW(tOLH+Ti%1jm!Kp7KIfIlq@}LdhncL6sqq-GWw5G|}}8-Pv>#`V%C#u&dle&)?bf zGZ@+QA6!fR!lMbC;y8*Pj=c=m!+!%QBr(kK2>O_I0679Zhat|u-Z&*r<6T-zjx#*3 z;4Gheq5Q`Ks*b!uQx%1`u+B1-U`?gdTIKN*=-Q9a5l9q(l)7f8PY)DKsDl3jT{8CK49aC?`RB#@Xtw7&Jod7138Aj@U4)ZBU zW^b8RGRuLart(eR-|=$)Vzx}DcAun=|J*KRm~8?^2;wkIa(I}{9b9P+s7yj*GNE#HALn?@3aEtNFx*7BEi64>-mt0;UpJ`gXiF5TQ~9m8xBM zt3&Y!bjBEu$mwVH5q5Bt-8;?9XV@sg_I8}7O;aAzxJ(o(cTAzcSx}PL7dS&L;|i|Q zCu01QvGDu?Nx5^;fY5Wg?+3mdm diff --git a/out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph$Vertex.class b/out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph$Vertex.class deleted file mode 100644 index 6e2b80ef7b13e0d0423bb04efa00ede9cb08f50e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1956 zcma)7T~k|C6kR6?34}|VVu*#J#+tVI074at5sG5^VcI~|P-uNSggbCCB+ShX)B5b6 z&_`eT!izJ7PVJ2P+^4?#PdXjz+V|chjnmF#GIyVI_Sqk6?S0P4^MC*N6Tlqq4nD}=VSqZJb6J$N{!bru@)gM>&fy+FC8w!Q~L-rt*xN+OuZycKcM>(E;M`r|z z#jn(+Nkz2MXxUZsh9&J8_RiUi+yDa;IA>rIHx=GSfioC2@C`~NW8fBU z8z^Hnf;EMFzh~GlRRnhoe2ec4e2iMeB6GY}l4A)b0bq z_oM2*CgwU1!q}TF@^fU^mLLz^J9Y(O)A~sspR{YbV-osUy5!UAg&X#c29kUUV|*)v z{Mah6mz)I+x7j`t4dOHvI$Ie8|-yJ;iq-n>&WeK0zS+48i+P5IV*{cIp`6 z-(8=NC`S=;KN zLm~SZ11E^APCdn-!Y??_$&kX|h^|dPMmWdsDTV|16$8PeN3Z`8``ihPBRYp5P!kxS zJWImk$Pv&qDbJF0lG-E*pCiCD;R^La2Y3M)>XZw-YnAF)c@)GdMXM}*4Fq3dFoIm_ zWrx%h_ogx9lRD-oSr&pb_`X2nGS diff --git a/out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph.class b/out/production/github-repo/DataStructures/Graphs/AdjacencyListGraph.class deleted file mode 100644 index 8f75352c54082cec16b46b9633035d29522d1ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2890 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 Z4A*h|1zN-l?BO-_oFx-%dbxo|{{>WD=qCUG diff --git a/out/production/github-repo/DataStructures/Graphs/ConnectedComponent.class b/out/production/github-repo/DataStructures/Graphs/ConnectedComponent.class deleted file mode 100644 index 61885c9aaf8de2da07d32536c18cd9bcee787cfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1548 zcmZ`(+fEZv6kVs3P8mlT5Gtr>E2!mWyCj=J-d(pvgpz&$Ev=S~T zxQI&%MldSjvQVx_7*lW+K$LDOx9#6;0@O($+G#5H4KLAR+J@f;mw*kf59 zi7S}EH3ex*3hBCnDcq27Q$Yr|7~+lM4b#~SXGk{Yz4NdPYMtlI{1VNG8eWG)e>u&K zXiLky;Oa9A3|+}|e_&#pKGbN5Yua@!Pn}IAgDy06N<`OXv@t5i-BvG4lhX5|Xe^lt zma5@YC_sC5rR?ZMy0(@}Q9R=xjuC4hgi;OD}#Q zP!e>|+DTf9c1C;iz$(}`&m5yQ;(-P1BU!0BpbOokwO~IE5JJK1E1Kv5OROVwe-%yH zL6xr|tj^O?L32&heNDjXRxRh-grI7^CIl~)m*uh0R(zYMJ@K_i!X_5-tg*N=6kbE5 znf`89kU{3|D0h>y; zp`fka*g3E37JWr+#85^b9Qv5L7{@ZE@dyvGf+ak`V?4!cJi|vk$7j627rexGyut>d wzwidX@fLsZj)n1_#qq%#RJ=M297GQdD$2TX2#0A@AMpuslEmZ_WC`KOKdnE6i~s-t diff --git a/out/production/github-repo/DataStructures/Graphs/Cycle.class b/out/production/github-repo/DataStructures/Graphs/Cycle.class deleted file mode 100644 index 9aaf6f5ff108cd3db21bb33187382ad2e5873f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2947 zcmbtWTXR!Y6#jP3p-IC5dJDI<5I~^~y&#lwX$h86u%#EUwTOs%NKV^R(vx^{f)sD4 z^@7(K9~||;ad_cbh13zp@j+kw3%)qxyYDh6e(RjjrcB|*$z<=f*Is+=wZ8SOo&5Ii z4?h9uz$Z~Wis3Luq6lHQ5|7|y7^f=nBu1lHfiaPuieNm7(|B4mXT;{22+qp@cRIXuz-x7b3{WJR^f6Zn84u!gw(Z zS7C*dOd)lb<4wGo~}y-tTzUq~&%c`B7Lo zVLN7~w{&Yox9!+olEF1Kk1OcCOoXuy+Kx3`m^p8`W9In`H8q3Tl$jYfU0c>ArLviB z-ZNc~=PidR>E4vhTp9}i!uI+d|nT$eoG+S^})-hX(v@)n_n-IysZtP)n z%aF=IE7}yQ7q?3AhmkkX4NuM%3|z!Z3hVpG9yjhyS#c-Z7SB#_BG(Vb!?6eFuw4KQ# z1v`_rTmx6}J_{9ZO)|Wz_`tx2_(=SJECaEte+Y>csuul@oS(K*?13`X=xm;JUFd2% z%P!0nJVs!dGo<)jq$dihpXc(zhs=?nJuJIkDq4^>2ZWsA%6P&JQ+WpDCOBp*YMMQmKSP8(YUs1vIgPX~*=mnH7xKdgO(Wj|L3m~0pS;&tO3^(lfejb0YLk0n0l z1J=P@YH`vBN6L4l1dd4id0GIwf__RNUlKSq`Us$ty(2hEjX-B$#U0eDjyghCUFysM zdN{E_l0Tr+7RUu8(V5mYSV5=g^+nYGjF7L}#V)#q2DYoP<=$2UEsEGwv$=?P5nI@$ zei!{h<1#DFx7tc&5!-w+eYV(UTM^;?{X}elL^;8{2H1K-#AX;a^;w+qafvg|H8|`O gN$4}PK%ZO*A<4KZAj=&X?1$uS5>H`}`VfZx104^emH+?% diff --git a/out/production/github-repo/DataStructures/Graphs/Cycles.class b/out/production/github-repo/DataStructures/Graphs/Cycles.class deleted file mode 100644 index 0c9d94c75c56db361d66a102f5ee612cae127cb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmaJ-O-sW-5Ph4bO_N6ZrLEcz@m3Yg#al&?ie7>u)oS&$jiF6R)3Qkff0h>u3jP3p zlsKCTy+{K)v-9T7d$ale`S=2Gj9mj7sv5QoD5%P?EyIq6nua<<=EMuU=#(MV+V3%_ zo$0g7khi_Sy^1FTSKRV}Pe{q0I^6GZ;mP_BRHKm>GBoXT9`SA@Vke4)8(Now&qkru zd3Ag@Y?JDQdjUhG^<7!10wHqvhQt)g#ZM^xIa2oFJ5)O9 lrBDef5$?(HfrR=r`k07T7K13FM18qW85<V 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 V8mywl%)%pFM4MXqBAM54=^y=-xDx;X diff --git a/out/production/github-repo/DataStructures/Graphs/PrimMST.class b/out/production/github-repo/DataStructures/Graphs/PrimMST.class deleted file mode 100644 index 0bd41fd3761bced5264165a753f57fc125a7f5fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2199 zcmaJ?U2_v<6n@_9XTkz)+HEOPh=`E3NvkbHpir^pDB_k8_^$^_;VtKcD{m8-TsI z7DF#44NNJYtgNgUI2uC-jzw`CCrq4-A&Y4Pr(%d=QZ6|YGjcy|A}{wd2HuwzXJb%N zkjpu_(BU4rpEocoAmo!3*f>@5mjcHRW}QmIRTy6r&<}aO7fc8!$pPZjsoH`ousP@X z?&(H#-mRZ=<|~xMbG4FFnRV)(ytjpFaNS!H*pWNx1WqBSH%dXH?k(n4h@CEN)6vWR6$8x)c=L zK%o0&287b5K$PoM&tGsqVu6LgDcziL7Tf8Wi*?Trm;qsoo1L4>${K}7=Zj9=_32#D zhgO#P(jx%^2CZb;1SOwYGzcoy8h*eI85lD#K&q;aOrR&ZK0T7)`Q`DDN~c~XIbAPN zGb}^L3bjVP9pHsVF9j% zH?Ye>8p9R`dY?eYn)m$t4Y$Nnt@&1;!^vZS z(RHevqOQ>K^Ws*&{Gh^C*vWO1wXPGov$*K`3j*7c*?|`z?b_)-{WAMk;LV`ciozL9 zzUY`9ja%|n%U_dYa%nx{+1w++*R+?fqQF*cL0`B75xfSCQjP&7+j$z{F61ja_z>cI z9wOMmRS$(xx&f>f0Iy>wZ;)-FL>m7@w9b7ju1rKSs*=%c&0NN=l&y_6p?!(&AzK^n zUxp?330upkcQo7-ii`SW6UhaFDFipiWx>L4c>v>+<;`|+hjQk$P zS{_W9Lrrw8(Q}p!2iqoFWRi$YEV7qn_LH35Jg2aqR2<~(F#nG5_iGAyoWw=U;A5UX z#Tk6Y`(0}9<2=5>Y)I{8j!P$pT~e#zEG^~e7_`qJ!;_A8;P7dU(}PvwAA}_H`-HE; z7DSlU{cyw-=5{w6vDP@HV64cgHL%~n0RwjUe^3CAvGoaJ;y-K^;=sSqlU&*f@LFH(5=h!8?sIXr}wxXzN`J%>M@6hu_L&+D4YN(=ErC6g>?=Yz{snS-h zC=RU%F**#Y^iU<8s1m-Wj8bW=+DR4h^cii1n;A+q(X;j`h?5MEER$dBd$>VjZiW;m dT1Alf3F=LJj(7Qi5X9&qi4mTUP!qv>{{vZbq=End diff --git a/out/production/github-repo/DataStructures/HashMap/Hashing/HashMap.class b/out/production/github-repo/DataStructures/HashMap/Hashing/HashMap.class deleted file mode 100644 index 7758cc08fb095605e150226ba4d906eb2f1361ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1463 zcma)5+fEZv6kTTq7&;x07FsV;5m2C%OBL@zy#N|Xs+iPZ3@;At5e7<2+NlY?nfMbX zKKbH{FB%1-!4L2Y{0INQ7-L@^0Om5NMfnE3S80pea2&G|z3i zT4K%vd?ar-))r;$uCrL?NjzUII^}t%<|;ot6fPsYWtX_={a`~H#B3{gPH~l#{49Pg z#xhBgT)=|`>8o;sjye`F-AY~7Je7e?NtUH21E-_p*4N9^!0Yc?sUpGHvoZxDrzx+mADShe8^ zB=SDETg~37xfPFNAe}X89^2(KTk+(QtZ`@_Ipv0&dnk}(^MgR2b@+l|o&U&28tW=I z<0jL4qKL%~PAu#>3d)}dbN@xk2)lX1r?HzPIm$F|VnRyF6^%2_rEi@ILYU1V3uNnItnqTw1j)PpgVQ_6_jtDH6%pWDP zi2<}@m<$f_wuf)qX&ojDjs6IZz~-(j#Y`YYn|D9?OgC^;2;dvj3pE=d%@u|!nq4+Y zHLvGV&tayN`5>2i#q)qpoJ7FcGJGOkv=TcM7`p@9MN$gbKpT2}T8cso#COE`_oHt| zo_ir~EMsq?CFd(LPSa2tXubv{P5UszkFXwl4`6HuFct!~P@e!$;P}2Et$%_XBS9{_b^AT6!Y118sS54!O|(B1?Dv=5Rwp?) tU^dm&geQPT|iA)#}$E`+r})0Wg7uG%^@Y zVGnGzjF=crBaX2Ym+=&eIF`guY5a`iDl(D8WD+M#oJ`{voKo>AwUkUu3&iK8;|dIx zXPwZggh8_!HUrrx&O41emz-7o^!(e!#kwm?OmBFPq<~luNKAXa7tRP6h2a}~bDkLj zon_CLi_Mi~8C-LgYmDT|^{P|5;RK#KN5Ob_$7=|Te2elU=W|T65L}(v^BMsLDA{ zX;tbYzVW-xeaAu%dM)J8WnnM61&;iWHmRb67JfySi5Uy0afU3{eOCr^wfcj@CeB(o zhw~N=Da6cgaxL%I!~9&m>2ngspqm%SD)wT{VdpO|-<8$S#H@u2n6q#Z^QyjAVE8*? zcFfSXFCVgVyKpOO4K|L1^(J3*mo=kTFJ1{eKjfDnofY=H>ll!4scgpl%YnfftfM=4cy;%m9)B2ictO|8+rZ~ z8U8CVUL2m@aejQpL3Z?V{eheSNP4P;j1MTQz z#A=nHANzR{IDmr@>mu7IKo?*_;FkK2WA+|xJ5z6V_45&=8{`Tt!pEr8%Xy*L66N%LiI`eaaFTag!fzY zwRX(=@@X`R(%HH~YF9`^Z@HVIDv;Tv+D_`sQb#ui*~X(>hv=|C{iB$|7-uw&D~w#l zaV+74cAY0qH)ffu98&YP|67rN`x%GmG*72Tx2OIW61u9WoRvr3Vn8Xh;;)fe zGDc|hZ*)|)(0P;lMEU8Lk9@s_?2i0C0syDjyK!;3H9O9FiJ^ U&;v*z_8D!|G{C?RVPYtJ1?V{`=l}o! diff --git a/out/production/github-repo/DataStructures/HashMap/Hashing/Main.class b/out/production/github-repo/DataStructures/HashMap/Hashing/Main.class deleted file mode 100644 index 94c4fde301e7018d61af02a736a050dc92461346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1423 zcmah}OHUI~6#i~om|+;8P^+k@gNPQC)(5@->jO|L<)Kv)bYX^eVh78VOm9_m=gN(V zOHE8PaY5ov7m#S;5AY|sP`^8!C?q5_xpU^czH`oZ?)2yHZ$AJGW8T1SWHg*K5W%Sy zoW>a)!v@acoR0H4F6g+ZV?@KK@{Jj2#U=H~>bR^@uIRX`aO2}E*? zOEjYD(ye3)MceZnUxC>EBi2l8gTZNv<*Hj`yP_mV?1avxa_h zDPR<;b-(CbcNGUMYL2vO-NYVr3mn~H?y!K0zMZ1v&#tHu+7%W{A=Vwou5hQOXJW~&s`8?orVtK6-Pf>Q0>#62~4-wtyto&@6mmpr?; z-sCB))}*t{-B;`MCmSnwtC^rE?}lS9a}9|AYO7g5TTxV0SSp#?{zgSq zAOAsf-b!8m1MLoz2)oq_@Jnap|Yh@S=Tqv3ir$CqlKR2mF5lz7RltyJt)r3DnB z7fF7r>K6gYMK_;&sbweyWz*mW#FxOmkI&|Y5&QXWhVMN%K&=G_aflWsix-HZiMCJQ z5m|_98;H()MXal79nDH=q0~d!5=w*eJ6adM!rVaHNNjIx9qnWLKNAUfz@r+9@f_kg z%QMAuUm+VZ?FS&m8?=6c(X7vSweZmoDgLNJfp_c<2ct@NRdmNzsFq(hU1Pz0Kuz)5F W$GLtCYB&KTlkLA4BUn#uGyNCh;5j=0 diff --git a/out/production/github-repo/DataStructures/HashMap/Hashing/Node.class b/out/production/github-repo/DataStructures/HashMap/Hashing/Node.class deleted file mode 100644 index 3cb375f729dd5c3b9e25ad7c6025090ae1303df2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcma)&%}T>S6ot>UX=7q+YSb#Y5kzRSFdKJ@8$~R{c2UWGnhthKO-p{n*K$z=7e0Uw zC7y{sfQvaZbGYZbbLZ>(;}gIIj$E`5IIys1WZ%Ytjh=utlcf|8Lmo5rS_+)Sx3nf@ zUZrJ~t0KCW#r#38>s@D0(P%YOmjdl8o$2zLx&CmFaJ!)|;Kw>sqw0C8@<%yc(h1^K zDwm1OwYmS9Ryo&&fIC@Ld8+QTDRd0^d?8NHPhX{{1XoO;e<{PaBcBlbCAi%2Q X4mu2X==6SL@M|ambsGck*4f=3);LNM diff --git a/out/production/github-repo/DataStructures/Heaps/EmptyHeapException.class b/out/production/github-repo/DataStructures/Heaps/EmptyHeapException.class deleted file mode 100644 index 00420007b50e752e3f002daad73814a281ae1b2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcma)2u};G<5PcUy0%@V82$-3mAd!Wws0$P^L@Y(!-CzZy#EERDg3n??V&DV#D8#uS z7`kwl&iCG(-#hu^^X(nLIR**V(2LQJu|tS1lvZv`*gMW1#X_W|&_z0RM(JWSoDssy z`d$)xnbPvMt>)6)iFwJ)Aggmx&V*4O|B#`3P?j*vu7ne;(&nx;(xx|3G&Y@7jeGXx z0rqy9*8x@Ynbt wKCH+&Vl-wx;5#}weFeR66(HuEEZGjvb+N&C|9c9X-0=~i!yT`+#VEk`7fqU89{>OV diff --git a/out/production/github-repo/DataStructures/Heaps/Heap.class b/out/production/github-repo/DataStructures/Heaps/Heap.class deleted file mode 100644 index 9773c0023ca2a3686704df3c3bf89de63f9e1a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmah_J#WHL3_O!S+VGXNdr^~xEZw>`6-Y=7NbIk{iW22Z$xBuK8bf~oKdP#qK(G|C z*t*mCeD?A8@B`o#o`bQ23BgTRM>!WiN0g5 zby}6JgDGL0mMu3|o0)&#CD_W`j&s(0S#SGGL%W-*YhwOLb0$2R0P{?JDZ$#BUcv>!n3>$YzrJ(6@0@S<|F{4C2jCj+r;x_g5sc%S z96m|mQ+$@fb=*i|F@*%K4r56^Z_45GVce1dU&sZAG?tUNoy3ZO@yvZGAj$$`PNU%k zUdwly75|5pfK}afesW4p$KNSE*xq&P!ID7YrssRXErG0EK6;+t5Qwj~8m_>2)$`r2 zy3e=W&Nt3>lRH+mRd<>jPREmLwHXhddM^YnRLf4_)Phd89&|hIi_)6ww4?D((|zvx zk~{8&d1dX&U}jMfux;(E;s@@I+gZ}KR3S3ajJCaZQ(#U9D7U&y^_X~FA9ayA+T~CL zyCNT19c+(79!%;7Dp>9(cibRSf5Ogd`R(h^3+vJ{!_L#R;h;s)Jby>vU_i7h4Re3& zI!#JEW4~YH{FXqv6+Cr2Qh%kqz-TRS>d)>wZDm@j*6McZ?p;sXn%1r^$c`~FiB%IP zVVTHaB8jqzJGh&~mnPOw5ID8pS5cZPU9Z`2I|4&2Z82w}f_rjUXPLPo*Ymh!qKK+M z?tOj2g!bVh*+Q`>?#cZF_mN@f25^Fc9Z+yzm;L zF!u_vLh%)hzqu8|2OO>N_%z2Uj9?mLID-$lpJO1yaGLw_Hy+Z6a5haMBcwT_XtubP z_tPQG)X$RV(g2=|ZiX I+AWjjHa%LQN2?)Cmg)@hNGf(wfj=a;yrnxc2z`y{6*_Z|&a7+bN1c)A zGYY+?&=2`Bh~Oa!zNR0K=toT>IO>Nam{kOi6v06k2H}58{7t&BMXeue_(xsf*BrLO zFYzgxZK&`MjK4UE-ik!HSr1|43&jh{Oo2QK+>tL=DeTTDIQHkE;N5}2{A8(MX^aG( zeS^g2Yb34V9!8i&tcR3!BAOdLn4I-6dN{SVhCbU*t%wDM{yo)@w&x_`JpaG^hDli? w=R_U*70LMTh#PzVpsI z^UTaMv+IBS=Pw@vcnE)tA%zJQdJG{<)L> zM8}F^PQ|lP*fBJqC?Y3@C`z(A6~k%F%f$tGJSW?4$?Ds3`W;z)S5{|KJRimPVz>`Q zd3;|^ejq15l+_FJ_>qdUQM{<)B^58L_^|>tug^bb=yM7hhfe6H^xl$V=6Z+BqO(sy z&6qh;(4CTPD0pbiao^B@?&xEVU78YwVy{^7o`X3fZxoz;{WMYCXBJGSUqL*z#=yRg zqY5IASXmlx7%~gSNGU&Q*hloq93@Rd)|8$*s@taQePQh^efZWDY`ZrCI&fyqqJsAI zb%(v+iBrolWZyLPTkdqfFjt09H|FS5Cx`Vp7m}OEb1Htq(kj@qHpI`ABS}MS#wa^i zaDOV(u|8Z$aXGn!YL-I1vRpbw5QsuH{SOR-`8j97P3ruV zG3S_8VIP}FL9<8IoL-pe9b9#Emca#kvLrTUmFy|wkSUDSd@}V&8)@jld6K@;QU`5Y zUy#1ikVdD9a~gh%S4bTVKf|jUeva1^B=6Nz8jfIG#V<7c60a-RGE&Orl78qt$q~y* z>e;N3O*&RmdPT(r4Hxl-hBt9Z!2=^!SvfhY7n75QQSdHwB}o8h!M)U@V7rUkjo)S0 zXvrC!e%LA%vc({N1+DH`(keMgYude?mmc3 z!|!ok!&h)X!yg3Sh&X)$PnK(SXUz#k=#eywUVeI#gSKtiN!xI2(>P@oX3D-4Y+e_% zPYSkJC8eX2CyXg_y=~na;!r_-g*ieR4#bKe;~2K?SZud&O1K|213?Sh?QTWRH?*rbtyyV+RQcjNYeQF|5Gv4tWt%xf%j&>5!H`?zfu9FBiO&+~#u^gG3LIwwjw z4vA)eG`enhi<$H0f6;u7y~8*-y~3PcqRR2NHd%C0%~N-%QJFI+TomPt6Q~ z>iQqn9Zu`2>6|4wjHCu!dwG*M-4Q8J*hXtm`^o8G@>H|vl94YiH$wNFaD+3Dp>UGr zty2cJ@^za6M-Ts+q~-bB#SeuLx)I~L2fbW>o|1ndj0k_n)5}oO*AY6tjPRck>0CjT zg5j@kMOJel+6%S~yr*@gOylgwsL!7x+yR=6;-7yZI}tJ#H9# zxz-qhC+X(uOI&Y3)oq#ytN5}C&e1;L7TQ(p{}k${2*v&A`>D?M<5OaPmM%j4?Mz%o zViUi{m^evvb0COh};$a_Q z1fdNzJm&=R-9PHPkFW8ug!ub37INKGQyHvg#k?fWOG(@}ACigY8$E|Ax1M{~7#;EV z^0V2GX9XL>c*>V_dpjwa=efzX)5W57vm`xCf3J%o?b#1d?8T#QkicF%##M+nQpmUk z49Q&ekzM3HVOswhWDGZxPE_U2euU=p%VBoD>?uFfj^gRD^CJ9`4|llh}i)9Hv<@d}AG$DdLg$)?Wx^GivyrkoREk{B|SZhB@n%V2D}j{A-`wJ&4KC&OJ! zNLI$kRj7%#))^%gP)pcaX~6*M3bqOKghz~^Ey#{q5hfOKXf=_pB3{<@skv?S@fB>k zM z_!v3d;6IV&erqKcj^Vglu_uY5KoMO4EH%2!R2AH&yN{YD>vxa9~PR2kSeTssN_Rv4o2 H?V0}qae-iw diff --git a/out/production/github-repo/DataStructures/Heaps/MinHeap.class b/out/production/github-repo/DataStructures/Heaps/MinHeap.class deleted file mode 100644 index e219480d562e86480b4d515d22d267360247173a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3904 zcmb7H{Z|y{6@F%SVU}h1kQI}wdA-RdXsN(x9t%AMlL;P4dk~G9-jIwhD zkEAl48^e_pmy=7#hL`6|A#2PlP%;YYDt3+-3yhwo2KZAvCl#(rWisNe+LRl+%ZtZY zd&kJnS+;I31lf%`*33-K80S5)!fW9(Vp5^Kn0Gc{ohxv2&bA6OqjuJ?d3uThW8Sg# zDTm2bup{-cVyPyBN;!uSn1!NYuT92-Qz76~KN+-;<NKoqj+e_$BQ&p8WjQs<|P zImfgL``JVanmwxK^ukQ<;F_Zg3@+G{C9yH9WKS7~O<}C&lc`7ANJ9@Uk@S_8I%M1W zg7lS!G`dt=)bInmM(SwzAzs(;BfOy?`JkTCa17%reyrgqxU697NGX>~`l0tEM=U3) zXR}5&=~zkW6%}u4xPrGd{1k61cyz=nD<^05Vsg?j3f_fXNfN+Wa4+>J*zV$X<9FFL zT5?9GpR!7YY%z#mL92U~v`S9Wns%=yZKlkS;OX)z7B&0~KiBXJTvKsf!#nt;hNm&0 zVGxHkyo)6bCvZf=ukdRPpOw{b@VbJX8>Zp@YANVFg3D~Q9QZEECPTN-A-3PI0 z_$@AJcoGLS{7&$Vh|}lre7RQl)|^m;9!az4<) zQn1A;DIJ|WZA_8tZ5!SYhYIQ|%n{OXAXWq!$FOzBV!MS?!u_Zj2wK=~_bYO~sjT-1 z8`HhRCXE!_&E~Sc8@C6H+H1g$EfkqyUSpYq&M>XsqqbRaIQ|Vi&kG*W?-kSOoG9fu z2AciR=(^!8X3m@cMe`;04&&hT3UhjiD#zdYWYI-6Pu-zLWzL{*QIvP4GWY9lc->2= z>wj2xIIXLubC%>Vk{WRB%(8u2obi z7~ZvtYK2X_g9}x`UlASY{yS>Z-OH$1LhTWf^0L?gv77mtHJVuQq;dD~|DSp$0xgV$29{$Q|uN%fb zt~G|>NxHfE4A)yxb(dzsDxOfmIob!@L5GS1A3^;Hp|~G?Kh@cOd`j#u(nW~BU5Q0B zCV~LoLETL>oNQ`b!KM#Inuugq(G-&CZ%{q#MpW2T6=vzE<0p>0o!c#uN z2tu1`c+LsryMM-aA7AHV8Sy{RSjcr#O=U@6#k?fWOG(@}ACigY8@-4sx1Rgf86ENW z^3(3evx?1OobV;x-cCy9d2Vv;>}1hWEJ-KRpLS8CJ^KNQeR#$V64-}lxeB>AGHwAw zGFN?MS9njD*1rxJ!_A}6dJ-XF$!r^gzg|7?&Ow}*n_DYp;<9}YXg`m;+!SK%U6+b z*P`Q+{(Wo_`6ATF5+dO}k*dUOaCjZ_&5|c+I!^=G*Qv;R;)+9GU1_ zLIY0|bSi?r{{z6%-Sd@PrP=jTpE%?0#}jy-4N_vZ&U5!F`{6a_=M7TxZ{(5W&#UpR zAb+=l{N3>L*N;~)ileNkWU>XZJJ=fzA5`u@QT~lg?RKt7d3n3}^?!~#>9%IcOSs%n zL+S7`+Pb8#Jlc7El|enJ6K7Q_#BcWD)U$A7q!&N<!EXf5g)&NF$WXfNnQfQB*mM&Qoown@!PXClcP%4X z86(%BCa!KUN-Ch1@o=RD1E{OmCeRZeF@m-rJ8DIkSi<48M7oZ6S=XoLwzbFCu;rfP zMMP!4{XNE{v2HCKU0y%!K^yHexZK^|}W%n_C}AbMQIsYqiD8Pd@aA%rJM5AQ`Z;ZMUxzKC|* z7;@A4sHBxz@)oJWBR){Ce0fR=sD>4kubL!(fuKdd(FY)IIYI|je4e3*9fbia3`zL* GrT+rElV7U< diff --git a/out/production/github-repo/DataStructures/Heaps/MinPriorityQueue.class b/out/production/github-repo/DataStructures/Heaps/MinPriorityQueue.class deleted file mode 100644 index 00a41c04312d561884ba91073578a61b75496724..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2562 zcma)8NmEo;6#ibn*Yx0HkV&O6qQ(G?HqJw!i2|Z%BPvcfL>|oxJZ-w$9#U!sGq}hP z$R@i)C|Sf!Qn9Iusce(7+*y?@vq_~=iHodLR?K(qdqSgBDvLh%zH{&W&UZ$5_|LcB z1K5enVKgEh!b&_BO;EpY5Q1ldfd*Pvc^-?)Fv`XD|N=oIr8l(jlz_Z*U*~iw+hxsAy-Tmia9&qd6;JN zokLFgc+Sb>X!AtTF4|qRoTN!7owsuZ+A7%7WT#)Xh0|3Hl_Lc!d3DIjK8MfRHr0At zI|&Dz{K4t0(C7DgfyoaPQz;GpY|cp&j%qrfIdoOr9?2*hc_&SX;Ixw-Oi$R?`EJ5a z*#&x}Q%4fhmMo2J7ZO*jx2?{Um7eURD^7Z{O9jNrP141>WsYg=nuhR5rkG3G1CB(g z;YFWg0&1ceohH_x$wWlNDy%lK1)BpnW#TkQd)14^dy7tL!p@mEi*q#8BAZbY=W!u` zizZ^YWa3Rh-HE7)?da67>3?NG$gDN-s)(2XY?HS&i}r`duh>b(vrIK|BhOqhWSJrl z8r(=ZnNFrRU0|?mYnsWeu(DY@J)xnQwe(UnJ%@O2OWR9_UH^4ISje~u(NN#^@_%D80&y4m{c0;*(i&33on8l3JN3u3`QdE@*g#yNl{3usS*qEgHEG zUsS&jJsL5_z6;-n@s)bHjxA>js1#Y?UMTa_)- zz2aHW$YQhi{E+wD)cIcj9Dd`TE*P$FRf^dz`n8)W-BX5TdRW3thZZIr`_cnF;(=BR zCV#%=al5esaa5wG47YkIZY2@fY##0>44KrxE~7glurp}=8Wj%^7@bFu3L_FLAygYK zVMPgM36-}sZSL96yi-EeV#eGe>!U~gjBFnb9ON_@P%Ij0z(+^6stnLn8J`e*PvO)4 zX81Jeevg%{p0IX3R(DXv>Z?AhjQ_Q0wpLYUf@X(MjRYEStjuKHg2~3^OxDr}hm~tm z`;t&n=1+`ne`HFcJd0}Xj4|2I;3o+Nzg2-pVqaiq+2I=R&=^}du9(Bj!i`z*^V71= zbxYCiAjHEtMms)-AvudEASz=sXk4P8jajsozgM_yI2R+RK8fRx#NCIg10}m`Pq+Wr zecf}#Xh@tnQl}gYPgX@6!MG sI0)Y-$6GAl56I?2>|<);_!tLpyNq)$$KgI=gt@-XAu5x-OW}9_3(9T4RsaA1 diff --git a/out/production/github-repo/DataStructures/Lists/CircleLinkedList$1.class b/out/production/github-repo/DataStructures/Lists/CircleLinkedList$1.class deleted file mode 100644 index dd2586d092308295ebfa28f89d4c6ac53e396415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcma)$O$x#=5QX3P7p;QbxObtrvk2b69}pB5JwZ%|8VxBVsfTmn0X&qLZe2OUo5zF4 z$Gkt!7l1W}0zzOwNb;(7iuc+uVY1Oq89r)z=i;b+Sl;AA62?2LOy#vLPaLjQA&?Lj zTNz{?T&+Uw*k?`OXTOBmiZD7@%Wh+&_v{I21I>)IWp=*YSOvoTFIGAQp%wpcrX3eC Tbfgc5PfSqapM{i0xjQAXiF0(A_O5Jkth-hMM8?oAyw|1bk#Z-2iZ;)PW&bg zRV5Dm0DctWtsRQmToPf+vpX|ycHUd>{`&pnCxBO|ImqFOgFK!VINR1{$Hp@odjeLd zW(kLb$&nIpKZK!*x`B*i6${jR?_?tTNi-cL(@4dQo*yT1qw7bbK=u6alRDCo9bMcK zDD?f~P->(=bA{6O;eM;b`rN4urmQXZ#`07)0vR4RJ`TrflrU)$B#>|Wp`UaF-c}Yt zE3|A?2Nc~+MHi_=9ZWwDRdgtaK}ujUlEFYmzV_!qD>?DGC!4)XxvyXT=3iIHa0LpP z>gvEoMPU4&a+d7dOm!Qx7Xrqtsm)7)>e9smmG=Id#f|SQh6J4cWEzdsdtdM9#?>?P zT>oMhCEU=a>f#!%yRhNd@C3Z&&z(T&>S+@=*j);bE#90w@07uhR3WgQ zdM+*bU-(5L46Ti}%-lDQCdZ<84#TUR!Sw29u)Z^7;wEhw7VR2sfv>}*)^UrGt*i_i zjOnL1Z=+|LfPu|RC`}|o6-g#TxkP0&Z$*PJv^YvmACQ*TEh7D6RbgWE2?U diff --git a/out/production/github-repo/DataStructures/Lists/CircleLinkedList.class b/out/production/github-repo/DataStructures/Lists/CircleLinkedList.class deleted file mode 100644 index ee1e4bc3a282985396d3d8b02ebe81e3f08a3cca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1922 zcmb7EO-~zF6g|%#f7S*J%7Ib^)~>ks3b9t zk7Kx-z!>f&5yHB*N->n<_#}xaHWGAx8pCIC+)pAIoHt|Gis3;F+XAVIZ7X-HExTRS z6)<+3rsCGMzU3w=G!K+)3M^M2NKe*0x7YA`uId)6R@dtmw=B2OR#nS>rkdI_r}Ik! ziJH~2rH&L>`5&p}z3tKl^P^?Uw!962aBlH2No@JF##u=1^p5Jv-IMh;u_voeL$)7F z*V5;K)9?-~YFQYqE~{nFqkPkOgEXS*H>_hV<<niMf$Sc^JQGPrgZi~AYJohYO%fn?3;xefKu(yx&D_ZZyN za#Fa0s{;Aa2PcILvO4Wy3YYP&!1ZBUc6#mhSB_;<$@XzWbv(Ug*3?LOUfdUmt>7V0f_&C&(TMgU(| zX3JHQwTUWiQ~x|n$2D!$lAhI9Da>O*;KoQ&1tx|pf??pWj+8pLB5?R0vozYI2S3gc zV^{nkJ2$xe^;>q!_Zzl4_AtYb%{aeAA^!2be2Xs#f%klS3I=UX0oQ4I8vG&&?$h~G zi2O^0_C@{$!r~Oh3BvjC2_nDnI*e;vCz%X_8U)M`@G7S8K0T=b0@v{YPv$w#3{L_d zVwS5ec%Qp27-5;nPc#DPfW@`9;35~`v?qX@!wu@waNm=Eh@6S<(1D3?ar5N4fMw)-8rcANK!YXpM3KA6jNzRo6x`)_ zw@5n-F*fLSo~|VV`dmexSGwGjX|4S^V$(lp&dL4BcTSP=Iln;Sk*2(3tQi?&`Z+Ey zYgd8G&Uc3R@$XkWr`L^wcAp@zECx&Zit#g{166BC(_Z4c6v(tl1uN8dn?&x=TE!ae zGS^Mq#g|yeE=t&=N5AC;8#>Rdg8$AWd#3*hZqmmu0PYb}cVL!Sw`hfllp*p0>zl;L za}P3gcY^q-v-qjA_#ESO$1cH0C0=7ZhTHrXfBD0uXZQ|7gSlPBM+^*+^d;_-v?jP? KB2H_J=j1fgc5Pj=7F?OA%1RA~y1ZYue5D^k5h$5r_QY2Fjv3lUPaaYBy<3#>I^cQjA zf<%SHfh!U}3h~x8MKqUk*qxoX^Jd=6?$2M}z5{rI`wr^3Wy8d6y>%_zwQx_sQn8w; zBo}D=2lBn_$1>UPznLDWFn=asPon)q=0&OmYC%B6Owb7eu7U!~6fV{lOg1TK`G&7Fd(8y8JRtkNrJYqTxzD}?vp z7>2iTjM`^HHMF?5nGo#CB*i9WmFOCg?ggljFsn{UNwLl T*dS=&CN9xBOkm;;yK{a6xiGlD diff --git a/out/production/github-repo/DataStructures/Lists/CursorLinkedList.class b/out/production/github-repo/DataStructures/Lists/CursorLinkedList.class deleted file mode 100644 index a67d0ef9f9a10dfa06d14287a58ea628dd2695ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3873 zcmb7GTXS1i75=uamMq1$*oiH>aho)?WjC%>Hy1~Co4UCedzw!g^Y%LchVXI}Z8#Ig*)YyU;KQe)@Z;GChv#IOm0?x}Lu}_G$YD;7 zm{DB7d=wX9$?{T^E|+D<%dj9rA&g=a+vWC>LSU*mXDY`Kn5*k*ZP!YVuEfidkgVHGZ$b7I*ecOO=W zWUTpuA)X4U|L1IaX6EoHF9_y}m4c(tH1_nV%=D>j=H!vFquI>(*`o^av0|a@7zO9F zk*}D3W{>fP(pJH8Miu-$y{Cy{OoMD-Xy#O9;k;?j80Yhhrg@^6GxDbm+mf|sR2EM- z7cHjXp{)UBh;5s1x>~B<*1xqYs!-z@$H-ltG)g)c3V`V=*;c`kgerv1yt!aXE}ADU z8H>h1-YCouOrO7G<{U{BGhuVn&&1K$D$JQzrY|V8_T25=OM2@p$FvQnXe(?n&MK#a zTZ5(DU2Ie`iRocv@?`(K$v9hk#(VFMjFD@?O@>uhDwZwBDpIvnYl!|DTHH1lii_rx zSH}e+`QiqN4r;{obGQEoa5^?n&^Gg!t>rUXvdzV;cRpU-_SP}STqv#kM)a~^ULgb* zk%;VqZBkO-{$0(J|0(H5Klv#PvniqG_$mfeWty3nYxwb8p+kZMOM* z#j?$*VqvP1&nxV`2cC^l)cQe)2aPx_j^vvNByPcf zMkNBXs|aSUDYd-zZ!tIKQuGWZIfP}XOZsji@;a{y;31AlL^<|w)r~kqXk`F<`P%tcG@{g-h)%wN`u-KfRuHe+Lh0qTf372V0Cl|M5sr@% z!4MO?pU*i!6bETNL~B|{-pyxq^7YK};B({Lf7HV;v;l+QbG?Q*lP`uOs%ZFGa0hX9 zTLXBEkMU`4{>I+`T@UuXg>BDBl!7BQ=^yRlr0zPp`w66P1r0w!uTQaeN#>pf_+O#gpX8i<*$QCKc z7q9~_>ga`uW+HG!$eU`B?!;4@B6Yo75sFt;gnp1l_#_%sJRTahup*6o?C4%B)z3I z$m^ET)*9S=&+^(^$uq2gz#RL|dTyr374Q<=!^L+n8D}|1uk7OW+5EJ}K--a-71ZCt_A{$!eOERTV%6!=E>-LajXkm6_3zW=`$zWQ_t?+=#IFBm_Nl*+&A(z8 zf3NioKF@;}XRXW-ilSdT0SY|Pt;?f$Rl7w9gwf8gE)U0PR)&0we3G39Ot9?usNd*+ E0fdbKA^-pY diff --git a/out/production/github-repo/DataStructures/Lists/DoublyLinkedList.class b/out/production/github-repo/DataStructures/Lists/DoublyLinkedList.class deleted file mode 100644 index 08b787030e4d2cd5c46899bc19b9627b19c51702..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2418 zcmb7F+iw(g6#ix}o$l|lT#O`Pe z$1q~xDIC{P&{5P7IcJ&E8oCOHP1l@ookq!RI99#CVAow4D;EZ7RGC*Ya+3r+b%27tmnM)abyw<2h*YHjGhfIF40uiOoYX=1g0T zMQ(MwK0H%%37x#1=6>3)*UFNLF;Q(eCF_VStfe00pzpkS(M(_sIul4?bpj7#wTAU_ z+Fv#+XZuGRbzAVFReAlx@cD$R6(R-&GICA z(JVKZdfaD3c>c%LiOY4@njvx32F+6i<Je-vkRIhFyuj-r z9b0s41@1%VtZ9EzRD6_3`+(o4w=nJdZb6^yx{20eW*)ICh-Y%7qRDv*frkS!pv5aGC>?e=pNSS$m;w= zP5S`9@c|A70COx-+(X%+P-X}%%<46_9>Wn9^C;DEjC_v} z$8n-9U?+;iKehz*V1RlsK)vHZ)TB7Oig@{+eAF*9sSrbL71jy@Ff@m_D2yxOH)Otx zRwcOX542ob{8KFKbEI>Ube^X6&XAzz6(}K#UVTte(%4S|y^^;=yN4b^;aGO8DcBNi{reNj=Tntt#se9oIT@&U+*ffs zDUpPwtFRX$`WM>OE6jEz4iEwasz zE1shW#Sh5+fuI4`xf4CF6Mu#59VD~!Sdk@d1uEh?9-7C>MH;-uc$JR6B^BS1lE{X6)CMy7hJ2TfGAo4gTWY|rtJ+5PM1t)i2f{%4v8ct zzWSg(>7!dT8jafzFrGVYM4_5V&fMj@=R5b@?|c07!9xHenAOmUWCR^ZMX(n`Aq;B> zBB>x9#y<7mui$`&gBS_nkcOz*j^eO_BMOcxIHusZf=mb}LO3a~Vac#uDIlfQhtZ@gR}RU0Ga zv|G$c`-+jXxYC|2=M8J#uuV0uF9w|(CP|_Nvs$r?+lpSGDd7_p4YMTBow%M|G?t9C zWt0}u6l9hbGXB0{FYstbgKerRlB>#l3^cySMA^+*emYrDfxMG8S9a~ZoHUi#uC)Qf zN`sCq=+n`K?hr4!Cxu#W+wvICxqoq64U|h!p&W13l;~dTl^fxqjZB89i zi0inZa$Z!UEH3GoR-+lj1$r8?)I5x>%9_b7$~>+3V`=Vo)saOyU3R(ARWsNur)TM| zLyx6Vq$ABnr6NlOfvtSnb&pWLC*y_^>ozn0iw`^H+B*t#Ce{a%vBOvYw;+~jMaiSy zM)_EJnpvt!+c_@{Y7W&)>i6;$!?ZXlNJ}~_KQ-xP_J4Y)45$SQwA7eqY(A_kU}qX^AscI> zO&;1)v2lgX3V32w%ot)!@DgFX;{9LK%QtlEErq?qZoEeVA25WE*pE**g3rj{3!CUG hd*>T_;5%mV;}4%M^GrYa!fcm47~nMo8I-?+zW`UPG@Sqd diff --git a/out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist$Node.class b/out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist$Node.class deleted file mode 100644 index 4ee7cc2e65b674fe8ff9880b183ab42a1308e6af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1236 zcmbW0&2G~`6ot=qew+qFP56fv3Is@8f%_9+QN*SQDI%0bsxH`66MIw~f+N`u>eKK9 zEI=YcV!;FOP>3^5P+5SGqbPG{=FU0yoAJz#pWnU%=%BrX3f4?>(=@m0sN%MbJ2vhL z%Av}XK)US4`Z#0Q8;4rpbmLejyCapRIu&$!&$zIkC6geVBs%qbQJSUxOPw6)!xxAB zagyn<7sYRNIAW%0Om+m->`jz5Hw1n$y^%hN;wXD6*lrcncH0Ns#%{iiWisi#$-9A0 z_SIm-jWv4XK#dMm5}EOQvTQhc456T|fl#Xq%MhZvY|nDE z&wPpTyth6@$@_}3w=#uzGKKXyS2x%;r~)S<^ioWmpjfs0gA%O5M`y$h^qxiw}k z%`5nf!d%7s0_zhy7VSVtGwJ6x&TIiL=b$xQ!Bx%}yq$a_fbFfnCeh#JGYWeqr^v=N i8VM;@usS#TlR`dn(SInIzn-tUfm4ii+EmbFw0;55dM_&g diff --git a/out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist.class b/out/production/github-repo/DataStructures/Lists/Merge_K_SortedLinkedlist.class deleted file mode 100644 index cad713261be1f5345aba86774e947250c592457b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2649 zcmbVO-&Y$&7`;P6R>M+K3T>k;Dh--Y)1;IZC5Qqo5DCy41ly`ONfubL*^RrK9{E>% z@YNR|^o3$Q$K#U^9-sV!s&_WQ1S>se5H0F(GSiu1UsVPcTt zdwqBx(^2#w7sU)d=)){NRN_Z!nA0#HMHCB4xT}VHN?cUKl7?jsd4cenQ!xbeylorq zf+aoA@B|_=rfvGO0-^t%d8siuCcwcU36UEsL*58s8~G72}En^Y(?n_Sjop{bC6J# zk3>viTy$S82|OtT+DP++$;n47kyc-uF86F!z3S>C2+x#wNgbU+P9X- z3QQ%tiIO4!;u}(+=rr82v1lrGT|JE}Hxx!XhA=E}=@h&KV)KsUd%i2{tA@YlRJ?%* zK8|69Qz3@5j#aE_Sl4kM50tY{G!%7g;8P8oI=1kcj)!=p<1s!Lm^c%e11{?L0$=Lb z##cHdN;=A@=rE8LNT10YO9_g!q`jM2FYOy;KZ+gf3JfQkcinN4OXZ`8VUJkKdfhsh z^YS*IQzDt_pv6wZF8iiqXEq$3F194z^iUhk1*cY*uJj#pO)m$6Y3~NkrdweHmY(9P zGhEvhL&Q6cJ5E%iY1SFIopW7zpjwginhjx$4dK5qxI<%+LKqr%s=uJ;;WK*15yDT= zyOzFwgh=Sh&(K0R#4B6rL%jMMqSN7YJbZ+{L+D%a@N_S?`@co{_%ssljYp1fZYv&{ z4px1?qd%>-0*mke{wp5-k>SEYig(b@^)TzYj5nE7ifP@#RZLNu#VD3=4eLmthm6rD0sdb$-%4v8dvA6SfY_k1+599du$od;;?u45F?q6KG{|f%72s Z)lY$%tFU1)`CHsq_cTe}+qi?Ne*i`w;Q;^u diff --git a/out/production/github-repo/DataStructures/Lists/Node.class b/out/production/github-repo/DataStructures/Lists/Node.class deleted file mode 100644 index cc71f2345765cefb2e780f398fd2a7d829404635..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmZ`#!A`7i*ieTcSUuav&xi`~W}7 z_!hl-c=L8AGxPTC*Z0RKfODLL7TQf7iEPeeKug);X) zvaat{NpR!5DiV3CjIbT6Y>_^5z=NEdS;M7R2@fugJv88W*g=zU`tPd zY$+4oqSotAamK6KyuZc8NsKUIjKt+)m%GQO2`h}oAH0JG-3_b(ZBSb?Wnqso;2_|I c@s;gw*vFa+==|E?Z$mj?JBGg#t*!Uq2en>H1ONa4 diff --git a/out/production/github-repo/DataStructures/Lists/SinglyLinkedList.class b/out/production/github-repo/DataStructures/Lists/SinglyLinkedList.class deleted file mode 100644 index 5e9b53ad0b55ae3d164e001846b196554022bfdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2769 zcmaJ@Yi|@~6no;T4FMJVUo7hC+7c~9_e}(!*34+g=*|HU?ZTG#N_nhZE?{nVmFZaIx z0l)y>ief!d8pfgs;8+B$I3D5Xg(ycSG>nIFG71e7GCw8Fi($MZ{pkqK;H-voQ8XYW zXI_@kD`C7U{cF+~QA{E&O-6$$r)b!U^BSh2h$AH{)6!VdT!`W#vKn#<)M?YmD2OLV z4A&TU?NZt;*{0KeyzA1h?c-3r!hG#tmYU8|6HMl8pe%$hu-oKa9SWaTY)uYzFr z=2P@`kOverB(1zTR?1D9_DL~T5K9))M)s6pTQaXKs_wMqDCk-}_PCXw%FfZ#MKdF4 zh$Cv{1;$Yivf4c=A(dHvMippz^RmEI5b>?X+-U`&?or>$BE)pbCd9mFq-L0}f^f0m zSdy25x^dS?UrZTA4;}A`@iJ!CbWJ~A#GiO>HOo1aE4p)D-lRdxSWYo(aIP_kZRTB$ zrc8I-xBgJp4sm9C^YOTlCox%ZPJ}1A&$!{ zCiJ0nwnBb%yil^!=3z^yZhn}!trADalju^=_Mg`*23vJ(z!N(1((K0p1?^RgCrWwO z%9)2|(`M0UY~M0@iLB{333uAaC$5-wAyKds54Lgz+w`~GX)}>7&`Y9lK9OY_60)FU zi^SaniYRuHCbE;ToP;R^uh+2~T^foyE`hhVu8PO!>_ExNW=va$gKauol&FS;3}$p( z#;k@p9akjE>yrMaRnvc%FdZAQNkMBh*8XMrAF}NNgY83?jvaVP#}Kw^ctgjVg1@nP z;@IQ`Gffq!d2^OsbNA}Ez2e09oa36T$Y7x)2Yh?0(0`oLaG9)W>^C4_iR=2Q;?I4R9q2MRd!yo3noQ3j0vcB9w2v1Dn~_ zc#HMu;aK+#(2G9Km_D|$mBR*t`~}u6A#ggrh+wL(=LXc9^wxJ1YSmo~D$Uvv;k(&{ z4z!@tbDi*yS6tH(@ob~>2WBC(xQEz=N&fy7x7u03BeChWiJn<~l}JBxNkEUp$#?t_zT@+Va|tPZdj{^}&5d1&ea z)ZjHP__yyX|I7-G>Q-wJixATlNc@Va0Q-c!ROdzk_7g(EYaT*%k6^fsdJoFg059sdj%xlJ5ayX2^^zx$ zBE@%!(YST8lrGG0QQiygOm!z}0CM$K!Z(w5Q5Po38{)`rS>%p0m@JT8MOp@XO+ zmbaPBJCw{-;(nLc^&Z9jJ|*@62JsOq`D60+DM5Wk5q?hbeX)YnEif*y`gs(l15 yRT74B7o8e~8|Im15e#rwewt#fWh9nW^&Q#;P{4aumY-B{LK*49BBSTM?c_f#{TUMg diff --git a/out/production/github-repo/DataStructures/Matrix/Matrix.class b/out/production/github-repo/DataStructures/Matrix/Matrix.class deleted file mode 100644 index ac81a8f906b66ca01069115e09f0773dbe945c5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5253 zcmcgwdvH`|75{yE_i=ZVKprH#lCa^q$>z~)Xxb(uRjj2BbZT&{rnS>rr&ArramIF9I?nh{|8X3x7R6NjoqKOK8gRqz83;LHJ*k$srwI(lP8o9S-X_qT|atj_Noj0uSkU zSiZ+~d_}%r)p0_;kLY+*zF(77gKmyay6|-!-|(Ou-xSVcI=-c2M91SgzOCa49j9D) zQo-IEOa>LSojY4Oi3YqS+91O?$8q4n{e?z=Cq%gNF91Cqp zMY}_T+k@Q^Qu5p4J;BJ`!NIW1EuuX**q2Z!m_?a_L-wt;z5(l7r(lbcSlV_6x!gF_ zlS~bU5;g5X8nNH{G>R0L*rJqot_jD&$z~3GbU}<%d-%{96;^P?LPMg8rYHNuG{!Mt zPIEew!JfVC!2!coW>LY@7fNo7grcEXl5)P*)^bs@pU(j*B6C}Oh#EAX&_#GdJd%pW zL}`M~GYVzC*76%!?iAVJAnol9?+Z&b?E{e%l{EXVzx0Nh9r0v;h>ATM_xFSblHs^v zS~MIJ?Rqp7Nrnd^bVco@6NwZ(c7`5E1ta8^-DvL})R2suNKlyPE1!uEQJUoT`7>EA zoK|or2ZOQ1Ks-U0y;N|640}4`sllGmrmzGy%gleZfRcF^s1{#ueKzjEMiYr6Lj07DTs@pHY|-t!rvp+P-f4w$^)=Hh7sE zb1X9FBz;^Jtrdnj3``B{jA6iA;f)3wxXmZQBA}GF#%s*)k-3|5zc*SZ0$pG_g-~S? zb_s!oi3)0?$bHz6%|q^Hg+)`b+m?zY!_iP0UJ47h#FJj4&YK8E`3fHld80<9R!eA~ z&c+sWD6HI0iR4h+S1kW zkR}nCNji{7h6rvgo}z4_iN+UQ63$lAO#cnJ1FYOi4~= zmCUzv7MQzL+5`67P)Ek5*9c^A<{3-X7z)QwG{e~W1~-4f7#7aPUSzPv?^#zbHre!V zR(7$;rc<-BOAIy_myW@5EW_?4lU(m?+_JRlrL(b@rP<48W3NcFSEkt)h*TSH8bBk~aOScdLlbL7VUuk$nmMxJuq_L>bEM&f zO<^t8!HyAi8S6Q6u(A9Z8#r=u4ZD$9Tlj!74(i)laS^Nh<0Dw_ANOm4aVfNRt+~WM zK8jUZy}i&b)KL^xmIOGKS9Qm*U7fx9-mu2^TNRZ*hVLx0D%49*97=FBBRBzMb9@^& zTEnt#Vn}XBG0pSQnAQ9?aK4tNZKPRu@_iRt42M_Kuq9Z`fVOaL5h}=Sq0V`zMXTX3 z&BkVGkw07U2_qbB9GAg)l?&`Hw7a1Ak4O0gbae%buE22xE|R1bSTSf}>@+TOS3D2j z;y`irIZn*PO0Yz?B*1G5rFV22mI~iZ2~nb?OIu1e^DDf$qVzR5v~w~T7u9B1<{0XB zFsnPMV3)B)wzK?ijs$h~6EecSq^n@&Au^yf_gJM1``ktfh<-Gjb=1^Yb}_ zIg&RHb50}Y1(bK?v*i6Rvc}Ea1~PK%ot|5NNg>bk%H3uRE*TkqV`hd|5^ca^jKK)~ zf1KHSf~VCfX6s3wkf+eg`5v4}$D$c4txVUk*H30Tkoj0y z7q8PWJ7mFZ4i6`@ugHPY1lI(X5oRCCfjfaLb(OZUbFigISCK!!6)YFBBTXju@ULsY z$X`_?%i;Zdnj@QcN+@SkC3}R{RBU8p6tz;A<{3PSQW+HoN~-{G|TS%z=20ltL=c$+bN2RGpoJM6pcuJ5oOB^Q+sYoH=6MiRrRCzlJZ~D%&z0yd^_m(pU4Q z+?K(~zsXu^c>YQzr`FQj?{AAR0K&H6MWo2l0@pH6)FC&7jbz%1Cee>#6=&&Rmz6cd<9ix z^&@Oy;U$J%u+U;Pk-8*7R#GF){j&}hBsDwbzAo+vi8t^8}|Me DRNXa< diff --git a/out/production/github-repo/DataStructures/Queues/GenericArrayListQueue.class b/out/production/github-repo/DataStructures/Queues/GenericArrayListQueue.class deleted file mode 100644 index 9795201a52868accc14e41dbcbe5a867d4ea07fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2497 zcmb_c+j1L45Iti_UP<2gBFnb~!p#QRiY*A?W*ZYHwu6HbC$Vuz0)(|RkvCag*j>5G zd;)(!UU-9-JU{@2!c{;)6%Tv_A3~)lPVdULd`VS8u@AE|-96oXx=+ua|NQhbfKwHmqFTx1HRq>sp(6+w-Rs63cd} zV)=EKHb)P$nO<3$nxSFuu;qE$_3diKo3lM@&Cx{#b)7M$?TYQsC`2-&s|wMx)gqmB zcSVd9Qu%7Za#k(ZmUB}W_1A4rVLU%)`PQ=U)(eu0m%A)!d%1JEqFuYN zlW`zsHvM~jZPvE^oqQ5U+t@nREpOh@WnJ-^3tls%zp+ zOqeKPU7=^!s97u%Hg0pw7Fa27T^H&5jtK`@h3;MBuwd-G?ah~K{w5hx(qvO#X7N#U zD_1vIz!o3No1U-ByjiWw&9L@%HFt^Z@W~Nvm1T^BpnJuPTN5LP)Y`+z7G@b6mQ&YD zw}gCqa@r;Z`9K$|VikyDT`p3t30GY3{kXWggY~|$BTH0 zr_3J7C{Jy|q^9?){D<{lXp|nw+!^`w7pmud3DABz_ zog@*5dWe*Plg;A3N;!vy-Xx!E{7XIwNh8}pT+oKK4AJ(s1Wz=B(;Tnw3obed9_l1` z*vmJ#UyW}eNiuch@54+TX`u5y zy6z&yf^`3ZjxF?1nfhf%*t=gikd6L`bOU|SFZY=biH~2=-@w2D-9R?>A8v`q-bZ+B zi55F7ljgkxy2nInrUqFX8MkmCX2?yj(QzC{H%E4aLp#ZVUE#>qSm4h&HeXTt8{765 zNAPcCR2N3oFvipg4xWr?z+E+tDNOSeS0i|vmLacYd_&0$cf#frIv!%gz&q)oV?)RI vrPGXldgqBaMLYR=QppB}wnz9obV<@}EmIr|+;Kw9(~63atg|>1n4SF>@-+eH diff --git a/out/production/github-repo/DataStructures/Queues/PriorityQueue.class b/out/production/github-repo/DataStructures/Queues/PriorityQueue.class deleted file mode 100644 index 6d01394dbbdcd5fd6649e10065a8c2beee610b81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243 zcma)*OHWf#6ouD)w1v{jOF$_~p(1U;R>YtNHKIa-R#9q5KuEllBVK54@jeJR_D|@* zI51)2#6%=fqjTqu{U64N>)e)t8WRUSkG;?S&RYBQe);+S6M(ZA3L}iZdeq~j9Qx&u z40A|@kgmf(7(on%a4Lk1f>6oW$eT}u0%cM`_^~HEF=pGwrULaoBSCA@6(xs@i>76| zmlf#A$+OJ<4X#fmLqJJ+Ex?<){UY^el+hIh1FZeS`{6%MX9{b zgqBQEu)Ze5Dt(#Gcxlb04Tk3^-*hItVv&hu;Z_WX^JUL2hzV1wZv9PylUXs=jR=~M zji3RM2%;mTQ*8_(nmjxn|j-Lf=N*bm9+rrKFrzkoXVh z3Yzx0Q;RF2K=0JgcDE&S`zbciw3bIxGl=t9!+doOs?^DqDy8}})p8DjR5WvJ;ckw3 zm2-P~2TD4&4K*G67~Y1K*0!O)@#|V;9s!Qs(ES^FNa#fy5;*MVd;<6F+{v>Yyory5 zBei?JvR-3uA^i@4XNZ14aJD71gSyY@x6q#>%1P5=Q(G98flFO4kdUD+eJK-rg${qc z7npjg?r!aV^S807^ehYX2UWQmq}&Y60|PWWNC_DV$x`qT`fFpP127B?}1X`IJA zF8DU$6xh$2qZBUE(5bJGv#O5!^|8wFiBR&C`do1^eVv(!})wKPXn znb!=ezARY)jQQ8e4)JjH5(UR=pb-j@xrh&v=9d0q+&I99)EM1}vr@k6RnC$j`^xr) z^eyO`6jJF=MM(YtBwB??j{&F+S7bf^+8iZsf(|54n$!7HU;cwRe}K7XuF7omnY}fi XSrR2PAenzQNgUt=Y6cTLuHwWmUnj;f diff --git a/out/production/github-repo/DataStructures/Queues/PriorityQueues.class b/out/production/github-repo/DataStructures/Queues/PriorityQueues.class deleted file mode 100644 index 04d2e57917a8c70b2c45b0e5074823febb6d23ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1070 zcma)5>rN9<5dKb~yRb?6{yJ?>@L;>!YCx6^Dg!-rhq^H&dI`4aBCD4=Cu6i6+ zi^_j4ixqnM^Il0-)}*hEz3=P{Uh2BQWd4B+WFhdwQV{y8o_!Xokm{+gJzocnwmHx0 zRjFNpq4bOVrreU*igY)!%+v11yg?V5?<(V@zrnhRBfNvQB?Jfke^y-nU zwPc>VL}v{*2fgSM7(Yg5CUnl>KIUv(cW?tY1&06aZ#mSJvhp3= z!fgk4Kw2Vc4hs$zk+ZSn;4bb7OdJD|v+4Z<@T9n@N&%;qUNu9sv|Cp`?Y}|_je4M} zT(TGPVz51Z?U@a^0T-ZTm4qx`RlO|^gx>jb6M za=IAc*=Yx05JR+L7{)1jO!5vo_yZp9BC>AN%4d4xO>}0WMsyirQCN$kACUTt=q{}F z9oU&Bco*wu=!qtrCc588_CD@?H}D-W@RNiALdq?&eoY#0FoFioVH*>8%Wq*DD|pwU rmt;$-zJ3RA6z4O@Vt*PY4oDc4P?B&^!l4Yq zVF^dlynHN$;~AX5Ndu=0oK|2o?dLW3g`+^3RFHYvaXQX~@7oIs)Cb&2KJr^$s6g`_ z+gG4_lcCcLI2m(2H$2OOk;&pThYPJ)iVRj=&$-cQ&N%)Zd#1sip=zscH>Pdhm34Ph z3m>}_*;>75hjuOWJN2;RJ3;A|lBVig8WtVYhnkj&OdSSw)!!zT7(*ua>HGhl~SMcD;6D3B>! zFfeZ793~Xx|Knc4YN=Lg*xp=eYG&T4(?4n1>b`^8LO`QDXmxnJt{SDdt$4Fr#<2D$K!_e5pG>WWdQEwkM zV?Vaz05|3Pb()YNf zJrsyVB5{$Qvbd+qp00hMbOHjkleU24L_0yKlLR=$(xuaW(P^ibwA22?>69Bp(=a5TZuWX+!{@KN(3&{=}!|AOu% z9#A3ZWfs1|f9fhhuMxD0gSd`kxPfs@^}$YbVe@>jyLzw&)Z9<(l9ul7@g8ME70PFN zcv4u6I;2M@cOzjlzSR|0Sp1LUie9DbDJObydso&B`ZRO@Y7R!4#h%L&wS`e$mA>5I%RZfC LuSFKGtJwD&!;Isz diff --git a/out/production/github-repo/DataStructures/Queues/Queues.class b/out/production/github-repo/DataStructures/Queues/Queues.class deleted file mode 100644 index f559e41e6d1fd9e901db3c7fef7b5dd30f06c2a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmaJj*AVBC~}jBhcdt8;4%nLFV#!7$;tvDUOD{-`N!1m^M*eRRbF`=!?SOWpBk^O@>~ zrj3LjZqst;u~!-LTSB~OMPWchIi)`mJfg2-(}z+g1*R59SR~6K$w+4Bcfr2t@F7A& zJ6~dwbbFY95)PA<#}vxsQJ23WP33^QKaqN3?jr5hiq-&`^;%YAPNSjlJF>L_NHt01 z)@wy`OHUhD6#lL~_V@|LJPRQiC<%^vHIF7~pd=xIgvJgupr&;$M8VTi*i`f z@leMj0d3nd%L3;L4@}Q2d5z|#*KAnsOvy7hciowyQ?_OWqH}i5_T~k`xy$Rkbf0E{ z&VpUDip}bV)p%lVRA|W-oK3T`ZZ>SW4~&|(ZMy>F?@7TRyH>eiyPnF)Y+AkPZga{l zt7M*4tqX`3{FeFE1k%cL#jL9g6o$a+4xO~RW$h}I^i0$ncFhkepxf?ZweG!ChtIj+ zvb>W0BQa~Pni3_a+1Rv}Y{{cfC0PBgg>8Dr{N7CA0}Q6nj{$+f_X{T7Mp9VDfR4{n zc#ML;kjiejQr2ms=unf|mf<-DaqCz~p@>z1ewk&aV%D};0HWVoXxf#s)ez`jbLw@g zY*-bmYSlc$c5fRgtl{$%zQCAVl~QudB=2(4Xfh(AaAT=gp`e`d9_}Z zc?Sh9o=v7jU&R#2wD7HN>{y!~W7Vt|oZ3!GFI|?5LOV?!^cK_|+nHJO%h9mRDvR8G zhM8qim@BMtZ_dBiCdRC6hp0&%YHZo5vmD;J69_1~s>}{&r?ad6$1CPJzVZS+xpy5I zC!!$2;G68@8x{Q65FB-W>VXW$AnT*EL|Dc=+4 zae+I**dsxdU-^_Z+H$WDel~OrZ6$wz&t^jHeaY*<=0SrTQa(Nkfjlmw5SKH zvso&jsCP^M!rt2x`W&IBCB!Ad0bh3nC8YVbyYQ4m*IAFRD9>~LU%tjFzG)L>EdU(h zKc^*1651Q2S+)KlofIZ9#Zij0z*&lu_Qlb)J!s*UFi~~*ZJQwJHbEi?CGX1n)2Cwp z!kuiRu|VwbzNT7YWs(eEqeD(BKMAq-_V1xqno-1fr%e4V65c`*+iX~yk7|dFyh|cg n1;JqKBp=v}YRnA#LQ<4{H`WF#iE#WMLP}aU{d&OUfeH(igt{>2bNM1&IM{R1hV5bv9f5=Y_Y&w;lpvMaV=#&4 zD&`@L!ElCS9^2vvEO2$$%tWPDNA7`j)-J0FJ1oYo{|@0Fu3-6Mg~l5p3mfzvg@6<2^pvF|-bal+ z;qUN0n=HAqTjlmH_ocd@8B^hb3>e1C>pbL@(2uHNJCOl|K|tRqn?%OISm z1Pv}7hQZ>e@*)4iOE!1vg!iRWpN|P}zfK|hJ3KR_0~MHI?3#q8w}esMSTN`W5fu7B!F9{0FXwZfkEC28!)K3fLbPdYK@liL0|| z3Gs;zmSZ>?Vlp?@dU~8WU7hOWLk-g5}Fda5>2GPBXbIkaC$D=gh8eoO_)t| zHPKC%9`#+o^tLd4|1jt5W{4Be1s&Zad#JQt455#BCGF+ diff --git a/out/production/github-repo/DataStructures/Trees/AVLTree$Node.class b/out/production/github-repo/DataStructures/Trees/AVLTree$Node.class deleted file mode 100644 index f1a679d7369397877ea69c17a032dbbe49348d88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1956 zcma)5T~8BH5IuKWcA+j%5kUnJ1c5F>ODTSVph1mI8hn88;DgC_U16aXvTcq2Cm%Gi zG4a74;Eyt%*)5^Q-MVRZ=63GPnRDje`|J0Qp8!gDGJpZBi7AO$7jsX{eK8NjJj@`2 zM+PW z?54ff^jl7|<-3jizVFgLJ*dcHPHHw3`uq?|KeK(ePB6WB-^i*XsYSVRlf8;D&F7fm zyEULmW3DtI6?ifXJXr;v6a!DbKsGBJ`G1h#IIcnAI#+L4pQazRmfA3^@94KC+t97$ zHd0?1*KmV&B*+-OcSSs6(Tg(c3<>?jo`mArz zKXVa+>p{>60L?G~GXdp(+{P>;LbSWM?@OZMxya&lvf?|K?{wavNReb%ORw9A={**v zgv2Eo3zVR!e=!CqhDSV5E>cb^nH&pC|Hzr3oS1WnV!^YaoV$_7sU5m79{SrlS`VtB*=@#d@s_qmA6^ckMh05YPz!CbwMDE2Y{`r=V{s&j)^^m6i61kL?Wq6#>py4wp$r9|_uR|wMj4uMoXMW^ zo^#%F-uHRV`@ZMqcej4_5rEYg3t|!W1+WBP*0DbbH%w{zrHM;3AdMx>fgrU8MH-SO zA;W{x9Fk#Dq+w}N(xjysk>)G1nvo_e!<+q-RZcQ+-+tOGIl0CxuFCNF21KFF_K7StqgtgGM_t41`k+SP40qOE4S$mu!hDbXW^(~OIYH4*3V{xjvb7=kxU|0Fy+r!cYO5>n+aa* zd>TJ!9yVLZ@?Z;tF_9YV5L;S;w_;`nX|CcfDqPGlN|^*i)0ZC2#H}p}i9^GQ-)1@0 zzzQ@Qh#;zA$>&D9Xn)Ip-3yO~1zjqoNN4R~GdXHyYujpb>Dsnd1MlKJgSBl9 zlXkmYkLWmI-d=0qiY)h`S;M3Ej`EJKS;kG!jK{5Pw!XEsmAB;#+KLA&iwAA3D>WRt zw{1IxXJdaBIt8azis?HZt}1q_RaP2i<5X9ZWSE0;b@3Uiiceotys}zWiXx!zXf|gJ zGc?kpEC!W!iX_r4>b{sImO0F_IkylpU8$TkXk|3$>bAEXkksmGD#|TKgWD?9wwb3% ziIrI3zV(eoyPS+H&OkdlJDjs;9>dd13r_Wzxgla0Hjl8PG zs*_8NO{cmmor3NEy=^{GiW+9(^g0#;%bN17x6 zTW;3YQqRk|=fXdMYZ~*yAHcmQT%}FGa~-ZRBxJrPItg#pMR?s;qrFOg7rJK*9`{;L zrRO|?ob!!AXQ%f>r_m;pl`HI{R`94v_+w)zpD`1Ng}D?Qv6@|I8lkYJh^&{P5b29tff3bgN&+H~i71)4CfldbD4i(k zQwS+W$8P^4Lcu!;LurGy?T5+BDl+pR zS?MJ9jYPf$8(6hFv6rJb9>NeF#vyFN2w6PA7vMAt`x!izXSa@FDNMS!tD5>EjpQZr zk!SZTPl^`Ut-gs$lIgv{i@AvqMbcVkQ%rl(*?$6sYkH2i9rvVyWyI$6GgIU@2GV4X1>*&hpg9ftRKqQY|Y zecH2=!p54R4_PM0C=1QgSj-~QfM-}hjxjl&Wdt0jzb6S)Cm78eb^*8xB!>^;e;AWx|6*1Vjd38ic{5EbMMH@HSAgKQz?w9H7 z8RCA0xL+ggbHx2Ralb*_ZxZ)g#C@K)FA(=T#C_?1#?22x2lrO8CUIY(0+u0KA!t=t z%eC0AR#2(D$3VPN6jl{^swLvq1TEI4duNJ6(xZinvWU7k7noe3*74C>Ftr8=trIE zDXqSY=4hp7WxF@L&^v+q7D~?mm&_JH@_Jwr3t}fd+Su(+3z<8g_X%9*vpLS^a)P&b zoi*&I`CFT(9?q!JYR|jZ&Z@VA-bl2Tz;z3L9XmDcpL~Zk`3iO%T}Kk+10xWYsyl&& zVz>CZe$HC@p|WLvXapP!F8S7X4mnD!!eulvg|Mn@Jm|-`zr2c7a1pB@i`gWq`^K@D zF`+OkJ9f6(_)VC$$@xOTDM4;bOH9 Ovky|o&F{@7xc&`Lf2v0S diff --git a/out/production/github-repo/DataStructures/Trees/BinaryTree$Node.class b/out/production/github-repo/DataStructures/Trees/BinaryTree$Node.class deleted file mode 100644 index 58129b1de81a1fedf48fbbaf4efa25f839b1ff46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcma)(OH0E*6ot>Ek7$jy*7v(=ebq-@xKmuH2!)~x#r?F7ni5l)B!WN7MG;*11N>3q zxlwRg37mWHme*ieZ#vokG7chVY$reSHL@FZ7E>>Ms6|%QF)(Wb@G%$BD z!$tSjD0q!9H1;&mQDh>8_2wBHuVS0D%6 zC5a#WsJgGP+|Pp3`6EB{<70)j&A#1@tsBywrnJSTADWBgv1RPFZUy8oH@j^e+-U1d z{kxbI7BW8TAYo78s+-uhIrn9t_;;4Qj(*l2Mp5=KhBXg^D0mpch=-y`2_r7n6{`Qa z6NQr4)dL;g*DqTg)8?gQHU)mE&pax8ssTP{4oVo9DZxl1NzzCdpi~mtv{pnOXWs;? zCpgG3F4netP_;KWwfP=0HPu5_Bqx%8Wru@F>MZiqZSJ*0*Ihd8VH$NTU>{TbQ~7b@ en(R&AbXS#TGvssl&9ZVZhhfG7Ib5v31HJ(3$g6#nkayqV7MN?Y1Oaln?Xw8IRg$Re_7Tb4pQMFtU&#mDru474+oSx}U? zBpUr8Q4`!yV?u_UVeP{`w z5X)s~EkIP}HW}6ha5vVAVoZh&KHTHOMg>na)ov>2&B>&hY3wqxSu@MsOe&RAsBUR8 zaz-qd$;Wf~jG3+5kTE$nB$7sEpUBhY_F@I^l0-6*Tc+TysTHG*meHb?MAD4ryLXzI z4aUwcx*6A!iW^-UjZ8w;&ZZ}~D?y)AMsh|!o{mJaU7@z7xppM&L1^wh<~{}0tl*31 zGZ`~UUWKuo5#Q5lq%8ytDuJi-Jn+yk@q5#Tt*Gray7I*BOPUYZf%0a|?$lmxiRu;w ze>NYFo7rqC!>ydzou+jG85`b?){GA8s41x=5p|lm_0}WR)QtL~FOh7^w3~!lJ6cSP zhQCW5&30Ch&X|q~e>#=TIdUMD%4g!{%7i>}(Qtmu-fiqPbWFlz9k(E;<6czj*d)?s z1Qn)_CcotV79G|a~J0s zBL;S{m10*IjP1)ZahQTBNx||K%T*#(w~j<|q+=T0Qes9rZA$V_lH?zTa}{6eMQW}) zTzoVAf?Ucrp-{$5y4El)mfipm38w`f@!rVaMoeLonZRzQ;F6c8sOYTDVt))}H@6-uxg6=)`n zHFUlfA+(?#txUrx0j|SR#4LzaHVg+M0bvHJ2~s1KnGAsoHMCm@?*KF(YRi1ZKBgwk z&2pH0O~xLoG@XHWb0~NkzE2JAs2k`|p1u~ah3EIEr<(-5&H zL@Z(f-kCi_tOV`>OeC=Z1UX(NQ-wOrvB|k!A%Bun`z;Qw@t8wvs5En%o7kxH6RtiJ5b=nYN z*o<%!Q-@I^k{t4Sk4@HIX}n{{#j-+TwiS4TEMCVs?)KvdzQIvkz+3ngZ{s(-i$BndOE}KTKcQSWr3&$$3gUfLi!*8- z&Z-6YP%XnpY9&5atMQ47;ZtScGnK*@>LGkNl$a(F)Z2-v_75f|B|9;_YA@yvC1xc` z22jkDoLu2k1K32Vw90oGs-ileN~!})P<~OI8a%{VYH->tz5{#2tX>gXWr(u36o#XW zxipiDk>QRp6$QNVEqwTn9pigO^aqsUM>fEpSZ)`H@8==pG(Cuy(tM&+)Gv2BL@8gw zE;zeaxc&dYPr&?1IW53K2WK5;MiH9ig&?t8r`Ov2-STF)OwIA8;+^_g z{iq9(o2L(BPC!3{!p)~KmK*Lq6pbtHLrEXT^`TUBH0lg@mGNwAz@LoOUu>5b+1mbQ zsb8`jkGG8v(X3~m5Sl{C4J93c-`*Qx83_Y%mN{6;uED}!c$7jF)2c?fF-K{m#lpV; xH^Sn?rQGpXelu*>Vksn+vCvf!%2YA2j2j&m7r!O)lFOJi{4^4km!HuJ;D1)#f{_3K diff --git a/out/production/github-repo/DataStructures/Trees/GenericTree$1.class b/out/production/github-repo/DataStructures/Trees/GenericTree$1.class deleted file mode 100644 index 66fb12a127cf8f612a0fdefccba5c888ce8cfc51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 223 zcmaiuO$x#=5QSf~npy>Wgd(mDf;aFF7ve%M5aUo=LJCRh;aqqC4<$}_?wn!fG4S5U zyg$zufEC6PQeq^KotxGh+EtbW@;y27mAQDLMXeuNV7hh2HlcFmk>b6%Nn`@EjgI;p zeQRRtDX7jL)K7T66qp5gg5Pd5eT)Ia1*C-5d;7#U*iPaa)Ed~Ew@CP2Kj}1KX@eobULV=At#_Z!BdZ#V{9@|w=wCT0F^qy<@6VvDcB{$1+&{r#FEWeyd-O^XyX-LlY)geR9S>vr?p9$gLim9>vO6RxPJj#Pv<%S diff --git a/out/production/github-repo/DataStructures/Trees/GenericTree.class b/out/production/github-repo/DataStructures/Trees/GenericTree.class deleted file mode 100644 index 20cb03ecb2cd3c0abc2816111985f08dfa735fcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5739 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 diff --git a/out/production/github-repo/DataStructures/Trees/LevelOrderTraversal$Node.class b/out/production/github-repo/DataStructures/Trees/LevelOrderTraversal$Node.class deleted file mode 100644 index 9be8ca9a5c1661adca01fb256c2fb2d5cdf21152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmb7B%TB^T6g|VMf<+Nu;1iVv)+jFAY208;NQf>lF5C@e#FA2yY0H1PXiQxA0e+P6 zOm*o3)AZcAGxwZ1ckbuc`v-svG>a%;s{{+%X0>Br*T9~IhJ^!x+)zeRKybcYGO!Dimn>N)9^0^^4c4{ zP_GcZcwzHgz?oZu?8227c+s`MS!;e;_xO?iJE{NWo)@UQcru_hIq=z0wKsL8|0uO* z^54yzaYvFDsfj?TKaI7kZaq_9`=hzDv7AX8%c$5`!J&->6m2Y_Y@>v-g(HE}e?62y z#Ynb&8I0QZgRye?WZ9N!q&2S)8l0%bf#>+s5D~^s8tDzFRE%ZjoHTt`iL1<9GO~IR$uPD!TkKN--@Ce-00000 diff --git a/out/production/github-repo/DataStructures/Trees/LevelOrderTraversal.class b/out/production/github-repo/DataStructures/Trees/LevelOrderTraversal.class deleted file mode 100644 index 4702f99be9fa1a929b8a3f3bc3e16e2bd3ee8588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1560 zcmb7E+fEx-6kTULwy_y5wF$RO34tWFO~3?5S_&aefFy1Wq#{DfTMqUKOfrnoc#IM$ zkNuEJtrV%sODgJAt<={_`I&w}F6+!V7>OvN53|p0@3r<`XP#+ zy;fBMR>|{}zwF9-UDdhk*J^=4vAiM!xf%G4O3?6Cy?EbOv}JXm+zr2~{QJH268i(d*Wx8SFYFFPxf{ zggyJd;|1-E1jH`C51XU3d*q5P!gU#a#nu zX}b}l%`hU%m)-}PD=YHGml)v+ICq5foZi}hv`{#N(L`*~yl$WU1(|SdH(~x{h!^kw z)A+FvzaMeV2Z=q5UhWKWJVzGIGa6yFcv8%Kl(h(S;ta+(GcZoC4j6CIDMXfYwldFk zO_H$&M|^U;m$1P`2%0UwPQ-H9_6~)%9RPRnvY7w5sQxxv#dNp Q4HPIN2+6KugY*F(0Pa6gm;e9( diff --git a/out/production/github-repo/DataStructures/Trees/LevelOrderTraversalQueue$Node.class b/out/production/github-repo/DataStructures/Trees/LevelOrderTraversalQueue$Node.class deleted file mode 100644 index d7fb6367785252711287e467ae8df38352cdc450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmb7CO-}+b6r3&}tGLLDU!bU{92BD%<)-n1F(Dxkqw!v#!jg4Ky1V=@55&ZSKfoVl zoPt*mWV7@7+V`e2ZNGm$zW~%xSwaW9Is3Tw|=5nF1a{EqG`{jB9g=}`KQv5Hm2klYBQ zv^N-%G#w4SuyQF-Ta1Sk>02-GqC0`>lLdR5r!TbAnAyp-yg;?%w=R{+u1|yc*0?AA z7pXmy|4k;1PBwXwdK1Vzjbq(Y51y&t`_JpeNKT}K99#!$IC8LrWd|8#9jqd2<5=Ko z@xv2v4R6ht!JyXZj#Q7wm^d+(&KF`snfGn;IVAa08WBd_EK(rgx<)*6z5_bQ6W5sy zU?IU+te#CFsvoebr703sF-6iq>Ya-gHi%nD5pyJW>3NOqc@&77oGs5uSToCAN)zgsNd{DYB4b(P0yS;^PM^0x$OM-_4zA+A-ss85q%o^V+f(I3Jn;jMiSSR zxS_@~Jx3OkOOB*W%N=RWJ2~krImV83iiWl5Nl$jDyM_fS zN6ftGjtW#Hx|ey`gdd_dZRX{ix4lX?W7T5N`m~)jtYyP7)&9sBb~j8iNS-be8FWj*;|S(@OfB>DW|GW4CZjW#%M!)21p$TZwsjRRic z9aEUrF@whfgQxGFhLnyccq-8Bhq8?PdXfWR=GVtP(_+hYq%o^w4)X${T`3DX7V%6& zM#mDK>sUsMjuo^B^q-1=z}ZsF`PEICF$ptl4tbjDO*~oB?9|RLmamtNC zLFP%NHIe%J^0I2trT=fH!Qt@#@KM(eP$yX*`3l7Snv`=Bi1_n=qB6(v)MsePHD(rZ z%=HZym-&)3@`Vxnb9^X6)H!67t=uKKsR4^WZr?b$>46Cxq3^nOC6z*{U((FDFBI{Oh-Ul1d(x^EBqK5FXE?4x!c zXZKM@OZ|78=~ZiR0k!y%B_3Gb{eG_)hM^b^pqlam-?&!9X=%k3bmA(;DO2d;i1y+& z`mjc%$uw0a?PS}DF(O-72J$}2DT-Bkb}-Ltw5ogqODDB1TIv!0iMWQuPxYF1AEGWq S{~n%%7^RtO%=c+P6YvK@sBatq diff --git a/out/production/github-repo/DataStructures/Trees/Node.class b/out/production/github-repo/DataStructures/Trees/Node.class deleted file mode 100644 index 4bf870cbe21ed8a57d0efdebd7b3a970385b3e54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1988 zcmai!ZBrXn6vzLY1U77!(1t==(pFllhCoScp|*t52P!2P9yAmRO2;L+!j?RBvq9@S zzlbj!XLwyl!i>x~zG`RuE`9;0qyEokErutD;oN)AJ$vr&p7X!?{jXns1u%rC2F_x* z4I$hV^O25Q2FKfCM#Phn*=QT?U`)qd0|ti0+zaErj1R<&8+eG1C2&H_BOQ|lIwi0Z zX)#k`KGBiU5GtszTn(|zL(8?Yu2ajoHAhvG^NymODd$y6LyKdtturc=XOIRht)X?) zF4^uFeerbP0*7&iYUs$=B{fqkt}18VS}o8M&6IOiVZm~2S^LhAyKYyR#4c5p!^AC{ zR-wk=_N;5=Hm0qLA7@q^yX2-zvrb+)8iH{-s@-$WIm-7&8tZb^^&K6aBcnD|!S{sL zm6hi)&udDK>CQZ}HmzjMwF^lCZ>W66uDZNvcQfpZ%D=!j4*g>En5vDXSa!BggOM%Q zoSd4ly>dul=N)TPIaRALC>$m(B5vY5E|@rn9u4P??1hBBW8#XK76fVhrn6Em3A zaK^h;!78mK*-5*!_Mm1LSU3}N_>^tymC0u&vY6NL*u(-BP4vmx3B)y=KCCDvo?ywu zGCnu)1y(ei+&g4;^_j}Cd;f7|UsPRHWT(nCZge%OW|xz5(nmrmtH?69T9t|_u_5Ov zo<__;YQ|lSAJ|MC7aw-Zjf?X#@q>ZP*y+(X15p>AV90yec~o4`$`iI}w{iDW-!i3N zwZEmPC{B47jw+TnxoigT!_mw4c$P0c$ba^l7Sc#>qyRX!LX#%b_Hs3W0RI3Zu>&m; z+eY9eR{>n2jd)pxm~j|wxQWa3bvL5%uAkEoSuvL;n(=e~$S)-4WGwMB0zcpihu~{O z6T1j4#dgrLjo=mr#2c%lbqkj`)tdwKEu0Xq1PD>kBf5+*=eKD`(18^1afkZ4hikZx zyBNnK-e-?;@-5{g-t#Em=hv+WT{OCMvQpbV@psIxNoHYs#bR)%Bm5KEc3~{-cqoB7 z%xHTZkvcl+I4N+ANS%>;h&?<2NJGaI3z(tur*WOn=N6xapqY(>d^7=Ku_Ar+@}ca< z`5%Bi)Kg73r}pDy*`;|N`ItD1#CbxT<)d*D?F8YI-H+2$ooLgM(c@6}*m={dIJIk0}mkenV(_k7s})Z0;RB zES=deqkPJdz4X>>X4m4@-`j#5@-#Py6P#~Qa|I$7iCm(V%2eTVD$il7UADG{C49{v zuy4F;^b+s_Mlrxw5)f3s-C=g%Dh7F-B)uYqhUXe*B84bIZxGRO{S8KReE26i0^GU5 IodAaZ0cdiHn*aa+ diff --git a/out/production/github-repo/DataStructures/Trees/PrintTopViewofTree.class b/out/production/github-repo/DataStructures/Trees/PrintTopViewofTree.class deleted file mode 100644 index c27001bbc648c9594fcf013b4420fca0e48a50ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1052 zcmZ`%ZEq4m5PlX84$jjeNNcIJ*ZNXkD)>_0QsakenwVfUfe;(NxX=Z*Ic~{uwCT^% z)RNf5AK)i{k#Y9GU{iV@W@ny#=H{8%`Ss_=PXL>EY2hkXOgI)ISWS{y)8>weyB6ZO zm&ARnCy=*LKv5$l6B{NTFvMR;PX@0UqWMCD!FZ$g1;bobdSZ9jYYM;4n=T>gs%mk! z!F{RY31|deIbbMM-|~Rh0)N;FhQ1h7>b@ZR(U)FOSN(<*N2;x{Eh^CC(qovLU}6Z9KsyLwQHJt~#RD9qtRqBkco6 zdQPDF&LIuWQEg{idfY#DbTJc8Z9Kzs8!xn~^_gWZcEXUFPWnUhK(uH$M*dwmZCA7@ ziutnBrE@KR`OLz}>YV@nRy!U9qDQ-m#0S+yho$Xgyqk}3}#=ihfBMV z&Cgy1J7i222&=GZ$MqKh)9*qyMNx%LMrW)z0{a?XUnd(6!8+39+hYPUxIs}8SlK=n! diff --git a/out/production/github-repo/DataStructures/Trees/QItem.class b/out/production/github-repo/DataStructures/Trees/QItem.class deleted file mode 100644 index 40c6118ac0174ae84b621e9932bf4d5ebd275acf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmah_%T5A85Ug2Vf~z1tP{2px1u&6|H;osK2?;?BWD}3WGRhFxHN&iamj`0v!4L4G zjI|q%Bp$k^d(u_a-9Nuy-vBO9DUp_0RX4hI71ARH-yZ_F>J66p&iwGEFfkHowjIZu=tXFw3I~1=Zb`iOolI;r z9{d1)D8rkD1aIqM-uun&{AS;K`}_0v*KYv3cu~WXIvlhd%;Tx8)-619AkenehJ{TF zTQziQ=n9lB^cMj!5U2!6lo)|>q(5e)qvS*jxPv&><}gxes#Afj;Tx5yQD&w=HZ?l! zjg2OL&?g6x3N8*txHJ>xy%vp_XF3)A+FzWtHao?~2i;?8 zJwmi>8GoGz2z^uF6BB3j5_=q~g=w`^mWu7+K7~;GCh^1SY-1UD#i^DL_>8Wzj1QFIp&UBG8jpR%(fah7;+zYN1+$XQH`U;5> zx$ke!ApIXG`ErJ`U!I}j``;mdqB=wEww${y>;4*#eq*=91L86�Kiju?dfp-NY*< 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 diff --git a/out/production/github-repo/DataStructures/Trees/TreeNode.class b/out/production/github-repo/DataStructures/Trees/TreeNode.class deleted file mode 100644 index 444f4e12bd944ccdde7b59ddc56bf6ce6f633e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmaJ-!A`A~Al7g(&VS+*KK%L6g-;0O3o z#<#%P!_H*hzIpR@e}2Ed0i2`lp@N2sGWHEL4YV8_I5=dmp2Rx?>oeG?m}rKR!421Z zq*amVLWxB$QeuO{{83yml$D&$sIzh@GpVo0+39yBzj7Zwj(j-S^05uihYOG4 z_}@htYR1}2c{c6cjprhvm90)U#woqOLO)~Cp^=0z16NGbiRnWqaffi1R0JC(;zsxh v7Pgltg&})b!dk-qpn3^a!hpI!{Wd8VHPo?32sGDTQtO1qD$^tcD{uV|9W_so diff --git a/out/production/github-repo/DataStructures/Trees/TreeTraversal.class b/out/production/github-repo/DataStructures/Trees/TreeTraversal.class deleted file mode 100644 index 0fdbab458d0a75475092bb804f55ee51842d3f38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1081 zcmZuwZBG+H5Pr7M-nAUGw6uz#loz#7rHU055KJUSk_Lzn67`GQvVkMlJF|Bs@n`7= zNHp;W_;>tnoY|{Z;@u^)JI}m5GjsRj*Vpd=ns|}JIA$%(<&eTWi-jz1f0rod2b@kn6!WpJzn@-5d_yS;8(=|kD} z2r0ILj`WVCc3JO(!_lc53M{m?Wh4(G-Rnd>t-{8kR(*M><+;+K^wueNSGvAHrS`sc zCeLNVlm1DAqFn!E-PD%)gtCOD&!7=p6;kuu3^k9{?=dSk`9U} z2}~x^d}8(ujgV3pN2?kS>yD)h}Sv{Q_A=axpS8K%5vE z9Ux;dl8=!A)i;L9C=nZ@H&2}vh~hYIQI`v(Em0FIM1Ga%ZxHouOyM=Au}dCDn87<# j@d0x<#XLNU(Dcu9+m*OA@}4$rpW!A&@U&(~Poer7Yhd&3 diff --git a/out/production/github-repo/DataStructures/Trees/TrieImp$TrieNode.class b/out/production/github-repo/DataStructures/Trees/TrieImp$TrieNode.class deleted file mode 100644 index d8d403716d47848d8cce61a248491f242f3aebf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 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 S2C1h=5#v!V9cLhg6aN8@?0sGU diff --git a/out/production/github-repo/DynamicProgramming/Edit_Distance.class b/out/production/github-repo/DynamicProgramming/Edit_Distance.class deleted file mode 100644 index ea592ae09df98421b7a83dbbcb8ee6bbe84a1298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2089 zcmah~O>7ip7=FH;*`3+xl%FkAD7LsR3jMFGxF{5`lokuyA1puCR=U&Kp`EfjyP2Je z#48#TZ=5`sNYI3fF_A-SB;n@8gLe~8CML#%o+SuA-|UuFN;KL1zW06S{rjHhoo{}4 z^xb^`hj7)vZk#ai28J~B%l)K=;UrFB#6TRQQaY{UO#@>%BQ0ljmpS@cgP9gcJ&H(G6))m|q~~4A6C0 z3jG4{YvrK8J+(D;{UN>8qU+N~Zq#Ch3UkfQvSQ;WfQR~TTpDDIgIJ@O5nJoUWER? z(Cn4anb?CCHf7>%%$RrwvjRIKOgAUiFlXXjT$bMRCi1Y^{fHmBK{{M=)1zKc4bwIJ zH7uBLP%z=*ioos-uW8pQ`-QrjiRY2#5Pd*ERoMl+GgSmvB{*pYFe5-6U(xG`u}E1V8=!elMBnPLu@yhYNz6akl4kL z)i~i~HQ_AT!4O^5_OT8Q%I1jc)zB@G1G*6$L64-k+wfOR}nkb#pQUbnr~C{-$RKVQI%}mino4&REuiG2NWwlc_S|F zJpLoHw?%ekz@pD)d+Tj{)@j98p=J|GR8&rEW^SA!|PIR`ZrQc|&8* zA4HuOTGZBow%)IJWF>-Wfk*=VytW5m@V0NpVZ!qo+PU{)kn1tt_=6bbI*B1%!b!ft z!&t%y$~cXWa27X_!!3;CYkJ(r6n?}x{7k=J81ox0MihLC?PSa%iy7AHr?fwkZsH7H zq?BZaLA*rCV4hwapwz%@`*4tw$$BAs>VVE$=Hn=q_YOWmCv6FSc|NaaCY9(yH_s%c z9!h+%@jEkSI2ZBa= z9->P;k{)7+awFHrJea;YPB8K>#2>J1l7PNin>2!=&;rceLwx2g5^K&k?ZRl9q>MPpW_`5v~-tYLd<$0~Mq^Pfs_>5)Pc7fW5mu2onJ-I)FZtj$`4 z@G_b(Pm=STd7A(`gt0&nT+HH1M9raEU&xYdFyb8Pf1O?L;fMVQ0gN%~Fpg4E7<-5` NWeA(#V90mv_&;v>zl8t* diff --git a/out/production/github-repo/DynamicProgramming/EggDropping.class b/out/production/github-repo/DynamicProgramming/EggDropping.class deleted file mode 100644 index 1e343d7fc9f2a8de48b1c2c457babe59c2413c7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1239 zcmaJ>O-~b16g`i=nSr4qv<_-Z@mmYlR;yx+it#fx0>#v@5RD9Ftb=Wb41>`X8&)n| zxzZ>mCdP%jP~*a#iSaM^3tYK%VXWuPV1UH9nD_2I@7#Oex$kDa{{Hw0z!4lXVPdy| zJ_CDVi>+46#9r(((Sd9S1~6!1KXL{R7|09gC*7tS3=71v0}}%BoHyeLY#ec$&e%d@ z+VQX2({&<=5wB|3Cv4wU{t76A+wQ!;_L1}Vn|8ykj{9ECw;K(&Su0$q)z16g+#Kx_ z0v*JzGPX{-mMxVAN&>>=r}kN1!*}Kv>H(d5{F?k40_{$%cCqexK5sWUN#=%1U{~*q z+H-&FH*A;O-t6SatbNxm)NK~71iq>nsL8*Fki%(EUAFy<7g&OXU(Xn@jIyTZ)R1(mQ9`2^<01*a@Z$u4ZFH>?VEvG)C zt!-2eX_l5+#^#)*6=Sio+N3NmY2roedw7^$Mo&%_E%GAxhqe-PQybDPo#*2!%F+|E zEQh2eEqxisBr!Qtw4|KLN5>Ye574HDGm)QvhR(>!l$RvyeOc1Ez7A_Y&83Rz{43rz z7AhR03Z<=+8aGi}n(B7a&Y~BGuo=g>pC)<6Hj}l1z)4l$D~Tp6UrJ z^zmIXL|t^YSV9-VAfg`TC$|0$&7Vj{#xJys7S$LLNeHr9{6j=O-O%UDtvlD&C)FsW zpK_xqxy1^S=a3Y5frDXF2BS!9=M1Xx>JBAx TF2hz?L`<}=v`4VHinHqvzw+Nq diff --git a/out/production/github-repo/DynamicProgramming/Fibonacci.class b/out/production/github-repo/DynamicProgramming/Fibonacci.class deleted file mode 100644 index 7ec477c9a538a7e40076e37905cad66f53cb9b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2235 zcmaJ?-%}G;6#i~@!-i!60Sy`gMW{3p3;jXWO2CRpL4H>Jg{WndEO9m2WR{I1o#~tZ zMEh7Dc)_%zabCEdixqmIPYo9-B|i;j(Avhv&`Gs6gYgopVgD>{rUC}qGM(ZWhG*R?!vBSb<6SyVL54moZDttBE5il6B$SMW<2P@0ej`hsr zqvTpodEB)~Ba+JGgQn`s#j=~Rrfk{5mZ@q>hU6>_#L>-S{#*|c6F60M%s8d8$8K3> zp+Z{2T>~q)Co`YuPEpY50;bQu+m0@=}4otNfaTLC_D(DXm zE^lslR)M3JsyR^`eO)6s_mhbu9a2vn2d+RS(i&k0vr^as#}moJN@PUIbT=&C7*-8Z z_?@Xrl_FA#W$CSzUZRMD;Sf`WDTi5SrV>jsC{Hd@iBg(R&3xHfq#mO*)FG)}R)MBW z(eZd|HfF8O|DdU~bu@X8XmS?O4Af(-dh4*V*4w@(U;&lqIX1oA9s!D z$Hz=05C4cTzpYHNhtSF%l$F;|cM#q|!`$E-XuF7vy+&hv7y27CRo)D~9h8YO0npB0 z2k}LjxD!Lf+e>S2B{j}qz>n$1CrA)h3@4DpSwa}3U8Ut5Ir3WZO@eyGb0I$GU!ys; ziRB0!$6jDMF0sbPw~!o+OR(fsBQhA5!0Rn*OZ92>5e{&X>m^c4$$xWH&1L?sV1c%qnDnWQaAMJbnnG`@Pe>t!>-fT-3ZVyd zBmDM#>1%IK=QplGb1GgYgVdpuionx=Rt?W5QK7{XTW|fJh!v|EnC{T8&F5 zBQ6lPf@YSN3}o~BYYe*B6FEekr@!|3N#yNN8s0O1SP1|6ykia7x$3Rz_Z0{<1w;H5 U%~JHjZ*}EvwQx5|TL`It0m1gst^fc4 diff --git a/out/production/github-repo/DynamicProgramming/Ford_Fulkerson.class b/out/production/github-repo/DynamicProgramming/Ford_Fulkerson.class deleted file mode 100644 index 97e5cde5c2299b2c102544358f18dde62a263f5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3144 zcmai0ZE##w8Gg?0-Ft7gH_c`@n>HVfDW&bEk_1VPa z-M!lqK}B1jejy4Xf)=c3bcR0-x&`Yn@Pj|h_`_kwKh7|YGdj-L8Ts2@waff)@)Tku6Z6oe1QT5uB{mPb>^Y!E4=CCAbb zm-}%Ib3quG(J?P~J4ogUNiE1FBXzPGazS(;A4DGtk~*oO7{o@*$U|uz9GsL(SsqVm zI4u<)k(@=jd`ZKj{=^6K7j--q#Fz0E9bc8kAD7G5bbMXI83Cn~GIIiv@e}4LbGYo- znc+!ta#nFvz@I!gCLodmt$Xvil4ItaDKk^H$eR+-Q)a%-IY%;qiRR%uJa@Tb`>-#hJHD0$axSE#}Ou zojO#^&lSyV*3QihkL8Q$V`Jsaf>kW#bHt})O`G65V>2H7j7hCYr%2^d*R@%kqp`>u zVu5uz%Q>AdE{wUL1F>XsfH4SLAmGefMFLd3O%xbY!7N%iM}n>=YRXDEd6_41QlPy- zaDUk9*@yyZqZsOe5py^`&Z;Gvxj+t6GU>4kJu|YMQ)$jzn zSs*y+VjQz&Z6nRK8j?vfI4PfDqUs5(cAADK4LpT&QsEm0K8afld=uYdA*T8h{UaK_ zZQwh2+Q6+CGVm$H1va=w8nRf;l|bJC^O62qXZG8<{)RHsnt|`)83T9VPDy>w!1wX2 zflo`Dp*k=xT@uf827Z9&4g3%<2z1mn*v$)8dfYBK27ZJWnFj+e;l~Dkg7dW)U3k?z z8+aM782BkJ82A}32yFhp4KCZpbmj?K!>a~2s^Id^r;ZfTp8yjf{xEtVWB%bt{z74;g!&JQPZg|b6+%gnN2HpbQz$eHu! z%k)~mcu02s>cxnQhV~lRweiSEhgHK3m31dsH46nRmlhaYOQE5yy@=|Q(;G_;{1372 z)WkQk z=+G|h&lcRrHRj%*llP;|&Z`Fa7Bk7!rzA zBm(g&ClJ?EkD-U!B%xA8^9ar3XmLH%PL6sR#*s^C4X>}D&9A?KPzCK3gz3H>LjvoG zwT)4P(290+Bf=zgFm+KTqZ7Na0b@+!1iEmTQWHHmflYi$`x;_Chh5Z^8R4Vn#q2-h z<^|%-fFKzPvi20AO)Fnv}LODk6{Vw86~$SV@G46yk2gD3mvA+_Wh4;3IZ;b{LhBjP zqk8wtI7**`QGL}xJgQ6Y|H(>ACtC?xs}@dPX%BB>_1vnpO*h^c(U(?U?b5obGF@}D z??$UfhoXUp*$k1W9&fxZ`RR#9jx_kYUTU*KZr^kSlJ!R{q<@aoft#+Rh${;cg6Ik|Ubocs|N5JHzpO zni{|6fWE`g{5{X_b0Gi7@8w^4>+c-LE42P0yX`7&7d|A!tr!*elAggXF^k<|0e6Tq z{BpfS`Zeqk7qM5okA31#*e^byM>(5kiE0yj`7ZiW@FWgk4=I%x4r4E=0IuU0_L0(s z#XByAZt)KGv;Y0{be`OMc=rnaiKKhuL;M5x;yzlrioal-HZ`!{agb8}keVRH&!hMQ z4w3TVezH5cdv-s+YIl-$AE0ak>#tM&BeZJxg1Cmx>*&)k^%4K;ApV81s|fhoS2&?9 kLI`S5#BEx`VZK$@@X&P%u3>D2Pn(|_5(AEK_2I#P1F1gd9smFU diff --git a/out/production/github-repo/DynamicProgramming/KadaneAlgorithm.class b/out/production/github-repo/DynamicProgramming/KadaneAlgorithm.class deleted file mode 100644 index 3dca5b4812067381d1b16e7d89bba71e5d449008..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1265 zcmah}%Wl(96r3B|F-={dkCf6jJX)Y>O5?sLkGA1aK#B-ZDX0?ahFjN4T^ze|Yy>+N zd<7C4gv5poEC2!G1K6`*%?I!Yl(`O40aap=>vQJZbI#1f@|T|KpC)ZlESC_MfYP>+aA=Nu6=~8nF-m_4)x#um-0Pn5rtcrEWyQe4ejE_!-epq_Vz=Q^V;lQ( zk%yMuaDE}Z`d%o*G2 zl1~D9v8sj|jvuyM9Ot{*#kUyHAe4nX4>Gg)6nq+`cMz``WYEnsn}S{FVQjT8pcj42 z_9+92sOGO6X7D*z`n;r7dbD|c_$dtSm9{uE{2WILrJ?e@N+GYmK(;Wi7oM?Jc_PHi zo$q=575lVwR~em*`_X|zq&ProhnWpx7(*E0c@jr3j-!|$K21b%nrrW6#{jc#jIuUJ zRvK>%G0L!Rvv-h42RjRlbj|^dFm|}YFgZ~OO5b6d%9t?gH4HW!9S?aX%*CW8b{-1|50hEpjY$Dr4JXOUN;v zpyWwfSf-^m$xTtDO>~CzXK|kLmiR?cLM!dfeLOGO-~b16g{u=rc;JOi|te>Rz>`10b4DI37{@C#>QevYA}R_JlY0F`awzoi7O38 zH}2TzmIWI(x=>?`J2(C)@VqHnO^j{l&3)&dd*3~0CjD{ncLdwPnMlFn4xG3PCaqDjDx`2^P%?rqzjdDdGly~cudmFXoO7p&2t`a$xZwYIKGtJ4C3RmMfe0$s`6BEPv* zPC#t&()R}fzO5FQMedAERV7yEqbFz!M2bNB7;j7E(ejtco1Rq zS(pgo3MK^x|D#zT+?l7a{J2u0y50^nt6GmJtEQd^n8~&qe^eB=*IShu35^ZbIc;rj zBQr-~Ey}B?8eNTe{r-jptTj!l(iNG^rRFijCm!JI02rYCu(@_~m*HLTZjO9{c+bFx zAXmQ!TIgXMY!lFn5O=ngPlUzdAzNC+b`x?bE|+=%tic{HSRaApS+5YsAbmW+{8a=F5aL6D?@(JNEF}07 zf&uG8-BW$$AoVa(vH=fFh!FlL9yiz4Nz b739V|2YjrEc&-?%3(+mDTd<3MhlYOwACAQS diff --git a/out/production/github-repo/DynamicProgramming/LevenshteinDistance.class b/out/production/github-repo/DynamicProgramming/LevenshteinDistance.class deleted file mode 100644 index 03b0cade40f3bc4cb79d6162805e96fd3e229ed2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1769 zcma)5ZBJWe7`~pKw{keZEF3lpNPXE>UIwGgZor1yK(w>02oq;WWT)*39BfaU_H<_7 zm-sK#5EBwZOt!>s(L_J_#UJB$m&JKKr$w0X!K8ie>$%^b>%Pw)fB*a|fGfCfq8BqJ z(R&8QrA(WM;c67uIxvel1M?=Ln2F-LlsBSSh~j+-Z<@G;+tPVaq9p?#7+4n2uY0~1 zEC?vc(G3B0u~Kveda|DH-ffigZtb3vFHsZARtipO!>M`l-d3u?j#n2*W|toMPT4E0 z)+*aIr(E{@?WwH$(Dmy(f$RB8UOjO9f;%r@(B_pJWfo3mGMUkgfN=PiGS7cOpldyF z3SX``)x*lHTWFM=z}+gg6A4^QW_O*3&Q!@^sr8`7it{HmVS0~gclokHr5?z4oQM<9 zO0K`fHbTiZtiwWEWrs1!=4Qsghs;rSJYS$cxp^{6$evT%CLg`0m<7!BN~2bAmpw`6 zxl`zwl$}}VgUwtb`-IyKuT*qv0>j7BCJrBw$h*N; zuInc(|8J-QXO7y*<#*iz89SzG z4Ttk4$J@b9xM-ZVUf6MJx9F-SGoy>IM?9(rE;mG}G-$V5RC|@FRZclzI@c+4lXRzA zb^W5irBha6^u&DH6frOwR1SOUOP+M3M{oF`*DI2)s;tk3POHaH#|Z5u?uUHR2HxVg z*2}LJP$A@0dG_-*MagkO8+!)vgdl>mJoQi+#W`ZD<$wXic{Ak#P$PqD^j0Y2@xeWq z@u59v@q@uQ@u0+m2SW$6Dq+TcXkoO8PG+2q99|1XrZZtHZ&joDfg>bR}*{0<#T+SrG#rj0P6txKU6Q?@?&FH(yk zrjF=2G~0NPd#tnSld$&QfI7s8VH%I9xx?9jGch=oZW7Z^!bV6;l5&z1TqWf;mo#4>G8i@4Mr&9LtvWJr z+7Tp_*)FmtiAIRHPxz7j$We4-AEQJH`}`JTtf_|MNx^)@vbuo@{)8}~2;c?!ULqpe z;w7RYF7JO~<^_A}z$JFlTBfg=Q7+SLOwY#jm8UR%LG<%y=!lt3baJ$vF^k891YJCu z=x(BiZsQZrai)nkj<&b8YnPdBnwvbsB3E#YG|Fvm?b<9C|1xh1(&1D21=CMHHNtkL IX^9~94~^Dfvj6}9 diff --git a/out/production/github-repo/DynamicProgramming/LongestCommonSubsequence.class b/out/production/github-repo/DynamicProgramming/LongestCommonSubsequence.class deleted file mode 100644 index b0bcf9e541e301943192deb8f8400520de9eae94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2516 zcmb7EU2_v<6n@@hH=Cy0QqrbSs93)sA5BUF7HFYRQYlEj$A_MGRO zeSdoR?L7edQSe{~j(9MNqi!6Na!f-+%HtmNAf{p51GkNMO=>6PZ9?8ox^c>l*Cp(9 z3*wk`V@lemJvf82Zp^rmaAQ`Q-q0|o;hcc$a5|SRj|w>bfjI#smR~Xjw#3spbE=YE zG>fywVuluPJfAc&b4D>OpX)}YyqqoxgyZAab4E6uJX6f4ibgh@&ZP$8`CQ5@m1FsA zHlIsW7E9*46*HGKNBGW^S&qjN0tfx^72}FAkTDpLC>I$wve^>YY!VP@UZ;4iu;@~` zI4Dcpl+5-;DU70obj~-$&`C^7CRv&^Sj9E6F+b1bZHcmxygX?XtbR4TsUf7{ybZPM z6&U$XO)y{6KAe21K+mSKj#tu|C9^ofakKiYkvB3aV06TNIm#|6v_K*s_u>Uaxp>)40=0^6SCvR;smOJMXOk~)@P>Uak!f%fsl zMB-#(W+E|ja(0Flw~mj^&POh?F{IU&hR(%FA{@ULf>8_D!JUaVyh{D`v91!PFR|Lk`?!zsUL;_^6f&nKa>h znv6KmWEM=oEjKcpg>QX`{o0Yh1p<=GMsbWe75}L~jL$})VCI$tdi}A@3)0vE0j+3W zF^eS*cBlVYICnYU=%}j+kYC?AIuh4QWi!ie^A%R)vzIWPA2`D=vCK54k!3)5eJghI zk!O|AY4N==4I3!Pq#2HR12v6&JbQY{$Wy-q^zl^N!4nctcyW8d9j7)x$pwZQyaVwS z6$f_l?y`(dJWpM>0Zj1%pIYQP(!yZJLE<#p{tn)U7WxsYxE-v*aTA^p#V2riowtKt zXBEn1$P!ci_moRvUOzx}3@gqd)u&3+XV}`K_|&M=IlZciwb~zw^hluPaYlXW29F){ zzB1(Uxop%*zfV<`qG6wl_bOaB(Q9S&xul>?IwH!Y=`|dB(h;c}2>2WwkMNN-v_1Ar zuew;+4XeBlf}tMeF0|Y1-D&YP2Oo7ee=YEkvF&Ih$y>-(2LkBC0s3R;#%ap4*oKQl zn3R_}ma81hM?`-ipGM7RtCL>AED7Hy6iU+&Vd*ZL1?;9uo#{DbZX zaEQ8ifL5`u#)R6FNCAh2sHm~rCO)V12_{qdCxpkOy+xvxRk&mo-@$$U4qB$<4h<=C zg}4REEzJ1TTbK;`6lJN()so|+{1iRmhOLU$bE`^iRjsYne(9G$ZcKy^- zSb#6XRp?c;J)T~a69c()le>0u)WoW9CA$u0T*j*yBIE6hloM2#eW5-<$$cA?hv?F9K#1rLNz6eUvWdZ843l5$HE(;| zyJa%ee-|B7;rm$m8e8jJdA(J1lBrJiQ$^Q0hmXeoW{z$e$-w4_ZMMTv#dbTJJPz#j z-p#te%ABmt#bwlSgo{1Oc8}sXj$xh@UFCvHQi68PM1`#QibW5PY7{Mc9E{G86hE^` U0@@)S;%Z}=_Oka8S{*q2FGOr0K>z>% diff --git a/out/production/github-repo/DynamicProgramming/LongestIncreasingSubsequence.class b/out/production/github-repo/DynamicProgramming/LongestIncreasingSubsequence.class deleted file mode 100644 index c8e6ba84e702ddd062573d97ce4e99d644b46b6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1480 zcmb7E+in|G6kTU7p4ge(n!0srJ0+<@9mla7NCGq$N?S@T+@z9G1d5OtPmbJa?Xek; z5qa-d@Pdet^3oUj&_+;I;+4PP3;G^a4eN{@rAQSLw&u(}>+H+gYajcsH^09Gu#CG2 z4C9)Gr8qvohY4s{R?CXot|pMcM+tn4Pn31t!kUG3f!Mm|d*P;lo}b?lFmAQ?q`+9! z^W|2rRhPk6PQ6LwT(#{w%^fH3)P4XO;RCNLuvERh?>jBey&tq2fzxVvexqD%`wiI* zE4~{@r%R;Pt9Rx1J?Xo0jfGl{=L=lO?^Yi=KRD&4!5gwlk{hXk|5|i(6 z6VSRYkNOFEq1P)T3P1A<5G_7UKFpv$lKWh%m70J_7j2?T zKw$h#_3ipY>4yJ;YWv+#QUXoQDA^a-YnLm2rx$Wa(rHoRRQ{a@YI>G0f8^+yl-G)K z>Fplvvqbkf=d(nU5f|ov3ucava%z%*k+00}V20OrnD-noAe3fYN4YEWE%-JI&mn%J zp<#?`ECPoxPTTG~U;^j3i(?Y!iKyT|p~K{R^$%#@Jca%oMs?vC%#F;8#FoBlB#q1g zCKi*10=FL<;_&3vQ^XdJU_HZ-s-{QPW-&y2m|vR}N11;NSz2>^FRExacz%&_TWrcS6UFlguJ zK|8s0#@IW+bUO2$*<3XWNu!kg1@WY@afn#bSU)`ZJM)A|`{bu#MFse~AoVF0zr?~B zTxRiEuBXIDDPV3uJQq=87?C+*Y63Y@SHzWdl~$klFdKc1v^a*Qkt{E7pR6!BBc;78 zyj)NJ1XF*Kev!CmY!>x`UfMR4_~`@ORpg6$=>Q`R>VsMZw z7B#|ZcZ7HZMl(Cgo^^XY8vGTq%dzh{UWco^O9c+9$gwO^>}w>s#Q)4?{`yw%CD!mQ zahJPOB~nCBM<^MaWg9x`9JNwn1Ya{(HoAyAj67B1JYugA7jH1CrYELS6UP)lpu}hm G<$nMzu@HO! diff --git a/out/production/github-repo/DynamicProgramming/LongestValidParentheses.class b/out/production/github-repo/DynamicProgramming/LongestValidParentheses.class deleted file mode 100644 index 0eb525fcac690cc0cf6b4b1b834214efe416993d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1711 zcma)6U2_vv7=BK7H`^xLHci=zO+gTaP0}VRHHaxyY(;`eTMb5_I@4{klP)Hkve`KF z*6{~;tIRl+n_kF_1LG7%7%si=(!b!pV9@%U4Kr=2%s7*rkN5j|-uLVu|NQnCz%;&$ zB97@O-bP+7XQFrqXLYRh|-2n?58&spfURvrJcz1pNCQEJ!hX4Upxd4DEUgEhA!Fj<=4@a&db zTk_it-)^;BuaPUYy@t~Xs&><@FWJ811#3>n=@bOU8&2>7t$=BjuG?SRxu(q+mB44H zLaHdBxnAA5DIj8Y1s@hSPAUfS7m!WM4{uN zj$=Ab5PZva=`dz39}FzXQ96Oowdv4EwfzRej{b)!b9ZV~^@4N*x0$QdY|nH20(&G7 zt+cy-&AH%8UMF6_L{_q3U<3&kXrPEo20lhfN7=w@SP&QqY1$iI$D)BHd?LL*HBiB2 zmU*M=1_nMu)xcrAY~XWT(Q(zlH7pzW0ttci|8Jf^e78A^tJj@cuus(M7l(=zHG(yA zWy#*fg7zGna^Cmt4VGl3WNU_YBb9Awt69aOwBD1Vve5~g7WtHIF?)Qv?Of4Y?*`1} z*e#CJ;b#-`oI*CN-*avTa+C!QS*e3fWu?xIuH9rK_sv}oS|N3f2-;m@+|9kjiQLUS z8iHWvJz@cUT^cpzlvqVshgNI0I}VQX9me^90R?Oz5?n`l%W)Unwe)?6yFB#a5Z6d3 z9E8cU(KEmpUgB*)_L34hi$7_nQ}%26cf``$=+kaPQ||DjlroRcO+1P&OexCZl$uee z7MpYivdT5uJGBy6RdRALm+`>$FQ|sBf zTF*z!$StHZW+b#c-m|1mTQMVQ{T7TVxo2gfl|@sfKKlS_Uj0@RTRY#G>K)dtgjg?; z43Hc-yFMRF2g zlKx5ZGm8%WlKk$GCwd>{K8m043M25n<3~nGlJ#-?fL9q!VXh56vm{i!PFoLAL+tRV z>Nu(6l+ab z5AdUmZwv82@UZXA&c2!1-S3~zF8~Lq8AxLzixkSTY|65wqoQM*A>{Qt3pda$#Q2703hex3pA5v7kL9xbV5QmO?Dx}%&?65W9!tcahByK(7@JIyy z{tdt9CUU5n(2+5bmBm1Yq4IACLqW=#9;e*%-i_LbUcoBWGPwdHnjDkcgt!N+;}Lmct(hJL ztkI5~l3bP`nXDv8W~+pB6z9oJ>T)V&y+e5=FpEkj+C0+QWZs{jB1 diff --git a/out/production/github-repo/DynamicProgramming/MatrixChainMultiplication.class b/out/production/github-repo/DynamicProgramming/MatrixChainMultiplication.class deleted file mode 100644 index 8a90deb45540c88039118ff9bdb0b8496a42aae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4092 zcmb7HYjjlA75>i5ow<|YqL3Gm$t1%gFcU%oV+uk-Bt$KtNhUQ24JhW48IlW=nJ_a! zpte?|t&i4LTdUG)HGQPD4B?0d>M~RfhXjpU-96p^2n2N_?qNA<-yZ(@r(y&<@)O$e8YohJ$TN8Z+h`O zUeGb@ynlLnTB`e&7n|{I556OJzN=$I!uy_NeqYCn@){cc0|71FYbFGW+K!mV&AOqC z6|d_eClO0E2)GBDQz`SLK*^kK#cH$C84471S$zpJGn9%6gcp)&Y`gVj!W^)AJ5$NN zlsPb9CHm^x%}mNV(a=N%TG~3rv!a#10RiWM1CmPfHz?qc3wNWHurf{D3x@XcKua>p z12?u=iCD+bz@b=bk9jCgPGMWJ*NpEqQP-$MG6IXcGG_15c5_hKqN7X44|VLKrGvzgi410}0W;odreXw*iIzM#48v~r9Lfl8ve z&Jyr6_QrD&^mZkOQoXU;Eg7#0I|~-@f34JFpcT6XmR+lH=a3awn3pM>0hvF6L%;79ne9L^C?C=d+9PSgfAZ487r210>t0Ru1Lya5YG42)t-V8wM4R6=;!Kof2; z@Cvd9#xcPd7KuAi7+MVeh z0yWq5`~peAV9qLO&BRh>Cdtfon}dU~L{wnILh1T}e9UDJ3$8ra8u}mGo=nm%cY)&I z2L-9XLm#GN^a;D;LU+s7#hO&5=QN{)I8V&ZhKA67YO-d`Db3%de3dtox9R<6x+8Xi zm$41*w&Ltc>|!}r_QjOP z=i!?%+@(6-HLjl1w{^82XKSBRnE60&{lCCp)8%A5n&wMFj1KvN%sRYPw$&Mj zFVEdY7tGxV?Zrwy-o^Ypal=262CZT5b2{p4-aMmfy=E?D6 zT-9+FoL$x95a&ra(8kfNm^#`?8@2#C5aFr-o%lF8JnTG3IX58Q&>Anm(LD}lp_YZq zmxa4fCy|9`0tM|g&hP}hP5!fRk6>MmCRdxa3s}_c^OtDjFt)iyv3Lc=Z`gN6h>_`6 zxXj|l_L^6*MBo`TkXR~k8H+kbQCL{yzKG&(=Y}jwCQ#bdt&v)$C>N>alFDMmzLDuS zm7cOO_(tK=derb1${l0yU(2XajMu$msB~^GSBqhJ%wHaMOdv3d3Y$3NAilpUk;+TM z*ffgD^76AN;!WjQtRzHY89||3YtcMsc|@JNI)PQT_F*iQmaNWVjoSGKS6Ni?z6q@T z5Rr-x7b(n#V;!SFrCOL4)iNxMNEShPb%i5C#ybGZ^%u!>L38vKbT|AMvn8|i-{gh^D3 zRS1b7Hi-4874@hSjhuI4lh}o@=)g^4AL_+DoMYH5j$(^AhMUDHY!#01t9S6C-A-^X3prD+43L2;4DJ-5dv6T7z+O@{dbSD7=yUTpf zqmmKKhj=|hT$T^*nh~s*(XC;0%b2ufVP7pHoTIcJ8E(1HI$1Lt_6jxy&?pxjw343{ zA%0cVvspB=QM9tsrK?Nr+m(~JWGa|5ZqVRZxsGW0fssRdjvAd(r`BlK-Y~XlGj+9E zLa5bL6<7Ph<%C$;HG#T(HT;?TtOnH!u3QVVgMThX2&a>OKt&k8JJ<(1*z@)%m;qk9 zm7f~e|)GHy$t$+%6yOLqq+snIJxn{4pnAoIpWspqr?`jCx7Rja=& zT;`0N0qg(ou9=PdYy-=pE=pOxvK}qEodrju3O7Z3P5$y>w5zqhmXlxWp|xy8l|C&> zMy0>DUv`k%{+`WR3CmF)tQ|(NO_gX7Mvg3hznn*A}rx>CK>4`_ldz>;)QTADW@5&H2v6(wq>9P($X+I8= z(&*a=`bascZGXpv?bk^DtqsJPQv(X9{UR0ND0zT~-28J^ud)tU oegT`iN3mrbH;*BF0bBVvZ5zX4=`^8QovqWuWGNsgq3%ll7X+!oW&i*H diff --git a/out/production/github-repo/DynamicProgramming/RodCutting.class b/out/production/github-repo/DynamicProgramming/RodCutting.class deleted file mode 100644 index b8783024cc6d2e957d8d3468c308e868b00a7b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1277 zcmaJ=$!-%t5PhAQ@i>!7>?~%9?ZoWPg3TJ1EI-{GHXHc*Z!t(u^xD3qIE2*kQ!MvueujQS$?n} z*PFN|hDg+x9`E;Lmy2uiq0Cn$F&D!?;WZnP!78cs?{dwmG6+~=!+Sz3Yq8!4%I{Hg9jjOn3;<}A_+z?3rS6P908`N1@bIYMXPusO1 z!~5)(5>wi2OZdMs79VefuFrsagL#RTkX}81iz@HI8aBX+Z z#8kF0@}KKySa0bhFp%9D$O8S%PW~mt7sEGF3#%M{VmCrdIKbx~;~xUhK!woDwU4Jf zcfs8l-GX>SqXYe1BTZ)%1GMc{020{4lclCYk4pXugOR{|Qor}nS{T1wO77k}=o9)gL%jO^jXvFZrqTQ|p3J>wDXj@VN*JJv z#cf(WWE&%V97D8DaX-(fY5M0#Nl~0(`olQ;q7*xv!bdr75!+HG{Y(BQKw|YyPZ-b z-tUym_<&O!`!xL)#s@@7TQK{go9G-%y@R!hu1(mR=x$3q*px0wrYUkra}q=BD~(CA fQ$1x`SU7^CJSEBT7$XF~A@(;&)&e8E>A>h8#{LPI diff --git a/out/production/github-repo/MinimizingLateness/MinimizingLateness$Schedule.class b/out/production/github-repo/MinimizingLateness/MinimizingLateness$Schedule.class deleted file mode 100644 index 60eb646daddba6aeb48ae8a03872cfcb8ae2ae0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598 zcma)3!A`Y!vK_Gn@ zM&aU0Ak}c))1H9QnGK{s&I==XyPWpr{NC?RSSfh3z@PN|d8qQAqOll-RLXRNksK^l zo8v~2oOdRE9811A^KLj`8a{>5(DN5El5yN#Egk;~TnO0R*>WDp>rly+R(o4x|Iv4_ zj+%oEEC;rNH3beV6Ndt=)vx{4Q%?5;`*a=r}$(sot5Yd5s8Ow1solVuGkiCKx9fH9SsQ`t&h34{}l zqulYlRW7TtK=8Ef*xnfdU-a-*0snY0OQ-gv?WjwY!i;jKtr;EGnJi|k{8h`f^}cTO zdvi8(97?8`q+l=GPA+MA%2DNVtl4ym=?j+a2y{oUCFiZ1RxEEhx!9EFGVqkXKHwD> z6dn3Dk1L*?uOCnA1AAGy%p&IbmtZ!_&GGuK9g+#OWac#LrfYbjA@ppX*u~gbWp-A% zDtkp)*;;zjcCu=5yjXEOBC=f9S`s*R?ZJv1*kW4av<0N+E=}77GHB%M)Cjarc~)j2 zWtD0?N*t4zt4+!Y0rUJ~MwL9f=#(Xxz?>>p+>E+l>n`kRW_4Is7{+55Ag{G*n`$Bt zTL(JLW}yNh+bLDNVQ~@lEj-~xFE%?3GLc{&ho7Oll>BmsOX3a zZVC)HgW93{4Ppd(YiM?AE;;MhINl0l5e2Q0`aL!GZKE<)vGZ(I7|V!-@iyMk;@vRb z)7x7*?tQI&fSAOGVSI!Yjghm^{%>|?W&KSwi+(SP`^Hb-OR$wnPHig!kO+Z6C-1L9`f+-EJxYZrOITo`Vg8TfXERP=vU%^_e zBTC=^9^rRe|Fl4G{st%yau?$&xCV}_L3~*|ew;E`GX`;pdU(?TQ5@zjgd;f0Bn)oZ zML!b|!F9Bx*WpWd`qvOxL-5j26*4t=7e?Iw6+)e66%TQZ_^Sv<{NJMWWWW~>YNvGS zdt6^fTY9jweGR*ky@3d`wWg0&(ZTTgvWCv7m7rjXb#$fIuv@$Nvm;+4Qbl)Xdlh>c zmL6KF=;e)fHa_>or7v#y;-LsH_h)b8BK<-m5xI(o>soDLq8qE|i^#?H%inz@d_M-+gyU>Oob5P^ zM=?QbmQ3at^$FSil-zzscE6zKDu(a_hVcuYz^}CZjuHIH=zlOO0(i34nOU+wfk}D~ zu}8O&qJNAXVn-Ntj2OD{2jh;jUmc7dWt@*_ej|by{Ivg!r*HxR?tjA5v;~P_9w(_u zBFW(tH3O%aX#oBWx=D#=cy>nOtdMw?qw_ar?!gd3{KfzM&(YIQEMvTJoO%n+u}%;t LKenv?0L*^@76Sc2 diff --git a/out/production/github-repo/MinimizingLateness/data06_lateness.txt b/out/production/github-repo/MinimizingLateness/data06_lateness.txt deleted file mode 100644 index e2bac0d1cbd0..000000000000 --- a/out/production/github-repo/MinimizingLateness/data06_lateness.txt +++ /dev/null @@ -1,7 +0,0 @@ -6 -3 6 -2 8 -1 9 -4 9 -3 14 -2 15 \ No newline at end of file diff --git a/out/production/github-repo/Misc/MedianOfRunningArray.class b/out/production/github-repo/Misc/MedianOfRunningArray.class deleted file mode 100644 index e5422127df06070e3edc332ad21e858def50322b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1953 zcmaJ?U31%15IxslvRyS%oF;7=5(*T^cW9tcnh$6Lg@9AHbx3i;M-^Lfl-QDy<;;X< z{sk`#)0w^&hB_U>Fg)|df8bZ}P&g|qV<+SA;JtgV_U<`ncP0P%{MX+ByoGPl7{;Q8 zr8M5d`)NdQBZXev6mLS#C)RR(=-DY#bi@h#cd6_H2Pa7 zcf`A!#64N_V%F054C@;1D@1Bn6o#@p=AJp*@a@X%9nW?>+uy(2uo~99LMm^U9n)`k zmcqn71Jrtt~kC`w!HZzUXIk}6cP)zWBW@A(XsJ$h1jxNVy@n-?O3-P)lJJ= zGdC+d$zXzp# z432dnBA|--`@1|-IGgv);_j+h3jq_=07GG5Y`n__)}0cnrtJvYMn^>6_eg0zK(mRs z!Z_0_lYD=dFb33E5!3TnrHvJKP{TEablz=vMeCL=1sUolcSc&J<0ZVTaQ>9GY4}`6 z0S_c>L&pmk(Q!%47x+@gSNK}TLomrEOohH6NoVVH6eXmDfWv8Z*D;214O=?O*goPC zq-j;+X2Y(OEKkQYW^~xtq2x>A?CPkXs=?9Wf<-Xe1ag}@R*`)iXbW3*D;1vEuER>| zp0#Irbt~sFv%-a=76p^L>{e^0XZo(kkr)am;p7u(Pt+`xq`w`_YXQ%XKVZ}9_O}$y zVPyvso>g`CxIK3S6(|hD8C(sx@?Ck2OhIm|^vf+O)4QVhyqfMkfxSCJqrPJVW#V zv8RX!y8|SiLi;Jmb(uE9cn~WFgMJ?~XYeXd^i~$UhS#}MGPof^Bj5x~P5c6FvWet< zahgbRiE}B%9w8%s>o_eDf)_;_ZwM(|q^@C1(hA-nvodFhC*A~~DXwx;iOZKFr0_k1 zMdU^Z*+NSFfXl6eGk-vD;%w_U+&qj|o}uT-@f(j|v~N7_yzwN!6~;Zp2kYC%`p!{9 zyE+>oTj7{QbZ&&-q**F^16M+#f3vPqU-uBbg##E_BlTOl5H-@dLd?)|g*bl+Bb6&? z@mwL9$Q6u)afVhi`e>6zPi{53G-9NF#O&nM$P5KE(f2blhv;XzbFBVA6N8!aO~%6OaY hSG;)@@8BA%E>e3Dd5#4Q?`pWN{t2|s^EiTq{{Y+&v26eV diff --git a/out/production/github-repo/Misc/PalindromePrime.class b/out/production/github-repo/Misc/PalindromePrime.class deleted file mode 100644 index 72f46d9fb155c6146de64ad440bf63e8d4c330e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1653 zcmaJ=U2_v<6n@^#$0nOC`D)Xeq!LsxZG|XQD>g-eQW{O68mv~-ahojdLb97~cB{Sb z41YnGamMk68*bntWnji1;EaDn|AC|8^ClV6DIF)1_v5_hoaZ^uIs4ncPk#k4i*Ge# za8AW+6z}3a4GQMu>HP@KYxn^3(o)tih6N25@L>cWN%KW%xg?j%Di$@waZWB*B3P39 zRkDC{C>j1TQ-cQy^ZoZ1bAm+A!T4#zvEtRMn{)%{9Zd$J>O*J_#b%+@k2oA1S&)!W97QED3YW~t`6mc2ROLo?h> z#;1>X7Eokpx*zC!Rp}!jk27yuyp@R=v;@ zuv6G|{KEJ2Q?aV!Q+%eQh8sFgWb*$kF%5+xK@uhs5!CN{`;Z1?@!)jmht!Be? zb*zIr2}Z2rrjD=i4a+*Jc>;-Hj_Vt@%{tXMV5;qQJd+ZS_4{KvrHbA5J@(c#TI|q7 z@yG|+^nl|t*D#Q^+QYzf50?23nAur2+V+}k``94y;Zag;^9QdYd&WU#YmW`-uNdAI zyW81z`5G)PPA&E)M>>a%cH6WY0(p+mOG7%4jrE*93if~eBc9WrbLv}sIq^JB@bk>@ zBL_lY!!W`172ZnRg|trZLp@ErvB116tAS$~Yc zK7!T92&KYZs54ze7V=LJ9VX2X8;BsrBxz{m5JR5nB}k#4i2DiNVn}h8Unk52W8T0? z(u&Gi8vt)3NDG0(<=oxu-6zm~{0Yfyu6-Y&z{5SEJb3;`@F5)ny=wZvaf~2A;3TDp z6Lho(oM9q`)f5RLg_y(?Prx+)8UlYq5vjjOA}Z(o1$>|fpAVF?_b{GIXj|o6Hlek@ zD|2nmKY0FUZit?xnqVOkB}_gs;-*-5mP*RfB?Is-%k1kv)8ir;s8A$>al-Q}9Kb&v z$iAGtkKiLIc&rOOSPn1bvcF(9Pt`|$#wl*c?&0{J5OjHl`1(E)`7V;FR2S(kMj5lG zP^sT#hx$TIvt&^D5Vap6p*V>ose6XXpQJ=ZigS@dTqT=f*Ooa&l6oBH@pg}T5_3Hn Vm4S@G&_9R?QIfOw4m}l|{SOGUOHKd) diff --git a/out/production/github-repo/Misc/heap_sort.class b/out/production/github-repo/Misc/heap_sort.class deleted file mode 100644 index f062de13f1330973e329fc5f6980e2e143c4933b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1705 zcmaJ?&2Af27(LfB$ z?0~ZGBd}vpsY2=+7A~Sy9)MRsYrTyC@S!2Q}SHr(cJvDT%< zZaFNE-XuKwnq%^5Z82P}br5WOtG+CH=%l2A3}<2#Vx%k+`8a~l+$3z9|CN?m};IE2i;sP#G`5J}ucCu8+JQda+0T0rV0Di0ZsnmxWc%pXjzCodw2nXAK!~G-UrOA$CZ3edPPPeC!-OJa05{g)N)nD*!Yw7{)lJxhrxO z63st__<@TU&T))~pn~&Un~?$Dz?<9&DKtmv{43vz#`(5$G@sEL>du1w9jv^Qv3rO; zRF0n<|B;EntfLf4s-rk|q3YOawVHQqRP9HwDL_egY-wEOkk+Y0CaqG6QxQrm9V}a+&<0BwA?0y0x<*Df$*IgDmyqMj zn8G^ps8NZeiEBcLvCGWB_tbBJZ|S4(d?tT1r_5(AKE~A_p*(|Hf6AW96ncoK^d1sDBzrI( z#>A83-)PXoz-he~m;?MEEBrzXxKt;ZA9x^Bg*^@OEYD{SLuFv)yy zW7_Fqh(uGvJy_097&(0#mqKC7OghI@3lx8ml$Q9%u*}^`NI4&+#M?XtE$zPe6TH?) S{Au=SfiFrS%_41Lc;{~{0x84* diff --git a/out/production/github-repo/NodeStack.class b/out/production/github-repo/NodeStack.class deleted file mode 100644 index 4fd06fd870c1e8211c473afd4957b77e0ef2f699..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3835 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 diff --git a/out/production/github-repo/Others/CRCAlgorithm.class b/out/production/github-repo/Others/CRCAlgorithm.class deleted file mode 100644 index 8b6c6b7ee946cfeb73ab3f828f5b1f3baf3f34b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3637 zcmaJ^ZE#d)6@K3R$W4|@zBds__-@#I&{&}<5{l9U>b6Nhf~0`8Ty}4EFC@F^-J6i0 zwpJ*pwN`3NA+3c*%2uc2j1CF3b!r`Fs?%To@`ui-zx?4i{+GeV=e&0}*_w_*n#7@MHyA@HGQZMG*84$Ax1FIUytwK@zr*;RsSlN3a%- z2%j`?DuPO1X+%Uvg=BXafOQ0ZZ?zh&s7Wi9&0?6_7rLtI0IR) z$SfbF_MmgdRtTQ3UE1kYs1&A^vU}22CS@ndJgQ(6m4 zXKdHG+Nc?WbA?QQHFWQ zIx#{{ZC^HFjU2XIN6rPNa;V{@9p*IJx8FnM8QwC8Df+7I?LTpnJ-dYEgNGGbj419EL0>jvXHs68Kxfk3J=6@v;;lW!L~5Jt zQ5{Ipkah4+#>k*h46LQ=?%;HkNq*aQINLX7*_Ik9mk9=>tTiO3D zi{2%&nZ!6}PsZy!ly+?^so~;Rfj1SNaR|f;7wJ*)|FqatM#i4>=nRnGbITW1t+(6bj&0Ch z;}ud_?ktq0q3DwitynJcDsANk7zqy-_pSHfMdY&gBLyP){C6Ws^-V~;I4v)z`Q z*+-PEAa5tSNp}Hi6JI@L*dpc-br4A*vowsfqANi4eT@Us0vc@4mMKZONjdk zqbO%7MZ=7`_FZlQ+V?We?A7<1zChttg~ygvuDe&ce_7?nmsPI6SNZU=%6-c!*W9c8 z)UwL`7+@d-2@Wzn5_6MOZ3#dYuwqCV{Z!PlfIyn5cUaJqSc6j~_L~;cvVXz;S=tX$ zrzN;+4bxgSgSEHO5G0}+ALcpSR0Ne0P%Q$cL6_G>1Ub|Z0_*rKb{{76ZR=^V4kixh zG6xE9kSJOT9!S9}5V(tg@{9as2C4%N{F2J-3N=-TuV1{F!)HE1aA3_eHU+yv(GYp% zb66Eh&Y*T{u;^llF8+P%99B=`dIujDq}V1tv!P>aa1LvvM`Y79l%M}|iQKjMk4ufu zV0%Y2M0qizH#bm2j(=VAP#%>$h4kgkL+9jjUtdhlV4bi05!TLOUFa&RI`oxV?l1ZI zV{H_Zpk`q(tR1|>n8W&=p;e*xutD)1x>0r;6?_X_0($m+A=do-pYnJ@lzay^T|pyH zfh+9xBR5eOI?hJVqpL(>dWl56NYv*!2&grUm7-N6yc(%-NH^9qtSaz4%5k3cynsf2 zJ;eC&@Br6``0=nCFJh424^QGH4C5kE@G{Qwi{Mqf!q@pF{G8{TjN}iP#vi%@vg?wLEgR^&3d4OaGHL}XbIsK z(WZB_w31%vaigXR_#%98h<@^2p`IoVx3NF!)G)`_Hp1&LqiP_>ef zTZG|ixk-M7Cq+o+=P!^;Na*6$N^xr!8@P*U1K#65NAI&OKj7&76_fiR_TkrfoS-{^ z-*ABZ7SG{hoWt+%0)EfJezMTuEjUIQnci!Wz|q1)zf{uTjVQm1a;E7&XjZ`$k&b_( P;SK_lu4BA9fUo`+1r!dU diff --git a/out/production/github-repo/Others/CountChar.class b/out/production/github-repo/Others/CountChar.class deleted file mode 100644 index b2d89909b65946d116602c4168f37d2efb958cd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1463 zcmZ`(+inwA6kW$-dz{JSX2-;Z6dV%3c0$Y@np+Dl&=iLN4uK@xP9~#xs57?gan-!@ z0e!C2mr7M%c!388fy65kKf*s$QOi1GD~@8&XwKPZpM6<-uRZhezqjuJT)>8b1kUI< z+l6yDZy-bq9Jma{IHz%N_(#rzDTzSJ5=*v5a_TJ!C1+ z0zCy!TE8sFN~<=bP_9=k`-Y>c@7)VKsgj!b28RU(d;t5w>9}Pgj|F9L+r%R7(CWHN zB*|@tOM3Qi-c(Y@T@&|EFtLRDCYDvKp@YR-t2?C)n{^sX?5&-Yd`&#SLlY^am9!#Y zCM|ZmS?Z*TRTXXx1p(-IWa2TNn0Sh3ItY0kmO%eOrl@LXUR-}}TkOR?Rbjj4*;@hu zMP|I&N~fHiSNxDoTW*n%M61UKE)>mLS@GC*yu$%#JI4InblayUB^71#73vr>;=}vkTsiks_*I`+y*zShF=`T$|hi9wjtY|nj-x;`l9r4P|Q5MjBuqAe9f7kpu zXa17yZhA%k>*B116d4^vnl@w3piK zaHfI5zc7>;ZXo^!hyFnLg%B?S;-CLN9eGI)&F{f+L?|C+lq7pFf?j4zFyE-3Z4490 r?4jzXM+W1xWj-H^>f{8UaiTd*Z689rFooEK5b=KzqI#0*0J5I}@JB=d diff --git a/out/production/github-repo/Others/CountWords.class b/out/production/github-repo/Others/CountWords.class deleted file mode 100644 index 0ba38e35e1fcf971296e9bd32b043b7ea95031d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1357 zcmZuwTT|0e5dKcnk~9r1v_K1@)+=qfRK*)t6$Gu8ix$BGK7=*{!8GY4smj0b)&IbY zJQPP~c=W*^<+vxUQ-<~-**$x9zuo?H=hI1EaLv1y?P7Tv4mdR^)^6uiP~@>()o%}yQ>UeeXRxYJ1yc?Bz2Rj`J2hWN#@7izju z)~KU!@qbYAKy{J|-r%i*5u~_QV33l$yOfhwuz__2?=UE0Q^6MAD=2d8z|OAoVN}63 zcBqoJu`u+slCSL@Y9-?MoT+f+xLSq5$0yg{U{ANQIX(;;ou*cZ{X~=23m1H*g2ji{ z3S6gYw*q5cZVEeRW)Q2~$>0e)&5KYalW61{$o)A+#tAWjZlb2ubpmO^1v2#c;R|uHMoIT!>>td}G%ElA diff --git a/out/production/github-repo/Others/Dijkshtra.class b/out/production/github-repo/Others/Dijkshtra.class deleted file mode 100644 index 2efdd3cd6197bf57b23b43b80c07863f5c8fe9d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2467 zcmZuyTWl0n82--QW_COD%CsyL1k}0(VWG-aS}3%oXiK4mV!2e2>2}&qyEnJ9g(50y zK~(g`@*o5>Xe7}GBZ&(Uf+mI+pM3De2ctfqL=&GR@j}4w%(iqX&F-H0&wu;=|2zMg z{r2{kR{=bZcLG?7HU(S!Xvfw7T-YX;4h8GIbO4H)HU`j%?NYl#L013;XbYeWJEior zT)N%$uH~ntv`a3#73`4?d*!AlfM@Wml=ex4=M?M@ASg2gVW{Yp&!}Ab0x;39VnD&5 z0!zTR&PrHzgMd3!-7Vm0PWG7sMeSC?+?I*=n(3WJZ;YDK_GHwEbsK3*?kANVd(aw@ zwhnvHOpk;&Swq7kgLc}eXQsGeB?QVtJ?%rrs1c4CiGgsJowgDK^%BXQP96|&^|T3y zgZ#DfH%4_do}whRtj-;mIoz>ilnIUW0Kv*;$;Uj>uPld@v8`CRD{3SXW}1ZvT11>b z!nu1KJX@e7-`6&x!}N5Iq=_SlUw&`5W2vc*t7e9+%j>Q+VVeWQY+$ZAT{7ubBjr$~ zpq7Wva}@}5B{S)$x!IDe7T#rSr6ftigLsIwIfUi6pPPBcovy2Q(bSn1(}0Xm|mKr?NZ8Ff2r!#Iu# zRLnfSri>NqGt(N5;dRorSPI8Ayn#0ryrtm;-X@hRRxcJPo;ep(O=s)q9WtXliab@< z*obZNtn?hKRx;e0NM&q}jcLTm>b%gb202ek!aQiRA!3KBIZU~%4vCHFv@u4KJpEQI z#*q*8w6)0)Rfe=D69Y~RM@|_vVi~ieUyf~S^(-gL9I4F6pg`4RAr6hXM(XneCRI#n zjkLs5ww&xx^bxN~$bO2_W;{7+woGGrh$SyyG9!WSlG({?InA=qNTtj~pFm}(Egvvdr?DcR zgsH2Y$J$JP)lTMAGdr1#TZpWkcnx#~PYPn|dDy&CbkBZ{u*zH^ut^y*4Yof=ffVLt z;ADvSWS)q^HBhStJ-V+(SHk7$#935K?#k6pN=l9HqcrYiif=BXV9!NpbzUdf=aGPw zA7X)oeIJDq_7dh~QMk*2ygucx1nDqo$z}KXJA>XVicaCH(&C8fium1;fF6*#l5?1F zoR}_*~>oGgvr_<#yBT+&57Ah%IBZT-56V&{Ja_QJmNSW0>#jGy0{ttJVBV+&o diff --git a/out/production/github-repo/Others/Dijkstra.class b/out/production/github-repo/Others/Dijkstra.class deleted file mode 100644 index a4369f075c48b47b0a3dcef0b4c5e9c9468fc6e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1060 zcmZuw+fLg+5IviVy>{ZnSuUmY-qJQ9h4ezNP$UGDB1M2m6czEbN!-LVILI;mnSMo! zM5Lnj1Nu=_XKkk-K_u_anVB#J% z4yEfcOcwVqYY7`kzeCiqE5Zz{!;l*l4JV|Ee5uuowVJj5vEOn&xJsEd>N>B6&f+?z zX6=SpS`A9pG$t?! z5<_+Z8sVu6m{TTGYohZ8WmM>9bf;&BVBbT^O**yEDR7JIY?Of8xI@UmU1}PUKT)v+ z`KHd0*!zLx5UFZeXs6K2f}g@TuP2bAyb>~)C7ERsHy75PjQF^Z2Nci1!VDf#b&f~> zC7uvczi+nj3+7((j1HlRjI9rmt?i{^Y}rPL(=pE3xe#k1&IrpkL#)R*Z|6hILu`q> zoe8lW5iF5QM>rzn1-G@x5iz*PMIBF&RD&{{FK&#+dQ83qiWsBYq^SDK3mE?Ze$vg* diff --git a/out/production/github-repo/Others/EulersFunction.class b/out/production/github-repo/Others/EulersFunction.class deleted file mode 100644 index 290af7238324b62736382432d045e14933c237ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmZvZJ#W)c6o%jHIC0{-Z9Ygs?NHiKO45NWAch1MM5RiBA_ZmXZt&O-1QOL+TbTC<~aK$vo`C|>vyf$Tqy{obM1C-i@*&huI9jk&|goQ2{7+MhHYlQ<@~ z=Z?9If|_wYEnrM#Q^4oS4Rx`}UzFm10}@~rY1#~<2ECw9?tFxJ$AbowHl>njEb(kD z8t9i9W#r44k(b|aSc3kJ-AdlAR7UnIRPD<21xm`Ab|q*YpZ;*1N-$_0Y2x_wo2|b_ z#&K*WoVUE1P;yoBfMOa&mMD{>$U0@V81EpD+bAfM4fgBUMwT6#6lN_)uc?k4u`V%M zLFyNDAuKC-f}}~*B1&h-BlgOhYkJGc4ql@09-8wBi4V|^1OdOx9W0>olmf~`yG)rf ft*szRYD7sv$knZ>8kBSf+D~ZWgo=U%NoM~6zqp!0 diff --git a/out/production/github-repo/Others/Factorial.class b/out/production/github-repo/Others/Factorial.class deleted file mode 100644 index 56ce6d6569862159225fe287ea3f40b8e8af779d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1575 zcmaJ>U2{`K7=AWQa`JKbN+`q-@n}WTLK_AApe-n13#ln>O+YK6vq_e8@#LJ$$qB*_ z@JBe~g?C(W0T-zwGyVYojK4tZvq{><$}pMi?)&{b@4kEf{O9*S09?ZNDdcd`!lfiW z#78Ma@Uc04lECE@=CNQjiwRsY!c_~OrjW+P1U@tSHM3k#;6@53@wpL}%(86ZW&*cN zWZA-sg)ao+i`vuSRe_1(^j(4I4Zo=bj#RX#Zui=C71U(ir6yDH8`8Zi18wAyG8%5_ zuCc9!TPo<5mSrRK>ESLgQ(J0J;6(9W<)M5eORn@V4dcUmY~~CB8*d;laBM(kypDy6jaA$>4r?~nu_17J z$qQBBNXPTNSx>cOs2?duQ`u6%ykp@@8&%Y7+yPs0ZIfkbB@?IJ>xNEU{U>nFS$CD} zDo2g7cKog$WE}Qz-m&o&Y62$@cKUixyG<1kc5O>Jd!!xz0YkpVrdhsWpPV1H>pD-g za+@aE97@J=&&Id7&*tu@-Mbip#ibzdNrvE^rfw2(xC_wRrAp+1-wI^g*^*s{Eoo~{ zhN?Md<2%#MqX!3vs{LYX^@pm#%NO2T2XVek&3Ob66oBC`1c6WfSZULcl<_hFsu zBXOnh3$jL$>?1W$Jl*+=@=K&Qw_#@v^>Mh+$C1oYbNCI%`pEQ=rSntRt0r)A7<-Nl3+E|7SeQ+)8GJvZW~?%?>EvYo yXC(5`UlB_^%m0**HpxprqhW~Ke3DJu(|CWZyOWfrs5cd(h$PLWe86)A7yboxx0W`$9spWDb*&CB`pyr9yFQm$ozdd;H*M z`2dL~{s6!FBm5WQxt$4^uqDrJ&pr1%=Q+1O|9txa;31ynki!iFH?vs7dJYOUWVt0v zSz?tOHc>Tj+rS-x%yU2RlZJp=u5<;o?Qq`{m}>cf*B%XeUbN@*`b1`0q3iU!PUOq? zf1s8e`mtp1CWl@W+dF=5FKlm7X5jdNz-;+V>&W@w*nKBBusccQ2M1eeo51^+2#6-B zPIN$x;w4O)ie1VS$0DP|@7o>M2?8%-578FT-}zBYp-k+#VX!YS(McTl{Yz(WU@`T?J{MqW4JD~hBU-sx>0%XGem3%_fDyrDo#30zRdCfe zPa(dh+mo!B6r98qpCy$96fn&-iy0J&$iu&&k_ptmLwS7+^%PpGdIJ50+R*A6pE9MT z&saEyQ98kulBK<^>z3BA^t$%t?6>TuLUyas5U8G~b^%vm@qZ1oSY}4E$?u6d&KJja{C1{SEKP<4$e7Q0ytVu@9w8aRh?MyhUL*}#er NoO6)}uX9Vm>R-y^tFHh6 diff --git a/out/production/github-repo/Others/FloydTriangle.class b/out/production/github-repo/Others/FloydTriangle.class deleted file mode 100644 index 6145bfaf12f13043ff7aae2f5fc9e224e7bbf711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1249 zcmaJ=T~pIQ6g}G{O=*K5P(`g8RHT4XKk)-W1*ulchf{Qh@j*k0G?*rxG!=R0m*|7f z`cP(M#y4O53H}tu5zhu3P#8P2cW>@Jd+yz{x8Hw#`3m3~o+if=Q5Eig@NNOjmTFA+S0?Cr!2+DTeiSF=Me?zh*16@c99FE%C%dF$BfqS?w z0pkWH@Ic_+q!-$O$-A0fq>bsnHUod9Zmv|Ea>ZQr8|I4Tg{I?4KQNr>9 zZ%VS*!NiNX7%QmyHY?s5o zLZ#JuXjdtxe3kUJoQ|I>c(q2zXR)m+1?|orn2_(K_ze>79-QS%?jG!nYLjnISU|5y zkSh!B5dS*`x@W%&3m%y{gPaDf?D}<%T->VFY;RE@lP&b`8=xJT*zm=Jc>jY>g#Pvn zQpN0kVlrw`&oI%!znuKVxHu@_EYr(z7u>ahb%;+<`Y3HY3dYe*-`ED=7>@I+1t*YU zgoi~O3X#C84aDX@Ls^Gf{0yxl-h@8bL}FAK?N-(`yXSE1L(&|A~p2z`!qe3nOBshhkFXoa0X|2t8Py7Ic8&I&ZC!} gg7ZXVpl%VW>FCpu6@rreL_%yLyUEjn>{8f)-vekDkN^Mx diff --git a/out/production/github-repo/Others/GCD.class b/out/production/github-repo/Others/GCD.class deleted file mode 100644 index d718c9566a29ddd9649fd3750e94e867d48fde2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1137 zcmZuxO-~b16g{sWGjuF66sfgSu_)-YB1Np9ttJMdX;Q68jfSuq+OZDygA7v=T=OS% zX-wF#(FGEt`~ZK8i3@ioisubu3W=L}_uhBjx#ylYGvEGv-Um=bS%Zox4H~9nxQI(K zGBxCoAHro7Ga9a7R^|m2a{@})={nv$fv}l-CJuvj8ftI-sQnw3hfLdI^tb5%eD;k>|b-Lo36 z9$9MvOVnKUk;0)IqS;g+w9EsFYp?g)9!WZu(-laX%hgqD!z#3`ZmUrDT&LSA`LZpy zMImGV*%r_`o0YD2-*v4`CiPz5ZP*VSIn)pZ&q~5LP9Ppf0%Iz!#xaj;GD)c@#&I1t z1Tvh-EY8i$7jt)~n^~F77iWrdGSdX~fvVcds@?EZ+>GNEZpU#4v_u;ibPQbIT=(n_ zE$j6;<@n)nPOtEUlX;xawmLjL=CdC!3#e-n)TS*Fvm#9x9f;t(c1zl*ZdmQUU3($D ztK^QD7a+*4_&h|E%_IAPxkn8>oU9bE9G6qVB;PZYZy*qXkaqGp%&fpwaE<0aL405k z!bv_AzZk;^V+kbyI!3w1XYG)vnDKaF&=ynXOJ zy+cUYr=9RM3{%5Nw$Q0*lr0iS;uOx}wBIgyNXg1L&yk$F<7{}EaTH-?MDaDG0u8T8 z9p+XhAD%5o?q>4)?=WiQGqZaLmA67-`{0K$5RfDVU{FAYb4{>G25Dsd##!-iJs;ddg57~BT6BpTOf2xvAn)YRq(z#OWtQM4 OF-fiRD$g?y;lf`Ks?*B= diff --git a/out/production/github-repo/Others/Graph$Edge.class b/out/production/github-repo/Others/Graph$Edge.class deleted file mode 100644 index 17a86a157cb0c0333b3cb0ff4f890f9447fb8c3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 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 diff --git a/out/production/github-repo/Others/InsertDeleteInArray.class b/out/production/github-repo/Others/InsertDeleteInArray.class deleted file mode 100644 index fe38cd9feaf9b7200193ecae15790a00e4e5cbd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1542 zcmZ`(O>7%g5dNOM>$M%XX_9VhJH}mp>mj!lKnc$z5y2599gXAJB+bW^W+9H_aXcT#38gw2$D)BH1Iq%jCC7Dw zQv%V#%&LI4;x(nfc*Sw$gK&b^Srz?=FRD+iEyQQ+* zm40wmwq+p8?rGn*Z!8kCV>_sn)PvSNaOJ>%7OpM468*5V@oTM06}9Qngs#)ljw-MF!5Ma1Q5FcnL2PaOg@RJJJmVjt_N?+mzQWJFwnuIgM6` zGH|oHEw9&ZT6JmlDUeM8YZ$rX7I>pBDm9rqGW2^W!%mpfwfd1Hkn<&W_W#E&ux~i) zYWuPdjvN;m+1coPj*UJuHOaDELWMJtqNR`DqI@(WYH2-pNB_@3mg#8dFpXKz7# z6`H5`j`fw;PdPP^O&s7YfrCg>!{EpgbR?l;Mg+(h&iw8|#*$=DW*xh=$(b9a&# zq6?a-fUf`&Xq+4*VB%bsO8c#d6w}1;aG%Bu~ae6w}ziVN)~p z&oQ2fn;Mad)tlHmkhNy95Bfb7x*4nf8?>Le%Bi@8RG9X@O0;JuQNm29B27bUZopKI z>d~$Y;C>t6DC>WaepjSLp-B4x7TrayJc`|;C@*+&EkjOG=e4QQ_ zk-=qTQO7je^zPyjypKcpi1&~27(T({_zX|rOP-r3;5KG(53~3VbNGShPei_tBL3w0 zfYVe1yV@TLk+Zyw;SXZvII=W;A$p!0ki*Z+VX^K*_>sGjhsKJ&X1+W}dJ$hRTb@gB zIn14h!TLUB9~Qg2hh;oPYXXOfegdg&g6IYc24;kTS#HzxHmgjGsDw}!Ad}P+2Osbs OCmYGIpg96W@bo{*UsUe^ diff --git a/out/production/github-repo/Others/KMP.class b/out/production/github-repo/Others/KMP.class deleted file mode 100644 index 7db0aea59f6923fdd15e9ae375826b9d4d2f6200..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1655 zcmaJ?%TgOh6g{nZiD7t29&7`$ab5@^zz>2G@o>Nnfgq3w6qS@W8KemsTN)|DDCJZt zi=_C7tQ?m&Y?CZxSCYyyi~NQ+-sA_oh;n*l7dTK6>Ym%T`<{Ex={w@De}4S~zzlXw z4B%QE*Wo6Zc6LDF1(MNfjJXh^4Pq5F34$7PPa^afF%RV25t-J^Pca8 zivmh|d{;odT`#)=eRS#N(^bdcpWY4w&)=VmayY?0qmpNA3&bnV*9W0fx-V0n3TM5( z>y~9fCX>~iu*AdyW9idpPkUr?;c={S)HqmWtU*WYuJn8<(6cR5Z#a#Jpn*FE#sutA zz1C=kZZUAb@E)u*{Zi=FBZg<>h@gtBZ@b%p&R(46fOu4a-$aV*pSnv zg#wBOwk&*tZ5DNWQ4Bi9uk8&k2xi zUYtu=m3ou=c1IhpK3(L^hlF#T8oNVx8V%Pk3rwDIXXB>?eMypmBTV=|+wrjes^oL& z(+3HVjQGA@kbu#UGJ&8Of~%RGVjnMMpYXFYNn z7^H1=4&Xd4aMgv27@|i8f6CJepS_7#KA~(RVhQCb)MJzclL02rbQ94+5C0_MXeSE8 z7~x9prf`XvI^wuYE5+1RG>kJQ1-(r; z!$5{#Aq-3iUaEF^Ap3$xO!*#m#Khl((HOEN#hf4h-Q373NXPH%kxLb7;)PmCR_;pQRrjt^3(9UoV7RatlpVj3z2>`( zvL~xeKPW$*BidiG6!6I8r}6^A<5H)~RTt9431LX0g`vOU@Oy zUD;PzA6HLX7(!BDu${(sBm;;Z*lL6anGiJ})2J#lJ;+lm5 zu3H#GT43MKqAoVw%Ch5IxPe81QQK|U(q7$8VHZ$&+_Z2Dw*~eqH?J0a)3vBFAKI%S z0s~tqEG|8CRByJaijNzCQzeb63&{?RZY`Vl>dk;{aAcK4j%4;UsQ!d&O#*HO-el*t z0u$}GiMLHHpx2cXqq?v=dv18nqad$5IG>!Ih^*HgZ&@JCnc6ibT}GMavAyuV;~x!b zok=5inccud)Jv6G!-37;E5W}J2y<~vz=@@lZf{QV3xm_ee*H5z1CqPGOX{ zsG16DRPf*QR&YrzH#$G2Jx5=9tepEtY_4y9OuwKZ+y)zlPT8Py6g~X2kN5;eS#)LjL|=0qVv3%WNd`ir*9Fu_X^<+Xoc{M_6mAD z(t>fcg=j84qo@BxDm`G<7n0ieYxF#r(Ri!m);B*SwWR(GHUr+mytjegq~3xR?`t8} zLO&taF}~9{@V}AxgNm_Ek+Xd{o>+~xO diff --git a/out/production/github-repo/Others/LinearCongruentialGenerator.class b/out/production/github-repo/Others/LinearCongruentialGenerator.class deleted file mode 100644 index 0f12bae81ab2b03a930651e94deb8ec3a46bdff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1289 zcmah|U2hXd6g}gw#qI_OF~PxU2_X=B`7mkICTV~s#C!#Z06~!uPm|5y46Jvp^)4-M zt<d(J&~{p#&+e*l=q-4Z^> z7bWb&ObNr7Ez+Aa=1XJdjk)09VqtOa;Q$j*SbRP6^x3y`7R-^q!oq^xQNksBWhyNc zS#!~NmrGbe)4>%1A-S4dK37Lzpc|_vI!b%%GDwv`;erlza*0l@*=*L=1#(N#CLa#8 zbf|8noedS=lN$kV4z(g*2J14`=G?!`C0n{DFwt5~wp83}m@FADMPWNmRhVcQTvMTn zWfH~n0;NtGB)S`D6$=z~=*OzVD57_w%`}Jv97AK5M^C9uriAL7WS56PwpM2^xsKGK zz;NwB>ydmS8-WbljkP4!VSCu!%ZbSbO#!`XbrW|XD^dGOtu5E{k6L2j` zV_#j>rsuK$>F1mQcW~9kHC%Twic`kia8X6Y#Svphj5&&m!1#ytaj@*-CR(P-$1YZI z%S8=!2dge_3@G9x0!?{p)J&X)jTn@SvZ@F-5(nJ8DG-ff)~VTeg~MfXHu?Q)4y|i~0?s5?K*iEy%gI?I+G zFzR{F$>KS3k7)`%jngyac=L?88SIJBpakbFzRN1i?c*0I%ISXHA1RnYpZXp9?w3(4 z6gFE~;XD^NpX7Ce+e#Ow~7bw5L;qNoz=fD3n&1Wsxuq8c1uvvo5vG^=u v=PmFUV@CLL250SDrf?1oW*(t5=P8!J6i+TPZ!qHEQ}GukC-52XGMN4c0G;Lz diff --git a/out/production/github-repo/Others/LowestBasePalindrome.class b/out/production/github-repo/Others/LowestBasePalindrome.class deleted file mode 100644 index 53da47c8db89b198d446a982223e47864cc48418..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2929 zcmaJ@TXR!Y6#jN@Ck>}iTGEmq=1Om zBI<~vj*f%Q=!g$};XxfIFf!wd_qW)Lq0F&Dx-EIBzPtC!^@C#wYwwuZbyV6SCc&ai^FtNWOOZ#17Z z6*i(Ouy|tsVW99l%cA@NyS)~QT z$;|IRn=uQHmAA!_QJiDEwg!F_JQAaAjhm^AVcTYrc8Vt|rO-U(7@3#HjDnj#kteze zn{o}(X0WbQH*Er0YtC{;>45)!ccY*c%|#aM;&MkxG@T^`gw!rCaKmT6Leoq6vYi!d z=xUmNZSxEf{x3jDLqTC%R|ACZ6w!l4_a&!DzY?pz7O<;8G-~$40)~!zkWkp@0^>Hc-U$t- zbv%TkD3o+KC@ZYrZ#!l&L5#??frN%d9cOS>$2q*BkXZH6m=tu7vKL9VY{C-OY}IjI ztY5_ig^t@>Gg7v4S(EW!!|SXdVU-d_qOd|$x=09+2~l`M$0OLK<4s)9@Rq#a*0CQ4 z6rgbbj-CCF?0Pi0d(UJ0Mn<39f8gMu)ZwSnW8)K(Pd_ttE&z_iOM|CXW74dda z$2+*BV-H4jyo>h~I`1+w3N5RtPt2Y&Gem!ls5U$Q7o96PCfO9OHQUP9rihxRvA_}7 zT&Kou2Qq$M_IIt}BnQ)3F>G@)q1hTS2caNJv}(XO@u}J7StlhLyjM6ynya7V9Qx#h zL)X=qmPVmq+F6Adr|%Bl*89hDwl|7<7yY1<{|~epFWozc37T^zhbY`A8p8x~rakA( zOFE->OUE6eeJo2Z4c-$0^K{wB@v8bCKDAB`c28p~@8K={5&-;U6UT+mt=#qTO@hJS za~}bvXc?QvMG&fB9R>RFsTMFU_)z51sh{G(8_fMZPepA_nTTmBE5ky zMc*@GGomb_30^nDe&z+VVjbFe(vC1Xc)pn$5f&O{mYwKD3=eZR&Vmh=EY$d*wyM^B8z^7@n~mZINF&Tj7PKzHh+Ue{F9`w4nl-rZ4CP= zh_L*Dz;gBXwFeO`UO{yA@W+Im0IOP(tE-22@M;_Y+~yhs-_ zWR5{hW{7{rMJqvRhwKD{sWS!Eh9v3a;R;`c zY?Mv96*!PZj$DbPTV(Uk5d@n=Tf!JFky!8Y^aETbMLxwxE7a;|!3PPJj~31KRg`-n zsZiz#7fMYaA;ASoS*55!W^i@b1=@qp@Dx{G=JGK~EhLk{o)l^|At+D_mERk~D bkz5hkR?|`|A|2WqL!c`vSLPV~dNBSkVRvmu diff --git a/out/production/github-repo/Others/Palindrome.class b/out/production/github-repo/Others/Palindrome.class deleted file mode 100644 index 37e0d478f7ef6e871d2fef09640db08282288714..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1128 zcmZuwTW=Ck5dIFku!Sx~dZDdWMQbatwRkDsXiSu(2?@0(m>PXBIlu{Q-R{=CH2UtJ z@JSP2dC(V{XyT&}{wU*|W!sX{Y?z&$Gc(^e-x>b?`}rHd1~yYj6I-V1`LFm#hPm?)-w?B=&)e^| z`9U;BvMJh*-3e<_O($^MV#}06XHExNmwa?gA;U0#mRp1_kIOo4$t%;F(K}u`0{cNu3|X>?FsNXfe0`XJ8O(;~q$)*ZaT5wX zK=v16uZ<%p+iL@;1H`|FiL#OWOUQOfXkoMbupnwirI^P8wM$|Gi?~SHBr297fVY$_ z>lcham^21RsNWD*`$mbtv;ijibf$!ar^3FIL{@G?I>gEiYfrEiBCN|)r6Q)w$!Q%T ztWSuC`4x%tIfDBd!YKnJjS#*=-WSA`e#uae1E~QfPl@EHjT|dO6tbk)GHu}s0ZS!^ XgeoV5DkFsAP%>g81nxCLu1@( diff --git a/out/production/github-repo/Others/PasswordGen.class b/out/production/github-repo/Others/PasswordGen.class deleted file mode 100644 index 59231185897a46cd9abb7407897cb8c8b5efaa52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2117 zcmZ`)Yi|=r6g}fO+4XuMt`jFXK+7AOS9k_+D3F9#zjk961Yu4+;38gJ6 zANnh*s;WdkRDG#Rph*0Heyr3#&|gtiYSS}oI}b=L@6OyibMLwL+&iF&ts<3X=jKg;=B(wIgXO6) z)4Ohr+0?|dZqBer4bPHtO&Rtltdc-$cF3PFy;A3}Q7X;2UjCx#bko_OpITAl`YCxwRjUULRo|_L(wbVc?W;_!Mr89AB|ZaM3y(KI z)OTfv1>Eusr_wU5s;eNarS@b0PaAgG92ytckm_3*!qOhb*UHGpW8rBHosX?AzFppGSMg!!9kMeTmK*U@{_c)O|_y6*dTP$15a596Ka#r?~bZHHQ&i#2|Db6r85v c>i<~g;hOlHaSHU(GK9YW0M@DKSO5S3 diff --git a/out/production/github-repo/Others/PerlinNoise.class b/out/production/github-repo/Others/PerlinNoise.class deleted file mode 100644 index 0059d3b4a4d50d4faed47084596089134cfdf815..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3518 zcmZ`*ZEPE79six*?tDJKB+kWgn?lyLi_@)58amgcU7^jEEou6arKFT}(6e)mFLP|y zxunThx6-9yV=rYb>&nVNDohnp1#Cj;#I%Bh2GWEyK$`e40Rq0zen8^uR5kpb=UftP zof6+Y|M$1w^S9r>^{Zsxp)_<=W)}l@)pkOxgArj{`jBttoQ-(!0>Soe%BGBCkPfj^r7u?Ux#SF#ZR6c zw@TF_&w)wHDJy8sjC$QDS>^H0VYlX#$F~V|CpH1HD65HF8N^xl^8mh6-GZYu~FFSAW%dK=Dd znWLqOC7jXuFhSjxDOJkjqz!x*FSA3vUa#6R-c+RIEY2BNhxKfPf$!lJ1LyIoNQLz_ ze)?wKZh~y{zWjt;VC%iUtmr&joEZ=^50~v(w@;)ccLY(hQg@DXAVy7ZvQDM5zg(Sm znVfA+a<(m*I|_tfe`T5;mksw5Wy^+1IRN@w!6sCyLa9V3nRUl2GL{HcMYjE7O>m!a zv1o!GWDg}nEC|8iFftvVhB)tuTM-@JS*uyRHGxcr09{Z<6=ZM62=3xCZRO4ef=~pg z`20MnPQDev-EbAkn>_f?#%D+}!!!d7PXTLjHz`fbj2s&K&QmW=-hWrEeh)rhPpJM@ zTi=DRM|%hUL(PG!2=s*gS>4oEUBY^QHeyCrUqW*_Wa`~!BpqHvaA-cFTwb~{uk-nl zRBgS4R9Z9jG+mnd+XxLy;dLXYM{<$Yz*yEWjf>cm($`Pq^i(9J=W`K%Hfly0WV1gT zGh+<0Hm#b`ZZmeci@uC*dG1Q-6ZxU}7(@MSKFa3@^TyKUrC<7mM=wKqkr}Ge=5SXk zQXZ13H|7nIVOsqKi}uS#&9Ik1l5J^10w$V~V$;&tfK~Vcd;Vp<`$!K``zw?b_;%RB z5}Q~-26O1Z)6`zTeK>=SxPUIa$@f*#?^6C-Wbp@V#fQk@pM3wD^nb8j4(2zEyOF-{ zK|3P!nc-hMbnIiy4tYAuC_)iRA2Htjl--3tGUKffU;d|A!zSie!6|%^ zrwDrJX9$TUCa)`s;tQzo$^UICwlnZeXv)WE`53{Q@bQ$s1>NUUZlZ}FAzDXKUAnBx zu-u6rMwMFxd;`N=S=}lz8VIbJ%?1rKxKPf8{8`mhIqNf~Y6eSYu$a|M%?ut{UCoBc z(#952A>vDdmXOSwk-8eOLbcW^5f?EHPc62=)VfWhYl9gUuM}ac=HikW^_bB*Gm#FM zD#4$MrxK|c)w~Pv!+DkPI+hMB!>do`{xB;VKoq+PvONUcJ`Q6)n?HnY7{-GH)?SQo z%^yS_U&C=c#w~gTuT%D8>i-mD5-wNhYcFlTL~HS-&_{5#(`%kyc5)msTHb?QJjH3> zfL@*w?4w-=SUZ1;JxB|Uk*DwwPhnaX=|>DTg|iZ1s_3-@1P?q3FbN1l!nV3O0w{Mye;A))vvyqo?(2*@$6A2xUVqKVtN#Tz+dVVJKzf;_0xr^m2)` z-qVn7xR!17XOm{qY`laG=>{{oCEG*{#?QZw7~`2ui%4Gv87U*5i_a&C#}DPM{5hqI zSS8osYvOytTYpcUJ6Z{3RfLF*pk8^mH*!@0N;A{9bF5>t20p2G<{zTqisPk8%`d`$) zjyL{~>#JOOLwJ<SqOF6}JI8tAHmRx*!iDj|Nme|_lXJ{xsuF1SYMBYRjH4Vf* ROB0YQGQ#o-EY^py{{eQf#OnY6 diff --git a/out/production/github-repo/Others/PowerOfTwoOrNot.class b/out/production/github-repo/Others/PowerOfTwoOrNot.class deleted file mode 100644 index 9c224fa16c192e5925d7f04b07433f065d8508b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1082 zcmZuvTTc@~7(KJQbjxisTc6ZMG~W?Nu?wuB8eg5Aa73&uocBWFL0EIrGgqXU@#;lOMkT%wWkt4{qtW-HkjZ3@9kbYBGr_ z19vbjk)i<;cayl6#C;tPbj%1O<~`qw76sJ&#F~KiJlJpr`pTZ~F1PCIZn$c%*NCLc zfn(R!?9h|*Q&5Yxy{166T#2^buvuIQ_S~?txw;or!sQ^EBVXP2e1YNoyYi0x-Y(W` zf2&xHLeJlti}mbqiwv0ymIaii!=?7dR^-)+Rmb*yHzcp>x9S3-Bw%{Yjx3?K0zK8p zc6MLejo2nLp#f*xb#_aeoz~bP4dzP|+>#(44=Z3)gI4IcFFkqa!E^1?@(d<=(I+qv zpXaPC9kV7L;*o54Y~l%?3iQA5BR8}dkJVPtF=t{P3nmuv%)}VRnO{3;%WGP;)sPul z!KM}M1p*_TB|nJ%TOPhRcCLdvSChy%IHu9v~&l6iX?l#$w}0vhGESt}-Of5*?-V7-v(Io57{n zNTDspS(g1N6mS_iTFJ8e3PxysG_J3b_gdVcoM1|aC4^4jd>yC0U&SE+>D)g0ayf0| k(`V?~0W|gNUsLS_#?B;=#&wDyrtX5$za*2pK|sOHKXoYNO8@`> diff --git a/out/production/github-repo/Others/Process.class b/out/production/github-repo/Others/Process.class deleted file mode 100644 index adfd5dd5467e0f67c989973939713fd92621fe73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmY+AyH3ME5Jm6g<-8L@c$Abtftz$7B!mDSIG*~qb@@j8glqC%qJ1NbP! zIN63~&z+e&5ADzI*EfI>&YLLX#KWnFGeUW576f`Cv=p=1sd#2Kn$QSy&g?f&iq$SBb{ZpgyuBOInrZO^wy`(u}YTyBwXvr;sPc40KkLXgsLb)&CzqLJ2o7fjx9$N+oZ26-M)~7)$32thlmn- X^49jrA^M`*2Lp~Ukce=+cMbmlHwjLP diff --git a/out/production/github-repo/Others/QueueUsingTwoStacks.class b/out/production/github-repo/Others/QueueUsingTwoStacks.class deleted file mode 100644 index 7b4f71f0ffcfbfb0f3c9b09a96618b90720249d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1114 zcmb7D+fUPA6#so=Tenf=IzUtuymbtz;stdGiN+;M7QqZ5Vq#Lp=T=zTrR_$h4_*@W zK@&|hCO)VSKKmev!+84x{G*KLYl#%$#WwkR&iT&y{m!kwet-Q5;54QZ*o^@R2NDQj zAc2Dz6w*)}hj3U(M-n)SV?t7dloHagIMNbEBphdmPUxoYPBOG8sX2!5WowBuwB>b^ zU#%I7+@94ID`e@+TScuhr`fvDH;iGotUC<*^3!ga+m3pz#%uh#qnoAKRjc4?#T6$* zn1-gC3_Z%t{IXWp)QV=7)Pif1TgKzm>=L1L?QqQ?84VAWp?3?*yzZ7g1|molteRcq zSzRRBw?h)6f>%Zx+8L6;T>qj-7?q*ogp89IlWrym!V_Rlrvpk;x?67*D5tWeOt6BmkRV~!-Fb}>ZZeO zicczmdmq&6VSuX8a9nQCK&_ex@cng5ouP)i)OM~Jgcz%GzH*5s#L%q-NjE@g9$u0gTEd`Wx>)!>%8yqU#ei(EczA|1{jFJr2bgw zhm9dP7(tzOah2BX4zjq58QjAH9$*O%$@4MYKEZuF#Unh!b9!Il1>WH$KHxPz;tkgD f7T@vSYi5t%F!W&$amDbNSoTso=@%wFg#CX28Cw92 diff --git a/out/production/github-repo/Others/QueueWithStack.class b/out/production/github-repo/Others/QueueWithStack.class deleted file mode 100644 index bc85bd49ea2c8aac61d52817e3118c2fe4a8adc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcmbtS-A)rh6#izrblYVSs1&eO3Zk_w+WMauj4>$0i)uqah}>=KhAyLz+`>TJTPlvV0UVAX;~oUhC#fYd}up%@JJw0DsKs> zPu$m*zW!dnd46p@v_fm!4%#O~ zN!#%)FA&I2$H?@Qlyb~oR+640-*76ap$pedZ1 zoB;!42F`J~fvSN5<_*-4H*gbqGC6b%0u!hG(VTms-xeqi8_O`eiJsfzE;5FBy8Kak z847(QNM@vo{z;H%Oi-MpY8?s6fPCc`qVgTet79a-LhYv`pJj7~Vg@S3If?~>m`4r^ zI8Q4^1c51JsS=pRObovw1ps>G3)H0}B)9u${1$-<(pZux)3VlM6zah&E)b3&o_vhw z&>5CnCA^U%Xzx*AWXe7u%WF}UVy44CzoJvAPt=hh^(PMQ5cWOdxsM_q3^=I9+!yJj z3PoquOaI56KFz&C+)s&TmAIds!9Dkn`!*?I->Jx-L{+3CzD~Zz{yn5(7lNN2?eaA@ r;{IIJPjj1$WphzebDwU$v&1OQDZgz7v8&3P~ zKjE84AAD{5ko3qoK6+03FZiGMQ2k~T8rtB|hq*g*@0~l}{qCLF=P!Qy9l%GZ>KMT# z4WDV4>BVJS(GkT}9TChbaZTy2Ynao~i%SX2tM7smH*_pwDS^**oWd8%cUi}mSV;u z*)n}wt=r02P_}CVXYy-7S^Bl<4O#K_<&ApPu`M%@OTJgx41C+&z0AlJ({=?;W_R*? z=Ds=YnC|X$+Zvv1`n!xZc#K&fQt$q*;_cgKM^1y;lq9l10SJE0?irGZ_Ql;hur-v7>>A3b0u8R_!uo zDUg09BviQ<4~rjeJBRZIiWt=(4V17e0ENUdP=;+_5BCi?s2FhJ31t4OjRcY%*lUG7 zX$9<4O)G8O5JVF>dXt><~uNhQl4t7lKhEv)EnJ%hpB5)#m zY^y}QI^lH=TqmFH3h}@mvs#sIQQ-XlYQ0WVB?7NS{bA~ad?Yk4LscE*sAP`|P3&>Y z@oEHqgw4Z{nq6D0RD*}%gK(EH9qH}{<#5Ti@3G3JKgYCU+2zTF@ZuHagSApiK?iN$ zbm~$mhO!IC(1O!^qel4NfsdO|%}qJR)il3s55#j#h{v2nFizPMDs{ZgxzTb!hC#rG z?F`P+OKtuIafSnK9U!uOfavxU#F~gV(UYHQKwEu+!~uG@o6u8z4H)M*8t8A}jU$Eu zWq69@OB;8-*#R;_C<;Of{YYZ~?<0vkSL+xI!DU(i@DARkUkcYSf%gbFjTvMyNuW9E zW7JF$Ixhxi3i>ndi}AaX`vZEefz*$r;E_U`8f@Z3o~og%(b=)lpD{s1{kgFQPBxH^ z{DkCGxOj?TV!rc3RQ&q)pUUMC!$m{(CU_JGuaBJdldUx2jS|>dLc2&<*EwGz7{zXm zFvh97z)~nKSD4}?ziIxOKEQ{BJ4(w%jtDhi`td&T0!a-Y3vv1{RzTnr>Ld8{A8~G& Ay8r+H diff --git a/out/production/github-repo/Others/ReturnSubsequence.class b/out/production/github-repo/Others/ReturnSubsequence.class deleted file mode 100644 index 29c4eed5bf34c12d7993faaabdfeeb5967573a55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1665 zcmZ`(TT>fl7=FI&h7HR?AZch?iAIYwCmKbpEmT^d#Zm**Zi`|)bO}4j(qt1in~vW1 zS9s}-x3w3+u_HggJ8%3I-gw(_TAy!|84ih)+3)b4pXYtQ{PF6yLjd!5q+=5E!}t)F zBlt+i6)m?xqKp*+Zxt2 z+z}YM=D3c(B%oxn+XCupW6u_dmK@jKY}a>f@4mHLqa;>pl&#vf3fb_S(F)t!*88- zmRDh{_y98+NKMzj?K`!iS+-o)_85Mo;ykh4Zai6KUk;kIjtUYOHGQl6c*AN27&KfU zpX5wn!aH5Pz{N~|!0f;Z70YFf;;}%)tXs9(vb^eMqwSULHAgZy*~iW$S*(GxNNV`h zKnWWHW4B!2_R?KI3uz6T2DWgQ4mg`ZG0{; zewr8oPQ@445jcBVwbFKKd$wobOFT626~30sHwM1N1A*lK_4-7Pt=)aQ?4J;sKeT+i z&OvLmsYrB*bsELH90i|vZL7|H#)D!`iUqW$G^%lq5`#LzF$&2cI|{n)Hrq!*lRYPf zJ+24_-nGAHIcGB2{!a6C)NHrnSA*BV86B3B6pXGcWPPwpxoUaK45`v!l_9KV({}d+ zrZTJj4n3*~e0C79zM78gBYvYhBzT+8f0F+efC6?CNv`L3D{^O-5zZYz{K7*B=eZ7b zg?NK!qj#P{inn3BiMJ?`&VMpknEQ?A2*s2R)E5ZvJjc)hv{Jr<$VTB;3~x%MPNi~L zO{lYnKOs)ZY(kx*?5Qe#e*L%1s|0yx7$49O;V;f}5<0Vv;9ZQe)G=J;ejVdMUGvPH zA(S-1sj>>ZgA3f_obhRTa15!R!9`+9QIp}PAWMsL2)*VttRbf%uc5#LNq9+ybooHK z@I-I$FqNg|A3x6Ivw%(zD?SII3D)<@$UQMd7t;${q^r3e+ICO`#R!S z4r3CRbd2M&ju@_l@jkAGu%aW2oLoN8>988Yhw}ADa#@q+kL77y!!;S2mp<1ud?Jm@ z8a~xf5EyQIX6-A1Xz`)BXJ$H{-N=-sDJu{z+jYnEI<6%!fBb#UH#AJAo+&tC^`GDc$Mcc7%b#}KcchlT%&=M;)Yi6Tjy0*Ocj6rY5ZVSv6 zH@qFoZD&f>9ydz?y3@9uddaGF+_v3xSSh$`+K#|fYHI*W*>mZZm8FHvhb;=W7c|{E z6HlDrDln$<-!xl26mi!td$gj!Wa>Bxs*dJayDhKTB9x;&?YH`UE&MC;WcnoRQQK)- zuD9mpod*P-DkvId4S`Uu*67izmzy28W?i=>nP>l-s6{zf1E-NNFokIYpW%jqB5rE9 zWncrhse$t5+WHL*pBpHlESHRd1*EBpQofQemGjq<$|bpyG_Z*~1}dmZzb_2jMU{R^ zJcC*=a1UDs7Lnobk4Z~l_J8Lq5P6kzWBZ|1^8~a#v(d3OzLY~REDTJ&FF^9u>a=$# z*B;>tk{_NO4CtATR4MPb$ufo8?66kcPj5Ffx2Y(Py0Xk&s%}ETI%+1emUL=Rj`6|D z18UUlcAhfXS0Bbbt}UsU$<&FcjwI>BmtRxMvZ&?|YgHr_Dp>)u{IcWxT?puM#@t`y zEr1ye^UTq6eVvvJcfox){S4xXa(RR6h%$z7hG)Zfz*!`D3p4dOT4eBVOc>yPe<+uT z=-*@VDFTV-80sQeeI&%e;U7;i92@CEi-dED?-1cN(M9NyI6OG~lg`f(mL57icPQ;CQyv3X;J~52EKtTM3sTa_>MaHH{9VO3L+3VMgmA%fU3G*?6Pq?4@ z1>;>ray%N>ms_7eAbBD>I|GOKX=R0a{4KF5wPzEs(q0tbx#gxK9@nD_w! SSxzXLe65Z0wnSS1@BIVh2X*WK diff --git a/out/production/github-repo/Others/ReverseString.class b/out/production/github-repo/Others/ReverseString.class deleted file mode 100644 index 13037961397317571fe780376b95fd5b5c52bf3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1577 zcmZux-%}e^6#j0qWW%xu1}GFmiPhGSP*N3ZD}}a+RMAi>6g0(Oo8*!#CcBx6ZKlrab3w(9cwyn4C5wl8HgflKu1ogpGL86;5I%}md|x;7#PRZD85kgO9Ru$ ztKFt@-_fz9ASw#69eq*u&QX;0HO-nAQ?nY|T zsrc34498+9xt~)VJWbrgCdY?;Q!Sr5?%OGX*tD76D3a3C4wY)+#MSGuvWDFjfuE$i zOXhlfGu?4Pr_3ytUfccmmK&hM65Irjk{2=facNt1SIh5)^{J~8KalRvg(Zn40X7>QjVV>Hs>O3tf z_-|KFQ38$;a)Mwl5N?_`UZ#GHm=vmI-h2TgIFEOTVv_rJ zxk5a34i~voWoGdnl9VwR1%wUnU#IB`gJ@z%NXzLT?^HFB~CS zc!J>$j1ETfPhiGI+jt}0#@Hs6Ba9b1crzAjV`A|sCMnvO>K-_ALgg&U1cAf|WtK4J t31o#pZeTGeB+snVDp0>f{L71X;pwtIMkw;}QSu%k*Lt=bYW&_2oon43W36}VR zuVUl{5Ka65ehNQ{@qb&)Afd^<_ndR@`JdlCZGZp$@e9BlN;>*rYAB{LjTs#Y+>_IN z>CWotg{9*G9;&NbAFQRl~sbb{C^+cCgF*%oW=NYSoyVi8I@wTeqq;+w+`&!eWD?%&{e)w?4J) zz>&2DQf9eaED0on1MbpLf+(JD{>NfM)o%wi=an1X>k{*<#5B;40fB)C`C?%W^9G*c znLMyy;5ilzEMeKeBnlc<46I^J!wUm1u`ZCkswo2f-A-)o>^n6=UkFtXTcOh+zwBEs zzPsyNWv|%|**M2;@b-E0$_?33&2zqlWsjnKpKMUlZ`1AyZL#-Vp-jX={R?4gH07Z> z0Ti<&MSHu*ukCP;s!jj1>~*PBETOXz<+O4Pb!_|$+6k_8g@=%eM0zOO zPof;>Nz%wd)3F$?V}xE0%Z*};r6lb*ZV)ZUtO;64V(@jIV|-n0hKwDm3Ss)E_LtGE%mD8V9;g1EX(FYPU90!iB6lB!rx@B{oP zacp0MH$dJF5flO`~GL5q?L-sc8 z3x=X2193MQ_eAu-dp>O{PUvyJ%Ok1ga#SCuhW` z-1d1eu-zn*!JwIX@Mu7+>OU|8Bc%MN=M6=F;tLWr-Eb0lq9s+B0vTN@Z3_h$6nEvn zyti-!!@{w`%oWydF_hMUI=zwb65_@Qj}mvmq=*c;IP|9ir^wTooECozqB`4igX92w{09a(yFYoQ9VbTA{w d7ZQ3U>RT#WTM$u3g>aRpifxi**r8cN?H4JNU;6+6 diff --git a/out/production/github-repo/Others/Schedule$1.class b/out/production/github-repo/Others/Schedule$1.class deleted file mode 100644 index 4533374dcc830b00ce5b81d640c2512e7e56013c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmZWn*>2N76g`uem^g0hF6>*Nfo6kH2?>c*kx)cMP)aMM>ifhQC9WJB*-pQT7bF&m z2gEZUg*fB5sB&!0a?hMO=U!j``TO%1fLC~4MhR65CLWhz;E9P{i%8AHQxnfj>MN&>GXbL?PL#mL&e_%fJwj>qT9O}eXy7AcRsX&{q@wtcfoSt5(X^E>@CJDG&h zLEf~-?5$C_h+K8(>2Gm;^x^P@&VV24UEum*>;=;!mCVA4iMovjnl{R?Y*h5Fg|@(Y z){Cq}8{61ni*g;R?X&27ZERKw$o<%x o$9G)I3onz@MUj{Z8@Q9&-^IOjy^jZ64LrmnY;tFjUE<2;AGp7`<^TWy diff --git a/out/production/github-repo/Others/Schedule$2.class b/out/production/github-repo/Others/Schedule$2.class deleted file mode 100644 index 8da06bfddc5bcf9e378e75fb62c1efa96dff8f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1114 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 Aga7~l diff --git a/out/production/github-repo/Others/SkylineProblem$Building.class b/out/production/github-repo/Others/SkylineProblem$Building.class deleted file mode 100644 index efd7c562275a9e2d763a5b1c1bdfe6c406a6cc19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmZ`$O-lk%6g_Vo9ml3LO-<9%a$yr>3wK3}gkV52Fx-#&(r4ocqXw1rpIS)Jq94$Y zitZaN2yAmd-#zEt`#!(kKLAv5pd*A#1RAn3+L0zFO9jY*$-<4W`H!4WRM_C{@o4^L_4Ot@ll&X6zv^Tx8Q!xr(>MqSPj zt<(6`blB$JjZGK~@%pG^J1yH2GG7)|$;=SGmJ(P9m3{_D zTBJFedL4c#BunD2^5cPhZyPYMZeRmN17YX}BGRlu*Rap9yK?1U0*08xs5rLUt2EjJ z-l4+<%5v4@%1IRI>>B-w3R(<0MWk`*i4=&%q#(b}NL7^jG0J985G0>9kLFO4C`7a*{?THX(NZ=V6ydX}!>H>voDar`XXJdXO^(cNM6$SiA WYEr41rcA*$lH?<#DTG~YfqetPY`JsJk9`dd4NXGP3BzdO1$H800$GHt zE4-fS6<*H*MvsrAC6_6j0l-tI1z+W zpVhaE`B+5vHjf~b`=Mj|BRleBy=rEpF+p3|5p*jEMAY-`IF>0}>%H15KIbY7!$stX z8&7&v{>DC=+0V9)0*X3x9O}@J(~(C`LyOQ{yXx;~f+5vi-wvkT!FVPdekZjfSFEiS z;+P*h%io}a7ebB^NiV=KWQ4Tl1+mHfEv{TB$nae?PnRI`4T{-VLN%L9WL~+ipu}f6 w<%B%xkyTHqAcDbt^GAzqRJr0QsRyMbdo4Xkr_Z2$lO diff --git a/out/production/github-repo/Others/SkylineProblem.class b/out/production/github-repo/Others/SkylineProblem.class deleted file mode 100644 index 50c2006541f9510a5c0388f3a243c840802e2a2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4275 zcmai0TXa;_8UFUnIdhW93537^LuR;xVMvHXi5fJ>RZ>Hsjer5IIZRHHfw}d}3?+P-v+m^3;o_9-6ncE^5hr&lZD%%Cj@hZ8Cv&B2 zQ9%tVgziseQ^f&=VCR-&3fkV>I1gMr#B+yBnNzm&h{f#+?L)bwl|E)UDVh6=T5&2x zAS)VQ$(w>sDa-p(*?fujwGW-P&RRWbD?8aUQgrAOO|)^VXelf`*+{8U3V}kBYEN4# zrqVqlNlSQ;KQv{hCZ{Oqj{nUQ z1m`O|>yF>;IM(z~s!-hNZY|oGyuzBsE^hQmCKjVmiAJR1VRR(LtCrO%2aC326?5Xr z@|)?M&Q~bztFx~nyMF;R13Ym@-NwpA3-2@Vl0x%HYBFmTOAh0HUqfmZK1jH0nMh^F zt4SJVG`7@%s(M4PTAF+_E`_4y@Ef$V3|}yl;;50=?cS$Xq5pP=ER2Ztld+viy9#J` zL)UgTgm^pPP05nu*xBNvWX%^35^Yr`WG!QzJIK0bKTvq3;hhVEZv<-LT@6t$yv@a& zV&N|DY*3YMRanj>%WRRK^L~#}2#@4SPSQS*l9sX5XWG|plj1kA1APih+(uAe%?5sA z;u2mKgI7%a6hBi~{r@|eiS6h$F@smx%DN2v+{7>NO9Q_$@oW6X#6vh};sj2b7{VbF zzeS&kyKuMMaM{FbxWZ&N@jG0VGp;Gb8(-&pVWNy#_PSeJnA=xv$HeP$^mV);!<>na z$n;ITYTzva@HY9VIbF?t6N4V2-wWP%Ogt>pB*snrL4f@c@0$1%-c^V+L}%iD;j^uV z>hP)4c9J#JUc0SQ{x{i;Oc&VNq$@Gde#=VbdIqIcvpL&VhILtKjJGHx1&pkHt~e;& zlP?D!5>4jpZ=HV9-Q4Bt0D7HYiano}j(CS(67?IlG|0P3*0^@O*q*cAw<9DZd{};@6i>g+CHvOj(6t*HLzZNA4sg^?=k&*Y2K^nTJ7?{9Xe%1y|zGr6-i*6}A!H-EMT_|HP- z2q{mF2KaoTkK;X@_3*3s)f2N&uTco#UXCGm(ZGF_P0s-R*vXlan&2p#--k|1;Nx=$ zj9x)-7TVC(GV})$v9}Pq1|v8Sk6prct~K>*QLVkXjBvl6i0Z-K*U=KyHSeR#rwsE# zP|eK$HIWF$wDB@p%UHyniv?BCMYRnrlueF{(1yiWi6#75*N#nCifvfN8ef7#SdLL@ z9!JzgKR|?=upSR!02-~L*o6m)dll)}O+tc#-}kKrBiMtz^sWuV*hg&u`>Ah5;6to3 za6qa5kV_@a&!=DtO*|HeC9c9qj9x|C32p2e+U5`%O?1TKvsf}xqg8$Z(-s|wyWkSu zUjKU0uwn6Jk=WvVYj!QdRMKdjiH_Jy*gJh^qK*j%9(s2#6RzK7=Y^E8|P6La7Y+KskQ|Nf_<7#S-&3a z3o&=@coFY)xu3sp4VKZ#)M2`G)x=A%>J)uOZ4w)ZN3=`WBr98vM?w+pB6_2`8;Xb# z(R`L?5RdaJ*QlyxRcw&R%*;PscUPZLo5cFGh!($u4YDN1$1mcp|J{!@5v?!e*;KW) zyXV(i`OWnfITA*ohiT&;(#wqnXnr^lEM`&nK#)5PFuhkc0=tt1vDNgcKgN|HJO1XLFj zPuhmAwqTNyhDB7OJM0>>P7T(mUfQ&+zOkDV9LSo*%hOK8`#BfM_|<|KM&6kc^Vnwl9n|nsQ7K2LxNSiRUV42T4!A3*2;ON>a*+v r7hKo9UeSsyX$Lhra_m9;QH4C`0epg$2)6$K9Z9e<`6}{zC)9rdrxfX; diff --git a/out/production/github-repo/Others/StackPostfixNotation.class b/out/production/github-repo/Others/StackPostfixNotation.class deleted file mode 100644 index 7a389f88c98dc668a75810d69936a016f5c65eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1817 zcmaJ?O>qQ3dhvCBqvRszqhhYrkN*EtuLBnDgy_gs5V_80tB`eFPVMK9N(3~tw8kR+~ zBG_sOpM~)`)+W1yV7TE*DRRTbcUf$c+@Q!6^~iAm}8*fhC+DFsaNynq9sijK91m7xwwu|jIm0O zgl>j3Z0gv;O)>aF$CtRJ<15_OF@ss7!l^{Et23?HWdEHytLTJY<;-?M z4|)YNaF?0`TM?rYOY$eOlIGZ%qh2c-wPjY|y}d2Ax^*U*1f@1l;=|-rYBIv+%C0=4 zYC9oZ+-}dc!zaKDR09oGHBkd8zpx0$bH%g zw(v5)P$T@10X<-=F~)VArxbU^Jur0u^&15rUg8>TDshIg-jXL61pIKlf>)^#XOqEt zxQ{-8Z}Sm)4&cvCHxO8Qgy76$XbprqA*1lqR6`#^7+{zYguU<+%@BAEuM_VhHifA=QAAdb_? zp{Sz`iCRSPmWH==1d-72j*c2!2xCa>7j<01u!hSzbR@)bMJ!3NysKjbsXB~eOf2IX z-qX>H_r>yo;7kY)lNvtM(TXVzA8EL%AiQAbtTA)RQqY`QG;f))oatm@6TW9VnE?f% zLEEwYgo1<7z2eR(1?rGHPvgdv?O0>Qr8&!+H0N^CotrjuQ>JGNy3ADltX)u`54lCh zpLV@@5=PQ-EN>`h777;0j?}oHwY)-X(#?-ZmE%vfiKsqf`4{c9Z@Z4^Ei2d;?JOZH z`gSfhYUZhAkap3JPos0Nhe?Q zSs%+>qPLdRt}K`Hl}!6~I~y#K)y1viBpu(%Sl&QF6^?$mQ3E$4EsRC$GkfY z*A&!F*cr$4iypJ=e>VI7A4s2Yi(c9iIVot^sdkU(0s|eGHEOo3}gzY0QhoGO&OQb2N|@hBF3iEE>3p zTm^u%E*Hwc60RF?;2Ox|Qv)7m73{Bos=9Ck1h+bN7# zoUUDCU#iT202<^JDmYnKq71?RpEwPU;aCV}}YRr`(pmR=`Xzjh8 z_HwE{?1ZaH=iCBgHRkz@aacJ}lPo$pP0w}#j`G26;{(i>LG(LM0iM~$TwfwJOgg|_ z@7jdY)%`01KT4gWTpRdE1NBgOszoDSCe>2X#xa~AMLX%0&kauERm$iy@C_|$DSNVo z;MGm2DP?pEHCMZSL0}W1(O{xki>s$L5KaU-zJ=Sdav!yK(Y^(p+I10i14hTn2I@D^ z5LeeREI5s;h<8WS2WSf5E{^diseJ+biRKOLS8v?Mfd@Dk#Pm9vC{uUnooMUZE8X!L z25wo09uGxA8#olHxi@y2dx?8Qp4ZV5*D7k^NLZ+8e<=5$;VTCJnqL^5r#0^1;|Kgy zrXMopHFCuM8)5xL{zIMwt@0v(J9vd_Gs4(U53MZbA^sw~mNpi*oh9r*53lAjsd4Jg zu*l1Z;!AYnHcn#&F~;pBhJK>x!z$jucjT?%HLT+dWA_qIKN0oeXUaBlp3%<|Lof04 z6Hy-?k^h+Ie-M`!dW~1L%5P^Bod^-l9dt2TkZ5k>6jzm=RVfY9XXW&$Y!PNYPs+^@ z#^1!)!&cB4B}PmEViK<})6lD-Ptk}9C(al_ZJT&Py987L y75YQlbQs(bN!|$gmo=Q=L diff --git a/out/production/github-repo/Others/TopKWords.class b/out/production/github-repo/Others/TopKWords.class deleted file mode 100644 index bf4ae0386e447b591f8fcb01ca3725a1057be1e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2677 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 diff --git a/out/production/github-repo/README-ko.md b/out/production/github-repo/README-ko.md deleted file mode 100644 index c53868cc1310..000000000000 --- a/out/production/github-repo/README-ko.md +++ /dev/null @@ -1,187 +0,0 @@ -# 알고리즘 - ìžë°” - -## ì´ [개발브런치](https://github.com/TheAlgorithms/Java/tree/Development)는 기존 프로ì íŠ¸ë¥¼ Java 프로ì íЏ 구조로 재개발하기 위해 작성ë˜ì—ˆë‹¤. 기여ë„를 위해 개발 지사로 전환할 수 있다. ìžì„¸í•œ ë‚´ìš©ì€ ì´ ë¬¸ì œë¥¼ 참조하십시오. ì»¨íŠ¸ë¦¬ë·°ì…˜ì„ ìœ„í•´ [개발브런치](https://github.com/TheAlgorithms/Java/tree/Development)로 전환할 수 있다. ìžì„¸í•œ ë‚´ìš©ì€ [ì´ ì´ìŠˆ](https://github.com/TheAlgorithms/Java/issues/474)를 참고하십시오. - -### ìžë°”로 êµ¬í˜„ëœ ëª¨ë“  알고리즘들 (êµìœ¡ìš©) - -ì´ê²ƒë“¤ì€ 단지 ì‹œë²”ì„ ìœ„í•œ 것ì´ë‹¤. 표준 ìžë°” ë¼ì´ë¸ŒëŸ¬ë¦¬ì—는 성능ìƒì˜ ì´ìœ ë¡œ ë” ë‚˜ì€ ê²ƒë“¤ì´ êµ¬í˜„ë˜ì–´ìžˆë‹¤ - -## ì •ë ¬ 알고리즘 - - -### Bubble(버블 ì •ë ¬) -![alt text][bubble-image] - -From [Wikipedia][bubble-wiki]: 버블 소트(sinking sorë¼ê³ ë„ 불리움)는 리스트를 반복ì ì¸ 단계로 접근하여 정렬한다. ê°ê°ì˜ ì§ì„ 비êµí•˜ë©°, 순서가 ìž˜ëª»ëœ ê²½ìš° 그접한 ì•„ì´í…œë“¤ì„ 스왑하는 알고리즘ì´ë‹¤. ë” ì´ìƒ 스왑할 ê²ƒì´ ì—†ì„ ë•Œê¹Œì§€ 반복하며, ë°˜ë³µì´ ëë‚¨ìŒ ë¦¬ìŠ¤íŠ¸ê°€ ì •ë ¬ë˜ì—ˆìŒì„ ì˜ë¯¸í•œë‹¤. - -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n) -* í‰ê·  성능 O(n^2) - -###### View the algorithm in [action][bubble-toptal] - - - -### Insertion(삽입 ì •ë ¬) -![alt text][insertion-image] - -From [Wikipedia][insertion-wiki]: 삽입 ì •ë ¬ì€ ìµœì¢… ì •ë ¬ëœ ë°°ì—´(ë˜ëŠ” 리스트)ì„ í•œë²ˆì— í•˜ë‚˜ì”© 구축하는 알고리즘ì´ë‹¤. ì´ê²ƒì€ í° ë¦¬ìŠ¤íŠ¸ì—서 ë” ë‚˜ì€ ì•Œê³ ë¦¬ì¦˜ì¸ í€µ 소트, íž™ 소트, ë˜ëŠ” 머지 소트보다 훨씬 ì•ˆì¢‹ì€ íš¨ìœ¨ì„ ê°€ì§„ë‹¤. 그림ì—서 ê° ë§‰ëŒ€ëŠ” 정렬해야 하는 ë°°ì—´ì˜ ìš”ì†Œë¥¼ 나타낸다. ìƒë‹¨ê³¼ ë‘ ë²ˆì§¸ ìƒë‹¨ ë§‰ëŒ€ì˜ ì²« 번째 êµì°¨ì ì—서 ë°œìƒí•˜ëŠ” ê²ƒì€ ë‘ ë²ˆì§¸ 요소가 첫 번째 요소보다 ë” ë†’ì€ ìš°ì„  순위를 가지기 ë–„ë¬¸ì— ë§‰ëŒ€ë¡œ 표시ë˜ëŠ” ì´ëŸ¬í•œ 요소를 êµí™˜í•œ 것ì´ë‹¤. ì´ ë°©ë²•ì„ ë°˜ë³µí•˜ë©´ 삽입 ì •ë ¬ì´ ì™„ë£Œëœë‹¤. - -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n) -* í‰ê·  O(n^2) - -###### View the algorithm in [action][insertion-toptal] - - -### Merge(합병 ì •ë ¬) -![alt text][merge-image] - -From [Wikipedia][merge-wiki]: 컴퓨터 과학ì—서, 합병 ì •ë ¬ì€ íš¨ìœ¨ì ì¸, 범용ì ì¸, ë¹„êµ ê¸°ë°˜ ì •ë ¬ 알고리즘ì´ë‹¤. ëŒ€ë¶€ë¶„ì˜ êµ¬í˜„ì€ ì•ˆì •ì ì¸ 분류를 ì´ë£¨ëŠ”ë°, ì´ê²ƒì€ êµ¬í˜„ì´ ì •ë ¬ëœ ì¶œë ¥ì— ë™ì¼í•œ ìš”ì†Œì˜ ìž…ë ¥ 순서를 유지한다는 ê²ƒì„ ì˜ë¯¸í•œë‹¤. 합병 ì •ë ¬ì€ 1945ë…„ì— John von Neumannì´ ë°œëª…í•œ ë¶„í•  ì •ë³µ 알고리즘ì´ë‹¤. - -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n log n) (ì¼ë°˜ì ) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) -* í‰ê·  O(n log n) - - -###### View the algorithm in [action][merge-toptal] - -### Quick(퀵 ì •ë ¬) -![alt text][quick-image] - -From [Wikipedia][quick-wiki]: 퀵 ì •ë ¬sometimes called partition-exchange sort)ì€ íš¨ìœ¨ì ì¸ ì •ë ¬ 알고리즘으로, ë°°ì—´ì˜ ìš”ì†Œë¥¼ 순서대로 정렬하는 체계ì ì¸ 방법 ì—­í™œì„ í•œë‹¤. - -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) or O(n) with three-way partition -* í‰ê·  O(n log n) - -###### View the algorithm in [action][quick-toptal] - -### Selection(ì„ íƒ ì •ë ¬) -![alt text][selection-image] - -From [Wikipedia][selection-wiki]: 알고리즘 ìž…ë ¥ 리스트를 ë‘ ë¶€ë¶„ìœ¼ë¡œ 나눈다 : 첫 ë¶€ë¶„ì€ ì•„ì´í…œë“¤ì´ ì´ë¯¸ 왼쪽ì—서 오른쪽으로 ì •ë ¬ë˜ì—ˆë‹¤. 그리고 ë‚¨ì€ ë¶€ë¶„ì˜ ì•„ì´í…œë“¤ì€ 나머지 í•­ëª©ì„ ì°¨ì§€í•˜ëŠ” 리스트ì´ë‹¤. 처ìŒì—는 ì •ë ¬ëœ ë¦¬ìŠ¤íŠ¸ëŠ” 공백ì´ê³  나머지가 ì „ë¶€ì´ë‹¤. 오르차순(ë˜ëŠ” 내림차순) ì•Œê³ ë¦¬ì¦˜ì€ ê°€ìž¥ ìž‘ì€ ìš”ì†Œë¥¼ ì •ë ¬ë˜ì§€ ì•Šì€ ë¦¬ìŠ¤íŠ¸ì—서 찾고 ì •ë ¬ì´ ì•ˆëœ ê°€ìž¥ 왼쪽(ì •ë ¬ëœ ë¦¬ìŠ¤íŠ¸) 리스트와 바꾼다. ì´ë ‡ê²Œ 오른쪽으로 나아간다. - -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n^2) -* í‰ê·  O(n^2) - -###### View the algorithm in [action][selection-toptal] - -### Shell(쉘 ì •ë ¬) -![alt text][shell-image] - -From [Wikipedia][shell-wiki]: 쉘 ì •ë ¬ì€ ë©€ë¦¬ 떨어져 있는 í•­ëª©ì˜ êµí™˜ì„ 허용하는 삽입 ì¢…ë¥˜ì˜ ì¼ë°˜í™”ì´ë‹¤. ê·¸ ì•„ì´ë””어는 모든 n번째 요소가 ì •ë ¬ëœ ëª©ë¡ì„ 제공한다는 ê²ƒì„ ê³ ë ¤í•˜ì—¬ ì–´ëŠ ê³³ì—서든지 시작하ë„ë¡ ìš”ì†Œì˜ ëª©ë¡ì„ 배열하는 것ì´ë‹¤. ì´ëŸ¬í•œ 목ë¡ì€ h-sorted로 알려져 있다. 마찬가지로, ê°ê° 개별ì ìœ¼ë¡œ ì •ë ¬ëœ h ì¸í„°ë¦¬ë¸Œ 목ë¡ìœ¼ë¡œ ê°„ì£¼ë  ìˆ˜ 있다. - -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(nlog2 2n) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) -* Average case performance depends on gap sequence - -###### View the algorithm in [action][shell-toptal] - -### 시간 복잡성 그래프 - -ì •ë ¬ ì•Œê³ ë¦¬ì¦˜ì˜ ë³µìž¡ì„± ë¹„êµ (버블 ì •ë ¬, 삽입 ì •ë ¬, ì„ íƒ ì •ë ¬) - -[복잡성 그래프](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) - ----------------------------------------------------------------------------------- - -## 검색 알고리즘 - -### Linear (선형 íƒìƒ‰) -![alt text][linear-image] - -From [Wikipedia][linear-wiki]: 선형 íƒìƒ‰ ë˜ëŠ” 순차 íƒìƒ‰ì€ ëª©ë¡ ë‚´ì—서 ëª©í‘œê°’ì„ ì°¾ëŠ” 방법ì´ë‹¤. ì¼ì¹˜ í•­ëª©ì´ ë°œê²¬ë˜ê±°ë‚˜ 모든 요소가 íƒìƒ‰ë  때까지 목ë¡ì˜ ê° ìš”ì†Œì— ëŒ€í•´ ëª©í‘œê°’ì„ ìˆœì°¨ì ìœ¼ë¡œ 검사한다. - 선형 ê²€ìƒ‰ì€ ìµœì•…ì˜ ì„ í˜• 시간으로 실행ë˜ë©° 최대 nê°œì˜ ë¹„êµì—서 ì´ë£¨ì–´ì§„다. 여기서 nì€ ëª©ë¡ì˜ 길ì´ë‹¤. - -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n) -* ìµœê³ ì˜ ì„±ëŠ¥ O(1) -* í‰ê·  O(n) -* ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) iterative - -### Binary (ì´ì§„ íƒìƒ‰) -![alt text][binary-image] - -From [Wikipedia][binary-wiki]: ì´ì§„ íƒìƒ‰, (also known as half-interval search or logarithmic search), ì€ ì •ë ¬ëœ ë°°ì—´ ë‚´ì—서 ëª©í‘œê°’ì˜ ìœ„ì¹˜ë¥¼ 찾는 검색 알고리즘ì´ë‹¤. ëª©í‘œê°’ì„ ë°°ì—´ì˜ ì¤‘ê°„ 요소와 비êµí•œë‹¤; 만약 ëª©í‘œê°’ì´ ë™ì¼í•˜ì§€ 않으면, ëª©í‘œë¬¼ì˜ ì ˆë°˜ì´ ì œê±°ë˜ê³  ê²€ìƒ‰ì´ ì„±ê³µí•  때까지 나머지 절반ì—서 게ì†ëœë‹¤. - -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(log n) -* ìµœê³ ì˜ ì„±ëŠ¥ O(1) -* í‰ê·  O(log n) -* ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) - - -[bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort -[bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort -[bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" - -[insertion-toptal]: https://www.toptal.com/developers/sorting-algorithms/insertion-sort -[insertion-wiki]: https://en.wikipedia.org/wiki/Insertion_sort -[insertion-image]: https://upload.wikimedia.org/wikipedia/commons/7/7e/Insertionsort-edited.png "Insertion Sort" - -[quick-toptal]: https://www.toptal.com/developers/sorting-algorithms/quick-sort -[quick-wiki]: https://en.wikipedia.org/wiki/Quicksort -[quick-image]: https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif "Quick Sort" - -[merge-toptal]: https://www.toptal.com/developers/sorting-algorithms/merge-sort -[merge-wiki]: https://en.wikipedia.org/wiki/Merge_sort -[merge-image]: https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif "Merge Sort" - -[selection-toptal]: https://www.toptal.com/developers/sorting-algorithms/selection-sort -[selection-wiki]: https://en.wikipedia.org/wiki/Selection_sort -[selection-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/250px-Selection_sort_animation.gif "Selection Sort Sort" - -[shell-toptal]: https://www.toptal.com/developers/sorting-algorithms/shell-sort -[shell-wiki]: https://en.wikipedia.org/wiki/Shellsort -[shell-image]: https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif "Shell Sort" - -[linear-wiki]: https://en.wikipedia.org/wiki/Linear_search -[linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif - -[binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm -[binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png - - --------------------------------------------------------------------- -## 나머지 ì•Œê³ ë¦¬ì¦˜ì— ëŒ€í•œ ë§í¬ - -전환 | 다ì´ë‚˜ë¯¹í”„로그래ë°(DP) |암호|ê·¸ 외 것들| ------------ |----------------------------------------------------------------|-------|-------------| -[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](Dynamic%20Programming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| -[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](Dynamic%20Programming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| -[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](Dynamic%20Programming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| -[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](Dynamic%20Programming/KadaneAlgorithm.java)|more coming soon...| -[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](Dynamic%20Programming/Knapsack.java)| -[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](Dynamic%20Programming/LongestCommonSubsequence.java)| -[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](Dynamic%20Programming/LongestIncreasingSubsequence.java)| -[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](Dynamic%20Programming/RodCutting.java)| -and much more...| and more...| - -### ìžë£Œ 구조 -그래프|íž™|리스트|í| -------|-----|-----|------| -[너비우선íƒìƒ‰](DataStructures/Graphs/BFS.java)|[빈 íž™ 예외처리](DataStructures/Heaps/EmptyHeapException.java)|[ì›í˜• 연결리스트](DataStructures/Lists/CircleLinkedList.java)|[제너릭 ì–´ë ˆì´ ë¦¬ìŠ¤íŠ¸ í](DataStructures/Queues/GenericArrayListQueue.java)| -[깊ì´ìš°ì„ íƒìƒ‰](DataStructures/Graphs/DFS.java)|[íž™](DataStructures/Heaps/Heap.java)|[ì´ì¤‘ 연결리스트](DataStructures/Lists/DoublyLinkedList.java)|[í](DataStructures/Queues/Queues.java)| -[그래프](DataStructures/Graphs/Graphs.java)|[íž™ 요소](DataStructures/Heaps/HeapElement.java)|[단순 연결리스트](DataStructures/Lists/SinglyLinkedList.java)| -[í¬ë£¨ìŠ¤ì¹¼ 알고리즘](DataStructures/Graphs/KruskalsAlgorithm.java)|[최대힙](Data%Structures/Heaps/MaxHeap.java)| -[행렬 그래프](DataStructures/Graphs/MatrixGraphs.java)|[최소힙](DataStructures/Heaps/MinHeap.java)| -[프림 최소신장트리](DataStructures/Graphs/PrimMST.java)| - -스íƒ|트리| -------|-----| -[노드 스íƒ](DataStructures/Stacks/NodeStack.java)|[AVL 트리](DataStructures/Trees/AVLTree.java)| -[연결리스트 스íƒ](DataStructures/Stacks/StackOfLinkedList.java)|[ì´ì§„ 트리](DataStructures/Trees/BinaryTree.java)| -[스íƒ](DataStructures/Stacks)|And much more...| - -* [Bags](DataStructures/Bags/Bag.java) -* [Buffer](DataStructures/Buffers/CircularBuffer.java) -* [HashMap](DataStructures/HashMap/HashMap.java) -* [Matrix](DataStructures/Matrix/Matrix.java) diff --git a/out/production/github-repo/README.md b/out/production/github-repo/README.md deleted file mode 100644 index 06a88dfe149d..000000000000 --- a/out/production/github-repo/README.md +++ /dev/null @@ -1,197 +0,0 @@ -# The Algorithms - Java -[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JP3BLXA6KMDGW) - - -NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. - -### All algorithms implemented in Java (for education) - -These are for demonstration purposes only. There are many implementations of sorts in the Java standard library that are much better for performance reasons. - -## Sort Algorithms - - -### Bubble -![alt text][bubble-image] - -From [Wikipedia][bubble-wiki]: Bubble sort, sometimes referred to as sinking sort, is a simple sorting algorithm that repeatedly steps through the list to be sorted, compares each pair of adjacent items and swaps them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. - -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n) -* Average case performance O(n^2) - -##### View the algorithm in [action][bubble-toptal] - - - -### Insertion -![alt text][insertion-image] - -From [Wikipedia][insertion-wiki]: Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. -In the figure, each bar represents an element of an array that needs to be sorted. What happens at the first intersection of the top most and second top most bars is to swap these elements, represented by bars, because the second element has a higher precedence than the first element does. By repeating this method, insertion sort completes sorting. - -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n) -* Average case performance O(n^2) - -##### View the algorithm in [action][insertion-toptal] - - -### Merge -![alt text][merge-image] - -From [Wikipedia][merge-wiki]: In computer science, merge sort (also commonly spelt mergesort) is an efficient, general-purpose, comparison-based sorting algorithm. Most implementations produce a stable sort, which means that the implementation preserves the input order of equal elements in the sorted output. Mergesort is a divide and conquer algorithm that was invented by John von Neumann in 1945. - -__Properties__ -* Worst case performance O(n log n) (typical) -* Best case performance O(n log n) -* Average case performance O(n log n) - - -##### View the algorithm in [action][merge-toptal] - -### Quick -![alt text][quick-image] - -From [Wikipedia][quick-wiki]: Quicksort (sometimes called partition-exchange sort) is an efficient sorting algorithm, serving as a systematic method for placing the elements of an array in order. - -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n log n) or O(n) with three-way partition -* Average case performance O(n log n) - -##### View the algorithm in [action][quick-toptal] - -### Selection -![alt text][selection-image] - -From [Wikipedia][selection-wiki]: The algorithm divides the input list into two parts: the sublist of items already sorted, which is built up from left to right at the front (left) of the list, and the sublist of items remaining to be sorted that occupy the rest of the list. Initially, the sorted sublist is empty and the unsorted sublist is the entire input list. The algorithm proceeds by finding the smallest (or largest, depending on sorting order) element in the unsorted sublist, exchanging (swapping) it with the leftmost unsorted element (putting it in sorted order), and moving the sublist boundaries one element to the right. - -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n^2) -* Average case performance O(n^2) - -##### View the algorithm in [action][selection-toptal] - -### Shell -![alt text][shell-image] - -From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. - -__Properties__ -* Worst case performance O(nlog2 2n) -* Best case performance O(n log n) -* Average case performance depends on gap sequence - -##### View the algorithm in [action][shell-toptal] - -### Time-Complexity Graphs - -Comparing the complexity of sorting algorithms (Bubble Sort, Insertion Sort, Selection Sort) - -[Complexity Graphs](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) - ----------------------------------------------------------------------------------- - -## Search Algorithms - -### Linear -![alt text][linear-image] - -From [Wikipedia][linear-wiki]: linear search or sequential search is a method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched. - The linear search runs in at the worst linear time and makes at most n comparisons, where n is the length of the list. - -__Properties__ -* Worst case performance O(n) -* Best case performance O(1) -* Average case performance O(n) -* Worst case space complexity O(1) iterative - -##### View the algorithm in [action][linear-tutorialspoint] - -### Binary -![alt text][binary-image] - -From [Wikipedia][binary-wiki]: Binary search, also known as half-interval search or logarithmic search, is a search algorithm that finds the position of a target value within a sorted array. It compares the target value to the middle element of the array; if they are unequal, the half in which the target cannot lie is eliminated and the search continues on the remaining half until it is successful. - -__Properties__ -* Worst case performance O(log n) -* Best case performance O(1) -* Average case performance O(log n) -* Worst case space complexity O(1) - -##### View the algorithm in [action][binary-tutorialspoint] - -[bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort -[bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort -[bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" - -[insertion-toptal]: https://www.toptal.com/developers/sorting-algorithms/insertion-sort -[insertion-wiki]: https://en.wikipedia.org/wiki/Insertion_sort -[insertion-image]: https://upload.wikimedia.org/wikipedia/commons/7/7e/Insertionsort-edited.png "Insertion Sort" - -[quick-toptal]: https://www.toptal.com/developers/sorting-algorithms/quick-sort -[quick-wiki]: https://en.wikipedia.org/wiki/Quicksort -[quick-image]: https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif "Quick Sort" - -[merge-toptal]: https://www.toptal.com/developers/sorting-algorithms/merge-sort -[merge-wiki]: https://en.wikipedia.org/wiki/Merge_sort -[merge-image]: https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif "Merge Sort" - -[selection-toptal]: https://www.toptal.com/developers/sorting-algorithms/selection-sort -[selection-wiki]: https://en.wikipedia.org/wiki/Selection_sort -[selection-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/250px-Selection_sort_animation.gif "Selection Sort Sort" - -[shell-toptal]: https://www.toptal.com/developers/sorting-algorithms/shell-sort -[shell-wiki]: https://en.wikipedia.org/wiki/Shellsort -[shell-image]: https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif "Shell Sort" - -[linear-wiki]: https://en.wikipedia.org/wiki/Linear_search -[linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif -[linear-tutorialspoint]: https://www.tutorialspoint.com/data_structures_algorithms/linear_search_algorithm.htm - -[binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm -[binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png -[binary-tutorialspoint]: https://www.tutorialspoint.com/data_structures_algorithms/binary_search_algorithm.htm - - --------------------------------------------------------------------- -## Links to the rest of the algorithms - -Conversions | Dynamic Programming |Ciphers|Miscellaneous| ------------ |----------------------------------------------------------------|-------|-------------| -[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](Dynamic%20Programming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| -[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](Dynamic%20Programming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| -[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](Dynamic%20Programming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| -[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](Dynamic%20Programming/KadaneAlgorithm.java)|more coming soon...| -[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](Dynamic%20Programming/Knapsack.java)| -[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](Dynamic%20Programming/LongestCommonSubsequence.java)| -[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](Dynamic%20Programming/LongestIncreasingSubsequence.java)| -[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](Dynamic%20Programming/RodCutting.java)| -and much more...| and more...| - -### Data Structures -Graphs|Heaps|Lists|Queues| -------|-----|-----|------| -[BFS](DataStructures/Graphs/BFS.java)|[Empty Heap Exception](DataStructures/Heaps/EmptyHeapException.java)|[Circle Linked List](DataStructures/Lists/CircleLinkedList.java)|[Generic Array List Queue](DataStructures/Queues/GenericArrayListQueue.java)| -[DFS](DataStructures/Graphs/DFS.java)|[Heap](DataStructures/Heaps/Heap.java)|[Doubly Linked List](DataStructures/Lists/DoublyLinkedList.java)|[Queues](DataStructures/Queues/Queues.java)| -[Graphs](DataStructures/Graphs/Graphs.java)|[Heap Element](DataStructures/Heaps/HeapElement.java)|[Singly Linked List](DataStructures/Lists/SinglyLinkedList.java)| -[Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](DataStructures/Heaps/MaxHeap.java)| -[CursorLinkedList](DataStructures/Lists/CursorLinkedList.java)| -[Matrix Graphs](DataStructures/Graphs/MatrixGraphs.java)|[Min Heap](DataStructures/Heaps/MinHeap.java)| -[PrimMST](DataStructures/Graphs/PrimMST.java)| - -Stacks|Trees| -------|-----| -[Node Stack](DataStructures/Stacks/NodeStack.java)|[AVL Tree](DataStructures/Trees/AVLTree.java)| -[Stack of Linked List](DataStructures/Stacks/StackOfLinkedList.java)|[Binary Tree](DataStructures/Trees/BinaryTree.java)| -[Array Stack](DataStructures/Stacks/StackArray.java)|And much more...| -[ArrayList Stack](DataStructures/Stacks/StackArrayList.java)|| - -* [Bags](DataStructures/Bags/Bag.java) -* [Buffer](DataStructures/Buffers/CircularBuffer.java) -* [HashMap](DataStructures/HashMap/Hashing/HashMap.java) -* [Matrix](DataStructures/Matrix/Matrix.java) diff --git a/out/production/github-repo/Searches/BinarySearch.class b/out/production/github-repo/Searches/BinarySearch.class deleted file mode 100644 index e8ce337c1b0dd1f8c7b79f41eef91e15be0dac3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3839 zcmb7H`F9)D75>H=X=HiaC?;}nVuMJXRJKDL9B{#Q+}Z{=qH+Sr1f0;4CuuBAJeo11 zQECI-XrVy&eWNs`3tiF{QtCL#Nlt(6>HpHdprzlNnb@O5P3ejCmiz9#@80h&Z}Rtl zU%3w8eq2qV7sV9PSnR@+IGMszcsd5Mh-#_r5-3)?m`tc4YMhj zIGaL0Ry0^r4R!USE?0IZ9IPhsoCY_A2D}uSIG4g_u$IJn3eV#O4KHf=tb)XpX`9}( zf>>_oqylx$sTc}&6inMV-mI4lcTtoqQhEwbSy(59Ys!5{RK1$nP_VmDG=y8O8I93d z(-!V}u$`p3Wz()GIGj6OI4jPHQA^m>(K)BSDqN{%vORSuuOKd5SFBU_f03lYD+bSd z+pCZVEe5ZzZW(=gagnCQ{IRoWR&C)mUAj0twKy@+R^1eNrzfX#Qj&ktzC^=!S;5%< z=UYB6rB%yV_7o`6QP-^2xK7lKiYaWKm5Gmn?xH8kD+^*Z#QNX|wJyA&E=(%xZLzNC zxu#v6^aCy2DnoZi6yETdcDXX(e#DxdX^lQ1?21#D@obpS6RA{PtUY2Gb;G9NNz?X> zs^L=GuBf(rK&Di8qvkZN%B(T(G-Wzy!pqwgV~s1%nX4IPX7H4T&oPfRd|tyBG<=a# zmZ+C1Vo*9Vcpoz%mmg}cKeje__$GetdvmvX;DetkI!(81%$qW=cSbYzkaStcUASAv zVce(TB^_VFmo>bs;}v{GL3-A4yoTqB)dj<=IhDqa1YS+!HBPVV_$t1p;p;lSfp6;g z7QU_HJNT}S@8SDt{D3S!Ok+XEkMLs+Khg11yg{FJ{0wjE_&HuvkZD^+I?m%4I`-p$ zhPQP562DS#wCE$6Eg9KmiRnakf8|ithnK6Y@UpBsW6h_|*jc}pvX)_2y&7rsW4jtp zl+GGukD%-LHGV_DM&hp>Zdg4^?rtnpk^ zSlpE~T##n}k@#-k6efg%JGcA{7Bg1WaZRsQzhPJ;>6oIv2GbdRjLGXUM-8#X==YN# zZEwouz%3@AFn#(Zw1qsQBF_ zs0*fXc*Y)*8;WGz?W87C_!Iu@_uahg+3&EDs)jeyAWRA#Xq&td)yqx0?3s=|O7>!N zb=5Krm)`E#HkoNkr2O*`GwQbuS9nbO>8Sp;x}tvEtcn-KEwgUY(7SVw{twPX!*M-> zNq1KZHtlqloHfa~w;dy+Om}#5hJ7FaA{s9V;k)wLAQXHS_O+;pIyfH!M@_qL0V}w~ z?@Kem`_mGLwt8Bc(pK7Owz0-8M}$<`%Vd&m@}#hu1YbKR=M&4aN45Aue%VQBTBJaW ze%UcmoF=tp0@qv1fdYwT$E^!8JQPi4`Xd{Dv~AwV?+An;7Y$pLC1&y6Xeo*CTs|9t zU4BXU0I})orO2DFAlLHZgttX5yKz4uiS!2cRm+gCUvKVIG`b;uQo}_Zf59akC-9h# z0u~tK?aDUobIyt}TJT>Cwq~&`%AVsg5xUr}ZtOH%CQt>(S!wct)$=y1Va^hbhCw&} z5ydUk7c}`}eElq=F&GF=Mtli@iBMVu7x~c6=vRsXFRyfCpFF|>iiw@kwG2s)l*vGXVFyO-& zz+0J*YUR}e>xb82|xU~J_2C3IZiE*8-+;%mqTT%iW?<0HuVT2mOpFtv?Pu9tIg zc5v(LUeXSc+Cf7*6x7Gs#>YToze zSa9=}H?v#b%!c03E=nBny`JU&6OQnPG${{o6{p?<80RVx@mlH#yp}qo*B_-Vorop> zg+WEx8G`U2Ne^Ly@MIZ@t2CsOY}YrT7SffYJ@M(0fh#h=o6!1SzKmoHm(i(kNGZ62 zE^wuH;BV-jQ2W%8ezmfJ4~=bL$9ViI(o2`Hb0X1~=u>W%$?+afyLDLO@e^4_+n|uYj{+{C;6wm&->djC0dx2bV_!>AduTdxaS)B z-=Tc82p?}L!sE0D6lM<%g(t`@3nwwWm(i5ze5-U&S_vN$GSEwj1Ro?KEcu_n2Imwh a?=g4&iasoHFQrbA=QJ@t?XSwj#`q8asJw9i diff --git a/out/production/github-repo/Searches/InterpolationSearch.class b/out/production/github-repo/Searches/InterpolationSearch.class deleted file mode 100644 index f2601cfe4bbdd24dd3cba02f62b5614cbce71357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2829 zcma)8X?GJ<7=EUi17A+zKk%9}i$!$AyG81Pe*t+40 z`|=Y|K5+Et2e(r6=nwGtWBlw<@wqeMkYW$o<=*$c_g$a&eQ)yX-#`8WU>iQopcf^9 zJsEVMlz?&Wd@nD`U3e6a>19$c2leu}7CDr`6F4kzBm)a2eW+;aXeXY;u{53%IG({2 zPGoQrPiOE9o=xMq3{F8BNbRs)J1iPV=&72rY;xuI;yT*`cK=;WmfsL)*Z}w zO{cb7?em&CsC8|=b;gvUkyH?&U_i*Q?AFu*sn9FUsp`DIR+dv>P+*#M5~vE)1n9Ec zk@e}C9MowI-lG%ycYG0MnTpr+t7@OEt8wcpIFIVQEZmAd13lO0NY-x83xm*?je{zj z^J>A`6lQub%Wckrjne}2797+qxbQ4A@Vo^dfrSuFhHc>tUNF#qqf%Q~z^sLh$O$Z3 zco8od*jb6N%T24?j7G1J+fp0NML?3u$uP&>Pzw=vmz#_FA?GM}Hk>2xYAR8g4^5v| z)sVBeqi@8uw;o^MKrCzj(4 zo!XlQZo1Y`t)jBh5zqF@y|nD`JXU@4AMI1D(j=Exa8~R$0&EIrh}73U>vx zZs37c3*A=ynWkISQ>16A(rh#wJLd)K0YfYw;%p-m&m5KD6*K z9x<@_TASML8E;;VO-4@$$6C(FYUufVM7!AfS5E>TGx15!n{PH4N7-eIlpGlZiedfM zovTk&h^4(jWqPhbmgJNSDXcalob`VrdQOpx-t z??Lh}qz&Uwj2mnJK(Yg!7{YLzy|DzrGw{Pt=$N{M#AHuxXRlct8Te5lI+8TA>8v;pVP1rpSjH_aC0*(m z*l~1|evqj@gf48y8Wad=k?SKUVHXZ_oxvU~az9I`KfnQek8%X^(=h;)-%1;4e2u#? zN_e{PB|A$)y9O6o7!B1iW1`6OmMXPZiWnYr-AqI5tHo0UY_;T?4!(n!nOY&(M76+ diff --git a/out/production/github-repo/Searches/IterativeBinarySearch.class b/out/production/github-repo/Searches/IterativeBinarySearch.class deleted file mode 100644 index 22cd1ff979448a6688865525999121a917ef50b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3494 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 diff --git a/out/production/github-repo/Searches/SaddlebackSearch.class b/out/production/github-repo/Searches/SaddlebackSearch.class deleted file mode 100644 index 7180f5e10f9a4ccbe057109c43b832f65ebf723f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1582 zcmaJ>QBxaL6#j1ZCYyxCLSUgWiBPc`Qc9H4sDQMFf{hJLH5G@64=%|{moA&kW~1$k z588j>i*}sxRr>&r?ewiL{s7#Izi_;kKr-KGRQQ>0R9MXNeOg9n{q|P^LV3-$OMBP8PiuKZ zj;MsedO*B&s}ok$F-6Q>%kc!p@{Q__^`%vGEpNM64}8blUQ}&}9p+g6HX%k%Ng;5z z$)Ea%dx7H?>rKn^Y@d9E!?WbXvzqPNIto;p{Oj$W-?Y~prG|O3&sjyozz9YSyo`*% zaLDU8w2n0cAK<#msu=hXHw;vuhvTeffDCTip}shnE|KElU3>IQD(69XF< z6-fW5?gB$csI{#fyBRzes^9Mh_AYf$GMarIoOZF|b$S7Hw5?q#aW;SI4@zL&v+o5J zkD$CaYIN-${Ue}T9K{h(%<6P(bqTWh%Jd5pJ8YK)FCG?rZk+#<9}n97p$m-WUj!!N zNT>okJ4T4?JBpsGT0gBK`-?W+cGt!^KC~1c9{6MkhEZCRyCPS?HCot*_=QdcW3;g_ zn8rALqo07YNOPA|w}KIM_zy@#xz?gjlABtjwkadE1)2E{1KC1m?&%MRrRC4`va`AG zF_e~Crk0j6OLG|g5rc({Y-Mx5BEnEseja*+)Iu5smILw_#59W+ki`tn<08FTGB09| z-$h))DoP>M`92-y<#>+7@CqhE`ZY|_i-fUr^fY3Y@hYa+!fT8UK>m%ij`I;S#s8Pr z@kYN#;WHt@gl`{1+k6DMk7)J69%7|vXk%v7j6H)MS=W|xX7nMZw30NX8GDG4ncSQy zRaWhR6h9sO^+2QjGd!lxm{Hl%Or4D{#2+F47>Uh&B-3$ib`Jw7V-JJrxK#cgUfRPM zo*Gi)>FZJ=d*CWrm)Z9Ud%H%JR;k7smbjL=zm5uD+YL1MHowL?zTr-d^E0+{f%@dB zf>e!B+XB}C++%!(ZBL>ZDj1?XyQi**eoGy%jSjbS53%~BIIP5sy%mXX;RGCOM_ zZAmXC_I|&nX=x^ybB)&7H0}wRg2c+?5@(|M?qHtw2+vcn`+w*uP%jF*M#FYBhmZ#i z7O$^vTYYYRo~9*&XKTSKJHoGdgc_QhA0KZDH%Zy4iKzjp$vp5>G$ zf|v`h%qZ@RQym@CCI+D^fJSzOUE$qEUwm-Daa z*wFD3acxmqEQx;UYCoCVJ&+%4Zb4$L|ImlzxgHp}+sFK1Q{&PFx8@biV^&ZW4GDix z=D2}A>@$$VAst^e@HKp0L1&QsF#@@D)OG!;?}^nDroZf#svR1>(TPhOUhc#z1}@{9 zI=*G#+xU)w@8Wv~zK z;MaJKVKDF;yv~Ri_${vJ_?>~@;|&E5htP}b+3I@LH!Imn;H|t!IN@EP3HfT)e4!?6 zt`>E?DPiAIu%q5JqV!<9*>*IXOxtDGv;5@>($lZ=l!De`(6G#TS3xF9lo$hS2Wk8PZ&QCDo-z@vY|Vd^it)30t|!VSD`(^$ z`4^{Hr*nEvetNs?2&8^98 zcZWjq5UV%#C)*Uki{otEv}k`q$Da)R8GkeIGztbz;uOPIFCfdg=&qQ#xu7qz#fc?R z^j(iZYhw%8TIsmPZ;(0HU8$|o?!3daov}r=YSN8=#d(YH!e%+kw~%dC`$NTvm@g4A zv7H9Rd42}O#XtICc;&ry<1|IcGs3nDmT!`->k9VY#ZNPT6zsdV93Eg#>E?G}FTW2p zj(p?r`7y3?92Ji0&`l`UIB7waPbmZnJiwx#QX$48Q>Ziz##F4sJDw_cs9I!c7S`I;%*BL@}F->K6$q? z4HY`~H~KQkH=(v%<=9u!?DJ!4pDL%za;_a1&Zr}|kZ8fH&@$>(uC@AFlk4dGHFVOA zzDw$zj4J)8OTLaBJh`MP87-5PM_gspj23yD47?pfJFR(yjEo_L$Iyidl6)A$n4;yM z;cA+*V>pf{_}P9OCgxDZ>42Tt(35R;Hn!Q>z(WB$^b;c(4OraZuYgg0$9KWzeWT=I zAI|gEQQlo=QDTHFN({;3r)ggs)YQMRUr{=G_C&NkidLFCPQoRv*J(;C1+Tq_8(n7R17)=?8QEE@)C?j!%znNz6 zSw>=(IFGYVG~V(&qdiL2E;A}maFz-pa2hRl@D^Hi%<9N1ijH<2PwF_X@U5m}PR9uy zPw`K=LkpUUX$@jZXIeJXFn;xV-t#{8zDtC7J)aGH+^Xl(v(E|C zk!&{y2+OoJpoY?;$DZf-t93gFoIv5++IqtegW`(o+5X$A?>I7^6<;o$>TWG_?}`BV z?$$Q9*UPTwh82ag+0JOW4Kl1o41;T~=RDot-E{n_U@Hu-HEMQ!!}eVnCzD#Z?GkbP zZ`<3wW4oRugKVq2Uf}qIn9OzujyyFl0_a~4?b_=n_FfWc=0EG=gG!i8=-UU5A2)-{O%*wh`}+w#tfla+c8#*XrR z9=dh5BCk?FQS8#j#3!lp9gP_M>yv3 z+r}FG#xTzL)6_O8Q&nX+JR_qVO3#hnN;7?GO{3(qoGrTQXwN zg;tAbC!kZmO6qxLXMxPuP~ro*#5c1=zT6~V#>FTvEpoBN8>6*q09Xhr(h|F1lUXQcZX0_?BQ`rwqx4 z?bv>kAy-mivt|thH^&IvZa1Ezy+#3>$6Nr=6_zFSVkCs9ZqH^P-AoYy*U75}?3G5=_f3g#9{ibWcv^jx~sA zMr@z^SC;A5=M#x!o$}E-?ogQ4CtHqib9Mwr@+9e4MODWNQaW@z(NV)Y74NCo$EL=x z{%{lnUW=k4#2B)369;pOmt=c1Zkm?o6>GH`!|{@i*2|IB%-n{pc_1jz)k=bn3S!uh zHPc$7`xir+UMhdQ2DN03^mWquBx58s<0qI=xku~=X>mNI?K z6T)YZCky>HLU?Hl;H9k)!oQ?qf>s=$NZv8LLWX3H_7gA&LH?2qJR_-++)u9j2l2=s A82|tP diff --git a/out/production/github-repo/Sorts/BinaryTreeSort$TreeVisitor.class b/out/production/github-repo/Sorts/BinaryTreeSort$TreeVisitor.class deleted file mode 100644 index 5cff65582fb95a167525da5db274715470bf494e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmaKoK~DlP5QX31LSX?x@Z!ao=s_=TVmz^ggCr&1XWIIHYY tF6Xq$YXF2A@0HJha0J1+$*P7HtMV42y?^O|aSYfC&_x{~vt9HW%^$jMZSMd8 diff --git a/out/production/github-repo/Sorts/BinaryTreeSort.class b/out/production/github-repo/Sorts/BinaryTreeSort.class deleted file mode 100644 index 9e614b0e58fef402a02593026e6f4a8a07c300cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2177 zcmZ`(OLG)e6#ni^Pj{!&F>PlEl~71P9+Ma0A*e|VlLUca9^!<+5KudlW@wo7#GXzR z#0NeW{sdjRaiyi3gpvYXT9#J1aN|#K>CV#f@!i`~BvX}i)jj9jbI<+G^Y)Mbe)|Z( zGx*R#KQ0-#Y$1iBBv%Z~Tgc$5+*~v8ss$6T8F<}-g-eon24*ZQpk!cC&v#u{pM_TV z`l&yO%1_TX?ftv(!>@nn`F)?t?=wB0O$_yX+i~^jdF?0p{cPa6iL!|sCIS;TP24h3 zF|lMKG*LCNY~l?Qk%^jt*uaW_HeFrx1?-71^rP{LSF8Cof#yOrisyn_5LY7ut5nQJ zzF$`e=)*x6#3KUfT=yI?#uY~EWDxq(D@zN0H0v!?i0V#OOI~Hpivqc?E4BDWKo{+k z(noDzEC{{mwuG1aA)?jD1&-wACvSSI-ay3*%LC)prDZRYC_~-b=mkW;H6f7kqR6`~ zuyb2WEvi=OW7n23?3X2BAnlFO-(G&4!Tjtj&%3t2JxqfUnzR&RuXJn5TUNPqHUydq zK{@o|m5BA}8J-;++%n4qU?e9!btmq$B`*jWRYP40aTJ8*A=L#hDzmO_o0F~|3z$I| zk0w>gZZ?<*W54W24AqS5Ens_P2mD1&#iCydmb^;+W&`x;>Wb_JN28`Pl4d z&jhmnZH>)6EcwD(kZ-jqlia8+Qes+!&X7S~lLn zy8_v*P;3lg*uZ->-p4%wXXA2`nY{Z!gFY!HN36u|Mr=qQON zx84}ZIcavK0c~dCreER=wk5$yI$9}LqaePqB(_Ps;SqM^wwxR_3wjXNeEEu=%56WS z%CfUzoHjo*K5Wi}x9UeVCVF5SpiLnuJY&_XtoSq6<)BVrF^FNs;=VXzd^6Ag5vDQ2UfjhRUgpT9c>7CSpf1h(3wVXN8WAjFPq9}i;>#}1;Rtyr Ttx`N2;L30vN5hhEh`eU`f`nH6+YtQ`;M_ z82t@;Suc9i3qNLB#!mSG{tb2f1>SVj`nCDlX>5B-m~XD=Q+ z#a0Z1n2+HiE=3W;LJR|VOCH~j@pxHo?`U{81|4|~@5%GL+}@WyiyD@6EbCa&v8v+( z9al6IWQchUYZ|T!L>#kLuI~yY7H^n0&1}=PtJy1_ZI(}ScFlI@1eEmnx`4V+FIxh= zi+0UgZtiYd&YHPhr6sXgFPYVK)3N0_Fskm3-4HMq3w6hBWG~e#b*V9|Za1W6l?8^= zn||V|S*v6h>brZUBV){tUl$NIS6(1&I*xf;VCX-51qM3-+}?WzVsmYc8M_OvS^8|r z+zYTp3wEVux=n}RPvzETW}XWo$Gda0b7>hv;_0nfx7=0B*=@R}Yu9Vc+W~)N`-W9= zXC+l#KCk&&*}5gr-wr(RBD+}k!lDwacsfp$1~-z>Yn9ZZ0L*6^azSI?EI z!HmTU^`=v@F57aVx}T2AX*rg03?r#wJ&tSGh~o&3#!40F=-j$nXwP~$P1da0{x6LKuGWTX(a6FBMR8^su2rspXxAAz)_c^c=6LHQFQ zG4vQ=WOxo?f;Nr}HHqw7W|4WuGKV?kLMn532dUH#P?D+geW+V=nUT~1!q@ggME9#K z+XpvHc7P$*>Xe zWW-qZq^5d8H_my|i1guiU(<}JujocxDvJ*hD?UKi(&WT_(9*3xLQhdi^fGwDC=|nq zzCtmQNEC`%qQ9^_Ipuq`=FxA=6jn*{2I<-&=r8a(zQp-wjUjAW&J+GBdo&Z?F zM_ITym&GF9)}JK{=d+Mlws0W}Q)f(E)R{{bR%}#ktlGG2qiW+F3-4OEB4Dltogk_T z82Q4MfL!Zt`vQ~eLC4=1>@@svQ#IO*$V zg`N7e0%!BL*YB!(s@ztcR(Y+v(^H}DP$|41E|6|^2OXA*8hsUp>b}6t3(>Nz`UK1V zSE|RFPX&&SQ@!7NPWSfaCYeomk!pT>!6J3s)Vi;XMbh<9&g{BmIZX9bCf)0`C9E=HO+#;^0G2 zd3RKmaHhCTF2%)zMT2X540fY&*KcwZQ%PI>z0z)V!yvk|L#CtX$5GJcMP%FW)0FcE z>RmZFTHt_>jR~F{TdCD_%DSi81OLVsdMdTTz7``{(>)G|G{?s_>{8gGW+tB%W#bz& zxF{%hN9dJl1#P5w+o~CK#Cvto;^tI&3(W3d+8@u%lO1Mk)c0BdattQ zEa}dX_HmTxpTi0M8s>2kCu2rSMA#@0Im>FEKjfypIo9yy;{sk|Hbvxl_Bp}GJdw#= zH0mT#rx=-p{2PY&2U3XnzX*SW!4x!|w~!}DU-VBNqYwJl%{+#z8`dt;UR}B~u}!;X zY)y9~ww8>I?JmdGH4o#D#IxK?;@GaEo%LT~)*r&UzEJuF_9vxXWbDVt){WdtY@c(y zdOA1Z)y>=?uWscgy^V#_#1S=`)NxoOR>Vyzbqfplj3aIE|M)c(`v%LgUd4nw6)O^Z d6PJix;MHzX+0&eAis%f^Fl#VcCMJcm{{fluGrj-- diff --git a/out/production/github-repo/Sorts/CocktailShakerSort.class b/out/production/github-repo/Sorts/CocktailShakerSort.class deleted file mode 100644 index e78929cc01fb5d99351402b4df89bbd70598b07f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1674 zcmZ`)T~ixX7=8}f-Lna)-G&A#g0@=PgpX3O#Fjv`MbSw37(=nKUUW&eVId@$%~Gv1 zevH#mZ~Ot?I?iybHTn!Qn@CsAmW?b^ESxytT1HGk7>2@DpB4bN{)&Ns^2 zzU|hEoA$QjDPNX|ElPo_sk?Tj}|S^%JXVP^l)t{yg@b#`}cjm4iT`gVDH z$!-P>lUIog0@0#dt=s;tM_xu}*Jfsp?QE6^xoj?_kkTQXwqv_>f&L?06n)RFSF-{8 zwpS&eeTVz#91ECk-FK>v$AGhk1M;Dp)y7)Sh!>Ep0GH9RVq@1UI}5IwP z#}GeL=|Pga5jbP$rydUjFo1Kkgrb#EOcvkr3peTeYV7G;BsZj0GTLxb`vI*;#u(1X zq*O*~EGe~nQ{1Qa(ephL)Rbo*kq?qGV?2^#ul+~T$Y=^cPiiW0_{ShmWoeaeo>oc9 zPM-cqw)fh9CiUE2`@6B9ScMi;zRcFZx+APtXT>pAYhj4qVgA2}3A}{sBxIJ>EnLI` zMzDxWxQ)wjkU|q___RO8IKIS{fPs$?r5wi##F1FR7;}}jh-o4Y@t!{H5O;{Yk&O;h zN;{7WWGsR&@G?((82K4qp%!6XpYZk}Rz1R;kYg2piSd`|8Hag*m=NLsy%1vLU+8Uy znGz|9H2wSoF4FxEQAe54!@8o(n;?Q3?O(*!D8I3yPoR||WKJ)ZG;1J`x@82?u$BWU zwLq9wCXkkK27iZ|w4$M6T5+WmeuGhZ47oHu_6y8?M9n9Nl_H5=f+ym|lAbtKEE$RC ziY1viU0fcY2&1}>YcQZ`8mq|Q4sPHchw(Y)@HKJ)-J@aIB!80SukuIZDqdw%cW6&> Sq&o0j0vhum}Sx#xWMJKwpRKVSTM0^kN7M$wDu zC{$dFVg}dcazn!hGBT}UHVO?N%FWFP<}e>dE{Z&E$+Uuo+Zq-GLV3Gky9I$@D!n0~ zEH<|-fxeR6upaEzE0(ivR%(n4l$u*+ZNqeIx$guOcgJoE7^QO4aogF&X1yZ4oPgG_ zzIIp477*H|+-T&-7Au9lKG@dGeZ0m4d~)>2{6<0?mrRh3=zb!?miGLq^eZ zbJy9jmTftU*eju@q+mJ>^y?VHu!cK2KEk4okFg}sdv+=U{iphNkaa9$MaLMD8t&>S z;+}vm=V5J+Q&@9P!+jkktm=4xHBR~zVXgAm+Tz^e{w;F7Q>!)|+uf=20i8xaaqSv= zR%%w8CYw4}%iQ_VG>4_g(FqKn(bT^^S1ig5?TK02wbs6n!WYwBNT>RB5ijqxU5gZh z&0W$@_~~{t`;b#|ISk9JQ}DRg>De%EYRRM;N1W*Hqie#dm+}86(4m{&z&Jn0UQi%@ z!3uwz9d`rtvb2I$oj8K{g-!r*t|2ctj0^O2KLH60dgq)uBeHmd*#X-4s1e;UVzvCJ z@(h}?4`uX6hJzkd)JsVsjEf%JpkLB~V=>;s2mwb~p(4<~APMnpFiqa^4+)28S2HKK z#tO=;l2pD!IH5d6ej<5&!8NPtiwDMvlSCZ&k7X z^6&kZe`J0ppyIKcLJ$2Exn_9#6j@&5wb$9=EE&z=UCh(V^MTLdJ{G(V3M6z96a0;^ zhSXm7vWmB3sm97YGX>BLAXCTz(EU zz}w|O-a~{8)6AnFB0_{9<43FHa&2@>wEaQ8u;0OK_98kDJ3N7E=xZfs)&TtpTPnhHj6wHlN Ow)ZKF;J~Cn+5Z4x@M94G diff --git a/out/production/github-repo/Sorts/CountingSort.class b/out/production/github-repo/Sorts/CountingSort.class deleted file mode 100644 index 9fd99ffb00fd0ae0b1b5153e060cc662d03d06f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6184 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 diff --git a/out/production/github-repo/Sorts/CycleSort.class b/out/production/github-repo/Sorts/CycleSort.class deleted file mode 100644 index d5a138fae1b1466b4f85dee5dd21f4a7b3cdc61d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2139 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 MEEJnQO94aw0=CDA^8f$< diff --git a/out/production/github-repo/Sorts/HeapSort.class b/out/production/github-repo/Sorts/HeapSort.class deleted file mode 100644 index 9d14649b0b099a2350eb881b410df850d48d8786..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2127 zcmah~TUQ%Z6#h;!$-pp_2`wOqwWYKMD3_MnDxoN%wb*bo6iD&XAxy)xA&E1Su2mnr ztmW_U)dyenrJ$_3eD;s%uW0?wnS>-5mM>@T*=JwAz0Y^f{PptpKLFgo69YYX-@rUR zFp$7P2R_6{Ixb0hN5{uH?i$dsD3?!k+%wRDwES3-9?Lpb40K^t$C?ahq69uQkioi+ z`#LrRw7ZU77BCl!MaNqx*uL-h0`Xb5=mv8F(d3A9S}5&00$pjh=qy+EcN}ls-YL-1 zoi63=-u$?f!G`>8!yu#5T0h0=c6_GEl& zxmS={<>gyy?n6N*^mWcJiC^qiR4upAzP6t;N%^T&9}+fNCpWQnNr2eId@!1zRnu6CM20m^kYEBmWeDL zn7DwXj!hHW_{_vre9oFOMV*dnw5-{Rh%(m~CceZ&hA9Vi^7Ec&KaJ3#dO0DGw0{TwVsDPBK;|UpeI7rY>t)H*k@!Xb-s0Ct9N<@wmRuuSrTl85=!-_?1cogIwdvXyFa& zX6S(Pc#~g35`tbbc#ASZ**!XTh{$t9$9{tr!JmlzLTj`k)2_M#62V)lT9O*835(FZP za}43S8i@3tKK8#(zZOO{Z(>s0<(m@h{#H B<<y=_-uvf=se=KgNW4Yr(Cmyvv<*LJ$MoxoH3K~RSGyuQG6!|nxPzg+kGZV-As zUu`P{>(dG>7w$H8oCi+1>-e4WMsIh|2^2`B_=-5m+;<-e%#1G+5FS^ZYeyjI1cAfk z*;j(ij8cEN_dor_)|O&4;=(O+OaQ33!bX*fi+g`_a!u^2#FIKnK*T?dyvb;xU^Hg%Np;8?)${Lt;V0TWIfO{m9VGS>SM6caLb zZ$D_e*S%;&Bl@3Ll4p@aUdIPnY~VwI+;9v7v@AZtbut+?%AEE5M_jh%RyOD4_L`iQ zKj2KsnwBdE(7wkMJ^7{D+K=SnRTFB3f9(*VOMDRPZeoQj=Yb hTcEYLyTy|wl-S@M=AY!WHC7xWhDDY5a+#xH`9A?#JKq2R diff --git a/out/production/github-repo/Sorts/MergeSort.class b/out/production/github-repo/Sorts/MergeSort.class deleted file mode 100644 index e7a13db9e68b2066a7ef85980eb272fd419752ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2228 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 SkEmc>pGQ<7ryMg1PX7xdrab5X diff --git a/out/production/github-repo/Sorts/SelectionSort.class b/out/production/github-repo/Sorts/SelectionSort.class deleted file mode 100644 index 43ad5cf39cbcf920f13f877ea94bec8fac3a44ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1531 zcmZ`(O>Y}j6g@AV58D|x6BEZx8wXmx?AVD*C~mPG(-0DBa8jfRp{5%q&fre)m&TJK z_Sv(61uLX(*usWJMXeA^{s-beL@IFJ*s5)mF6Q0)?z`{YbI+ZbKmU3B6u@=tMiIyL zDBeLqE;n@Cj6%V?I*L(f@sSw?62^OB+zMkOjQ4fqbZqMQKtLWz*+&*x;J^P@=NW9i<*sXorbLD;*RQ&sHUm#Jlx}M+9TTaVq z_-?l&wDitqkbLnC z=FLxX{HFJu=e@l>@`+i#-S}$9?hWZjEVtRQ{bP^)EtmI-#dB$vdACxkq$NgX0Hm~S z$!mV1G0XSdPO}uKXnRfS^3pil;jzHnc(mH_ou=bSa{Y1jI2b9Ob10zq17PCC2B85G z_fe~R>@}QiHyF@_`m0iK19M2|*fOw<4-MP~6`dVTVp!Y2NBEdz<931g=7$FmXqt)zsu7AJHS8Q01(NBH1#degI)2GR& z&mBYQ{AlKL`JR1k_XI9ZjAKx}RISPk{ej&&cJ6#BXI9OOA&vA`dmJCxP7Za5lG(=< zeo}F;8-9QxT1v}xp1VA)pjDS2LHt5z3Q4Y75HxU+zA;F^0xoeUq^!)6m(K{M(caEJ zT@O`Ki^}0ctfvY}O8KIoCe+1;xSUO>YuSXdc8aMVpeNLVa-xc#{{1VVq<+M7HkD9L z5&G;T#MmF%pNXXe^;a=Xf1dbB)?dI3t6pN=G*ZaXU&B@0#H+Z)^KHBt@T`!_9F~}| z1eG`5!prm&`WtwKUPv+>b|Jkh#NfAyE#fS(qt|#o=vAJ*&a*cH4%#!QLOjC-A(CfM z&k*Cvno_GYBFJEwxzt0%SWW8jy%~7|r5@5xp;~ptOa@jpwZLlTZeVq`&f~CI2&}2i z;_rc{n~{MNHVx_2euGwj1bru${T1Qg5!qciMKt^b)Adl?V1;a;O`I`tR=^nd>RwnB=uV}l1hgxSc~_vn?A6_g<;7Vyn3S_V zE!)eDIq6Tyz*GCSQ44F{lE6T@(g?z(T&3pvzETTJv_vUzGBs0PkWXdKm-TAyN@KAp z1C^kV{*PTiEbuGw^8|Dm1oF8+^8elw^sEW&+>Gye^B=~U$w}hrt%P#!$qm_TLyuLw zYF&oQ0ej1gPmYak33HsW#X>Qqa->^{v_V;BCd6-Y7zwF+8tT-;EH)QJ2q&G=7(QY0>J4<>B z2YJ)CLBQg>=%yrJT>H7pQ3^^u^B&?Yl`hy^jmX%G0qR!E0oyUi9Y=)(y%;Q#d`$*z zkFskQwW2d*_^)9ZPEC7MTv`9&Xs>Y1$!iI1=rztIw7j0somUvnCiGE$&iv>qx?Unl zUF}xUeOJl6zOw%9g(g=b9OHgm zr@YPmU0NRESkyz2IERs8RFZKH#u%&66MMTarR`=OK72gDUY>T*bB4K-v^ex^@u0l+ z(Q7{~NtnN(3(@}zruc=J_=)sS=mrk(u#2q6aEKsUOs}z=D)`ureS$XKZLUJEOlx*B zlDcg~(y%8YX=;(^vGb9%jRAabX{H@(DLuBOl=4Ry)9+#4IG%lnp3jI)jI1Kw8Koi$ xZ2cDha`!L-$(g%2715GuA;J+HrOz$WbBr_z`t@vIz^khHR-6U%wH4rB_RL+ diff --git a/out/production/github-repo/Sorts/SortAlgorithm.class b/out/production/github-repo/Sorts/SortAlgorithm.class deleted file mode 100644 index feb94680a5f3ab11fea77f7712f25b7cb6ba2433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcmah{O;6iE5PjpMF-cs$6Z%05rF_^4YI@*=5fVbGRLN=&iF(Ot6RfbviP73df?vfE zkU%~6M^&A*2~|>~US?F-(P@)(3uJa5|D7WQcB;rK*gvLQ=-9x*} zr=tyF!_HnNu?$+CjAGZB2KZmc;RzGZd2-}`ONKpPb@YD-i(c3l!4ILNjvv8dd@3VC z&1-WvQA^vSU=S)9pANa=Ofu4K`X_|>e@oRT886SrthK4PSuX_dzuo30PIoz`tF*&J z_5Ck0ZExc5pY%>lY+BgDHeoq$MTC`Sc4T1(wuLe(CL9Y5Gzm*N6XL1-CH~$!^ZTrb z*%W%(kyeVl;`tYB=PSXC!y~1{CBdFhPL@5Xnn!G0C8bQ0d1ECJX$26ra%raK=$5!L zW?0*RQDh0C0zy?su-Gf(C3~|R`zWvntTmd=TM*$M#!nP(Q8bXAFAUtEbj?o+m}6Vw mbYKlVAzUd|zWNGa0X`+5SVC14wKU4Tmm6nkcx{@T*8Y{yo8tK>Xj%u@u~tXigp~8 zkLecV<-4FjS1=>cJYtj#XH+0OI5Z^?8M6wyKzr6G=@ZrBv~Evo(_r;?V>bBP$afD@Hh1lHvoEkA!+EBovX5lawE z-C=}iMl+*>eDU8Ut85!3hh+J%s-!ucH7ZUyJFg!%WP7*OdUuzspo%0mD410-2SdSS z74t9!;zumYVMMKbT6gBGLZ!VK#W+gsO|ar9t9T8zf{F?URjL-^IH=%?imO;u@jBj! z<4u~r6~{FdZ{xa(ckr%)8!B$f)813@K0c5esvpH>l3DL25B8C&VHR{-#fSKaP1Pqo zKIU~@asP<4?&)1RfzG<9UKfGZyxZLRq$SW5q}9KyL%f1*u4}ESI5kLut`!Bk2YuRI zr6)}jE0vijKEbCeYPB3RP%B>~2U+3a)*cUR;3lnHHaQr28xYJ?OL@nzO6lYNf|eeO zs{yh*igHHn4_<}U0UnfKCq8T7I=5JHbkY*Gs%-HtFH6HpySLM)MWAI?cg9Rjj+u^S z^zM9gg+#n&9j4?&|9pkgr$gSnW-XuB%RF|UpU;YOgL%}l9J5N5YEid&s4`>O$F%&M zK;N2#)J)}J9d1W7p1=_91vN{{oVc7HmSdi&wm6oDR$!oEhOE&OwJJBW%6f@?u`}43 z%UK7y$P@YZgV}U85bHZA_(H{(_*TUz4yxFLYXV#9*TN_*So3;1>kb>ckGtYytt**xlasifO(;dCbXcMzr@&zlt|wNim!E&ZNj@O#7u7f7bTagtwa zLG%Bw^p1S6Z*Xe*k;gRC%o&cJQSgJn)>Zthm5;#Y2isvce~NVR2MnO_!|}?WFdMl_ z^DX#pO5KL|jf)T-;j`Hls@TM}>KULLJ>0d(*+?ttd>s+~0r6D#@I5fIS%Y0o))k$?4wIU4#Yh$z1QEDa2K?zxo}@g(b9{zlT;S ziH1PQ5@NCf9&?+dEs?~Cr;8^Ju!K8!#4z>-ssJm~^^ig0AT zo+dyEEXKo9cc3m|UA^Q{m$VGaG!i%<#&CUfX~BNiU52?zh+)2y-90~}Bh`IVh@P9F z`*+ZG{?`3}WJHhVHrMI|sXECNPPtM0JWm$#0PQ5j8NcvJo+}GqPbKM>Thbk&rqfUA znRrxA5I?C=KdH_?(0<`IdvOWt6A3<+(D5rhgAJVyWY&p8I81#QM_j8he8YE?QNO}> d_?nF}&b`EYil1kZ#c6-_9G-VqQ#g+o{sRCi>zx1q diff --git a/out/production/github-repo/StackArray.class b/out/production/github-repo/StackArray.class deleted file mode 100644 index 5658d70714f85b297599c398f0a545cdf344248f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1981 zcmZ`(ZBrXn6n^gRk|l8oF98ZfFt(`4g27g-wzSxa&{9Kb4P}JdnJ%!x!sf+fgT+re zf@^8&GI;H>XltyG*n0qrh5dQd707zM{G3iPM%=C++(XTo=in-lq< z;uSZiGRut5ls1^6Gv^iEo3+B4TUm0}e0q9vrFF+&b}F9Shfc$(Y*qylCnOWF3VZn$ z5>~Fcn-Yjz@`_$CO~mxP0uHu3rZTFk1fyK5ZV9yQI)07d9qQ_WQx0+UvaCfN_nU?m9YMt@R=;v9N(vJL40_esLOGx=Ot8wEUUjbK`vTE|v*R{H zR3nxz)hg@moF^6NZ1T@a?PU0npm`O3%A)o`=pP$lTvh2^M$hS7TjXs z1YW6l(rMeo=N9rul_$+=c?f$AZc^o?3T`L8_r@S93@f*S6jDK%m8y->U|0fjX9I4D>Z7 z$}3IW;y48yD%UBn(+QR1xSL%l%R@eAu`m6KQB1F9mhmRXyq9l}4o#LvOOq9+txF5 z+er#2@pTpo79HU_3lnqb#x>&3BaIszzg!E4>=B17qmo00w+v__aoU{Wkj+C@BN&+` z8}ku*6$i;^)z~1V?13c2U)=Pc{71@{r0TE^WLJCGRqcQo8tg{M3s~ZMhpK!*7Au&b z_>=gOI^9zYtp;MqFyu8LM~ZJ*$ZM7Dki3!&ULA@Tsbm#s;y7pz3j;O@xYA%|MXq5Uj zuLtNvjpgpLK>?@g0VUs43~WXt^k&%tUBVo-B|}+cTMT;M<6TWP$b$A4A|}p?Kly$M z`7aa_oe2er%Z6w_!!-6`=uP1xJO_N=Qg^(i?lx%F6*-6eGYb=54-+P2LgPNy_^Yx$ rY{{B9p0!(L{Q&2~tdn8Z$p7A&82!MHoVK4@l10K~0v|G};iG>6DV0Si diff --git a/out/production/github-repo/StackArrayList.class b/out/production/github-repo/StackArrayList.class deleted file mode 100644 index 9043d39d8655e4be6799d0e4cf9f3d638ba4caa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1719 zcmZ`(ZBrUo6n++v1-dBFsEM`))1*aAg4*;2u{Oq+goJ2PtX9*sy~-9h;ca#oXXtO} zFX(T`mv&mxG&7xk?vLv9Im-sYp)lNg?sLz5&U4Q>mw*2K^Dh9mairt37&K&MSdJox zl?XnMVHIBpa!0H+vF?hsF4jg2Q^@Mrj3JI}l*m>L7jaLP_hrb-@Ic2yfeW&D6v4Kf z-;u=~9gj6c9akN{C|HiGVZ88MovKXJwJMo4+g2@sbMz@%<(hJvwy7aK$Y-SkR#dH= z$=6)7Y}&b19t>5LRnst$dfMYqbZx6v&du#{f4yEJ=Sab-ncL0kk!kO$qY9DHLj71( z_LObO+6P0*E;|~=29Rk;R9i*4Nmn3xzbp_ zm|K!+4a5DYffVKp%;ScRCkDPmQNwzA(8oKMlmaF5)kejvnl)FsR=qaJIjv*Yz*pEa z@DXl{wQt~KEQoc(Kn4rcH=yZJ(8A_R2AD)rB>3E9L*X~V44$W1UpC1&13do4^(V9u32S1>&>&qwCb71>>ZaK zWU4C5+0on&YtS3wRAJ+dr~aq!QioD$-K+G@57MFexgOWIJ?}w1Za&6y_ss1m_dpIOLg8j=v%_%2k;2d>eWjk&eZ^SjT#&YxQHlcww({T!O)I z5)oYHf5a5VDC`oY&G7pHB`r|YGDU6RDz@=Hd*d2MV4@?CtLt1v@PytUQobe~?O)?A zg0z4{`W1}y8^n2+;omWG7JZl=z%7K>lOv2J%tq%7(&Up=@p1Tkn|@m2>EAFi{Ra|l zT-ZM&i+Pf=Bv|f|825?5>)m81k;n(&Q~pE&lIdKU3H%v1g;{=WjD|{WjQx#^ZH%v+ zgD3WP+qe{X$>Tw02h3iW;|BO2&FpP4%snjP0kU}56*R*PFM2W<)R(s8F=&g_ z#OLZOTjDIqi*)2%mM{S?OxVMBdy*CDCX0{UKfmTDfAXAm|4QfSp7qd8cIiIxf`0lR D^UF?M diff --git a/out/production/github-repo/ciphers/AES.class b/out/production/github-repo/ciphers/AES.class deleted file mode 100644 index 1ec176cd7e98a45df942e9223e6e15d37599b42c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23712 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 diff --git a/out/production/github-repo/ciphers/AESEncryption.class b/out/production/github-repo/ciphers/AESEncryption.class deleted file mode 100644 index 7bfe98e1201fe8f5853e68a37b7a470d808b3cf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2674 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 C6R!{e diff --git a/out/production/github-repo/ciphers/RSA.class b/out/production/github-repo/ciphers/RSA.class deleted file mode 100644 index 62159919c337853dc6bf08688efe0d862f2b66c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2528 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 diff --git a/out/production/github-repo/data_structures/Stacks/BalancedBrackets.class b/out/production/github-repo/data_structures/Stacks/BalancedBrackets.class deleted file mode 100644 index 397af56265866cb30f61b82d0b2ebfdcb912ab57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2375 zcma)8+iw(A82_E_Wwz6)l(t*StzAT6x9w87SfpDjZJ~;6x5YwBserS)Lp!kDU1n#v zicdTk^+jV$e9#z;X`&bd4~2*U6BA-geDKK^6JuiH3x9wihWa}@+wM?#Fzq+zobUeq zzVDp&r$^u31+WWms%XQ2fCFh_#ydpn`6eMdgf|Lpk zqjEPE!eJG!Vq9{LsMv_33MN!EOOMT%4B?nur$RU`HKrB3reZx#C^)I$lt8f0%$s(< zfG--G5bzHbvWCE_q?tET&Rp8Cj_BzeIgQCeM$b*?mMPB_rr(}5O9HWER=4$2CEIc` zwqqHk?r~esoGo<^>N!21F|vaekA_`J2-KOSQ|Ss@ARJAe(a-DMRGXoZW#(rRvEu^b zB58<3?~VUe5vWgBT$UpVtagX*z0oJpD_>r4lL$R1Nz);f7{) zhOrGR(NBN%Lec=tyhGAgjT^X$>=&WyC7( z%T;PHaYn;g%xcJCj;MOPxhX5iYj^<#8Lp_|94vti2l9j{QZmjt2D=?8oQ^DYr#GUY zq``)x;XE#A*n+JBYpStblm;C$mo+R67ja2IizQLWsB89`+SkuBVD4 zvsU4PoJ|dH;HtpZ|2dNa4b^l;(`SqfXU4;FGvwgf1qsxEW$Db(AC1YeQqJo+#~3{= z&>9_zdAh%hsqAslDG~84-dT48CA=mTmeeDGUMmFhHSiT2f>AXb;{~l6y5Q5y z!zLs}sg&cyKk;(YYbeiqDIb`XHCC<+A0@q5H1b)2xEHgE*o%tGs*De73E2ggMLaUO zLWv>j^=x+BDHi!Gl?=LED!2UPEDud0Hh~Bq&o;iyfRDuM1c6Q5b#oP510A;@Zg5kB zr}+(*nJw7Nz2++589d8VNRBxL4JMM;N9G1A+lzRJ0u>p9YN<$Qwc=cFr@^Hr|LI>W)+2rM8t zIggpn1t{Mmw1C=%E1#l{N0sa`-*u0muPWI6m>^mev^^%6t_lLa>(>HeesKpK)?H_O ze;K1RTDfmyHSMTJgjj7tk?33|K37@SyXe4s=)?zz<3l`$FR&e7Vh6tFpT}>o8+ZBE z{D3{Uj|6^1KYqoF_znB;I|lIw{r!dEGX5Qmx0%{e`V2DS1N!ac8p5CGqHm4?ZMLzM zHH_l+%av`XYzH|pXp3k;P{B?GyA(XnUm<{hFeS7WQT}-d@izjfMGsSR+gsqQ$bg^R zfi`s$^|$a;QjFZhs>X%|tR@(ZsrYR)eS~)M?x2|?5RNaPrEv{E3uvX%JT|P5tzDLN z-p6p)eKgV0x_Km0U9{aW4~a6*ovHXp{9do0S{tbqcDaqcfv&Y|JoOaGS?j-dgIS+M zn$Q1w0xcjrU2rnn0Y^Ru6{hz0}{ b^t%eYHhUrXQGJVS8+UT<1t&n>z>!R619=-o8><3h%xE$u0?8xo>!>b}C^wsx zwm`fQ^prrRrG0fVeCVj~Ms_?_a;=~%y|xUsIe!=9(VZR$q)ac;fiK{m`@RYro*WDm zJEc}nk91FU1OI8L!dk-%SdXrx4og2vhjbl3%8)dfQu;a=hFx{0jc@kX%5GndqzeaY zE|Rcaq+r`v7uf#ag-T|-=1KpycG>BxZX^&Zn>QE!+{P9^F2Ucl7<44Um=XoUL7F_n z>>jb{T%r03QJs5%Wgu4FFmmSy)1rY_1SzF9YWb6$53O diff --git a/out/production/github-repo/divideconquer/ClosestPair.class b/out/production/github-repo/divideconquer/ClosestPair.class deleted file mode 100644 index b719c6ce57b01d80b27d8aaea8123b0feadfd7e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5809 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 O$rXN6^LjiJ&i?{RYtu^r diff --git a/out/production/github-repo/divideconquer/SkylineAlgorithm$Point.class b/out/production/github-repo/divideconquer/SkylineAlgorithm$Point.class deleted file mode 100644 index 12fe3e5c65d0275512b2b1dc452087a68c5fe8e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmb7BOKTHR7(I7pl4)Yv#%Q9owYC~-62YX!ogzv>2*d|Oigh=cT+(SLGj(QC+8^NB z$I6{h1vlLY7Qux-z#k=^JDG^qP+Eq2zsH?(&iDBF>-!G?w{ar_16S0wkVOiMCa#$% z3y58wCeNNg`mWR|-tG98W$T^gA+mW_4U<3N7EZ+%+q3RGcJ@ zXu}B!e(F13B#>)*o(xu9D-0#mORcW6<8-C%doKqvsJFNFT+%*pdw$?V8~t(&yF<~Q zjGhbVl`6|p!MZ@E>-QbciWE_`ax$js3ju9=SzxjqS@zZ=YdfhkYuUC8!*Zk1I0YMv z(RK+Kp_dgp+x7>6Egw2+D8-{K-P*KvtQ;m_=8#rb2G>n236xJV3W2=B*Imo&)t_`W zrOlyoD%{Kb@pvq9%_**3<457xV->V%aG1#QKEr68?>g;t?Hlyk>>;$;+#$r57?9&# zAQAAI_Z!0AVhZmt$;`qK#`r8F62vkh_LPuDfdbAYGId(@ma2V)c0fmiB3HEl?_uK0wRQT8JWqwGFR<1-9hDd~Te zc@Qg=hHQWOUcm)UK;R<(Her;C`hAg~zzi-W1svP@tADDWRkI{`ZY=n}*2jQZ++`M` PVIFx}wPgcWxtz>zC$_VR diff --git a/out/production/github-repo/divideconquer/SkylineAlgorithm$XComparator.class b/out/production/github-repo/divideconquer/SkylineAlgorithm$XComparator.class deleted file mode 100644 index c8da5b264552fb38298e9569e7c62fdd2eb145e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1168 zcma)6TWb?R6#gc+ZMGYm*4Dc<+HJeJ*sUP=kP;{XVI|l?r1(174C&O(u5NY<{wH4q zwZ#YV*&ijI*hxKl%b)fV+l`n6!A>Q7EBF0I+=Gh zSQ_dY8VsfAR8Gu&hFWhZ&*f0Kf&VEMq22%R*^|CF^hQA_qtkJlum{qYQHNp6ng_0* zFciAMP%y0Yh~{lP9*FQAA9!S0>jf_NPIxHQIx`lO5QgRV-C+EYhdc^G2E*}v5q3R3 znF!i!&2ei^{Y-i_H=!br#p6Kw5yR0u;bsDC&-0U_>J9_r3_FX#2|QrfwR&g#oZBAv zNA}U+Ot?||x2(Q+KMw|TQ-)aV*5fpP>^t*R)|rOQ(@P$BCrnstz) z56~OU?_iA!hZX8egaN*xO8uP_g;lK6itq^=)rtyT#`T6U348Mr`4+WH6uuC4 zn(ZQCt7R(wvl+OD`-wLL4``OF9un`vjQ16x6>p`{{EcFZ+7FawiBp+ILQ=_O=J66S}RgbuxOIUzSr%B4?kyb?lx z2m>L!Do}mC*O{I%T%+K)0{TEMXS%(%k!XwsX&L|XJQ{ZSNpCf}=Yu3t|87Ft8Xu549m*;FNXLj3@j%yXBrklM? zU1?$kk61aYkQPu9Eu#WzuahNe?I7KUiqqq!d(IfQX{jG{GKM{BxR%s?qgt4&51(4VNdWft~EL3%Qe!xmW`$JHp?xIkC$$4W~F=^MhZse@@ZqnD<>OG z;N6NxU3UR0UTNLY0u6ro`mCH``vnx}u6U@fXDX^H>%<=Ss>5!ZwsHdBR|H=7c`F@Y z-NFC2RFM&<=w{45OHN1h-xIc1POgsUv4usgFvU6=u}Mb@PU#rLX@TbTOstL}4C^?9 z(>h+mSsl%ILB~tjuVVz~bi6K?QH%*}eKMTDM(vr&*U*phh4BjLYEEf@GEx#qMp%d#p)HY?#vM3;k0w}_F+ znE8Bjdwcsc;Pccgf%{}&kU6?-TOd~6jJ=L+vnZC6>uR}x9ema6_@5y7oRc?xH&Y8B z29+{N=GsI{4-`tk#^fD{h~In*MGt<>~V47OoAHNk8< zi7oNks7X96c^m323IRxvpl56<3)cML(y?}NpPf+x5%-xg#HgF8C1^*R)CFj%TTR*m zj;E9*1b;#(rIx-+sQMJT)WTyoux-V>;^u9Kr4}Ab-STfYP{^gW7_J@U^1q~=&Z}zs@`pfST0~cH2x(= zaFFHdAQ^|S8;8-3PV}LRBb4T7^sx7P@fJ?tGEQQaJM-wrN7O&YDSS?^uQ2RY?JTM= zPP`Y1q7nV3Uq2}&Jc2cR&FS3D8jj*TlC&vA9!83iN~}7xQqqVR#vV#R>?O_tA1%Sw z5PoEAHBz=qDKfSi8DnG{BR8Y!A#|~8i+F^F5Zd_@JF5SrUy0Lw#N(j*oZcmpJof`7 z9hW6nvy13Y#Y;5a#fDT|y|}6@VE5WqP5D;Mb<)kK@YuYvJg<MNL}mP@`&z z(S7k$)bA4RT*sDjH63SDg{5PMI@ zopQoW5l`r@bY$ev6ALSTIAjVkLHqB zj5bMR9N~uuh`-QJ^8QAR5bYGCY3CZ7hv Date: Thu, 9 May 2019 20:20:44 +0800 Subject: [PATCH 131/521] docs: update AnyBaseToAnyBase and GenericTree --- Conversions/AnyBaseToAnyBase.java | 9 +- DataStructures/Trees/GenericTree.Java | 445 +++++++++++++------------- Sorts/BinaryTreeSort.java | 92 ------ 3 files changed, 230 insertions(+), 316 deletions(-) delete mode 100644 Sorts/BinaryTreeSort.java diff --git a/Conversions/AnyBaseToAnyBase.java b/Conversions/AnyBaseToAnyBase.java index 9436fbfac6d8..cfcf0fe9ad61 100644 --- a/Conversions/AnyBaseToAnyBase.java +++ b/Conversions/AnyBaseToAnyBase.java @@ -15,15 +15,16 @@ */ public class AnyBaseToAnyBase { - // Smallest and largest base you want to accept as valid input + /** + * Smallest and largest base you want to accept as valid input + */ static final int MINIMUM_BASE = 2; static final int MAXIMUM_BASE = 36; - // Driver public static void main(String[] args) { Scanner in = new Scanner(System.in); String n; - int b1 = 0, b2 = 0; + int b1, b2; while (true) { try { System.out.print("Enter number: "); @@ -64,7 +65,7 @@ public static boolean validForBase(String n, int base) { char[] digitsForBase = Arrays.copyOfRange(validDigits, 0, base); // Convert character array into set for convenience of contains() method - HashSet digitsList = new HashSet(); + HashSet digitsList = new HashSet<>(); for (int i = 0; i < digitsForBase.length; i++) digitsList.add(digitsForBase[i]); diff --git a/DataStructures/Trees/GenericTree.Java b/DataStructures/Trees/GenericTree.Java index 122c8933f938..bb3d29dc7394 100644 --- a/DataStructures/Trees/GenericTree.Java +++ b/DataStructures/Trees/GenericTree.Java @@ -4,226 +4,231 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.Scanner; +/** + * A generic tree is a tree which can have as many children as it can be + * It might be possible that every node present is directly connected to + * root node. + *

+ * In this code + * Every function has two copies: one function is helper function which can be called from + * main and from that function a private function is called which will do the actual work. + * I have done this, while calling from main one have to give minimum parameters. + */ public class GenericTree { - private class Node { - int data; - ArrayList child = new ArrayList<>(); - } - - private Node root; - private int size; - - /* - A generic tree is a tree which can have as many children as it can be - It might be possible that every node present is directly connected to - root node. - - In this code - Every function has two copies: one function is helper function which can be called from - main and from that function a private function is called which will do the actual work. - I have done this, while calling from main one have to give minimum parameters. - - */ - public GenericTree() { //Constructor - Scanner scn = new Scanner(System.in); - root = create_treeG(null, 0, scn); - } - - private Node create_treeG(Node node, int childindx, Scanner scn) { - // display - if (node == null) { - System.out.println("Enter root's data"); - } else { - System.out.println("Enter data of parent of index " + node.data + " " + childindx); - } - // input - node = new Node(); - node.data = scn.nextInt(); - System.out.println("number of children"); - int number = scn.nextInt(); - for (int i = 0; i < number; i++) { - Node childd = create_treeG(node, i, scn); - size++; - node.child.add(childd); - } - return node; - } - - /* - Function to display the generic tree - */ - public void display() { //Helper function - display_1(root); - return; - } - - private void display_1(Node parent) { - System.out.print(parent.data + "=>"); - for (int i = 0; i < parent.child.size(); i++) { - System.out.print(parent.child.get(i).data + " "); - } - System.out.println("."); - for (int i = 0; i < parent.child.size(); i++) { - display_1(parent.child.get(i)); - } - return; - } - - /* - One call store the size directly but if you are asked compute size this function to calcuate - size goes as follows - */ - - public int size2call() { - return size2(root); - } - - public int size2(Node roott) { - int sz = 0; - for (int i = 0; i < roott.child.size(); i++) { - sz += size2(roott.child.get(i)); - } - return sz + 1; - } - - /* - Function to compute maximum value in the generic tree - */ - public int maxcall() { - int maxi = root.data; - return max(root, maxi); - } - - private int max(Node roott, int maxi) { - if (maxi < roott.data) - maxi = roott.data; - for (int i = 0; i < roott.child.size(); i++) { - maxi = max(roott.child.get(i), maxi); - } - - return maxi; - } - - /* - Function to compute HEIGHT of the generic tree - */ - - public int heightcall() { - return height(root) - 1; - } - - private int height(Node node) { - int h = 0; - for (int i = 0; i < node.child.size(); i++) { - int k = height(node.child.get(i)); - if (k > h) - h = k; - } - return h + 1; - } - - /* - Function to find whether a number is present in the generic tree or not - */ - - public boolean findcall(int info) { - return find(root, info); - } - - private boolean find(Node node, int info) { - if (node.data == info) - return true; - for (int i = 0; i < node.child.size(); i++) { - if (find(node.child.get(i), info)) - return true; - } - return false; - } - - /* - Function to calculate depth of generic tree - */ - public void depthcaller(int dep) { - depth(root, dep); - } - - public void depth(Node node, int dep) { - if (dep == 0) { - System.out.println(node.data); - return; - } - for (int i = 0; i < node.child.size(); i++) - depth(node.child.get(i), dep - 1); - return; - } - - /* - Function to print generic tree in pre-order - */ - public void preordercall() { - preorder(root); - System.out.println("."); - } - - private void preorder(Node node) { - System.out.print(node.data + " "); - for (int i = 0; i < node.child.size(); i++) - preorder(node.child.get(i)); - } - - /* - Function to print generic tree in post-order - */ - public void postordercall() { - postorder(root); - System.out.println("."); - } - - private void postorder(Node node) { - for (int i = 0; i < node.child.size(); i++) - postorder(node.child.get(i)); - System.out.print(node.data + " "); - } - - /* - Function to print generic tree in level-order - */ - - public void levelorder() { - LinkedList q = new LinkedList<>(); - q.addLast(root); - while (!q.isEmpty()) { - int k = q.getFirst().data; - System.out.print(k + " "); - - for (int i = 0; i < q.getFirst().child.size(); i++) { - q.addLast(q.getFirst().child.get(i)); - } - q.removeFirst(); - } - System.out.println("."); - } - - /* - Function to remove all leaves of generic tree - */ - public void removeleavescall() { - removeleaves(root); - } - - private void removeleaves(Node node) { - ArrayList arr = new ArrayList<>(); - for (int i = 0; i < node.child.size(); i++) { - if (node.child.get(i).child.size() == 0) { - arr.add(i); - // node.child.remove(i); - // i--; - } else - removeleaves(node.child.get(i)); - } - for (int i = arr.size() - 1; i >= 0; i--) { - node.child.remove(arr.get(i) + 0); - } - } + private class Node { + int data; + ArrayList child = new ArrayList<>(); + } + + private Node root; + private int size; + + public GenericTree() { //Constructor + Scanner scn = new Scanner(System.in); + root = create_treeG(null, 0, scn); + } + + private Node create_treeG(Node node, int childindx, Scanner scn) { + // display + if (node == null) { + System.out.println("Enter root's data"); + } else { + System.out.println("Enter data of parent of index " + node.data + " " + childindx); + } + // input + node = new Node(); + node.data = scn.nextInt(); + System.out.println("number of children"); + int number = scn.nextInt(); + for (int i = 0; i < number; i++) { + Node child = create_treeG(node, i, scn); + size++; + node.child.add(child); + } + return node; + } + + /** + * Function to display the generic tree + */ + public void display() { //Helper function + display_1(root); + } + + private void display_1(Node parent) { + System.out.print(parent.data + "=>"); + for (int i = 0; i < parent.child.size(); i++) { + System.out.print(parent.child.get(i).data + " "); + } + System.out.println("."); + for (int i = 0; i < parent.child.size(); i++) { + display_1(parent.child.get(i)); + } + } + + /** + * One call store the size directly but if you are asked compute size this function to calculate + * size goes as follows + * + * @return size + */ + public int size2call() { + return size2(root); + } + + public int size2(Node roott) { + int sz = 0; + for (int i = 0; i < roott.child.size(); i++) { + sz += size2(roott.child.get(i)); + } + return sz + 1; + } + + /** + * Function to compute maximum value in the generic tree + * + * @return maximum value + */ + public int maxcall() { + int maxi = root.data; + return max(root, maxi); + } + + private int max(Node roott, int maxi) { + if (maxi < roott.data) + maxi = roott.data; + for (int i = 0; i < roott.child.size(); i++) { + maxi = max(roott.child.get(i), maxi); + } + + return maxi; + } + + /** + * Function to compute HEIGHT of the generic tree + * + * @return height + */ + public int heightcall() { + return height(root) - 1; + } + + private int height(Node node) { + int h = 0; + for (int i = 0; i < node.child.size(); i++) { + int k = height(node.child.get(i)); + if (k > h) + h = k; + } + return h + 1; + } + + /** + * Function to find whether a number is present in the generic tree or not + * + * @param info number + * @return present or not + */ + public boolean findcall(int info) { + return find(root, info); + } + + private boolean find(Node node, int info) { + if (node.data == info) + return true; + for (int i = 0; i < node.child.size(); i++) { + if (find(node.child.get(i), info)) + return true; + } + return false; + } + + + /** + * Function to calculate depth of generic tree + * + * @param dep depth + */ + public void depthcaller(int dep) { + depth(root, dep); + } + + public void depth(Node node, int dep) { + if (dep == 0) { + System.out.println(node.data); + return; + } + for (int i = 0; i < node.child.size(); i++) + depth(node.child.get(i), dep - 1); + return; + } + + /** + * Function to print generic tree in pre-order + */ + public void preordercall() { + preorder(root); + System.out.println("."); + } + + private void preorder(Node node) { + System.out.print(node.data + " "); + for (int i = 0; i < node.child.size(); i++) + preorder(node.child.get(i)); + } + + /** + * Function to print generic tree in post-order + */ + public void postordercall() { + postorder(root); + System.out.println("."); + } + + private void postorder(Node node) { + for (int i = 0; i < node.child.size(); i++) + postorder(node.child.get(i)); + System.out.print(node.data + " "); + } + + /** + * Function to print generic tree in level-order + */ + public void levelorder() { + LinkedList q = new LinkedList<>(); + q.addLast(root); + while (!q.isEmpty()) { + int k = q.getFirst().data; + System.out.print(k + " "); + + for (int i = 0; i < q.getFirst().child.size(); i++) { + q.addLast(q.getFirst().child.get(i)); + } + q.removeFirst(); + } + System.out.println("."); + } + + /** + * Function to remove all leaves of generic tree + */ + public void removeleavescall() { + removeleaves(root); + } + + private void removeleaves(Node node) { + ArrayList arr = new ArrayList<>(); + for (int i = 0; i < node.child.size(); i++) { + if (node.child.get(i).child.size() == 0) { + arr.add(i); + // node.child.remove(i); + // i--; + } else + removeleaves(node.child.get(i)); + } + for (int i = arr.size() - 1; i >= 0; i--) { + node.child.remove(arr.get(i) + 0); + } + } } \ No newline at end of file diff --git a/Sorts/BinaryTreeSort.java b/Sorts/BinaryTreeSort.java deleted file mode 100644 index b4403b6e0816..000000000000 --- a/Sorts/BinaryTreeSort.java +++ /dev/null @@ -1,92 +0,0 @@ -package Sorts; - -import static Sorts.SortUtils.less; -import static Sorts.SortUtils.print; - -/** - * @author Podshivalov Nikita (https://github.com/nikitap492) - * @see SortAlgorithm - */ -public class BinaryTreeSort implements SortAlgorithm { - - interface TreeVisitor> { - void visit(Node node); - } - - private static class SortVisitor> implements TreeVisitor { - - private final T[] array; - private int counter; - - SortVisitor(T[] array) { - this.array = array; - } - - @Override - public void visit(Node node) { - array[counter++] = node.value; - } - } - - private static class Node> { - private T value; - private Node left; - private Node right; - - Node(T value) { - this.value = value; - } - - void insert(Node node) { - if (less(node.value, value)) { - if (left != null) left.insert(node); - else left = node; - } else { - if (right != null) right.insert(node); - else right = node; - } - } - - void traverse(TreeVisitor visitor) { - if (left != null) - left.traverse(visitor); - - visitor.visit(this); - - if (right != null) - right.traverse(visitor); - } - - } - - - @Override - public > T[] sort(T[] array) { - - Node root = new Node<>(array[0]); - for (int i = 1; i < array.length; i++) { - root.insert(new Node<>(array[i])); - } - - root.traverse(new SortVisitor<>(array)); - - return array; - } - - - public static void main(String args[]) { - - Integer[] intArray = {12, 40, 9, 3, 19, 74, 7, 31, 23, 54, 26, 81, 12}; - BinaryTreeSort treeSort = new BinaryTreeSort(); - Integer[] sorted = treeSort.sort(intArray); - print(sorted); - - Double[] decimalArray = {8.2, 1.5, 3.14159265, 9.3, 5.1, 4.8, 2.6}; - print(treeSort.sort(decimalArray)); - - String[] stringArray = {"c", "a", "e", "b", "d", "dd", "da", "zz", "AA", "aa", "aB", "Hb", "Z"}; - print(treeSort.sort(stringArray)); - } - -} - From 8f60321d8616b67d4dd06443a6fd08b9c20c09c5 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Fri, 10 May 2019 10:25:19 +0800 Subject: [PATCH 132/521] docs: rename files --- .../{Edit_Distance.java => EditDistance.java} | 41 ++++--------------- ...Ford_Fulkerson.java => FordFulkerson.java} | 7 ++-- Misc/heap_sort.java | 6 +-- 3 files changed, 14 insertions(+), 40 deletions(-) rename DynamicProgramming/{Edit_Distance.java => EditDistance.java} (65%) rename DynamicProgramming/{Ford_Fulkerson.java => FordFulkerson.java} (94%) diff --git a/DynamicProgramming/Edit_Distance.java b/DynamicProgramming/EditDistance.java similarity index 65% rename from DynamicProgramming/Edit_Distance.java rename to DynamicProgramming/EditDistance.java index e6745479f382..210469b84108 100644 --- a/DynamicProgramming/Edit_Distance.java +++ b/DynamicProgramming/EditDistance.java @@ -1,5 +1,6 @@ -package DynamicProgramming; /** - * Author : SUBHAM SANGHAI +package DynamicProgramming; + +/** * A DynamicProgramming based solution for Edit Distance problem In Java * Description of Edit Distance with an Example: *

@@ -13,37 +14,13 @@ * kitten → sitten (substitution of "s" for "k") * sitten → sittin (substitution of "i" for "e") * sittin → sitting (insertion of "g" at the end). - * Description of Edit Distance with an Example: - *

- * Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one another, - * by counting the minimum number of operations required to transform one string into the other. The - * distance operations are the removal, insertion, or substitution of a character in the string. - *

- *

- * The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the former into the latter is: - *

- * kitten → sitten (substitution of "s" for "k") - * sitten → sittin (substitution of "i" for "e") - * sittin → sitting (insertion of "g" at the end). + * + * @author SUBHAM SANGHAI **/ -/**Description of Edit Distance with an Example: - - Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one another, - by counting the minimum number of operations required to transform one string into the other. The - distance operations are the removal, insertion, or substitution of a character in the string. - - - The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the former into the latter is: - - kitten → sitten (substitution of "s" for "k") - sitten → sittin (substitution of "i" for "e") - sittin → sitting (insertion of "g" at the end).**/ - import java.util.Scanner; -public class Edit_Distance { - +public class EditDistance { public static int minDistance(String word1, String word2) { int len1 = word1.length(); @@ -87,8 +64,7 @@ then take the minimum of the various operations(i.e insertion,removal,substituti } - // Driver program to test above function - public static void main(String args[]) { + public static void main(String[] args) { Scanner input = new Scanner(System.in); String s1, s2; System.out.println("Enter the First String"); @@ -96,8 +72,7 @@ public static void main(String args[]) { System.out.println("Enter the Second String"); s2 = input.nextLine(); //ans stores the final Edit Distance between the two strings - int ans = 0; - ans = minDistance(s1, s2); + int ans = minDistance(s1, s2); System.out.println("The minimum Edit Distance between \"" + s1 + "\" and \"" + s2 + "\" is " + ans); } } diff --git a/DynamicProgramming/Ford_Fulkerson.java b/DynamicProgramming/FordFulkerson.java similarity index 94% rename from DynamicProgramming/Ford_Fulkerson.java rename to DynamicProgramming/FordFulkerson.java index 36100c68c6e2..7a162fbb06d1 100644 --- a/DynamicProgramming/Ford_Fulkerson.java +++ b/DynamicProgramming/FordFulkerson.java @@ -2,13 +2,12 @@ import java.util.LinkedList; import java.util.Queue; -import java.util.Scanner; import java.util.Vector; -public class Ford_Fulkerson { - Scanner scan = new Scanner(System.in); +public class FordFulkerson { final static int INF = 987654321; - static int V; // edges + // edges + static int V; static int[][] capacity, flow; public static void main(String[] args) { diff --git a/Misc/heap_sort.java b/Misc/heap_sort.java index bb5c2365af04..5222be4093d1 100644 --- a/Misc/heap_sort.java +++ b/Misc/heap_sort.java @@ -1,7 +1,7 @@ package Misc; public class heap_sort { - public void sort(int arr[]) { + public void sort(int[] arr) { int n = arr.length; // Build heap (rearrange array) @@ -22,7 +22,7 @@ public void sort(int arr[]) { // To heapify a subtree rooted with node i which is // an index in arr[]. n is size of heap - void heapify(int arr[], int n, int i) { + void heapify(int[] arr, int n, int i) { int largest = i; // Initialize largest as root int l = 2 * i + 1; // left = 2*i + 1 int r = 2 * i + 2; // right = 2*i + 2 @@ -47,7 +47,7 @@ void heapify(int arr[], int n, int i) { } /* A utility function to print array of size n */ - static void printArray(int arr[]) { + static void printArray(int[] arr) { int n = arr.length; for (int i = 0; i < n; ++i) System.out.print(arr[i] + " "); From 459434c262c34074f4f4fd054a551b8642bbe2c8 Mon Sep 17 00:00:00 2001 From: Anup Kumar Panwar <1anuppanwar@gmail.com> Date: Sun, 12 May 2019 09:11:43 +0530 Subject: [PATCH 133/521] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 06a88dfe149d..d5efc664fc9e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # The Algorithms - Java -[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JP3BLXA6KMDGW) +[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/TheAlgorithms/100) NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. From 2dcabed492ff99f203f1fa69e7047bfc75d84229 Mon Sep 17 00:00:00 2001 From: ibahadiraltun Date: Tue, 21 May 2019 15:46:09 +0300 Subject: [PATCH 134/521] Update HexaDecimalToDecimal.java --- Conversions/HexaDecimalToDecimal.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Conversions/HexaDecimalToDecimal.java b/Conversions/HexaDecimalToDecimal.java index c164f78e435f..533009b8ae16 100644 --- a/Conversions/HexaDecimalToDecimal.java +++ b/Conversions/HexaDecimalToDecimal.java @@ -6,7 +6,7 @@ public class HexaDecimalToDecimal { // convert hexadecimal to decimal public static int getHexaToDec(String hex) { - String digits = "012345678910ABCDEFF"; + String digits = "0123456789ABCDEF"; hex = hex.toUpperCase(); int val = 0; for (int i = 0; i < hex.length(); i++) { From bdb9acfbff2eec83cbbc9a315e2bcdb2f56d495d Mon Sep 17 00:00:00 2001 From: yanglbme Date: Wed, 22 May 2019 09:22:52 +0800 Subject: [PATCH 135/521] fix bugs in AES.java(#765) --- DataStructures/Lists/CircleLinkedList.java | 2 +- DataStructures/Matrix/Matrix.java | 269 --------------------- ciphers/AES.java | 16 +- 3 files changed, 7 insertions(+), 280 deletions(-) delete mode 100644 DataStructures/Matrix/Matrix.java diff --git a/DataStructures/Lists/CircleLinkedList.java b/DataStructures/Lists/CircleLinkedList.java index f26798dea29a..8863b7349ca2 100644 --- a/DataStructures/Lists/CircleLinkedList.java +++ b/DataStructures/Lists/CircleLinkedList.java @@ -52,7 +52,7 @@ public E remove(int pos) { before = before.next; } E saved = iterator.value; - // assigning the next referance to the the element following the element we want to remove... the last element will be assigned to the head. + // assigning the next reference to the the element following the element we want to remove... the last element will be assigned to the head. before.next = iterator.next; // scrubbing iterator.next = null; diff --git a/DataStructures/Matrix/Matrix.java b/DataStructures/Matrix/Matrix.java deleted file mode 100644 index cfae1fd81b23..000000000000 --- a/DataStructures/Matrix/Matrix.java +++ /dev/null @@ -1,269 +0,0 @@ -package DataStructures.Matrix; - -/** - * Matrix data-type. - * - * @author Kyler Smith, 2017 - */ - - -public class Matrix { - - public static void main(String[] args) { - - int[][] data1 = new int[0][0]; - int[][] data2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; - int[][] data3 = {{1, 4, 7}, {2, 5, 8}, {3, 6, 9}}; - - Matrix m1 = new Matrix(data1); - Matrix m2 = new Matrix(data2); - Matrix m3 = new Matrix(data3); - - System.out.println("m1 --> Rows: " + m1.getRows() + " Columns: " + m1.getColumns()); - System.out.println("m2 --> Rows: " + m2.getRows() + " Columns: " + m2.getColumns()); - System.out.println("m3 --> Rows: " + m3.getRows() + " Columns: " + m3.getColumns()); - - //check for reference issues - System.out.println("m2 -->\n" + m2); - data2[1][1] = 101; - System.out.println("m2 -->\n" + m2); - - //test equals - System.out.println("m2==null: " + m2.equals(null)); //false - System.out.println("m3==\"MATRIX\": " + m2.equals("MATRIX")); //false - System.out.println("m2==m1: " + m2.equals(m1)); //false - System.out.println("m2==m2: " + m2.equals(m2)); //true - System.out.println("m2==m3: " + m2.equals(m3)); //false - - //test operations (valid) - System.out.println("2 * m2:\n" + m2.scale(2)); - System.out.println("m2 / 2:\n" + m2.divide(2)); - System.out.println("m2 + m3:\n" + m2.plus(m3)); - System.out.println("m2 - m3:\n" + m2.minus(m3)); - System.out.println("m2 * m3: \n" + m2.multiply(m3)); - } - - - /** - * Data needs to be a deep copy as not to change the original state. - */ - private int[][] data; - - /** - * Constructor for the matrix takes in a 2D array - * - * @param pData - */ - public Matrix(int[][] pData) { - - /** Make a deep copy of the data */ - if (pData.length != 0) { - int[][] newData = new int[pData.length][pData[0].length]; - - for (int i = 0; i < pData.length; i++) - for (int j = 0; j < pData[0].length; j++) - newData[i][j] = pData[i][j]; - - this.data = newData; - } else { - this.data = null; - } - } - - /** - * Returns the element specified by the given location - * - * @param x : x cooridinate - * @param y : y cooridinate - * @return int : value at location - */ - public int getElement(int x, int y) { - return data[x][y]; - } - - /** - * Returns the number of rows in the Matrix - * - * @return rows - */ - public int getRows() { - if (this.data == null) - return 0; - - return data.length; - } - - /** - * Returns the number of rows in the Matrix - * - * @return columns - */ - public int getColumns() { - if (this.data == null) - return 0; - return data[0].length; - } - - /** - * Returns this matrix scaled by a factor. That is, computes sA where s is a - * constant and A is a matrix (this object). - * - * @param scalar : value to scale by - * @return A new matrix scaled by the scalar value - */ - public Matrix scale(int scalar) { - - int[][] newData = new int[this.data.length][this.data[0].length]; - - for (int i = 0; i < this.getRows(); ++i) - for (int j = 0; j < this.getColumns(); ++j) - newData[i][j] = this.data[i][j] * scalar; - - return new Matrix(newData); - } - - /** - * Returns this matrix divided by a factor. That is, computes sA where s is a - * constant and A is a matrix (this object). - * - * @param scalar : value to divide by - * @return A new matrix scaled by the scalar value - */ - public Matrix divide(int scalar) { - - int[][] newData = new int[this.data.length][this.data[0].length]; - - for (int i = 0; i < this.getRows(); ++i) - for (int j = 0; j < this.getColumns(); ++j) - newData[i][j] = this.data[i][j] / scalar; - - return new Matrix(newData); - } - - /** - * Adds this matrix to another matrix. - * - * @param other : Matrix to be added - * @return addend - */ - public Matrix plus(Matrix other) throws RuntimeException { - - int[][] newData = new int[this.data.length][this.data[0].length]; - - if (this.getRows() != other.getRows() || this.getColumns() != other.getColumns()) - throw new RuntimeException("Not the same size matrix."); - - for (int i = 0; i < this.getRows(); ++i) - for (int j = 0; j < this.getColumns(); ++j) - newData[i][j] = this.data[i][j] + other.getElement(i, j); - - return new Matrix(newData); - } - - /** - * Subtracts this matrix from another matrix. - * - * @param other : Matrix to be subtracted - * @return difference - */ - public Matrix minus(Matrix other) throws RuntimeException { - - int[][] newData = new int[this.data.length][this.data[0].length]; - - if (this.getRows() != other.getRows() || this.getColumns() != other.getColumns()) - throw new RuntimeException("Not the same size matrix."); - - for (int i = 0; i < this.getRows(); ++i) - for (int j = 0; j < this.getColumns(); ++j) - newData[i][j] = this.data[i][j] - other.getElement(i, j); - - return new Matrix(newData); - } - - /** - * Multiplies this matrix with another matrix. - * - * @param other : Matrix to be multiplied with - * @return product - */ - public Matrix multiply(Matrix other) throws RuntimeException { - - int[][] newData = new int[this.data.length][other.getColumns()]; - - if (this.getColumns() != other.getRows()) - throw new RuntimeException("The two matrices cannot be multiplied."); - int sum; - for (int i = 0; i < this.getRows(); ++i) - for (int j = 0; j < other.getColumns(); ++j) { - sum = 0; - for (int k = 0; k < this.getColumns(); ++k) { - sum += this.data[i][k] * other.getElement(k, j); - } - newData[i][j] = sum; - } - - - return new Matrix(newData); - } - - /** - * Checks if the matrix passed is equal to this matrix - * - * @param other : the other matrix - * @return boolean - */ - public boolean equals(Matrix other) { - if (this.getRows() != other.getRows() || this.getColumns() != other.getColumns()) - return false; - - for (int i = 0; i < this.data.length; i++) - for (int j = 0; j < this.data[0].length; j++) - if (this.data[i][j] != other.data[i][j]) - return false; - - return true; - } - - /** - * Returns the Matrix as a String in the following format - *

- * [ a b c ] ... - * [ x y z ] ... - * [ i j k ] ... - * ... - * - * @return Matrix as String - * TODO: Work formatting for different digit sizes - */ - public String toString() { - String str = ""; - - for (int i = 0; i < this.data.length; i++) { - str += "[ "; - for (int j = 0; j < this.data[0].length; j++) { - str += data[i][j]; - str += " "; - } - str += "]"; - str += "\n"; - } - - return str; - } - - /** - * Returns transposed matrix of this matrix. - * - * @return transposed Matrix. - */ - public Matrix transpose() { - - int[][] newData = new int[this.data[0].length][this.data.length]; - - for (int i = 0; i < this.getColumns(); ++i) - for (int j = 0; j < this.getRows(); ++j) - newData[i][j] = this.data[j][i]; - - return new Matrix(newData); - } -} diff --git a/ciphers/AES.java b/ciphers/AES.java index 75ae8db768c7..1bef34f0d4f3 100644 --- a/ciphers/AES.java +++ b/ciphers/AES.java @@ -6,8 +6,7 @@ /** * This class is build to demonstrate the application of the AES-algorithm on a * single 128-Bit block of data. - * - * @see khalil2535 + * */ public class AES { @@ -202,8 +201,7 @@ public static BigInteger scheduleCore(BigInteger t, int rconCounter) { String rBytes = t.toString(16); // Add zero padding - int rBytesLength = rBytes.length(); - while (rBytesLength < 8) { + while (rBytes.length() < 8) { rBytes = "0" + rBytes; } @@ -228,8 +226,8 @@ public static BigInteger scheduleCore(BigInteger t, int rconCounter) { currentByteBits = Integer.toHexString(currentByte); // Add zero padding - int currentByteBitsLength = currentByteBits.length(); - while (currentByteBitsLength < 2) { + + while (currentByteBits.length() < 2) { currentByteBits = '0' + currentByteBits; } @@ -304,8 +302,7 @@ public static int[] splitBlockIntoCells(BigInteger block) { String blockBits = block.toString(2); // Append leading 0 for full "128-bit" string - int blockBitsLength = blockBits.length(); - while (blockBitsLength < 128) { + while (blockBits.length() < 128) { blockBits = '0' + blockBits; } @@ -333,8 +330,7 @@ public static BigInteger mergeCellsIntoBlock(int[] cells) { String cellBits = Integer.toBinaryString(cells[i]); // Append leading 0 for full "8-bit" strings - int cellBitsLength = cellBits.length(); - while (cellBitsLength < 8) { + while (cellBits.length() < 8) { cellBits = '0' + cellBits; } From 1ebe496737b1472726f2ee7040c9f141bf237ce1 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Wed, 22 May 2019 09:37:44 +0800 Subject: [PATCH 136/521] fix bugs in ReverseString(#765) --- Others/RemoveDuplicateFromString.java | 8 ++++---- Others/ReverseString.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Others/RemoveDuplicateFromString.java b/Others/RemoveDuplicateFromString.java index d3590dc92417..2e4b11285c89 100644 --- a/Others/RemoveDuplicateFromString.java +++ b/Others/RemoveDuplicateFromString.java @@ -10,10 +10,10 @@ public class RemoveDuplicateFromString { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - String inp_str = br.readLine(); + String inpStr = br.readLine(); - System.out.println("Actual string is: " + inp_str); - System.out.println("String after removing duplicates: " + removeDuplicate(inp_str)); + System.out.println("Actual string is: " + inpStr); + System.out.println("String after removing duplicates: " + removeDuplicate(inpStr)); br.close(); } @@ -32,7 +32,7 @@ public static String removeDuplicate(String s) { return s; } - StringBuilder sb = new StringBuilder(""); + StringBuilder sb = new StringBuilder(); int n = s.length(); for (int i = 0; i < n; i++) { diff --git a/Others/ReverseString.java b/Others/ReverseString.java index 8dbf6cbd4b7a..76bbfb5da93a 100644 --- a/Others/ReverseString.java +++ b/Others/ReverseString.java @@ -9,7 +9,7 @@ * * @author Unknown */ -class ReverseString { +public class ReverseString { /** * This method reverses the string str and returns it @@ -18,9 +18,9 @@ class ReverseString { * @return Reversed string */ public static String reverse(String str) { - if (str.isEmpty() || str == null) return str; + if (str == null || str.isEmpty()) return str; - char arr[] = str.toCharArray(); + char[] arr = str.toCharArray(); for (int i = 0, j = str.length() - 1; i < j; i++, j--) { char temp = arr[i]; arr[i] = arr[j]; @@ -35,7 +35,7 @@ public static String reverse(String str) { * @param args Command line arguments * @throws IOException Exception thrown because of BufferedReader */ - public static void main(String args[]) throws IOException { + public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter the string"); String srr = br.readLine(); From a3e0cf85b7b39d08698ff2283cef4e2af361baa1 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Wed, 22 May 2019 10:00:47 +0800 Subject: [PATCH 137/521] fix bugs in MinimizingLateness(#765) --- MinimizingLateness/MinimizingLateness.java | 23 +++++++++++-------- ...{data06_lateness.txt => lateness_data.txt} | 0 2 files changed, 13 insertions(+), 10 deletions(-) rename MinimizingLateness/{data06_lateness.txt => lateness_data.txt} (100%) diff --git a/MinimizingLateness/MinimizingLateness.java b/MinimizingLateness/MinimizingLateness.java index 48d9093bc2dc..e5f71e9ef44a 100644 --- a/MinimizingLateness/MinimizingLateness.java +++ b/MinimizingLateness/MinimizingLateness.java @@ -1,7 +1,10 @@ package MinimizingLateness; -import java.io.*; -import java.util.*; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.StringTokenizer; public class MinimizingLateness { @@ -18,23 +21,23 @@ public Schedule(int t, int d) { } public static void main(String[] args) throws IOException { - // TODO Auto-generated method stub StringTokenizer token; - String ch; - BufferedReader in = new BufferedReader(new FileReader("input.txt")); - int indexCount; // size of array index - ch = in.readLine(); - indexCount = Integer.parseInt(ch); // The first line specifies the size of the operation (= the size of the array) + BufferedReader in = new BufferedReader(new FileReader("MinimizingLateness/lateness_data.txt")); + String ch = in.readLine(); + if (ch == null || ch.isEmpty()) { + return; + } + int indexCount = Integer.parseInt(ch); System.out.println("Input Data : "); System.out.println(indexCount); // number of operations - Schedule array[] = new Schedule[indexCount]; // Create an array to hold the operation + Schedule[] array = new Schedule[indexCount]; // Create an array to hold the operation int i = 0; while ((ch = in.readLine()) != null) { token = new StringTokenizer(ch, " "); // Include the time required for the operation to be performed in the array and the time it should be completed. array[i] = new Schedule(Integer.parseInt(token.nextToken()), Integer.parseInt(token.nextToken())); - i++; // ë‹¤ìŒ ì¸ë±ìФ + i++; System.out.println(array[i - 1].t + " " + array[i - 1].d); } diff --git a/MinimizingLateness/data06_lateness.txt b/MinimizingLateness/lateness_data.txt similarity index 100% rename from MinimizingLateness/data06_lateness.txt rename to MinimizingLateness/lateness_data.txt From 12d240414d738ab969720361a64fdc815613e2e8 Mon Sep 17 00:00:00 2001 From: Daher Daher <40135454+daher928@users.noreply.github.com> Date: Mon, 27 May 2019 13:39:33 +0300 Subject: [PATCH 138/521] Update GenericArrayListQueue.java Documentations added --- .../Queues/GenericArrayListQueue.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/DataStructures/Queues/GenericArrayListQueue.java b/DataStructures/Queues/GenericArrayListQueue.java index d287fdcee876..9c2f2658800d 100644 --- a/DataStructures/Queues/GenericArrayListQueue.java +++ b/DataStructures/Queues/GenericArrayListQueue.java @@ -2,29 +2,68 @@ import java.util.ArrayList; +/** + * This class implements a GenericArrayListQueue. + *

+ * A GenericArrayListQueue data structure functions the same as any specific-typed queue. + * The GenericArrayListQueue holds elemets of types to-be-specified at runtime. + * The elements that are added first are the first to be removed (FIFO) + * New elements are added to the back/rear of the queue. + * + */ public class GenericArrayListQueue { + /** + * The generic ArrayList for the queue + * T is the generic element + */ ArrayList _queue = new ArrayList(); + /** + * Checks if the queue has elements (not empty) + * + * @return True if the queue has elements. False otherwise. + */ private boolean hasElements() { return !_queue.isEmpty(); } + /** + * Checks what's at the front of the queue + * + * @return If queue is not empty, element at the front of the queue. Otherwise, null + */ public T peek() { T result = null; if(this.hasElements()) { result = _queue.get(0); } return result; } + /** + * Inserts an element of type T to the queue. + * + * @param element of type T to be added + * @return True if the element was added successfully + */ public boolean add(T element) { return _queue.add(element); } + /** + * Retrieve what's at the front of the queue + * + * @return If queue is not empty, element retrieved. Otherwise, null + */ public T poll() { T result = null; if(this.hasElements()) { result = _queue.remove(0); } return result; } + /** + * Main method + * + * @param args Command line arguments + */ public static void main(String[] args) { GenericArrayListQueue queue = new GenericArrayListQueue(); System.out.println("Running..."); From 1dbbb23cfd5fedcca7ab6a258e9b73e9639d4ac7 Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Wed, 29 May 2019 16:53:42 +0530 Subject: [PATCH 139/521] Fix for Issue #771. position=size causes NPE --- DataStructures/Lists/SinglyLinkedList.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index c9d2413a8375..659ba866c96b 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -66,13 +66,12 @@ public void deleteHead() { } /** - * This method deletes an element at Nth position - */ + * This method deletes an element at Nth position + */ public void deleteNth(int position) { - if (position < 0 || position > getSize()) { + if (position < 0 || position >= getSize()) { throw new RuntimeException("position less than zero or position more than the count of list"); - } - else if (position == 0) + } else if (position == 0) deleteHead(); else { Node cur = head; From 7eb07850733333726ba94bd2c15fc4d22d728759 Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 30 May 2019 12:56:17 +0530 Subject: [PATCH 140/521] Fix for Issue #773. Deleting an element that doesn't exist causes NPE --- DataStructures/Lists/DoublyLinkedList.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index fd250d956faf..677487e1d2b0 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -116,8 +116,13 @@ public Link deleteTail() { public void delete(int x) { Link current = head; - while (current.value != x) // Find the position to delete - current = current.next; + while (current.value != x) {// Find the position to delete + if (current != tail) { + current = current.next; + } else {// If we reach the tail and the element is still not found + throw new RuntimeException("The element to be deleted does not exist!"); + } + } if (current == head) deleteHead(); From 9b7862121539191d4e831b47b57b989b7cf22460 Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 30 May 2019 12:59:36 +0530 Subject: [PATCH 141/521] Revert "Fix for Issue #773. Deleting an element that doesn't exist causes NPE" This reverts commit 7eb07850733333726ba94bd2c15fc4d22d728759. --- DataStructures/Lists/DoublyLinkedList.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index 677487e1d2b0..fd250d956faf 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -116,13 +116,8 @@ public Link deleteTail() { public void delete(int x) { Link current = head; - while (current.value != x) {// Find the position to delete - if (current != tail) { - current = current.next; - } else {// If we reach the tail and the element is still not found - throw new RuntimeException("The element to be deleted does not exist!"); - } - } + while (current.value != x) // Find the position to delete + current = current.next; if (current == head) deleteHead(); From b6581eaa168765590ec173f3b2f27a0c6558ccbb Mon Sep 17 00:00:00 2001 From: Abhijay Kumar Date: Thu, 30 May 2019 13:04:15 +0530 Subject: [PATCH 142/521] Fix for Issue #773. Deleting an element that doesn't exist causes NPE --- DataStructures/Lists/DoublyLinkedList.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index fd250d956faf..677487e1d2b0 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -116,8 +116,13 @@ public Link deleteTail() { public void delete(int x) { Link current = head; - while (current.value != x) // Find the position to delete - current = current.next; + while (current.value != x) {// Find the position to delete + if (current != tail) { + current = current.next; + } else {// If we reach the tail and the element is still not found + throw new RuntimeException("The element to be deleted does not exist!"); + } + } if (current == head) deleteHead(); From d8027908edada88d50599b585159f32ecc09622f Mon Sep 17 00:00:00 2001 From: xemjas <51793139+xemjas@users.noreply.github.com> Date: Sun, 16 Jun 2019 00:52:14 +0700 Subject: [PATCH 143/521] Integer To Roman --- Conversions/IntegerToRoman.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Conversions/IntegerToRoman.java diff --git a/Conversions/IntegerToRoman.java b/Conversions/IntegerToRoman.java new file mode 100644 index 000000000000..b23a002e09bb --- /dev/null +++ b/Conversions/IntegerToRoman.java @@ -0,0 +1,29 @@ +package Conversions; + +public class IntegerToRoman { + private static int[] allArabianRomanNumbers = new int[] {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; + private static String[] allRomanNumbers = new String[] {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; + + public static String integerToRoman(int num) { + if(num <= 0) { + return ""; + } + + StringBuilder builder = new StringBuilder(); + + for(int a = 0;a < allArabianRomanNumbers.length;a++) { + int times = num / allArabianRomanNumbers[a]; + for(int b = 0;b < times;b++) { + builder.append(allRomanNumbers[a]); + } + + num -= times * allArabianRomanNumbers[a]; + } + + return builder.toString(); + } + + public static void main(String[] args) { + System.out.println(IntegerToRoman.integerToRoman(2131)); + } +} From ec91f0c2adc5cbfa44c2bc2ac2dd558863fec1a8 Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Thu, 20 Jun 2019 15:53:35 +0800 Subject: [PATCH 144/521] Rename GenericTree.Java to GenericTree.java --- DataStructures/Trees/{GenericTree.Java => GenericTree.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename DataStructures/Trees/{GenericTree.Java => GenericTree.java} (99%) diff --git a/DataStructures/Trees/GenericTree.Java b/DataStructures/Trees/GenericTree.java similarity index 99% rename from DataStructures/Trees/GenericTree.Java rename to DataStructures/Trees/GenericTree.java index bb3d29dc7394..107a072cf965 100644 --- a/DataStructures/Trees/GenericTree.Java +++ b/DataStructures/Trees/GenericTree.java @@ -231,4 +231,4 @@ private void removeleaves(Node node) { } } -} \ No newline at end of file +} From c188fa9187d6cfbcc05530977cfee266bb4fe338 Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Thu, 20 Jun 2019 17:23:49 +0800 Subject: [PATCH 145/521] Update IntegerToRoman.java --- Conversions/IntegerToRoman.java | 44 ++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Conversions/IntegerToRoman.java b/Conversions/IntegerToRoman.java index b23a002e09bb..e979eb536336 100644 --- a/Conversions/IntegerToRoman.java +++ b/Conversions/IntegerToRoman.java @@ -1,29 +1,29 @@ package Conversions; public class IntegerToRoman { - private static int[] allArabianRomanNumbers = new int[] {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; - private static String[] allRomanNumbers = new String[] {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; - + private static int[] allArabianRomanNumbers = new int[]{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; + private static String[] allRomanNumbers = new String[]{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; + public static String integerToRoman(int num) { - if(num <= 0) { - return ""; - } - - StringBuilder builder = new StringBuilder(); - - for(int a = 0;a < allArabianRomanNumbers.length;a++) { - int times = num / allArabianRomanNumbers[a]; - for(int b = 0;b < times;b++) { - builder.append(allRomanNumbers[a]); - } - - num -= times * allArabianRomanNumbers[a]; - } - - return builder.toString(); + if (num <= 0) { + return ""; + } + + StringBuilder builder = new StringBuilder(); + + for (int a = 0; a < allArabianRomanNumbers.length; a++) { + int times = num / allArabianRomanNumbers[a]; + for (int b = 0; b < times; b++) { + builder.append(allRomanNumbers[a]); + } + + num -= times * allArabianRomanNumbers[a]; + } + + return builder.toString(); } - + public static void main(String[] args) { - System.out.println(IntegerToRoman.integerToRoman(2131)); - } + System.out.println(IntegerToRoman.integerToRoman(2131)); + } } From 63cf199e0272f49f44e7fd387b1ef286cb071eda Mon Sep 17 00:00:00 2001 From: Anup Kumar Panwar <1anuppanwar@gmail.com> Date: Sat, 6 Jul 2019 14:07:10 +0530 Subject: [PATCH 146/521] Create FUNDING.yml --- .github/FUNDING.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000000..514c9327e231 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: TheAlgorithms +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: ['http://paypal.me/TheAlgorithms/1000', 'https://donorbox.org/thealgorithms'] From 7cd855250222df3e467d00920e68f087541e677a Mon Sep 17 00:00:00 2001 From: CN-GuoZiyang Date: Sat, 6 Jul 2019 20:54:55 +0800 Subject: [PATCH 147/521] Using randomize partition to avoid the basically ordered sequences --- Sorts/QuickSort.java | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/Sorts/QuickSort.java b/Sorts/QuickSort.java index 373da49462b8..4388d02bf639 100644 --- a/Sorts/QuickSort.java +++ b/Sorts/QuickSort.java @@ -1,6 +1,6 @@ package Sorts; -import static Sorts.SortUtils.*; +import static sorts.SortUtils.*; /** * @author Varun Upadhyay (https://github.com/varunu28) @@ -33,12 +33,27 @@ public > T[] sort(T[] array) { private static > void doSort(T[] array, int left, int right) { if (left < right) { - int pivot = partition(array, left, right); + int pivot = randomPartition(array, left, right); doSort(array, left, pivot - 1); doSort(array, pivot, right); } } + /** + * Ramdomize the array to avoid the basically ordered sequences + * + * @param array The array to be sorted + * @param left The first index of an array + * @param right The last index of an array + * @return the partition index of the array + */ + + private static > int randomPartition(T[] array, int left, int right) { + int randomIndex = left + (int)(Math.random()*(right - left + 1)); + swap(array, randomIndex, right); + return partition(array, left, right); + } + /** * This method finds the partition index for an array * @@ -75,7 +90,7 @@ public static void main(String[] args) { Integer[] array = {3, 4, 1, 32, 0, 1, 5, 12, 2, 5, 7, 8, 9, 2, 44, 111, 5}; QuickSort quickSort = new QuickSort(); - // quickSort.sort(array); + quickSort.sort(array); //Output => 0 1 1 2 2 3 4 5 5 5 7 8 9 12 32 44 111 print(array); From 0821df893ae6ed54c30cc2397fc64f9a45e53bcf Mon Sep 17 00:00:00 2001 From: Guo Ziyang Date: Sat, 6 Jul 2019 20:56:05 +0800 Subject: [PATCH 148/521] Update QuickSort.java --- Sorts/QuickSort.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sorts/QuickSort.java b/Sorts/QuickSort.java index 4388d02bf639..47f79de0c35d 100644 --- a/Sorts/QuickSort.java +++ b/Sorts/QuickSort.java @@ -1,6 +1,6 @@ package Sorts; -import static sorts.SortUtils.*; +import static Sorts.SortUtils.*; /** * @author Varun Upadhyay (https://github.com/varunu28) From 1c3490d25e8e920efc83890a5336ac89af28220b Mon Sep 17 00:00:00 2001 From: Priyansh-Kedia <52661249+Priyansh-Kedia@users.noreply.github.com> Date: Tue, 9 Jul 2019 23:06:40 +0530 Subject: [PATCH 149/521] Update BinaryToDecimal.java Updated some of the variable names for the ease of understanding the process. --- Conversions/BinaryToDecimal.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Conversions/BinaryToDecimal.java b/Conversions/BinaryToDecimal.java index 91f1b7bc2fed..2420553485c1 100644 --- a/Conversions/BinaryToDecimal.java +++ b/Conversions/BinaryToDecimal.java @@ -15,14 +15,14 @@ class BinaryToDecimal { */ public static void main(String args[]) { Scanner sc = new Scanner(System.in); - int n, k, d, s = 0, c = 0; + int bin_num, bin_copy, d, s = 0, power = 0; System.out.print("Binary number: "); - n = sc.nextInt(); - k = n; - while (k != 0) { - d = k % 10; - s += d * (int) Math.pow(2, c++); - k /= 10; + bin_num = sc.nextInt(); + bin_copy = bin_num; + while (bin_copy != 0) { + d = bin_copy % 10; + s += d * (int) Math.pow(2, power++); + bin_copy /= 10; } System.out.println("Decimal equivalent:" + s); sc.close(); From dc5ae2d03bdf974100ab0551045c4526ac6da7b5 Mon Sep 17 00:00:00 2001 From: Priyansh-Kedia <52661249+Priyansh-Kedia@users.noreply.github.com> Date: Wed, 10 Jul 2019 10:17:08 +0530 Subject: [PATCH 150/521] Update BinaryToDecimal.java Changed bin_num and bin_copy to binNum and binCopy respectively. --- Conversions/BinaryToDecimal.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Conversions/BinaryToDecimal.java b/Conversions/BinaryToDecimal.java index 2420553485c1..6db926d3b932 100644 --- a/Conversions/BinaryToDecimal.java +++ b/Conversions/BinaryToDecimal.java @@ -15,14 +15,14 @@ class BinaryToDecimal { */ public static void main(String args[]) { Scanner sc = new Scanner(System.in); - int bin_num, bin_copy, d, s = 0, power = 0; + int binNum, binCopy, d, s = 0, power = 0; System.out.print("Binary number: "); - bin_num = sc.nextInt(); - bin_copy = bin_num; - while (bin_copy != 0) { - d = bin_copy % 10; + binNum = sc.nextInt(); + binCopy = binNum; + while (binCopy != 0) { + d = binCopy % 10; s += d * (int) Math.pow(2, power++); - bin_copy /= 10; + binCopy /= 10; } System.out.println("Decimal equivalent:" + s); sc.close(); From 48537fc27c34ebd11657fa05b1eabd699c0e8bc1 Mon Sep 17 00:00:00 2001 From: obelisk0114 Date: Mon, 15 Jul 2019 17:22:02 -0700 Subject: [PATCH 151/521] Fix binary to octal conversion --- Conversions/BinaryToOctal.java | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Conversions/BinaryToOctal.java b/Conversions/BinaryToOctal.java index 146b82e23b6a..833ab3a221f7 100644 --- a/Conversions/BinaryToOctal.java +++ b/Conversions/BinaryToOctal.java @@ -16,6 +16,7 @@ public class BinaryToOctal { */ public static void main(String args[]) { Scanner sc = new Scanner(System.in); + System.out.println("Input the binary number: "); int b = sc.nextInt(); System.out.println("Octal equivalent: " + convertBinaryToOctal(b)); sc.close(); @@ -26,18 +27,24 @@ public static void main(String args[]) { * This method converts a binary number to * an octal number. * - * @param b The binary number + * @param binary The binary number * @return The octal number */ - public static int convertBinaryToOctal(int b) { - int o = 0, r = 0, j = 1; - while (b != 0) { - r = b % 10; - o = o + r * j; - j = j * 2; - b = b / 10; + public static String convertBinaryToOctal(int binary) { + String octal = ""; + int currBit = 0, j = 1; + while (binary != 0) { + int code3 = 0; + for (int i = 0; i < 3; i++) { + currBit = binary % 10; + binary = binary / 10; + code3 += currBit * j; + j *= 2; + } + octal = code3 + octal; + j = 1; } - return o; + return octal; } } From 706377f781e3018d5471aaa5ad699e69b93d4161 Mon Sep 17 00:00:00 2001 From: Nikit Singh Date: Fri, 26 Jul 2019 00:33:09 +0530 Subject: [PATCH 152/521] Updated Dynamic Programming Links in Readme.md Links in the dynamic programming column were not pointing to the right files so I fixed it in the Readme file. --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d5efc664fc9e..abf801119aad 100644 --- a/README.md +++ b/README.md @@ -163,14 +163,14 @@ __Properties__ Conversions | Dynamic Programming |Ciphers|Miscellaneous| ----------- |----------------------------------------------------------------|-------|-------------| -[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](Dynamic%20Programming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| -[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](Dynamic%20Programming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| -[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](Dynamic%20Programming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| -[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](Dynamic%20Programming/KadaneAlgorithm.java)|more coming soon...| -[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](Dynamic%20Programming/Knapsack.java)| -[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](Dynamic%20Programming/LongestCommonSubsequence.java)| -[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](Dynamic%20Programming/LongestIncreasingSubsequence.java)| -[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](Dynamic%20Programming/RodCutting.java)| +[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](DynamicProgramming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| +[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](DynamicProgramming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| +[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](DynamicProgramming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| +[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](DynamicProgramming/KadaneAlgorithm.java)|more coming soon...| +[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](DynamicProgramming/Knapsack.java)| +[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](DynamicProgramming/LongestCommonSubsequence.java)| +[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](DynamicProgramming/LongestIncreasingSubsequence.java)| +[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](DynamicProgramming/RodCutting.java)| and much more...| and more...| ### Data Structures From b26e3d9da3380a2e67b658bf6f18f3c17c093ea9 Mon Sep 17 00:00:00 2001 From: obelisk0114 Date: Fri, 26 Jul 2019 01:43:04 -0700 Subject: [PATCH 153/521] Updated Miscellaneous Links in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index abf801119aad..0ffc500b81f1 100644 --- a/README.md +++ b/README.md @@ -163,8 +163,8 @@ __Properties__ Conversions | Dynamic Programming |Ciphers|Miscellaneous| ----------- |----------------------------------------------------------------|-------|-------------| -[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](DynamicProgramming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| -[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](DynamicProgramming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| +[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](DynamicProgramming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](Misc/heap_sort.java)| +[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](DynamicProgramming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](Misc/PalindromePrime.java)| [Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](DynamicProgramming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| [Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](DynamicProgramming/KadaneAlgorithm.java)|more coming soon...| [Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](DynamicProgramming/Knapsack.java)| From 9751ac5e98a10012819d437371b27eed91b54218 Mon Sep 17 00:00:00 2001 From: PatOnTheBack <51241310+PatOnTheBack@users.noreply.github.com> Date: Wed, 7 Aug 2019 21:58:58 -0400 Subject: [PATCH 154/521] Added Maths Folder & Absolute Value Program --- Maths/AbsoluteValue.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Maths/AbsoluteValue.java diff --git a/Maths/AbsoluteValue.java b/Maths/AbsoluteValue.java new file mode 100644 index 000000000000..dfe3915ad0b1 --- /dev/null +++ b/Maths/AbsoluteValue.java @@ -0,0 +1,27 @@ +package Maths; + +/** + * @author PatOnTheBack + */ + + public class AbsoluteValue { + + public static void main(String[] args) { + + int value = -34; + + System.out.println("The absolute value of " + value + " is " + abs_val(value)); + + } + + public static int abs_val(int value) { + // If value is less than zero, make value positive. + if (value < 0) { + return -value; + } + + return value; + + } + + } From b882515eb005c0856dd5d665e2fc3cd164b9f37b Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Thu, 15 Aug 2019 09:12:33 +0800 Subject: [PATCH 155/521] Update AbsoluteValue.java --- Maths/AbsoluteValue.java | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Maths/AbsoluteValue.java b/Maths/AbsoluteValue.java index dfe3915ad0b1..82faf81ff92a 100644 --- a/Maths/AbsoluteValue.java +++ b/Maths/AbsoluteValue.java @@ -4,24 +4,21 @@ * @author PatOnTheBack */ - public class AbsoluteValue { +public class AbsoluteValue { public static void main(String[] args) { - int value = -34; - - System.out.println("The absolute value of " + value + " is " + abs_val(value)); - + System.out.println("The absolute value of " + value + " is " + absVal(value)); } - public static int abs_val(int value) { - // If value is less than zero, make value positive. - if (value < 0) { - return -value; - } - - return value; - + /** + * If value is less than zero, make value positive. + * + * @param value a number + * @return the absolute value of a number + */ + public static int absVal(int value) { + return value > 0 ? value : -value; } - } +} From 0ac88474f3797572e17f3e083d13d638a159e7b8 Mon Sep 17 00:00:00 2001 From: nisarhassan12 Date: Wed, 21 Aug 2019 04:55:31 +0000 Subject: [PATCH 156/521] Added gitpod.io badge to the README --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0ffc500b81f1..f49c7207efd2 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,11 @@ NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. +Run, edit and contribute using Gitpod.io a free online dev environment. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) + + ### All algorithms implemented in Java (for education) These are for demonstration purposes only. There are many implementations of sorts in the Java standard library that are much better for performance reasons. @@ -28,7 +33,7 @@ __Properties__ ### Insertion ![alt text][insertion-image] -From [Wikipedia][insertion-wiki]: Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. +From [Wikipedia][insertion-wiki]: Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. In the figure, each bar represents an element of an array that needs to be sorted. What happens at the first intersection of the top most and second top most bars is to swap these elements, represented by bars, because the second element has a higher precedence than the first element does. By repeating this method, insertion sort completes sorting. __Properties__ @@ -121,7 +126,7 @@ __Properties__ * Worst case performance O(log n) * Best case performance O(1) * Average case performance O(log n) -* Worst case space complexity O(1) +* Worst case space complexity O(1) ##### View the algorithm in [action][binary-tutorialspoint] From 86078cfd27df2829f92c0d0aa3414ad9924bcaab Mon Sep 17 00:00:00 2001 From: nisarhassan12 Date: Wed, 21 Aug 2019 04:58:45 +0000 Subject: [PATCH 157/521] Updates README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f49c7207efd2..d0eb20ae4593 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. -Run, edit and contribute using Gitpod.io a free online dev environment. +You can playaround(run and edit) Algorithms and contribute to thwm using Gitpod.io a free online dev environment with a single click. No need to worry about the Dev enviroment. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) From f0ed93638e31dfb2a456d1d52ec03bac1b6b8670 Mon Sep 17 00:00:00 2001 From: Nisar Hassan Naqvi <46004116+nisarhassan12@users.noreply.github.com> Date: Wed, 21 Aug 2019 10:01:21 +0500 Subject: [PATCH 158/521] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d0eb20ae4593..d834e56ff59e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. -You can playaround(run and edit) Algorithms and contribute to thwm using Gitpod.io a free online dev environment with a single click. No need to worry about the Dev enviroment. +You can playaround (run and edit) with Algorithms or contribute to them using Gitpod.io a free online dev environment with a single click. No need to worry about the Dev enviroment. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) From 9994a6a58c8e75c72260cf081b72e26fcd63f86b Mon Sep 17 00:00:00 2001 From: Nisar Hassan Naqvi <46004116+nisarhassan12@users.noreply.github.com> Date: Wed, 21 Aug 2019 10:27:23 +0500 Subject: [PATCH 159/521] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d834e56ff59e..5277a698232c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. -You can playaround (run and edit) with Algorithms or contribute to them using Gitpod.io a free online dev environment with a single click. No need to worry about the Dev enviroment. +You can playaround (run and edit) the Algorithms or contribute to them using Gitpod.io a free online dev environment with a single click. No need to worry about the Dev enviroment. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) From 5c466bebb4245bd52ca3aeec279f632d6b949452 Mon Sep 17 00:00:00 2001 From: nisarhassan12 Date: Wed, 21 Aug 2019 07:05:59 +0000 Subject: [PATCH 160/521] Updates README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5277a698232c..02f9bccb9f11 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. -You can playaround (run and edit) the Algorithms or contribute to them using Gitpod.io a free online dev environment with a single click. No need to worry about the Dev enviroment. +You can play around (run and edit) the Algorithms or contribute to them using Gitpod.io a free online dev environment with a single click. No need to worry about the Dev enviroment. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) From 11864ca1566f80c9464e79178c5ded2ada2a1240 Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Sat, 24 Aug 2019 20:35:36 +0800 Subject: [PATCH 161/521] docs: remove FUNDING.yml and use default file See https://github.com/TheAlgorithms/.github --- .github/FUNDING.yml | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 514c9327e231..000000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: TheAlgorithms -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: ['http://paypal.me/TheAlgorithms/1000', 'https://donorbox.org/thealgorithms'] From a4156fcb7aaf0fe167e74463884b499013480184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Furaha=20Dami=C3=A9n?= Date: Tue, 27 Aug 2019 21:49:33 -0400 Subject: [PATCH 162/521] ignore non-alphanumeric --- Others/Palindrome.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Others/Palindrome.java b/Others/Palindrome.java index 28e9b5e38e25..af4a72fdede3 100644 --- a/Others/Palindrome.java +++ b/Others/Palindrome.java @@ -22,4 +22,29 @@ public boolean SecondWay(String x) { return SecondWay(x.substring(1, x.length() - 1)); } + + /** + * This method ignores all non-alphanumeric characters and case runs in O(n) + * where n is the length of s + * + * @param s String to check + * @return true if s is palindrome else false + */ + public boolean isPalindrome(String s) { + s = s.toLowerCase().trim(); + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + if (Character.isLetter(c) || Character.isDigit(c)) + sb.append(c); + } + s = sb.toString(); + int start = 0; + int end = s.length() - 1; + while (start <= end) { + if (s.charAt(start++) != s.charAt(end--)) + return false; + + } + return true; + } } From 4ddbaca62e27d4b530211cd01b915cd6678cdd3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Furaha=20Dami=C3=A9n?= Date: Tue, 27 Aug 2019 22:01:09 -0400 Subject: [PATCH 163/521] secondaryWordCount method added --- Others/CountWords.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Others/CountWords.java b/Others/CountWords.java index c3e0ddf1e3c7..5dc6375597c8 100644 --- a/Others/CountWords.java +++ b/Others/CountWords.java @@ -16,6 +16,7 @@ public static void main(String[] args) { String str = input.nextLine(); System.out.println("Your text has " + wordCount(str) + " word(s)"); + System.out.println("Your text has " + secondaryWordCount(str) + " word(s)"); input.close(); } @@ -25,4 +26,25 @@ private static int wordCount(String s) { return s.trim().split("[\\s]+").length; } + /** + * counts the number of words in a sentence but ignores all potential + * non-alphanumeric characters that do not represent a word. runs in O(n) where + * n is the length of s + * + * @param s String: sentence with word(s) + * @return int: number of words + */ + private static int secondaryWordCount(String s) { + if (s == null || s.isEmpty()) + return 0; + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + if (Character.isLetter(c) || Character.isDigit(c)) + sb.append(c); + } + s = sb.toString(); + return s.trim().split("[\\s]+").length; + + } + } From df6e16438c03f2551090225cbba03fc72f3702bc Mon Sep 17 00:00:00 2001 From: yeongmo-j Date: Tue, 3 Sep 2019 12:23:01 +0900 Subject: [PATCH 164/521] Fix StackArray.java resize() --- DataStructures/Stacks/StackArray.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/DataStructures/Stacks/StackArray.java b/DataStructures/Stacks/StackArray.java index 6e580918fabc..cc8596293c4b 100644 --- a/DataStructures/Stacks/StackArray.java +++ b/DataStructures/Stacks/StackArray.java @@ -109,14 +109,13 @@ public int peek() { } private void resize(int newSize) { - // private int[] transferArray = new int[newSize]; we can't put modifiers here ! int[] transferArray = new int[newSize]; - // for(int i = 0; i < stackArray.length(); i++){ the length isn't a method . for (int i = 0; i < stackArray.length; i++) { transferArray[i] = stackArray[i]; - stackArray = transferArray; } + // This reference change might be nice in here + stackArray = transferArray; maxSize = newSize; } From b98e8d9ae90b474c3da12e297fe3af08dd2695f2 Mon Sep 17 00:00:00 2001 From: shellhub Date: Mon, 23 Sep 2019 14:49:23 +0800 Subject: [PATCH 165/521] reduce code --- Others/Armstrong.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Others/Armstrong.java b/Others/Armstrong.java index 1340c8b9b581..bfdde2b0e1cd 100644 --- a/Others/Armstrong.java +++ b/Others/Armstrong.java @@ -39,15 +39,11 @@ public static boolean checkIfANumberIsAmstrongOrNot(int number) { sum = sum + (remainder * remainder * remainder); number = number / 10; } - if (sum == temp) { - return true; - } else { - return false; - } + return sum == temp; } private static int inputInt(String string) { System.out.print(string); return Integer.parseInt(scan.nextLine()); } -} \ No newline at end of file +} From a19ece9b0ca5608d36afb5eafaaf7187899b1ea6 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 24 Sep 2019 10:45:39 +0800 Subject: [PATCH 166/521] code readable --- Searches/BinarySearch.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Searches/BinarySearch.java b/Searches/BinarySearch.java index e290cefb84fe..8c7e113cc885 100644 --- a/Searches/BinarySearch.java +++ b/Searches/BinarySearch.java @@ -58,25 +58,23 @@ private > int search(T array[], T key, int left, int rig int median = (left + right) >>> 1; int comp = key.compareTo(array[median]); - if (comp < 0) { + if (comp == 0) { + return median; + } else if (comp < 0) { return search(array, key, left, median - 1); - } - - if (comp > 0) { + } else { return search(array, key, median + 1, right); } - - return median; } // Driver Program public static void main(String[] args) { // Just generate data Random r = ThreadLocalRandom.current(); - + int size = 100; int maxElement = 100000; - + Integer[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().boxed().toArray(Integer[]::new); From 37918aa27f9a05c2b46eec3003a410fe4bd09f21 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 24 Sep 2019 20:19:50 +0800 Subject: [PATCH 167/521] fix memory leak --- DataStructures/Lists/SinglyLinkedList.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 356d8e2206cb..b4dae16f6049 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -61,7 +61,9 @@ public void deleteHead() { throw new RuntimeException("The list is empty!"); } + Node destroy = head; head = head.next; + destroy = null; // clear to let GC do its work } /** From dff1b0931c0c95f0495c45ac905eb7e2f7e31099 Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 25 Sep 2019 08:57:42 +0800 Subject: [PATCH 168/521] fix EmptyStackException --- DataStructures/Stacks/BalancedBrackets.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/DataStructures/Stacks/BalancedBrackets.java b/DataStructures/Stacks/BalancedBrackets.java index 1a8673d6fbf3..8063c5105816 100644 --- a/DataStructures/Stacks/BalancedBrackets.java +++ b/DataStructures/Stacks/BalancedBrackets.java @@ -38,29 +38,25 @@ static boolean is_balanced(String s) { bracketsStack.push(x); break; case '}': - if (bracketsStack.peek() == '{') { - bracketsStack.pop(); + if (!bracketsStack.empty() && bracketsStack.pop() == '{') { break; } else { return false; } case '>': - if (bracketsStack.peek() == '<') { - bracketsStack.pop(); + if (!bracketsStack.empty() && bracketsStack.pop() == '<') { break; } else { return false; } case ')': - if (bracketsStack.peek() == '(') { - bracketsStack.pop(); + if (!bracketsStack.empty() && bracketsStack.pop() == '(') { break; } else { return false; } case ']': - if (bracketsStack.peek() == '[') { - bracketsStack.pop(); + if (!bracketsStack.empty() && bracketsStack.pop() == '[') { break; } else { return false; From ef767fc4d520edc7d5042c3f12a476b224afc6ef Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 25 Sep 2019 20:26:48 +0800 Subject: [PATCH 169/521] optimization --- DataStructures/Queues/Queues.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/DataStructures/Queues/Queues.java b/DataStructures/Queues/Queues.java index 046964bcb114..01b20b9a351f 100644 --- a/DataStructures/Queues/Queues.java +++ b/DataStructures/Queues/Queues.java @@ -53,9 +53,7 @@ public Queue(int size) { public boolean insert(int x) { if (isFull()) return false; - if (rear == maxSize - 1) // If the back of the queue is the end of the array wrap around to the front - rear = -1; - rear++; + rear = (rear + 1) % maxSize; // If the back of the queue is the end of the array wrap around to the front queueArray[rear] = x; nItems++; return true; @@ -72,9 +70,7 @@ public int remove() { // Remove an element from the front of the queue return -1; } int temp = queueArray[front]; - front++; - if (front == maxSize) //Dealing with wrap-around again - front = 0; + front = (front + 1) % maxSize; nItems--; return temp; } @@ -153,6 +149,6 @@ public static void main(String args[]) { // [7(rear), 2(front), 5, 3] System.out.println(myQueue.peekFront()); // Will print 2 - System.out.println(myQueue.peekRear()); // Will print 7 + System.out.println(myQueue.peekRear()); // Will print 7 } } From 9743e7506faca615dbe3d46c8af23a55e9c7f92e Mon Sep 17 00:00:00 2001 From: qwerty50000a <37273442+qwerty50000a@users.noreply.github.com> Date: Wed, 25 Sep 2019 17:21:54 -0400 Subject: [PATCH 170/521] Update Knapsack.java Added check if the arrays are null --- DynamicProgramming/Knapsack.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/DynamicProgramming/Knapsack.java b/DynamicProgramming/Knapsack.java index 025d3cd2b2e2..1652dc63b14d 100644 --- a/DynamicProgramming/Knapsack.java +++ b/DynamicProgramming/Knapsack.java @@ -6,7 +6,9 @@ public class Knapsack { - private static int knapSack(int W, int wt[], int val[], int n) { + private static int knapSack(int W, int wt[], int val[], int n) throws IllegalArgumentException { + if(wt == null || val == null) + throw new IllegalArgumentException(); int i, w; int rv[][] = new int[n + 1][W + 1]; //rv means return value From 8881e9aa4e43c8c437d827882dccc9d1b2a92b1f Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 26 Sep 2019 10:02:58 +0800 Subject: [PATCH 171/521] make code more readable --- Sorts/BubbleSort.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Sorts/BubbleSort.java b/Sorts/BubbleSort.java index edad5e354c08..29d588932c8f 100644 --- a/Sorts/BubbleSort.java +++ b/Sorts/BubbleSort.java @@ -18,18 +18,15 @@ class BubbleSort implements SortAlgorithm { @Override public > T[] sort(T array[]) { - int last = array.length; - //Sorting - boolean swap; - do { - swap = false; - for (int count = 0; count < last - 1; count++) { - if (less(array[count], array[count + 1])) { - swap = swap(array, count, count + 1); - } + for (int i = 0, size = array.length; i < size - 1; ++i) { + boolean swapped = false; + for (int j = 0; j < size - 1 - i; ++j) { + swapped = less(array[j], array[j + 1]) && swap(array, j, j + 1); } - last--; - } while (swap); + if (!swapped) { + break; + } + } return array; } From 947127cfb6b90e05c0ca42392dba9fde90054224 Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 26 Sep 2019 16:14:51 +0800 Subject: [PATCH 172/521] make code less --- DataStructures/Queues/PriorityQueues.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/DataStructures/Queues/PriorityQueues.java b/DataStructures/Queues/PriorityQueues.java index bbefa1f6949e..b2b959113490 100644 --- a/DataStructures/Queues/PriorityQueues.java +++ b/DataStructures/Queues/PriorityQueues.java @@ -42,18 +42,15 @@ public PriorityQueue(int size) { public void insert(int value) { if (isFull()) { throw new RuntimeException("Queue is full"); - } - if (nItems == 0) { - queueArray[0] = value; } else { - int j = nItems; - while (j > 0 && queueArray[j - 1] > value) { - queueArray[j] = queueArray[j - 1]; // Shifts every element up to make room for insertion + int j = nItems - 1; // index of last element + while (j >= 0 && queueArray[j] > value) { + queueArray[j + 1] = queueArray[j]; // Shifts every element up to make room for insertion j--; } - queueArray[j] = value; // Once the correct position is found the value is inserted - } - nItems++; + queueArray[j + 1] = value; // Once the correct position is found the value is inserted + nItems++; + } } /** From 971f22cad21eb4862e8de75d4a316694dccdb83b Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 28 Sep 2019 10:19:39 +0800 Subject: [PATCH 173/521] optimization --- Maths/AbsoluteValue.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/AbsoluteValue.java b/Maths/AbsoluteValue.java index 82faf81ff92a..dc17213d6089 100644 --- a/Maths/AbsoluteValue.java +++ b/Maths/AbsoluteValue.java @@ -18,7 +18,7 @@ public static void main(String[] args) { * @return the absolute value of a number */ public static int absVal(int value) { - return value > 0 ? value : -value; + return value < 0 ? -value : value; } } From f6f5dac50a89f2e480a2f4b267f6b937ea03ece5 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 28 Sep 2019 11:15:22 +0800 Subject: [PATCH 174/521] add more --- Maths/Factorial.java | 25 +++++++++++++++++++++++++ Maths/FindMax.java | 26 ++++++++++++++++++++++++++ Maths/FindMin.java | 26 ++++++++++++++++++++++++++ Maths/MaxValue.java | 24 ++++++++++++++++++++++++ Maths/MinValue.java | 24 ++++++++++++++++++++++++ Maths/PrimeCheck.java | 31 +++++++++++++++++++++++++++++++ 6 files changed, 156 insertions(+) create mode 100644 Maths/Factorial.java create mode 100644 Maths/FindMax.java create mode 100644 Maths/FindMin.java create mode 100644 Maths/MaxValue.java create mode 100644 Maths/MinValue.java create mode 100644 Maths/PrimeCheck.java diff --git a/Maths/Factorial.java b/Maths/Factorial.java new file mode 100644 index 000000000000..1734e93fb83d --- /dev/null +++ b/Maths/Factorial.java @@ -0,0 +1,25 @@ +package Maths; + +public class Factorial { + public static void main(String[] args) { + int n = 5; + System.out.println(n + "! = " + factorial(n)); + } + + /** + * Calculate factorial + * + * @param n the number + * @return the factorial of {@code n} + */ + public static long factorial(int n) { + if (n < 0) { + throw new ArithmeticException("n < 0"); + } + long fac = 1; + for (int i = 1; i <= n; ++i) { + fac *= i; + } + return fac; + } +} diff --git a/Maths/FindMax.java b/Maths/FindMax.java new file mode 100644 index 000000000000..739cda39bf5d --- /dev/null +++ b/Maths/FindMax.java @@ -0,0 +1,26 @@ +package Maths; + +public class FindMax { + + //Driver + public static void main(String[] args) { + int[] array = {2, 4, 9, 7, 19, 94, 5}; + System.out.println("max = " + findMax(array)); + } + + /** + * find max of array + * + * @param array the array contains element + * @return max value + */ + public static int findMax(int[] array) { + int max = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] > max) { + max = array[i]; + } + } + return max; + } +} diff --git a/Maths/FindMin.java b/Maths/FindMin.java new file mode 100644 index 000000000000..2a13fe4b535a --- /dev/null +++ b/Maths/FindMin.java @@ -0,0 +1,26 @@ +package Maths; + +public class FindMin { + + //Driver + public static void main(String[] args) { + int[] array = {2, 4, 9, 7, 19, 94, 5}; + System.out.println("min = " + findMax(array)); + } + + /** + * find min of array + * + * @param array the array contains element + * @return min value + */ + public static int findMax(int[] array) { + int min = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] < min) { + min = array[i]; + } + } + return min; + } +} diff --git a/Maths/MaxValue.java b/Maths/MaxValue.java new file mode 100644 index 000000000000..b1b258685f10 --- /dev/null +++ b/Maths/MaxValue.java @@ -0,0 +1,24 @@ +package Maths; + +public class MaxValue { + + /** + * Returns the greater of two {@code int} values. That is, the + * result is the argument closer to the value of + * {@link Integer#MAX_VALUE}. If the arguments have the same value, + * the result is that same value. + * + * @param a an argument. + * @param b another argument. + * @return the larger of {@code a} and {@code b}. + */ + public static int max(int a, int b) { + return a >= b ? a : b; + } + + public static void main(String[] args) { + int a = 3; + int b = 4; + System.out.format("max:%d between %d and %d", max(a, b), a, b); + } +} diff --git a/Maths/MinValue.java b/Maths/MinValue.java new file mode 100644 index 000000000000..ef1d6a085362 --- /dev/null +++ b/Maths/MinValue.java @@ -0,0 +1,24 @@ +package Maths; + +public class MinValue { + + /** + * Returns the smaller of two {@code int} values. That is, + * the result the argument closer to the value of + * {@link Integer#MIN_VALUE}. If the arguments have the same + * value, the result is that same value. + * + * @param a an argument. + * @param b another argument. + * @return the smaller of {@code a} and {@code b}. + */ + public static int min(int a, int b) { + return a <= b ? a : b; + } + + public static void main(String[] args) { + int a = 3; + int b = 4; + System.out.format("min:%d between %d and %d", min(a, b), a, b); + } +} diff --git a/Maths/PrimeCheck.java b/Maths/PrimeCheck.java new file mode 100644 index 000000000000..8f32f6b64348 --- /dev/null +++ b/Maths/PrimeCheck.java @@ -0,0 +1,31 @@ +package Maths; + +import java.util.Scanner; + +public class PrimeCheck { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + System.out.println("Enter n:"); + int n = scanner.nextInt(); + if (isPrime(n)) { + System.out.println(n + "is prime number"); + } else { + System.out.println(n + "is not prime number"); + } + } + + /*** + * Check a number is prime or not + * @param n the number + * @return {@code true} if {@code n} is prime + */ + public static boolean isPrime(int n) { + for (int i = 3; i <= Math.sqrt(n); i += 2) { + if (n % i == 0) { + return false; + } + } + return true; + } +} From 5043f89df6132ccf106dab6f212ed8999b03bc09 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 28 Sep 2019 16:26:10 +0800 Subject: [PATCH 175/521] Find max and min value by recursion --- Maths/FindMaxRecursion.java | 32 ++++++++++++++++++++++++++++++++ Maths/FindMinRecursion.java | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 Maths/FindMaxRecursion.java create mode 100644 Maths/FindMinRecursion.java diff --git a/Maths/FindMaxRecursion.java b/Maths/FindMaxRecursion.java new file mode 100644 index 000000000000..3ebcaf392d95 --- /dev/null +++ b/Maths/FindMaxRecursion.java @@ -0,0 +1,32 @@ +package Maths; + +public class FindMaxRecursion { + public static void main(String[] args) { + int[] array = {2, 4, 9, 7, 19, 94, 5}; + int low = 0; + int high = array.length - 1; + + System.out.println("max value is " + max(array, low, high)); + } + + /** + * Get max of array using divide and conquer algorithm + * + * @param array contains elements + * @param low the index of the first element + * @param high the index of the last element + * @return max of {@code array} + */ + public static int max(int[] array, int low, int high) { + if (low == high) { + return array[low]; //or array[high] + } + + int mid = (low + high) >>> 1; + + int leftMax = max(array, low, mid); //get max in [low, mid] + int rightMax = max(array, mid + 1, high); //get max in [mid+1, high] + + return leftMax >= rightMax ? leftMax : rightMax; + } +} diff --git a/Maths/FindMinRecursion.java b/Maths/FindMinRecursion.java new file mode 100644 index 000000000000..292ffc30e83d --- /dev/null +++ b/Maths/FindMinRecursion.java @@ -0,0 +1,32 @@ +package Maths; + +public class FindMinRecursion { + public static void main(String[] args) { + int[] array = {2, 4, 9, 7, 19, 94, 5}; + int low = 0; + int high = array.length - 1; + + System.out.println("min value is " + min(array, low, high)); + } + + /** + * Get min of array using divide and conquer algorithm + * + * @param array contains elements + * @param low the index of the first element + * @param high the index of the last element + * @return min of {@code array} + */ + public static int min(int[] array, int low, int high) { + if (low == high) { + return array[low]; //or array[high] + } + + int mid = (low + high) >>> 1; + + int leftMin = min(array, low, mid); //get min in [low, mid] + int rightMin = min(array, mid + 1, high); //get min in [mid+1, high] + + return leftMin <= rightMin ? leftMin : rightMin; + } +} From cfc26a865ee0b9b772fe7df8e49ce4ca57f0ac0a Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Sat, 28 Sep 2019 20:54:35 +0800 Subject: [PATCH 176/521] Update Queues.java --- DataStructures/Queues/Queues.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/DataStructures/Queues/Queues.java b/DataStructures/Queues/Queues.java index 01b20b9a351f..f9bb42e4adc0 100644 --- a/DataStructures/Queues/Queues.java +++ b/DataStructures/Queues/Queues.java @@ -7,7 +7,6 @@ * The elements that are added first are the first to be removed. * New elements are added to the back/rear of the queue. * - * @author Unknown */ class Queue { /** @@ -53,7 +52,8 @@ public Queue(int size) { public boolean insert(int x) { if (isFull()) return false; - rear = (rear + 1) % maxSize; // If the back of the queue is the end of the array wrap around to the front + // If the back of the queue is the end of the array wrap around to the front + rear = (rear + 1) % maxSize; queueArray[rear] = x; nItems++; return true; @@ -64,9 +64,8 @@ public boolean insert(int x) { * * @return the new front of the queue */ - public int remove() { // Remove an element from the front of the queue + public int remove() { if (isEmpty()) { - System.out.println("Queue is empty"); return -1; } int temp = queueArray[front]; @@ -99,7 +98,7 @@ public int peekRear() { * @return true if the queue is empty */ public boolean isEmpty() { - return (nItems == 0); + return nItems == 0; } /** @@ -108,7 +107,7 @@ public boolean isEmpty() { * @return true if the queue is full */ public boolean isFull() { - return (nItems == maxSize); + return nItems == maxSize; } /** From 20cd57cf81239a3e8067610b4365a692ca5009c9 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 28 Sep 2019 22:29:47 +0800 Subject: [PATCH 177/521] init with DEFAULT_CAPACITY --- DataStructures/Queues/Queues.java | 12 ++++++++++++ DataStructures/Stacks/StackArray.java | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/DataStructures/Queues/Queues.java b/DataStructures/Queues/Queues.java index f9bb42e4adc0..d5b9a8e5c92a 100644 --- a/DataStructures/Queues/Queues.java +++ b/DataStructures/Queues/Queues.java @@ -9,6 +9,11 @@ * */ class Queue { + /** + * Default initial capacity. + */ + private static final int DEFAULT_CAPACITY = 10; + /** * Max size of the queue */ @@ -30,6 +35,13 @@ class Queue { */ private int nItems; + /** + * init with DEFAULT_CAPACITY + */ + public Queue() { + this(DEFAULT_CAPACITY); + } + /** * Constructor * diff --git a/DataStructures/Stacks/StackArray.java b/DataStructures/Stacks/StackArray.java index cc8596293c4b..88da42cd3dcb 100644 --- a/DataStructures/Stacks/StackArray.java +++ b/DataStructures/Stacks/StackArray.java @@ -34,6 +34,11 @@ public static void main(String[] args) { System.out.println(myStackArray.peek()); // will print 2 } + /** + * Default initial capacity. + */ + private static final int DEFAULT_CAPACITY = 10; + /** * The max size of the Stack */ @@ -49,6 +54,13 @@ public static void main(String[] args) { */ private int top; + /** + * init Stack with DEFAULT_CAPACITY + */ + public StackArray() { + this(DEFAULT_CAPACITY); + } + /** * Constructor * From 2f62929c1d82b19a8584baa4707941c4772d5eaa Mon Sep 17 00:00:00 2001 From: Lucas <0Zeta@protonmail.com> Date: Wed, 2 Oct 2019 00:37:25 +0200 Subject: [PATCH 178/521] Correct the prime check algorithm There are no prime numbers smaller than 2 and numbers greater than and divisible by 2 are not prime. --- Maths/PrimeCheck.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Maths/PrimeCheck.java b/Maths/PrimeCheck.java index 8f32f6b64348..cdfb44dc1fcc 100644 --- a/Maths/PrimeCheck.java +++ b/Maths/PrimeCheck.java @@ -21,6 +21,12 @@ public static void main(String[] args) { * @return {@code true} if {@code n} is prime */ public static boolean isPrime(int n) { + if (n == 2) { + return true; + } + if (n < 2 || n % 2 == 0) { + return false; + } for (int i = 3; i <= Math.sqrt(n); i += 2) { if (n % i == 0) { return false; From e3dfdf23ff9d9980eeccc68ce8f31d0a61768b41 Mon Sep 17 00:00:00 2001 From: Ayush Varshney <34279863+blast314@users.noreply.github.com> Date: Thu, 3 Oct 2019 18:14:08 -0400 Subject: [PATCH 179/521] The code was very verbose. Now it is simplified without sacrificing accuracy. --- Others/CountChar.java | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/Others/CountChar.java b/Others/CountChar.java index 217a3be238f8..ee83bce06a51 100644 --- a/Others/CountChar.java +++ b/Others/CountChar.java @@ -4,10 +4,9 @@ /** - * @author Kyler Smith, 2017 + * @author blast314 *

- * Implementation of a character count. - * (Slow, could be improved upon, effectively O(n). + * Counts the number of characters in the text. */ public class CountChar { @@ -24,21 +23,8 @@ public static void main(String[] args) { * @param str: String to count the characters * @return int: Number of characters in the passed string */ - private static int CountCharacters(String str) { - - int count = 0; - - if (str == "" || str == null) { - return 0; - } - - for (int i = 0; i < str.length(); i++) { - if (!Character.isWhitespace(str.charAt(i))) { - count++; - } - } - - return count; + str = str.replaceAll("\\s",""); + return str.length(); } } From 744657905fc25ecb9128f6bf8e63366db7fda030 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 5 Oct 2019 19:28:55 +0800 Subject: [PATCH 180/521] optimization --- Maths/PrimeCheck.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/PrimeCheck.java b/Maths/PrimeCheck.java index cdfb44dc1fcc..dc357dacd4a0 100644 --- a/Maths/PrimeCheck.java +++ b/Maths/PrimeCheck.java @@ -27,7 +27,7 @@ public static boolean isPrime(int n) { if (n < 2 || n % 2 == 0) { return false; } - for (int i = 3; i <= Math.sqrt(n); i += 2) { + for (int i = 3, limit = (int) Math.sqrt(n); i <= limit; i += 2) { if (n % i == 0) { return false; } From 5e7dad9483683223caa5f3b4c950b3e687ad6df2 Mon Sep 17 00:00:00 2001 From: Jas <12792882+Spikatrix@users.noreply.github.com> Date: Sun, 6 Oct 2019 14:52:05 +0530 Subject: [PATCH 181/521] Improved grammar and whitespace for prompts --- Maths/PrimeCheck.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Maths/PrimeCheck.java b/Maths/PrimeCheck.java index dc357dacd4a0..3093894a3a3f 100644 --- a/Maths/PrimeCheck.java +++ b/Maths/PrimeCheck.java @@ -6,17 +6,17 @@ public class PrimeCheck { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); - System.out.println("Enter n:"); + System.out.print("Enter a number: "); int n = scanner.nextInt(); if (isPrime(n)) { - System.out.println(n + "is prime number"); + System.out.println(n + " is a prime number"); } else { - System.out.println(n + "is not prime number"); + System.out.println(n + " is not a prime number"); } } /*** - * Check a number is prime or not + * Checks if a number is prime or not * @param n the number * @return {@code true} if {@code n} is prime */ From c51e2b68e7e06f1434f380447588d0250e767a1b Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 6 Oct 2019 20:39:09 +0800 Subject: [PATCH 182/521] update --- DataStructures/Lists/SinglyLinkedList.java | 79 +++++++++++++--------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index b4dae16f6049..8747aebb64dc 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -17,15 +17,35 @@ public class SinglyLinkedList { */ private Node head; + /** + * size of SinglyLinkedList + */ + private int size; + + /** + * init SinglyLinkedList + */ + public SinglyLinkedList() { + head = new Node(0); + size = 0; + } + /** * This method inserts an element at the head * * @param x Element to be added */ public void insertHead(int x) { - Node newNode = new Node(x); - newNode.next = head; - head = newNode; + insertNth(x, 0); + } + + /** + * insert an element at the tail of list + * + * @param data Element to be added + */ + public void insert(int data) { + insertNth(data, size); } /** @@ -37,17 +57,16 @@ public void insertHead(int x) { public void insertNth(int data, int position) { if (position < 0 || position > getSize()) { - throw new RuntimeException("position less than zero or position more than the count of list"); - } else if (position == 0) - insertHead(data); - else { + throw new IndexOutOfBoundsException("position less than zero or position more than the count of list"); + } else { Node cur = head; Node node = new Node(data); - for (int i = 1; i < position; ++i) { + for (int i = 0; i < position; ++i) { cur = cur.next; } node.next = cur.next; cur.next = node; + size++; } } @@ -57,29 +76,33 @@ public void insertNth(int data, int position) { * @return The element deleted */ public void deleteHead() { - if (isEmpty()) { - throw new RuntimeException("The list is empty!"); - } + deleteNth(0); + } - Node destroy = head; - head = head.next; - destroy = null; // clear to let GC do its work + /** + * This method deletes an element at the tail + */ + public void delete() { + deleteNth(size - 1); } /** * This method deletes an element at Nth position */ public void deleteNth(int position) { - if (position < 0 || position >= getSize()) { - throw new RuntimeException("position less than zero or position more than the count of list"); - } else if (position == 0) - deleteHead(); - else { + if (position < 0 || position > size - 1) { + throw new IndexOutOfBoundsException("position less than zero or position more than the count of list"); + } else { Node cur = head; - for (int i = 1; i < position; ++i) { + for (int i = 0; i < position; ++i) { cur = cur.next; } + + Node destroy = cur.next; cur.next = cur.next.next; + destroy = null; // clear to let GC do its work + + size--; } } @@ -89,14 +112,14 @@ public void deleteNth(int position) { * @return true is list is empty */ public boolean isEmpty() { - return getSize() == 0; + return size == 0; } /** * Prints contents of the list */ public void display() { - Node current = head; + Node current = head.next; while (current != null) { System.out.print(current.value + " "); current = current.next; @@ -108,17 +131,7 @@ public void display() { * Returns the size of the linked list */ public int getSize() { - if (head == null) - return 0; - else { - Node current = head; - int size = 1; - while (current.next != null) { - current = current.next; - size++; - } - return size; - } + return size; } /** From 0e7675a48e75c0539816615dd8d428a6b14a6012 Mon Sep 17 00:00:00 2001 From: shellhub Date: Mon, 7 Oct 2019 16:28:27 +0800 Subject: [PATCH 183/521] mergeSortedArrayList --- .../Lists/MergeSortedArrayList.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 DataStructures/Lists/MergeSortedArrayList.java diff --git a/DataStructures/Lists/MergeSortedArrayList.java b/DataStructures/Lists/MergeSortedArrayList.java new file mode 100644 index 000000000000..ea32e031f7dc --- /dev/null +++ b/DataStructures/Lists/MergeSortedArrayList.java @@ -0,0 +1,60 @@ +package DataStructures.Lists; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author https://github.com/shellhub + */ + +public class MergeSortedArrayList { + public static void main(String[] args) { + List listA = new ArrayList<>(); + List listB = new ArrayList<>(); + List listC = new ArrayList<>(); + + /* init ListA and List B */ + for (int i = 1; i <= 10; i += 2) { + listA.add(i); /* listA: [1, 3, 5, 7, 9] */ + listB.add(i + 1); /* listB: [2, 4, 6, 8, 10] */ + } + + /* merge listA and listB to listC */ + merge(listA, listB, listC); + + System.out.println("listA: " + listA); + System.out.println("listB: " + listB); + System.out.println("listC: " + listC); + } + + /** + * merge two sorted ArrayList + * + * @param listA the first list to merge + * @param listB the second list to merge + * @param listC the result list after merging + */ + public static void merge(List listA, List listB, List listC) { + int pa = 0; /* the index of listA */ + int pb = 0; /* the index of listB */ + + while (pa < listA.size() && pb < listB.size()) { + if (listA.get(pa) <= listB.get(pb)) { + listC.add(listA.get(pa++)); + } else { + listC.add(listB.get(pb++)); + } + } + + /* copy left element of listA to listC */ + while (pa < listA.size()) { + listC.add(listA.get(pa++)); + } + + /* copy left element of listB to listC */ + while (pb < listB.size()) { + listC.add(listB.get(pb++)); + } + } + +} From 257d81345e40ee195048deca6b069be01189065e Mon Sep 17 00:00:00 2001 From: Anup Kumar Panwar <1anuppanwar@gmail.com> Date: Mon, 7 Oct 2019 15:18:30 +0530 Subject: [PATCH 184/521] Updated Readme --- README.md | 190 +++--------------------------------------------------- 1 file changed, 8 insertions(+), 182 deletions(-) diff --git a/README.md b/README.md index 02f9bccb9f11..9a3b522073a2 100644 --- a/README.md +++ b/README.md @@ -11,192 +11,18 @@ You can play around (run and edit) the Algorithms or contribute to them using Gi ### All algorithms implemented in Java (for education) -These are for demonstration purposes only. There are many implementations of sorts in the Java standard library that are much better for performance reasons. +These implementations are for learning purposes. They may be less efficient than the implementations in the Java standard library. -## Sort Algorithms +## Contribution Guidelines +Read our [Contribution Guidelines](CONTRIBUTING.md) before you contribute. -### Bubble -![alt text][bubble-image] +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg?style=flat-square)](https://gitpod.io/#https://github.com/TheAlgorithms/java) -From [Wikipedia][bubble-wiki]: Bubble sort, sometimes referred to as sinking sort, is a simple sorting algorithm that repeatedly steps through the list to be sorted, compares each pair of adjacent items and swaps them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. +## Community Channel -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n) -* Average case performance O(n^2) +We're on [Gitter](https://gitter.im/TheAlgorithms)! Please join us. -##### View the algorithm in [action][bubble-toptal] +## Algorithms - - -### Insertion -![alt text][insertion-image] - -From [Wikipedia][insertion-wiki]: Insertion sort is a simple sorting algorithm that builds the final sorted array (or list) one item at a time. It is much less efficient on large lists than more advanced algorithms such as quicksort, heapsort, or merge sort. -In the figure, each bar represents an element of an array that needs to be sorted. What happens at the first intersection of the top most and second top most bars is to swap these elements, represented by bars, because the second element has a higher precedence than the first element does. By repeating this method, insertion sort completes sorting. - -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n) -* Average case performance O(n^2) - -##### View the algorithm in [action][insertion-toptal] - - -### Merge -![alt text][merge-image] - -From [Wikipedia][merge-wiki]: In computer science, merge sort (also commonly spelt mergesort) is an efficient, general-purpose, comparison-based sorting algorithm. Most implementations produce a stable sort, which means that the implementation preserves the input order of equal elements in the sorted output. Mergesort is a divide and conquer algorithm that was invented by John von Neumann in 1945. - -__Properties__ -* Worst case performance O(n log n) (typical) -* Best case performance O(n log n) -* Average case performance O(n log n) - - -##### View the algorithm in [action][merge-toptal] - -### Quick -![alt text][quick-image] - -From [Wikipedia][quick-wiki]: Quicksort (sometimes called partition-exchange sort) is an efficient sorting algorithm, serving as a systematic method for placing the elements of an array in order. - -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n log n) or O(n) with three-way partition -* Average case performance O(n log n) - -##### View the algorithm in [action][quick-toptal] - -### Selection -![alt text][selection-image] - -From [Wikipedia][selection-wiki]: The algorithm divides the input list into two parts: the sublist of items already sorted, which is built up from left to right at the front (left) of the list, and the sublist of items remaining to be sorted that occupy the rest of the list. Initially, the sorted sublist is empty and the unsorted sublist is the entire input list. The algorithm proceeds by finding the smallest (or largest, depending on sorting order) element in the unsorted sublist, exchanging (swapping) it with the leftmost unsorted element (putting it in sorted order), and moving the sublist boundaries one element to the right. - -__Properties__ -* Worst case performance O(n^2) -* Best case performance O(n^2) -* Average case performance O(n^2) - -##### View the algorithm in [action][selection-toptal] - -### Shell -![alt text][shell-image] - -From [Wikipedia][shell-wiki]: Shellsort is a generalization of insertion sort that allows the exchange of items that are far apart. The idea is to arrange the list of elements so that, starting anywhere, considering every nth element gives a sorted list. Such a list is said to be h-sorted. Equivalently, it can be thought of as h interleaved lists, each individually sorted. - -__Properties__ -* Worst case performance O(nlog2 2n) -* Best case performance O(n log n) -* Average case performance depends on gap sequence - -##### View the algorithm in [action][shell-toptal] - -### Time-Complexity Graphs - -Comparing the complexity of sorting algorithms (Bubble Sort, Insertion Sort, Selection Sort) - -[Complexity Graphs](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) - ----------------------------------------------------------------------------------- - -## Search Algorithms - -### Linear -![alt text][linear-image] - -From [Wikipedia][linear-wiki]: linear search or sequential search is a method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched. - The linear search runs in at the worst linear time and makes at most n comparisons, where n is the length of the list. - -__Properties__ -* Worst case performance O(n) -* Best case performance O(1) -* Average case performance O(n) -* Worst case space complexity O(1) iterative - -##### View the algorithm in [action][linear-tutorialspoint] - -### Binary -![alt text][binary-image] - -From [Wikipedia][binary-wiki]: Binary search, also known as half-interval search or logarithmic search, is a search algorithm that finds the position of a target value within a sorted array. It compares the target value to the middle element of the array; if they are unequal, the half in which the target cannot lie is eliminated and the search continues on the remaining half until it is successful. - -__Properties__ -* Worst case performance O(log n) -* Best case performance O(1) -* Average case performance O(log n) -* Worst case space complexity O(1) - -##### View the algorithm in [action][binary-tutorialspoint] - -[bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort -[bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort -[bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" - -[insertion-toptal]: https://www.toptal.com/developers/sorting-algorithms/insertion-sort -[insertion-wiki]: https://en.wikipedia.org/wiki/Insertion_sort -[insertion-image]: https://upload.wikimedia.org/wikipedia/commons/7/7e/Insertionsort-edited.png "Insertion Sort" - -[quick-toptal]: https://www.toptal.com/developers/sorting-algorithms/quick-sort -[quick-wiki]: https://en.wikipedia.org/wiki/Quicksort -[quick-image]: https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif "Quick Sort" - -[merge-toptal]: https://www.toptal.com/developers/sorting-algorithms/merge-sort -[merge-wiki]: https://en.wikipedia.org/wiki/Merge_sort -[merge-image]: https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif "Merge Sort" - -[selection-toptal]: https://www.toptal.com/developers/sorting-algorithms/selection-sort -[selection-wiki]: https://en.wikipedia.org/wiki/Selection_sort -[selection-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/250px-Selection_sort_animation.gif "Selection Sort Sort" - -[shell-toptal]: https://www.toptal.com/developers/sorting-algorithms/shell-sort -[shell-wiki]: https://en.wikipedia.org/wiki/Shellsort -[shell-image]: https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif "Shell Sort" - -[linear-wiki]: https://en.wikipedia.org/wiki/Linear_search -[linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif -[linear-tutorialspoint]: https://www.tutorialspoint.com/data_structures_algorithms/linear_search_algorithm.htm - -[binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm -[binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png -[binary-tutorialspoint]: https://www.tutorialspoint.com/data_structures_algorithms/binary_search_algorithm.htm - - --------------------------------------------------------------------- -## Links to the rest of the algorithms - -Conversions | Dynamic Programming |Ciphers|Miscellaneous| ------------ |----------------------------------------------------------------|-------|-------------| -[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](DynamicProgramming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](Misc/heap_sort.java)| -[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](DynamicProgramming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](Misc/PalindromePrime.java)| -[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](DynamicProgramming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| -[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](DynamicProgramming/KadaneAlgorithm.java)|more coming soon...| -[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](DynamicProgramming/Knapsack.java)| -[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](DynamicProgramming/LongestCommonSubsequence.java)| -[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](DynamicProgramming/LongestIncreasingSubsequence.java)| -[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](DynamicProgramming/RodCutting.java)| -and much more...| and more...| - -### Data Structures -Graphs|Heaps|Lists|Queues| -------|-----|-----|------| -[BFS](DataStructures/Graphs/BFS.java)|[Empty Heap Exception](DataStructures/Heaps/EmptyHeapException.java)|[Circle Linked List](DataStructures/Lists/CircleLinkedList.java)|[Generic Array List Queue](DataStructures/Queues/GenericArrayListQueue.java)| -[DFS](DataStructures/Graphs/DFS.java)|[Heap](DataStructures/Heaps/Heap.java)|[Doubly Linked List](DataStructures/Lists/DoublyLinkedList.java)|[Queues](DataStructures/Queues/Queues.java)| -[Graphs](DataStructures/Graphs/Graphs.java)|[Heap Element](DataStructures/Heaps/HeapElement.java)|[Singly Linked List](DataStructures/Lists/SinglyLinkedList.java)| -[Kruskals Algorithm](DataStructures/Graphs/KruskalsAlgorithm.java)|[Max Heap](DataStructures/Heaps/MaxHeap.java)| -[CursorLinkedList](DataStructures/Lists/CursorLinkedList.java)| -[Matrix Graphs](DataStructures/Graphs/MatrixGraphs.java)|[Min Heap](DataStructures/Heaps/MinHeap.java)| -[PrimMST](DataStructures/Graphs/PrimMST.java)| - -Stacks|Trees| -------|-----| -[Node Stack](DataStructures/Stacks/NodeStack.java)|[AVL Tree](DataStructures/Trees/AVLTree.java)| -[Stack of Linked List](DataStructures/Stacks/StackOfLinkedList.java)|[Binary Tree](DataStructures/Trees/BinaryTree.java)| -[Array Stack](DataStructures/Stacks/StackArray.java)|And much more...| -[ArrayList Stack](DataStructures/Stacks/StackArrayList.java)|| - -* [Bags](DataStructures/Bags/Bag.java) -* [Buffer](DataStructures/Buffers/CircularBuffer.java) -* [HashMap](DataStructures/HashMap/Hashing/HashMap.java) -* [Matrix](DataStructures/Matrix/Matrix.java) +See our [directory](DIRECTORY.md). From c68f4ca860387ee3c7683ba4b731c16fb09f3834 Mon Sep 17 00:00:00 2001 From: shellhub Date: Mon, 7 Oct 2019 19:49:06 +0800 Subject: [PATCH 185/521] AbsoluteMax and AbsoluteMin --- Maths/AbsoluteMax.java | 32 ++++++++++++++++++++++++++++++++ Maths/AbsoluteMin.java | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 Maths/AbsoluteMax.java create mode 100644 Maths/AbsoluteMin.java diff --git a/Maths/AbsoluteMax.java b/Maths/AbsoluteMax.java new file mode 100644 index 000000000000..18634bc3582f --- /dev/null +++ b/Maths/AbsoluteMax.java @@ -0,0 +1,32 @@ +package Maths; + +import java.util.Arrays; + +/** + * description: + *

+ * absMax([0, 5, 1, 11]) = 11, absMax([3 , -10, -2]) = -10 + *

+ */ +public class AbsoluteMax { + public static void main(String[] args) { + int[] numbers = new int[]{3, -10, -2}; + System.out.println("absMax(" + Arrays.toString(numbers) + ") = " + absMax(numbers)); + } + + /** + * get the value, it's absolute value is max + * + * @param numbers contains elements + * @return the absolute max value + */ + public static int absMax(int[] numbers) { + int absMaxValue = numbers[0]; + for (int i = 1, length = numbers.length; i < length; ++i) { + if (Math.abs(numbers[i]) > Math.abs(absMaxValue)) { + absMaxValue = numbers[i]; + } + } + return absMaxValue; + } +} diff --git a/Maths/AbsoluteMin.java b/Maths/AbsoluteMin.java new file mode 100644 index 000000000000..4af43c5c08ac --- /dev/null +++ b/Maths/AbsoluteMin.java @@ -0,0 +1,32 @@ +package Maths; + +import java.util.Arrays; + +/** + * description: + *

+ * absMin([0, 5, 1, 11]) = 0, absMin([3 , -10, -2]) = -2 + *

+ */ +public class AbsoluteMin { + public static void main(String[] args) { + int[] numbers = new int[]{3, -10, -2}; + System.out.println("absMin(" + Arrays.toString(numbers) + ") = " + absMin(numbers)); + } + + /** + * get the value, it's absolute value is min + * + * @param numbers contains elements + * @return the absolute min value + */ + public static int absMin(int[] numbers) { + int absMinValue = numbers[0]; + for (int i = 1, length = numbers.length; i < length; ++i) { + if (Math.abs(numbers[i]) < Math.abs(absMinValue)) { + absMinValue = numbers[i]; + } + } + return absMinValue; + } +} From 7eea1d6decf9269128b649273dad3a61ccf852e0 Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Tue, 8 Oct 2019 09:09:20 +0800 Subject: [PATCH 186/521] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 9a3b522073a2..d0dd123e4d4e 100644 --- a/README.md +++ b/README.md @@ -10,19 +10,13 @@ You can play around (run and edit) the Algorithms or contribute to them using Gi ### All algorithms implemented in Java (for education) - These implementations are for learning purposes. They may be less efficient than the implementations in the Java standard library. ## Contribution Guidelines - Read our [Contribution Guidelines](CONTRIBUTING.md) before you contribute. -[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg?style=flat-square)](https://gitpod.io/#https://github.com/TheAlgorithms/java) - ## Community Channel - We're on [Gitter](https://gitter.im/TheAlgorithms)! Please join us. ## Algorithms - See our [directory](DIRECTORY.md). From 856dd0644dfb112ead0aa8c162eedebe331086c5 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 8 Oct 2019 12:37:17 +0800 Subject: [PATCH 187/521] update gcd --- {Others => Maths}/GCD.java | 35 +++++++++++++++++++++++++---------- Maths/GCDRecursion.java | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 10 deletions(-) rename {Others => Maths}/GCD.java (55%) create mode 100644 Maths/GCDRecursion.java diff --git a/Others/GCD.java b/Maths/GCD.java similarity index 55% rename from Others/GCD.java rename to Maths/GCD.java index bba2ccf88706..fb9aeb21ee1b 100644 --- a/Others/GCD.java +++ b/Maths/GCD.java @@ -1,4 +1,4 @@ -package Others; +package Maths; /** * This is Euclid's algorithm which is used to find the greatest common denominator @@ -8,21 +8,36 @@ */ public class GCD { + /** + * get greatest common divisor + * + * @param num1 the first number + * @param num2 the second number + * @return gcd + */ public static int gcd(int num1, int num2) { + if (num1 < 0 || num2 < 0) { + throw new ArithmeticException(); + } - if (num1 == 0) - return num2; - - while (num2 != 0) { - if (num1 > num2) - num1 -= num2; - else - num2 -= num1; + if (num1 == 0 || num2 == 0) { + return Math.abs(num1 - num2); } - return num1; + while (num1 % num2 != 0) { + int remainder = num1 % num2; + num1 = num2; + num2 = remainder; + } + return num2; } + /** + * get greatest common divisor in array + * + * @param number contains number + * @return gcd + */ public static int gcd(int[] number) { int result = number[0]; for (int i = 1; i < number.length; i++) diff --git a/Maths/GCDRecursion.java b/Maths/GCDRecursion.java new file mode 100644 index 000000000000..be5e2904733e --- /dev/null +++ b/Maths/GCDRecursion.java @@ -0,0 +1,36 @@ +package Maths; + +/** + * @author https://github.com/shellhub/ + */ +public class GCDRecursion { + public static void main(String[] args) { + System.out.println(gcd(20, 15)); /* output: 5 */ + System.out.println(gcd(10, 8)); /* output: 2 */ + System.out.println(gcd(gcd(10, 5), gcd(5, 10))); /* output: 5 */ + } + + /** + * get greatest common divisor + * + * @param a the first number + * @param b the second number + * @return gcd + */ + public static int gcd(int a, int b) { + + if (a < 0 || b < 0) { + throw new ArithmeticException(); + } + + if (a == 0 || b == 0) { + return Math.abs(a - b); + } + + if (a % b == 0) { + return b; + } else { + return gcd(b, a % b); + } + } +} From c698b43a6b623059d7d7afcd1f7378a96630d8dc Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 8 Oct 2019 22:41:49 +0800 Subject: [PATCH 188/521] toString --- DataStructures/Queues/Queues.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/DataStructures/Queues/Queues.java b/DataStructures/Queues/Queues.java index d5b9a8e5c92a..5db41be405b5 100644 --- a/DataStructures/Queues/Queues.java +++ b/DataStructures/Queues/Queues.java @@ -130,6 +130,20 @@ public boolean isFull() { public int getSize() { return nItems; } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("["); + for (int i = front; ; i = ++i % maxSize) { + sb.append(queueArray[i]).append(", "); + if (i == rear) { + break; + } + } + sb.replace(sb.length() - 2, sb.length(), "]"); + return sb.toString(); + } } /** @@ -161,5 +175,6 @@ public static void main(String args[]) { System.out.println(myQueue.peekFront()); // Will print 2 System.out.println(myQueue.peekRear()); // Will print 7 + System.out.println(myQueue.toString()); // Will print [2, 5, 3, 7] } } From ccea4b56e35754a7a1a04989bb8413d45f71029f Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 9 Oct 2019 11:24:35 +0800 Subject: [PATCH 189/521] optimization and fix bug --- DataStructures/Lists/CircleLinkedList.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/DataStructures/Lists/CircleLinkedList.java b/DataStructures/Lists/CircleLinkedList.java index 8863b7349ca2..67235172dfb7 100644 --- a/DataStructures/Lists/CircleLinkedList.java +++ b/DataStructures/Lists/CircleLinkedList.java @@ -44,22 +44,20 @@ public E remove(int pos) { //catching errors throw new IndexOutOfBoundsException("position cannot be greater than size or negative"); } - Node iterator = head.next; //we need to keep track of the element before the element we want to remove we can see why bellow. Node before = head; for (int i = 1; i <= pos; i++) { - iterator = iterator.next; before = before.next; } - E saved = iterator.value; + Node destroy = before.next; + E saved = destroy.value; // assigning the next reference to the the element following the element we want to remove... the last element will be assigned to the head. - before.next = iterator.next; + before.next = before.next.next; // scrubbing - iterator.next = null; - iterator.value = null; + destroy = null; + size--; return saved; } } - From 5b185e81918c4ec8a88fe7ed48c4812eff6cecdd Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Thu, 10 Oct 2019 14:06:38 +0800 Subject: [PATCH 190/521] Update Queues.java --- DataStructures/Queues/Queues.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Queues/Queues.java b/DataStructures/Queues/Queues.java index 5db41be405b5..2f820d70cf71 100644 --- a/DataStructures/Queues/Queues.java +++ b/DataStructures/Queues/Queues.java @@ -157,7 +157,7 @@ public class Queues { * * @param args Command line arguments */ - public static void main(String args[]) { + public static void main(String[] args) { Queue myQueue = new Queue(4); myQueue.insert(10); myQueue.insert(2); From b0f81f1bc99c5affcf73000d72430653d2d6d1ac Mon Sep 17 00:00:00 2001 From: Matheus Muriel Date: Thu, 10 Oct 2019 16:20:35 +0000 Subject: [PATCH 191/521] Correction of iteration limit of fibOptimized --- DynamicProgramming/Fibonacci.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/Fibonacci.java b/DynamicProgramming/Fibonacci.java index 35af98add478..6b362f0da2b9 100644 --- a/DynamicProgramming/Fibonacci.java +++ b/DynamicProgramming/Fibonacci.java @@ -88,7 +88,7 @@ private static int fibOptimized(int n) { return 0; } int prev = 0, res = 1, next; - for (int i = 2; i < n; i++) { + for (int i = 2; i <= n; i++) { next = prev + res; prev = res; res = next; From 58eb2ec581fe03afdbf27d480cbe6a4bcc2e364f Mon Sep 17 00:00:00 2001 From: shellhub Date: Fri, 11 Oct 2019 16:17:38 +0800 Subject: [PATCH 192/521] PalindromeNumber --- Maths/PalindromeNumber.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Maths/PalindromeNumber.java diff --git a/Maths/PalindromeNumber.java b/Maths/PalindromeNumber.java new file mode 100644 index 000000000000..2916c753e67a --- /dev/null +++ b/Maths/PalindromeNumber.java @@ -0,0 +1,30 @@ +package Maths; + +public class PalindromeNumber { + public static void main(String[] args) { + + assert isPalindrome(12321); + assert !isPalindrome(1234); + assert isPalindrome(1); + } + + /** + * Check if {@code n} is palindrome number or not + * + * @param number the number + * @return {@code true} if {@code n} is palindrome number, otherwise {@code false} + */ + public static boolean isPalindrome(int number) { + if (number < 0) { + throw new IllegalArgumentException(number + ""); + } + int numberCopy = number; + int reverseNumber = 0; + while (numberCopy != 0) { + int remainder = numberCopy % 10; + reverseNumber = reverseNumber * 10 + remainder; + numberCopy /= 10; + } + return number == reverseNumber; + } +} From 58b9f0bb0cf4827eec13ca2129f8936497edc7e3 Mon Sep 17 00:00:00 2001 From: shellhub Date: Fri, 11 Oct 2019 16:44:33 +0800 Subject: [PATCH 193/521] perfect number --- Maths/PerfectNumber.java | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Maths/PerfectNumber.java diff --git a/Maths/PerfectNumber.java b/Maths/PerfectNumber.java new file mode 100644 index 000000000000..ceaf0b2bca3e --- /dev/null +++ b/Maths/PerfectNumber.java @@ -0,0 +1,33 @@ +package Maths; + +/** + * In number theory, a perfect number is a positive integer that is equal to the sum of + * its positive divisors, excluding the number itself. For instance, 6 has divisors 1, 2 and 3 + * (excluding itself), and 1 + 2 + 3 = 6, so 6 is a perfect number. + *

+ * link:https://en.wikipedia.org/wiki/Perfect_number + *

+ */ +public class PerfectNumber { + public static void main(String[] args) { + assert isPerfectNumber(6); /* 1 + 2 + 3 == 6 */ + assert !isPerfectNumber(8); /* 1 + 2 + 4 != 8 */ + assert isPerfectNumber(28); /* 1 + 2 + 4 + 7 + 14 == 28 */ + } + + /** + * Check if {@code number} is perfect number or not + * + * @param number the number + * @return {@code true} if {@code number} is perfect number, otherwise false + */ + public static boolean isPerfectNumber(int number) { + int sum = 0; /* sum of its positive divisors */ + for (int i = 1; i < number; ++i) { + if (number % i == 0) { + sum += i; + } + } + return sum == number; + } +} From 51f36068a1cbf868d57e528ea6c447602343cb51 Mon Sep 17 00:00:00 2001 From: salonilakhotia Date: Sat, 12 Oct 2019 10:14:25 +0530 Subject: [PATCH 194/521] Result print --- DynamicProgramming/RodCutting.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DynamicProgramming/RodCutting.java b/DynamicProgramming/RodCutting.java index d57c69ce9ae4..0913dfd80b1f 100644 --- a/DynamicProgramming/RodCutting.java +++ b/DynamicProgramming/RodCutting.java @@ -26,7 +26,8 @@ private static int cutRod(int[] price, int n) { public static void main(String args[]) { int[] arr = new int[]{2, 5, 13, 19, 20}; int size = arr.length; + int result = cutRod(arr,size); System.out.println("Maximum Obtainable Value is " + - cutRod(arr, size)); + result); } } From f5752234b45bcce2ce713d2d213c1fb59013b2fb Mon Sep 17 00:00:00 2001 From: salonilakhotia Date: Sat, 12 Oct 2019 10:25:40 +0530 Subject: [PATCH 195/521] Size --- DynamicProgramming/Fibonacci.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DynamicProgramming/Fibonacci.java b/DynamicProgramming/Fibonacci.java index 35af98add478..d1a619f71481 100644 --- a/DynamicProgramming/Fibonacci.java +++ b/DynamicProgramming/Fibonacci.java @@ -16,11 +16,11 @@ public class Fibonacci { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - int n = Integer.parseInt(br.readLine()); + int size = Integer.parseInt(br.readLine()); // Methods all returning [0, 1, 1, 2, 3, 5, ...] for n = [0, 1, 2, 3, 4, 5, ...] - System.out.println(fibMemo(n)); - System.out.println(fibBotUp(n)); + System.out.println(fibMemo(size)); + System.out.println(fibBotUp(size)); } /** From 8ae6b4e64b587081dc4c14ddba2203d54c444ccf Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 12 Oct 2019 20:48:38 +0800 Subject: [PATCH 196/521] update BalancedBrackets --- DataStructures/Stacks/BalancedBrackets.java | 96 ++++++++++----------- 1 file changed, 46 insertions(+), 50 deletions(-) diff --git a/DataStructures/Stacks/BalancedBrackets.java b/DataStructures/Stacks/BalancedBrackets.java index 8063c5105816..ea342219cffa 100644 --- a/DataStructures/Stacks/BalancedBrackets.java +++ b/DataStructures/Stacks/BalancedBrackets.java @@ -1,10 +1,8 @@ -package data_structures.Stacks; +package DataStructures.Stacks; -import java.util.Scanner; import java.util.Stack; /** - * * The nested brackets problem is a problem that determines if a sequence of * brackets are properly nested. A sequence of brackets s is considered properly * nested if any of the following conditions are true: - s is empty - s has the @@ -15,71 +13,69 @@ * returns true if S is nested and false otherwise. * * @author akshay sharma - * @date: 2017-10-17 * @author
khalil2535 - * + * @author shellhub */ class BalancedBrackets { /** + * Check if {@code leftBracket} and {@code rightBracket} is paired or not + * + * @param leftBracket left bracket + * @param rightBracket right bracket + * @return {@code true} if {@code leftBracket} and {@code rightBracket} is paired, + * otherwise {@code false} + */ + public static boolean isPaired(char leftBracket, char rightBracket) { + char[][] pairedBrackets = { + {'(', ')'}, + {'[', ']'}, + {'{', '}'}, + {'<', '>'} + }; + for (char[] pairedBracket : pairedBrackets) { + if (pairedBracket[0] == leftBracket && pairedBracket[1] == rightBracket) { + return true; + } + } + return false; + } + + /** + * Check if {@code brackets} is balanced * - * @param s - * @return + * @param brackets the brackets + * @return {@code true} if {@code brackets} is balanced, otherwise {@code false} */ - static boolean is_balanced(String s) { + public static boolean isBalanced(String brackets) { + if (brackets == null) { + throw new IllegalArgumentException("brackets is null"); + } Stack bracketsStack = new Stack<>(); - char[] text = s.toCharArray(); - for (char x : text) { - switch (x) { - case '{': - case '<': + for (char bracket : brackets.toCharArray()) { + switch (bracket) { case '(': case '[': - bracketsStack.push(x); + case '{': + bracketsStack.push(bracket); break; - case '}': - if (!bracketsStack.empty() && bracketsStack.pop() == '{') { - break; - } else { - return false; - } - case '>': - if (!bracketsStack.empty() && bracketsStack.pop() == '<') { - break; - } else { - return false; - } case ')': - if (!bracketsStack.empty() && bracketsStack.pop() == '(') { - break; - } else { - return false; - } case ']': - if (!bracketsStack.empty() && bracketsStack.pop() == '[') { - break; - } else { + case '}': + if (!(!bracketsStack.isEmpty() && isPaired(bracketsStack.pop(), bracket))) { return false; } + break; + default: /* other character is invalid */ + return false; } } - return bracketsStack.empty(); + return bracketsStack.isEmpty(); } - /** - * - * @param args - * @TODO remove main method and Test using JUnit or other methodology - */ - public static void main(String args[]) { - try (Scanner in = new Scanner(System.in)) { - System.out.println("Enter sequence of brackets: "); - String s = in.nextLine(); - if (is_balanced(s)) { - System.out.println(s + " is balanced"); - } else { - System.out.println(s + " ain't balanced"); - } - } + + public static void main(String[] args) { + assert isBalanced("[()]{}{[()()]()}"); + assert !isBalanced("[(])"); } } From 14d67ffdf45745b69a05dd6cc356038e3df1745e Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 15 Oct 2019 22:18:12 +0800 Subject: [PATCH 197/521] clear list --- DataStructures/Lists/SinglyLinkedList.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 8747aebb64dc..1b442e5239ad 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -106,6 +106,25 @@ public void deleteNth(int position) { } } + /** + * clear all nodes in list + */ + public void clear() { + if (size == 0) { + return; + } + Node prev = head.next; + Node cur = prev.next; + while (cur != null) { + prev = null; // clear to let GC do its work + prev = cur; + cur = cur.next; + } + prev = null; + head.next = null; + size = 0; + } + /** * Checks if the list is empty * From a5997e8d7b8aa7a39802bcea0e783540a7ac747a Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 16 Oct 2019 22:27:07 +0800 Subject: [PATCH 198/521] update SinglyLinkedList --- DataStructures/Lists/SinglyLinkedList.java | 94 ++++++++++++---------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 1b442e5239ad..a478d7a5fddb 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -54,20 +54,16 @@ public void insert(int data) { * @param data data to be stored in a new node * @param position position at which a new node is to be inserted */ - public void insertNth(int data, int position) { - if (position < 0 || position > getSize()) { - throw new IndexOutOfBoundsException("position less than zero or position more than the count of list"); - } else { - Node cur = head; - Node node = new Node(data); - for (int i = 0; i < position; ++i) { - cur = cur.next; - } - node.next = cur.next; - cur.next = node; - size++; + checkBounds(position, 0, size); + Node cur = head; + for (int i = 0; i < position; ++i) { + cur = cur.next; } + Node node = new Node(data); + node.next = cur.next; + cur.next = node; + size++; } /** @@ -90,19 +86,28 @@ public void delete() { * This method deletes an element at Nth position */ public void deleteNth(int position) { - if (position < 0 || position > size - 1) { - throw new IndexOutOfBoundsException("position less than zero or position more than the count of list"); - } else { - Node cur = head; - for (int i = 0; i < position; ++i) { - cur = cur.next; - } - - Node destroy = cur.next; - cur.next = cur.next.next; - destroy = null; // clear to let GC do its work - - size--; + checkBounds(position, 0, size - 1); + Node cur = head; + for (int i = 0; i < position; ++i) { + cur = cur.next; + } + + Node destroy = cur.next; + cur.next = cur.next.next; + destroy = null; // clear to let GC do its work + + size--; + } + + /** + * @param position to check position + * @param low low index + * @param high high index + * @throws IndexOutOfBoundsException if {@code position} not in range {@code low} to {@code high} + */ + public void checkBounds(int position, int low, int high) { + if (position < low || position > high) { + throw new IndexOutOfBoundsException(position + ""); } } @@ -134,18 +139,6 @@ public boolean isEmpty() { return size == 0; } - /** - * Prints contents of the list - */ - public void display() { - Node current = head.next; - while (current != null) { - System.out.print(current.value + " "); - current = current.next; - } - System.out.println(); - } - /** * Returns the size of the linked list */ @@ -153,6 +146,20 @@ public int getSize() { return size; } + @Override + public String toString() { + if (size == 0) { + return ""; + } + StringBuilder builder = new StringBuilder(); + Node cur = head.next; + while (cur != null) { + builder.append(cur.value).append("->"); + cur = cur.next; + } + return builder.replace(builder.length() - 2, builder.length(), "").toString(); + } + /** * Main method * @@ -167,19 +174,24 @@ public static void main(String args[]) { myList.insertHead(7); myList.insertHead(10); - myList.display(); // 10 -> 7 -> 5 + System.out.println(myList);; // 10 -> 7 -> 5 myList.deleteHead(); - myList.display(); // 7 -> 5 + System.out.println(myList);; // 7 -> 5 myList.insertNth(11, 2); - myList.display(); // 7 -> 5 -> 11 + System.out.println(myList);; // 7 -> 5 -> 11 myList.deleteNth(1); - myList.display(); // 7-> 11 + System.out.println(myList);; // 7-> 11 + + myList.clear(); + assert myList.isEmpty(); + + System.out.println(myList); // "" } } From bb9e082aa9118460a501525d80206bcb09e04dbb Mon Sep 17 00:00:00 2001 From: shellhub Date: Fri, 18 Oct 2019 17:39:32 +0800 Subject: [PATCH 199/521] update StackOfLinkedList --- DataStructures/Stacks/StackOfLinkedList.java | 118 ++++++++++++------- 1 file changed, 74 insertions(+), 44 deletions(-) diff --git a/DataStructures/Stacks/StackOfLinkedList.java b/DataStructures/Stacks/StackOfLinkedList.java index 093442112df5..5a2b8fa08258 100644 --- a/DataStructures/Stacks/StackOfLinkedList.java +++ b/DataStructures/Stacks/StackOfLinkedList.java @@ -17,12 +17,12 @@ public static void main(String[] args) { stack.push(4); stack.push(5); - stack.printStack(); + System.out.println(stack); System.out.println("Size of stack currently is: " + stack.getSize()); - stack.pop(); - stack.pop(); + assert stack.pop() == 5; + assert stack.pop() == 4; System.out.println("Top element of stack currently is: " + stack.peek()); } @@ -48,65 +48,95 @@ public Node(int data) { class LinkedListStack { - Node head = null; + /** + * Top of stack + */ + Node head; + + /** + * Size of stack + */ + private int size; + + /** + * Init properties + */ + public LinkedListStack() { + head = null; + size = 0; + } - public void push(int x) { - Node n = new Node(x); - if (head == null) { - head = n; - } else { - Node temp = head; - n.next = temp; - head = n; - } + /** + * Add element at top + * + * @param x to be added + * @return true if add successfully + */ + public boolean push(int x) { + Node newNode = new Node(x); + newNode.next = head; + head = newNode; + size++; + return true; } - public void pop() { - if (head == null) { - System.out.println("Empty stack. Nothing to pop"); + /** + * Pop element at top of stack + * + * @return element at top of stack + * @throws NoSuchElementException if stack is empty + */ + public int pop() { + if (size == 0) { + throw new NoSuchElementException("Empty stack. Nothing to pop"); } - - Node temp = head; + Node destroy = head; head = head.next; - System.out.println("Popped element is: " + temp.data); + int retValue = destroy.data; + destroy = null; // clear to let GC do it's work + size--; + return retValue; } + /** + * Peek element at top of stack + * + * @return element at top of stack + * @throws NoSuchElementException if stack is empty + */ public int peek() { - if (head == null) { - return -1; + if (size == 0) { + throw new NoSuchElementException("Empty stack. Nothing to pop"); } return head.data; } - public void printStack() { - Node temp = head; - System.out.println("Stack is printed as below: "); - while (temp != null) { - if (temp.next == null) { - System.out.print(temp.data); - } else { - System.out.print(temp.data + " -> "); - } - temp = temp.next; + @Override + public String toString() { + Node cur = head; + StringBuilder builder = new StringBuilder(); + while (cur != null) { + builder.append(cur.data).append("->"); + cur = cur.next; } - System.out.println(); + return builder.replace(builder.length() - 2, builder.length(), "").toString(); } + /** + * Check if stack is empty + * + * @return true if stack is empty, otherwise false + */ public boolean isEmpty() { - return head == null; + return size == 0; } + /** + * Return size of stack + * + * @return size of stack + */ public int getSize() { - if (head == null) - return 0; - else { - int size = 1; - Node temp = head; - while (temp.next != null) { - temp = temp.next; - size++; - } - return size; - } + return size; } } From ffb3195b38132c7e87c6e53339b396af06d3dbbc Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 19 Oct 2019 22:51:59 +0800 Subject: [PATCH 200/521] DecimalToAnyUsingStack --- .../Stacks/DecimalToAnyUsingStack.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 DataStructures/Stacks/DecimalToAnyUsingStack.java diff --git a/DataStructures/Stacks/DecimalToAnyUsingStack.java b/DataStructures/Stacks/DecimalToAnyUsingStack.java new file mode 100644 index 000000000000..6e129c32c6d9 --- /dev/null +++ b/DataStructures/Stacks/DecimalToAnyUsingStack.java @@ -0,0 +1,44 @@ +package DataStructures.Stacks; + +import java.util.Stack; + +public class DecimalToAnyUsingStack { + public static void main(String[] args) { + assert convert(0, 2).equals("0"); + assert convert(30, 2).equals("11110"); + assert convert(30, 8).equals("36"); + assert convert(30, 10).equals("30"); + assert convert(30, 16).equals("1E"); + } + + /** + * Convert decimal number to another radix + * + * @param number the number to be converted + * @param radix the radix + * @return another radix + * @throws ArithmeticException if number or radius is invalid + */ + private static String convert(int number, int radix) { + if (radix < 2 || radix > 16) { + throw new ArithmeticException( + String.format("Invalid input -> number:%d,radius:%d", number, radix)); + } + char[] tables = { + '0', '1', '2', '3', '4', + '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F' + }; + Stack bits = new Stack<>(); + do { + bits.push(tables[number % radix]); + number = number / radix; + } while (number != 0); + + StringBuilder result = new StringBuilder(); + while (!bits.isEmpty()) { + result.append(bits.pop()); + } + return result.toString(); + } +} From f1ad7a1bbfe1be870d1b8e2d6eaf28297369543a Mon Sep 17 00:00:00 2001 From: shellhub Date: Mon, 21 Oct 2019 21:57:10 +0800 Subject: [PATCH 201/521] parseInteger --- Maths/ParseInteger.java | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Maths/ParseInteger.java diff --git a/Maths/ParseInteger.java b/Maths/ParseInteger.java new file mode 100644 index 000000000000..91177bb49dd6 --- /dev/null +++ b/Maths/ParseInteger.java @@ -0,0 +1,33 @@ +package Maths; + +public class ParseInteger { + public static void main(String[] args) { + assert parseInt("123") == Integer.parseInt("123"); + assert parseInt("-123") == Integer.parseInt("-123"); + assert parseInt("0123") == Integer.parseInt("0123"); + assert parseInt("+123") == Integer.parseInt("+123"); + } + + /** + * Parse a string to integer + * + * @param s the string + * @return the integer value represented by the argument in decimal. + * @throws NumberFormatException if the {@code string} does not contain a parsable integer. + */ + public static int parseInt(String s) { + if (s == null) { + throw new NumberFormatException("null"); + } + boolean isNegative = s.charAt(0) == '-'; + boolean isPositive = s.charAt(0) == '+'; + int number = 0; + for (int i = isNegative ? 1 : isPositive ? 1 : 0, length = s.length(); i < length; ++i) { + if (!Character.isDigit(s.charAt(i))) { + throw new NumberFormatException("s=" + s); + } + number = number * 10 + s.charAt(i) - '0'; + } + return isNegative ? -number : number; + } +} From c63dbad401640a043991cb8c445b3635855f7c90 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 22 Oct 2019 21:53:13 +0800 Subject: [PATCH 202/521] LinkedQueue --- DataStructures/Queues/LinkedQueue.java | 154 +++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 DataStructures/Queues/LinkedQueue.java diff --git a/DataStructures/Queues/LinkedQueue.java b/DataStructures/Queues/LinkedQueue.java new file mode 100644 index 000000000000..540a24656056 --- /dev/null +++ b/DataStructures/Queues/LinkedQueue.java @@ -0,0 +1,154 @@ +package DataStructures; + +import java.util.NoSuchElementException; + +public class LinkedQueue { + class Node { + int data; + Node next; + + public Node() { + this(0); + } + + public Node(int data) { + this(data, null); + } + + public Node(int data, Node next) { + this.data = data; + this.next = next; + } + } + + /** + * Front of Queue + */ + private Node front; + + /** + * Rear of Queue + */ + private Node rear; + + /** + * Size of Queue + */ + private int size; + + /** + * Init LinkedQueue + */ + public LinkedQueue() { + front = rear = new Node(); + } + + /** + * Check if queue is empty + * + * @return true if queue is empty, otherwise false + */ + public boolean isEmpty() { + return size == 0; + } + + /** + * Add element to rear of queue + * + * @param data insert value + * @return true if add successfully + */ + public boolean enqueue(int data) { + Node newNode = new Node(data); + rear.next = newNode; + rear = newNode; /* make rear point at last node */ + size++; + return true; + } + + /** + * Remove element at the front of queue + * + * @return element at the front of queue + */ + public int dequeue() { + if (isEmpty()) { + throw new NoSuchElementException("queue is empty"); + } + Node destroy = front.next; + int retValue = destroy.data; + front.next = front.next.next; + destroy = null; /* clear let GC do it's work */ + size--; + return retValue; + } + + /** + * Peek element at the front of queue without removing + * + * @return element at the front + */ + public int peekFront() { + if (isEmpty()) { + throw new NoSuchElementException("queue is empty"); + } + return front.next.data; + } + + /** + * Peek element at the rear of queue without removing + * + * @return element at the front + */ + public int peekRear() { + if (isEmpty()) { + throw new NoSuchElementException("queue is empty"); + } + return rear.data; + } + + /** + * Return size of queue + * + * @return size of queue + */ + public int size() { + return size; + } + + /** + * Clear all nodes in queue + */ + public void clear() { + //TODO + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + Node cur = front.next; + builder.append("["); + while (cur != null) { + builder.append(cur.data).append(", "); + cur = cur.next; + } + builder.replace(builder.length() - 2, builder.length(), "]"); + return builder.toString(); + } + + /* Driver Code */ + public static void main(String[] args) { + LinkedQueue queue = new LinkedQueue(); + assert queue.isEmpty(); + + queue.enqueue(1); /* 1 */ + queue.enqueue(2); /* 1 2 */ + queue.enqueue(3); /* 1 2 3 */ + System.out.println(queue); + + assert queue.size() == 3; + assert queue.dequeue() == 1; + assert queue.peekFront() == 2; + assert queue.peekRear() == 3; + } +} From 56e887213bffa683cd89501c6726c6135b09b2cd Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 23 Oct 2019 21:42:04 +0800 Subject: [PATCH 203/521] add pow --- Maths/Pow.java | 26 ++++++++++++++++++++++++++ Maths/PowRecursion.java | 26 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 Maths/Pow.java create mode 100644 Maths/PowRecursion.java diff --git a/Maths/Pow.java b/Maths/Pow.java new file mode 100644 index 000000000000..605e01d98234 --- /dev/null +++ b/Maths/Pow.java @@ -0,0 +1,26 @@ +package maths; + +public class Pow { + public static void main(String[] args) { + assert pow(2, 0) == Math.pow(2, 0); + assert pow(0, 2) == Math.pow(0, 2); + assert pow(2, 10) == Math.pow(2, 10); + assert pow(10, 2) == Math.pow(10, 2); + } + + /** + * Returns the value of the first argument raised to the power of the + * second argument + * + * @param a the base. + * @param b the exponent. + * @return the value {@code a}{@code b}. + */ + public static long pow(int a, int b) { + long result = 1; + for (int i = 1; i <= b; i++) { + result *= a; + } + return result; + } +} diff --git a/Maths/PowRecursion.java b/Maths/PowRecursion.java new file mode 100644 index 000000000000..673b8fdee892 --- /dev/null +++ b/Maths/PowRecursion.java @@ -0,0 +1,26 @@ +package Maths; + +public class PowRecursion { + public static void main(String[] args) { + assert pow(2, 0) == Math.pow(2, 0); + assert pow(0, 2) == Math.pow(0, 2); + assert pow(2, 10) == Math.pow(2, 10); + assert pow(10, 2) == Math.pow(10, 2); + } + + /** + * Returns the value of the first argument raised to the power of the + * second argument + * + * @param a the base. + * @param b the exponent. + * @return the value {@code a}{@code b}. + */ + public static long pow(int a, int b) { + int result = 1; + for (int i = 1; i <= b; i++) { + result *= a; + } + return result; + } +} From 6252b4eff8d0ff4e73db2f40a753ef75fb70756a Mon Sep 17 00:00:00 2001 From: UntouchedOdin0 Date: Wed, 23 Oct 2019 21:22:14 +0100 Subject: [PATCH 204/521] Update FindMin.java Re-word the comments --- Maths/FindMin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/FindMin.java b/Maths/FindMin.java index 2a13fe4b535a..9097c0179f39 100644 --- a/Maths/FindMin.java +++ b/Maths/FindMin.java @@ -9,7 +9,7 @@ public static void main(String[] args) { } /** - * find min of array + * Find the minimum number of an array of numbers. * * @param array the array contains element * @return min value From 3a8ab829a8ac2171f492ecf05a3b4ccd05423cfb Mon Sep 17 00:00:00 2001 From: UntouchedOdin0 Date: Wed, 23 Oct 2019 21:30:19 +0100 Subject: [PATCH 205/521] Update CountWords.java Cleaning the code --- Others/CountWords.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/Others/CountWords.java b/Others/CountWords.java index 5dc6375597c8..f1caf9a87734 100644 --- a/Others/CountWords.java +++ b/Others/CountWords.java @@ -44,7 +44,5 @@ private static int secondaryWordCount(String s) { } s = sb.toString(); return s.trim().split("[\\s]+").length; - } - } From d11b7347b650c225e31b1d46ec0f8800a8ce1fd9 Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 24 Oct 2019 11:54:37 +0800 Subject: [PATCH 206/521] using recursion --- Maths/PowRecursion.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Maths/PowRecursion.java b/Maths/PowRecursion.java index 673b8fdee892..243548708771 100644 --- a/Maths/PowRecursion.java +++ b/Maths/PowRecursion.java @@ -17,10 +17,10 @@ public static void main(String[] args) { * @return the value {@code a}{@code b}. */ public static long pow(int a, int b) { - int result = 1; - for (int i = 1; i <= b; i++) { - result *= a; + if (b == 0) { + return 1; + } else { + return a * pow(a, b - 1); } - return result; } } From fce3d838dbf0cb729bc4e1eb0309a1cafca0d1a5 Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 24 Oct 2019 14:30:33 +0800 Subject: [PATCH 207/521] update LinkedQueue --- DataStructures/Queues/LinkedQueue.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/DataStructures/Queues/LinkedQueue.java b/DataStructures/Queues/LinkedQueue.java index 540a24656056..1c85937b9a06 100644 --- a/DataStructures/Queues/LinkedQueue.java +++ b/DataStructures/Queues/LinkedQueue.java @@ -80,6 +80,11 @@ public int dequeue() { front.next = front.next.next; destroy = null; /* clear let GC do it's work */ size--; + + if (isEmpty()) { + front = rear; + } + return retValue; } @@ -120,11 +125,16 @@ public int size() { * Clear all nodes in queue */ public void clear() { - //TODO + while (!isEmpty()) { + dequeue(); + } } @Override public String toString() { + if (isEmpty()) { + return "[]"; + } StringBuilder builder = new StringBuilder(); Node cur = front.next; builder.append("["); @@ -144,11 +154,16 @@ public static void main(String[] args) { queue.enqueue(1); /* 1 */ queue.enqueue(2); /* 1 2 */ queue.enqueue(3); /* 1 2 3 */ - System.out.println(queue); + System.out.println(queue); /* [1, 2, 3] */ assert queue.size() == 3; assert queue.dequeue() == 1; assert queue.peekFront() == 2; assert queue.peekRear() == 3; + + queue.clear(); + assert queue.isEmpty(); + + System.out.println(queue); /* [] */ } } From c502da807c994f48dc6bd77dce3a46a1ed5f2d8d Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Thu, 24 Oct 2019 14:38:08 +0800 Subject: [PATCH 208/521] fix: update Fibonacci and close #1008 * close #1008 --- DynamicProgramming/Fibonacci.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/DynamicProgramming/Fibonacci.java b/DynamicProgramming/Fibonacci.java index 6b362f0da2b9..ba77919f8d25 100644 --- a/DynamicProgramming/Fibonacci.java +++ b/DynamicProgramming/Fibonacci.java @@ -1,9 +1,8 @@ package DynamicProgramming; -import java.io.BufferedReader; -import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; +import java.util.Scanner; /** * @author Varun Upadhyay (https://github.com/varunu28) @@ -13,14 +12,15 @@ public class Fibonacci { private static Map map = new HashMap<>(); - public static void main(String[] args) throws Exception { - - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - int n = Integer.parseInt(br.readLine()); + public static void main(String[] args) { // Methods all returning [0, 1, 1, 2, 3, 5, ...] for n = [0, 1, 2, 3, 4, 5, ...] + Scanner sc = new Scanner(System.in); + int n = sc.nextInt(); + System.out.println(fibMemo(n)); System.out.println(fibBotUp(n)); + System.out.println(fibOptimized(n)); } /** @@ -29,7 +29,7 @@ public static void main(String[] args) throws Exception { * @param n The input n for which we have to determine the fibonacci number * Outputs the nth fibonacci number **/ - private static int fibMemo(int n) { + public static int fibMemo(int n) { if (map.containsKey(n)) { return map.get(n); } @@ -51,7 +51,7 @@ private static int fibMemo(int n) { * @param n The input n for which we have to determine the fibonacci number * Outputs the nth fibonacci number **/ - private static int fibBotUp(int n) { + public static int fibBotUp(int n) { Map fib = new HashMap<>(); @@ -83,7 +83,7 @@ private static int fibBotUp(int n) { * Whereas , the above functions will take O(n) Space. * @author Shoaib Rayeen (https://github.com/shoaibrayeen) **/ - private static int fibOptimized(int n) { + public static int fibOptimized(int n) { if (n == 0) { return 0; } @@ -95,4 +95,4 @@ private static int fibOptimized(int n) { } return res; } -} \ No newline at end of file +} From b54983f5bc6863e9058cbe20b410c126c245687a Mon Sep 17 00:00:00 2001 From: shellhub Date: Fri, 25 Oct 2019 11:55:13 +0800 Subject: [PATCH 209/521] upate SinglyLinkedList --- DataStructures/Lists/SinglyLinkedList.java | 100 ++++++++++++++++++--- 1 file changed, 88 insertions(+), 12 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index a478d7a5fddb..e9f0ebb245fb 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -30,6 +30,17 @@ public SinglyLinkedList() { size = 0; } + /** + * Init SinglyLinkedList with specified head node and size + * + * @param head the head node of list + * @param size the size of list + */ + public SinglyLinkedList(Node head, int size) { + this.head = head; + this.size = size; + } + /** * This method inserts an element at the head * @@ -66,6 +77,23 @@ public void insertNth(int data, int position) { size++; } + /** + * Insert element to list, always sorted + * + * @param data to be inserted + */ + public void insertSorted(int data) { + Node cur = head; + while (cur.next != null && data > cur.next.value) { + cur = cur.next; + } + + Node newNode = new Node(data); + newNode.next = cur.next; + cur.next = newNode; + size++; + } + /** * This method deletes an element at the head * @@ -142,7 +170,7 @@ public boolean isEmpty() { /** * Returns the size of the linked list */ - public int getSize() { + public int size() { return size; } @@ -160,6 +188,40 @@ public String toString() { return builder.replace(builder.length() - 2, builder.length(), "").toString(); } + /** + * Merge two sorted SingleLinkedList + * + * @param listA the first sorted list + * @param listB the second sored list + * @return merged sorted list + */ + public static SinglyLinkedList merge(SinglyLinkedList listA, SinglyLinkedList listB) { + Node headA = listA.head.next; + Node headB = listB.head.next; + + int size = listA.size() + listB.size(); + + Node head = new Node(); + Node tail = head; + while (headA != null && headB != null) { + if (headA.value <= headB.value) { + tail.next = headA; + headA = headA.next; + } else { + tail.next = headB; + headB = headB.next; + } + tail = tail.next; + } + if (headA == null) { + tail.next = headB; + } + if (headB == null) { + tail.next = headA; + } + return new SinglyLinkedList(head, size); + } + /** * Main method * @@ -167,31 +229,37 @@ public String toString() { */ public static void main(String args[]) { SinglyLinkedList myList = new SinglyLinkedList(); - assert myList.isEmpty(); + assert myList.toString().equals(""); myList.insertHead(5); myList.insertHead(7); myList.insertHead(10); - - System.out.println(myList);; // 10 -> 7 -> 5 + assert myList.toString().equals("10->7->5"); myList.deleteHead(); - - System.out.println(myList);; // 7 -> 5 + assert myList.toString().equals("7->5"); myList.insertNth(11, 2); - - System.out.println(myList);; // 7 -> 5 -> 11 + assert myList.toString().equals("7->5->11"); myList.deleteNth(1); - - System.out.println(myList);; // 7-> 11 + assert myList.toString().equals("7->11"); myList.clear(); assert myList.isEmpty(); - System.out.println(myList); // "" + /* Test MergeTwoSortedLinkedList */ + SinglyLinkedList listA = new SinglyLinkedList(); + SinglyLinkedList listB = new SinglyLinkedList(); + + for (int i = 10; i >= 2; i -= 2) { + listA.insertSorted(i); + listB.insertSorted(i - 1); + } + assert listA.toString().equals("2->4->6->8->10"); + assert listB.toString().equals("1->3->5->7->9"); + assert SinglyLinkedList.merge(listA, listB).toString().equals("1->2->3->4->5->6->7->8->9->10"); } } @@ -212,13 +280,21 @@ class Node { */ Node next; + Node() { + + } + /** * Constructor * * @param value Value to be put in the node */ Node(int value) { + this(value, null); + } + + Node(int value, Node next) { this.value = value; - this.next = null; + this.next = next; } } From 9dfea6726332ef581ed01de55ffbc454acecfccc Mon Sep 17 00:00:00 2001 From: walter-ind <52423075+walter-ind@users.noreply.github.com> Date: Fri, 25 Oct 2019 10:53:54 +0530 Subject: [PATCH 210/521] added license to the repository. --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000000..a20869d96300 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 The Algorithms + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 28cb69ed68b52fd11e768ab3d8d12cc14e62f65a Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 27 Oct 2019 17:48:30 +0800 Subject: [PATCH 211/521] update AnyBaseToDecimal --- Conversions/AnyBaseToDecimal.java | 64 ++++++++++++++----------------- 1 file changed, 28 insertions(+), 36 deletions(-) diff --git a/Conversions/AnyBaseToDecimal.java b/Conversions/AnyBaseToDecimal.java index 46451bb86184..6b4a680a06da 100644 --- a/Conversions/AnyBaseToDecimal.java +++ b/Conversions/AnyBaseToDecimal.java @@ -1,61 +1,53 @@ package Conversions; -import java.io.BufferedReader; -import java.io.InputStreamReader; - /** - * * @author Varun Upadhyay (https://github.com/varunu28) - * */ // Driver program public class AnyBaseToDecimal { - public static void main (String[] args) throws Exception{ - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - - String inp = br.readLine(); - int base = Integer.parseInt(br.readLine()); - - System.out.println("Input in base " + base + " is: " + inp); - System.out.println("Decimal value of " + inp + " is: " + convertToDecimal(inp, base)); - - br.close(); + public static void main(String[] args) { + assert convertToDecimal("1010", 2) == Integer.valueOf("1010", 2); + assert convertToDecimal("777", 8) == Integer.valueOf("777", 8); + assert convertToDecimal("999", 10) == Integer.valueOf("999", 10); + assert convertToDecimal("ABCDEF", 16) == Integer.valueOf("ABCDEF", 16); + assert convertToDecimal("XYZ", 36) == Integer.valueOf("XYZ", 36); } /** - * This method produces a decimal value of any given input number of any base - * @param inp_num String of which we need the decimal value and base in integer format - * @return string format of the decimal value + * Convert any radix to decimal number + * + * @param s the string to be convert + * @param radix the radix + * @return decimal of bits + * @throws NumberFormatException if {@code bits} or {@code radix} is invalid */ - - public static String convertToDecimal(String inp_num, int base) { - int len = inp_num.length(); + public static int convertToDecimal(String s, int radix) { int num = 0; int pow = 1; - for (int i=len-1; i>=0; i--) { - if (valOfChar(inp_num.charAt(i)) >= base) { - return "Invalid Number"; + for (int i = s.length() - 1; i >= 0; i--) { + int digit = valOfChar(s.charAt(i)); + if (digit >= radix) { + throw new NumberFormatException("For input string " + s); } - num += valOfChar(inp_num.charAt(i))*pow; - pow *= base; + num += valOfChar(s.charAt(i)) * pow; + pow *= radix; } - return String.valueOf(num); + return num; } /** - * This method produces integer value of the input character and returns it - * @param c Char of which we need the integer value of - * @return integer value of input char + * Convert character to integer + * + * @param c the character + * @return represented digit of given character + * @throws NumberFormatException if {@code ch} is not UpperCase or Digit character. */ - public static int valOfChar(char c) { - if (c >= '0' && c <= '9') { - return (int)c - '0'; - } - else { - return (int)c - 'A' + 10; + if (!(Character.isUpperCase(c) || Character.isDigit(c))) { + throw new NumberFormatException("invalid character :" + c); } + return Character.isDigit(c) ? c - '0' : c - 'A' + 10; } } From 87fcd2c8a425af324137a0d1308c843b8c1bfba4 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 27 Oct 2019 17:56:39 +0800 Subject: [PATCH 212/521] make code readable --- DataStructures/Stacks/BalancedBrackets.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Stacks/BalancedBrackets.java b/DataStructures/Stacks/BalancedBrackets.java index ea342219cffa..d9f6aa0a1f2f 100644 --- a/DataStructures/Stacks/BalancedBrackets.java +++ b/DataStructures/Stacks/BalancedBrackets.java @@ -62,7 +62,7 @@ public static boolean isBalanced(String brackets) { case ')': case ']': case '}': - if (!(!bracketsStack.isEmpty() && isPaired(bracketsStack.pop(), bracket))) { + if (bracketsStack.isEmpty() || !isPaired(bracketsStack.pop(), bracket)) { return false; } break; From 064a84f971ffc34dd88752c04f2dcfe0f1afcdb9 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 27 Oct 2019 18:04:12 +0800 Subject: [PATCH 213/521] statistics optimization --- DataStructures/Lists/SinglyLinkedList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index a478d7a5fddb..04f904f92459 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -106,7 +106,7 @@ public void deleteNth(int position) { * @throws IndexOutOfBoundsException if {@code position} not in range {@code low} to {@code high} */ public void checkBounds(int position, int low, int high) { - if (position < low || position > high) { + if (position > high || position < low) { throw new IndexOutOfBoundsException(position + ""); } } From 39a1bed26499061394b9e26d215c096e419f19b4 Mon Sep 17 00:00:00 2001 From: Nikita Naumov Date: Sun, 27 Oct 2019 21:44:06 +0300 Subject: [PATCH 214/521] qwe --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b1dfd9119628..129bc5fbd7b7 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,6 @@ local.properties .DS_Store gradle.properties -.vscode \ No newline at end of file +.vscode + +*.log \ No newline at end of file From 16a215eb08736ac273f691e98f9b525fc2d2a3f6 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 29 Oct 2019 11:34:19 +0800 Subject: [PATCH 215/521] add jump search algorithm --- Searches/JumpSearch.java | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Searches/JumpSearch.java diff --git a/Searches/JumpSearch.java b/Searches/JumpSearch.java new file mode 100644 index 000000000000..897bda6c4f15 --- /dev/null +++ b/Searches/JumpSearch.java @@ -0,0 +1,39 @@ +package Searches; + +public class JumpSearch implements SearchAlgorithm { + + public static void main(String[] args) { + JumpSearch jumpSearch = new JumpSearch(); + Integer[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + for (int i = 0; i < array.length; i++) { + assert jumpSearch.find(array, i) == i; + } + assert jumpSearch.find(array, -1) == -1; + assert jumpSearch.find(array, 11) == -1; + } + + /** + * Jump Search algorithm implements + * + * @param array the array contains elements + * @param key to be searched + * @return index of {@code key} if found, otherwise -1 + */ + @Override + public > int find(T[] array, T key) { + int length = array.length; /* length of array */ + int blockSize = (int) Math.sqrt(length); /* block size to be jumped */ + + int limit = blockSize; + while (key.compareTo(array[limit]) > 0 && limit < array.length - 1) { + limit = Math.min(limit + blockSize, array.length - 1); + } + + for (int i = limit - blockSize; i <= limit; i++) { + if (array[i] == key) { /* execute linear search */ + return i; + } + } + return -1; /* not found */ + } +} From e141a33fa7334a1e5110f964bfaffab357889f9f Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 29 Oct 2019 12:40:39 +0800 Subject: [PATCH 216/521] FibonacciNumber --- Maths/FactorialRecursion.java | 26 ++++++++++++++++++ Maths/FibonacciNumber.java | 37 ++++++++++++++++++++++++++ Others/CountChar.java | 16 ++++------- Others/Factorial.java | 50 ----------------------------------- 4 files changed, 68 insertions(+), 61 deletions(-) create mode 100644 Maths/FactorialRecursion.java create mode 100644 Maths/FibonacciNumber.java delete mode 100644 Others/Factorial.java diff --git a/Maths/FactorialRecursion.java b/Maths/FactorialRecursion.java new file mode 100644 index 000000000000..6e12d0babbcd --- /dev/null +++ b/Maths/FactorialRecursion.java @@ -0,0 +1,26 @@ +package Maths; + +public class FactorialRecursion { + + /* Driver Code */ + public static void main(String[] args) { + assert factorial(0) == 1; + assert factorial(1) == 1; + assert factorial(2) == 2; + assert factorial(3) == 6; + assert factorial(5) == 120; + } + + /** + * Recursive FactorialRecursion Method + * + * @param n The number to factorial + * @return The factorial of the number + */ + public static long factorial(int n) { + if (n < 0) { + throw new IllegalArgumentException("number is negative"); + } + return n == 0 || n == 1 ? 1 : n * factorial(n - 1); + } +} diff --git a/Maths/FibonacciNumber.java b/Maths/FibonacciNumber.java new file mode 100644 index 000000000000..89796b337135 --- /dev/null +++ b/Maths/FibonacciNumber.java @@ -0,0 +1,37 @@ +package Maths; + +/** + * Fibonacci: 0 1 1 2 3 5 8 13 21 ... + */ +public class FibonacciNumber { + public static void main(String[] args) { + assert isFibonacciNumber(1); + assert isFibonacciNumber(2); + assert isFibonacciNumber(21); + assert !isFibonacciNumber(9); + assert !isFibonacciNumber(10); + } + + /** + * Check if a number is perfect square number + * + * @param number the number to be checked + * @return true if {@code number} is perfect square, otherwise false + */ + public static boolean isPerfectSquare(int number) { + int sqrt = (int) Math.sqrt(number); + return sqrt * sqrt == number; + } + + /** + * Check if a number is fibonacci number + * This is true if and only if at least one of 5x^2+4 or 5x^2-4 is a perfect square + * + * @param number the number + * @return true if {@code number} is fibonacci number, otherwise false + * @link https://en.wikipedia.org/wiki/Fibonacci_number#Identification + */ + public static boolean isFibonacciNumber(int number) { + return isPerfectSquare(5 * number * number + 4) || isPerfectSquare(5 * number * number - 4); + } +} diff --git a/Others/CountChar.java b/Others/CountChar.java index ee83bce06a51..8f37217ed5f9 100644 --- a/Others/CountChar.java +++ b/Others/CountChar.java @@ -2,13 +2,6 @@ import java.util.Scanner; - -/** - * @author blast314 - *

- * Counts the number of characters in the text. - */ - public class CountChar { public static void main(String[] args) { @@ -20,11 +13,12 @@ public static void main(String[] args) { } /** - * @param str: String to count the characters - * @return int: Number of characters in the passed string + * Count non space character in string + * + * @param str String to count the characters + * @return number of character in the specified string */ private static int CountCharacters(String str) { - str = str.replaceAll("\\s",""); - return str.length(); + return str.replaceAll("\\s", "").length(); } } diff --git a/Others/Factorial.java b/Others/Factorial.java deleted file mode 100644 index 652607e5107b..000000000000 --- a/Others/Factorial.java +++ /dev/null @@ -1,50 +0,0 @@ -package Others; - -import java.util.Scanner; - -/** - * This program will print out the factorial of any non-negative - * number that you input into it. - * - * @author Marcus - */ -public class Factorial { - - /** - * The main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - Scanner input = new Scanner(System.in); - System.out.print("Enter a non-negative integer: "); - - //If user does not enter an Integer, we want program to fail gracefully, letting the user know why it terminated - try { - int number = input.nextInt(); - - //We keep prompting the user until they enter a positive number - while (number < 0) { - System.out.println("Your input must be non-negative. Please enter a positive number: "); - number = input.nextInt(); - } - //Display the result - System.out.println("The factorial of " + number + " will yield: " + factorial(number)); - - } catch (Exception e) { - System.out.println("Error: You did not enter an integer. Program has terminated."); - } - input.close(); - } - - /** - * Recursive Factorial Method - * - * @param n The number to factorial - * @return The factorial of the number - */ - public static long factorial(int n) { - if (n == 0 || n == 1) return 1; - return n * factorial(n - 1); - } -} From d1a3ff1aa1d217a9b94640219876fd85e13ab122 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Thu, 31 Oct 2019 19:58:21 +0530 Subject: [PATCH 217/521] Create CONTRIBUTING.md to avoid 404 for community guidelines. --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000000..d502de24281c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,2 @@ +## Contribution Guidelines +Read our [Contribution Guidelines](CONTRIBUTING.md) before you contribute. From e08408ca11148af5da53ef5015391a2a139af69f Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Tue, 19 Nov 2019 16:40:29 +0800 Subject: [PATCH 218/521] fix: update FindMin and fix #1170 --- Maths/FindMin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Maths/FindMin.java b/Maths/FindMin.java index 9097c0179f39..90b7ea10926d 100644 --- a/Maths/FindMin.java +++ b/Maths/FindMin.java @@ -5,7 +5,7 @@ public class FindMin { //Driver public static void main(String[] args) { int[] array = {2, 4, 9, 7, 19, 94, 5}; - System.out.println("min = " + findMax(array)); + System.out.println("min = " + findMin(array)); } /** @@ -14,7 +14,7 @@ public static void main(String[] args) { * @param array the array contains element * @return min value */ - public static int findMax(int[] array) { + public static int findMin(int[] array) { int min = array[0]; for (int i = 1; i < array.length; ++i) { if (array[i] < min) { From 3259944dbc19380b2741d536a4c059e5d489d7b8 Mon Sep 17 00:00:00 2001 From: Chase Ganey <11964615+cganey@users.noreply.github.com> Date: Sat, 23 Nov 2019 12:22:27 -0500 Subject: [PATCH 219/521] Update BubbleSort.java Output from print(integers) returns [78, 231, 54, 23, 12, 9, 6, 4, 1] Correct output should be: [231, 78, 54, 23, 12, 9, 6, 4, 1] --- Sorts/BubbleSort.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Sorts/BubbleSort.java b/Sorts/BubbleSort.java index 29d588932c8f..e7b7fdde2440 100644 --- a/Sorts/BubbleSort.java +++ b/Sorts/BubbleSort.java @@ -21,7 +21,10 @@ public > T[] sort(T array[]) { for (int i = 0, size = array.length; i < size - 1; ++i) { boolean swapped = false; for (int j = 0; j < size - 1 - i; ++j) { - swapped = less(array[j], array[j + 1]) && swap(array, j, j + 1); + if (less(array[j], array[j + 1])) { + swap(array, j, j + 1); + swapped = true; + } } if (!swapped) { break; From 9f76ad52b801f251f97115da996b48403574c44b Mon Sep 17 00:00:00 2001 From: BryanChan777 <43082778+BryanChan777@users.noreply.github.com> Date: Sat, 23 Nov 2019 14:44:55 -0800 Subject: [PATCH 220/521] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d0dd123e4d4e..80b5888a5165 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,15 @@ [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/TheAlgorithms/100) -NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we are trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. +NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we're trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. -You can play around (run and edit) the Algorithms or contribute to them using Gitpod.io a free online dev environment with a single click. No need to worry about the Dev enviroment. +You can run and edit the algorithms or contribute to them using Gitpod.io, a free online development environment, with a single click. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) -### All algorithms implemented in Java (for education) -These implementations are for learning purposes. They may be less efficient than the implementations in the Java standard library. +### All algorithms are implemented in Java (for education purposes) +These implementations are for learning purposes. The implementations may be less efficient than the Java standard library. ## Contribution Guidelines Read our [Contribution Guidelines](CONTRIBUTING.md) before you contribute. From 79d29c0bd3ec0f45f157d29c760ae92adead480c Mon Sep 17 00:00:00 2001 From: Arogon1 <40372809+Arogon1@users.noreply.github.com> Date: Tue, 10 Dec 2019 23:35:54 -0500 Subject: [PATCH 221/521] Comment revisions --- Conversions/DecimalToBinary.java | 2 +- Conversions/DecimalToHexaDecimal.java | 1 + Conversions/DecimalToOctal.java | 4 +++- Conversions/HexaDecimalToBinary.java | 4 +++- Conversions/IntegerToRoman.java | 20 ++++++++++++++++++++ Conversions/RomanToInteger.java | 1 + Maths/AbsoluteMax.java | 2 +- Maths/AbsoluteMin.java | 2 +- Maths/Factorial.java | 9 ++++++--- Maths/Pow.java | 9 +++++---- 10 files changed, 42 insertions(+), 12 deletions(-) diff --git a/Conversions/DecimalToBinary.java b/Conversions/DecimalToBinary.java index 2c8d3218fdfe..c709d0d16cff 100644 --- a/Conversions/DecimalToBinary.java +++ b/Conversions/DecimalToBinary.java @@ -5,7 +5,7 @@ /** * This class converts a Decimal number to a Binary number * - * @author Unknown + * */ class DecimalToBinary { diff --git a/Conversions/DecimalToHexaDecimal.java b/Conversions/DecimalToHexaDecimal.java index c9c4e434417c..3d0351dd0122 100644 --- a/Conversions/DecimalToHexaDecimal.java +++ b/Conversions/DecimalToHexaDecimal.java @@ -1,5 +1,6 @@ package Conversions; +//hex = [0 - 9] -> [A - F] class DecimalToHexaDecimal { private static final int sizeOfIntInHalfBytes = 8; private static final int numberOfBitsInAHalfByte = 4; diff --git a/Conversions/DecimalToOctal.java b/Conversions/DecimalToOctal.java index 017ab33321b5..98c9f1bb0c48 100644 --- a/Conversions/DecimalToOctal.java +++ b/Conversions/DecimalToOctal.java @@ -5,7 +5,7 @@ /** * This class converts Decimal numbers to Octal Numbers * - * @author Unknown + * */ public class DecimalToOctal { /** @@ -13,6 +13,8 @@ public class DecimalToOctal { * * @param args Command line Arguments */ + + //enter in a decimal value to get Octal output public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n, k, d, s = 0, c = 0; diff --git a/Conversions/HexaDecimalToBinary.java b/Conversions/HexaDecimalToBinary.java index 8a79e9b4f00c..091822ce0cb4 100644 --- a/Conversions/HexaDecimalToBinary.java +++ b/Conversions/HexaDecimalToBinary.java @@ -1,5 +1,7 @@ package Conversions; +//Hex [0-9],[A-F] -> Binary [0,1] + public class HexaDecimalToBinary { private final int LONG_BITS = 8; @@ -9,7 +11,7 @@ public void convert(String numHex) { int conHex = Integer.parseInt(numHex, 16); // Hex a Binary: String binary = Integer.toBinaryString(conHex); - // Presentation: + // Output: System.out.println(numHex + " = " + completeDigits(binary)); } diff --git a/Conversions/IntegerToRoman.java b/Conversions/IntegerToRoman.java index e979eb536336..8886ef4ad016 100644 --- a/Conversions/IntegerToRoman.java +++ b/Conversions/IntegerToRoman.java @@ -1,9 +1,29 @@ package Conversions; +/** + * Converting Integers into Roman Numerals + * + *('I', 1); + *('IV',4); + *('V', 5); + *('IV',9); + *('X', 10); + *('XL',40; + *('L', 50); + *('XC',90); + *('C', 100); + *('D', 500); + *('M', 1000); + * + */ + + public class IntegerToRoman { private static int[] allArabianRomanNumbers = new int[]{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; private static String[] allRomanNumbers = new String[]{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; + //Value must be > 0 + public static String integerToRoman(int num) { if (num <= 0) { return ""; diff --git a/Conversions/RomanToInteger.java b/Conversions/RomanToInteger.java index 7d6e0650ab46..4563ce4a4a72 100644 --- a/Conversions/RomanToInteger.java +++ b/Conversions/RomanToInteger.java @@ -13,6 +13,7 @@ public class RomanToInteger { put('D', 500); put('M', 1000); }}; + //Roman Number = Roman Numerals /** * This function convert Roman number into Integer diff --git a/Maths/AbsoluteMax.java b/Maths/AbsoluteMax.java index 18634bc3582f..f454f8ae003d 100644 --- a/Maths/AbsoluteMax.java +++ b/Maths/AbsoluteMax.java @@ -15,7 +15,7 @@ public static void main(String[] args) { } /** - * get the value, it's absolute value is max + * get the value, return the absolute max value * * @param numbers contains elements * @return the absolute max value diff --git a/Maths/AbsoluteMin.java b/Maths/AbsoluteMin.java index 4af43c5c08ac..576019581f9c 100644 --- a/Maths/AbsoluteMin.java +++ b/Maths/AbsoluteMin.java @@ -15,7 +15,7 @@ public static void main(String[] args) { } /** - * get the value, it's absolute value is min + * get the value, returns the absolute min value min * * @param numbers contains elements * @return the absolute min value diff --git a/Maths/Factorial.java b/Maths/Factorial.java index 1734e93fb83d..3feb43356129 100644 --- a/Maths/Factorial.java +++ b/Maths/Factorial.java @@ -1,25 +1,28 @@ package Maths; +//change around 'n' for different factorial results public class Factorial { public static void main(String[] args) { int n = 5; System.out.println(n + "! = " + factorial(n)); } + //Factorial = n! = n1 * (n-1) * (n-2)*...1 + /** - * Calculate factorial + * Calculate factorial N * * @param n the number * @return the factorial of {@code n} */ public static long factorial(int n) { if (n < 0) { - throw new ArithmeticException("n < 0"); + throw new ArithmeticException("n < 0"); //Dont work with less than 0 } long fac = 1; for (int i = 1; i <= n; ++i) { fac *= i; } - return fac; + return fac; //Return factorial } } diff --git a/Maths/Pow.java b/Maths/Pow.java index 605e01d98234..7c0cad1afc9e 100644 --- a/Maths/Pow.java +++ b/Maths/Pow.java @@ -1,11 +1,12 @@ package maths; +//POWER (exponentials) Examples (a^b) public class Pow { public static void main(String[] args) { - assert pow(2, 0) == Math.pow(2, 0); - assert pow(0, 2) == Math.pow(0, 2); - assert pow(2, 10) == Math.pow(2, 10); - assert pow(10, 2) == Math.pow(10, 2); + assert pow(2, 0) == Math.pow(2, 0); // == 1 + assert pow(0, 2) == Math.pow(0, 2); // == 0 + assert pow(2, 10) == Math.pow(2, 10); // == 1024 + assert pow(10, 2) == Math.pow(10, 2); // == 100 } /** From a6ae9515805c585545762879ff9f2221d757923a Mon Sep 17 00:00:00 2001 From: valery noname Date: Mon, 30 Dec 2019 13:03:14 +0700 Subject: [PATCH 222/521] fix: removed warning for Sorts 'C-style array declaration of parameter 'array'' --- Sorts/BogoSort.java | 6 +++--- Sorts/BubbleSort.java | 2 +- Sorts/CombSort.java | 6 +++--- Sorts/RadixSort.java | 14 +++++++------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Sorts/BogoSort.java b/Sorts/BogoSort.java index 299c6b90ec5d..439d51ec6935 100644 --- a/Sorts/BogoSort.java +++ b/Sorts/BogoSort.java @@ -12,7 +12,7 @@ public class BogoSort implements SortAlgorithm { private static final Random random = new Random(); - private static > boolean isSorted(T array[]) { + private static > boolean isSorted(T[] array) { for (int i = 0; i < array.length - 1; i++) { if (SortUtils.less(array[i + 1], array[i])) return false; } @@ -20,7 +20,7 @@ private static > boolean isSorted(T array[]) { } // Randomly shuffles the array - private static void nextPermutation(T array[]) { + private static void nextPermutation(T[] array) { int length = array.length; for (int i = 0; i < array.length; i++) { @@ -29,7 +29,7 @@ private static void nextPermutation(T array[]) { } } - public > T[] sort(T array[]) { + public > T[] sort(T[] array) { while (!isSorted(array)) { nextPermutation(array); } diff --git a/Sorts/BubbleSort.java b/Sorts/BubbleSort.java index e7b7fdde2440..9d2f371786d8 100644 --- a/Sorts/BubbleSort.java +++ b/Sorts/BubbleSort.java @@ -17,7 +17,7 @@ class BubbleSort implements SortAlgorithm { **/ @Override - public > T[] sort(T array[]) { + public > T[] sort(T[] array) { for (int i = 0, size = array.length; i < size - 1; ++i) { boolean swapped = false; for (int j = 0; j < size - 1 - i; ++j) { diff --git a/Sorts/CombSort.java b/Sorts/CombSort.java index 23e38323ef36..652fc9f945a6 100644 --- a/Sorts/CombSort.java +++ b/Sorts/CombSort.java @@ -33,7 +33,7 @@ private int nextGap(int gap) { * @return sorted array */ @Override - public > T[] sort(T arr[]) { + public > T[] sort(T[] arr) { int size = arr.length; // initialize gap @@ -62,9 +62,9 @@ public > T[] sort(T arr[]) { } // Driver method - public static void main(String args[]) { + public static void main(String[] args) { CombSort ob = new CombSort(); - Integer arr[] = {8, 4, 1, 56, 3, -44, -1, 0, 36, 34, 8, 12, -66, -78, 23, -6, 28, 0}; + Integer[] arr = {8, 4, 1, 56, 3, -44, -1, 0, 36, 34, 8, 12, -66, -78, 23, -6, 28, 0}; ob.sort(arr); System.out.println("sorted array"); diff --git a/Sorts/RadixSort.java b/Sorts/RadixSort.java index a207f6bbdda3..ca9ed767eaa0 100644 --- a/Sorts/RadixSort.java +++ b/Sorts/RadixSort.java @@ -4,7 +4,7 @@ class RadixSort { - private static int getMax(int arr[], int n) { + private static int getMax(int[] arr, int n) { int mx = arr[0]; for (int i = 1; i < n; i++) if (arr[i] > mx) @@ -12,10 +12,10 @@ private static int getMax(int arr[], int n) { return mx; } - private static void countSort(int arr[], int n, int exp) { - int output[] = new int[n]; + private static void countSort(int[] arr, int n, int exp) { + int[] output = new int[n]; int i; - int count[] = new int[10]; + int[] count = new int[10]; Arrays.fill(count, 0); for (i = 0; i < n; i++) @@ -33,7 +33,7 @@ private static void countSort(int arr[], int n, int exp) { arr[i] = output[i]; } - private static void radixsort(int arr[], int n) { + private static void radixsort(int[] arr, int n) { int m = getMax(arr, n); @@ -43,14 +43,14 @@ private static void radixsort(int arr[], int n) { } - static void print(int arr[], int n) { + static void print(int[] arr, int n) { for (int i = 0; i < n; i++) System.out.print(arr[i] + " "); } public static void main(String[] args) { - int arr[] = {170, 45, 75, 90, 802, 24, 2, 66}; + int[] arr = {170, 45, 75, 90, 802, 24, 2, 66}; int n = arr.length; radixsort(arr, n); print(arr, n); From dc6f830d072e7077d15b6c22a6ad05072d7de662 Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 9 Jan 2020 18:28:56 +0800 Subject: [PATCH 223/521] optimization --- Sorts/MergeSort.java | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/Sorts/MergeSort.java b/Sorts/MergeSort.java index 90392293b58f..2b15a9ce09b4 100644 --- a/Sorts/MergeSort.java +++ b/Sorts/MergeSort.java @@ -22,24 +22,22 @@ class MergeSort implements SortAlgorithm { @Override @SuppressWarnings("unchecked") public > T[] sort(T[] unsorted) { - T[] tmp = (T[]) new Comparable[unsorted.length]; - doSort(unsorted, tmp, 0, unsorted.length - 1); + doSort(unsorted, 0, unsorted.length - 1); return unsorted; } /** * @param arr The array to be sorted - * @param temp The copy of the actual array * @param left The first index of the array * @param right The last index of the array * Recursively sorts the array in increasing order **/ - private static > void doSort(T[] arr, T[] temp, int left, int right) { + private static > void doSort(T[] arr, int left, int right) { if (left < right) { int mid = left + (right - left) / 2; - doSort(arr, temp, left, mid); - doSort(arr, temp, mid + 1, right); - merge(arr, temp, left, mid, right); + doSort(arr, left, mid); + doSort(arr, mid + 1, right); + merge(arr, left, mid, right); } } @@ -48,36 +46,36 @@ private static > void doSort(T[] arr, T[] temp, int left * This method implements the merge step of the merge sort * * @param arr The array to be sorted - * @param temp The copy of the actual array * @param left The first index of the array * @param mid The middle index of the array * @param right The last index of the array * merges two parts of an array in increasing order **/ - private static > void merge(T[] arr, T[] temp, int left, int mid, int right) { - System.arraycopy(arr, left, temp, left, right - left + 1); - - + private static > void merge(T[] arr, int left, int mid, int right) { + int length = right - left + 1; + T[] temp = (T[]) new Comparable[length]; int i = left; int j = mid + 1; - int k = left; + int k = 0; while (i <= mid && j <= right) { - if (temp[i].compareTo(temp[j]) <= 0) { - arr[k++] = temp[i++]; + if (arr[i].compareTo(arr[j]) <= 0) { + temp[k++] = arr[i++]; } else { - arr[k++] = temp[j++]; + temp[k++] = arr[j++]; } } while (i <= mid) { - arr[k++] = temp[i++]; + temp[k++] = arr[i++]; } while (j <= right) { - arr[k++] = temp[j++]; + temp[k++] = arr[j++]; } + + System.arraycopy(temp, 0, arr, left, length); } // Driver program From 6f06de18d2301e117e0a27705cbbfe294a184abd Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Thu, 9 Jan 2020 21:15:37 +0100 Subject: [PATCH 224/521] Create update_directory_md.yml --- .github/workflows/update_directory_md.yml | 69 +++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/update_directory_md.yml diff --git a/.github/workflows/update_directory_md.yml b/.github/workflows/update_directory_md.yml new file mode 100644 index 000000000000..a37bf23bd0f0 --- /dev/null +++ b/.github/workflows/update_directory_md.yml @@ -0,0 +1,69 @@ +# This GitHub Action updates the DIRECTORY.md file (if needed) when doing a git push +name: update_directory_md +on: [push] +jobs: + update_directory_md: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - shell: python # Legacy Python 2.7.15 :-( + run: import sys ; print("Python {}.{}.{}".format(*sys.version_info)) + - shell: bash -c "$RUNNER_TOOL_CACHE/Python/3.8.0/x64/python {0}" + run: import sys ; print("Python {}.{}.{}".format(*sys.version_info)) + - shell: bash -c "$RUNNER_TOOL_CACHE/Python/3.8.0/x64/python {0}" + run: | + import os + from typing import Iterator + + URL_BASE = "https://github.com/TheAlgorithms/Java/blob/master" + g_output = [] + + + def good_filepaths(top_dir: str = ".") -> Iterator[str]: + for dirpath, dirnames, filenames in os.walk(top_dir): + dirnames[:] = [d for d in dirnames if d[0] not in "._"] + for filename in filenames: + if os.path.splitext(filename)[1].lower() == ".java": + yield os.path.join(dirpath, filename).lstrip("./") + + + def md_prefix(i): + return f"{i * ' '}*" if i else "\n##" + + + def print_path(old_path: str, new_path: str) -> str: + global g_output + old_parts = old_path.split(os.sep) + for i, new_part in enumerate(new_path.split(os.sep)): + if i + 1 > len(old_parts) or old_parts[i] != new_part: + if new_part: + g_output.append(f"{md_prefix(i)} {new_part.replace('_', ' ')}") + return new_path + + + def build_directory_md(top_dir: str = ".") -> str: + global g_output + old_path = "" + for filepath in sorted(good_filepaths(), key=str.lower): + filepath, filename = os.path.split(filepath) + if filepath != old_path: + old_path = print_path(old_path, filepath) + indent = (filepath.count(os.sep) + 1) if filepath else 0 + url = "/".join((URL_BASE, filepath, filename)).replace(" ", "%20") + filename = os.path.splitext(filename.replace("_", " "))[0] + g_output.append(f"{md_prefix(indent)} [{filename}]({url})") + return "\n".join(g_output) + + + with open("DIRECTORY.md", "w") as out_file: + out_file.write(build_directory_md(".") + "\n") + + - name: Update DIRECTORY.md + run: | + cat DIRECTORY.md + git config --global user.name github-actions + git config --global user.email '${GITHUB_ACTOR}@users.noreply.github.com' + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY + git add DIRECTORY.md + git commit -am "updating DIRECTORY.md" || true + git push --force origin HEAD:$GITHUB_REF || true From 23874ffd002bf6401034b2e152ec6fe9728c6fdd Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Thu, 9 Jan 2020 20:16:21 +0000 Subject: [PATCH 225/521] updating DIRECTORY.md --- DIRECTORY.md | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 DIRECTORY.md diff --git a/DIRECTORY.md b/DIRECTORY.md new file mode 100644 index 000000000000..17faca9a0fac --- /dev/null +++ b/DIRECTORY.md @@ -0,0 +1,199 @@ + +## ciphers + * [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) + * [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) + * [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) + * [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) + * [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) + * [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) + +## Conversions + * [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) + * [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) + * [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) + * [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) + * [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) + * [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) + * [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) + * [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) + * [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) + * [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) + * [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) + * [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) + * [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) + * [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) + * [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) + * [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) + * [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) + +## DataStructures + * Bags + * [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) + * Buffers + * [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) + * Graphs + * [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) + * [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) + * [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) + * [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) + * [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) + * [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) + * [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) + * HashMap + * Hashing + * [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) + * [LinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/LinkedList.java) + * [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) + * [Node](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Node.java) + * Heaps + * [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) + * [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) + * [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) + * [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) + * [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) + * [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) + * Lists + * [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) + * [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) + * [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) + * [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) + * [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) + * [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) + * Queues + * [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) + * [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) + * [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) + * [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) + * Stacks + * [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) + * [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) + * [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) + * [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) + * [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) + * [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) + * Trees + * [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) + * [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) + * [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) + * [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) + * [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) + * [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) + * [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) + * [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) + * [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) + * [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) + +## divideconquer + * [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) + * [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) + +## DynamicProgramming + * [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) + * [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) + * [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) + * [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) + * [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) + * [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) + * [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) + * [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) + * [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) + * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) + * [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) + * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) + * [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) + +## Maths + * [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) + * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) + * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) + * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) + * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) + * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) + * [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) + * [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) + * [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) + * [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) + * [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) + * [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) + * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) + * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) + * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) + * [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) + * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) + * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) + * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) + * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) + +## MinimizingLateness + * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) + +## Misc + * [heap sort](https://github.com/TheAlgorithms/Java/blob/master/Misc/heap_sort.java) + * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) + * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) + +## Others + * [Abecedarian](https://github.com/TheAlgorithms/Java/blob/master/Others/Abecedarian.java) + * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Others/Armstrong.java) + * [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) + * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) + * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) + * [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) + * [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) + * [Dijkshtra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkshtra.java) + * [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) + * [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) + * [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) + * [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) + * [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) + * [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) + * [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) + * [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) + * [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) + * [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) + * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/Palindrome.java) + * [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) + * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) + * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Others/PowerOfTwoOrNot.java) + * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) + * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) + * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) + * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) + * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseString.java) + * [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) + * [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) + * [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) + * [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) + * [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) + * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) + * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) + +## Searches + * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) + * [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) + * [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) + * [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) + * [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) + * [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) + * [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) + * [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) + * [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) + +## Sorts + * [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) + * [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) + * [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) + * [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) + * [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) + * [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) + * [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) + * [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) + * [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) + * [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) + * [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) + * [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) + * [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) + * [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) + * [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) + * [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) + * [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) From 0ff74ca9f89da7f5c097bf0d52123faa7bb95b1d Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 11 Jan 2020 14:19:49 +0800 Subject: [PATCH 226/521] optimization --- Sorts/ShellSort.java | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java index 49be29b9d200..199f31a8c1ea 100644 --- a/Sorts/ShellSort.java +++ b/Sorts/ShellSort.java @@ -2,48 +2,40 @@ import static Sorts.SortUtils.*; - -/** - * @author dpunosevac - * @author Podshivalov Nikita (https://github.com/nikitap492) - * @see SortAlgorithm - */ public class ShellSort implements SortAlgorithm { /** * This method implements Generic Shell Sort. * - * @param array The array to be sorted + * @param array the array to be sorted */ @Override public > T[] sort(T[] array) { - int N = array.length; - int h = 1; + int length = array.length; + int gap = 1; - while (h < N / 3) { - h = 3 * h + 1; + /* Calculate gap for optimization purpose */ + while (gap < length / 3) { + gap = 3 * gap + 1; } - while (h >= 1) { - for (int i = h; i < N; i++) { - for (int j = i; j >= h && less(array[j], array[j - h]); j -= h) { - swap(array, j, j - h); + for (; gap > 0; gap /= 3) { + for (int i = gap; i < length; i++) { + int j; + for (j = i; j >= gap && less(array[j], array[j - gap]); j -= gap) { + array[j] = array[j - gap]; } + array[j] = array[i]; } - - h /= 3; } - return array; } + /* Driver Code */ public static void main(String[] args) { Integer[] toSort = {4, 23, 6, 78, 1, 54, 231, 9, 12}; ShellSort sort = new ShellSort(); - Integer[] sorted = sort.sort(toSort); - - print(sorted); - + print(sort.sort(toSort)); } } From be6b25946a652a80139ed57429dce86b10b8d256 Mon Sep 17 00:00:00 2001 From: Caesar Date: Sun, 26 Jan 2020 14:15:18 +0800 Subject: [PATCH 227/521] Fix bug --- DataStructures/Trees/BinaryTree.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/DataStructures/Trees/BinaryTree.java b/DataStructures/Trees/BinaryTree.java index 75d3af18e56b..6ef4b5ada325 100644 --- a/DataStructures/Trees/BinaryTree.java +++ b/DataStructures/Trees/BinaryTree.java @@ -145,12 +145,19 @@ else if (temp.left != null && temp.right != null) { successor.left.parent = successor; //If the successor has a right child, the child's grandparent is it's new parent - if (successor.right != null && successor.parent != temp) { - successor.right.parent = successor.parent; - successor.parent.left = successor.right; - successor.right = temp.right; - successor.right.parent = successor; + if(successor.parent!=temp){ + if(successor.right!=null){ + successor.right.parent = successor.parent; + successor.parent.left = successor.right; + successor.right = temp.right; + successor.right.parent = successor; + }else{ + successor.parent.left=null; + successor.right=temp.right; + successor.right.parent=successor; + } } + if (temp == root) { successor.parent = null; root = successor; From 79467b330094ad964525c5eec50d86e564493758 Mon Sep 17 00:00:00 2001 From: Dekas Dimitrios Date: Sun, 26 Jan 2020 09:57:09 +0200 Subject: [PATCH 228/521] Added Best/First/Worst Fit algorithm implementation --- Others/BestFit.java | 89 ++++++++++++++++++++++++++++++++++++++++++++ Others/FirstFit.java | 70 ++++++++++++++++++++++++++++++++++ Others/WorstFit.java | 76 +++++++++++++++++++++++++++++++++++++ 3 files changed, 235 insertions(+) create mode 100644 Others/BestFit.java create mode 100644 Others/FirstFit.java create mode 100644 Others/WorstFit.java diff --git a/Others/BestFit.java b/Others/BestFit.java new file mode 100644 index 000000000000..fd072dc2015c --- /dev/null +++ b/Others/BestFit.java @@ -0,0 +1,89 @@ +package Others; + +import java.util.Array-List; + +/** + * @author Dekas Dimitrios + */ +public class BestFit { + private static final int NO_ALLOCATION = -255; // if a process has been allocated in position -255, + // it means that it has not been actually allocated. + + /** + * Method to find the maximum valued element of an array filled with positive integers. + * + * @param array: an array filled with positive integers. + * @return the maximum valued element of the array. + */ + private static int findMaxElement(int[] array) { + int max = -1; + for (int value : array) { + if (value > max) { + max = value; + } + } + return max; + } + + /** + * Method to find the index of the memory block that is going to fit the given process based on the best fit algorithm. + * + * @param blocks: the array with the available memory blocks. + * @param process: the size of the process. + * @return the index of the block that fits, or -255 if no such block exists. + */ + private static int findBestFit(int[] blockSizes, int processSize) { + // Initialize minDiff with an unreachable value by a difference between a blockSize and the processSize. + int minDiff = findMaxElement(blockSizes); + int index = NO_ALLOCATION; // If there is no block that can fit the process, return NO_ALLOCATION as the result. + for(int i=0 ; i < blockSizes.length ; i++) { // Find the most fitting memory block for the given process. + if(blockSizes[i] - processSize < minDiff && blockSizes[i] - processSize >= 0) { + minDiff = blockSizes[i] - processSize; + index = i; + } + } + return index; + } + + /** + * Method to allocate memory to blocks according to the best fit + * algorithm. It should return an ArrayList of Integers, where the + * index is the process ID (zero-indexed) and the value is the block + * number (also zero-indexed). + * + * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. + * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory blocks for. + * @return the ArrayList filled with Integers repressenting the memory allocation that took place. + */ + static ArrayList bestFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { + // The array list responsible for saving the memory allocations done by the best-fit algorithm + ArrayList memAlloc = new ArrayList<>(); + // Do this for every process + for(int processSize : sizeOfProcesses) { + int chosenBlockIdx = findBestFit(sizeOfBlocks, processSize); // Find the index of the memory block going to be used + memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list + if(chosenBlockIdx != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, + sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size + } + } + return memAlloc; + } + + /** + * Method to print the memory allocated. + * + * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the bestFit method. + */ + public static void printMemoryAllocation(ArrayList memAllocation) { + System.out.println("Process No.\tBlock No."); + System.out.println("===========\t========="); + for (int i = 0; i < memAllocation.size(); i++) { + System.out.print(" " + i + "\t\t"); + if (memAllocation.get(i) != NO_ALLOCATION) + System.out.print(memAllocation.get(i)); + else + System.out.print("Not Allocated"); + System.out.println(); + } + } +} \ No newline at end of file diff --git a/Others/FirstFit.java b/Others/FirstFit.java new file mode 100644 index 000000000000..61a25b422017 --- /dev/null +++ b/Others/FirstFit.java @@ -0,0 +1,70 @@ +package Others; + +import java.util.ArrayList; + +/** + * @author Dekas Dimitrios + */ +public class FirstFit { + private static final int NO_ALLOCATION = -255; // if a process has been allocated in position -255, + // it means that it has not been actually allocated. + + /** + * Method to find the index of the memory block that is going to fit the given process based on the first fit algorithm. + * + * @param blocks: the array with the available memory blocks. + * @param process: the size of the process. + * @return the index of the block that fits, or -255 if no such block exists. + */ + private static int findFirstFit(int[] blockSizes, int processSize) { + for(int i=0 ; i < blockSizes.length ; i++) { + if(blockSizes[i] >= processSize) { + return i; + } + } + // If there is not a block that can fit the process, return -255 as the result + return NO_ALLOCATION; + } + + /** + * Method to allocate memory to blocks according to the first fit + * algorithm. It should return an ArrayList of Integers, where the + * index is the process ID (zero-indexed) and the value is the block + * number (also zero-indexed). + * + * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. + * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory blocks for. + * @return the ArrayList filled with Integers repressenting the memory allocation that took place. + */ + static ArrayList firstFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { + // The array list responsible for saving the memory allocations done by the first-fit algorithm + ArrayList memAlloc = new ArrayList<>(); + // Do this for every process + for(int processSize : sizeOfProcesses) { + int chosenBlockIdx = findFirstFit(sizeOfBlocks, processSize); // Find the index of the memory block going to be used + memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list + if(chosenBlockIdx != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, + sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size + } + } + return memAlloc; + } + + /** + * Method to print the memory allocated. + * + * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the firstFit method. + */ + public static void printMemoryAllocation(ArrayList memAllocation) { + System.out.println("Process No.\tBlock No."); + System.out.println("===========\t========="); + for (int i = 0; i < memAllocation.size(); i++) { + System.out.print(" " + i + "\t\t"); + if (memAllocation.get(i) != NO_ALLOCATION) + System.out.print(memAllocation.get(i)); + else + System.out.print("Not Allocated"); + System.out.println(); + } + } +} \ No newline at end of file diff --git a/Others/WorstFit.java b/Others/WorstFit.java new file mode 100644 index 000000000000..0bb6c460b6b9 --- /dev/null +++ b/Others/WorstFit.java @@ -0,0 +1,76 @@ +package Others; + +import java.util.ArrayList; + +/** + * @author Dekas Dimitrios + */ +public class WorstFit { + private static final int NO_ALLOCATION = -255; // if a process has been allocated in position -255, + // it means that it has not been actually allocated. + + /** + * Method to find the index of the memory block that is going to fit the given process based on the worst fit algorithm. + * + * @param blocks: the array with the available memory blocks. + * @param process: the size of the process. + * @return the index of the block that fits, or -255 if no such block exists. + */ + private static int findWorstFit(int[] blockSizes, int processSize) { + int max = -1; + int index = -1; + for(int i=0 ; i < blockSizes.length ; i++) { // Find the index of the biggest memory block available. + if(blockSizes[i] > max) { + max = blockSizes[i]; + index = i; + } + } + // If the biggest memory block cannot fit the process, return -255 as the result + if(processSize > blockSizes[index]) { + return NO_ALLOCATION; + } + return index; + } + + /** + * Method to allocate memory to blocks according to the worst fit + * algorithm. It should return an ArrayList of Integers, where the + * index is the process ID (zero-indexed) and the value is the block + * number (also zero-indexed). + * + * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. + * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory blocks for. + * @return the ArrayList filled with Integers repressenting the memory allocation that took place. + */ + static ArrayList worstFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { + // The array list responsible for saving the memory allocations done by the worst-fit algorithm + ArrayList memAlloc = new ArrayList<>(); + // Do this for every process + for(int processSize : sizeOfProcesses) { + int chosenBlockIdx = findWorstFit(sizeOfBlocks, processSize); // Find the index of the memory block going to be used + memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list + if(chosenBlockIdx != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, + sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size + } + } + return memAlloc; + } + + /** + * Method to print the memory allocated. + * + * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the worstFit method. + */ + public static void printMemoryAllocation(ArrayList memAllocation) { + System.out.println("Process No.\tBlock No."); + System.out.println("===========\t========="); + for (int i = 0; i < memAllocation.size(); i++) { + System.out.print(" " + i + "\t\t"); + if (memAllocation.get(i) != NO_ALLOCATION) + System.out.print(memAllocation.get(i)); + else + System.out.print("Not Allocated"); + System.out.println(); + } + } +} \ No newline at end of file From d40464a10d4eb85e225957bdce0545aad8604a39 Mon Sep 17 00:00:00 2001 From: Dekas Dimitrios Date: Sun, 26 Jan 2020 10:39:07 +0200 Subject: [PATCH 229/521] Change Done --- Others/BestFit.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Others/BestFit.java b/Others/BestFit.java index fd072dc2015c..71814d22b9f1 100644 --- a/Others/BestFit.java +++ b/Others/BestFit.java @@ -1,6 +1,6 @@ package Others; -import java.util.Array-List; +import java.util.ArrayList; /** * @author Dekas Dimitrios From 35849905bce916a1537f270730fb0f7a7c836fd7 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Mon, 27 Jan 2020 22:46:56 +0100 Subject: [PATCH 230/521] Update update_directory_md.yml --- .github/workflows/update_directory_md.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/update_directory_md.yml b/.github/workflows/update_directory_md.yml index a37bf23bd0f0..325fa04502af 100644 --- a/.github/workflows/update_directory_md.yml +++ b/.github/workflows/update_directory_md.yml @@ -5,12 +5,10 @@ jobs: update_directory_md: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - shell: python # Legacy Python 2.7.15 :-( - run: import sys ; print("Python {}.{}.{}".format(*sys.version_info)) - - shell: bash -c "$RUNNER_TOOL_CACHE/Python/3.8.0/x64/python {0}" - run: import sys ; print("Python {}.{}.{}".format(*sys.version_info)) - - shell: bash -c "$RUNNER_TOOL_CACHE/Python/3.8.0/x64/python {0}" + - uses: actions/checkout@master + - uses: actions/setup-python@master + - name: update_directory_md + shell: python run: | import os from typing import Iterator From e91999749ee3525e955386c506f885f594504fa4 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 27 Jan 2020 21:47:30 +0000 Subject: [PATCH 231/521] updating DIRECTORY.md --- DIRECTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 17faca9a0fac..50ae52c55844 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -135,6 +135,7 @@ ## Others * [Abecedarian](https://github.com/TheAlgorithms/Java/blob/master/Others/Abecedarian.java) * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Others/Armstrong.java) + * [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) * [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) @@ -144,6 +145,7 @@ * [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) * [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) * [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) + * [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) * [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) * [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) * [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) @@ -167,6 +169,7 @@ * [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) + * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) ## Searches * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) From 4f45c5a479d5d723be4a5ee81789b3fe56f661b6 Mon Sep 17 00:00:00 2001 From: Hassan Date: Tue, 28 Jan 2020 18:18:15 +0200 Subject: [PATCH 232/521] Fixing packages. --- DataStructures/Graphs/BellmanFord.java | 2 ++ DataStructures/Queues/LinkedQueue.java | 2 +- DataStructures/Stacks/NodeStack.java | 1 + DataStructures/Stacks/StackArray.java | 2 ++ DataStructures/Stacks/StackArrayList.java | 2 ++ DataStructures/Stacks/StackOfLinkedList.java | 2 ++ Maths/Pow.java | 2 +- 7 files changed, 11 insertions(+), 2 deletions(-) diff --git a/DataStructures/Graphs/BellmanFord.java b/DataStructures/Graphs/BellmanFord.java index 717cb2803031..61785acec06d 100644 --- a/DataStructures/Graphs/BellmanFord.java +++ b/DataStructures/Graphs/BellmanFord.java @@ -1,3 +1,5 @@ +package DataStructures.Graphs; + import java.util.*; class BellmanFord /*Implementation of Bellman ford to detect negative cycles. Graph accepts inputs in form of edges which have diff --git a/DataStructures/Queues/LinkedQueue.java b/DataStructures/Queues/LinkedQueue.java index 1c85937b9a06..dac13dcaaad6 100644 --- a/DataStructures/Queues/LinkedQueue.java +++ b/DataStructures/Queues/LinkedQueue.java @@ -1,4 +1,4 @@ -package DataStructures; +package DataStructures.Queues; import java.util.NoSuchElementException; diff --git a/DataStructures/Stacks/NodeStack.java b/DataStructures/Stacks/NodeStack.java index c598bb8fcba1..616e6a1e1548 100644 --- a/DataStructures/Stacks/NodeStack.java +++ b/DataStructures/Stacks/NodeStack.java @@ -1,3 +1,4 @@ +package DataStructures.Stacks; /** * Implementation of a stack using nodes. * Unlimited size, no arraylist. diff --git a/DataStructures/Stacks/StackArray.java b/DataStructures/Stacks/StackArray.java index 88da42cd3dcb..4365dc448d2d 100644 --- a/DataStructures/Stacks/StackArray.java +++ b/DataStructures/Stacks/StackArray.java @@ -1,3 +1,5 @@ +package DataStructures.Stacks; + /** * This class implements a Stack using a regular array. *

diff --git a/DataStructures/Stacks/StackArrayList.java b/DataStructures/Stacks/StackArrayList.java index afc804440403..666b9ea99055 100644 --- a/DataStructures/Stacks/StackArrayList.java +++ b/DataStructures/Stacks/StackArrayList.java @@ -1,3 +1,5 @@ +package DataStructures.Stacks; + import java.util.ArrayList; /** diff --git a/DataStructures/Stacks/StackOfLinkedList.java b/DataStructures/Stacks/StackOfLinkedList.java index 5a2b8fa08258..60d8a1b0f7a0 100644 --- a/DataStructures/Stacks/StackOfLinkedList.java +++ b/DataStructures/Stacks/StackOfLinkedList.java @@ -1,5 +1,7 @@ package DataStructures.Stacks; +import java.util.NoSuchElementException; + /** * @author Varun Upadhyay (https://github.com/varunu28) */ diff --git a/Maths/Pow.java b/Maths/Pow.java index 7c0cad1afc9e..ac58fbbbe7cd 100644 --- a/Maths/Pow.java +++ b/Maths/Pow.java @@ -1,4 +1,4 @@ -package maths; +package Maths; //POWER (exponentials) Examples (a^b) public class Pow { From a1f59c38b1054ced1325ece802d94c243444e055 Mon Sep 17 00:00:00 2001 From: Hassan Date: Tue, 28 Jan 2020 18:34:52 +0200 Subject: [PATCH 233/521] Closing scanners. --- Conversions/AnyBaseToAnyBase.java | 1 + Conversions/AnytoAny.java | 1 + Conversions/DecimalToBinary.java | 1 + Conversions/HexToOct.java | 3 +-- Conversions/HexaDecimalToDecimal.java | 2 +- Conversions/OctalToHexadecimal.java | 1 + DataStructures/Graphs/BellmanFord.java | 1 + DataStructures/HashMap/Hashing/Main.java | 1 + DataStructures/Trees/RedBlackBST.java | 1 + DynamicProgramming/EditDistance.java | 1 + DynamicProgramming/Fibonacci.java | 1 + DynamicProgramming/LongestIncreasingSubsequence.java | 1 + Maths/PrimeCheck.java | 1 + MinimizingLateness/MinimizingLateness.java | 1 + Misc/PalindromePrime.java | 1 + Others/Dijkshtra.java | 1 + Others/InsertDeleteInArray.java | 1 + Others/LowestBasePalindrome.java | 1 + Others/PerlinNoise.java | 1 + Others/PowerOfTwoOrNot.java | 2 +- Others/ReturnSubsequence.java | 1 + Others/RootPrecision.java | 2 ++ Others/SJF.java | 1 + Others/StackPostfixNotation.java | 2 ++ Others/TopKWords.java | 1 + Others/TowerOfHanoi.java | 1 + ciphers/Caesar.java | 1 + 27 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Conversions/AnyBaseToAnyBase.java b/Conversions/AnyBaseToAnyBase.java index cfcf0fe9ad61..2cef99260e6b 100644 --- a/Conversions/AnyBaseToAnyBase.java +++ b/Conversions/AnyBaseToAnyBase.java @@ -52,6 +52,7 @@ public static void main(String[] args) { } } System.out.println(base2base(n, b1, b2)); + in.close(); } /** diff --git a/Conversions/AnytoAny.java b/Conversions/AnytoAny.java index 5fc744a9936c..1bc115404696 100644 --- a/Conversions/AnytoAny.java +++ b/Conversions/AnytoAny.java @@ -24,6 +24,7 @@ public static void main(String[] args) { dec /= db; } System.out.println(dn); + scn.close(); } } diff --git a/Conversions/DecimalToBinary.java b/Conversions/DecimalToBinary.java index c709d0d16cff..cd84486ae812 100644 --- a/Conversions/DecimalToBinary.java +++ b/Conversions/DecimalToBinary.java @@ -53,6 +53,7 @@ public static void bitwiseConversion() { n >>= 1; } System.out.println("\tBinary number: " + b); + input.close(); } } diff --git a/Conversions/HexToOct.java b/Conversions/HexToOct.java index a46debfe9992..2807735f72fb 100644 --- a/Conversions/HexToOct.java +++ b/Conversions/HexToOct.java @@ -64,7 +64,6 @@ public static void main(String args[]) { // convert decimal to octal octalnum = decimal2octal(decnum); System.out.println("Number in octal: " + octalnum); - - + scan.close(); } } diff --git a/Conversions/HexaDecimalToDecimal.java b/Conversions/HexaDecimalToDecimal.java index 533009b8ae16..14b0d94d76c2 100644 --- a/Conversions/HexaDecimalToDecimal.java +++ b/Conversions/HexaDecimalToDecimal.java @@ -34,7 +34,7 @@ public static void main(String args[]) { and it returns the decimal form in the variable dec_output. */ System.out.println("Number in Decimal: " + dec_output); - + scan.close(); } } diff --git a/Conversions/OctalToHexadecimal.java b/Conversions/OctalToHexadecimal.java index 2cefc92002ca..dd8d877109b5 100644 --- a/Conversions/OctalToHexadecimal.java +++ b/Conversions/OctalToHexadecimal.java @@ -59,6 +59,7 @@ public static void main(String args[]) { // Pass the decimla number to function and get converted Hex form of the number String hex = DecimalToHex(decimal); System.out.println("The Hexadecimal equivalant is: " + hex); + input.close(); } } diff --git a/DataStructures/Graphs/BellmanFord.java b/DataStructures/Graphs/BellmanFord.java index 61785acec06d..6dffede9e606 100644 --- a/DataStructures/Graphs/BellmanFord.java +++ b/DataStructures/Graphs/BellmanFord.java @@ -100,6 +100,7 @@ public void go()//Interactive run for understanding the class first time. Assume System.out.println(); } } + sc.close(); } /** * @param source Starting vertex diff --git a/DataStructures/HashMap/Hashing/Main.java b/DataStructures/HashMap/Hashing/Main.java index 66f65c1d9064..340f0760b2e5 100644 --- a/DataStructures/HashMap/Hashing/Main.java +++ b/DataStructures/HashMap/Hashing/Main.java @@ -42,6 +42,7 @@ public static void main(String[] args) { return; } } + In.close(); } } } \ No newline at end of file diff --git a/DataStructures/Trees/RedBlackBST.java b/DataStructures/Trees/RedBlackBST.java index 97a88e9a43de..197c96321975 100644 --- a/DataStructures/Trees/RedBlackBST.java +++ b/DataStructures/Trees/RedBlackBST.java @@ -309,6 +309,7 @@ public void insertDemo() { printTreepre(root); break; } + scan.close(); } public void deleteDemo() { diff --git a/DynamicProgramming/EditDistance.java b/DynamicProgramming/EditDistance.java index 210469b84108..20cb8803a754 100644 --- a/DynamicProgramming/EditDistance.java +++ b/DynamicProgramming/EditDistance.java @@ -74,5 +74,6 @@ public static void main(String[] args) { //ans stores the final Edit Distance between the two strings int ans = minDistance(s1, s2); System.out.println("The minimum Edit Distance between \"" + s1 + "\" and \"" + s2 + "\" is " + ans); + input.close(); } } diff --git a/DynamicProgramming/Fibonacci.java b/DynamicProgramming/Fibonacci.java index 112a014a378a..89be0836f6af 100644 --- a/DynamicProgramming/Fibonacci.java +++ b/DynamicProgramming/Fibonacci.java @@ -22,6 +22,7 @@ public static void main(String[] args) { System.out.println(fibMemo(n)); System.out.println(fibBotUp(n)); System.out.println(fibOptimized(n)); + sc.close(); } /** diff --git a/DynamicProgramming/LongestIncreasingSubsequence.java b/DynamicProgramming/LongestIncreasingSubsequence.java index 2b07e040db13..c8296518590d 100644 --- a/DynamicProgramming/LongestIncreasingSubsequence.java +++ b/DynamicProgramming/LongestIncreasingSubsequence.java @@ -17,6 +17,7 @@ public static void main(String[] args) { } System.out.println(LIS(ar)); + sc.close(); } private static int upperBound(int[] ar, int l, int r, int key) { diff --git a/Maths/PrimeCheck.java b/Maths/PrimeCheck.java index 3093894a3a3f..c972aa8c3e5a 100644 --- a/Maths/PrimeCheck.java +++ b/Maths/PrimeCheck.java @@ -13,6 +13,7 @@ public static void main(String[] args) { } else { System.out.println(n + " is not a prime number"); } + scanner.close(); } /*** diff --git a/MinimizingLateness/MinimizingLateness.java b/MinimizingLateness/MinimizingLateness.java index e5f71e9ef44a..1438f6f3dbcc 100644 --- a/MinimizingLateness/MinimizingLateness.java +++ b/MinimizingLateness/MinimizingLateness.java @@ -53,5 +53,6 @@ public static void main(String[] args) throws IOException { System.out.println(); System.out.println("Output Data : "); System.out.println(lateness); + in.close(); } } diff --git a/Misc/PalindromePrime.java b/Misc/PalindromePrime.java index b13a23d83792..77a918c32297 100644 --- a/Misc/PalindromePrime.java +++ b/Misc/PalindromePrime.java @@ -9,6 +9,7 @@ public static void main(String[] args) { // Main funtion System.out.println("Enter the quantity of First Palindromic Primes you want"); int n = in.nextInt(); // Input of how many first pallindromic prime we want functioning(n); // calling function - functioning + in.close(); } public static boolean prime(int num) { // checking if number is prime or not diff --git a/Others/Dijkshtra.java b/Others/Dijkshtra.java index c2b1558e88db..d964d0596718 100644 --- a/Others/Dijkshtra.java +++ b/Others/Dijkshtra.java @@ -80,5 +80,6 @@ else if (i != src) { System.out.print("-1" + " "); } } + in.close(); } } \ No newline at end of file diff --git a/Others/InsertDeleteInArray.java b/Others/InsertDeleteInArray.java index 40fd43b2e769..dfb702847275 100644 --- a/Others/InsertDeleteInArray.java +++ b/Others/InsertDeleteInArray.java @@ -44,5 +44,6 @@ public static void main(String[] args) { } for (i = 0; i < size2 - 1; i++) System.out.println(b[i]); + s.close(); } } diff --git a/Others/LowestBasePalindrome.java b/Others/LowestBasePalindrome.java index 97b445b2ff61..2f8831100d3d 100644 --- a/Others/LowestBasePalindrome.java +++ b/Others/LowestBasePalindrome.java @@ -29,6 +29,7 @@ public static void main(String[] args) { } System.out.println(n + " is a palindrome in base " + lowestBasePalindrome(n)); System.out.println(base2base(Integer.toString(n), 10, lowestBasePalindrome(n))); + in.close(); } /** diff --git a/Others/PerlinNoise.java b/Others/PerlinNoise.java index dbd0a86e4512..f0e7f63dae31 100644 --- a/Others/PerlinNoise.java +++ b/Others/PerlinNoise.java @@ -162,5 +162,6 @@ public static void main(String[] args) { System.out.println(); } + in.close(); } } diff --git a/Others/PowerOfTwoOrNot.java b/Others/PowerOfTwoOrNot.java index 349eb9de5807..8f0400133066 100644 --- a/Others/PowerOfTwoOrNot.java +++ b/Others/PowerOfTwoOrNot.java @@ -20,6 +20,7 @@ public static void main(String[] args) { } else { System.out.println("Number is not a power of two"); } + sc.close(); } @@ -32,5 +33,4 @@ public static void main(String[] args) { public static boolean checkIfPowerOfTwoOrNot(int number) { return number != 0 && ((number & (number - 1)) == 0); } - } diff --git a/Others/ReturnSubsequence.java b/Others/ReturnSubsequence.java index bb1b413afd1d..89e945f8261e 100644 --- a/Others/ReturnSubsequence.java +++ b/Others/ReturnSubsequence.java @@ -13,6 +13,7 @@ public static void main(String[] args) { for (int i = 0; i < subsequence.length; i++) { System.out.println(subsequence[i]); } + s.close(); } /** diff --git a/Others/RootPrecision.java b/Others/RootPrecision.java index 388f1b2ec7b6..71690a4b2591 100644 --- a/Others/RootPrecision.java +++ b/Others/RootPrecision.java @@ -14,6 +14,8 @@ public static void main(String[] args) { // P is precision value for eg - P is 3 in 2.564 and 5 in 3.80870. int P = scn.nextInt(); System.out.println(squareRoot(N, P)); + + scn.close(); } public static double squareRoot(int N, int P) { diff --git a/Others/SJF.java b/Others/SJF.java index e6b995f4846c..247f3da0989f 100644 --- a/Others/SJF.java +++ b/Others/SJF.java @@ -67,6 +67,7 @@ class Schedule { processes.add(p); burstAll += p.burstTime; } + in.close(); } diff --git a/Others/StackPostfixNotation.java b/Others/StackPostfixNotation.java index 01e4c8a8eb1c..2857199d0401 100644 --- a/Others/StackPostfixNotation.java +++ b/Others/StackPostfixNotation.java @@ -7,6 +7,7 @@ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String post = scanner.nextLine(); // Takes input with spaces in between eg. "1 21 +" System.out.println(postfixEvaluate(post)); + scanner.close(); } // Evaluates the given postfix expression string and returns the result. @@ -35,6 +36,7 @@ public static int postfixEvaluate(String exp) { // "+", "-", "*", "/" } } + tokens.close(); return s.pop(); } } diff --git a/Others/TopKWords.java b/Others/TopKWords.java index 840c3c2f7010..6cccfc27b95f 100644 --- a/Others/TopKWords.java +++ b/Others/TopKWords.java @@ -82,6 +82,7 @@ public static void main(String[] args) { for (int i = 0; i < k; i++) { System.out.println(list.get(list.size() - i - 1)); } + input.close(); } } diff --git a/Others/TowerOfHanoi.java b/Others/TowerOfHanoi.java index 2eca7fc744a0..7d35ed36d54f 100644 --- a/Others/TowerOfHanoi.java +++ b/Others/TowerOfHanoi.java @@ -22,5 +22,6 @@ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int numberOfDiscs = scanner.nextInt(); //input of number of discs on pole 1 shift(numberOfDiscs, "Pole1", "Pole2", "Pole3"); //Shift function called + scanner.close(); } } diff --git a/ciphers/Caesar.java b/ciphers/Caesar.java index 06319f79df49..cec0ddce0065 100644 --- a/ciphers/Caesar.java +++ b/ciphers/Caesar.java @@ -126,6 +126,7 @@ public static void main(String[] args) { case 'd': System.out.println("DECODED MESSAGE IS \n" + decode(message, shift)); } + input.close(); } } From d5ddc351d8bfa6f1a80bdc8f41b945b612ea8c08 Mon Sep 17 00:00:00 2001 From: Hassan Date: Tue, 28 Jan 2020 19:35:16 +0200 Subject: [PATCH 234/521] Simple Substitution Cipher Algorithm added. --- ciphers/SimpleSubstitutionCipher.java | 97 +++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 ciphers/SimpleSubstitutionCipher.java diff --git a/ciphers/SimpleSubstitutionCipher.java b/ciphers/SimpleSubstitutionCipher.java new file mode 100644 index 000000000000..983bc4f6d13c --- /dev/null +++ b/ciphers/SimpleSubstitutionCipher.java @@ -0,0 +1,97 @@ +package ciphers; + +import java.util.*; + +/** + * + * The simple substitution cipher is a cipher that has been in use for many hundreds of years + * (an excellent history is given in Simon Singhs 'the Code Book'). + * It basically consists of substituting every plaintext character for a different ciphertext character. + * It differs from the Caesar cipher in that the cipher alphabet is not simply the alphabet shifted, + * it is completely jumbled. + * + * @author Hassan Elseoudy + */ + +public class SimpleSubstitutionCipher { + + /** + * Encrypt text by replacing each element with its opposite character. + * + * @param message + * @param cipherSmall + * @return Encrypted message + */ + public static String encode(String message, String cipherSmall) { + String encoded = ""; + + // This map is used to encode + Map cipherMap = new HashMap(); + + char beginSmallLetter = 'a'; + char beginCapitalLetter = 'A'; + + cipherSmall = cipherSmall.toLowerCase(); + String cipherCapital = cipherSmall.toUpperCase(); + + // To handle Small and Capital letters + for(int i = 0; i < cipherSmall.length(); i++){ + cipherMap.put(beginSmallLetter++,cipherSmall.charAt(i)); + cipherMap.put(beginCapitalLetter++,cipherCapital.charAt(i)); + } + + for(int i = 0; i < message.length(); i++){ + if(Character.isAlphabetic(message.charAt(i))) + encoded += cipherMap.get(message.charAt(i)); + else + encoded += message.charAt(i); + } + + return encoded; + } + + /** + * Decrypt message by replacing each element with its opposite character in cipher. + * + * @param encryptedMessage + * @param cipherSmall + * @return message + */ + public static String decode(String encryptedMessage, String cipherSmall) { + String decoded = ""; + + + Map cipherMap = new HashMap(); + + char beginSmallLetter = 'a'; + char beginCapitalLetter = 'A'; + + cipherSmall = cipherSmall.toLowerCase(); + String cipherCapital = cipherSmall.toUpperCase(); + + for(int i = 0; i < cipherSmall.length(); i++){ + cipherMap.put(cipherSmall.charAt(i),beginSmallLetter++); + cipherMap.put(cipherCapital.charAt(i),beginCapitalLetter++); + } + + for(int i = 0; i < encryptedMessage.length(); i++){ + if(Character.isAlphabetic(encryptedMessage.charAt(i))) + decoded += cipherMap.get(encryptedMessage.charAt(i)); + else + decoded += encryptedMessage.charAt(i); + } + + return decoded; + } + + /** + * + * TODO remove main and make JUnit Testing + */ + public static void main(String[] args) { + String a = encode("defend the east wall of the castle","phqgiumeaylnofdxjkrcvstzwb"); + String b = decode(a,"phqgiumeaylnofdxjkrcvstzwb"); + System.out.println(b); + } + +} \ No newline at end of file From e21d0efd6ae46bf744eb4d4164a4ca2c5e376d7d Mon Sep 17 00:00:00 2001 From: nikhil kala Date: Wed, 29 Jan 2020 01:46:27 +0530 Subject: [PATCH 235/521] Update SimpleSubstitutionCipher.java --- ciphers/SimpleSubstitutionCipher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ciphers/SimpleSubstitutionCipher.java b/ciphers/SimpleSubstitutionCipher.java index 983bc4f6d13c..d9bae4f072c8 100644 --- a/ciphers/SimpleSubstitutionCipher.java +++ b/ciphers/SimpleSubstitutionCipher.java @@ -94,4 +94,4 @@ public static void main(String[] args) { System.out.println(b); } -} \ No newline at end of file +} From bf8845e8b59232389c96ba74acdd11397984221f Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 28 Jan 2020 20:17:13 +0000 Subject: [PATCH 236/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 50ae52c55844..46a9b06c04b1 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -5,6 +5,7 @@ * [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) * [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) * [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) + * [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) * [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) ## Conversions From 5aa05fdf2c2004c75ed1fc5424e4c29554e4d418 Mon Sep 17 00:00:00 2001 From: nikhil kala Date: Wed, 29 Jan 2020 01:50:50 +0530 Subject: [PATCH 237/521] Delete Dijkshtra.java Duplicate and wrongly named. --- Others/Dijkshtra.java | 85 ------------------------------------------- 1 file changed, 85 deletions(-) delete mode 100644 Others/Dijkshtra.java diff --git a/Others/Dijkshtra.java b/Others/Dijkshtra.java deleted file mode 100644 index d964d0596718..000000000000 --- a/Others/Dijkshtra.java +++ /dev/null @@ -1,85 +0,0 @@ -package Others; - -import java.util.Arrays; -import java.util.Scanner; -import java.util.Stack; - -/** - * @author Mayank K Jha - */ - -public class Dijkshtra { - - public static void main(String[] args) { - Scanner in = new Scanner(System.in); - - // n = Number of nodes or vertices - int n = in.nextInt(); - // m = Number of Edges - int m = in.nextInt(); - - // Adjacency Matrix - long[][] w = new long[n + 1][n + 1]; - - // Initializing Matrix with Certain Maximum Value for path b/w any two vertices - for (long[] row : w) { - Arrays.fill(row, 1000000L); - } - - /* From above,we Have assumed that,initially path b/w any two Pair of vertices is Infinite such that Infinite = 1000000l - For simplicity , We can also take path Value = Long.MAX_VALUE , but i have taken Max Value = 1000000l */ - - // Taking Input as Edge Location b/w a pair of vertices - for (int i = 0; i < m; i++) { - int x = in.nextInt(), y = in.nextInt(); - long cmp = in.nextLong(); - - // Comparing previous edge value with current value - Cycle Case - if (w[x][y] > cmp) { - w[x][y] = cmp; - w[y][x] = cmp; - } - } - - // Implementing Dijkshtra's Algorithm - Stack t = new Stack<>(); - int src = in.nextInt(); - - for (int i = 1; i <= n; i++) { - if (i != src) { - t.push(i); - } - } - - Stack p = new Stack<>(); - p.push(src); - w[src][src] = 0; - - while (!t.isEmpty()) { - int min = 989997979; - int loc = -1; - - for (int i = 0; i < t.size(); i++) { - w[src][t.elementAt(i)] = Math.min(w[src][t.elementAt(i)], w[src][p.peek()] + w[p.peek()][t.elementAt(i)]); - if (w[src][t.elementAt(i)] <= min) { - min = (int) w[src][t.elementAt(i)]; - loc = i; - } - } - p.push(t.elementAt(loc)); - t.removeElementAt(loc); - } - - // Printing shortest path from the given source src - for (int i = 1; i <= n; i++) { - if (i != src && w[src][i] != 1000000L) { - System.out.print(w[src][i] + " "); - } - // Printing -1 if there is no path b/w given pair of edges - else if (i != src) { - System.out.print("-1" + " "); - } - } - in.close(); - } -} \ No newline at end of file From 1f0f1a3cd9c604c5fad43bd16e708339e399b812 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 28 Jan 2020 20:21:07 +0000 Subject: [PATCH 238/521] updating DIRECTORY.md --- DIRECTORY.md | 1 - 1 file changed, 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 46a9b06c04b1..a8052bc883b7 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -142,7 +142,6 @@ * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) * [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) * [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) - * [Dijkshtra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkshtra.java) * [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) * [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) * [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) From 0bf21d6e2e86a7d6dd44a70461b91a86c1ab9add Mon Sep 17 00:00:00 2001 From: Hakan Arslan Date: Sat, 29 Feb 2020 15:39:13 +0300 Subject: [PATCH 239/521] bytesToHex function is changed beecause of required library is depracated on OpenJdk 11 --- ciphers/AESEncryption.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/ciphers/AESEncryption.java b/ciphers/AESEncryption.java index 871bd52e2d14..884109f9bdb7 100644 --- a/ciphers/AESEncryption.java +++ b/ciphers/AESEncryption.java @@ -8,7 +8,6 @@ import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; -import javax.xml.bind.DatatypeConverter; /** * This example program shows how AES encryption and decryption can be done in @@ -19,6 +18,8 @@ */ public class AESEncryption { + + private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); /** * 1. Generate a plain text for encryption 2. Get a secret key (printed in * hexadecimal form). In actual use this must by encrypted and kept safe. The @@ -103,12 +104,22 @@ public static String decryptText(byte[] byteCipherText, SecretKey secKey) throws /** * Convert a binary byte array into readable hex form - * + * Old library is deprecated on OpenJdk 11 and + * this is faster regarding other solution is using StringBuilder + * Credit + * {@link + * https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java/9855338#9855338} * @param hash * (in binary) * @return hexHash */ - private static String bytesToHex(byte[] hash) { - return DatatypeConverter.printHexBinary(hash); + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = HEX_ARRAY[v >>> 4]; + hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; + } + return new String(hexChars); } } From e5ad1f2ef0287426e4bef4fbc2aad6776d02bad5 Mon Sep 17 00:00:00 2001 From: Wendell Lucas <49886455+wendelllsc@users.noreply.github.com> Date: Tue, 17 Mar 2020 23:05:27 -0300 Subject: [PATCH 240/521] Using Try/catch and recursion Adding try/catch and recursion to optimize the code --- Maths/Factorial.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Maths/Factorial.java b/Maths/Factorial.java index 3feb43356129..61c82398bd12 100644 --- a/Maths/Factorial.java +++ b/Maths/Factorial.java @@ -16,13 +16,16 @@ public static void main(String[] args) { * @return the factorial of {@code n} */ public static long factorial(int n) { - if (n < 0) { - throw new ArithmeticException("n < 0"); //Dont work with less than 0 - } - long fac = 1; - for (int i = 1; i <= n; ++i) { - fac *= i; - } - return fac; //Return factorial + // Using recursion + try { + if (n == 0) { + return 1; // if n = 0, return factorial of n; + }else { + return n*factorial(n-1); // While N is greater than 0, call the function again, passing n-1 (Principle of factoring); + } + }catch (ArithmeticException e) { + System.out.println("Dont work with less than 0"); + } + return n; } } From 0eef7f4737b68ea4dd9daa4976eecd107a62c380 Mon Sep 17 00:00:00 2001 From: Alexandra Englert Date: Fri, 20 Mar 2020 21:09:57 +0100 Subject: [PATCH 241/521] Update DecimalToBinary.java Close ressource leak Scanner input --- Conversions/DecimalToBinary.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Conversions/DecimalToBinary.java b/Conversions/DecimalToBinary.java index cd84486ae812..ccd8c643fa9a 100644 --- a/Conversions/DecimalToBinary.java +++ b/Conversions/DecimalToBinary.java @@ -35,6 +35,7 @@ public static void conventionalConversion() { n /= 2; } //converting decimal to binary System.out.println("\tBinary number: " + b); + input.close(); } /** From 7a52313e218146eceb72a7c0fd86c03cb36aa7b2 Mon Sep 17 00:00:00 2001 From: Alexandra Englert Date: Fri, 20 Mar 2020 21:36:35 +0100 Subject: [PATCH 242/521] Update Cycles.java closing Scanner in --- DataStructures/Graphs/Cycles.java | 1 + 1 file changed, 1 insertion(+) diff --git a/DataStructures/Graphs/Cycles.java b/DataStructures/Graphs/Cycles.java index b6fd8b4c58c5..5e085ab7cd68 100644 --- a/DataStructures/Graphs/Cycles.java +++ b/DataStructures/Graphs/Cycles.java @@ -34,6 +34,7 @@ public Cycle() { end = in.nextInt(); adjacencyMatrix[start][end] = 1; } + in.close(); } From c480377c7e4e6bd4372c576cde0ec52a9c46bc55 Mon Sep 17 00:00:00 2001 From: Alexandra Englert Date: Fri, 20 Mar 2020 21:37:31 +0100 Subject: [PATCH 243/521] Update PrimMST.java removing unused import java.lang.* --- DataStructures/Graphs/PrimMST.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/DataStructures/Graphs/PrimMST.java b/DataStructures/Graphs/PrimMST.java index 32487feddefb..474893775870 100644 --- a/DataStructures/Graphs/PrimMST.java +++ b/DataStructures/Graphs/PrimMST.java @@ -1,7 +1,5 @@ package DataStructures.Graphs; -import java.lang.*; - /** * A Java program for Prim's Minimum Spanning Tree (MST) algorithm. * adjacency matrix representation of the graph From ecfbadc7892ffb9f6b66bf1d8460ff8480663613 Mon Sep 17 00:00:00 2001 From: Alexandra Englert Date: Fri, 20 Mar 2020 21:41:58 +0100 Subject: [PATCH 244/521] Update Cycles.java removing unused member variable finalCycles --- DataStructures/Graphs/Cycles.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Graphs/Cycles.java b/DataStructures/Graphs/Cycles.java index 5e085ab7cd68..0b0ae22d7e8d 100644 --- a/DataStructures/Graphs/Cycles.java +++ b/DataStructures/Graphs/Cycles.java @@ -10,7 +10,7 @@ class Cycle { private int[][] adjacencyMatrix; private boolean[] visited; ArrayList> cycles = new ArrayList>(); - private boolean[] finalCycles; + public Cycle() { Scanner in = new Scanner(System.in); From dd73b46a25d1182b59ed5e29e85386723156532b Mon Sep 17 00:00:00 2001 From: Alexandra Englert Date: Fri, 20 Mar 2020 21:56:35 +0100 Subject: [PATCH 245/521] Update Main.java fixing bug Program is causing a NoSuchElementException --- DataStructures/HashMap/Hashing/Main.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DataStructures/HashMap/Hashing/Main.java b/DataStructures/HashMap/Hashing/Main.java index 340f0760b2e5..9611b6025135 100644 --- a/DataStructures/HashMap/Hashing/Main.java +++ b/DataStructures/HashMap/Hashing/Main.java @@ -8,6 +8,7 @@ public static void main(String[] args) { int choice, key; HashMap h = new HashMap(7); + Scanner In = new Scanner(System.in); while (true) { System.out.println("Enter your Choice :"); @@ -15,9 +16,7 @@ public static void main(String[] args) { System.out.println("2. Delete Key"); System.out.println("3. Print Table"); System.out.println("4. Exit"); - - Scanner In = new Scanner(System.in); - + choice = In.nextInt(); switch (choice) { @@ -39,10 +38,11 @@ public static void main(String[] args) { break; } case 4: { + In.close(); return; } } - In.close(); + } } } \ No newline at end of file From c184e1cecbe4f7971ed3095053926aca2c4957d2 Mon Sep 17 00:00:00 2001 From: Alexandra Englert Date: Fri, 20 Mar 2020 22:17:01 +0100 Subject: [PATCH 246/521] Update RedBlackBST.java closing Scanner scan --- DataStructures/Trees/RedBlackBST.java | 1 + 1 file changed, 1 insertion(+) diff --git a/DataStructures/Trees/RedBlackBST.java b/DataStructures/Trees/RedBlackBST.java index 197c96321975..45501fd290e3 100644 --- a/DataStructures/Trees/RedBlackBST.java +++ b/DataStructures/Trees/RedBlackBST.java @@ -330,5 +330,6 @@ public void deleteDemo() { printTree(root); System.out.println("Pre order"); printTreepre(root); + scan.close(); } } \ No newline at end of file From 31d57c0471a6934058f902d1f500fad00441fc0c Mon Sep 17 00:00:00 2001 From: Alexandra Englert Date: Thu, 26 Mar 2020 16:52:53 +0100 Subject: [PATCH 247/521] Update RomanToInteger.java declaring serialVersionUID --- Conversions/RomanToInteger.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Conversions/RomanToInteger.java b/Conversions/RomanToInteger.java index 4563ce4a4a72..0672a1464bd3 100644 --- a/Conversions/RomanToInteger.java +++ b/Conversions/RomanToInteger.java @@ -4,7 +4,13 @@ public class RomanToInteger { - private static Map map = new HashMap() {{ + private static Map map = new HashMap() { + /** + * + */ + private static final long serialVersionUID = 87605733047260530L; + + { put('I', 1); put('V', 5); put('X', 10); From 7ef06c0b26431a9f5da8872d30112ee9b6f0e102 Mon Sep 17 00:00:00 2001 From: EAlexa Date: Tue, 7 Apr 2020 16:01:30 +0200 Subject: [PATCH 248/521] added type parameter --- DataStructures/Graphs/ConnectedComponent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DataStructures/Graphs/ConnectedComponent.java b/DataStructures/Graphs/ConnectedComponent.java index 7029a8d811f2..4582bfd4406f 100644 --- a/DataStructures/Graphs/ConnectedComponent.java +++ b/DataStructures/Graphs/ConnectedComponent.java @@ -108,7 +108,7 @@ public ArrayList depthFirstSearch(Node n, ArrayList visited) { public class ConnectedComponent { public static void main(String[] args) { - Graph graphChars = new Graph(); + Graph graphChars = new Graph<>(); // Graph 1 graphChars.addEdge('a', 'b'); @@ -123,7 +123,7 @@ public static void main(String[] args) { graphChars.addEdge('w', 'w'); - Graph graphInts = new Graph(); + Graph graphInts = new Graph<>(); // Graph 2 graphInts.addEdge(1, 2); From 3f34fb6b9818065d42b2a8ec2b888a3be24eb4d1 Mon Sep 17 00:00:00 2001 From: EAlexa Date: Tue, 7 Apr 2020 16:32:07 +0200 Subject: [PATCH 249/521] remove deprecated use of Character --- DataStructures/Buffers/CircularBuffer.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DataStructures/Buffers/CircularBuffer.java b/DataStructures/Buffers/CircularBuffer.java index ae047b81568f..a723f693089c 100644 --- a/DataStructures/Buffers/CircularBuffer.java +++ b/DataStructures/Buffers/CircularBuffer.java @@ -26,12 +26,15 @@ private int getTrueIndex(int i) { return i % _buffer_size; } + public Character readOutChar() { Character result = null; + //if we have data to read if (_readable_data.get() > 0) { - result = new Character(_buffer[getTrueIndex(_read_index)]); + + result = Character.valueOf(_buffer[getTrueIndex(_read_index)]); _readable_data.decrementAndGet(); _read_index++; } From 0c334a9487e8bf7e44cab8955f85c03335786f67 Mon Sep 17 00:00:00 2001 From: EAlexa Date: Tue, 7 Apr 2020 16:32:48 +0200 Subject: [PATCH 250/521] remove unused variable --- DataStructures/HashMap/Hashing/LinkedList.java | 1 - 1 file changed, 1 deletion(-) diff --git a/DataStructures/HashMap/Hashing/LinkedList.java b/DataStructures/HashMap/Hashing/LinkedList.java index 8c4ec0f732da..4953551f7040 100644 --- a/DataStructures/HashMap/Hashing/LinkedList.java +++ b/DataStructures/HashMap/Hashing/LinkedList.java @@ -12,7 +12,6 @@ public LinkedList() { public void insert(int data) { - Node temp = Head; Node newnode = new Node(data); size++; From fecfe9d705c9618e5cfa8d86c1e65ec6ac930e30 Mon Sep 17 00:00:00 2001 From: EAlexa Date: Tue, 7 Apr 2020 16:36:03 +0200 Subject: [PATCH 251/521] remove unused method --- DataStructures/Lists/CursorLinkedList.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/DataStructures/Lists/CursorLinkedList.java b/DataStructures/Lists/CursorLinkedList.java index 6e1caefc620b..b12794fd1067 100644 --- a/DataStructures/Lists/CursorLinkedList.java +++ b/DataStructures/Lists/CursorLinkedList.java @@ -4,6 +4,7 @@ public class CursorLinkedList { + private static class Node { T element; @@ -13,13 +14,8 @@ private static class Node { this.element = element; this.next = next; } - - boolean isEmpty() { - return element == null; - } } - private final int os; private int head; private final Node[] cursorSpace; @@ -27,6 +23,7 @@ boolean isEmpty() { private final static int CURSOR_SPACE_SIZE = 100; + { // init at loading time cursorSpace = new Node[CURSOR_SPACE_SIZE]; From 3629e32c0818c8e1dd6db5ecda4560973481de73 Mon Sep 17 00:00:00 2001 From: EAlexa Date: Tue, 7 Apr 2020 16:36:48 +0200 Subject: [PATCH 252/521] remove unused variable --- Misc/heap_sort.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Misc/heap_sort.java b/Misc/heap_sort.java index 5222be4093d1..cf44b2b5a5df 100644 --- a/Misc/heap_sort.java +++ b/Misc/heap_sort.java @@ -57,8 +57,7 @@ static void printArray(int[] arr) { // Driver program public static void main(String args[]) { int arr[] = {12, 11, 13, 5, 6, 7}; - int n = arr.length; - + heap_sort ob = new heap_sort(); ob.sort(arr); From c560e72201e5c8b8961c94bb822fad7444e0066b Mon Sep 17 00:00:00 2001 From: EAlexa Date: Tue, 7 Apr 2020 16:37:17 +0200 Subject: [PATCH 253/521] remove unnecessary SuppressWarning --- Sorts/MergeSort.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sorts/MergeSort.java b/Sorts/MergeSort.java index 2b15a9ce09b4..f15e7af4578f 100644 --- a/Sorts/MergeSort.java +++ b/Sorts/MergeSort.java @@ -20,7 +20,7 @@ class MergeSort implements SortAlgorithm { * @return sorted array */ @Override - @SuppressWarnings("unchecked") + public > T[] sort(T[] unsorted) { doSort(unsorted, 0, unsorted.length - 1); return unsorted; From b351c33ad381d95a658b2153c6f2b594170237ce Mon Sep 17 00:00:00 2001 From: EAlexa Date: Tue, 7 Apr 2020 16:48:57 +0200 Subject: [PATCH 254/521] close Reader --- DataStructures/Lists/SinglyLinkedList.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 1196851a3d9e..5fda2f5f87bd 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -120,9 +120,9 @@ public void deleteNth(int position) { cur = cur.next; } - Node destroy = cur.next; + //Node destroy = cur.next; cur.next = cur.next.next; - destroy = null; // clear to let GC do its work + //destroy = null; // clear to let GC do its work size--; } From 5ce4cc2696ae53a7c913d74a5c3272169038ea2c Mon Sep 17 00:00:00 2001 From: EAlexa Date: Tue, 7 Apr 2020 16:50:22 +0200 Subject: [PATCH 255/521] close Reader --- MinimizingLateness/MinimizingLateness.java | 1 + 1 file changed, 1 insertion(+) diff --git a/MinimizingLateness/MinimizingLateness.java b/MinimizingLateness/MinimizingLateness.java index 1438f6f3dbcc..46e6fb4e06d7 100644 --- a/MinimizingLateness/MinimizingLateness.java +++ b/MinimizingLateness/MinimizingLateness.java @@ -26,6 +26,7 @@ public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new FileReader("MinimizingLateness/lateness_data.txt")); String ch = in.readLine(); if (ch == null || ch.isEmpty()) { + in.close(); return; } int indexCount = Integer.parseInt(ch); From e7ddedb37c5dc7b807f8e0f95b73091b6f016ed9 Mon Sep 17 00:00:00 2001 From: Wesllhey Holanda Date: Fri, 10 Apr 2020 14:43:32 -0300 Subject: [PATCH 256/521] dynamic array data structure --- DataStructures/DynamicArray/DynamicArray.java | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 DataStructures/DynamicArray/DynamicArray.java diff --git a/DataStructures/DynamicArray/DynamicArray.java b/DataStructures/DynamicArray/DynamicArray.java new file mode 100644 index 000000000000..0a6a0723e2a1 --- /dev/null +++ b/DataStructures/DynamicArray/DynamicArray.java @@ -0,0 +1,158 @@ +package DataStructures.DynamicArray; + +import java.util.Arrays; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; +import java.util.Objects; +import java.util.function.Consumer; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +public class DynamicArray implements Iterable { + + private int capacity = 10; + + private int size = 0; + + private Object[] elements; + + public DynamicArray(final int capacity) { + this.capacity = capacity; + this.elements = new Object[this.capacity]; + } + + public DynamicArray() { + this.elements = new Object[this.capacity]; + } + + public int newCapacity() { + this.capacity <<= 1; + + return this.capacity; + } + + public void add(final E element) { + if (this.size == this.elements.length) + this.elements = Arrays.copyOf(this.elements, newCapacity()); + + this.elements[this.size] = element; + size++; + } + + public void put(final int index, E element) { + Objects.checkIndex(index, this.size); + + this.elements[index] = element; + } + + public E get(final int index) { + return getElement(index); + } + + public E remove(final int index) { + final E oldElement = getElement(index); + fastRemove(this.elements, index); + + return oldElement; + } + + public int size() { + return this.size; + } + + public boolean isEmpty() { + return this.size == 0; + } + + public Stream stream() { + return StreamSupport.stream(spliterator(), false); + } + + private void fastRemove(final Object[] elements, final int index) { + final int newSize = this.size - 1; + + if (newSize > index) + System.arraycopy(elements, index + 1, elements, index, newSize - index); + + elements[this.size = newSize] = null; + } + + private E getElement(final int index) { + Objects.checkIndex(index, this.size); + return (E) this.elements[index]; + } + + @Override + public String toString() { + return Arrays.toString(Arrays.stream(this.elements).filter(Objects::nonNull).toArray()); + } + + @Override + public Iterator iterator() { + return new DynamicArrayIterator(); + } + + private class DynamicArrayIterator implements Iterator { + + private int cursor; + + @Override + public boolean hasNext() { + return this.cursor != size; + } + + @Override + public E next() { + if (this.cursor > DynamicArray.this.size) throw new NoSuchElementException(); + + if (this.cursor > DynamicArray.this.elements.length) throw new ConcurrentModificationException(); + + final E element = DynamicArray.this.getElement(this.cursor); + + this.cursor++; + + return element; + } + + @Override + public void remove() { + if (this.cursor < 0) throw new IllegalStateException(); + + DynamicArray.this.remove(this.cursor); + + this.cursor--; + } + + @Override + public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); + + for (int i = 0; i < DynamicArray.this.size; i++) { + action.accept(DynamicArray.this.getElement(i)); + } + } + } + + public static void main(String[] args) { + DynamicArray names = new DynamicArray<>(); + names.add("Peubes"); + names.add("Marley"); + + for (String name : names) { + System.out.println(name); + } + + names.stream().forEach(System.out::println); + + System.out.println(names); + + System.out.println(names.size()); + + names.remove(0); + + for (String name : names) { + System.out.println(name); + } + } +} From 85c3c775e78b3e2b0e2e1bf503cd9c6c70756b74 Mon Sep 17 00:00:00 2001 From: markaster <61535772+markaster@users.noreply.github.com> Date: Sat, 11 Apr 2020 13:36:57 +0800 Subject: [PATCH 257/521] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index a20869d96300..3b7951527ab3 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 The Algorithms +Copyright (c) 2020 The Algorithms Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 338fced4d50598d1eac1dca6dad51475d9ea620a Mon Sep 17 00:00:00 2001 From: LittleFoot <2059416370@qq.com> Date: Thu, 16 Apr 2020 21:31:01 +0800 Subject: [PATCH 258/521] change Sorts/ShellSort.java --- Sorts/ShellSort.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java index 199f31a8c1ea..67070b1b6a00 100644 --- a/Sorts/ShellSort.java +++ b/Sorts/ShellSort.java @@ -22,10 +22,11 @@ public > T[] sort(T[] array) { for (; gap > 0; gap /= 3) { for (int i = gap; i < length; i++) { int j; - for (j = i; j >= gap && less(array[j], array[j - gap]); j -= gap) { + T temp = array[i]; + for (j = i; j >= gap && less(temp, array[j - gap]); j -= gap) { array[j] = array[j - gap]; } - array[j] = array[i]; + array[j] = temp; } } return array; From 3ef9fe71409fca25b782320dce90f89cef88d874 Mon Sep 17 00:00:00 2001 From: littleFoot1 <52392154+littleFoot1@users.noreply.github.com> Date: Thu, 16 Apr 2020 21:33:22 +0800 Subject: [PATCH 259/521] Update ShellSort.java --- Sorts/ShellSort.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java index 67070b1b6a00..b29119a0c3af 100644 --- a/Sorts/ShellSort.java +++ b/Sorts/ShellSort.java @@ -22,7 +22,7 @@ public > T[] sort(T[] array) { for (; gap > 0; gap /= 3) { for (int i = gap; i < length; i++) { int j; - T temp = array[i]; + T temp = array[i]; for (j = i; j >= gap && less(temp, array[j - gap]); j -= gap) { array[j] = array[j - gap]; } From fc8e36c6e319c87cefa270c16e76c64416344588 Mon Sep 17 00:00:00 2001 From: Moetez Skouri Date: Wed, 29 Apr 2020 19:07:09 +0100 Subject: [PATCH 260/521] added removeDuplicates function --- DataStructures/Lists/DoublyLinkedList.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index 677487e1d2b0..e1b0041dda39 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -160,6 +160,19 @@ else if (current == null) current.previous = newLink; // 1 <--> newLink <--> 2(current) <--> 3 } } + + public static void removeDuplicates(DoublyLinkedList l ) { + Link linkOne = l.head ; + while(linkOne.next != null) { // list is present + Link linkTwo = linkOne.next; // second link for comparison + while(linkTwo.next!= null) { + if(linkOne.value == linkTwo.value) // if there are duplicates values then + l.delete(linkTwo.value); // delete the link + linkTwo = linkTwo.next ; // go to next link + } + linkOne = linkOne.next; // go to link link to iterate the whole list again + } + } /** * Returns true if list is empty From 21bd91afabcfa259912ffb56c09926846f2cef86 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 3 May 2020 19:38:41 +0000 Subject: [PATCH 261/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index a8052bc883b7..ddcd59ba7f7d 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -32,6 +32,8 @@ * [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) * Buffers * [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) + * DynamicArray + * [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) * Graphs * [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) * [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) From b12aa3d3b881085273a6a738b29a437e2a634170 Mon Sep 17 00:00:00 2001 From: Alaa El Bouhdidi Date: Mon, 4 May 2020 09:46:31 +0200 Subject: [PATCH 262/521] Add a new sort algorithm, Sort/BitonicSort --- Sorts/BitonicSort.java | 88 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 Sorts/BitonicSort.java diff --git a/Sorts/BitonicSort.java b/Sorts/BitonicSort.java new file mode 100644 index 000000000000..195ae1712d48 --- /dev/null +++ b/Sorts/BitonicSort.java @@ -0,0 +1,88 @@ +package Sorts; + +/* Java program for Bitonic Sort. Note that this program +works only when size of input is a power of 2. */ +public class BitonicSort +{ + /* The parameter dir indicates the sorting direction, + ASCENDING or DESCENDING; if (a[i] > a[j]) agrees + with the direction, then a[i] and a[j] are + interchanged. */ + void compAndSwap(int a[], int i, int j, int dir) + { + if ( (a[i] > a[j] && dir == 1) || + (a[i] < a[j] && dir == 0)) + { + // Swapping elements + int temp = a[i]; + a[i] = a[j]; + a[j] = temp; + } + } + + /* It recursively sorts a bitonic sequence in ascending + order, if dir = 1, and in descending order otherwise + (means dir=0). The sequence to be sorted starts at + index position low, the parameter cnt is the number + of elements to be sorted.*/ + void bitonicMerge(int a[], int low, int cnt, int dir) + { + if (cnt>1) + { + int k = cnt/2; + for (int i=low; i1) + { + int k = cnt/2; + + // sort in ascending order since dir here is 1 + bitonicSort(a, low, k, 1); + + // sort in descending order since dir here is 0 + bitonicSort(a,low+k, k, 0); + + // Will merge wole sequence in ascending order + // since dir=1. + bitonicMerge(a, low, cnt, dir); + } + } + + /*Caller of bitonicSort for sorting the entire array + of length N in ASCENDING order */ + void sort(int a[], int N, int up) + { + bitonicSort(a, 0, N, up); + } + + /* A utility function to print array of size n */ + static void printArray(int arr[]) + { + int n = arr.length; + for (int i=0; i Date: Mon, 4 May 2020 13:23:33 +0000 Subject: [PATCH 263/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index ddcd59ba7f7d..eef10ec31b4b 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -185,6 +185,7 @@ * [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) ## Sorts + * [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) * [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) * [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) * [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) From d41fc152571f963cf8ca9e01345242c311e0bc72 Mon Sep 17 00:00:00 2001 From: VTolas <64403418+vtolas@users.noreply.github.com> Date: Mon, 4 May 2020 20:42:16 +0200 Subject: [PATCH 264/521] Create PrimeFactorization.java --- Maths/PrimeFactorization.java | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Maths/PrimeFactorization.java diff --git a/Maths/PrimeFactorization.java b/Maths/PrimeFactorization.java new file mode 100644 index 000000000000..9f647d3190c1 --- /dev/null +++ b/Maths/PrimeFactorization.java @@ -0,0 +1,35 @@ +package Maths; + +import java.lang.Math; +import java.util.Scanner; + +public class algorithm { + public static void main(String[] args){ + System.out.println("## all prime factors ##"); + Scanner scanner = new Scanner(System.in); + System.out.print("Enter a number: "); + int n = scanner.nextInt(); + System.out.print(("printing factors of " + n + " : ")); + pfactors(n); + } + public static void pfactors(int n){ + + while (n%2==0) + { + System.out.print(2 + " "); + n /= 2; + } + + for (int i=3; i<= Math.sqrt(n); i+=2) + { + while (n%i == 0) + { + System.out.print(i + " "); + n /= i; + } + } + + if(n > 2) + System.out.print(n); + } +} From e59fc81075caa871e6d58fa752f1acdc7bdc5bb1 Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 5 May 2020 00:13:08 +0200 Subject: [PATCH 265/521] Finish both AmicableNumbers and VampireNumbers --- Maths/VampireNumber.java | 94 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Maths/VampireNumber.java diff --git a/Maths/VampireNumber.java b/Maths/VampireNumber.java new file mode 100644 index 000000000000..c95189591634 --- /dev/null +++ b/Maths/VampireNumber.java @@ -0,0 +1,94 @@ +package Maths; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + n number theory, a vampire number (or true vampire number) is a composite natural number with an even number of digits, + that can be factored into two natural numbers each with half as many digits as the original number + and not both with trailing zeroes, where the two factors contain precisely + all the digits of the original number, in any order, counting multiplicity. + The first vampire number is 1260 = 21 × 60. + * * + *

+ * * link: https://en.wikipedia.org/wiki/Vampire_number + * *

+ *

+ * + */ + + + + + + + +public class VampireNumber { + + public static void main(String[] args) { + + test(10,1000); + } + + static void test(int startValue, int stopValue) { + int countofRes = 1; + StringBuilder res = new StringBuilder(); + + + for (int i = startValue; i <= stopValue; i++) { + for (int j = i; j <= stopValue; j++) { + // System.out.println(i+ " "+ j); + if (isVampireNumber(i, j,true)) { + countofRes++; + res.append("" + countofRes + ": = ( " + i + "," + j + " = " + i*j + ")" + "\n"); + } + } + } + System.out.println(res); + } + + + + + static boolean isVampireNumber(int a, int b, boolean noPseudoVamireNumbers ) { + + // this is for pseudoVampireNumbers pseudovampire number need not be of length n/2 digits for example + // 126 = 6 x 21 + if (noPseudoVamireNumbers) { + if (a * 10 <= b || b * 10 <= a) { + return false; + } + } + + String mulDigits = splitIntoDigits(a*b,0); + String faktorDigits = splitIntoDigits(a,b); + + return mulDigits.equals(faktorDigits); + } + + + +// methode to Split the numbers to Digits + static String splitIntoDigits(int num, int num2) { + + StringBuilder res = new StringBuilder(); + + ArrayList digits = new ArrayList<>(); + while (num > 0) { + digits.add(num%10); + num /= 10; + } + while (num2 > 0) { + digits.add(num2%10); + num2/= 10; + } + Collections.sort(digits); + for (int i : digits) { + res.append(i); + } + + + return res.toString(); + } +} \ No newline at end of file From 082f104978d1224feb75384d690f20b521299934 Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 5 May 2020 00:15:17 +0200 Subject: [PATCH 266/521] Finish both AmicableNumbers and VampireNumbers --- Maths/AmicableNumber.java | 87 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Maths/AmicableNumber.java diff --git a/Maths/AmicableNumber.java b/Maths/AmicableNumber.java new file mode 100644 index 000000000000..1d81a393a6ff --- /dev/null +++ b/Maths/AmicableNumber.java @@ -0,0 +1,87 @@ +package Maths; + +/** + * Amicable numbers are two different numbers so related + * that the sum of the proper divisors of each is equal to the other number. + * (A proper divisor of a number is a positive factor of that number other than the number itself. + * For example, the proper divisors of 6 are 1, 2, and 3.) + * A pair of amicable numbers constitutes an aliquot sequence of period 2. + * It is unknown if there are infinitely many pairs of amicable numbers. + * * + *

+ * * link: https://en.wikipedia.org/wiki/Amicable_numbers + * *

+ *

+ * Simple Example : (220,284) 220 is divisible by {1,2,4,5,10,11,20,22,44,55,110 } <- Sum = 284 + * 284 is divisible by -> 1,2,4,71,142 and the Sum of that is. Yes right you probably expected it 220 + */ + +public class AmicableNumber { + + public static void main(String[] args) { + + AmicableNumber.findAllInRange(1,3000); + /* Res -> Int Range of 1 till 3000there are 3Amicable_numbers These are 1: = ( 220,284) 2: = ( 1184,1210) + 3: = ( 2620,2924) So it worked */ + + } + + /** + * @param startValue + * @param stopValue + * @return + */ + static void findAllInRange(int startValue, int stopValue) { + + /* the 2 for loops are to avoid to double check tuple. For example (200,100) and (100,200) is the same calculation + * also to avoid is to check the number with it self. a number with itself is always a AmicableNumber + * */ + StringBuilder res = new StringBuilder(); + int countofRes = 0; + + for (int i = startValue; i < stopValue; i++) { + for (int j = i + 1; j <= stopValue; j++) { + if (isAmicableNumber(i, j)) { + countofRes++; + res.append("" + countofRes + ": = ( " + i + "," + j + ")" + "\t"); + } + } + } + res.insert(0, "Int Range of " + startValue + " till " + stopValue + " there are " + countofRes + " Amicable_numbers.These are \n "); + System.out.println(res.toString()); + } + + /** + * Check if {@code numberOne and numberTwo } are AmicableNumbers or not + * + * @param numberOne numberTwo + * @return {@code true} if {@code numberOne numberTwo} isAmicableNumbers otherwise false + */ + static boolean isAmicableNumber(int numberOne, int numberTwo) { + + return ((recursiveCalcOfDividerSum(numberOne, numberOne) == numberTwo && numberOne == recursiveCalcOfDividerSum(numberTwo, numberTwo))); + } + + /** + * calculated in recursive calls the Sum of all the Dividers beside it self + * + * @param number div = the next to test dividely by using the modulo operator + * @return sum of all the dividers + */ + static int recursiveCalcOfDividerSum(int number, int div) { + + if (div == 1) { + return 0; + } else if (number % --div == 0) { + return recursiveCalcOfDividerSum(number, div) + div; + } else { + return recursiveCalcOfDividerSum(number, div); + } + } + + + + + + +} From 59488a106392ba35abbf72fdf37a24a325ec9679 Mon Sep 17 00:00:00 2001 From: Moetez Skouri Date: Tue, 5 May 2020 00:39:49 +0100 Subject: [PATCH 267/521] implement search with search helper --- DataStructures/Trees/AVLTree.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/DataStructures/Trees/AVLTree.java b/DataStructures/Trees/AVLTree.java index b496be6961fa..2e7119604cf5 100644 --- a/DataStructures/Trees/AVLTree.java +++ b/DataStructures/Trees/AVLTree.java @@ -202,6 +202,29 @@ private void reheight(Node node) { } } + public boolean search(int key) { + Node result = searchHelper(this.root,key); + if(result != null) + return true ; + + return false ; + } + + private Node searchHelper(Node root, int key) + { + //root is null or key is present at root + if (root==null || root.key==key) + return root; + + // key is greater than root's key + if (root.key > key) + return searchHelper(root.left, key); // call the function on the node's left child + + // key is less than root's key then + //call the function on the node's right child as it is greater + return searchHelper(root.right, key); + } + public static void main(String[] args) { AVLTree tree = new AVLTree(); From 3b245025d33e40804e97e5baed48d9ac6b3d4f02 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Thu, 7 May 2020 07:04:08 +0000 Subject: [PATCH 268/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index eef10ec31b4b..2ff7d2a2fb5a 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -126,6 +126,7 @@ * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) + * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) ## MinimizingLateness * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) From 1c062e2c7a4377cb3145ae8983f98ef5eb30aa7a Mon Sep 17 00:00:00 2001 From: Vikrant Khedkar Date: Thu, 7 May 2020 19:30:58 +0530 Subject: [PATCH 269/521] added scanner in factorail program --- Maths/Factorial.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Maths/Factorial.java b/Maths/Factorial.java index 3feb43356129..4f0262aec85d 100644 --- a/Maths/Factorial.java +++ b/Maths/Factorial.java @@ -1,9 +1,12 @@ package Maths; +import java.util.*; //for importing scanner -//change around 'n' for different factorial results public class Factorial { public static void main(String[] args) { - int n = 5; + int n = 1; +Scanner sc= new Scanner(System.in); +System.out.println("Enter Number"); +n=sc.nextInt(); System.out.println(n + "! = " + factorial(n)); } From f44f2c176b1a2bf902c7bd74bfcdb1d8960f3104 Mon Sep 17 00:00:00 2001 From: Vikrant Khedkar Date: Thu, 7 May 2020 20:28:31 +0530 Subject: [PATCH 270/521] added comment in front of main method --- Maths/Factorial.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/Factorial.java b/Maths/Factorial.java index 4f0262aec85d..07704161f358 100644 --- a/Maths/Factorial.java +++ b/Maths/Factorial.java @@ -2,7 +2,7 @@ import java.util.*; //for importing scanner public class Factorial { - public static void main(String[] args) { + public static void main(String[] args) { //main method int n = 1; Scanner sc= new Scanner(System.in); System.out.println("Enter Number"); From f6d67253e3d272b35076d844c5c93fa86aa30cf0 Mon Sep 17 00:00:00 2001 From: Vikrant khedkar Date: Fri, 8 May 2020 10:38:05 +0530 Subject: [PATCH 271/521] Added indentation in the "main" function statement block --- Maths/Factorial.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Maths/Factorial.java b/Maths/Factorial.java index 07704161f358..2ade4132a4ff 100644 --- a/Maths/Factorial.java +++ b/Maths/Factorial.java @@ -3,11 +3,11 @@ public class Factorial { public static void main(String[] args) { //main method - int n = 1; -Scanner sc= new Scanner(System.in); -System.out.println("Enter Number"); -n=sc.nextInt(); - System.out.println(n + "! = " + factorial(n)); + int n = 1; + Scanner sc= new Scanner(System.in); + System.out.println("Enter Number"); + n=sc.nextInt(); + System.out.println(n + "! = " + factorial(n)); } //Factorial = n! = n1 * (n-1) * (n-2)*...1 From 4fef5da90928e5819663daccea28d46e93a9bf99 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 11 May 2020 03:20:49 +0000 Subject: [PATCH 272/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 2ff7d2a2fb5a..e77e30e84b82 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -109,6 +109,7 @@ * [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) + * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) @@ -127,6 +128,7 @@ * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) + * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) ## MinimizingLateness * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) From 979fa2327db414990d25833b1151648e13da57d3 Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Tue, 12 May 2020 16:43:04 -0500 Subject: [PATCH 273/521] Update AVLTree.java --- DataStructures/Trees/AVLTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Trees/AVLTree.java b/DataStructures/Trees/AVLTree.java index 2e7119604cf5..fb9e2cb34df9 100644 --- a/DataStructures/Trees/AVLTree.java +++ b/DataStructures/Trees/AVLTree.java @@ -202,7 +202,7 @@ private void reheight(Node node) { } } - public boolean search(int key) { + public boolean search(int key) { Node result = searchHelper(this.root,key); if(result != null) return true ; From bcf808a238399f320771bd63a4dcf38dfaca4abe Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Tue, 12 May 2020 17:01:38 -0500 Subject: [PATCH 274/521] Update VampireNumber.java --- Maths/VampireNumber.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Maths/VampireNumber.java b/Maths/VampireNumber.java index c95189591634..056ce681a4ae 100644 --- a/Maths/VampireNumber.java +++ b/Maths/VampireNumber.java @@ -31,7 +31,7 @@ public static void main(String[] args) { test(10,1000); } - static void test(int startValue, int stopValue) { + static void test(int startValue, int stopValue) { int countofRes = 1; StringBuilder res = new StringBuilder(); @@ -51,7 +51,7 @@ static void test(int startValue, int stopValue) { - static boolean isVampireNumber(int a, int b, boolean noPseudoVamireNumbers ) { + static boolean isVampireNumber(int a, int b, boolean noPseudoVamireNumbers ) { // this is for pseudoVampireNumbers pseudovampire number need not be of length n/2 digits for example // 126 = 6 x 21 @@ -70,7 +70,7 @@ static boolean isVampireNumber(int a, int b, boolean noPseudoVamireNumbers ) { // methode to Split the numbers to Digits - static String splitIntoDigits(int num, int num2) { + static String splitIntoDigits(int num, int num2) { StringBuilder res = new StringBuilder(); @@ -91,4 +91,4 @@ static String splitIntoDigits(int num, int num2) { return res.toString(); } -} \ No newline at end of file +} From 63e5ce4c8f7657a8d9713bd1d7f94485b07635f4 Mon Sep 17 00:00:00 2001 From: Maria Lungeanu Date: Thu, 14 May 2020 19:36:06 +0300 Subject: [PATCH 275/521] Fixed Error:(6, 8) java: class algorithm is public, should be declared in a file named algorithm.java. Inside file PrimeFactorization, the name of public class was wrong. --- Maths/PrimeFactorization.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/PrimeFactorization.java b/Maths/PrimeFactorization.java index 9f647d3190c1..a488bf8e990c 100644 --- a/Maths/PrimeFactorization.java +++ b/Maths/PrimeFactorization.java @@ -3,7 +3,7 @@ import java.lang.Math; import java.util.Scanner; -public class algorithm { +public class PrimeFactorization { public static void main(String[] args){ System.out.println("## all prime factors ##"); Scanner scanner = new Scanner(System.in); From 40620aea1b728c9a8fd1f931ec503660dd06e8c9 Mon Sep 17 00:00:00 2001 From: joshiujjawal22 Date: Mon, 18 May 2020 23:24:57 +0530 Subject: [PATCH 276/521] To find sum of triplets according to given value --- Others/3 sum.java | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Others/3 sum.java diff --git a/Others/3 sum.java b/Others/3 sum.java new file mode 100644 index 000000000000..3c008ff78360 --- /dev/null +++ b/Others/3 sum.java @@ -0,0 +1,48 @@ +package Others; + +import java.util.Scanner; +import java.util.Arrays; + +/** + * To find triplet equals to given sum in complexity O(n*log(n)) + * + * + * Array must be sorted + * + * @author Ujjawal Joshi + * @date 2020.05.18 + */ + + +class threesum{ + public static void main(String args[]) + { + Scanner sc =new Scanner(System.in); + int n=sc.nextInt(); //Length of an array + + int a[]=new int[n]; + + for(int i=0;i Date: Mon, 18 May 2020 23:35:06 +0530 Subject: [PATCH 277/521] Rotation of an array without using extra space --- ...on of array without using extra space.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Others/Rotation of array without using extra space.java diff --git a/Others/Rotation of array without using extra space.java b/Others/Rotation of array without using extra space.java new file mode 100644 index 000000000000..c25dbaefc8c9 --- /dev/null +++ b/Others/Rotation of array without using extra space.java @@ -0,0 +1,54 @@ +package Others; + +import java.util.*; + +/** + * Rotation of array without using extra space + * + * + * @author Ujjawal Joshi + * @date 2020.05.18 + */ + +class main{ + public static void main(String[] args) + { + Scanner sc=new Scanner(System.in); + int n=sc.nextInt(); + int a[][]=new int[n][n]; + + for(int i=0;i Date: Tue, 19 May 2020 23:20:48 +0800 Subject: [PATCH 278/521] Handles all corner cases --- Searches/Perfect BinarySearch | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Searches/Perfect BinarySearch diff --git a/Searches/Perfect BinarySearch b/Searches/Perfect BinarySearch new file mode 100644 index 000000000000..28cdcb5be543 --- /dev/null +++ b/Searches/Perfect BinarySearch @@ -0,0 +1,21 @@ + static int binarySearch(int[] arr, int target) { + int low = 0 ; + int high = arr.length - 1 ; + + while(low <= high) { + int mid =(low + high) / 2; + + if(arr[mid] == target) { + return mid; + } + else if(arr[mid] > target) { + high = mid - 1; + } + else { + low = mid + 1; + } + + } + return -1; + } + From 6818098a32c14b1c6f8d6bf08f58f6c22d30ecc5 Mon Sep 17 00:00:00 2001 From: CodingCookieRookie <38324769+CodingCookieRookie@users.noreply.github.com> Date: Tue, 19 May 2020 23:53:52 +0800 Subject: [PATCH 279/521] Update SelectionSort.java -Used compareTo -Used a local swap method --- Sorts/SelectionSort.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Sorts/SelectionSort.java b/Sorts/SelectionSort.java index 9b5b0cbcdd67..e6b7c8833f43 100644 --- a/Sorts/SelectionSort.java +++ b/Sorts/SelectionSort.java @@ -8,6 +8,17 @@ public class SelectionSort implements SortAlgorithm { + /** + * This method swaps the two elements in the array + * @param arr, i, j The array for the swap and + the indexes of the to-swap elements + */ + public void swap(T[] arr, int i, int j) { + T temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } + /** * This method implements the Generic Selection Sort * @@ -22,14 +33,14 @@ public > T[] sort(T[] arr) { int min = i; for (int j = i + 1; j < n; j++) { - if (SortUtils.less(arr[j], arr[min])) { + if (arr[min].compareTo(arr[j]) < 0) { min = j; } } // Swapping if index of min is changed if (min != i) { - SortUtils.swap(arr, i, min); + swap(arr, i, min); } } From 72258d4ffeca8f435322d1da5ac6572c273a7e4a Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Thu, 21 May 2020 03:16:36 +0530 Subject: [PATCH 280/521] Create GenericHeap --- DataStructures/Heaps/GenericHeap | 69 ++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 DataStructures/Heaps/GenericHeap diff --git a/DataStructures/Heaps/GenericHeap b/DataStructures/Heaps/GenericHeap new file mode 100644 index 000000000000..1a17022a9022 --- /dev/null +++ b/DataStructures/Heaps/GenericHeap @@ -0,0 +1,69 @@ +import java.util.*; + +public class GenericHeap >{ + ArrayList data=new ArrayList<>(); + HashMap map=new HashMap<>(); + public void add(T item) { + this.data.add(item); + map.put(item,this.data.size()-1);// + upHeapify(this.data.size()-1); + } + private void upHeapify(int ci) { + int pi=(ci-1)/2; + if(isLarger(this.data.get(ci),this.data.get(pi))>0) { + swap(pi,ci); + upHeapify(pi); + } + } + public void display() { + System.out.println(this.data); + } + public int size() { + return this.data.size(); + } + public boolean isEmpty() { + return this.size()==0; + } + public T remove() { + this.swap(0,this.size()-1); + T rv=this.data.remove(this.size()-1); + downHeapify(0); + map.remove(rv); + return rv; + } + private void downHeapify(int pi) { + int lci=2*pi+1; + int rci=2*pi+2; + int mini=pi; + if(lci0) { + mini=lci; + } + if(rci0) { + mini=rci; + } + if(mini!=pi) { + this.swap(pi,mini); + downHeapify(mini); + } + } + public T get() { + return this.data.get(0); + } + //t has higher property then return +ve + private int isLarger(T t,T o) { + return t.compareTo(o); + } + private void swap(int i,int j) { + T ith=this.data.get(i); + T jth=this.data.get(j); + this.data.set(i,jth); + this.data.set(j,ith); + map.put(ith,j); + map.put(jth,i); + } + public void updatePriority(T item) { + int index=map.get(item); + //because we enter lesser value then old vale + upHeapify(index); + } +} From 63b9e137caf745da13b765d38cdeb834b84df407 Mon Sep 17 00:00:00 2001 From: Vineet Rathor <35703327+THE-VR7@users.noreply.github.com> Date: Fri, 22 May 2020 02:28:42 +0530 Subject: [PATCH 281/521] Create BucketSort.java --- Sorts/BucketSort.java | 68 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Sorts/BucketSort.java diff --git a/Sorts/BucketSort.java b/Sorts/BucketSort.java new file mode 100644 index 000000000000..58127927ee58 --- /dev/null +++ b/Sorts/BucketSort.java @@ -0,0 +1,68 @@ + +import java.util.Random; + +public class Bucket_Sort +{ + static int[] sort(int[] sequence, int maxValue) + { + // Bucket Sort + int[] Bucket = new int[maxValue + 1]; + int[] sorted_sequence = new int[sequence.length]; + + for (int i = 0; i < sequence.length; i++) + Bucket[sequence[i]]++; + + int outPos = 0; + for (int i = 0; i < Bucket.length; i++) + for (int j = 0; j < Bucket[i]; j++) + sorted_sequence[outPos++] = i; + + return sorted_sequence; + } + + static void printSequence(int[] sorted_sequence) + { + for (int i = 0; i < sorted_sequence.length; i++) + System.out.print(sorted_sequence[i] + " "); + } + + static int maxValue(int[] sequence) + { + int maxValue = 0; + for (int i = 0; i < sequence.length; i++) + if (sequence[i] > maxValue) + maxValue = sequence[i]; + return maxValue; + } + + public static void main(String args[]) + { + System.out.println("Sorting of randomly generated numbers using BUCKET SORT"); + Random random = new Random(); + int N = 20; + int[] sequence = new int[N]; + + for (int i = 0; i < N; i++) + sequence[i] = Math.abs(random.nextInt(100)); + + int maxValue = maxValue(sequence); + + System.out.println("\nOriginal Sequence: "); + printSequence(sequence); + + System.out.println("\nSorted Sequence: "); + printSequence(sort(sequence, maxValue)); + } +} + +#Output: + +$ javac Bucket_Sort.java +$ java Bucket_Sort + +Sorting of randomly generated numbers using BUCKET SORT + +Original Sequence: +95 9 95 87 8 81 18 54 57 53 92 15 38 24 8 56 29 69 64 66 +Sorted Sequence: +8 8 9 15 18 24 29 38 53 54 56 57 64 66 69 81 87 92 95 95 From 36e30a011114e336d0e5bf6ea8d9e7129d5b3bda Mon Sep 17 00:00:00 2001 From: Prateek Kumar Oraon Date: Fri, 22 May 2020 03:53:05 +0530 Subject: [PATCH 282/521] String Matching using Finite Automata added in Others/StringMatchFiniteAutomata.java --- Others/StringMatchFiniteAutomata.java | 91 +++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Others/StringMatchFiniteAutomata.java diff --git a/Others/StringMatchFiniteAutomata.java b/Others/StringMatchFiniteAutomata.java new file mode 100644 index 000000000000..34eb60b70454 --- /dev/null +++ b/Others/StringMatchFiniteAutomata.java @@ -0,0 +1,91 @@ +/** + * @author Prateek Kumar Oraon (https://github.com/prateekKrOraon) + */ +import java.util.Scanner; + +//An implementaion of string matching using finite automata +public class StringMatchFiniteAutomata{ + + public static final int CHARS = 256; + public static int[][] FA; + public static Scanner scanner = null; + + public static void main(String[] args){ + + scanner = new Scanner(System.in); + System.out.println("Enter String"); + String text = scanner.nextLine(); + System.out.println("Enter pattern"); + String pat = scanner.nextLine(); + + searchPat(text, pat); + + scanner.close(); + + } + + public static void searchPat(String text, String pat){ + + int m = pat.length(); + int n = text.length(); + + FA = new int[m+1][CHARS]; + + computeFA(pat, m ,FA); + + int state = 0; + for(int i=0;i0; ns--){ + + if(pat.charAt(ns-1) == x){ + + for(int i=0; i Date: Fri, 22 May 2020 03:58:59 +0530 Subject: [PATCH 283/521] Added Rabin-Karp string matching algorithm in Others/RabinKarp.java --- Others/RabinKarp.java | 84 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 Others/RabinKarp.java diff --git a/Others/RabinKarp.java b/Others/RabinKarp.java new file mode 100644 index 000000000000..ba1e6869db0a --- /dev/null +++ b/Others/RabinKarp.java @@ -0,0 +1,84 @@ +/** + * @author Prateek Kumar Oraon (https://github.com/prateekKrOraon) + */ +import java.util.Scanner; +import java.lang.Math; + +//An implementation of Rabin-Karp string matching algorithm +//Program will simply end if there is no match +public class RabinKarp { + + public static Scanner scanner = null; + public final static int d = 256; + + public static void main(String[] args){ + + scanner = new Scanner(System.in); + System.out.println("Enter String"); + String text = scanner.nextLine(); + System.out.println("Enter pattern"); + String pattern = scanner.nextLine(); + + int q = 101; + searchPat(text,pattern,q); + + } + + private static void searchPat(String text, String pattern, int q) { + + int m = pattern.length(); + int n = text.length(); + int t = 0; + int p = 0; + int h = 1; + int j = 0; + int i = 0; + + h = (int)Math.pow(d,m-1)%q; + + for(i =0 ; i< m; i++){ + //hash value is calculated for each character and then added with the hash value of the next character for pattern + // as well as the text for length equal to the length of pattern + p = (d*p + pattern.charAt(i))%q; + t = (d*t + text.charAt(i))%q; + } + + for(i=0; i<=n-m;i++){ + + //if the calculated hash value of the pattern and text matches then + //all the characters of the pattern is matched with the text of length equal to length of the pattern + //if all matches then pattern exist in string + //if not then the hash value of the first character of the text is subtracted and hash value of the next character after the end + //of the evaluated characters is added + if(p==t){ + + //if hash value matches then the individual characters are matched + for(j=0;j Date: Fri, 22 May 2020 16:23:41 +0530 Subject: [PATCH 284/521] Created Graph Algos it contains Dijkstra, Prims, dft, bft, dfs, bfs and many more. --- DataStructures/Graphs/GraphAlgos | 437 +++++++++++++++++++++++++++++++ 1 file changed, 437 insertions(+) create mode 100644 DataStructures/Graphs/GraphAlgos diff --git a/DataStructures/Graphs/GraphAlgos b/DataStructures/Graphs/GraphAlgos new file mode 100644 index 000000000000..780a73e45540 --- /dev/null +++ b/DataStructures/Graphs/GraphAlgos @@ -0,0 +1,437 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import Heaps.GenericHeap; +public class Graph { + private class vertex{ + HashMap nbrs=new HashMap<>(); + } + HashMap vertcs; + public Graph(){ + vertcs=new HashMap<>(); + } + public int numVertex() { + return this.vertcs.size(); + } + public boolean containsVertex(String vname) { + return this.vertcs.containsKey(vname); + } + public void addVertex(String vname) { + + vertex vtx=new vertex(); + this.vertcs.put(vname,vtx); + } + public void removeVertex(String vname) { + vertex vtx=this.vertcs.get(vname); + ArrayList keys=new ArrayList<>(vtx.nbrs.keySet()); + for(String key:keys) { + vertex nbrvtx=this.vertcs.get(key); + nbrvtx.nbrs.remove(vname); + } + this.vertcs.remove(vname); + } + + public int numEdge() { + int count=0; + ArrayList keys=new ArrayList<>(this.vertcs.keySet()); + for(String key:keys) { + vertex vtx=this.vertcs.get(key); + count+=vtx.nbrs.size(); + } + return count/2; + } + public boolean containsEdge(String vname1,String vname2) { + vertex vtx1=this.vertcs.get(vname1); + vertex vtx2=this.vertcs.get(vname2); + if(vtx1==null||vtx2==null||!vtx1.nbrs.containsKey(vname2)) + return false; + return true; + } + public void addEdge(String vname1,String vname2,int cost) { + vertex vtx1=this.vertcs.get(vname1); + vertex vtx2=this.vertcs.get(vname2); + if(vtx1==null||vtx2==null||vtx1.nbrs.containsKey(vname2)) + return; + vtx1.nbrs.put(vname2,cost); + vtx2.nbrs.put(vname1,cost); + } + public void removeEdge(String vname1,String vname2) { + vertex vtx1=this.vertcs.get(vname1); + vertex vtx2=this.vertcs.get(vname2); + if(vtx1==null||vtx2==null||!vtx1.nbrs.containsKey(vname2)) + return; + vtx1.nbrs.remove(vname2); + vtx2.nbrs.remove(vname1); + } + + public void display() { + ArrayList keys=new ArrayList<>(this.vertcs.keySet()); + for(String key:keys) { + vertex vtx=this.vertcs.get(key); + System.out.println(key+" := "+vtx.nbrs); + } + } + + public boolean hasPath(String source ,String dest,HashMap processed) { + processed.put(source, true); + if(containsEdge(source,dest)) { + return true; + } + vertex vtx=this.vertcs.get(source); + ArrayList keys=new ArrayList<>(vtx.nbrs.keySet()); + for(String key:keys) { + if(!processed.containsKey(key) && hasPath(key,dest,processed)) + return true; + } + return false; + + } + private class pair{ + String vname; + String psf; + } + public boolean bfs(String source,String dest) { // breadth first search + HashMap processed=new HashMap<>(); + + LinkedList queue=new LinkedList<>(); + pair sp=new pair(); + sp.vname=source; + sp.psf=source; + queue.addLast(sp); + + while(!queue.isEmpty()) { + pair rp=queue.removeFirst(); + if(processed.containsKey(rp.vname)) + continue; + processed.put(rp.vname,true); + + if(containsEdge(rp.vname,dest)) { + System.out.println(rp.psf+dest); + return true; + } + vertex vtx=this.vertcs.get(rp.vname); + ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); + for(String nbr:nbrs) { + if(!processed.containsKey(nbr)) { + pair np=new pair(); + np.vname=nbr; + np.psf=rp.psf+nbr; + queue.addLast(np); + } + } + } + return false; + } + public boolean dfs(String source,String dest) { //deapth first search + LinkedList stack=new LinkedList<>(); + HashMap processed=new HashMap<>(); + pair sp=new pair(); + sp.vname=source; + sp.psf=source; + stack.addFirst(sp); + while(!stack.isEmpty()) { + pair rp=stack.removeFirst(); + if(processed.containsKey(rp.vname)) + continue; + processed.put(rp.vname,true); + if(containsEdge(rp.vname,dest)) { + System.out.println(rp.psf+dest); + return true; + } + vertex vtx=this.vertcs.get(rp.vname); + ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); + for(String nbr:nbrs) { + if(!processed.containsKey(nbr)) { + pair np=new pair(); + np.vname=nbr; + np.psf=rp.psf+nbr; + stack.addFirst(np); + } + } + + } + return false; + } + public void bft() { //breadth first traversal + HashMap processed=new HashMap<>(); + LinkedList queue=new LinkedList<>(); + ArrayList keys=new ArrayList<>(this.vertcs.keySet()); + for(String key:keys) { + if(processed.containsKey(key)) + continue; + pair sp=new pair(); + sp.vname=key; + sp.psf=key; + queue.addLast(sp); + + while(!queue.isEmpty()) { + pair rp=queue.removeFirst(); + if(processed.containsKey(rp.vname)) + continue; + processed.put(rp.vname,true); + + System.out.println(rp.vname+" via "+rp.psf); + + vertex vtx=this.vertcs.get(rp.vname); + ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); + for(String nbr:nbrs) { + if(!processed.containsKey(nbr)) { + pair np=new pair(); + np.vname=nbr; + np.psf=rp.psf+nbr; + queue.addLast(np); + } + } + } + } + } + public void dft() { //deapt first traversal + HashMap processed=new HashMap<>(); + LinkedList stack=new LinkedList<>(); + ArrayList keys=new ArrayList<>(this.vertcs.keySet()); + for(String key:keys) { + pair sp=new pair(); + sp.vname=key; + sp.psf=key; + stack.addFirst(sp); + + while(!stack.isEmpty()) { + pair rp=stack.removeFirst(); + if(processed.containsKey(rp.vname)) + continue; + processed.put(rp.vname,true); + + System.out.println(rp.vname+" via "+rp.psf); + + vertex vtx=this.vertcs.get(rp.vname); + ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); + for(String nbr:nbrs) { + if(!processed.containsKey(nbr)) { + pair np=new pair(); + np.vname=nbr; + np.psf=rp.psf+nbr; + stack.addFirst(np); + } + } + } + } + } + + + public boolean isCyclic() { + HashMap processed=new HashMap<>(); + LinkedList queue=new LinkedList<>(); + ArrayList keys=new ArrayList<>(this.vertcs.keySet()); + for(String key:keys) { + if(processed.containsKey(key)) + continue; + pair sp=new pair(); + sp.vname=key; + sp.psf=key; + queue.addLast(sp); + + while(!queue.isEmpty()) { + pair rp=queue.removeFirst(); + if(processed.containsKey(rp.vname)) + return true; + processed.put(rp.vname,true); + + vertex vtx=this.vertcs.get(rp.vname); + ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); + for(String nbr:nbrs) { + if(!processed.containsKey(nbr)) { + pair np=new pair(); + np.vname=nbr; + np.psf=rp.psf+nbr; + queue.addLast(np); + } + } + } + } + return false; + } + public boolean isConnected() { + int flag=0; + HashMap processed=new HashMap<>(); + LinkedList queue=new LinkedList<>(); + ArrayList keys=new ArrayList<>(this.vertcs.keySet()); + for(String key:keys) { + if(processed.containsKey(key)) + continue; + flag++; + pair sp=new pair(); + sp.vname=key; + sp.psf=key; + queue.addLast(sp); + + while(!queue.isEmpty()) { + pair rp=queue.removeFirst(); + if(processed.containsKey(rp.vname)) + continue; + processed.put(rp.vname,true); + + vertex vtx=this.vertcs.get(rp.vname); + ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); + for(String nbr:nbrs) { + if(!processed.containsKey(nbr)) { + pair np=new pair(); + np.vname=nbr; + np.psf=rp.psf+nbr; + queue.addLast(np); + } + } + } + } + if(flag>=2) + return false; + else + return true; + } + public boolean isTree() { + return !isCyclic()&&isConnected(); + } + public ArrayList> getConnectedComp() { + ArrayList> ans=new ArrayList<>(); + HashMap processed=new HashMap<>(); + LinkedList queue=new LinkedList<>(); + ArrayList keys=new ArrayList<>(this.vertcs.keySet()); + for(String key:keys) { + if(processed.containsKey(key)) + continue; + ArrayList subans=new ArrayList<>(); + pair sp=new pair(); + sp.vname=key; + sp.psf=key; + queue.addLast(sp); + + while(!queue.isEmpty()) { + pair rp=queue.removeFirst(); + if(processed.containsKey(rp.vname)) + continue; + processed.put(rp.vname,true); + + subans.add(rp.vname); + + vertex vtx=this.vertcs.get(rp.vname); + ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); + for(String nbr:nbrs) { + if(!processed.containsKey(nbr)) { + pair np=new pair(); + np.vname=nbr; + np.psf=rp.psf+nbr; + queue.addLast(np); + } + } + } + ans.add(subans); + } + return ans; + } + private class PrimsPair implements Comparable{ + String vname; + String acqvname; + int cost; + public int compareTo(PrimsPair o) { + return o.cost-this.cost; + } + + } + public Graph prims() { + HashMap map=new HashMap<>(); + GenericHeap heap=new GenericHeap<>(); + Graph mst=new Graph(); + for(String vrtx:this.vertcs.keySet()) { + PrimsPair np=new PrimsPair(); + np.acqvname=null; + np.vname=vrtx; + np.cost=Integer.MAX_VALUE; + heap.add(np); + map.put(vrtx, np); + } + while(!heap.isEmpty()) { + PrimsPair rp=heap.remove(); + map.remove(rp.vname); + + if(rp.acqvname==null) { + mst.addVertex(rp.vname); + }else { + mst.addVertex(rp.vname); + mst.addEdge(rp.vname, rp.acqvname, rp.cost); + } + + for(String nbr:this.vertcs.get(rp.vname).nbrs.keySet()) { + if(map.containsKey(nbr)) { + //old cost that is from diff path stored in map + int oc=map.get(nbr).cost; + // cost that present vname need cost to go to nbr + int nc=this.vertcs.get(rp.vname).nbrs.get(nbr); + if(nc{ + String vname; + String psf; + int cost; + public int compareTo(DijktsraPair o) { + return o.cost-this.cost; + } + + } + public HashMap Dijktsra(String source) { + HashMap map=new HashMap<>(); + GenericHeap heap=new GenericHeap<>(); + HashMap ans =new HashMap<>(); + for(String vrtx:this.vertcs.keySet()) { + DijktsraPair np=new DijktsraPair(); + np.psf=""; + np.vname=vrtx; + np.cost=Integer.MAX_VALUE; + if(vrtx==source) { + np.cost=0; + np.psf=source; + } + heap.add(np); + map.put(vrtx, np); + } + while(!heap.isEmpty()) { + DijktsraPair rp=heap.remove(); + map.remove(rp.vname); + + ans.put(rp.vname,rp.cost); + + for(String nbr:this.vertcs.get(rp.vname).nbrs.keySet()) { + if(map.containsKey(nbr)) { + //old cost that is from diff path stored in map + int oc=map.get(nbr).cost; + // cost that present vname need cost to go to nbr + int nc=rp.cost+this.vertcs.get(rp.vname).nbrs.get(nbr); + if(nc Date: Sat, 23 May 2020 05:30:43 +0530 Subject: [PATCH 285/521] Create SinglyLinkedList --- DataStructures/Lists/SinglyLinkedList | 101 ++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 DataStructures/Lists/SinglyLinkedList diff --git a/DataStructures/Lists/SinglyLinkedList b/DataStructures/Lists/SinglyLinkedList new file mode 100644 index 000000000000..0b51813037f4 --- /dev/null +++ b/DataStructures/Lists/SinglyLinkedList @@ -0,0 +1,101 @@ +package LinkedList; +import java.util.*; +import java.lang.*; +import java.io.*; +class LinkedList { + private class Node{ + int data; + Node next; + + Node(int data) { + this.data = data; + this.next = null; + } + } + public Node head = null; + public Node tail = null; + private int size=0; + + public void addLast(int data) { + Node newNode = new Node(data); + + if(this.head == null) { + this.head = newNode; + this.tail = newNode; + this.size++; + } + else { + this.tail.next = newNode; + this.tail = newNode; + this.size++; + } + } + + + public void display() { + Node current = this.head; + if(this.head == null) { + return; + } + while(current != null) { + System.out.print(current.data + " "); + current = current.next; + } + System.out.println(); + } + + public void formLL2(LinkedList LL1) { + Node current=LL1.head; + while(current.next!=null&¤t.next.next!=null) { + int sum=current.data+current.next.next.data; + this.addLast(sum); + current=current.next.next; + } + } + public void formLL3(LinkedList LL1) { + Node current=LL1.head.next; + while(current.next!=null&¤t.next.next!=null) { + int sum=current.data+current.next.next.data; + this.addLast(sum); + current=current.next.next; + } + } + public Node mid() { + Node slow=this.head; + Node fast=this.head; + while(fast.next!=null && fast.next.next!=null) { + slow=slow.next; + fast=fast.next.next; + } + return slow; + } + public Node midValue() { + int sum=this.head.data+this.tail.data; + Node mid=new Node(sum); + return mid; + } + public void formRes(LinkedList LL1,LinkedList LL2,LinkedList LL3,Node MID) { + Node LL1mid=LL1.mid(); + Node currentLL1=LL1.head; + Node currentLL2=LL2.head; + Node currentLL3=LL3.head; + while(currentLL1!=null) { + this.addLast(currentLL1.data); + + if(currentLL2!=null) { + this.addLast(currentLL2.data); + currentLL2=currentLL2.next; + }else if(currentLL1.equals(LL1mid)) { + this.addLast(MID.data); + } + else if(currentLL2==null&¤tLL3!=null) { + this.addLast(currentLL3.data); + currentLL3=currentLL3.next; + } + currentLL1=currentLL1.next; + } + } + public void Size() { + System.out.println(this.size); + } + } From 4842a4ca61d4721aa48af740e483569d3c304a07 Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Sat, 23 May 2020 05:32:30 +0530 Subject: [PATCH 286/521] Update and rename SinglyLinkedList to ListAddnFun --- DataStructures/Lists/{SinglyLinkedList => ListAddnFun} | 1 - 1 file changed, 1 deletion(-) rename DataStructures/Lists/{SinglyLinkedList => ListAddnFun} (99%) diff --git a/DataStructures/Lists/SinglyLinkedList b/DataStructures/Lists/ListAddnFun similarity index 99% rename from DataStructures/Lists/SinglyLinkedList rename to DataStructures/Lists/ListAddnFun index 0b51813037f4..47553e184358 100644 --- a/DataStructures/Lists/SinglyLinkedList +++ b/DataStructures/Lists/ListAddnFun @@ -1,4 +1,3 @@ -package LinkedList; import java.util.*; import java.lang.*; import java.io.*; From ef2be071b09617df3f4354920d99d17dc9561feb Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Sat, 23 May 2020 05:33:40 +0530 Subject: [PATCH 287/521] Create AVLSimple --- DataStructures/Trees/AVLSimple | 106 +++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 DataStructures/Trees/AVLSimple diff --git a/DataStructures/Trees/AVLSimple b/DataStructures/Trees/AVLSimple new file mode 100644 index 000000000000..1f2c2bd6aba2 --- /dev/null +++ b/DataStructures/Trees/AVLSimple @@ -0,0 +1,106 @@ +public class AVLTree { + private class Node{ + int data; + int height; + Node left; + Node right; + Node(int data){ + this.data=data; + this.height=1; + } + + } + private Node root; + public void insert(int data) { + this.root=insert(this.root,data); + } + private Node insert(Node node,int item) { + if(node==null) { + Node add=new Node(item); + return add; + } + if(node.data>item) { + node.left=insert(node.left,item); + } + if(node.data1&&itemnode.right.data) + return leftRotate(node); + //RL case + if(bf<-1&&item1&&item>node.left.data) { + node.left=leftRotate(node.left); + return rightRotate(node); + } + + return node; + } + public void display() { + this.display(this.root); + System.out.println(this.root.height); + } + private void display (Node node) { + String str=""; + if(node.left!=null) + str+=node.left.data+"=>"; + else + str+="END=>"; + str+=node.data+""; + if(node.right!=null) + str+="<="+node.right.data; + else + str+="<=END"; + System.out.println(str); + if(node.left!=null) + display(node.left); + if(node.right!=null) + display(node.right); + } + private int height(Node node) { + if(node==null) { + return 0; + } + return node.height; + + } + private int bf(Node node) { + if(node==null) + return 0; + return height(node.left)-height(node.right); + } + + private Node rightRotate(Node c) { + Node b=c.left; + Node T3=b.right; + + b.right=c; + c.left=T3; + c.height=Math.max(height(c.left),height(c.right))+1; + b.height=Math.max(height(b.left),height(b.right))+1; + return b; + + } + private Node leftRotate(Node c) { + Node b=c.right; + Node T3=b.left; + + b.left=c; + c.right=T3; + c.height=Math.max(height(c.left),height(c.right))+1; + b.height=Math.max(height(b.left),height(b.right))+1; + return b; + + } + +} From 07aee8ba8129af1310b9e4fd08834214439f940c Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Sat, 23 May 2020 05:34:56 +0530 Subject: [PATCH 288/521] Create BoardPath --- DynamicProgramming/BoardPath | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 DynamicProgramming/BoardPath diff --git a/DynamicProgramming/BoardPath b/DynamicProgramming/BoardPath new file mode 100644 index 000000000000..4b471a88ed64 --- /dev/null +++ b/DynamicProgramming/BoardPath @@ -0,0 +1,52 @@ + +public class BoardPath { + public static long startTime; + public static long endTime; + public static void startAlgo() { + startTime=System.currentTimeMillis(); + } + public static long endAlgo() { + endTime=System.currentTimeMillis(); + return endTime-startTime; + } + public static int bpR(int start,int end){ + if(start==end) { + return 1; + } + else if(start>end) + return 0; + int count=0; + for(int dice=1;dice<=6;dice++) { + count+=bpR(start+dice,end); + } + return count; + } + public static int bpRS(int curr,int end,int strg[]){ + if(curr==end) { + return 1; + } + else if(curr>end) + return 0; + if(strg[curr]!=0) + return strg[curr]; + int count=0; + for(int dice=1;dice<=6;dice++) { + count+=bpRS(curr+dice,end,strg); + } + strg[curr]=count; + return count; + } + public static int bpIS(int curr,int end,int[]strg){ + strg[end]=1; + for(int i=end-1;i>=0;i--) { + int count=0; + for(int dice=1;dice<=6&&dice+i Date: Sat, 23 May 2020 05:35:47 +0530 Subject: [PATCH 289/521] Create CountNumBinaryStrings --- DynamicProgramming/CountNumBinaryStrings | 69 ++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 DynamicProgramming/CountNumBinaryStrings diff --git a/DynamicProgramming/CountNumBinaryStrings b/DynamicProgramming/CountNumBinaryStrings new file mode 100644 index 000000000000..c71fbd63c682 --- /dev/null +++ b/DynamicProgramming/CountNumBinaryStrings @@ -0,0 +1,69 @@ +public class CountNumBinaryStr { + public static long startTime; + public static long endTime; + public static void startAlgo() { + startTime=System.currentTimeMillis(); + } + public static long endAlgo() { + endTime=System.currentTimeMillis(); + return endTime-startTime; + } + public static int numStrIS(int n) { + int[] zeros=new int[n]; + int []ones=new int[n]; + //seed + zeros[0]=1; + ones[0]=1; + for(int i=1;i Date: Sat, 23 May 2020 05:54:34 +0530 Subject: [PATCH 290/521] Delete LinkedList.java --- .../HashMap/Hashing/LinkedList.java | 63 ------------------- 1 file changed, 63 deletions(-) delete mode 100644 DataStructures/HashMap/Hashing/LinkedList.java diff --git a/DataStructures/HashMap/Hashing/LinkedList.java b/DataStructures/HashMap/Hashing/LinkedList.java deleted file mode 100644 index 4953551f7040..000000000000 --- a/DataStructures/HashMap/Hashing/LinkedList.java +++ /dev/null @@ -1,63 +0,0 @@ -package DataStructures.HashMap.Hashing; - -class LinkedList { - - private Node Head; - private int size; - - public LinkedList() { - Head = null; - size = 0; - } - - public void insert(int data) { - - Node newnode = new Node(data); - - size++; - - if(Head == null) { - Head = newnode; - } - else { - newnode.next = Head; - Head = newnode; - } - } - - public void delete(int data) { - if(size == 0) { - System.out.println("UnderFlow!"); - return; - } - - else { - Node curr = Head; - if (curr.data == data) { - Head = curr.next; - size--; - return; - } - else { - - while(curr.next.next != null) { - if(curr.next.data == data){ - curr.next = curr.next.next; - return; - } - } - - System.out.println("Key not Found"); - } - } - } - - public void display() { - Node temp = Head; - while(temp != null) { - System.out.printf("%d ",temp.data); - temp = temp.next; - } - System.out.println(); - } -} \ No newline at end of file From 3a234f0914198b6477445426a565c99e3dacae34 Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Sat, 23 May 2020 05:56:23 +0530 Subject: [PATCH 291/521] Delete Node.java --- DataStructures/HashMap/Hashing/Node.java | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 DataStructures/HashMap/Hashing/Node.java diff --git a/DataStructures/HashMap/Hashing/Node.java b/DataStructures/HashMap/Hashing/Node.java deleted file mode 100644 index 74ab01f9d2a9..000000000000 --- a/DataStructures/HashMap/Hashing/Node.java +++ /dev/null @@ -1,11 +0,0 @@ -package DataStructures.HashMap.Hashing; - -class Node { - int data; - Node next; - - public Node(int data) { - this.data = data; - this.next = null; - } -} \ No newline at end of file From 01d5814557dbe674886def8ceef86208c8994bbc Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Sat, 23 May 2020 05:57:55 +0530 Subject: [PATCH 292/521] Create Intersection --- DataStructures/HashMap/Hashing/Intersection | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 DataStructures/HashMap/Hashing/Intersection diff --git a/DataStructures/HashMap/Hashing/Intersection b/DataStructures/HashMap/Hashing/Intersection new file mode 100644 index 000000000000..cfe1f74d73eb --- /dev/null +++ b/DataStructures/HashMap/Hashing/Intersection @@ -0,0 +1,37 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Scanner; +import java.util.Set; + +public class Intersection { + + public static ArrayList Main(int arr[],int arr2[]) { + HashMap hmap=new HashMap<>(); + HashMap hmap2=new HashMap<>(); + for(int i=0;i res=new ArrayList<>(); + for(int i=0;i0) { + int val=hmap.get(arr2[i]); + hmap.put(arr2[i],val-1); + res.add(arr2[i]); + } + + } + return res; + } + public Intersection() { + + } + + + +} From ed497cec3782086f6834c410af31f21b51778732 Mon Sep 17 00:00:00 2001 From: Vineet Rathor <35703327+THE-VR7@users.noreply.github.com> Date: Sat, 23 May 2020 13:16:09 +0530 Subject: [PATCH 293/521] Update BucketSort.java --- Sorts/BucketSort.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Sorts/BucketSort.java b/Sorts/BucketSort.java index 58127927ee58..7556faf57406 100644 --- a/Sorts/BucketSort.java +++ b/Sorts/BucketSort.java @@ -55,6 +55,8 @@ public static void main(String args[]) } } + +/* #Output: $ javac Bucket_Sort.java @@ -66,3 +68,4 @@ public static void main(String args[]) 95 9 95 87 8 81 18 54 57 53 92 15 38 24 8 56 29 69 64 66 Sorted Sequence: 8 8 9 15 18 24 29 38 53 54 56 57 64 66 69 81 87 92 95 95 +*/ From ce04b7fb5de43cf17ce709cb6fcd98300dcde918 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sat, 23 May 2020 09:43:52 +0000 Subject: [PATCH 294/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index e77e30e84b82..aee8eea6f2a2 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -163,6 +163,7 @@ * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Others/PowerOfTwoOrNot.java) * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) + * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) @@ -172,6 +173,7 @@ * [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) * [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) * [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) + * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) From 1ef46dbfd49245ba7c6b5adf29b914e3d4db8b2f Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Mon, 25 May 2020 02:50:24 +0530 Subject: [PATCH 295/521] Update GraphAlgos --- DataStructures/Graphs/GraphAlgos | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/DataStructures/Graphs/GraphAlgos b/DataStructures/Graphs/GraphAlgos index 780a73e45540..19938c48f042 100644 --- a/DataStructures/Graphs/GraphAlgos +++ b/DataStructures/Graphs/GraphAlgos @@ -1,3 +1,53 @@ +package DataStructures.Graphs; +/* +Implementation of graph by using hashmap for vertices of class which contains hashmap for vertex and then algos like prims dijktsra ,depth for search and traversal ,breadth for search and traversal ,algo for cycle present or not ,connected or not ,if not connected then connect it +Test case +Graph gp=new Graph(); + gp.addVertex("A"); + gp.addVertex("B"); + gp.addVertex("C"); + gp.addVertex("D"); + gp.addVertex("E"); + gp.addVertex("F"); + gp.addVertex("G"); + gp.addEdge("A", "B", 2); + gp.addEdge("A", "D", 10); + gp.addEdge("B", "C", 3); + gp.addEdge("C", "D", 1); + gp.addEdge("D", "E", 8); + gp.addEdge("E", "F", 5); + gp.addEdge("E", "G", 6); + gp.addEdge("F", "G", 4); + +// gp.display(); +// System.out.println(gp.numVertex()); +// System.out.println(gp.numEdge()); +// System.out.println(gp.containsEdge("A", "C")); +// +// System.out.println(gp.containsEdge("E", "F")); +// gp.removeEdge("D", "E"); +// gp.display(); +// gp.removeVertex("F"); +// gp.addVertex("F"); +// gp.display(); +// System.out.println(gp.hasPath("A", "F", new HashMap<>())); +// System.out.println(gp.dfs("A", "F")); +// gp.bft(); +// gp.dft(); +// gp.removeEdge("B","C"); +// gp.removeEdge("F","G"); +// System.out.println(gp.isConnected()); +// System.out.println(gp.isCyclic()); +// System.out.println(gp.isTree()); +// System.out.println(gp.getConnectedComp()); +// gp.prims().display(); + System.out.println(gp.Dijktsra("A")); + + + +*/ + + import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; From a5f42e293bfbe2c16efdef8c837bf2e36dcc7750 Mon Sep 17 00:00:00 2001 From: Maria Lungeanu Date: Mon, 25 May 2020 00:21:28 +0300 Subject: [PATCH 296/521] Fixed Error:(6, 8) java: class algorithm is public, should be declared in a file named algorithm.java. Inside file PrimeFactorization, the name of public class was wrong. --- Conversions/DecimalToBinary.java | 4 +- Conversions/OctalToHexadecimal.java | 8 +- DataStructures/DynamicArray/DynamicArray.java | 4 +- DataStructures/Graphs/BellmanFord.java | 2 +- DataStructures/Graphs/MatrixGraphs.java | 3 +- DataStructures/Heaps/HeapElement.java | 18 +- DataStructures/Heaps/MaxHeap.java | 8 +- DataStructures/Heaps/MinHeap.java | 8 +- DataStructures/Lists/CircleLinkedList.java | 2 +- DataStructures/Lists/DoublyLinkedList.java | 12 +- DataStructures/Stacks/NodeStack.java | 4 +- DataStructures/Trees/LevelOrderTraversal.java | 4 +- .../Trees/LevelOrderTraversalQueue.java | 4 +- DataStructures/Trees/ValidBSTOrNot.java | 3 +- .../LongestIncreasingSubsequence.java | 2 +- .../MatrixChainMultiplication.java | 2 +- Maths/GCD.java | 2 +- Others/Dijkstra.java | 409 ++++++++++-------- Others/TopKWords.java | 3 +- Others/TowerOfHanoi.java | 2 +- Searches/IterativeBinarySearch.java | 2 +- Sorts/QuickSort.java | 2 +- ciphers/Caesar.java | 2 + ciphers/ColumnarTranspositionCipher.java | 2 +- divideconquer/ClosestPair.java | 19 +- 25 files changed, 293 insertions(+), 238 deletions(-) diff --git a/Conversions/DecimalToBinary.java b/Conversions/DecimalToBinary.java index ccd8c643fa9a..4dd1ba4f4414 100644 --- a/Conversions/DecimalToBinary.java +++ b/Conversions/DecimalToBinary.java @@ -27,7 +27,7 @@ public static void main(String args[]) { public static void conventionalConversion() { int n, b = 0, c = 0, d; Scanner input = new Scanner(System.in); - System.out.printf("Conventional conversion.\n\tEnter the decimal number: "); + System.out.printf("Conventional conversion.%n Enter the decimal number: "); n = input.nextInt(); while (n != 0) { d = n % 2; @@ -46,7 +46,7 @@ public static void conventionalConversion() { public static void bitwiseConversion() { int n, b = 0, c = 0, d; Scanner input = new Scanner(System.in); - System.out.printf("Bitwise conversion.\n\tEnter the decimal number: "); + System.out.printf("Bitwise conversion.%n Enter the decimal number: "); n = input.nextInt(); while (n != 0) { d = (n & 1); diff --git a/Conversions/OctalToHexadecimal.java b/Conversions/OctalToHexadecimal.java index dd8d877109b5..4f15c488237b 100644 --- a/Conversions/OctalToHexadecimal.java +++ b/Conversions/OctalToHexadecimal.java @@ -15,7 +15,7 @@ public class OctalToHexadecimal { * @param s The Octal Number * @return The Decimal number */ - public static int OctToDec(String s) { + public static int octToDec(String s) { int i = 0; for (int j = 0; j < s.length(); j++) { char num = s.charAt(j); @@ -32,7 +32,7 @@ public static int OctToDec(String s) { * @param d The Decimal Number * @return The Hexadecimal number */ - public static String DecimalToHex(int d) { + public static String decimalToHex(int d) { String digits = "0123456789ABCDEF"; if (d <= 0) return "0"; @@ -54,10 +54,10 @@ public static void main(String args[]) { String oct = input.next(); // Pass the octal number to function and get converted deciaml form - int decimal = OctToDec(oct); + int decimal = octToDec(oct); // Pass the decimla number to function and get converted Hex form of the number - String hex = DecimalToHex(decimal); + String hex = decimalToHex(decimal); System.out.println("The Hexadecimal equivalant is: " + hex); input.close(); } diff --git a/DataStructures/DynamicArray/DynamicArray.java b/DataStructures/DynamicArray/DynamicArray.java index 0a6a0723e2a1..f70c45cec815 100644 --- a/DataStructures/DynamicArray/DynamicArray.java +++ b/DataStructures/DynamicArray/DynamicArray.java @@ -41,7 +41,7 @@ public void add(final E element) { } public void put(final int index, E element) { - Objects.checkIndex(index, this.size); +// Objects.checkIndex(index, this.size); this.elements[index] = element; } @@ -79,7 +79,7 @@ private void fastRemove(final Object[] elements, final int index) { } private E getElement(final int index) { - Objects.checkIndex(index, this.size); +// Objects.checkIndex(index, this.size); return (E) this.elements[index]; } diff --git a/DataStructures/Graphs/BellmanFord.java b/DataStructures/Graphs/BellmanFord.java index 6dffede9e606..41c89bb020ee 100644 --- a/DataStructures/Graphs/BellmanFord.java +++ b/DataStructures/Graphs/BellmanFord.java @@ -23,7 +23,7 @@ class Edge * @param v End vertex * @param c Weight */ - Edge(int a,int b,int c) + public Edge(int a,int b,int c) { u=a; v=b; diff --git a/DataStructures/Graphs/MatrixGraphs.java b/DataStructures/Graphs/MatrixGraphs.java index e7fb9cc4fb2f..32a7c990e3ef 100644 --- a/DataStructures/Graphs/MatrixGraphs.java +++ b/DataStructures/Graphs/MatrixGraphs.java @@ -127,8 +127,7 @@ public boolean removeEdge(int from, int to) { * @return returns a string describing this graph */ public String toString() { - String s = new String(); - s = " "; + String s = " "; for (int i = 0; i < this.numberOfVertices(); i++) { s = s + String.valueOf(i) + " "; } diff --git a/DataStructures/Heaps/HeapElement.java b/DataStructures/Heaps/HeapElement.java index 113146012918..028d9b3e67de 100644 --- a/DataStructures/Heaps/HeapElement.java +++ b/DataStructures/Heaps/HeapElement.java @@ -117,7 +117,21 @@ public String toString() { * @return true if the keys on both elements are identical and the additional info objects * are identical. */ - public boolean equals(HeapElement otherHeapElement) { - return (this.key == otherHeapElement.key) && (this.additionalInfo.equals(otherHeapElement.additionalInfo)); + @Override + public boolean equals(Object o) { + if (o != null) { + if (!(o instanceof HeapElement)) return false; + HeapElement otherHeapElement = (HeapElement) o; + return (this.key == otherHeapElement.key) && (this.additionalInfo.equals(otherHeapElement.additionalInfo)); + } + return false; + } + + @Override + public int hashCode() { + int result = 0; + result = 31*result + (int) key; + result = 31*result + (additionalInfo != null ? additionalInfo.hashCode() : 0); + return result; } } diff --git a/DataStructures/Heaps/MaxHeap.java b/DataStructures/Heaps/MaxHeap.java index fed09bcba045..3945caa97fde 100644 --- a/DataStructures/Heaps/MaxHeap.java +++ b/DataStructures/Heaps/MaxHeap.java @@ -49,9 +49,9 @@ private void swap(int index1, int index2) { // Toggle an element up to its right place as long as its key is lower than its parent's private void toggleUp(int elementIndex) { double key = maxHeap.get(elementIndex - 1).getKey(); - while (getElementKey((int) Math.floor(elementIndex / 2)) < key) { - swap(elementIndex, (int) Math.floor(elementIndex / 2)); - elementIndex = (int) Math.floor(elementIndex / 2); + while (getElementKey((int) Math.floor(elementIndex / 2.0)) < key) { + swap(elementIndex, (int) Math.floor(elementIndex / 2.0)); + elementIndex = (int) Math.floor(elementIndex / 2.0); } } @@ -101,7 +101,7 @@ public void deleteElement(int elementIndex) { maxHeap.set(elementIndex - 1, getElement(maxHeap.size())); maxHeap.remove(maxHeap.size()); // Shall the new element be moved up... - if (getElementKey(elementIndex) > getElementKey((int) Math.floor(elementIndex / 2))) toggleUp(elementIndex); + if (getElementKey(elementIndex) > getElementKey((int) Math.floor(elementIndex / 2.0))) toggleUp(elementIndex); // ... or down ? else if (((2 * elementIndex <= maxHeap.size()) && (getElementKey(elementIndex) < getElementKey(elementIndex * 2))) || ((2 * elementIndex < maxHeap.size()) && (getElementKey(elementIndex) < getElementKey(elementIndex * 2)))) diff --git a/DataStructures/Heaps/MinHeap.java b/DataStructures/Heaps/MinHeap.java index 4b435e6d81d7..39ee6ebf7b8f 100644 --- a/DataStructures/Heaps/MinHeap.java +++ b/DataStructures/Heaps/MinHeap.java @@ -44,9 +44,9 @@ private void swap(int index1, int index2) { // Toggle an element up to its right place as long as its key is lower than its parent's private void toggleUp(int elementIndex) { double key = minHeap.get(elementIndex - 1).getKey(); - while (getElementKey((int) Math.floor(elementIndex / 2)) > key) { - swap(elementIndex, (int) Math.floor(elementIndex / 2)); - elementIndex = (int) Math.floor(elementIndex / 2); + while (getElementKey((int) Math.floor(elementIndex / 2.0)) > key) { + swap(elementIndex, (int) Math.floor(elementIndex / 2.0)); + elementIndex = (int) Math.floor(elementIndex / 2.0); } } @@ -96,7 +96,7 @@ public void deleteElement(int elementIndex) { minHeap.set(elementIndex - 1, getElement(minHeap.size())); minHeap.remove(minHeap.size()); // Shall the new element be moved up... - if (getElementKey(elementIndex) < getElementKey((int) Math.floor(elementIndex / 2))) toggleUp(elementIndex); + if (getElementKey(elementIndex) < getElementKey((int)Math.floor(elementIndex / 2.0))) toggleUp(elementIndex); // ... or down ? else if (((2 * elementIndex <= minHeap.size()) && (getElementKey(elementIndex) > getElementKey(elementIndex * 2))) || ((2 * elementIndex < minHeap.size()) && (getElementKey(elementIndex) > getElementKey(elementIndex * 2)))) diff --git a/DataStructures/Lists/CircleLinkedList.java b/DataStructures/Lists/CircleLinkedList.java index 67235172dfb7..b46441a1fa47 100644 --- a/DataStructures/Lists/CircleLinkedList.java +++ b/DataStructures/Lists/CircleLinkedList.java @@ -14,7 +14,7 @@ private Node(E value, Node next) { //For better O.O design this should be private allows for better black box design private int size; //this will point to dummy node; - private Node head; + private Node head = null; //constructer for class.. here we will make a dummy node for circly linked list implementation with reduced error catching as our list will never be empty; public CircleLinkedList() { diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index e1b0041dda39..706b33c7e10d 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -86,9 +86,12 @@ public void insertTail(int x) { public Link deleteHead() { Link temp = head; head = head.next; // oldHead <--> 2ndElement(head) - head.previous = null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed - if (head == null) + + if (head == null) { tail = null; + } else { + head.previous = null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed + } return temp; } @@ -100,10 +103,13 @@ public Link deleteHead() { public Link deleteTail() { Link temp = tail; tail = tail.previous; // 2ndLast(tail) <--> oldTail --> null - tail.next = null; // 2ndLast(tail) --> null + if (tail == null) { head = null; + } else{ + tail.next = null; // 2ndLast(tail) --> null } + return temp; } diff --git a/DataStructures/Stacks/NodeStack.java b/DataStructures/Stacks/NodeStack.java index 616e6a1e1548..0f1d58686b0d 100644 --- a/DataStructures/Stacks/NodeStack.java +++ b/DataStructures/Stacks/NodeStack.java @@ -74,7 +74,7 @@ public void push(Item item) { } else { newNs.setPrevious(NodeStack.head); NodeStack.head.setNext(newNs); - NodeStack.head = newNs; + NodeStack.head.setHead(newNs); } NodeStack.setSize(NodeStack.getSize() + 1); @@ -89,7 +89,7 @@ public Item pop() { Item item = (Item) NodeStack.head.getData(); - NodeStack.head = NodeStack.head.getPrevious(); + NodeStack.head.setHead(NodeStack.head.getPrevious()); NodeStack.head.setNext(null); NodeStack.setSize(NodeStack.getSize() - 1); diff --git a/DataStructures/Trees/LevelOrderTraversal.java b/DataStructures/Trees/LevelOrderTraversal.java index bcf172495d13..69e65fe64089 100644 --- a/DataStructures/Trees/LevelOrderTraversal.java +++ b/DataStructures/Trees/LevelOrderTraversal.java @@ -15,8 +15,8 @@ public Node(int item) { // Root of the Binary Tree Node root; - public LevelOrderTraversal() { - root = null; + public LevelOrderTraversal( Node root) { + this.root = root; } /* function to print level order traversal of tree*/ diff --git a/DataStructures/Trees/LevelOrderTraversalQueue.java b/DataStructures/Trees/LevelOrderTraversalQueue.java index d43d62d68f5f..5f85f987d673 100644 --- a/DataStructures/Trees/LevelOrderTraversalQueue.java +++ b/DataStructures/Trees/LevelOrderTraversalQueue.java @@ -19,11 +19,9 @@ public Node(int item) { } } - Node root; - /* Given a binary tree. Print its nodes in level order using array for implementing queue */ - void printLevelOrder() { + void printLevelOrder(Node root) { Queue queue = new LinkedList(); queue.add(root); while (!queue.isEmpty()) { diff --git a/DataStructures/Trees/ValidBSTOrNot.java b/DataStructures/Trees/ValidBSTOrNot.java index a1a737fe4fe9..ba50c079eac4 100644 --- a/DataStructures/Trees/ValidBSTOrNot.java +++ b/DataStructures/Trees/ValidBSTOrNot.java @@ -13,14 +13,13 @@ public Node(int item) { } //Root of the Binary Tree - Node root; /* can give min and max value according to your code or can write a function to find min and max value of tree. */ /* returns true if given search tree is binary search tree (efficient version) */ - boolean isBST() { + boolean isBST(Node root) { return isBSTUtil(root, Integer.MIN_VALUE, Integer.MAX_VALUE); } diff --git a/DynamicProgramming/LongestIncreasingSubsequence.java b/DynamicProgramming/LongestIncreasingSubsequence.java index c8296518590d..e30adfeffd39 100644 --- a/DynamicProgramming/LongestIncreasingSubsequence.java +++ b/DynamicProgramming/LongestIncreasingSubsequence.java @@ -22,7 +22,7 @@ public static void main(String[] args) { private static int upperBound(int[] ar, int l, int r, int key) { while (l < r - 1) { - int m = (l + r) / 2; + int m = (l + r) >>> 1; if (ar[m] >= key) r = m; else diff --git a/DynamicProgramming/MatrixChainMultiplication.java b/DynamicProgramming/MatrixChainMultiplication.java index 66b2a35824e2..9073400d3299 100644 --- a/DynamicProgramming/MatrixChainMultiplication.java +++ b/DynamicProgramming/MatrixChainMultiplication.java @@ -25,7 +25,7 @@ public static void main(String[] args) { count++; } for (Matrix m : mArray) { - System.out.format("A(%d) = %2d x %2d\n", m.count(), m.col(), m.row()); + System.out.format("A(%d) = %2d x %2d%n", m.count(), m.col(), m.row()); } size = mArray.size(); diff --git a/Maths/GCD.java b/Maths/GCD.java index fb9aeb21ee1b..bff1c33c80f5 100644 --- a/Maths/GCD.java +++ b/Maths/GCD.java @@ -52,6 +52,6 @@ public static void main(String[] args) { // call gcd function (input array) System.out.println(gcd(myIntArray)); // => 4 - System.out.printf("gcd(40,24)=%d gcd(24,40)=%d\n", gcd(40, 24), gcd(24, 40)); // => 8 + System.out.printf("gcd(40,24)=%d gcd(24,40)=%d%n", gcd(40, 24), gcd(24, 40)); // => 8 } } diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index af8e33b0b320..b1a0987d0245 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -1,192 +1,219 @@ -package Others; - - -/** - * Dijkstra's algorithm,is a graph search algorithm that solves the single-source - * shortest path problem for a graph with nonnegative edge path costs, producing - * a shortest path tree. - *

- * NOTE: The inputs to Dijkstra's algorithm are a directed and weighted graph consisting - * of 2 or more nodes, generally represented by an adjacency matrix or list, and a start node. - *

- * Original source of code: https://rosettacode.org/wiki/Dijkstra%27s_algorithm#Java - * Also most of the comments are from RosettaCode. - */ - -import java.util.*; - -public class Dijkstra { - private static final Graph.Edge[] GRAPH = { - // Distance from node "a" to node "b" is 7. - // In the current Graph there is no way to move the other way (e,g, from "b" to "a"), - // a new edge would be needed for that - new Graph.Edge("a", "b", 7), - new Graph.Edge("a", "c", 9), - new Graph.Edge("a", "f", 14), - new Graph.Edge("b", "c", 10), - new Graph.Edge("b", "d", 15), - new Graph.Edge("c", "d", 11), - new Graph.Edge("c", "f", 2), - new Graph.Edge("d", "e", 6), - new Graph.Edge("e", "f", 9), - }; - private static final String START = "a"; - private static final String END = "e"; - - /** - * main function - * Will run the code with "GRAPH" that was defined above. - */ - public static void main(String[] args) { - Graph g = new Graph(GRAPH); - g.dijkstra(START); - g.printPath(END); - //g.printAllPaths(); - } -} - -class Graph { - // mapping of vertex names to Vertex objects, built from a set of Edges - private final Map graph; - - /** - * One edge of the graph (only used by Graph constructor) - */ - public static class Edge { - public final String v1, v2; - public final int dist; - - public Edge(String v1, String v2, int dist) { - this.v1 = v1; - this.v2 = v2; - this.dist = dist; - } - } - - /** - * One vertex of the graph, complete with mappings to neighbouring vertices - */ - public static class Vertex implements Comparable { - public final String name; - // MAX_VALUE assumed to be infinity - public int dist = Integer.MAX_VALUE; - public Vertex previous = null; - public final Map neighbours = new HashMap<>(); - - public Vertex(String name) { - this.name = name; - } - - private void printPath() { - if (this == this.previous) { - System.out.printf("%s", this.name); - } else if (this.previous == null) { - System.out.printf("%s(unreached)", this.name); - } else { - this.previous.printPath(); - System.out.printf(" -> %s(%d)", this.name, this.dist); - } - } - - public int compareTo(Vertex other) { - if (dist == other.dist) - return name.compareTo(other.name); - - return Integer.compare(dist, other.dist); - } - - @Override - public String toString() { - return "(" + name + ", " + dist + ")"; - } - } - - /** - * Builds a graph from a set of edges - */ - public Graph(Edge[] edges) { - graph = new HashMap<>(edges.length); - - // one pass to find all vertices - for (Edge e : edges) { - if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); - if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); - } - - // another pass to set neighbouring vertices - for (Edge e : edges) { - graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); - // graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected graph - } - } - - /** - * Runs dijkstra using a specified source vertex - */ - public void dijkstra(String startName) { - if (!graph.containsKey(startName)) { - System.err.printf("Graph doesn't contain start vertex \"%s\"\n", startName); - return; - } - final Vertex source = graph.get(startName); - NavigableSet q = new TreeSet<>(); - - // set-up vertices - for (Vertex v : graph.values()) { - v.previous = v == source ? source : null; - v.dist = v == source ? 0 : Integer.MAX_VALUE; - q.add(v); - } - - dijkstra(q); - } - - /** - * Implementation of dijkstra's algorithm using a binary heap. - */ - private void dijkstra(final NavigableSet q) { - Vertex u, v; - while (!q.isEmpty()) { - // vertex with shortest distance (first iteration will return source) - u = q.pollFirst(); - if (u.dist == Integer.MAX_VALUE) - break; // we can ignore u (and any other remaining vertices) since they are unreachable - - // look at distances to each neighbour - for (Map.Entry a : u.neighbours.entrySet()) { - v = a.getKey(); // the neighbour in this iteration - - final int alternateDist = u.dist + a.getValue(); - if (alternateDist < v.dist) { // shorter path to neighbour found - q.remove(v); - v.dist = alternateDist; - v.previous = u; - q.add(v); - } - } - } - } - - /** - * Prints a path from the source to the specified vertex - */ - public void printPath(String endName) { - if (!graph.containsKey(endName)) { - System.err.printf("Graph doesn't contain end vertex \"%s\"\n", endName); - return; - } - - graph.get(endName).printPath(); - System.out.println(); - } - - /** - * Prints the path from the source to every vertex (output order is not guaranteed) - */ - public void printAllPaths() { - for (Vertex v : graph.values()) { - v.printPath(); - System.out.println(); - } - } +package Others; + + +/** + * Dijkstra's algorithm,is a graph search algorithm that solves the single-source + * shortest path problem for a graph with nonnegative edge path costs, producing + * a shortest path tree. + *

+ * NOTE: The inputs to Dijkstra's algorithm are a directed and weighted graph consisting + * of 2 or more nodes, generally represented by an adjacency matrix or list, and a start node. + *

+ * Original source of code: https://rosettacode.org/wiki/Dijkstra%27s_algorithm#Java + * Also most of the comments are from RosettaCode. + */ + +import java.util.*; + +public class Dijkstra { + private static final Graph.Edge[] GRAPH = { + // Distance from node "a" to node "b" is 7. + // In the current Graph there is no way to move the other way (e,g, from "b" to "a"), + // a new edge would be needed for that + new Graph.Edge("a", "b", 7), + new Graph.Edge("a", "c", 9), + new Graph.Edge("a", "f", 14), + new Graph.Edge("b", "c", 10), + new Graph.Edge("b", "d", 15), + new Graph.Edge("c", "d", 11), + new Graph.Edge("c", "f", 2), + new Graph.Edge("d", "e", 6), + new Graph.Edge("e", "f", 9), + }; + private static final String START = "a"; + private static final String END = "e"; + + /** + * main function + * Will run the code with "GRAPH" that was defined above. + */ + public static void main(String[] args) { + Graph g = new Graph(GRAPH); + g.dijkstra(START); + g.printPath(END); + //g.printAllPaths(); + } +} + +class Graph { + // mapping of vertex names to Vertex objects, built from a set of Edges + private final Map graph; + + /** + * One edge of the graph (only used by Graph constructor) + */ + public static class Edge { + public final String v1, v2; + public final int dist; + + public Edge(String v1, String v2, int dist) { + this.v1 = v1; + this.v2 = v2; + this.dist = dist; + } + } + + /** + * One vertex of the graph, complete with mappings to neighbouring vertices + */ + public static class Vertex implements Comparable { + public final String name; + // MAX_VALUE assumed to be infinity + public int dist = Integer.MAX_VALUE; + public Vertex previous = null; + public final Map neighbours = new HashMap<>(); + + public Vertex(String name) { + this.name = name; + } + + private void printPath() { + if (this == this.previous) { + System.out.printf("%s", this.name); + } else if (this.previous == null) { + System.out.printf("%s(unreached)", this.name); + } else { + this.previous.printPath(); + System.out.printf(" -> %s(%d)", this.name, this.dist); + } + } + + public int compareTo(Vertex other) { + if (dist == other.dist) + return name.compareTo(other.name); + + return Integer.compare(dist, other.dist); + } + + @Override + public boolean equals(Object object) { + if (this == object) return true; + if (object == null || getClass() != object.getClass()) return false; + if (!super.equals(object)) return false; + + Vertex vertex = (Vertex) object; + + if (dist != vertex.dist) return false; + if (name != null ? !name.equals(vertex.name) : vertex.name != null) return false; + if (previous != null ? !previous.equals(vertex.previous) : vertex.previous != null) return false; + if (neighbours != null ? !neighbours.equals(vertex.neighbours) : vertex.neighbours != null) return false; + + return true; + } + + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + dist; + result = 31 * result + (previous != null ? previous.hashCode() : 0); + result = 31 * result + (neighbours != null ? neighbours.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "(" + name + ", " + dist + ")"; + } + } + + /** + * Builds a graph from a set of edges + */ + public Graph(Edge[] edges) { + graph = new HashMap<>(edges.length); + + // one pass to find all vertices + for (Edge e : edges) { + if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); + if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); + } + + // another pass to set neighbouring vertices + for (Edge e : edges) { + graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); + // graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected graph + } + } + + /** + * Runs dijkstra using a specified source vertex + */ + public void dijkstra(String startName) { + if (!graph.containsKey(startName)) { + System.err.printf("Graph doesn't contain start vertex \"%s\"%n", startName); + return; + } + final Vertex source = graph.get(startName); + NavigableSet q = new TreeSet<>(); + + // set-up vertices + for (Vertex v : graph.values()) { + v.previous = v == source ? source : null; + v.dist = v == source ? 0 : Integer.MAX_VALUE; + q.add(v); + } + + dijkstra(q); + } + + /** + * Implementation of dijkstra's algorithm using a binary heap. + */ + private void dijkstra(final NavigableSet q) { + Vertex u, v; + while (!q.isEmpty()) { + // vertex with shortest distance (first iteration will return source) + u = q.pollFirst(); + if (u.dist == Integer.MAX_VALUE) + break; // we can ignore u (and any other remaining vertices) since they are unreachable + + // look at distances to each neighbour + for (Map.Entry a : u.neighbours.entrySet()) { + v = a.getKey(); // the neighbour in this iteration + + final int alternateDist = u.dist + a.getValue(); + if (alternateDist < v.dist) { // shorter path to neighbour found + q.remove(v); + v.dist = alternateDist; + v.previous = u; + q.add(v); + } + } + } + } + + /** + * Prints a path from the source to the specified vertex + */ + public void printPath(String endName) { + if (!graph.containsKey(endName)) { + System.err.printf("Graph doesn't contain end vertex \"%s\"%n", endName); + return; + } + + graph.get(endName).printPath(); + System.out.println(); + } + + /** + * Prints the path from the source to every vertex (output order is not guaranteed) + */ + public void printAllPaths() { + for (Vertex v : graph.values()) { + v.printPath(); + System.out.println(); + } + } + } \ No newline at end of file diff --git a/Others/TopKWords.java b/Others/TopKWords.java index 6cccfc27b95f..b3f0e5846b12 100644 --- a/Others/TopKWords.java +++ b/Others/TopKWords.java @@ -50,7 +50,8 @@ public Map getDictionary() { } finally { try { // you always have to close the I/O streams - fis.close(); + if (fis != null) + fis.close(); } catch (IOException e) { e.printStackTrace(); } diff --git a/Others/TowerOfHanoi.java b/Others/TowerOfHanoi.java index 7d35ed36d54f..db31959558a3 100644 --- a/Others/TowerOfHanoi.java +++ b/Others/TowerOfHanoi.java @@ -12,7 +12,7 @@ public static void shift(int n, String startPole, String intermediatePole, Strin // Shift function is called in recursion for swapping the n-1 disc from the startPole to the intermediatePole shift(n - 1, startPole, endPole, intermediatePole); - System.out.println("\nMove \"" + n + "\" from " + startPole + " --> " + endPole); // Result Printing + System.out.println("%nMove \"" + n + "\" from " + startPole + " --> " + endPole); // Result Printing // Shift function is called in recursion for swapping the n-1 disc from the intermediatePole to the endPole shift(n - 1, intermediatePole, startPole, endPole); } diff --git a/Searches/IterativeBinarySearch.java b/Searches/IterativeBinarySearch.java index 8df51a7d789b..5a3a6d9e11cc 100644 --- a/Searches/IterativeBinarySearch.java +++ b/Searches/IterativeBinarySearch.java @@ -40,7 +40,7 @@ public > int find(T[] array, T key) { r = array.length - 1; while (l <= r) { - k = (l + r) / 2; + k = (l + r) >>> 1; cmp = key.compareTo(array[k]); if (cmp == 0) { diff --git a/Sorts/QuickSort.java b/Sorts/QuickSort.java index 47f79de0c35d..ef564ac722cb 100644 --- a/Sorts/QuickSort.java +++ b/Sorts/QuickSort.java @@ -64,7 +64,7 @@ private static > int randomPartition(T[] array, int left **/ private static > int partition(T[] array, int left, int right) { - int mid = (left + right) / 2; + int mid = (left + right) >>> 1; T pivot = array[mid]; while (left <= right) { diff --git a/ciphers/Caesar.java b/ciphers/Caesar.java index cec0ddce0065..76893f45327e 100644 --- a/ciphers/Caesar.java +++ b/ciphers/Caesar.java @@ -125,6 +125,8 @@ public static void main(String[] args) { case 'D': case 'd': System.out.println("DECODED MESSAGE IS \n" + decode(message, shift)); + default: + System.out.println("default case"); } input.close(); } diff --git a/ciphers/ColumnarTranspositionCipher.java b/ciphers/ColumnarTranspositionCipher.java index 26acc628e393..60af4ff5429c 100644 --- a/ciphers/ColumnarTranspositionCipher.java +++ b/ciphers/ColumnarTranspositionCipher.java @@ -117,7 +117,7 @@ private static Object[][] tableBuilder(String word) { * order to respect the Columnar Transposition Cipher Rule. */ private static int numberOfRows(String word) { - if ((double) word.length() / keyword.length() > word.length() / keyword.length()) { + if (word.length() / keyword.length() > word.length() / keyword.length()) { return (word.length() / keyword.length()) + 1; } else { return word.length() / keyword.length(); diff --git a/divideconquer/ClosestPair.java b/divideconquer/ClosestPair.java index 375d3e1a949c..67ebe89b8628 100644 --- a/divideconquer/ClosestPair.java +++ b/divideconquer/ClosestPair.java @@ -31,6 +31,15 @@ public final class ClosestPair { * Minimum point length. */ private static double minNum = Double.MAX_VALUE; + + public static void setMinNum(double minNum) { + ClosestPair.minNum = minNum; + } + + public static void setSecondCount(int secondCount) { + ClosestPair.secondCount = secondCount; + } + /** * secondCount */ @@ -213,7 +222,7 @@ public double closestPair(final Location[] a, final int indexNum) { for (int i = 0; i < totalNum; i++) { double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); if (xGap < minValue) { - secondCount++; // size of the array + ClosestPair.setSecondCount(secondCount + 1); // size of the array } else { if (divideArray[i].x > divideArray[divideX].x) { break; @@ -250,7 +259,7 @@ public double closestPair(final Location[] a, final int indexNum) { minValue = length; // Conditional for registering final coordinate if (length < minNum) { - minNum = length; + ClosestPair.setMinNum(length); point1 = firstWindow[i]; point2 = firstWindow[j]; } @@ -260,7 +269,7 @@ public double closestPair(final Location[] a, final int indexNum) { } } } - secondCount = 0; + ClosestPair.setSecondCount(0); return minValue; } @@ -288,7 +297,7 @@ public double bruteForce(final Location[] arrayParam) { length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); // Conditional statement for registering final coordinate if (length < minNum) { - minNum = length; + ClosestPair.setMinNum(length); } point1 = arrayParam[0]; @@ -311,7 +320,7 @@ public double bruteForce(final Location[] arrayParam) { minValue = length; if (length < minNum) { // Registering final coordinate - minNum = length; + ClosestPair.setMinNum(length); point1 = arrayParam[i]; point2 = arrayParam[j]; } From f710f3aafac8be42219c1be4ed7dbfa03c878b4b Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Mon, 25 May 2020 03:02:15 +0530 Subject: [PATCH 297/521] Update ListAddnFun --- DataStructures/Lists/ListAddnFun | 41 ++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/DataStructures/Lists/ListAddnFun b/DataStructures/Lists/ListAddnFun index 47553e184358..afbd2ae431d8 100644 --- a/DataStructures/Lists/ListAddnFun +++ b/DataStructures/Lists/ListAddnFun @@ -1,3 +1,44 @@ +package DataStructures.Lists; + +/* + * This class implements a SinglyLinked List. + * A linked list is similar to an array, it hold values. + * However, links in a linked list do not have indexes. With + * a linked list you do not need to predetermine it's size as + * it grows and shrinks as it is edited. + *it has functions called mid that gives node at mid + * in addn to linked list there is algo that + * construct a linked list with alternate sums of linked list + * and added to new one and add mid value + * i.e sum of first and last value of inital list + + Test Case: + + + LinkedList LL1 = new LinkedList(); + Scanner scn=new Scanner(System.in); + int numNodes=scn.nextInt(); + for(int i=0;i<2*numNodes;i++) { + LL1.addLast(scn.nextInt()); + } + LL1.display(); + LinkedList LL2=new LinkedList(); + LL2.formLL2(LL1); + LL2.display(); + LinkedList LL3=new LinkedList(); + LL3.formLL3(LL1); + LL3.display(); + Node MID=LL1.midValue(); + System.out.println(MID.data); + LinkedList updLL1=new LinkedList(); + updLL1.formRes(LL1,LL2,LL3,MID); + updLL1.display(); + updLL1.Size(); + + */ + + + import java.util.*; import java.lang.*; import java.io.*; From 82e2132557bbf295f2f1d3b03bc41092bd736f78 Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Mon, 25 May 2020 03:06:36 +0530 Subject: [PATCH 298/521] Update AVLSimple --- DataStructures/Trees/AVLSimple | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/DataStructures/Trees/AVLSimple b/DataStructures/Trees/AVLSimple index 1f2c2bd6aba2..ace0c46b9374 100644 --- a/DataStructures/Trees/AVLSimple +++ b/DataStructures/Trees/AVLSimple @@ -1,3 +1,34 @@ + +package DataStructures.Trees; + +/* +* Avl is algo that balance itself while adding new alues to tree +* by rotating branches of binary tree and make itself Binary seaarch tree +* there are four cases which has to tackle +* rotating - left right ,left left,right right,right left + +Test Case: + +AVLTree tree=new AVLTree(); + tree.insert(20); + tree.insert(25); + tree.insert(30); + tree.insert(10); + tree.insert(5); + tree.insert(15); + tree.insert(27); + tree.insert(19); + tree.insert(16); + + tree.display(); + + + + +*/ + + + public class AVLTree { private class Node{ int data; From 920852aa0e41015a05fe72976675b4c439560bab Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Mon, 25 May 2020 03:11:14 +0530 Subject: [PATCH 299/521] Update BoardPath --- DynamicProgramming/BoardPath | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/DynamicProgramming/BoardPath b/DynamicProgramming/BoardPath index 4b471a88ed64..91f1f011a6a0 100644 --- a/DynamicProgramming/BoardPath +++ b/DynamicProgramming/BoardPath @@ -1,4 +1,29 @@ +package DynamicProgramming.BoardPath; +/* +* this is an important Algo in which +* we have starting and ending of board and we have to reach +* we have to count no. of ways +* that help to reach end point i.e number by rolling dice +* which have 1 to 6 digits +Test Case: +here target is 10 + +int n=10; + startAlgo(); + System.out.println(bpR(0,n)); + System.out.println(endAlgo()+"ms"); + int[] strg=new int [n+1]; + startAlgo(); + System.out.println(bpRS(0,n,strg)); + System.out.println(endAlgo()+"ms"); + startAlgo(); + System.out.println(bpIS(0,n,strg)); + System.out.println(endAlgo()+"ms"); + + + +*/ public class BoardPath { public static long startTime; public static long endTime; From 94cfab0cfc060685c2f899d876b15be9cd279757 Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Mon, 25 May 2020 03:12:16 +0530 Subject: [PATCH 300/521] Update BoardPath --- DynamicProgramming/BoardPath | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/BoardPath b/DynamicProgramming/BoardPath index 91f1f011a6a0..5ca14d1fab9b 100644 --- a/DynamicProgramming/BoardPath +++ b/DynamicProgramming/BoardPath @@ -1,4 +1,4 @@ -package DynamicProgramming.BoardPath; +package DynamicProgramming; /* * this is an important Algo in which * we have starting and ending of board and we have to reach From ec4f6a11102f9419eeaa36042fa265a95bf5e4e2 Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Mon, 25 May 2020 03:17:26 +0530 Subject: [PATCH 301/521] Update CountNumBinaryStrings --- DynamicProgramming/CountNumBinaryStrings | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/DynamicProgramming/CountNumBinaryStrings b/DynamicProgramming/CountNumBinaryStrings index c71fbd63c682..3dd0bf7ded9c 100644 --- a/DynamicProgramming/CountNumBinaryStrings +++ b/DynamicProgramming/CountNumBinaryStrings @@ -1,3 +1,31 @@ +package DynamicProgramming; +/* +* here is a important algo in this we have to count +* maximum no. of different binary strings which doesnot have +* consectuive 1s + + + +Test Case: + +int n=30; + + startAlgo(); + System.out.println(numStrIS(n)); + System.out.println(endAlgo()+"ms"); + + startAlgo(); + CountNumBinaryStr out=new CountNumBinaryStr(); + System.out.println(out.numStrR(n).ans); + System.out.println(endAlgo()+"ms"); + + startAlgo(); + System.out.println(countStrings(n,0)); + System.out.println(endAlgo()+"ms"); + + + +*/ public class CountNumBinaryStr { public static long startTime; public static long endTime; From a23a17ba6540818b266ad56a2fb181512dd4f1b5 Mon Sep 17 00:00:00 2001 From: Ritik2604 <49342895+Ritik2604@users.noreply.github.com> Date: Mon, 25 May 2020 03:22:27 +0530 Subject: [PATCH 302/521] Update Intersection --- DataStructures/HashMap/Hashing/Intersection | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/DataStructures/HashMap/Hashing/Intersection b/DataStructures/HashMap/Hashing/Intersection index cfe1f74d73eb..8b54eeae1a95 100644 --- a/DataStructures/HashMap/Hashing/Intersection +++ b/DataStructures/HashMap/Hashing/Intersection @@ -1,3 +1,30 @@ +package DataStructures.HashMap.Hashing; +/* +* this is algo which implies common mathematical set theory concept +* called intersection in which result is common values of both the sets +* here metaphor of sets is HashMap + + +Test Case: + Scanner scn=new Scanner(System.in); + int len =scn.nextInt(); + int arr[]=new int[len]; + int arr2[]=new int[len]; + + for(int i=0;i<2*len;i++) { + + if(i=len) { + arr2[i-len]=scn.nextInt(); + } + } + System.out.println(Main(arr,arr2)); + + + +*/ + import java.util.ArrayList; import java.util.HashMap; import java.util.Map; From c76c4ddda7becf3c633323041f5128bcdb7d5e71 Mon Sep 17 00:00:00 2001 From: MohamedBechir <57349735+MohamedBechir@users.noreply.github.com> Date: Sun, 24 May 2020 23:00:46 +0100 Subject: [PATCH 303/521] Update CONTRIBUTING.md file I tried to update the CONTRIBUTING.md file in order to simplify as much as possible the process for the developers which will encourage them to join the project and hence enlarge our community. Thank you for putting it under review, if there are any changes feel free to ask me to do it. --- CONTRIBUTING.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d502de24281c..62f268c98f18 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,2 +1,25 @@ -## Contribution Guidelines -Read our [Contribution Guidelines](CONTRIBUTING.md) before you contribute. +:+1::tada: Before guiding you through the contribution process TheAlgorithms/Java thank you for being one of us! :+1::tada: + +## How to contribute? + +#### **Did you find a bug?** + +* **Ensure the bug was not already reported** by searching on GitHub under [Project Issues](https://github.com/TheAlgorithms/Java/issues). + +* If you are unable to find an open issue refering to the same problem, depending on the type of issue follow the appropriate steps: + +#### **Do you want to contribute to the documentation?** + +* Please read the documentation in here [Contributing to the Documentation]() ,[open a new one issue](https://github.com/TheAlgorithms/Java/issues/new), make changes and then create a pull request, it will be put under review and accepted if it is approprite. + +#### **Do you want to add a new feature?** +* [Open a new one issue](https://github.com/TheAlgorithms/Java/issues/new). Be sure to include a **title and a clear description** and a **test case** demonstrating the new feature that you want to add to the project. + +#### **Do you want to fix a bug?** +* [Open a new one issue](https://github.com/TheAlgorithms/Java/issues/new).Be sure to include a **title and a clear description** and a **test case** demonstrating the expected behaviour that is not occuring. + +#### **Do you have questions about the source code?** + +* Ask any question about how to use the repository in the [TheAlgorithms room in GITTER](https://gitter.im/TheAlgorithms/community?source=orgpage#) or [open a new one issue](https://github.com/TheAlgorithms/Java/issues/new) + +:+1::tada: That's all you need to know about the process now it's your turn to help us improve the repository, thank you again! :+1::tada: From 91b9ac759cff34e85e02ae17014bc55ab788cd4c Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 25 May 2020 11:36:04 +0000 Subject: [PATCH 304/521] updating DIRECTORY.md --- DIRECTORY.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index aee8eea6f2a2..d8a5165f015c 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -45,9 +45,7 @@ * HashMap * Hashing * [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) - * [LinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/LinkedList.java) * [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) - * [Node](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Node.java) * Heaps * [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) * [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) From 8b6415f9b3c02ba3243061fd7637c581dcd4171e Mon Sep 17 00:00:00 2001 From: Sombit Bose Date: Mon, 25 May 2020 23:59:48 +0530 Subject: [PATCH 305/521] Update CONTRIBUTION.md Added some issue related to assignment of any particular algorithm --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 62f268c98f18..92a2dbf3e104 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,6 +6,8 @@ * **Ensure the bug was not already reported** by searching on GitHub under [Project Issues](https://github.com/TheAlgorithms/Java/issues). +* Please avoid opening issues asking to be "assigned†to a particular algorithm. This merely creates unnecessary noise for maintainers. Instead, please submit your implementation in a pull request and it will be evaluated by project maintainers. + * If you are unable to find an open issue refering to the same problem, depending on the type of issue follow the appropriate steps: #### **Do you want to contribute to the documentation?** From 3b52109fc0d0ec43cbd21eecba0892353edac37a Mon Sep 17 00:00:00 2001 From: joshiujjawal22 Date: Fri, 29 May 2020 12:32:24 +0530 Subject: [PATCH 306/521] Added test cases --- Others/3 sum.java | 14 ++++++++++++- ...on of array without using extra space.java | 21 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Others/3 sum.java b/Others/3 sum.java index 3c008ff78360..577044aab1d2 100644 --- a/Others/3 sum.java +++ b/Others/3 sum.java @@ -11,6 +11,18 @@ * * @author Ujjawal Joshi * @date 2020.05.18 + * + * Test Cases: + Input: + * 6 //Length of array + 12 3 4 1 6 9 + target=24 + * Output:3 9 12 + * Explanation: There is a triplet (12, 3 and 9) present + in the array whose sum is 24. + * + * + */ @@ -26,7 +38,7 @@ public static void main(String args[]) { a[i]=sc.nextInt(); } - System.out.println("Number to be find"); + System.out.println("Target"); int n_find=sc.nextInt(); Arrays.sort(a); // Sort the array if array is not sorted diff --git a/Others/Rotation of array without using extra space.java b/Others/Rotation of array without using extra space.java index c25dbaefc8c9..76380be37300 100644 --- a/Others/Rotation of array without using extra space.java +++ b/Others/Rotation of array without using extra space.java @@ -8,6 +8,27 @@ * * @author Ujjawal Joshi * @date 2020.05.18 + * + * Test Cases: + + Input: + 2 //Size of matrix + 1 2 + 3 4 + Output: + 3 1 + 4 2 + ------------------------------ + Input: + 3 //Size of matrix + 1 2 3 + 4 5 6 + 7 8 9 + Output: + 7 4 1 + 8 5 2 + 9 6 3 + * */ class main{ From a6398d1d27c897009dbe55a057b6cfd81ee0da21 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Fri, 29 May 2020 10:17:28 +0000 Subject: [PATCH 307/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index d8a5165f015c..a4738bcc0b69 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -137,6 +137,7 @@ * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) ## Others + * [3 sum](https://github.com/TheAlgorithms/Java/blob/master/Others/3%20sum.java) * [Abecedarian](https://github.com/TheAlgorithms/Java/blob/master/Others/Abecedarian.java) * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Others/Armstrong.java) * [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) @@ -167,6 +168,7 @@ * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseString.java) * [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) + * [Rotation of array without using extra space](https://github.com/TheAlgorithms/Java/blob/master/Others/Rotation%20of%20array%20without%20using%20extra%20space.java) * [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) * [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) * [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) From e3a78a64000c1974a84287ac3129dd99857ecb19 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 1 Jun 2020 04:39:59 +0000 Subject: [PATCH 308/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index a4738bcc0b69..13651165369d 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -193,6 +193,7 @@ * [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) * [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) * [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) + * [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) * [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) * [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) * [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) From b1caf8c6aea2bab16ce0117b8941b64b6834dde8 Mon Sep 17 00:00:00 2001 From: Swati Prajapati <42577922+swatiprajapati08@users.noreply.github.com> Date: Mon, 1 Jun 2020 23:41:32 +0530 Subject: [PATCH 309/521] Minimum sum partition Given an array, the task is to divide it into two sets S1 and S2 such that the absolute difference between their sums is minimum. --- DynamicProgramming/Minimum sum partition | 64 ++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 DynamicProgramming/Minimum sum partition diff --git a/DynamicProgramming/Minimum sum partition b/DynamicProgramming/Minimum sum partition new file mode 100644 index 000000000000..2ab1d134cad2 --- /dev/null +++ b/DynamicProgramming/Minimum sum partition @@ -0,0 +1,64 @@ +// Partition a set into two subsets such that the difference of subset sums is minimum + +import java.util.*; +import java.lang.*; +import java.io.*; +class GFG + { + public static void main (String[] args) + { + Scanner sc=new Scanner(System.in); + int t=sc.nextInt(); + while(t-->0) + { + int n=sc.nextInt(); + int arr[]=new int[n]; + int sum=0; + for(int i=0;i Date: Wed, 3 Jun 2020 15:19:55 +0530 Subject: [PATCH 310/521] Update Minimum sum partition Added some test cases for better understanding. --- DynamicProgramming/Minimum sum partition | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/DynamicProgramming/Minimum sum partition b/DynamicProgramming/Minimum sum partition index 2ab1d134cad2..3763d5bd68a8 100644 --- a/DynamicProgramming/Minimum sum partition +++ b/DynamicProgramming/Minimum sum partition @@ -1,5 +1,19 @@ // Partition a set into two subsets such that the difference of subset sums is minimum +/* +Input: arr[] = {1, 6, 11, 5} +Output: 1 +Explanation: +Subset1 = {1, 5, 6}, sum of Subset1 = 12 +Subset2 = {11}, sum of Subset2 = 11 + +Input: arr[] = {36, 7, 46, 40} +Output: 23 +Explanation: +Subset1 = {7, 46} ; sum of Subset1 = 53 +Subset2 = {36, 40} ; sum of Subset2 = 76 + */ + import java.util.*; import java.lang.*; import java.io.*; From 7179718df290ccf0ecaaab044508aa309ffada8b Mon Sep 17 00:00:00 2001 From: lollerfirst <43107113+lollerfirst@users.noreply.github.com> Date: Tue, 9 Jun 2020 08:40:46 +0200 Subject: [PATCH 311/521] Update ParseInteger.java Fixed error for empty string. --- Maths/ParseInteger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/ParseInteger.java b/Maths/ParseInteger.java index 91177bb49dd6..c9c11528c1dc 100644 --- a/Maths/ParseInteger.java +++ b/Maths/ParseInteger.java @@ -16,7 +16,7 @@ public static void main(String[] args) { * @throws NumberFormatException if the {@code string} does not contain a parsable integer. */ public static int parseInt(String s) { - if (s == null) { + if (s == null || s.length() == 0) { throw new NumberFormatException("null"); } boolean isNegative = s.charAt(0) == '-'; From 15536392f93d1c24d47c191ac1b67e0442666f23 Mon Sep 17 00:00:00 2001 From: MarcosVillacanas Date: Fri, 12 Jun 2020 13:16:52 +0200 Subject: [PATCH 312/521] marcosvillacanas-A-Star --- DataStructures/Graphs/A_Star.java | 158 ++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 DataStructures/Graphs/A_Star.java diff --git a/DataStructures/Graphs/A_Star.java b/DataStructures/Graphs/A_Star.java new file mode 100644 index 000000000000..59ebd7aa5993 --- /dev/null +++ b/DataStructures/Graphs/A_Star.java @@ -0,0 +1,158 @@ +package A_Star; + +import java.util.*; + +public class A_Star { + + private static class Graph { + //Graph's structure can be changed only applying changes to this class. + private ArrayList [] graph; + + //Initialise ArrayLists in Constructor + public Graph(int size) { + this.graph = new ArrayList[size]; + for (int i = 0; i < size; i++) { + this.graph[i] = new ArrayList<>(); + } + } + + private ArrayList getNeighbours(int from) { return this.graph[from]; } + + //Graph is bidirectional, for just one direction remove second instruction of this method. + private void addEdge (Edge edge) { + this.graph[edge.getFrom()].add(new Edge(edge.getFrom(), edge.getTo(), edge.getWeight())); + this.graph[edge.getTo()].add(new Edge(edge.getTo(), edge.getFrom(), edge.getWeight())); + } + + private void initializeGraph() { + this.addEdge(new Edge(0, 19, 75)); this.addEdge(new Edge(0, 15, 140)); + this.addEdge(new Edge(0, 16, 118)); this.addEdge(new Edge(19, 12, 71)); + this.addEdge(new Edge(12, 15, 151));this.addEdge(new Edge(16, 9, 111)); + this.addEdge(new Edge(9, 10, 70)); this.addEdge(new Edge(10, 3, 75)); + this.addEdge(new Edge(3, 2, 120)); this.addEdge(new Edge(2, 14, 146)); + this.addEdge(new Edge(2, 13, 138)); this.addEdge(new Edge(2, 6, 115)); + this.addEdge(new Edge(15, 14, 80)); this.addEdge(new Edge(15, 5, 99)); + this.addEdge(new Edge(14, 13, 97)); this.addEdge(new Edge(5, 1, 211)); + this.addEdge(new Edge(13, 1, 101)); this.addEdge(new Edge(6, 1, 160)); + this.addEdge(new Edge(1, 17, 85)); this.addEdge(new Edge(17, 7, 98)); + this.addEdge(new Edge(7, 4, 86)); this.addEdge(new Edge(17, 18, 142)); + this.addEdge(new Edge(18, 8, 92)); this.addEdge(new Edge(8, 11, 87)); + + /* + .x. node + (y) cost + - or | or / bidirectional connection + + ( 98)- .7. -(86)- .4. + | + ( 85)- .17. -(142)- .18. -(92)- .8. -(87)- .11. + | + . 1. -------------------- (160) + | \ | + (211) \ .6. + | \ | + . 5. (101)-.13. -(138) (115) + | | | / + ( 99) ( 97) | / + | | | / + .12. -(151)- .15. -(80)- .14. | / + | | | | / + ( 71) (140) (146)- .2. -(120) + | | | + .19. -( 75)- . 0. .10. -(75)- .3. + | | + (118) ( 70) + | | + .16. -(111)- .9. + */ + } + } + + private static class Edge { + private int from; + private int to; + private int weight; + + public Edge(int from, int to, int weight) { + this.from = from; + this.to = to; + this.weight = weight; + } + + public int getFrom() { return from; } + + public int getTo() { return to; } + + public int getWeight() { return weight; } + } + + //class to iterate during the algorithm execution, and also used to return the solution. + private static class PathAndDistance { + private int distance; //distance advanced so far. + private ArrayList path; //list of visited nodes in this path. + private int estimated; //heuristic value associated to the last node od the path (current node). + + public PathAndDistance(int distance, ArrayList path, int estimated) { + this.distance = distance; + this.path = path; + this.estimated = estimated; + } + + public int getDistance() { return distance; } + + public ArrayList getPath() { return path; } + + public int getEstimated() { return estimated; } + + private void printSolution () { + if (this.path != null) + System.out.println("Optimal path: " + this.path.toString() + + ", distance: " + this.distance); + else + System.out.println("There is no path available to connect the points"); + } + } + + public static void main(String[] args) { + //heuristic function optimistic values + int[] heuristic = {366, 0, 160, 242, 161, 178, 77, 151, 226, + 244, 241, 234, 380, 98, 193, 253, 329, 80, 199, 374}; + + Graph graph = new Graph(20); + graph.initializeGraph(); + + PathAndDistance solution = aStar(3, 1, graph, heuristic); + solution.printSolution(); + + } + + public static PathAndDistance aStar(int from, int to, Graph graph, int[] heuristic) { + //nodes are prioritised by the less value of the current distance of their paths, and the estimated value + //given by the heuristic function to reach the destination point from the current point. + PriorityQueue queue = new PriorityQueue<> + (Comparator.comparingInt(a -> (a.getDistance() + a.getEstimated()))); + + //dummy data to start the algorithm from the beginning point + queue.add(new PathAndDistance(0, new ArrayList<>(Arrays.asList(from)), 0)); + + boolean solutionFound = false; + PathAndDistance currentData = new PathAndDistance(-1, null, -1); + while (!queue.isEmpty() && !solutionFound) { + currentData = queue.poll(); //first in the queue, best node so keep exploring. + int currentPosition = currentData.getPath().get(currentData.getPath().size() - 1); //current node. + if (currentPosition == to) + solutionFound = true; + else + for (Edge edge : graph.getNeighbours(currentPosition)) + if (!currentData.getPath().contains(edge.getTo())) { //Avoid Cycles + ArrayList updatedPath = new ArrayList<>(currentData.getPath()); + updatedPath.add(edge.getTo()); //Add the new node to the path, update the distance, + // and the heuristic function value associated to that path. + queue.add(new PathAndDistance(currentData.getDistance() + edge.getWeight(), + updatedPath, heuristic[edge.getTo()])); + } + } + return (solutionFound) ? currentData : new PathAndDistance(-1, null, -1); + //Out of while loop, if there is a solution, the current Data stores the optimal path, and its distance + } +} From ce945bc76b49bf7679f08d6f237fe5c7af7f5c21 Mon Sep 17 00:00:00 2001 From: MarcosVillacanas Date: Fri, 12 Jun 2020 13:23:15 +0200 Subject: [PATCH 313/521] Complexity Added --- DataStructures/Graphs/A_Star.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DataStructures/Graphs/A_Star.java b/DataStructures/Graphs/A_Star.java index 59ebd7aa5993..c8c2db9c6263 100644 --- a/DataStructures/Graphs/A_Star.java +++ b/DataStructures/Graphs/A_Star.java @@ -1,3 +1,7 @@ +/* + Time Complexity = O(E), where E is equal to the number of edges +*/ + package A_Star; import java.util.*; From dd06589833e0117f3db2c196b82c0059c8107bba Mon Sep 17 00:00:00 2001 From: MarcosVillacanas Date: Wed, 17 Jun 2020 13:01:22 +0200 Subject: [PATCH 314/521] Kruskal Algorithm Implemented --- DataStructures/Graphs/Kruskal.java | 94 ++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 DataStructures/Graphs/Kruskal.java diff --git a/DataStructures/Graphs/Kruskal.java b/DataStructures/Graphs/Kruskal.java new file mode 100644 index 000000000000..58b8d89eb5fa --- /dev/null +++ b/DataStructures/Graphs/Kruskal.java @@ -0,0 +1,94 @@ +package Kruskal; + +import java.util.Comparator; +import java.util.HashSet; +import java.util.PriorityQueue; + +public class Kruskal { + + //Complexity: O(E log V) time, where E is the number of edges in the graph and V is the number of vertices + + private static class Edge{ + private int from; + private int to; + private int weight; + + public Edge(int from, int to, int weight) { + this.from = from; + this.to = to; + this.weight = weight; + } + } + + private static void addEdge (HashSet[] graph, int from, int to, int weight) { + graph[from].add(new Edge(from, to, weight)); + } + + public static void main(String[] args) { + HashSet[] graph = new HashSet[7]; + for (int i = 0; i < graph.length; i++) { + graph[i] = new HashSet<>(); + } + addEdge(graph,0, 1, 2); + addEdge(graph,0, 2, 3); + addEdge(graph,0, 3, 3); + addEdge(graph,1, 2, 4); + addEdge(graph,2, 3, 5); + addEdge(graph,1, 4, 3); + addEdge(graph,2, 4, 1); + addEdge(graph,3, 5, 7); + addEdge(graph,4, 5, 8); + addEdge(graph,5, 6, 9); + + System.out.println("Initial Graph: "); + for (int i = 0; i < graph.length; i++) { + for (Edge edge: graph[i]) { + System.out.println(i + " <-- weight " + edge.weight + " --> " + edge.to); + } + } + + Kruskal k = new Kruskal(); + HashSet[] solGraph = k.kruskal(graph); + + System.out.println("\nMinimal Graph: "); + for (int i = 0; i < solGraph.length; i++) { + for (Edge edge: solGraph[i]) { + System.out.println(i + " <-- weight " + edge.weight + " --> " + edge.to); + } + } + } + + public HashSet[] kruskal (HashSet[] graph) { + int nodes = graph.length; + int [] captain = new int [nodes]; + //captain of i, stores the set with all the connected nodes to i + HashSet[] connectedGroups = new HashSet[nodes]; + HashSet[] minGraph = new HashSet[nodes]; + PriorityQueue edges = new PriorityQueue<>((Comparator.comparingInt(edge -> edge.weight))); + for (int i = 0; i < nodes; i++) { + minGraph[i] = new HashSet<>(); + connectedGroups[i] = new HashSet<>(); + connectedGroups[i].add(i); + captain[i] = i; + edges.addAll(graph[i]); + } + int connectedElements = 0; + //as soon as two sets merge all the elements, the algorithm must stop + while (connectedElements != nodes && !edges.isEmpty()) { + Edge edge = edges.poll(); + //This if avoids cycles + if (!connectedGroups[captain[edge.from]].contains(edge.to) + && !connectedGroups[captain[edge.to]].contains(edge.from)) { + //merge sets of the captains of each point connected by the edge + connectedGroups[captain[edge.from]].addAll(connectedGroups[captain[edge.to]]); + //update captains of the elements merged + connectedGroups[captain[edge.from]].forEach(i -> captain[i] = captain[edge.from]); + //add Edge to minimal graph + addEdge(minGraph, edge.from, edge.to, edge.weight); + //count how many elements have been merged + connectedElements = connectedGroups[captain[edge.from]].size(); + } + } + return minGraph; + } +} From c21ae9acdb9807d5ed62bb97dc82df671e426bae Mon Sep 17 00:00:00 2001 From: MarcosVillacanas Date: Fri, 19 Jun 2020 18:10:49 +0200 Subject: [PATCH 315/521] Graph Initialization outside private classes --- DataStructures/Graphs/A_Star.java | 85 +++++++++++++++---------------- 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/DataStructures/Graphs/A_Star.java b/DataStructures/Graphs/A_Star.java index c8c2db9c6263..9fa92ce32118 100644 --- a/DataStructures/Graphs/A_Star.java +++ b/DataStructures/Graphs/A_Star.java @@ -27,49 +27,6 @@ private void addEdge (Edge edge) { this.graph[edge.getFrom()].add(new Edge(edge.getFrom(), edge.getTo(), edge.getWeight())); this.graph[edge.getTo()].add(new Edge(edge.getTo(), edge.getFrom(), edge.getWeight())); } - - private void initializeGraph() { - this.addEdge(new Edge(0, 19, 75)); this.addEdge(new Edge(0, 15, 140)); - this.addEdge(new Edge(0, 16, 118)); this.addEdge(new Edge(19, 12, 71)); - this.addEdge(new Edge(12, 15, 151));this.addEdge(new Edge(16, 9, 111)); - this.addEdge(new Edge(9, 10, 70)); this.addEdge(new Edge(10, 3, 75)); - this.addEdge(new Edge(3, 2, 120)); this.addEdge(new Edge(2, 14, 146)); - this.addEdge(new Edge(2, 13, 138)); this.addEdge(new Edge(2, 6, 115)); - this.addEdge(new Edge(15, 14, 80)); this.addEdge(new Edge(15, 5, 99)); - this.addEdge(new Edge(14, 13, 97)); this.addEdge(new Edge(5, 1, 211)); - this.addEdge(new Edge(13, 1, 101)); this.addEdge(new Edge(6, 1, 160)); - this.addEdge(new Edge(1, 17, 85)); this.addEdge(new Edge(17, 7, 98)); - this.addEdge(new Edge(7, 4, 86)); this.addEdge(new Edge(17, 18, 142)); - this.addEdge(new Edge(18, 8, 92)); this.addEdge(new Edge(8, 11, 87)); - - /* - .x. node - (y) cost - - or | or / bidirectional connection - - ( 98)- .7. -(86)- .4. - | - ( 85)- .17. -(142)- .18. -(92)- .8. -(87)- .11. - | - . 1. -------------------- (160) - | \ | - (211) \ .6. - | \ | - . 5. (101)-.13. -(138) (115) - | | | / - ( 99) ( 97) | / - | | | / - .12. -(151)- .15. -(80)- .14. | / - | | | | / - ( 71) (140) (146)- .2. -(120) - | | | - .19. -( 75)- . 0. .10. -(75)- .3. - | | - (118) ( 70) - | | - .16. -(111)- .9. - */ - } } private static class Edge { @@ -117,13 +74,53 @@ private void printSolution () { } } + private static void initializeGraph(Graph graph, ArrayList data) { + for (int i = 0; i < data.size(); i+=4) { + graph.addEdge(new Edge(data.get(i), data.get(i + 1), data.get(i + 2))); + } + /* + .x. node + (y) cost + - or | or / bidirectional connection + + ( 98)- .7. -(86)- .4. + | + ( 85)- .17. -(142)- .18. -(92)- .8. -(87)- .11. + | + . 1. -------------------- (160) + | \ | + (211) \ .6. + | \ | + . 5. (101)-.13. -(138) (115) + | | | / + ( 99) ( 97) | / + | | | / + .12. -(151)- .15. -(80)- .14. | / + | | | | / + ( 71) (140) (146)- .2. -(120) + | | | + .19. -( 75)- . 0. .10. -(75)- .3. + | | + (118) ( 70) + | | + .16. -(111)- .9. + */ + } + public static void main(String[] args) { //heuristic function optimistic values int[] heuristic = {366, 0, 160, 242, 161, 178, 77, 151, 226, 244, 241, 234, 380, 98, 193, 253, 329, 80, 199, 374}; Graph graph = new Graph(20); - graph.initializeGraph(); + ArrayList graphData = new ArrayList<>(Arrays.asList(0, 19, 75, null, + 0, 15, 140, null, 0, 16, 118, null, 19, 12, 71, null, 12, 15, 151, null, + 16, 9, 111, null, 9, 10, 70, null, 10, 3, 75, null, 3, 2, 120, null, + 2, 14, 146, null, 2, 13, 138, null, 2, 6, 115, null, 15, 14, 80, null, + 15, 5, 99, null, 14, 13, 97, null, 5, 1, 211, null, 13, 1, 101, null, + 6, 1, 160, null, 1, 17, 85, null, 17, 7, 98, null, 7, 4, 86, null, + 17, 18, 142, null, 18, 8, 92, null, 8, 11, 87)); + initializeGraph(graph, graphData); PathAndDistance solution = aStar(3, 1, graph, heuristic); solution.printSolution(); From 5150a6bd875b24bf98ba693980e5d78a2be03a05 Mon Sep 17 00:00:00 2001 From: Hardik Kapadia Date: Tue, 30 Jun 2020 00:14:04 +0530 Subject: [PATCH 316/521] Closed Scanner in 3 sum, fixed syntax errors in BucketSort.java --- Others/3 sum.java | 2 +- Sorts/BucketSort.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Others/3 sum.java b/Others/3 sum.java index 577044aab1d2..5723ba49c34e 100644 --- a/Others/3 sum.java +++ b/Others/3 sum.java @@ -53,8 +53,8 @@ public static void main(String args[]) else r--; } } - + sc.close(); } } \ No newline at end of file diff --git a/Sorts/BucketSort.java b/Sorts/BucketSort.java index 7556faf57406..1d2e94ff2d58 100644 --- a/Sorts/BucketSort.java +++ b/Sorts/BucketSort.java @@ -1,7 +1,8 @@ +package Sorts; import java.util.Random; -public class Bucket_Sort +public class BucketSort { static int[] sort(int[] sequence, int maxValue) { From d07e6680919d4bad06c7f687fa04895ec571face Mon Sep 17 00:00:00 2001 From: Hardik Kapadia Date: Tue, 30 Jun 2020 00:17:48 +0530 Subject: [PATCH 317/521] Fixed parameter error in SelectionSort --- Sorts/SelectionSort.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sorts/SelectionSort.java b/Sorts/SelectionSort.java index e6b7c8833f43..31b16c5bb171 100644 --- a/Sorts/SelectionSort.java +++ b/Sorts/SelectionSort.java @@ -10,10 +10,12 @@ public class SelectionSort implements SortAlgorithm { /** * This method swaps the two elements in the array + * @param * @param arr, i, j The array for the swap and the indexes of the to-swap elements */ - public void swap(T[] arr, int i, int j) { + + public void swap(T[] arr, int i, int j) { T temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; From 95389bf9c6252d184a5e3d13df8f80d2d4161413 Mon Sep 17 00:00:00 2001 From: Igor Kvashnin Date: Tue, 30 Jun 2020 22:44:38 +0300 Subject: [PATCH 318/521] Fixed wrong order in BubbleSort, corrected spelling mistakes --- Sorts/BubbleSort.java | 8 ++++---- Sorts/SortUtils.java | 20 ++++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/Sorts/BubbleSort.java b/Sorts/BubbleSort.java index 9d2f371786d8..7df1fae8a392 100644 --- a/Sorts/BubbleSort.java +++ b/Sorts/BubbleSort.java @@ -13,7 +13,7 @@ class BubbleSort implements SortAlgorithm { * This method implements the Generic Bubble Sort * * @param array The array to be sorted - * Sorts the array in increasing order + * Sorts the array in ascending order **/ @Override @@ -21,7 +21,7 @@ public > T[] sort(T[] array) { for (int i = 0, size = array.length; i < size - 1; ++i) { boolean swapped = false; for (int j = 0; j < size - 1 - i; ++j) { - if (less(array[j], array[j + 1])) { + if (greater(array[j], array[j + 1])) { swap(array, j, j + 1); swapped = true; } @@ -41,12 +41,12 @@ public static void main(String[] args) { BubbleSort bubbleSort = new BubbleSort(); bubbleSort.sort(integers); - // Output => 231, 78, 54, 23, 12, 9, 6, 4, 1 + // Output => 1, 4, 6, 9, 12, 23, 54, 78, 231 print(integers); // String Input String[] strings = {"c", "a", "e", "b", "d"}; - //Output => e, d, c, b, a + //Output => a, b, c, d, e print(bubbleSort.sort(strings)); } diff --git a/Sorts/SortUtils.java b/Sorts/SortUtils.java index d5f592ad984d..334e3c1c1ad5 100644 --- a/Sorts/SortUtils.java +++ b/Sorts/SortUtils.java @@ -26,11 +26,11 @@ static boolean swap(T[] array, int idx, int idy) { /** - * This method checks if first element is less then the other element + * This method checks if first element is less than the other element * * @param v first element * @param w second element - * @return true if the first element is less then the second element + * @return true if the first element is less than the second element */ static > boolean less(T v, T w) { return v.compareTo(w) < 0; @@ -38,7 +38,19 @@ static > boolean less(T v, T w) { /** - * Just print list + * This method checks if first element is greater than the other element + * + * @param v first element + * @param w second element + * @return true if the first element is greater than the second element + */ + static > boolean greater(T v, T w) { + return v.compareTo(w) > 0; + } + + + /** + * Prints a list * * @param toPrint - a list which should be printed */ @@ -55,7 +67,7 @@ static void print(List toPrint) { /** * Prints an array * - * @param toPrint - the array which should be printed + * @param toPrint - an array which should be printed */ static void print(Object[] toPrint) { System.out.println(Arrays.toString(toPrint)); From bf0fdd735acd7d7c0ba5b090f930a0716fd44524 Mon Sep 17 00:00:00 2001 From: MarcosVillacanas Date: Mon, 6 Jul 2020 13:00:35 +0200 Subject: [PATCH 319/521] Context added --- DataStructures/Graphs/Kruskal.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/DataStructures/Graphs/Kruskal.java b/DataStructures/Graphs/Kruskal.java index 58b8d89eb5fa..82fdf3912842 100644 --- a/DataStructures/Graphs/Kruskal.java +++ b/DataStructures/Graphs/Kruskal.java @@ -1,4 +1,9 @@ -package Kruskal; +//Problem -> Connect all the edges with the minimum cost. +//Possible Solution -> Kruskal Algorithm (KA), KA finds the minimum-spanning-tree, which means, the group of edges with the minimum sum of their weights that connect the whole graph. +//The graph needs to be connected, because if there are nodes impossible to reach, there are no edges that could connect every node in the graph. +//KA is a Greedy Algorithm, because edges are analysed based on their weights, that is why a Priority Queue is used, to take first those less weighted. +//This implementations below has some changes compared to conventional ones, but they are explained all along the code. +//In case you need to know anyhing else, I would be willing to answer all your doubts, you can contact me by https://www.linkedin.com/in/marcosvillacanas/ import java.util.Comparator; import java.util.HashSet; From 174b43caa58ea02c9823191a09575f9499d197a7 Mon Sep 17 00:00:00 2001 From: MarcosVillacanas Date: Mon, 6 Jul 2020 21:28:29 +0200 Subject: [PATCH 320/521] link-Removed --- DataStructures/Graphs/Kruskal.java | 1 - 1 file changed, 1 deletion(-) diff --git a/DataStructures/Graphs/Kruskal.java b/DataStructures/Graphs/Kruskal.java index 82fdf3912842..731b821be076 100644 --- a/DataStructures/Graphs/Kruskal.java +++ b/DataStructures/Graphs/Kruskal.java @@ -3,7 +3,6 @@ //The graph needs to be connected, because if there are nodes impossible to reach, there are no edges that could connect every node in the graph. //KA is a Greedy Algorithm, because edges are analysed based on their weights, that is why a Priority Queue is used, to take first those less weighted. //This implementations below has some changes compared to conventional ones, but they are explained all along the code. -//In case you need to know anyhing else, I would be willing to answer all your doubts, you can contact me by https://www.linkedin.com/in/marcosvillacanas/ import java.util.Comparator; import java.util.HashSet; From 6f0ea8d2272f66f381ca3417aba84c471df18738 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 7 Jul 2020 09:40:29 +0000 Subject: [PATCH 321/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 13651165369d..0d9d08a94d0e 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -40,6 +40,7 @@ * [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) * [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) * [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) + * [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) * [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) * [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) * HashMap From 4e058def8255f42d390f4179d2ed974086934fce Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Wed, 8 Jul 2020 17:00:56 +0800 Subject: [PATCH 322/521] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 80b5888a5165..d2a467239faa 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # The Algorithms - Java [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/TheAlgorithms/100) +[![Gitter chat](https://img.shields.io/badge/Chat-Gitter-ff69b4.svg?label=Chat&logo=gitter&style=flat-square)](https://gitter.im/TheAlgorithms)  NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we're trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. From 7a4d6b2544010d5a588fcb641cd900f10102654f Mon Sep 17 00:00:00 2001 From: vakhokoto Date: Sat, 11 Jul 2020 00:58:58 +0400 Subject: [PATCH 323/521] z function added --- Strings/ZFunction.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Strings/ZFunction.java diff --git a/Strings/ZFunction.java b/Strings/ZFunction.java new file mode 100644 index 000000000000..9872f26beff7 --- /dev/null +++ b/Strings/ZFunction.java @@ -0,0 +1,29 @@ +package Strings; + +public class ZFunction { + private String s; + + public ZFunction(String s){ + this.s = s; + } + + public int[] getArray(){ + int length = s.length(); + int[] z = new int[length]; + int l = 0, r = 0; + for (int i=0; i l && i <= r){ + z[i] = Math.min(z[i - l], r - i + 1); + } + while (i + z[i] < length && s.charAt(z[i]) == s.charAt(i + z[i])){ + z[i]++; + } + if (i + z[i] > r){ + l = i; + r = i + z[i] - 1; + } + } + + return z; + } +} From 65774b4aa8b56f999f78057342ba787cbfc65fe1 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 11 Jul 2020 10:37:01 +0800 Subject: [PATCH 324/521] format code --- Others/TowerOfHanoi.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Others/TowerOfHanoi.java b/Others/TowerOfHanoi.java index db31959558a3..5648b3d2823d 100644 --- a/Others/TowerOfHanoi.java +++ b/Others/TowerOfHanoi.java @@ -5,16 +5,13 @@ class TowerOfHanoi { public static void shift(int n, String startPole, String intermediatePole, String endPole) { // if n becomes zero the program returns thus ending the loop. - if (n == 0) { - return; + if (n != 0) { + // Shift function is called in recursion for swapping the n-1 disc from the startPole to the intermediatePole + shift(n - 1, startPole, endPole, intermediatePole); + System.out.format("Move %d from %s to %s\n", n, startPole, endPole); // Result Printing + // Shift function is called in recursion for swapping the n-1 disc from the intermediatePole to the endPole + shift(n - 1, intermediatePole, startPole, endPole); } - - - // Shift function is called in recursion for swapping the n-1 disc from the startPole to the intermediatePole - shift(n - 1, startPole, endPole, intermediatePole); - System.out.println("%nMove \"" + n + "\" from " + startPole + " --> " + endPole); // Result Printing - // Shift function is called in recursion for swapping the n-1 disc from the intermediatePole to the endPole - shift(n - 1, intermediatePole, startPole, endPole); } public static void main(String[] args) { From b8fa50480291911dabb3d3c0635f0aec5aec74a6 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Thu, 16 Jul 2020 11:54:01 +0000 Subject: [PATCH 325/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 0d9d08a94d0e..e50e18eaf647 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -35,6 +35,7 @@ * DynamicArray * [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) * Graphs + * [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) * [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) * [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) * [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) From a983a15b62c0f98b626c6ebc194ecbf950aa369a Mon Sep 17 00:00:00 2001 From: vakhokoto Date: Wed, 22 Jul 2020 12:52:54 +0400 Subject: [PATCH 326/521] description added and also link to the algorithm review --- Strings/ZFunction.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Strings/ZFunction.java b/Strings/ZFunction.java index 9872f26beff7..f9ca97d6b24d 100644 --- a/Strings/ZFunction.java +++ b/Strings/ZFunction.java @@ -1,21 +1,25 @@ +// Initialisation of strings algorithm Z function +// detailed review and proper examples can be seen on the link bewlow +// +// Link of algorithm review: https://www.geeksforgeeks.org/z-algorithm-linear-time-pattern-searching-algorithm/ package Strings; public class ZFunction { - private String s; + private String string; - public ZFunction(String s){ - this.s = s; + public ZFunction(String string){ + this.string = string; } public int[] getArray(){ - int length = s.length(); + int length = string.length(); int[] z = new int[length]; int l = 0, r = 0; for (int i=0; i l && i <= r){ z[i] = Math.min(z[i - l], r - i + 1); } - while (i + z[i] < length && s.charAt(z[i]) == s.charAt(i + z[i])){ + while (i + z[i] < length && string.charAt(z[i]) == string.charAt(i + z[i])){ z[i]++; } if (i + z[i] > r){ From 5e8c8c7476112a497087ccb5037eedd069ba5050 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 22 Jul 2020 17:53:38 +0000 Subject: [PATCH 327/521] updating DIRECTORY.md --- DIRECTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index e50e18eaf647..acbef75630d2 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -211,3 +211,6 @@ * [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) * [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) * [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) + +## Strings + * [ZFunction](https://github.com/TheAlgorithms/Java/blob/master/Strings/ZFunction.java) From 6e7a326f75e6d74b22ce14ceca5f9a137e6bde43 Mon Sep 17 00:00:00 2001 From: Sombit Bose Date: Wed, 22 Jul 2020 23:29:09 +0530 Subject: [PATCH 328/521] Revert "z function added" --- Strings/ZFunction.java | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 Strings/ZFunction.java diff --git a/Strings/ZFunction.java b/Strings/ZFunction.java deleted file mode 100644 index f9ca97d6b24d..000000000000 --- a/Strings/ZFunction.java +++ /dev/null @@ -1,33 +0,0 @@ -// Initialisation of strings algorithm Z function -// detailed review and proper examples can be seen on the link bewlow -// -// Link of algorithm review: https://www.geeksforgeeks.org/z-algorithm-linear-time-pattern-searching-algorithm/ -package Strings; - -public class ZFunction { - private String string; - - public ZFunction(String string){ - this.string = string; - } - - public int[] getArray(){ - int length = string.length(); - int[] z = new int[length]; - int l = 0, r = 0; - for (int i=0; i l && i <= r){ - z[i] = Math.min(z[i - l], r - i + 1); - } - while (i + z[i] < length && string.charAt(z[i]) == string.charAt(i + z[i])){ - z[i]++; - } - if (i + z[i] > r){ - l = i; - r = i + z[i] - 1; - } - } - - return z; - } -} From c4a8f71c122bbbe38e4502e8b87dedf432977541 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 22 Jul 2020 17:59:28 +0000 Subject: [PATCH 329/521] updating DIRECTORY.md --- DIRECTORY.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index acbef75630d2..e50e18eaf647 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -211,6 +211,3 @@ * [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) * [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) * [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) - -## Strings - * [ZFunction](https://github.com/TheAlgorithms/Java/blob/master/Strings/ZFunction.java) From 0ce51e88dd1154369a56be71039be21c2a9c035e Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 23 Jul 2020 19:59:52 -0400 Subject: [PATCH 330/521] Added deleteNode method --- DataStructures/Lists/DoublyLinkedList.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index 706b33c7e10d..bbf47abe3825 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -166,6 +166,22 @@ else if (current == null) current.previous = newLink; // 1 <--> newLink <--> 2(current) <--> 3 } } + + /** + * Deletes the passed node from the current list + * + * @param z Element to be deleted + */ + public void deleteNode(Link z) { + if(z.next == null){ + deleteTail(); + } else if(z == head){ + deleteHead(); + } else{ //before <-- 1 <--> 2(z) <--> 3 --> + z.previous.next = z.next // 1 --> 3 + z.next.previous = z.previous // 1 <--> 3 + } + } public static void removeDuplicates(DoublyLinkedList l ) { Link linkOne = l.head ; From e68334330ebc4a64d9d0b09b90c50b03c301c465 Mon Sep 17 00:00:00 2001 From: Utsav1999 Date: Sat, 25 Jul 2020 21:49:11 +0530 Subject: [PATCH 331/521] Added Count Digit program --- Maths/CountDigit.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Maths/CountDigit.java diff --git a/Maths/CountDigit.java b/Maths/CountDigit.java new file mode 100644 index 000000000000..2c3080e30d2b --- /dev/null +++ b/Maths/CountDigit.java @@ -0,0 +1,13 @@ +import java.util.*; +import java.lang.*; +// count the number of digits in a number +class CountDigit{ + public static void main(String args[]){ + Scanner sc = new Scanner(System.in); + System.out.print("Enter the number: "); + int number = sc.nextInt(); + int digits = 0; + digits = (int)Math.floor(Math.log10(number) + 1); + System.out.println("The number of digits present in the number: " + digits); + } +} \ No newline at end of file From ce5ca1738117b01ea28de2df8cf982ffbff9fa32 Mon Sep 17 00:00:00 2001 From: Utsav1999 Date: Sun, 26 Jul 2020 01:31:34 +0530 Subject: [PATCH 332/521] Update for zero and negative numbers --- Maths/CountDigit.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Maths/CountDigit.java b/Maths/CountDigit.java index 2c3080e30d2b..6610a35d3b18 100644 --- a/Maths/CountDigit.java +++ b/Maths/CountDigit.java @@ -7,7 +7,14 @@ public static void main(String args[]){ System.out.print("Enter the number: "); int number = sc.nextInt(); int digits = 0; - digits = (int)Math.floor(Math.log10(number) + 1); - System.out.println("The number of digits present in the number: " + digits); + if(number == 0) + { + System.out.println("The number of digits present in the number: 1"); + } + else + { + digits = (int)Math.floor(Math.log10(Math.abs(number)) + 1); + System.out.println("The number of digits present in the number: " + digits); + } } } \ No newline at end of file From da29549d6745704f3ba33bbb0d065e73c473af42 Mon Sep 17 00:00:00 2001 From: Utsav1999 Date: Sun, 26 Jul 2020 21:32:32 +0530 Subject: [PATCH 333/521] updated with Maths package --- Maths/CountDigit.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Maths/CountDigit.java b/Maths/CountDigit.java index 6610a35d3b18..fc63a0d6a159 100644 --- a/Maths/CountDigit.java +++ b/Maths/CountDigit.java @@ -1,8 +1,8 @@ import java.util.*; import java.lang.*; // count the number of digits in a number -class CountDigit{ - public static void main(String args[]){ +class CountDigit { + public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.print("Enter the number: "); int number = sc.nextInt(); From 7f944d93dd2d5d7e90d291ebb668574e17530a6c Mon Sep 17 00:00:00 2001 From: Utsav1999 Date: Sun, 26 Jul 2020 21:36:19 +0530 Subject: [PATCH 334/521] updated with Maths package --- Maths/CountDigit.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/CountDigit.java b/Maths/CountDigit.java index fc63a0d6a159..8fdc385524a5 100644 --- a/Maths/CountDigit.java +++ b/Maths/CountDigit.java @@ -1,5 +1,5 @@ import java.util.*; -import java.lang.*; +package Maths; // count the number of digits in a number class CountDigit { public static void main(String args[]) { From 13925aa62793438a7eb49ebaed90c3db2bcf05c1 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 26 Jul 2020 18:46:07 +0000 Subject: [PATCH 335/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index e50e18eaf647..473721c37146 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -110,6 +110,7 @@ * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) + * [CountDigit](https://github.com/TheAlgorithms/Java/blob/master/Maths/CountDigit.java) * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) From c3136e280a5a8603c189ff6ab933a4b7eb80a160 Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Thu, 30 Jul 2020 23:18:29 +0800 Subject: [PATCH 336/521] Update and rename Perfect BinarySearch to PerfectBinarySearch.java --- Searches/Perfect BinarySearch | 21 ------------------- Searches/PerfectBinarySearch.java | 34 +++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 21 deletions(-) delete mode 100644 Searches/Perfect BinarySearch create mode 100644 Searches/PerfectBinarySearch.java diff --git a/Searches/Perfect BinarySearch b/Searches/Perfect BinarySearch deleted file mode 100644 index 28cdcb5be543..000000000000 --- a/Searches/Perfect BinarySearch +++ /dev/null @@ -1,21 +0,0 @@ - static int binarySearch(int[] arr, int target) { - int low = 0 ; - int high = arr.length - 1 ; - - while(low <= high) { - int mid =(low + high) / 2; - - if(arr[mid] == target) { - return mid; - } - else if(arr[mid] > target) { - high = mid - 1; - } - else { - low = mid + 1; - } - - } - return -1; - } - diff --git a/Searches/PerfectBinarySearch.java b/Searches/PerfectBinarySearch.java new file mode 100644 index 000000000000..03f06dfa2346 --- /dev/null +++ b/Searches/PerfectBinarySearch.java @@ -0,0 +1,34 @@ + import java.util.*; + +class PerfectBinarySearch{ + + static int binarySearch(int[] arr, int target) + { + int low = 0 ; + int high = arr.length - 1 ; + + while(low <= high) { + int mid =(low + high) / 2; + + if(arr[mid] == target) { + return mid; + } + else if(arr[mid] > target) { + high = mid - 1; + } + else { + low = mid + 1; + } + + } + return -1; + } + + public static void main(String[] args) + { + PerfectBinarySearch BinarySearch = new PerfectBinarySearch(); + int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + assert BinarySearch.binarySearch(array, -1) == -1; + assert BinarySearch.binarySearch(array, 11) == -1; + } +} From 6a79ea7284a81e8049b22c6386aa23da36e63260 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Thu, 30 Jul 2020 15:19:02 +0000 Subject: [PATCH 337/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 473721c37146..acd7a643ff33 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -188,6 +188,7 @@ * [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) * [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) * [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) + * [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) * [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) * [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) * [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) From 3b7dae8ffa6c7af75c2daa54a796927581c6383e Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Thu, 30 Jul 2020 23:20:46 +0800 Subject: [PATCH 338/521] Update PerfectBinarySearch.java Add package; --- Searches/PerfectBinarySearch.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Searches/PerfectBinarySearch.java b/Searches/PerfectBinarySearch.java index 03f06dfa2346..559ecf5d9d15 100644 --- a/Searches/PerfectBinarySearch.java +++ b/Searches/PerfectBinarySearch.java @@ -1,4 +1,6 @@ - import java.util.*; +package Searches; + +import java.util.*; class PerfectBinarySearch{ From de4b2be8af0ad251eb7547a540c277bcb284417b Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Fri, 31 Jul 2020 11:44:09 +0800 Subject: [PATCH 339/521] Use public class --- Maths/CountDigit.java | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/Maths/CountDigit.java b/Maths/CountDigit.java index 8fdc385524a5..0f1852a3409f 100644 --- a/Maths/CountDigit.java +++ b/Maths/CountDigit.java @@ -1,20 +1,21 @@ -import java.util.*; package Maths; + +import java.util.*; + // count the number of digits in a number -class CountDigit { - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - System.out.print("Enter the number: "); - int number = sc.nextInt(); - int digits = 0; - if(number == 0) - { - System.out.println("The number of digits present in the number: 1"); - } - else - { - digits = (int)Math.floor(Math.log10(Math.abs(number)) + 1); - System.out.println("The number of digits present in the number: " + digits); - } +public class CountDigit { + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + System.out.print("Enter the number: "); + int number = sc.nextInt(); + int digits = 0; + if(number == 0){ + System.out.println("The number of digits present in the number: 1"); + } + else + { + digits = (int)Math.floor(Math.log10(Math.abs(number)) + 1); + System.out.println("The number of digits present in the number: " + digits); } -} \ No newline at end of file + } +} From 84f50389965c5eca797ee185d4e0378ad01d86fb Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 1 Aug 2020 18:00:27 -0400 Subject: [PATCH 340/521] Add HashMapLinearProbing.java and MainLinearProbing.java --- .../HashMap/Hashing/HashMapLinearProbing.java | 163 ++++++++++++++++++ .../HashMap/Hashing/MainLinearProbing.java | 54 ++++++ 2 files changed, 217 insertions(+) create mode 100644 DataStructures/HashMap/Hashing/HashMapLinearProbing.java create mode 100644 DataStructures/HashMap/Hashing/MainLinearProbing.java diff --git a/DataStructures/HashMap/Hashing/HashMapLinearProbing.java b/DataStructures/HashMap/Hashing/HashMapLinearProbing.java new file mode 100644 index 000000000000..e0132335ac54 --- /dev/null +++ b/DataStructures/HashMap/Hashing/HashMapLinearProbing.java @@ -0,0 +1,163 @@ +package DataStructures.HashMap.Hashing; + +/** + * This class is an implementation of a hash table using linear probing + * + */ +class HashMapLinearProbing { + private int hsize; + private Integer[] buckets; + private Integer AVAILABLE; + + /** + * Constructor initializes buckets array, hsize, and creates dummy object for AVAILABLE + * @param hsize the desired size of the hash map + */ + public HashMapLinearProbing(int hsize) { + buckets = new Integer[hsize]; + this.hsize = hsize; + AVAILABLE = new Integer(Integer.MIN_VALUE); + } + + /** + * The Hash Function takes a given key and finds an index based on its data + * @param key the desired key to be converted + * @return int an index corresponding to the key + */ + public int hashing(int key) { + int hash = key % hsize; + if (hash < 0) { + hash += hsize; + } + return hash; + } + + /** + * inserts the key into the hash map by wrapping it as an Integer object + * @param key the desired key to be inserted in the hash map + */ + public void insertHash(int key) { + Integer wrappedInt = new Integer(key); + int hash = hashing(key); + + if(isFull()) { + System.out.println("Hash table is full"); + return; + } + + for (int i = 0;i < hsize; i++) { + if(buckets[hash] == null || buckets[hash] == AVAILABLE) { + buckets[hash] = wrappedInt; + return; + } + + if(hash + 1 < hsize) { + hash++; + } else { + hash = 0; + } + } + } + + /** + * deletes a key from the hash map and adds an available placeholder + * @param key the desired key to be deleted + */ + public void deleteHash(int key) { + Integer wrappedInt = new Integer(key); + int hash = hashing(key); + + if(isEmpty()) { + System.out.println("Table is empty"); + return; + } + + for(int i = 0;i < hsize; i++) { + if(buckets[hash] != null && buckets[hash].equals(wrappedInt)) { + buckets[hash] = AVAILABLE; + return; + } + + if(hash + 1 < hsize) { + hash++; + } else { + hash = 0; + } + } + System.out.println("Key " + key + " not found"); + } + + /** + * Displays the hash table line by line + */ + public void displayHashtable() { + for (int i = 0; i < hsize; i++) { + if(buckets[i] == null || buckets[i] == AVAILABLE) { + System.out.println("Bucket " + i + ": Empty"); + } else { + System.out.println("Bucket " + i + ": " + buckets[i].toString()); + } + + } + } + + /** + * Finds the index of location based on an inputed key + * @param key the desired key to be found + * @return int the index where the key is located + */ + public int findHash(int key) { + Integer wrappedInt = new Integer(key); + int hash = hashing(key); + + if(isEmpty()) { + System.out.println("Table is empty"); + return -1; + } + + for(int i = 0;i < hsize; i++) { + if(buckets[hash].equals(wrappedInt)) { + buckets[hash] = AVAILABLE; + return hash; + } + + if(hash + 1 < hsize) { + hash++; + } else { + hash = 0; + } + } + System.out.println("Key " + key + " not found"); + return -1; + } + + /** + * isFull returns true if the hash map is full and false if not full + * @return boolean is Empty + */ + public boolean isFull() { + boolean response = true; + for(int i = 0; i< hsize;i++) { + if(buckets[i] == null || buckets[i] == AVAILABLE) { + response = false; + break; + } + } + return response; + } + + /** + * isEmpty returns true if the hash map is empty and false if not empty + * @return boolean is Empty + */ + public boolean isEmpty() { + boolean response = true; + for(int i = 0; i< hsize;i++) { + if(buckets[i] != null) { + response = false; + break; + } + } + return response; + } +} \ No newline at end of file diff --git a/DataStructures/HashMap/Hashing/MainLinearProbing.java b/DataStructures/HashMap/Hashing/MainLinearProbing.java new file mode 100644 index 000000000000..594ca41f5b6a --- /dev/null +++ b/DataStructures/HashMap/Hashing/MainLinearProbing.java @@ -0,0 +1,54 @@ +package DataStructures.HashMap.Hashing; + +import java.util.Scanner; + +public class MainLinearProbing { + public static void main(String[] args) { + + int choice, key; + + HashMapLinearProbing h = new HashMapLinearProbing(7); + Scanner In = new Scanner(System.in); + + while (true) { + System.out.println("Enter your Choice :"); + System.out.println("1. Add Key"); + System.out.println("2. Delete Key"); + System.out.println("3. Print Table"); + System.out.println("4. Exit"); + System.out.println("5. Search and print key index"); + + choice = In.nextInt(); + + switch (choice) { + case 1: { + System.out.println("Enter the Key: "); + key = In.nextInt(); + h.insertHash(key); + break; + } + case 2: { + System.out.println("Enter the Key delete: "); + key = In.nextInt(); + h.deleteHash(key); + break; + } + case 3: { + System.out.println("Print table"); + h.displayHashtable(); + break; + } + case 4: { + In.close(); + return; + } + case 5: { + System.out.println("Enter the Key to find and print: "); + key = In.nextInt(); + System.out.println("Key: "+ key + " is at index: "+ h.findHash(key)); + } + } + + } + } +} \ No newline at end of file From 6f8f5bebfe29f13eed7293e638c34804fdb724ab Mon Sep 17 00:00:00 2001 From: Hrishikesh Padhye Date: Sun, 2 Aug 2020 11:06:09 +0530 Subject: [PATCH 341/521] Update and rename Minimum sum partition to MinimumSumPartition.java Updated the file name and indentations to increase the readability --- DynamicProgramming/Minimum sum partition | 78 --------------------- DynamicProgramming/MinimumSumPartition.java | 73 +++++++++++++++++++ 2 files changed, 73 insertions(+), 78 deletions(-) delete mode 100644 DynamicProgramming/Minimum sum partition create mode 100644 DynamicProgramming/MinimumSumPartition.java diff --git a/DynamicProgramming/Minimum sum partition b/DynamicProgramming/Minimum sum partition deleted file mode 100644 index 3763d5bd68a8..000000000000 --- a/DynamicProgramming/Minimum sum partition +++ /dev/null @@ -1,78 +0,0 @@ -// Partition a set into two subsets such that the difference of subset sums is minimum - -/* -Input: arr[] = {1, 6, 11, 5} -Output: 1 -Explanation: -Subset1 = {1, 5, 6}, sum of Subset1 = 12 -Subset2 = {11}, sum of Subset2 = 11 - -Input: arr[] = {36, 7, 46, 40} -Output: 23 -Explanation: -Subset1 = {7, 46} ; sum of Subset1 = 53 -Subset2 = {36, 40} ; sum of Subset2 = 76 - */ - -import java.util.*; -import java.lang.*; -import java.io.*; -class GFG - { - public static void main (String[] args) - { - Scanner sc=new Scanner(System.in); - int t=sc.nextInt(); - while(t-->0) - { - int n=sc.nextInt(); - int arr[]=new int[n]; - int sum=0; - for(int i=0;i0) + { + int n=sc.nextInt(); + int arr[]=new int[n]; + int sum=0; + for(int i=0;i Date: Sun, 2 Aug 2020 07:17:00 +0000 Subject: [PATCH 342/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index acd7a643ff33..9c223948bd5a 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -103,6 +103,7 @@ * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) * [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) + * [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) * [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) ## Maths From 90f59aa6ac163387f13673a22ad86469a00875f6 Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Sun, 2 Aug 2020 15:21:33 +0800 Subject: [PATCH 343/521] Update class name --- DynamicProgramming/MinimumSumPartition.java | 65 +++++++++++---------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 514c3147ab33..9cbfe7ec2025 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -1,3 +1,4 @@ +package DynamicProgramming; // Partition a set into two subsets such that the difference of subset sums is minimum /* @@ -17,56 +18,56 @@ import java.util.*; import java.lang.*; import java.io.*; -class GFG - { +public class MinimumSumPartition +{ public static void main (String[] args) - { - Scanner sc=new Scanner(System.in); - int t=sc.nextInt(); + { + Scanner sc = new Scanner(System.in); + int t = sc.nextInt(); while(t-->0) { - int n=sc.nextInt(); - int arr[]=new int[n]; - int sum=0; - for(int i=0;i Date: Sun, 2 Aug 2020 07:59:49 -0500 Subject: [PATCH 344/521] Rename BoardPath to BoardPath.java --- DynamicProgramming/{BoardPath => BoardPath.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename DynamicProgramming/{BoardPath => BoardPath.java} (100%) diff --git a/DynamicProgramming/BoardPath b/DynamicProgramming/BoardPath.java similarity index 100% rename from DynamicProgramming/BoardPath rename to DynamicProgramming/BoardPath.java From c53810b9f451f46f2f82f3deaa5a1a24ceb3b8ee Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 2 Aug 2020 13:00:07 +0000 Subject: [PATCH 345/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 9c223948bd5a..302a5bac25f8 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -91,6 +91,7 @@ * [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) ## DynamicProgramming + * [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) * [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) * [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) * [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) From f729092e8a86f973fdbda35707b7a81cd31e56f6 Mon Sep 17 00:00:00 2001 From: Ray S <68674276+rbshealy@users.noreply.github.com> Date: Sun, 2 Aug 2020 09:17:16 -0400 Subject: [PATCH 346/521] Use public class HashMapLinearProbing --- DataStructures/HashMap/Hashing/HashMapLinearProbing.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DataStructures/HashMap/Hashing/HashMapLinearProbing.java b/DataStructures/HashMap/Hashing/HashMapLinearProbing.java index e0132335ac54..5c3767187bc8 100644 --- a/DataStructures/HashMap/Hashing/HashMapLinearProbing.java +++ b/DataStructures/HashMap/Hashing/HashMapLinearProbing.java @@ -4,7 +4,7 @@ * This class is an implementation of a hash table using linear probing * */ -class HashMapLinearProbing { +public class HashMapLinearProbing { private int hsize; private Integer[] buckets; private Integer AVAILABLE; @@ -160,4 +160,4 @@ public boolean isEmpty() { } return response; } -} \ No newline at end of file +} From fdbb7ad7dde175d4f92a64dec65bd6e324186e2c Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 2 Aug 2020 13:40:25 +0000 Subject: [PATCH 347/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 302a5bac25f8..dd16853b8f89 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -47,7 +47,9 @@ * HashMap * Hashing * [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) + * [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) * [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) + * [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) * Heaps * [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) * [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) From 0ba52b956d10cfa772b749cfcfe46762f5ce305f Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Sun, 2 Aug 2020 20:13:38 -0500 Subject: [PATCH 348/521] Rename GraphAlgos to GraphAlgos.java --- DataStructures/Graphs/{GraphAlgos => GraphAlgos.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename DataStructures/Graphs/{GraphAlgos => GraphAlgos.java} (100%) diff --git a/DataStructures/Graphs/GraphAlgos b/DataStructures/Graphs/GraphAlgos.java similarity index 100% rename from DataStructures/Graphs/GraphAlgos rename to DataStructures/Graphs/GraphAlgos.java From 1e64653ceb8989218a687fe7dc44734f3638daa4 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 3 Aug 2020 01:14:00 +0000 Subject: [PATCH 349/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index dd16853b8f89..03b29c694406 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -40,6 +40,7 @@ * [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) * [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) * [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) + * [GraphAlgos](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/GraphAlgos.java) * [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) * [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) * [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) From 697d25b47e37fc2f7b1580050f0d418894c69dab Mon Sep 17 00:00:00 2001 From: Ray Date: Wed, 5 Aug 2020 17:11:10 -0400 Subject: [PATCH 350/521] Add nested linked list and node class to HashMap.java --- DataStructures/HashMap/Hashing/HashMap.java | 111 +++++++++++++++++++- 1 file changed, 108 insertions(+), 3 deletions(-) diff --git a/DataStructures/HashMap/Hashing/HashMap.java b/DataStructures/HashMap/Hashing/HashMap.java index c4668b4ab925..2beb9bf09fca 100644 --- a/DataStructures/HashMap/Hashing/HashMap.java +++ b/DataStructures/HashMap/Hashing/HashMap.java @@ -1,6 +1,5 @@ package DataStructures.HashMap.Hashing; - class HashMap { private int hsize; private LinkedList[] buckets; @@ -36,8 +35,114 @@ public void deleteHash(int key) { public void displayHashtable() { for (int i = 0; i < hsize; i++) { System.out.printf("Bucket %d :", i); - buckets[i].display(); + System.out.println(buckets[i].display()); } } - + + public static class LinkedList { + private Node first; + + public LinkedList() { + first = null; + } + + public void insert(int key){ + if(isEmpty()) { + first = new Node(key); + return; + } + + Node temp = findEnd(first); + temp.setNext(new Node(key)); + } + + private Node findEnd(Node n) { + if(n.getNext() == null) { + return n; + } else { + return findEnd(n.getNext()); + } + } + + public Node findKey(int key) { + if(!isEmpty()) { + return findKey(first, key); + } else { + System.out.println("List is empty"); + return null; + } + + } + + private Node findKey(Node n, int key) { + if(n.getKey() == key) { + return n; + } else if(n.getNext() == null) { + System.out.println("Key not found"); + return null; + } else { + return findKey(n.getNext(),key); + } + } + + public void delete(int key) { + if(!isEmpty()) { + if(first.getKey() == key) { + first = null; + } else { + delete(first,key); + } + } else { + System.out.println("List is empty"); + } + } + + private void delete(Node n, int key) { + if(n.getNext().getKey() == key) { + if(n.getNext().getNext() == null) { + n.setNext(null); + } else { + n.setNext(n.getNext().getNext()); + } + } + } + + public String display() { + return display(first); + } + + private String display(Node n) { + if(n == null) { + return "null"; + } else { + return n.getKey() + "->" + display(n.getNext()); + } + } + + public boolean isEmpty() { + return first == null; + } + } + + public static class Node { + private Node next; + private int key; + + public Node(int key) { + next = null; + this.key = key; + } + + public Node getNext() { + return next; + } + + public int getKey() { + return key; + } + + public void setNext(Node next) { + this.next = next; + } + } } \ No newline at end of file From bc7e3fd8ba7d1e7aa2502b3bbc88500490edfa26 Mon Sep 17 00:00:00 2001 From: Ray S <68674276+rbshealy@users.noreply.github.com> Date: Wed, 5 Aug 2020 17:22:37 -0400 Subject: [PATCH 351/521] use public class HashMap --- DataStructures/HashMap/Hashing/HashMap.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DataStructures/HashMap/Hashing/HashMap.java b/DataStructures/HashMap/Hashing/HashMap.java index 2beb9bf09fca..c7d6c7c4beb6 100644 --- a/DataStructures/HashMap/Hashing/HashMap.java +++ b/DataStructures/HashMap/Hashing/HashMap.java @@ -1,6 +1,6 @@ package DataStructures.HashMap.Hashing; -class HashMap { +public class HashMap { private int hsize; private LinkedList[] buckets; @@ -145,4 +145,4 @@ public void setNext(Node next) { this.next = next; } } -} \ No newline at end of file +} From 851df781ddb26964bf484f39415ba7fdebd22d65 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 6 Aug 2020 22:32:49 -0400 Subject: [PATCH 352/521] Add javadoc comments and Cleanup DynamicArray.java --- DataStructures/DynamicArray/DynamicArray.java | 104 +++++++++++++----- 1 file changed, 75 insertions(+), 29 deletions(-) diff --git a/DataStructures/DynamicArray/DynamicArray.java b/DataStructures/DynamicArray/DynamicArray.java index f70c45cec815..b5f23cbb396a 100644 --- a/DataStructures/DynamicArray/DynamicArray.java +++ b/DataStructures/DynamicArray/DynamicArray.java @@ -1,70 +1,106 @@ package DataStructures.DynamicArray; -import java.util.Arrays; -import java.util.ConcurrentModificationException; -import java.util.Iterator; -import java.util.NoSuchElementException; -import java.util.Objects; -import java.util.function.Consumer; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; +import java.util.*; +/** + * This class implements a dynamic array + * @param the type that each index of the array will hold + */ public class DynamicArray implements Iterable { - private int capacity = 10; - - private int size = 0; - + private int capacity; + private int size; private Object[] elements; + /** + * constructor + * @param capacity the starting length of the desired array + */ public DynamicArray(final int capacity) { + this.size = 0; this.capacity = capacity; this.elements = new Object[this.capacity]; } + /** + * No-args constructor + */ public DynamicArray() { + this.size = 0; + this.capacity = 10; this.elements = new Object[this.capacity]; } + /** + * Doubles the capacity of the array + * @return int the new capacity of the array + */ public int newCapacity() { - this.capacity <<= 1; - + this.capacity *= 2; + //changed from this.capacity <<= 1; now much easier to understand return this.capacity; } + /** + * Adds an element to the array + * If full, creates a copy array twice the size of the current one + * @param element the element of type to be added to the array + */ public void add(final E element) { - if (this.size == this.elements.length) - this.elements = Arrays.copyOf(this.elements, newCapacity()); + if (this.size == this.elements.length) { + this.elements = Arrays.copyOf(this.elements, newCapacity()); + } this.elements[this.size] = element; size++; } - + + /** + * Places element of type at the desired index + * @param index the index for the element to be placed + * @param element the element to be inserted + */ public void put(final int index, E element) { -// Objects.checkIndex(index, this.size); - this.elements[index] = element; } + /** + * get method for element at a given index + * returns null if the index is empty + * @param index the desired index of the element + * @return the element at the specified index + */ public E get(final int index) { return getElement(index); } - + /** + * Removes an element from the array + * @param index the index of the element to be removed + * @return the element removed + */ public E remove(final int index) { final E oldElement = getElement(index); fastRemove(this.elements, index); return oldElement; } - - public int size() { + + /** + * get method for size field + * @return int size + */ + public int getSize() { return this.size; } + /** + * isEmpty helper method + * @return boolean true if the array contains no elements, false otherwise + */ public boolean isEmpty() { return this.size == 0; } - + public Stream stream() { return StreamSupport.stream(spliterator(), false); } @@ -72,22 +108,30 @@ public Stream stream() { private void fastRemove(final Object[] elements, final int index) { final int newSize = this.size - 1; - if (newSize > index) - System.arraycopy(elements, index + 1, elements, index, newSize - index); + if (newSize > index) { + System.arraycopy(elements, index + 1, elements, index, newSize - index); + } elements[this.size = newSize] = null; } private E getElement(final int index) { -// Objects.checkIndex(index, this.size); return (E) this.elements[index]; } + /** + * returns a String representation of this object + * @return String a String representing the array + */ @Override public String toString() { return Arrays.toString(Arrays.stream(this.elements).filter(Objects::nonNull).toArray()); } + /** + * Creates and returns a new Dynamic Array Iterator + * @return Iterator a Dynamic Array Iterator + */ @Override public Iterator iterator() { return new DynamicArrayIterator(); @@ -109,7 +153,6 @@ public E next() { if (this.cursor > DynamicArray.this.elements.length) throw new ConcurrentModificationException(); final E element = DynamicArray.this.getElement(this.cursor); - this.cursor++; return element; @@ -120,7 +163,6 @@ public void remove() { if (this.cursor < 0) throw new IllegalStateException(); DynamicArray.this.remove(this.cursor); - this.cursor--; } @@ -134,6 +176,10 @@ public void forEachRemaining(Consumer action) { } } + /** + * This class is the driver for the DynamicArray class + * it tests a variety of methods and prints the output + */ public static void main(String[] args) { DynamicArray names = new DynamicArray<>(); names.add("Peubes"); @@ -147,7 +193,7 @@ public static void main(String[] args) { System.out.println(names); - System.out.println(names.size()); + System.out.println(names.getSize()); names.remove(0); From 460a8d0a749ceb67850e78919a0931ade14c166e Mon Sep 17 00:00:00 2001 From: Ray S <68674276+rbshealy@users.noreply.github.com> Date: Thu, 6 Aug 2020 22:50:49 -0400 Subject: [PATCH 353/521] Add white-space --- DataStructures/DynamicArray/DynamicArray.java | 1 + 1 file changed, 1 insertion(+) diff --git a/DataStructures/DynamicArray/DynamicArray.java b/DataStructures/DynamicArray/DynamicArray.java index b5f23cbb396a..1e8ce8abff09 100644 --- a/DataStructures/DynamicArray/DynamicArray.java +++ b/DataStructures/DynamicArray/DynamicArray.java @@ -73,6 +73,7 @@ public void put(final int index, E element) { public E get(final int index) { return getElement(index); } + /** * Removes an element from the array * @param index the index of the element to be removed From 6079b4bc108e0cd21ce0fef3c4a26d73b1a50620 Mon Sep 17 00:00:00 2001 From: shellhub Date: Mon, 10 Aug 2020 16:52:06 +0800 Subject: [PATCH 354/521] * reduce code * add function overriding * update test --- Maths/FindMax.java | 2 +- Maths/FindMaxRecursion.java | 16 ++++++++++++++-- Maths/FindMin.java | 2 +- Maths/FindMinRecursion.java | 18 +++++++++++++++--- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/Maths/FindMax.java b/Maths/FindMax.java index 739cda39bf5d..f98ec5d0647a 100644 --- a/Maths/FindMax.java +++ b/Maths/FindMax.java @@ -5,7 +5,7 @@ public class FindMax { //Driver public static void main(String[] args) { int[] array = {2, 4, 9, 7, 19, 94, 5}; - System.out.println("max = " + findMax(array)); + assert findMax(array) == 94; } /** diff --git a/Maths/FindMaxRecursion.java b/Maths/FindMaxRecursion.java index 3ebcaf392d95..6d0616269c4a 100644 --- a/Maths/FindMaxRecursion.java +++ b/Maths/FindMaxRecursion.java @@ -6,7 +6,8 @@ public static void main(String[] args) { int low = 0; int high = array.length - 1; - System.out.println("max value is " + max(array, low, high)); + assert max(array, low, high) == 94; + assert max(array, array.length) == 94; } /** @@ -27,6 +28,17 @@ public static int max(int[] array, int low, int high) { int leftMax = max(array, low, mid); //get max in [low, mid] int rightMax = max(array, mid + 1, high); //get max in [mid+1, high] - return leftMax >= rightMax ? leftMax : rightMax; + return Math.max(leftMax, rightMax); + } + + /** + * Get max of array using recursion algorithm + * + * @param array contains elements + * @param len length of given array + * @return max value of {@code array} + */ + public static int max(int[] array, int len) { + return len == 1 ? array[0] : Math.max(max(array, len - 1), array[len - 1]); } } diff --git a/Maths/FindMin.java b/Maths/FindMin.java index 90b7ea10926d..a52b3ff206b1 100644 --- a/Maths/FindMin.java +++ b/Maths/FindMin.java @@ -5,7 +5,7 @@ public class FindMin { //Driver public static void main(String[] args) { int[] array = {2, 4, 9, 7, 19, 94, 5}; - System.out.println("min = " + findMin(array)); + assert findMin(array) == 2; } /** diff --git a/Maths/FindMinRecursion.java b/Maths/FindMinRecursion.java index 292ffc30e83d..c1b5f2856cb0 100644 --- a/Maths/FindMinRecursion.java +++ b/Maths/FindMinRecursion.java @@ -2,11 +2,12 @@ public class FindMinRecursion { public static void main(String[] args) { - int[] array = {2, 4, 9, 7, 19, 94, 5}; + int[] array = {2, 4, 9, -7, 19, 94, 5}; int low = 0; int high = array.length - 1; - System.out.println("min value is " + min(array, low, high)); + assert min(array, low, high) == -7; + assert min(array, array.length) == -7; } /** @@ -27,6 +28,17 @@ public static int min(int[] array, int low, int high) { int leftMin = min(array, low, mid); //get min in [low, mid] int rightMin = min(array, mid + 1, high); //get min in [mid+1, high] - return leftMin <= rightMin ? leftMin : rightMin; + return Math.min(leftMin, rightMin); + } + + /** + * Get min of array using recursion algorithm + * + * @param array contains elements + * @param len length of given array + * @return min value of {@code array} + */ + public static int min(int[] array, int len) { + return len == 1 ? array[0] : Math.min(min(array, len - 1), array[len - 1]); } } From eb75ce5096ee9a82b3a9094538e598381906d02b Mon Sep 17 00:00:00 2001 From: Pa1sathvik <7vik.sathvik@gmail.com> Date: Mon, 10 Aug 2020 19:15:34 +0530 Subject: [PATCH 355/521] Update RomanToInteger.java In case if lower case roman letters are supplied, we need to convert into single case(Upper case). --- Conversions/RomanToInteger.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Conversions/RomanToInteger.java b/Conversions/RomanToInteger.java index 0672a1464bd3..f66ab115ff1a 100644 --- a/Conversions/RomanToInteger.java +++ b/Conversions/RomanToInteger.java @@ -29,6 +29,7 @@ public class RomanToInteger { */ public static int romanToInt(String A) { + A = A.toUpperCase(); char prev = ' '; int sum = 0; From 6da8a0098633266de1be3a0aff8855435ffdfabb Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 12 Aug 2020 00:37:16 +0800 Subject: [PATCH 356/521] BubbleSort Recursion --- Sorts/BubbleSortRecursion.java | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Sorts/BubbleSortRecursion.java diff --git a/Sorts/BubbleSortRecursion.java b/Sorts/BubbleSortRecursion.java new file mode 100644 index 000000000000..6af7778f199a --- /dev/null +++ b/Sorts/BubbleSortRecursion.java @@ -0,0 +1,55 @@ +package Sorts; + +import java.util.Random; + +/** + * BubbleSort algorithm implements using recursion + */ +public class BubbleSortRecursion implements SortAlgorithm { + public static void main(String[] args) { + Integer[] array = new Integer[10]; + + Random random = new Random(); + /* generate 10 random numbers from -50 to 49 */ + for (int i = 0; i < array.length; ++i) { + array[i] = random.nextInt(100) - 50; + } + + BubbleSortRecursion bubbleSortRecursion = new BubbleSortRecursion(); + bubbleSortRecursion.sort(array); + + /* check array is sorted or not */ + for (int i = 0; i < array.length - 1; ++i) { + assert (array[i].compareTo(array[i + 1]) <= 0); + } + } + + /** + * @param unsorted - an array should be sorted + * @return sorted array + */ + @Override + public > T[] sort(T[] unsorted) { + bubbleSort(unsorted, unsorted.length); + return unsorted; + } + + /** + * BubbleSort algorithm implements using recursion + * + * @param unsorted array contains elements + * @param len length of given array + */ + private static > void bubbleSort(T[] unsorted, int len) { + boolean swapped = false; /* flag to check if array is sorted or not */ + for (int i = 0; i < len - 1; ++i) { + if (SortUtils.greater(unsorted[i], unsorted[i + 1])) { + SortUtils.swap(unsorted, i, i + 1); + swapped = true; + } + } + if (swapped) { + bubbleSort(unsorted, len - 1); + } + } +} From ea34a0302576cf69bca597ecd0edda006a61fee1 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 11 Aug 2020 16:37:48 +0000 Subject: [PATCH 357/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 03b29c694406..f0981af04816 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -202,6 +202,7 @@ * [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) * [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) * [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) + * [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) * [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) * [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) * [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) From 73888a68ea951f576457597d34280b13cc3a4847 Mon Sep 17 00:00:00 2001 From: rnitish Date: Wed, 12 Aug 2020 00:13:23 +0530 Subject: [PATCH 358/521] Added insert by index Added insert by index --- DataStructures/Lists/DoublyLinkedList.java | 66 +++++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index bbf47abe3825..c1250b754003 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -24,12 +24,18 @@ public class DoublyLinkedList { */ private Link tail; + /** + * Size refers to the number of elements present in the list + */ + private int size; + /** * Default Constructor */ public DoublyLinkedList() { head = null; tail = null; + size = 0; } /** @@ -43,6 +49,7 @@ public DoublyLinkedList(int[] array) { for (int i : array) { insertTail(i); } + size = array.length; } /** @@ -58,6 +65,7 @@ public void insertHead(int x) { head.previous = newLink; // newLink <-- currenthead(head) newLink.next = head; // newLink <--> currenthead(head) head = newLink; // newLink(head) <--> oldhead + ++size; } /** @@ -76,6 +84,38 @@ public void insertTail(int x) { newLink.previous = tail; // currentTail(tail) <--> newLink --> tail = newLink; // oldTail <--> newLink(tail) --> } + ++size; + } + + /** + * Insert an element at the index + * + * @param x Element to be inserted + * @param index Index(from start) at which the element x to be inserted + * + */ + public void insertElementByIndex(int x,int index){ + if(index > size) throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); + if(index == 0){ + insertHead(x); + }else{ + if(index == size){ + insertTail(x); + }else{ + Link newLink = new Link(x); + Link previousLink = head; // + for(int i = 1; i < index; i++){ //Loop to reach the index + previousLink = previousLink.next; + } + // previousLink is the Link at index - 1 from start + previousLink.next.previous = newLink; + newLink.next = previousLink.next; + newLink.previous = previousLink; + previousLink.next = newLink; + } + } + ++size; + } /** @@ -92,6 +132,7 @@ public Link deleteHead() { } else { head.previous = null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed } + --size; return temp; } @@ -109,7 +150,7 @@ public Link deleteTail() { } else{ tail.next = null; // 2ndLast(tail) --> null } - + --size; return temp; } @@ -140,6 +181,7 @@ else if (current == tail) current.previous.next = current.next; // 1 --> 3 current.next.previous = current.previous; // 1 <--> 3 } + --size; } /** @@ -165,6 +207,7 @@ else if (current == null) newLink.next = current; // 1 <--> newLink --> 2(current) <--> 3 current.previous = newLink; // 1 <--> newLink <--> 2(current) <--> 3 } + ++size; } /** @@ -178,9 +221,10 @@ public void deleteNode(Link z) { } else if(z == head){ deleteHead(); } else{ //before <-- 1 <--> 2(z) <--> 3 --> - z.previous.next = z.next // 1 --> 3 - z.next.previous = z.previous // 1 <--> 3 + z.previous.next = z.next; // 1 --> 3 + z.next.previous = z.previous; // 1 <--> 3 } + --size; } public static void removeDuplicates(DoublyLinkedList l ) { @@ -196,6 +240,16 @@ public static void removeDuplicates(DoublyLinkedList l ) { } } + /** + * Clears List + * + */ + public void clearList(){ + head = null; + tail = null; + size = 0; + } + /** * Returns true if list is empty * @@ -279,5 +333,11 @@ public static void main(String args[]) { myList.insertOrdered(67); myList.insertOrdered(3); myList.display(); // <-- 3(head) <--> 10 <--> 13 <--> 23 <--> 67(tail) --> + myList.insertElementByIndex(5, 1); + myList.display(); // <-- 3(head) <--> 5 <--> 10 <--> 13 <--> 23 <--> 67(tail) --> + myList.clearList(); + myList.display(); + myList.insertHead(20); + myList.display(); } } From 2bd49e472868cd7da288e3b35cd230acb30ead43 Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 12 Aug 2020 22:04:20 +0800 Subject: [PATCH 359/521] * fix doc * add test * fix armstrong number --- Others/Armstrong.java | 58 +++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/Others/Armstrong.java b/Others/Armstrong.java index bfdde2b0e1cd..109993280efd 100644 --- a/Others/Armstrong.java +++ b/Others/Armstrong.java @@ -1,49 +1,43 @@ package Others; -import java.util.Scanner; - /** - * A utility to check if a given number is armstrong or not. Armstrong number is - * a number that is equal to the sum of cubes of its digits for example 0, 1, - * 153, 370, 371, 407 etc. For example 153 = 1^3 + 5^3 +3^3 - * - * @author mani manasa mylavarapu + * An Armstrong number is equal to the sum of the cubes of its digits. + * For example, 370 is an Armstrong number because 3*3*3 + 7*7*7 + 0*0*0 = 370. + * An Armstrong number is often called Narcissistic number. */ public class Armstrong { - static Scanner scan; public static void main(String[] args) { - scan = new Scanner(System.in); - int n = inputInt("please enter the number"); - boolean isArmstrong = checkIfANumberIsAmstrongOrNot(n); - if (isArmstrong) { - System.out.println("the number is armstrong"); - } else { - System.out.println("the number is not armstrong"); - } + assert (isArmStrong(0)); + assert (isArmStrong(1)); + assert (isArmStrong(153)); + assert (isArmStrong(1634)); + assert (isArmStrong(371)); + assert (!isArmStrong(200)); } /** - * Checks whether a given number is an armstrong number or not. Armstrong - * number is a number that is equal to the sum of cubes of its digits for - * example 0, 1, 153, 370, 371, 407 etc. + * Checks whether a given number is an armstrong number or not. * - * @param number - * @return boolean + * @param number number to check + * @return {@code true} if given number is armstrong number, {@code false} otherwise */ - public static boolean checkIfANumberIsAmstrongOrNot(int number) { - int remainder, sum = 0, temp = 0; - temp = number; + private static boolean isArmStrong(int number) { + int sum = 0; + int temp = number; + int numberOfDigits = 0; + while (temp != 0) { + numberOfDigits++; + temp /= 10; + } + temp = number; /* copy number again */ while (number > 0) { - remainder = number % 10; - sum = sum + (remainder * remainder * remainder); - number = number / 10; + int remainder = number % 10; + int power = 1; + for (int i = 1; i <= numberOfDigits; power *= remainder, ++i) ; + sum = sum + power; + number /= 10; } return sum == temp; } - - private static int inputInt(String string) { - System.out.print(string); - return Integer.parseInt(scan.nextLine()); - } } From 22e2e74bf8149a525d06a01f0fe870fadc2bce71 Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 12 Aug 2020 22:51:19 +0800 Subject: [PATCH 360/521] add NumberOfDigits --- Maths/NumberOfDigits.java | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Maths/NumberOfDigits.java diff --git a/Maths/NumberOfDigits.java b/Maths/NumberOfDigits.java new file mode 100644 index 000000000000..9e760727ae8b --- /dev/null +++ b/Maths/NumberOfDigits.java @@ -0,0 +1,62 @@ +package Maths; + +/** + * Find the number of digits in a number. + */ +public class NumberOfDigits { + public static void main(String[] args) { + int[] numbers = {0, 12, 123, 1234, -12345, 123456, 1234567, 12345678, 123456789}; + for (int i = 0; i < numbers.length; ++i) { + assert numberOfDigits(numbers[i]) == i + 1; + assert numberOfDigitsFast(numbers[i]) == i + 1; + assert numberOfDigitsFaster(numbers[i]) == i + 1; + assert numberOfDigitsRecursion(numbers[i]) == i + 1; + } + } + + /** + * Find the number of digits in a number. + * + * @param number number to find + * @return number of digits of given number + */ + private static int numberOfDigits(int number) { + int digits = 0; + do { + digits++; + number /= 10; + } while (number != 0); + return digits; + } + + /** + * Find the number of digits in a number fast version. + * + * @param number number to find + * @return number of digits of given number + */ + private static int numberOfDigitsFast(int number) { + return number == 0 ? 1 : (int) Math.floor(Math.log10(Math.abs(number)) + 1); + } + + + /** + * Find the number of digits in a number faster version. + * + * @param number number to find + * @return number of digits of given number + */ + private static int numberOfDigitsFaster(int number) { + return number < 0 ? (-number + "").length() : (number + "").length(); + } + + /** + * Find the number of digits in a number using recursion. + * + * @param number number to find + * @return number of digits of given number + */ + private static int numberOfDigitsRecursion(int number) { + return number / 10 == 0 ? 1 : 1 + numberOfDigitsRecursion(number / 10); + } +} From 9a625671ac8f9ebc84cf4ef382b30a36dd8aaacc Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 12 Aug 2020 14:54:05 +0000 Subject: [PATCH 361/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index f0981af04816..432416639b66 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -127,6 +127,7 @@ * [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) + * [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) * [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) From c9fb43b44fef3379a17458601235134192814142 Mon Sep 17 00:00:00 2001 From: Ray S <68674276+rbshealy@users.noreply.github.com> Date: Sat, 15 Aug 2020 15:20:32 -0400 Subject: [PATCH 362/521] Update and rename ListAddnFun to ListAddnFun.java Updates include: add no-args constructor add whitespace use public class LinkedList use private fields --- .../Lists/{ListAddnFun => ListAddnFun.java} | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) rename DataStructures/Lists/{ListAddnFun => ListAddnFun.java} (93%) diff --git a/DataStructures/Lists/ListAddnFun b/DataStructures/Lists/ListAddnFun.java similarity index 93% rename from DataStructures/Lists/ListAddnFun rename to DataStructures/Lists/ListAddnFun.java index afbd2ae431d8..fbbfbdbcfe6a 100644 --- a/DataStructures/Lists/ListAddnFun +++ b/DataStructures/Lists/ListAddnFun.java @@ -33,16 +33,16 @@ LinkedList updLL1=new LinkedList(); updLL1.formRes(LL1,LL2,LL3,MID); updLL1.display(); - updLL1.Size(); + updLL1.size(); */ - - import java.util.*; import java.lang.*; import java.io.*; -class LinkedList { + +public class LinkedList { + private class Node{ int data; Node next; @@ -52,9 +52,16 @@ private class Node{ this.next = null; } } - public Node head = null; - public Node tail = null; - private int size=0; + + private Node head; + private Node tail; + private int size; + + public LinkedList() { + head = null; + tail = null; + size = 0; + } public void addLast(int data) { Node newNode = new Node(data); @@ -92,6 +99,7 @@ public void formLL2(LinkedList LL1) { current=current.next.next; } } + public void formLL3(LinkedList LL1) { Node current=LL1.head.next; while(current.next!=null&¤t.next.next!=null) { @@ -100,6 +108,7 @@ public void formLL3(LinkedList LL1) { current=current.next.next; } } + public Node mid() { Node slow=this.head; Node fast=this.head; @@ -109,11 +118,13 @@ public Node mid() { } return slow; } + public Node midValue() { int sum=this.head.data+this.tail.data; Node mid=new Node(sum); return mid; } + public void formRes(LinkedList LL1,LinkedList LL2,LinkedList LL3,Node MID) { Node LL1mid=LL1.mid(); Node currentLL1=LL1.head; @@ -135,7 +146,8 @@ else if(currentLL2==null&¤tLL3!=null) { currentLL1=currentLL1.next; } } - public void Size() { + + public void size() { System.out.println(this.size); } } From f2b50c0e6c06ceadd26ff96e1e2e29f94d085bf8 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 16 Aug 2020 11:55:25 +0800 Subject: [PATCH 363/521] duplicate with NumberOfDigits.java --- Maths/CountDigit.java | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 Maths/CountDigit.java diff --git a/Maths/CountDigit.java b/Maths/CountDigit.java deleted file mode 100644 index 0f1852a3409f..000000000000 --- a/Maths/CountDigit.java +++ /dev/null @@ -1,21 +0,0 @@ -package Maths; - -import java.util.*; - -// count the number of digits in a number -public class CountDigit { - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - System.out.print("Enter the number: "); - int number = sc.nextInt(); - int digits = 0; - if(number == 0){ - System.out.println("The number of digits present in the number: 1"); - } - else - { - digits = (int)Math.floor(Math.log10(Math.abs(number)) + 1); - System.out.println("The number of digits present in the number: " + digits); - } - } -} From 5e6c5a3861e32f6069b2f6c640ac1443c89434f7 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 16 Aug 2020 13:34:48 +0800 Subject: [PATCH 364/521] Calculate area of various geometric shapes --- Maths/Area.java | 119 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 Maths/Area.java diff --git a/Maths/Area.java b/Maths/Area.java new file mode 100644 index 000000000000..00e93e32ff86 --- /dev/null +++ b/Maths/Area.java @@ -0,0 +1,119 @@ +package Maths; + +/** + * Find the area of various geometric shapes + */ +public class Area { + public static void main(String[] args) { + /* test cube */ + assert surfaceAreaCube(1) == 6; + + /* test sphere */ + assert surfaceAreaSphere(5) == 314.1592653589793; + assert surfaceAreaSphere(1) == 12.566370614359172; + + /* test rectangle */ + assert surfaceAreaRectangle(10, 20) == 200; + + /* test square */ + assert surfaceAreaSquare(10) == 100; + + /* test triangle */ + assert surfaceAreaTriangle(10, 10) == 50; + + /* test parallelogram */ + assert surfaceAreaParallelogram(10, 20) == 200; + + /* test trapezium */ + assert surfaceAreaTrapezium(10, 20, 30) == 450; + + /* test circle */ + assert surfaceAreaCircle(20) == 1256.6370614359173; + + } + + /** + * Calculate the surface area of a cube. + * + * @param sideLength side length of cube + * @return surface area of given cube + */ + public static double surfaceAreaCube(double sideLength) { + return 6 * sideLength * sideLength; + } + + /** + * Calculate the surface area of a sphere. + * + * @param radius radius of sphere + * @return surface area of given sphere + */ + public static double surfaceAreaSphere(double radius) { + return 4 * Math.PI * radius * radius; + } + + /** + * Calculate the area of a rectangle + * + * @param length length of rectangle + * @param width width of rectangle + * @return area of given rectangle + */ + public static double surfaceAreaRectangle(double length, double width) { + return length * width; + } + + /** + * Calculate the area of a square + * + * @param sideLength side length of square + * @return area of given square + */ + public static double surfaceAreaSquare(double sideLength) { + return sideLength * sideLength; + } + + /** + * Calculate the area of a triangle + * + * @param base base of triangle + * @param height height of triangle + * @return area of given triangle + */ + public static double surfaceAreaTriangle(double base, double height) { + return base * height / 2; + } + + /** + * Calculate the area of a parallelogram + * + * @param base base of parallelogram + * @param height height of parallelogram + * @return area of given parallelogram + */ + public static double surfaceAreaParallelogram(double base, double height) { + return base * height; + } + + /** + * Calculate the area of a trapezium + * + * @param base1 upper base of trapezium + * @param base2 bottom base of trapezium + * @param height height of trapezium + * @return area of given trapezium + */ + public static double surfaceAreaTrapezium(double base1, double base2, double height) { + return (base1 + base2) * height / 2; + } + + /** + * Calculate the area of a circle + * + * @param radius radius of circle + * @return area of given circle + */ + public static double surfaceAreaCircle(double radius) { + return Math.PI * radius * radius; + } +} From 3e169010fe7f4e38e420cfa4f6b6312aa9e64200 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 16 Aug 2020 13:58:14 +0800 Subject: [PATCH 365/521] add average --- Maths/Average.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Maths/Average.java diff --git a/Maths/Average.java b/Maths/Average.java new file mode 100644 index 000000000000..35812ecc408e --- /dev/null +++ b/Maths/Average.java @@ -0,0 +1,26 @@ +package Maths; + +/** + * Calculate average of a list of numbers + */ +public class Average { + public static void main(String[] args) { + assert average(new double[]{3, 6, 9, 12, 15, 18, 21}) == 12; + assert average(new double[]{5, 10, 15, 20, 25, 30, 35}) == 20; + assert average(new double[]{1, 2, 3, 4, 5, 6, 7, 8}) == 4.5; + } + + /** + * Calculate average of a list of numbers + * + * @param numbers array to store numbers + * @return mean of given numbers + */ + public static double average(double[] numbers) { + double sum = 0; + for (double number : numbers) { + sum += number; + } + return sum / numbers.length; + } +} From affddc57048b0bdf2f76574ca7f03423ee7fa882 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 16 Aug 2020 05:59:41 +0000 Subject: [PATCH 366/521] updating DIRECTORY.md --- DIRECTORY.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 432416639b66..b04746bc55a3 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -115,7 +115,8 @@ * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) - * [CountDigit](https://github.com/TheAlgorithms/Java/blob/master/Maths/CountDigit.java) + * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) + * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) From 53d5cf005785ff65934eb142e4eeade57b169e43 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 16 Aug 2020 07:17:08 +0000 Subject: [PATCH 367/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index b04746bc55a3..19f15a90c168 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -62,6 +62,7 @@ * [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) * [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) * [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) + * [ListAddnFun](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/ListAddnFun.java) * [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) * [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) * [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) From 96345ad6344bfa92f59a9197a33cecadcf9e71f2 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 16 Aug 2020 19:58:48 +0800 Subject: [PATCH 368/521] * factorial using using iteration * add ceil() to maths * add combinations() to maths * add floor() to maths --- Maths/Ceil.java | 32 ++++++++++++++++++++++++++++++++ Maths/Combinations.java | 37 +++++++++++++++++++++++++++++++++++++ Maths/Factorial.java | 35 ++++++++++++++--------------------- Maths/Floor.java | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 115 insertions(+), 21 deletions(-) create mode 100644 Maths/Ceil.java create mode 100644 Maths/Combinations.java create mode 100644 Maths/Floor.java diff --git a/Maths/Ceil.java b/Maths/Ceil.java new file mode 100644 index 000000000000..d84ab82567cc --- /dev/null +++ b/Maths/Ceil.java @@ -0,0 +1,32 @@ +package Maths; + +public class Ceil { + public static void main(String[] args) { + assert ceil(10) == Math.ceil(10); + assert ceil(-10) == Math.ceil(-10); + assert ceil(10.0) == Math.ceil(10.0); + assert ceil(-10.0) == Math.ceil(-10.0); + assert ceil(10.1) == Math.ceil(10.1); + assert ceil(-10.1) == Math.ceil(-10.1); + assert ceil(0) == Math.ceil(0); + assert ceil(-0) == Math.ceil(-0); + assert ceil(0.0) == Math.ceil(0.0); + assert ceil(-0.0) == Math.ceil(-0.0); + } + + /** + * Returns the smallest (closest to negative infinity) + * + * @param number the number + * @return the smallest (closest to negative infinity) of given {@code number} + */ + public static double ceil(double number) { + if (number - (int) number == 0) { + return number; + } else if (number - (int) number > 0) { + return (int) (number + 1); + } else { + return (int) number; + } + } +} \ No newline at end of file diff --git a/Maths/Combinations.java b/Maths/Combinations.java new file mode 100644 index 000000000000..4ff237bb362f --- /dev/null +++ b/Maths/Combinations.java @@ -0,0 +1,37 @@ +package Maths; + +/** + * @see Combination + */ +public class Combinations { + public static void main(String[] args) { + assert combinations(1, 1) == 1; + assert combinations(10, 5) == 252; + assert combinations(6, 3) == 20; + assert combinations(20, 5) == 15504; + } + + /** + * Calculate of factorial + * + * @param n the number + * @return factorial of given number + */ + public static long factorial(int n) { + if (n < 0) { + throw new IllegalArgumentException("number is negative"); + } + return n == 0 || n == 1 ? 1 : n * factorial(n - 1); + } + + /** + * Calculate combinations + * + * @param n first number + * @param k second number + * @return combinations of given {@code n} and {@code k} + */ + public static long combinations(int n, int k) { + return factorial(n) / (factorial(k) * factorial(n - k)); + } +} diff --git a/Maths/Factorial.java b/Maths/Factorial.java index e792cf688189..e1ce91f62f93 100644 --- a/Maths/Factorial.java +++ b/Maths/Factorial.java @@ -1,34 +1,27 @@ package Maths; -import java.util.*; //for importing scanner public class Factorial { - public static void main(String[] args) { //main method - int n = 1; - Scanner sc= new Scanner(System.in); - System.out.println("Enter Number"); - n=sc.nextInt(); - System.out.println(n + "! = " + factorial(n)); - } - //Factorial = n! = n1 * (n-1) * (n-2)*...1 + /* Driver Code */ + public static void main(String[] args) { + assert factorial(0) == 1; + assert factorial(1) == 1; + assert factorial(5) == 120; + assert factorial(10) == 3628800; + } /** - * Calculate factorial N + * Calculate factorial N using iteration * * @param n the number * @return the factorial of {@code n} */ public static long factorial(int n) { - // Using recursion - try { - if (n == 0) { - return 1; // if n = 0, return factorial of n; - }else { - return n*factorial(n-1); // While N is greater than 0, call the function again, passing n-1 (Principle of factoring); - } - }catch (ArithmeticException e) { - System.out.println("Dont work with less than 0"); - } - return n; + if (n < 0) { + throw new IllegalArgumentException("number is negative"); + } + long factorial = 1; + for (int i = 1; i <= n; factorial *= i, ++i) ; + return factorial; } } diff --git a/Maths/Floor.java b/Maths/Floor.java new file mode 100644 index 000000000000..e8a43da4103e --- /dev/null +++ b/Maths/Floor.java @@ -0,0 +1,32 @@ +package Maths; + +public class Floor { + public static void main(String[] args) { + assert floor(10) == Math.floor(10); + assert floor(-10) == Math.floor(-10); + assert floor(10.0) == Math.floor(10.0); + assert floor(-10.0) == Math.floor(-10.0); + assert floor(10.1) == Math.floor(10.1); + assert floor(-10.1) == Math.floor(-10.1); + assert floor(0) == Math.floor(0); + assert floor(-0) == Math.floor(-0); + assert floor(0.0) == Math.floor(0.0); + assert floor(-0.0) == Math.floor(-0.0); + } + + /** + * Returns the largest (closest to positive infinity) + * + * @param number the number + * @return the largest (closest to positive infinity) of given {@code number} + */ + public static double floor(double number) { + if (number - (int) number == 0) { + return number; + } else if (number - (int) number > 0) { + return (int) number; + } else { + return (int) number - 1; + } + } +} \ No newline at end of file From 1420e2d851c71a3ee2d25f8fac10fd90042ecbef Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 16 Aug 2020 21:16:08 +0800 Subject: [PATCH 369/521] * add LucasSeries * add PerfectCube * PerfectSquare --- Maths/LucasSeries.java | 44 ++++++++++++++++++++++++++++++++++++++++ Maths/PerfectCube.java | 27 ++++++++++++++++++++++++ Maths/PerfectSquare.java | 25 +++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 Maths/LucasSeries.java create mode 100644 Maths/PerfectCube.java create mode 100644 Maths/PerfectSquare.java diff --git a/Maths/LucasSeries.java b/Maths/LucasSeries.java new file mode 100644 index 000000000000..8fa7097ba1d0 --- /dev/null +++ b/Maths/LucasSeries.java @@ -0,0 +1,44 @@ +package Maths; + +/** + * https://en.wikipedia.org/wiki/Lucas_number + */ +public class LucasSeries { + public static void main(String[] args) { + assert lucasSeries(1) == 2 && lucasSeriesIteration(1) == 2; + assert lucasSeries(2) == 1 && lucasSeriesIteration(2) == 1; + assert lucasSeries(3) == 3 && lucasSeriesIteration(3) == 3; + assert lucasSeries(4) == 4 && lucasSeriesIteration(4) == 4; + assert lucasSeries(5) == 7 && lucasSeriesIteration(5) == 7; + assert lucasSeries(6) == 11 && lucasSeriesIteration(6) == 11; + assert lucasSeries(11) == 123 && lucasSeriesIteration(11) == 123; + + } + + /** + * Calculate nth number of lucas series(2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, ....) using recursion + * + * @param n nth + * @return nth number of lucas series + */ + public static int lucasSeries(int n) { + return n == 1 ? 2 : n == 2 ? 1 : lucasSeries(n - 1) + lucasSeries(n - 2); + } + + /** + * Calculate nth number of lucas series(2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, ....) using iteration + * + * @param n nth + * @return nth number of lucas series + */ + public static int lucasSeriesIteration(int n) { + int previous = 2; + int current = 1; + for (int i = 1; i < n; i++) { + int next = previous + current; + previous = current; + current = next; + } + return previous; + } +} diff --git a/Maths/PerfectCube.java b/Maths/PerfectCube.java new file mode 100644 index 000000000000..1db0dc3e9002 --- /dev/null +++ b/Maths/PerfectCube.java @@ -0,0 +1,27 @@ +package Maths; + +/** + * https://en.wikipedia.org/wiki/Cube_(algebra) + */ +public class PerfectCube { + public static void main(String[] args) { + assert !isPerfectCube(-1); + assert isPerfectCube(0); + assert isPerfectCube(1); + assert !isPerfectCube(4); + assert isPerfectCube(8); + assert isPerfectCube(27); + + } + + /** + * Check if a number is perfect cube or not + * + * @param number number to check + * @return {@code true} if {@code number} is perfect cube, otherwise {@code false} + */ + public static boolean isPerfectCube(int number) { + int a = (int) Math.pow(number, 1.0 / 3); + return a * a * a == number; + } +} diff --git a/Maths/PerfectSquare.java b/Maths/PerfectSquare.java new file mode 100644 index 000000000000..7484b2fdaba7 --- /dev/null +++ b/Maths/PerfectSquare.java @@ -0,0 +1,25 @@ +package Maths; + +/** + * https://en.wikipedia.org/wiki/Perfect_square + */ +public class PerfectSquare { + public static void main(String[] args) { + assert !isPerfectSquare(-1); + assert !isPerfectSquare(3); + assert !isPerfectSquare(5); + assert isPerfectSquare(9); + assert isPerfectSquare(100); + } + + /** + * Check if a number is perfect square number + * + * @param number the number to be checked + * @return true if {@code number} is perfect square, otherwise false + */ + public static boolean isPerfectSquare(int number) { + int sqrt = (int) Math.sqrt(number); + return sqrt * sqrt == number; + } +} \ No newline at end of file From ada4b6ca6185b884e0c11afd6322afc134376ca5 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 16 Aug 2020 13:17:12 +0000 Subject: [PATCH 370/521] updating DIRECTORY.md --- DIRECTORY.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 19f15a90c168..dc067c8087f8 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -118,6 +118,8 @@ * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) + * [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) + * [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) @@ -125,14 +127,18 @@ * [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) * [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) * [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) + * [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) * [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) * [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) + * [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) * [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) * [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) + * [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) + * [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) From 918189ec209910828f1f6e4892443f7007039066 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 16 Aug 2020 10:32:10 -0400 Subject: [PATCH 371/521] Add PythagoreanTriple.java --- Maths/PythagoreanTriple.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Maths/PythagoreanTriple.java diff --git a/Maths/PythagoreanTriple.java b/Maths/PythagoreanTriple.java new file mode 100644 index 000000000000..4eae9615fe04 --- /dev/null +++ b/Maths/PythagoreanTriple.java @@ -0,0 +1,32 @@ +package Maths; + +/** + * https://en.wikipedia.org/wiki/Pythagorean_triple + * + */ +public class PythagoreanTriple { + public static void main(String[] args) { + assert isPythagTriple(3,4,5); + assert isPythagTriple(5,12,13); + assert isPythagTriple(6,8,10); + assert !isPythagTriple(10,20,30); + assert !isPythagTriple(6,8,100); + assert !isPythagTriple(-1,-1,1); + } + + /** + * Check if a,b,c are a Pythagorean Triple + * + * @param a x/y component length of a right triangle + * @param b y/x component length of a right triangle + * @param c hypotenuse length of a right triangle + * @return boolean true if a, b, c satisfy the Pythagorean theorem, otherwise false + */ + public static boolean isPythagTriple(int a, int b, int c) { + if(a <= 0 || b <= 0 || c <= 0) { + return false; + } else { + return (a * a) + (b * b) == (c * c); + } + } +} From 16057164a679dc20e5c33a4c938d524d5a77db14 Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 16 Aug 2020 10:46:39 -0400 Subject: [PATCH 372/521] Add assert statement --- Maths/AbsoluteMax.java | 3 +++ Maths/AbsoluteMin.java | 3 +++ Maths/AbsoluteValue.java | 8 ++++---- Maths/MaxValue.java | 5 +++++ Maths/MinValue.java | 5 +++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Maths/AbsoluteMax.java b/Maths/AbsoluteMax.java index f454f8ae003d..581329c36927 100644 --- a/Maths/AbsoluteMax.java +++ b/Maths/AbsoluteMax.java @@ -10,6 +10,9 @@ */ public class AbsoluteMax { public static void main(String[] args) { + int[] testnums = new int[]{-2, 0, 16}; + assert absMax(testnums) == 16; + int[] numbers = new int[]{3, -10, -2}; System.out.println("absMax(" + Arrays.toString(numbers) + ") = " + absMax(numbers)); } diff --git a/Maths/AbsoluteMin.java b/Maths/AbsoluteMin.java index 576019581f9c..c09623f5ef68 100644 --- a/Maths/AbsoluteMin.java +++ b/Maths/AbsoluteMin.java @@ -10,6 +10,9 @@ */ public class AbsoluteMin { public static void main(String[] args) { + int[] testnums = new int[]{4, 0, 16}; + assert absMin(testnums) == 0; + int[] numbers = new int[]{3, -10, -2}; System.out.println("absMin(" + Arrays.toString(numbers) + ") = " + absMin(numbers)); } diff --git a/Maths/AbsoluteValue.java b/Maths/AbsoluteValue.java index dc17213d6089..da570d0b4870 100644 --- a/Maths/AbsoluteValue.java +++ b/Maths/AbsoluteValue.java @@ -1,12 +1,12 @@ package Maths; -/** - * @author PatOnTheBack - */ - public class AbsoluteValue { public static void main(String[] args) { + assert absVal(-13) == 13; + assert absVal(0) == 0; + assert absVal(100) == 100; + int value = -34; System.out.println("The absolute value of " + value + " is " + absVal(value)); } diff --git a/Maths/MaxValue.java b/Maths/MaxValue.java index b1b258685f10..9be31cd1550b 100644 --- a/Maths/MaxValue.java +++ b/Maths/MaxValue.java @@ -17,6 +17,11 @@ public static int max(int a, int b) { } public static void main(String[] args) { + assert max(-3,3) == 3; + assert max(-6,-20) == -6; + assert max(100,32) == 100; + assert max(13,13) == 13; + int a = 3; int b = 4; System.out.format("max:%d between %d and %d", max(a, b), a, b); diff --git a/Maths/MinValue.java b/Maths/MinValue.java index ef1d6a085362..7bafd880c844 100644 --- a/Maths/MinValue.java +++ b/Maths/MinValue.java @@ -17,6 +17,11 @@ public static int min(int a, int b) { } public static void main(String[] args) { + assert min(-3,3) == -3; + assert min(-6,-20) == -20; + assert min(100,32) == 32; + assert min(13,13) == 13; + int a = 3; int b = 4; System.out.format("min:%d between %d and %d", min(a, b), a, b); From 98a191c9c11ffe1802b8f1ea6576c459b566ca42 Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Sun, 16 Aug 2020 22:55:56 +0800 Subject: [PATCH 373/521] Update and rename heap_sort.java to HeapSort.java --- Misc/{heap_sort.java => HeapSort.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Misc/{heap_sort.java => HeapSort.java} (98%) diff --git a/Misc/heap_sort.java b/Misc/HeapSort.java similarity index 98% rename from Misc/heap_sort.java rename to Misc/HeapSort.java index cf44b2b5a5df..3050dfd4ce2e 100644 --- a/Misc/heap_sort.java +++ b/Misc/HeapSort.java @@ -1,6 +1,6 @@ package Misc; -public class heap_sort { +public class HeapSort { public void sort(int[] arr) { int n = arr.length; From 0a086da413b53cfa3209f8ef38660566d550f5f2 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 16 Aug 2020 14:56:13 +0000 Subject: [PATCH 374/521] updating DIRECTORY.md --- DIRECTORY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index dc067c8087f8..74f4ffe740ee 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -149,7 +149,7 @@ * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) ## Misc - * [heap sort](https://github.com/TheAlgorithms/Java/blob/master/Misc/heap_sort.java) + * [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Misc/HeapSort.java) * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) From b4839c2c07e2d4fe4e62d96aac718f2d3210b8d6 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 16 Aug 2020 23:04:34 +0800 Subject: [PATCH 375/521] Added SumOfDigits --- Maths/SumOfDigits.java | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Maths/SumOfDigits.java diff --git a/Maths/SumOfDigits.java b/Maths/SumOfDigits.java new file mode 100644 index 000000000000..baa798a39e5d --- /dev/null +++ b/Maths/SumOfDigits.java @@ -0,0 +1,62 @@ +package Maths; + +public class SumOfDigits { + public static void main(String[] args) { + assert + sumOfDigits(-123) == 6 + && sumOfDigitsRecursion(-123) == 6 + && sumOfDigitsFast(-123) == 6; + + assert sumOfDigits(0) == 0 + && sumOfDigitsRecursion(0) == 0 + && sumOfDigitsFast(0) == 0; + + + assert sumOfDigits(12345) == 15 + && sumOfDigitsRecursion(12345) == 15 + && sumOfDigitsFast(12345) == 15; + } + + /** + * Calculate the sum of digits of a number + * + * @param number the number contains digits + * @return sum of digits of given {@code number} + */ + public static int sumOfDigits(int number) { + number = number < 0 ? -number : number; /* calculate abs value */ + int sum = 0; + while (number != 0) { + sum += number % 10; + number /= 10; + } + return sum; + } + + /** + * Calculate the sum of digits of a number using recursion + * + * @param number the number contains digits + * @return sum of digits of given {@code number} + */ + public static int sumOfDigitsRecursion(int number) { + number = number < 0 ? -number : number; /* calculate abs value */ + return number < 10 ? number : number % 10 + sumOfDigitsRecursion(number / 10); + } + + /** + * Calculate the sum of digits of a number using char array + * + * @param number the number contains digits + * @return sum of digits of given {@code number} + */ + public static int sumOfDigitsFast(int number) { + number = number < 0 ? -number : number; /* calculate abs value */ + char[] digits = (number + "").toCharArray(); + int sum = 0; + for (int i = 0; i < digits.length; ++i) { + sum += digits[i] - '0'; + } + return sum; + } +} From f9ae0888e61d695c954ad0247fc2950896fb0fd8 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 16 Aug 2020 15:05:08 +0000 Subject: [PATCH 376/521] updating DIRECTORY.md --- DIRECTORY.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index dc067c8087f8..f5f917efa486 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -143,13 +143,14 @@ * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) + * [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) ## MinimizingLateness * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) ## Misc - * [heap sort](https://github.com/TheAlgorithms/Java/blob/master/Misc/heap_sort.java) + * [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Misc/HeapSort.java) * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) From ae5536bddce3cbfcebeb2c4f2732028c483a3cb6 Mon Sep 17 00:00:00 2001 From: Ray S <68674276+rbshealy@users.noreply.github.com> Date: Sun, 16 Aug 2020 11:20:38 -0400 Subject: [PATCH 377/521] Fix array initialization --- Maths/AbsoluteMax.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Maths/AbsoluteMax.java b/Maths/AbsoluteMax.java index 581329c36927..05aa653bd43e 100644 --- a/Maths/AbsoluteMax.java +++ b/Maths/AbsoluteMax.java @@ -10,10 +10,10 @@ */ public class AbsoluteMax { public static void main(String[] args) { - int[] testnums = new int[]{-2, 0, 16}; + int[] testnums = {-2, 0, 16}; assert absMax(testnums) == 16; - int[] numbers = new int[]{3, -10, -2}; + int[] numbers = {3, -10, -2}; System.out.println("absMax(" + Arrays.toString(numbers) + ") = " + absMax(numbers)); } From 9a31b960ff21949a848df5c3a59b75520eb45ec6 Mon Sep 17 00:00:00 2001 From: Ray S <68674276+rbshealy@users.noreply.github.com> Date: Sun, 16 Aug 2020 11:21:16 -0400 Subject: [PATCH 378/521] Fix array initialization --- Maths/AbsoluteMin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Maths/AbsoluteMin.java b/Maths/AbsoluteMin.java index c09623f5ef68..597944dca0a2 100644 --- a/Maths/AbsoluteMin.java +++ b/Maths/AbsoluteMin.java @@ -10,10 +10,10 @@ */ public class AbsoluteMin { public static void main(String[] args) { - int[] testnums = new int[]{4, 0, 16}; + int[] testnums = {4, 0, 16}; assert absMin(testnums) == 0; - int[] numbers = new int[]{3, -10, -2}; + int[] numbers = {3, -10, -2}; System.out.println("absMin(" + Arrays.toString(numbers) + ") = " + absMin(numbers)); } From 13bb195dd7759e09e638bf015aa124391a02267a Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 16 Aug 2020 15:23:09 +0000 Subject: [PATCH 379/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index f5f917efa486..d70ba9fd2b73 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -143,6 +143,7 @@ * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) + * [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) * [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) From 5070a0bb28322d8562fd964baad4b9cb3917aebd Mon Sep 17 00:00:00 2001 From: rabbit Date: Mon, 17 Aug 2020 11:16:11 +0800 Subject: [PATCH 380/521] Create FindAverage.java add a findAverage java file in maths directory --- Maths/FindAverage.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Maths/FindAverage.java diff --git a/Maths/FindAverage.java b/Maths/FindAverage.java new file mode 100644 index 000000000000..ecb13ccffd3b --- /dev/null +++ b/Maths/FindAverage.java @@ -0,0 +1,25 @@ +package Maths; + +public class FindAverage { + + //Driver + public static void main(String[] args) { + int[] array = {2, 4, 10}; + assert findAverage(array) == 5; + } + + /** + * find average value of array + * + * @param array the array contains element and the sum does not + * excess long value limit + * @return average value + */ + public static int findAverage(int[] array) { + long sum = 0; + for (int i = 0 ; i < array.length; ++i) { + sum += array[i]; + } + return (int)(sum / array.length); + } +} From efdd1ddd42b3b7ad771df90742c4f7f502078918 Mon Sep 17 00:00:00 2001 From: Lakhan Nad Date: Mon, 17 Aug 2020 15:48:52 +0530 Subject: [PATCH 381/521] DS: Binary Search Tree added Closes #1420 --- DataStructures/Trees/BSTIterative.java | 265 +++++++++++++++++++++++++ DataStructures/Trees/BSTRecursive.java | 219 ++++++++++++++++++++ 2 files changed, 484 insertions(+) create mode 100644 DataStructures/Trees/BSTIterative.java create mode 100644 DataStructures/Trees/BSTRecursive.java diff --git a/DataStructures/Trees/BSTIterative.java b/DataStructures/Trees/BSTIterative.java new file mode 100644 index 000000000000..b08b0057a7b2 --- /dev/null +++ b/DataStructures/Trees/BSTIterative.java @@ -0,0 +1,265 @@ +/** + * + * + *

Binary Search Tree (Iterative)

+ * + * An implementation of BST iteratively. Binary Search Tree is a binary tree which satisfies three + * properties: left child is less than root node, right child is grater than root node, both left + * and right childs must themselves be a BST. + * + * @author [Lakhan Nad](https://github.com/Lakhan-Nad) + */ +import java.util.Stack; + +public class BSTIterative { + /** Reference for the node of BST. */ + private Node root; + + /** Default Constructor Initializes the root of BST with null. */ + BSTIterative() { + root = null; + } + + /** + * A method to insert a new value in BST. If the given value is already present in BST the + * insertion is ignored. + * + * @param data the value to be inserted + */ + public void add(int data) { + Node parent = null; + Node temp = this.root; + int rightOrLeft = -1; + /* Finds the proper place this node can + * be placed in according to rules of BST. + */ + while (temp != null) { + if (temp.data > data) { + parent = temp; + temp = parent.left; + rightOrLeft = 0; + } else if (temp.data < data) { + parent = temp; + temp = parent.right; + rightOrLeft = 1; + } else { + System.out.println(data + " is already present in BST."); + return; // if data already present we ignore insertion + } + } + /* Creates a newnode with the value passed + * Since this data doesn't already exists + */ + Node newnode = new Node(data); + /* If the parent node is null + * then the insertion is to be done in + * root itself. + */ + if (parent == null) { + this.root = newnode; + } else { + /* Check if insertion is to be made in + * left or right subtree. + */ + if (rightOrLeft == 0) { + parent.left = newnode; + } else { + parent.right = newnode; + } + } + } + + /** + * A method to delete the node in BST. If node is present it will be deleted + * + * @param data the value that needs to be deleted + */ + public void remove(int data) { + Node parent = null; + Node temp = this.root; + int rightOrLeft = -1; + /* Find the parent of the node and node itself + * That is to be deleted. + * parent variable store parent + * temp stores node itself. + * rightOrLeft use to keep track weather child + * is left or right subtree + */ + while (temp != null) { + if (temp.data == data) { + break; + } else if (temp.data > data) { + parent = temp; + temp = parent.left; + rightOrLeft = 0; + } else { + parent = temp; + temp = parent.right; + rightOrLeft = 1; + } + } + /* If temp is null than node with given value is not + * present in our tree. + */ + if (temp != null) { + Node replacement; // used to store the new values for replacing nodes + if (temp.right == null && temp.left == null) { // Leaf node Case + replacement = null; + } else if (temp.right == null) { // Node with only right child + replacement = temp.left; + temp.left = null; + } else if (temp.left == null) { // Node with only left child + replacement = temp.right; + temp.right = null; + } else { + /* If both left and right child are present + * we replace this nodes data with + * leftmost node's data in its right subtree + * to maintain the balance of BST. + * And then delete that node + */ + if (temp.right.left == null) { + temp.data = temp.right.data; + replacement = temp; + temp.right = temp.right.right; + } else { + Node parent2 = temp.right; + Node child = temp.right.left; + while (child.left != null) { + parent2 = child; + child = parent2.left; + } + temp.data = child.data; + parent2.left = child.right; + replacement = temp; + } + } + /* Change references of parent after + * deleting the child. + */ + if (parent == null) { + this.root = replacement; + } else { + if (rightOrLeft == 0) { + parent.left = replacement; + } else { + parent.right = replacement; + } + } + } + } + + /** A method for inorder traversal of BST. */ + public void inorder() { + if (this.root == null) { + System.out.println("This BST is empty."); + return; + } + System.out.println("Inorder traversal of this tree is:"); + Stack st = new Stack(); + Node cur = this.root; + while (cur != null || !st.empty()) { + while (cur != null) { + st.push(cur); + cur = cur.left; + } + cur = st.pop(); + System.out.print(cur.data + " "); + cur = cur.right; + } + System.out.println(); // for next line + } + + /** A method used to print postorder traversal of BST. */ + public void postorder() { + if (this.root == null) { + System.out.println("This BST is empty."); + return; + } + System.out.println("Postorder traversal of this tree is:"); + Stack st = new Stack(); + Node cur = this.root, temp2; + while (cur != null || !st.empty()) { + if (cur != null) { + st.push(cur); + cur = cur.left; + } else { + temp2 = st.peek(); + if (temp2.right != null) { + cur = temp2.right; + } else { + st.pop(); + while (!st.empty() && st.peek().right == temp2) { + System.out.print(temp2.data + " "); + temp2 = st.pop(); + } + System.out.print(temp2.data + " "); + } + } + } + System.out.println(); // for next line + } + + /** Method used to display preorder traversal of BST. */ + public void preorder() { + if (this.root == null) { + System.out.println("This BST is empty."); + return; + } + System.out.println("Preorder traversal of this tree is:"); + Stack st = new Stack(); + st.push(this.root); + Node temp; + while (!st.empty()) { + temp = st.pop(); + System.out.print(temp.data + " "); + if (temp.right != null) { + st.push(temp.right); + } + if (temp.left != null) { + st.push(temp.left); + } + } + System.out.println(); // for next line + } + + /** + * A method to check if given data exists in out Binary Search Tree. + * + * @param data the value that needs to be searched for + * @return boolean representing if the value was find + */ + public boolean find(int data) { + Node temp = this.root; + /* Check if node exists + */ + while (temp != null) { + if (temp.data > data) { + temp = temp.left; + } else if (temp.data < data) { + temp = temp.right; + } else { + /* If found return true + */ + System.out.println(data + " is present in the BST."); + return true; + } + } + System.out.println(data + " not found."); + return false; + } + + /** The Node class used for building binary search tree */ + private class Node { + int data; + Node left; + Node right; + + /** Constructor with data as parameter */ + Node(int d) { + data = d; + left = null; + right = null; + } + } +} diff --git a/DataStructures/Trees/BSTRecursive.java b/DataStructures/Trees/BSTRecursive.java new file mode 100644 index 000000000000..9405e60c7b19 --- /dev/null +++ b/DataStructures/Trees/BSTRecursive.java @@ -0,0 +1,219 @@ +/** + * + * + *

Binary Search Tree (Recursive)

+ * + * An implementation of BST recursively. In recursive implementation the checks are down the tree + * First root is checked if not found then its childs are checked Binary Search Tree is a binary + * tree which satisfies three properties: left child is less than root node, right child is grater + * than root node, both left and right childs must themselves be a BST. + * + *

I have made public functions as methods and to actually implement recursive approach I have + * used private methods + * + * @author [Lakhan Nad](https://github.com/Lakhan-Nad) + */ +public class BSTRecursive { + /** only data member is root of BST */ + private Node root; + /** Constructor use to initialize node as null */ + BSTRecursive() { + root = null; + } + + /** + * Recursive method to delete a data if present in BST. + * + * @param root the current node to search for data + * @param data the value to be deleted + * @return Node the updated value of root parameter after delete operation + */ + private Node delete(Node root, int data) { + if (root == null) { + System.out.println("No such data present in BST."); + } else if (root.data > data) { + root.left = delete(root.left, data); + } else if (root.data < data) { + root.right = delete(root.right, data); + } else { + if (root.right == null && root.left == null) { // If it is leaf node + root = null; + } else if (root.left == null) { // If only right node is present + Node temp = root.right; + root.right = null; + root = temp; + } else if (root.right == null) { // Only left node is present + Node temp = root.left; + root.left = null; + root = temp; + } else { // both child are present + Node temp = root.right; + // Find leftmost child of right subtree + while (temp.left != null) { + temp = temp.left; + } + root.data = temp.data; + root.right = delete(root.right, temp.data); + } + } + return root; + } + + /** + * Recursive insertion of value in BST. + * + * @param root to check if the data can be inserted in current node or its subtree + * @param data the value to be inserted + * @return the modified value of the root parameter after insertion + */ + private Node insert(Node root, int data) { + if (root == null) { + root = new Node(data); + } else if (root.data > data) { + root.left = insert(root.left, data); + } else if (root.data < data) { + root.right = insert(root.right, data); + } + return root; + } + + /** + * Recursively print Preorder traversal of the BST + * + * @param root + */ + private void preOrder(Node root) { + if (root == null) { + return; + } + System.out.print(root.data + " "); + if (root.left != null) { + preOrder(root.left); + } + if (root.right != null) { + preOrder(root.right); + } + } + + /** + * Recursively print Postorder travesal of BST. + * + * @param root + */ + private void postOrder(Node root) { + if (root == null) { + return; + } + if (root.left != null) { + postOrder(root.left); + } + if (root.right != null) { + postOrder(root.right); + } + System.out.print(root.data + " "); + } + + /** + * Recursively print Inorder traversal of BST. + * + * @param root + */ + private void inOrder(Node root) { + if (root == null) { + return; + } + if (root.left != null) { + inOrder(root.left); + } + System.out.print(root.data + " "); + if (root.right != null) { + inOrder(root.right); + } + } + + /** + * Serach recursively if the given value is present in BST or not. + * + * @param root the current node to check + * @param data the value to be checked + * @return boolean if data is present or not + */ + private boolean search(Node root, int data) { + if (root == null) { + return false; + } else if (root.data == data) { + return true; + } else if (root.data > data) { + return search(root.left, data); + } else { + return search(root.right, data); + } + } + + /** + * add in BST. if the value is not already present it is inserted or else no change takes place. + * + * @param data the value to be inserted + */ + public void add(int data) { + this.root = insert(this.root, data); + } + + /** + * If data is present in BST delete it else do nothing. + * + * @param data the value to be removed + */ + public void remove(int data) { + this.root = delete(this.root, data); + } + + /** To call inorder traversal on tree */ + public void inorder() { + System.out.println("Inorder traversal of this tree is:"); + inOrder(this.root); + System.out.println(); // for next line + } + + /** To call postorder traversal on tree */ + public void postorder() { + System.out.println("Postorder traversal of this tree is:"); + postOrder(this.root); + System.out.println(); // for next li + } + + /** To call preorder traversal on tree. */ + public void preorder() { + System.out.println("Preorder traversal of this tree is:"); + preOrder(this.root); + System.out.println(); // for next li + } + + /** + * To check if given value is present in tree or not. + * + * @param data + */ + public void find(int data) { + if (search(this.root, data)) { + System.out.println(data + " is present in given BST."); + return true; + } + System.out.println(data + " not found."); + return false; + } + + /** The Node class used for building binary search tree */ + private class Node { + int data; + Node left; + Node right; + + /** Constructor with data as parameter */ + Node(int d) { + data = d; + left = null; + right = null; + } + } +} From ed1273a35d255fb167b8a24e389e2faa28e68529 Mon Sep 17 00:00:00 2001 From: Ray Date: Mon, 17 Aug 2020 19:22:32 -0400 Subject: [PATCH 382/521] Add dynamic hash table functionality --- .../HashMap/Hashing/HashMapLinearProbing.java | 50 +++++++++++++++---- .../HashMap/Hashing/MainLinearProbing.java | 6 +++ 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/DataStructures/HashMap/Hashing/HashMapLinearProbing.java b/DataStructures/HashMap/Hashing/HashMapLinearProbing.java index 5c3767187bc8..4da123b808aa 100644 --- a/DataStructures/HashMap/Hashing/HashMapLinearProbing.java +++ b/DataStructures/HashMap/Hashing/HashMapLinearProbing.java @@ -1,22 +1,27 @@ package DataStructures.HashMap.Hashing; +import java.util.*; + /** * This class is an implementation of a hash table using linear probing - * + * It uses a dynamic array to lengthen the size of the hash table when + * load factor > .7 */ public class HashMapLinearProbing { - private int hsize; - private Integer[] buckets; + private int hsize; //size of the hash table + private Integer[] buckets; //array representing the table private Integer AVAILABLE; + private int size; //amount of elements in the hash table /** * Constructor initializes buckets array, hsize, and creates dummy object for AVAILABLE * @param hsize the desired size of the hash map */ public HashMapLinearProbing(int hsize) { - buckets = new Integer[hsize]; + this.buckets = new Integer[hsize]; this.hsize = hsize; - AVAILABLE = new Integer(Integer.MIN_VALUE); + this.AVAILABLE = new Integer(Integer.MIN_VALUE); + this.size = 0; } /** @@ -48,6 +53,7 @@ public void insertHash(int key) { for (int i = 0;i < hsize; i++) { if(buckets[hash] == null || buckets[hash] == AVAILABLE) { buckets[hash] = wrappedInt; + size++; return; } @@ -56,7 +62,7 @@ public void insertHash(int key) { } else { hash = 0; } - } + } } /** @@ -75,6 +81,7 @@ public void deleteHash(int key) { for(int i = 0;i < hsize; i++) { if(buckets[hash] != null && buckets[hash].equals(wrappedInt)) { buckets[hash] = AVAILABLE; + size--; return; } @@ -116,10 +123,12 @@ public int findHash(int key) { } for(int i = 0;i < hsize; i++) { - if(buckets[hash].equals(wrappedInt)) { - buckets[hash] = AVAILABLE; - return hash; - } + try { + if(buckets[hash].equals(wrappedInt)) { + buckets[hash] = AVAILABLE; + return hash; + } + } catch (Exception E) {} if(hash + 1 < hsize) { hash++; @@ -131,6 +140,27 @@ public int findHash(int key) { return -1; } + private void lengthenTable() { + buckets = Arrays.copyOf(buckets, hsize * 2); + hsize *= 2; + System.out.println("Table size is now: " + hsize); + } + + /** + * Checks the load factor of the hash table + * if greater than .7, automatically lengthens table + * to prevent further collisions + */ + public void checkLoadFactor() { + double factor = (double) size / hsize; + if(factor > .7) { + System.out.println("Load factor is " + factor + ", lengthening table"); + lengthenTable(); + } else { + System.out.println("Load factor is " + factor); + } + } + /** * isFull returns true if the hash map is full and false if not full * @return boolean is Empty diff --git a/DataStructures/HashMap/Hashing/MainLinearProbing.java b/DataStructures/HashMap/Hashing/MainLinearProbing.java index 594ca41f5b6a..c26435bdf960 100644 --- a/DataStructures/HashMap/Hashing/MainLinearProbing.java +++ b/DataStructures/HashMap/Hashing/MainLinearProbing.java @@ -17,6 +17,7 @@ public static void main(String[] args) { System.out.println("3. Print Table"); System.out.println("4. Exit"); System.out.println("5. Search and print key index"); + System.out.println("6. Check load factor"); choice = In.nextInt(); @@ -46,7 +47,12 @@ public static void main(String[] args) { System.out.println("Enter the Key to find and print: "); key = In.nextInt(); System.out.println("Key: "+ key + " is at index: "+ h.findHash(key)); + break; } + case 6: { + h.checkLoadFactor(); + break; + } } } From 9486101fb65180f02091871577750fdc6e83ba67 Mon Sep 17 00:00:00 2001 From: rabbit Date: Tue, 18 Aug 2020 09:41:32 +0800 Subject: [PATCH 383/521] Revert "Create FindAverage.java" This reverts commit 5070a0bb28322d8562fd964baad4b9cb3917aebd. --- Maths/FindAverage.java | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 Maths/FindAverage.java diff --git a/Maths/FindAverage.java b/Maths/FindAverage.java deleted file mode 100644 index ecb13ccffd3b..000000000000 --- a/Maths/FindAverage.java +++ /dev/null @@ -1,25 +0,0 @@ -package Maths; - -public class FindAverage { - - //Driver - public static void main(String[] args) { - int[] array = {2, 4, 10}; - assert findAverage(array) == 5; - } - - /** - * find average value of array - * - * @param array the array contains element and the sum does not - * excess long value limit - * @return average value - */ - public static int findAverage(int[] array) { - long sum = 0; - for (int i = 0 ; i < array.length; ++i) { - sum += array[i]; - } - return (int)(sum / array.length); - } -} From 94a65964d8905994c5b64a56128ad46007553341 Mon Sep 17 00:00:00 2001 From: rabbit Date: Tue, 18 Aug 2020 09:50:59 +0800 Subject: [PATCH 384/521] Update Average.java 1. add int type array 2. The equality of floating-point numbers should be judged by the absolute value of the difference less than a small number --- Maths/Average.java | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/Maths/Average.java b/Maths/Average.java index 35812ecc408e..9f4bb3af6b58 100644 --- a/Maths/Average.java +++ b/Maths/Average.java @@ -4,10 +4,13 @@ * Calculate average of a list of numbers */ public class Average { + private static final double SMALL_VALUE = 0.00001f; public static void main(String[] args) { - assert average(new double[]{3, 6, 9, 12, 15, 18, 21}) == 12; - assert average(new double[]{5, 10, 15, 20, 25, 30, 35}) == 20; - assert average(new double[]{1, 2, 3, 4, 5, 6, 7, 8}) == 4.5; + assert Math.abs(average(new double[]{3, 6, 9, 12, 15, 18, 21}) - 12) < SMALL_VALUE; + assert Math.abs(average(new double[]{5, 10, 15, 20, 25, 30, 35}) - 20) < SMALL_VALUE; + assert Math.abs(average(new double[]{1, 2, 3, 4, 5, 6, 7, 8}) - 4.5) < SMALL_VALUE; + int[] array = {2, 4, 10}; + assert average(array) == 5; } /** @@ -23,4 +26,19 @@ public static double average(double[] numbers) { } return sum / numbers.length; } -} + + /** + * find average value of int array + * + * @param array the array contains element and the sum does not + * excess long value limit + * @return average value + */ + public static int average(int[] array) { + long sum = 0; + for (int i = 0 ; i < array.length; ++i) { + sum += array[i]; + } + return (int)(sum / array.length); + } +} \ No newline at end of file From 75480d44bf437aac2e28717bf182600cafd0e714 Mon Sep 17 00:00:00 2001 From: Lakhan Nad Date: Tue, 18 Aug 2020 21:03:31 +0530 Subject: [PATCH 385/521] Tests added for BST DataStructures --- DataStructures/Trees/BSTIterative.java | 40 +++++-- DataStructures/Trees/BSTRecursive.java | 151 ++++++++++++++----------- 2 files changed, 118 insertions(+), 73 deletions(-) diff --git a/DataStructures/Trees/BSTIterative.java b/DataStructures/Trees/BSTIterative.java index b08b0057a7b2..8c8e254be727 100644 --- a/DataStructures/Trees/BSTIterative.java +++ b/DataStructures/Trees/BSTIterative.java @@ -3,9 +3,9 @@ * *

Binary Search Tree (Iterative)

* - * An implementation of BST iteratively. Binary Search Tree is a binary tree which satisfies three - * properties: left child is less than root node, right child is grater than root node, both left - * and right childs must themselves be a BST. + *

An implementation of BST iteratively. Binary Search Tree is a binary tree which satisfies + * three properties: left child is less than root node, right child is grater than root node, both + * left and right childs must themselves be a BST. * * @author [Lakhan Nad](https://github.com/Lakhan-Nad) */ @@ -20,6 +20,28 @@ public class BSTIterative { root = null; } + /** main function for tests */ + public static void main(String[] args) { + BSTIterative tree = new BSTIterative(); + tree.add(3); + tree.add(2); + tree.add(9); + assert !tree.find(4) : "4 is not yet present in BST"; + assert tree.find(2) : "2 should be present in BST"; + tree.remove(2); + assert !tree.find(2) : "2 was just deleted from BST"; + tree.remove(1); + assert !tree.find(1) : "Since 1 was not present so find deleting would do no change"; + tree.add(30); + tree.add(40); + assert tree.find(40) : "40 was inserted but not found"; + /* + Will print following order + 3 9 30 40 + */ + tree.inorder(); + } + /** * A method to insert a new value in BST. If the given value is already present in BST the * insertion is ignored. @@ -47,24 +69,24 @@ public void add(int data) { return; // if data already present we ignore insertion } } - /* Creates a newnode with the value passed + /* Creates a newNode with the value passed * Since this data doesn't already exists */ - Node newnode = new Node(data); + Node newNode = new Node(data); /* If the parent node is null * then the insertion is to be done in * root itself. */ if (parent == null) { - this.root = newnode; + this.root = newNode; } else { /* Check if insertion is to be made in * left or right subtree. */ if (rightOrLeft == 0) { - parent.left = newnode; + parent.left = newNode; } else { - parent.right = newnode; + parent.right = newNode; } } } @@ -250,7 +272,7 @@ public boolean find(int data) { } /** The Node class used for building binary search tree */ - private class Node { + private static class Node { int data; Node left; Node right; diff --git a/DataStructures/Trees/BSTRecursive.java b/DataStructures/Trees/BSTRecursive.java index 9405e60c7b19..a228326b4762 100644 --- a/DataStructures/Trees/BSTRecursive.java +++ b/DataStructures/Trees/BSTRecursive.java @@ -16,137 +16,160 @@ public class BSTRecursive { /** only data member is root of BST */ private Node root; + /** Constructor use to initialize node as null */ BSTRecursive() { root = null; } + /** main function for tests */ + public static void main(String[] args) { + BSTIterative tree = new BSTIterative(); + tree.add(5); + tree.add(10); + tree.add(9); + assert !tree.find(4) : "4 is not yet present in BST"; + assert tree.find(10) : "10 should be present in BST"; + tree.remove(9); + assert !tree.find(9) : "9 was just deleted from BST"; + tree.remove(1); + assert !tree.find(1) : "Since 1 was not present so find deleting would do no change"; + tree.add(20); + tree.add(70); + assert tree.find(70) : "70 was inserted but not found"; + /* + Will print in following order + 5 10 20 70 + */ + tree.inorder(); + } + /** * Recursive method to delete a data if present in BST. * - * @param root the current node to search for data + * @param node the current node to search for data * @param data the value to be deleted * @return Node the updated value of root parameter after delete operation */ - private Node delete(Node root, int data) { - if (root == null) { + private Node delete(Node node, int data) { + if (node == null) { System.out.println("No such data present in BST."); - } else if (root.data > data) { - root.left = delete(root.left, data); - } else if (root.data < data) { - root.right = delete(root.right, data); + } else if (node.data > data) { + node.left = delete(node.left, data); + } else if (node.data < data) { + node.right = delete(node.right, data); } else { - if (root.right == null && root.left == null) { // If it is leaf node - root = null; - } else if (root.left == null) { // If only right node is present - Node temp = root.right; - root.right = null; - root = temp; - } else if (root.right == null) { // Only left node is present - Node temp = root.left; - root.left = null; - root = temp; + if (node.right == null && node.left == null) { // If it is leaf node + node = null; + } else if (node.left == null) { // If only right node is present + Node temp = node.right; + node.right = null; + node = temp; + } else if (node.right == null) { // Only left node is present + Node temp = node.left; + node.left = null; + node = temp; } else { // both child are present - Node temp = root.right; + Node temp = node.right; // Find leftmost child of right subtree while (temp.left != null) { temp = temp.left; } - root.data = temp.data; - root.right = delete(root.right, temp.data); + node.data = temp.data; + node.right = delete(node.right, temp.data); } } - return root; + return node; } /** * Recursive insertion of value in BST. * - * @param root to check if the data can be inserted in current node or its subtree + * @param node to check if the data can be inserted in current node or its subtree * @param data the value to be inserted * @return the modified value of the root parameter after insertion */ - private Node insert(Node root, int data) { - if (root == null) { - root = new Node(data); - } else if (root.data > data) { - root.left = insert(root.left, data); - } else if (root.data < data) { - root.right = insert(root.right, data); + private Node insert(Node node, int data) { + if (node == null) { + node = new Node(data); + } else if (node.data > data) { + node.left = insert(node.left, data); + } else if (node.data < data) { + node.right = insert(node.right, data); } - return root; + return node; } /** * Recursively print Preorder traversal of the BST * - * @param root + * @param node the root node */ - private void preOrder(Node root) { - if (root == null) { + private void preOrder(Node node) { + if (node == null) { return; } - System.out.print(root.data + " "); - if (root.left != null) { - preOrder(root.left); + System.out.print(node.data + " "); + if (node.left != null) { + preOrder(node.left); } - if (root.right != null) { - preOrder(root.right); + if (node.right != null) { + preOrder(node.right); } } /** * Recursively print Postorder travesal of BST. * - * @param root + * @param node the root node */ - private void postOrder(Node root) { - if (root == null) { + private void postOrder(Node node) { + if (node == null) { return; } - if (root.left != null) { - postOrder(root.left); + if (node.left != null) { + postOrder(node.left); } - if (root.right != null) { - postOrder(root.right); + if (node.right != null) { + postOrder(node.right); } - System.out.print(root.data + " "); + System.out.print(node.data + " "); } /** * Recursively print Inorder traversal of BST. * - * @param root + * @param node the root node */ - private void inOrder(Node root) { - if (root == null) { + private void inOrder(Node node) { + if (node == null) { return; } - if (root.left != null) { - inOrder(root.left); + if (node.left != null) { + inOrder(node.left); } - System.out.print(root.data + " "); - if (root.right != null) { - inOrder(root.right); + System.out.print(node.data + " "); + if (node.right != null) { + inOrder(node.right); } } /** * Serach recursively if the given value is present in BST or not. * - * @param root the current node to check + * @param node the current node to check * @param data the value to be checked * @return boolean if data is present or not */ - private boolean search(Node root, int data) { - if (root == null) { + private boolean search(Node node, int data) { + if (node == null) { return false; - } else if (root.data == data) { + } else if (node.data == data) { return true; - } else if (root.data > data) { - return search(root.left, data); + } else if (node.data > data) { + return search(node.left, data); } else { - return search(root.right, data); + return search(node.right, data); } } @@ -192,9 +215,9 @@ public void preorder() { /** * To check if given value is present in tree or not. * - * @param data + * @param data the data to be found for */ - public void find(int data) { + public boolean find(int data) { if (search(this.root, data)) { System.out.println(data + " is present in given BST."); return true; @@ -204,7 +227,7 @@ public void find(int data) { } /** The Node class used for building binary search tree */ - private class Node { + private static class Node { int data; Node left; Node right; From 1856152b3aa9773ccd496bd2c10c6fef10df7b5b Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 18 Aug 2020 15:34:25 +0000 Subject: [PATCH 386/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index d70ba9fd2b73..6fda98a668d2 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -81,6 +81,8 @@ * Trees * [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) * [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) + * [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) + * [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) * [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) * [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) * [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) From cccc898ba1577bcb94168c2218b771add743b4c0 Mon Sep 17 00:00:00 2001 From: gijsh21 <69896881+gijsh21@users.noreply.github.com> Date: Thu, 20 Aug 2020 11:18:36 +0200 Subject: [PATCH 387/521] Create Mode.java For finding the mode of an array of numbers --- Maths/Mode.java | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Maths/Mode.java diff --git a/Maths/Mode.java b/Maths/Mode.java new file mode 100644 index 000000000000..e2b7f0d90f91 --- /dev/null +++ b/Maths/Mode.java @@ -0,0 +1,69 @@ +package Maths; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; + +/* + * Find the mode of an array of numbers + * + * The mode of an array of numbers is the most frequently occurring number in the array, + * or the most frequently occurring numbers if there are multiple numbers with the same frequency + */ +public class Mode { + + public static void main(String[] args) { + + /* Test array of integers */ + assert (mode(new int[]{})) == null; + assert Arrays.equals(mode(new int[]{5}), new int[]{5}); + assert Arrays.equals(mode(new int[]{7, 9, 9, 4, 5, 6, 7, 7, 8}), new int[]{7}); + assert Arrays.equals(mode(new int[]{7, 9, 9, 4, 5, 6, 7, 7, 9}), new int[]{7, 9}); + + } + + /* + * Find the mode of an array of integers + * + * @param int[] array of integers + * @return int[] mode of the array + */ + public static int[] mode(int[] numbers) { + + if(numbers.length == 0) return null; + + HashMap count = new HashMap(); + + for(int num : numbers) { + + if(count.containsKey(num)) { + + count.put(num, count.get(num) + 1); + + } else { + + count.put(num, 1); + + } + + } + + int max = Collections.max(count.values()); + ArrayList modes = new ArrayList(); + + for(int num : count.keySet()) { + + if(count.get(num) == max) { + + modes.add(num); + + } + + } + + return modes.stream().mapToInt(n -> n).toArray(); + + } + +} From bbe6f9410c9e734cc0426b1fa40f454fe9dc639d Mon Sep 17 00:00:00 2001 From: gijsh21 <69896881+gijsh21@users.noreply.github.com> Date: Thu, 20 Aug 2020 15:25:10 +0200 Subject: [PATCH 388/521] Apply suggestions from code review Co-authored-by: Du Yuanchao --- Maths/Mode.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Maths/Mode.java b/Maths/Mode.java index e2b7f0d90f91..d43ea16e8646 100644 --- a/Maths/Mode.java +++ b/Maths/Mode.java @@ -18,6 +18,7 @@ public static void main(String[] args) { /* Test array of integers */ assert (mode(new int[]{})) == null; assert Arrays.equals(mode(new int[]{5}), new int[]{5}); + assert Arrays.equals(mode(new int[]{1, 2, 3, 4, 5}), new int[]{1, 2, 3, 4, 5}); assert Arrays.equals(mode(new int[]{7, 9, 9, 4, 5, 6, 7, 7, 8}), new int[]{7}); assert Arrays.equals(mode(new int[]{7, 9, 9, 4, 5, 6, 7, 7, 9}), new int[]{7, 9}); @@ -26,17 +27,16 @@ public static void main(String[] args) { /* * Find the mode of an array of integers * - * @param int[] array of integers - * @return int[] mode of the array + * @param numbers array of integers + * @return mode of the array */ public static int[] mode(int[] numbers) { if(numbers.length == 0) return null; - HashMap count = new HashMap(); + HashMap count = new HashMap<>(); for(int num : numbers) { - if(count.containsKey(num)) { count.put(num, count.get(num) + 1); @@ -50,20 +50,14 @@ public static int[] mode(int[] numbers) { } int max = Collections.max(count.values()); - ArrayList modes = new ArrayList(); + ArrayList modes = new ArrayList<>(); for(int num : count.keySet()) { - if(count.get(num) == max) { - modes.add(num); - } - } - return modes.stream().mapToInt(n -> n).toArray(); - } } From da830515f91d8465e01fe8a46b6d1e9c19ebe399 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Thu, 20 Aug 2020 13:41:49 +0000 Subject: [PATCH 389/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 6fda98a668d2..67bf6d19067d 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -135,6 +135,7 @@ * [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) + * [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) * [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) * [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) From 8c5ec652f62a14454e58e557800934679edf66f8 Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 20 Aug 2020 23:26:06 +0800 Subject: [PATCH 390/521] * add AliquotSum * add Median --- Maths/AliquotSum.java | 35 +++++++++++++++++++++++++++++++++++ Maths/Median.java | 28 ++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 Maths/AliquotSum.java create mode 100644 Maths/Median.java diff --git a/Maths/AliquotSum.java b/Maths/AliquotSum.java new file mode 100644 index 000000000000..8d60df8af76d --- /dev/null +++ b/Maths/AliquotSum.java @@ -0,0 +1,35 @@ +package Maths; + +/** + *

+ * In number theory, the aliquot sum s(n) of a positive integer n is the sum of all proper divisors of n, + * that is, all divisors of n other than n itself. + * For example, the proper divisors of 15 (that is, the positive divisors of 15 that are not equal to 15) + * are 1, 3 and 5, so the aliquot sum of 15 is 9 i.e. (1 + 3 + 5). + *

+ * Wikipedia: https://en.wikipedia.org/wiki/Aliquot_sum + */ +public class AliquotSum { + public static void main(String[] args) { + assert aliquotSum(1) == 0; + assert aliquotSum(6) == 6; + assert aliquotSum(15) == 9; + assert aliquotSum(19) == 1; + } + + /** + * Finds the aliquot sum of an integer number + * + * @param number a positive integer + * @return aliquot sum of given {@code number} + */ + public static int aliquotSum(int number) { + int sum = 0; + for (int i = 1; i < number; ++i) { + if (number % i == 0) { + sum += i; + } + } + return sum; + } +} diff --git a/Maths/Median.java b/Maths/Median.java new file mode 100644 index 000000000000..849535838d7a --- /dev/null +++ b/Maths/Median.java @@ -0,0 +1,28 @@ +package Maths; + +import java.util.Arrays; + +/** + * Wikipedia: https://en.wikipedia.org/wiki/Median + */ +public class Median { + public static void main(String[] args) { + assert median(new int[]{0}) == 0; + assert median(new int[]{1, 2}) == 1.5; + assert median(new int[]{4, 1, 3, 2}) == 2.5; + assert median(new int[]{1, 3, 3, 6, 7, 8, 9}) == 6; + assert median(new int[]{1, 2, 3, 4, 5, 6, 8, 9}) == 4.5; + } + + /** + * Calculate average median + * + * @param values number series + * @return median of given {@code values} + */ + public static double median(int[] values) { + Arrays.sort(values); + int length = values.length; + return length % 2 == 0 ? (values[length / 2] + values[length / 2 - 1]) / 2.0 : values[length / 2]; + } +} From 34869cb5cb5d29344cd1faef73cf53928ca833be Mon Sep 17 00:00:00 2001 From: shellhub Date: Fri, 21 Aug 2020 00:00:48 +0800 Subject: [PATCH 391/521] optimization --- Maths/AliquotSum.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/AliquotSum.java b/Maths/AliquotSum.java index 8d60df8af76d..28dbca41a7ff 100644 --- a/Maths/AliquotSum.java +++ b/Maths/AliquotSum.java @@ -25,7 +25,7 @@ public static void main(String[] args) { */ public static int aliquotSum(int number) { int sum = 0; - for (int i = 1; i < number; ++i) { + for (int i = 1, limit = number / 2; i <= limit; ++i) { if (number % i == 0) { sum += i; } From a8070bd9087a1f6023debbbf21c9efa08e15de75 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Thu, 20 Aug 2020 16:01:26 +0000 Subject: [PATCH 392/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 6fda98a668d2..9c28fc838478 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -117,6 +117,7 @@ * [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) + * [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) @@ -134,6 +135,7 @@ * [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) * [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) + * [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) * [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) From 1e80212c23224ec74fedd903c4e983d4f7d37b3e Mon Sep 17 00:00:00 2001 From: rabbit Date: Fri, 21 Aug 2020 15:48:22 +0800 Subject: [PATCH 393/521] Update AnyBaseToAnyBase.java fix n="0" bug --- Conversions/AnyBaseToAnyBase.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Conversions/AnyBaseToAnyBase.java b/Conversions/AnyBaseToAnyBase.java index 2cef99260e6b..8ecc79904c11 100644 --- a/Conversions/AnyBaseToAnyBase.java +++ b/Conversions/AnyBaseToAnyBase.java @@ -115,7 +115,8 @@ public static String base2base(String n, int b1, int b2) { // the remainder until the quotient is zero. The number in the // new base is the remainders, with the last remainder // being the left-most digit. - + if (0 == decimalValue) + return "0"; // While the quotient is NOT zero: while (decimalValue != 0) { // If the remainder is a digit < 10, simply add it to From c771089882008a00bfb1b4b06f859bdd48aa55a7 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 23 Aug 2020 12:40:30 +0800 Subject: [PATCH 394/521] test using rand numbers --- Maths/AbsoluteValue.java | 15 +++++++++------ Maths/Ceil.java | 17 +++++++---------- Maths/FindMax.java | 23 +++++++++++++++++++---- Maths/FindMaxRecursion.java | 20 +++++++++++++++----- Maths/FindMin.java | 21 ++++++++++++++++++--- Maths/FindMinRecursion.java | 24 +++++++++++++++++++----- Maths/Floor.java | 17 +++++++---------- Maths/MaxValue.java | 28 +++++++++++++++++----------- Maths/MinValue.java | 28 +++++++++++++++++----------- 9 files changed, 128 insertions(+), 65 deletions(-) diff --git a/Maths/AbsoluteValue.java b/Maths/AbsoluteValue.java index da570d0b4870..440a7e230093 100644 --- a/Maths/AbsoluteValue.java +++ b/Maths/AbsoluteValue.java @@ -1,14 +1,17 @@ package Maths; +import java.util.Random; + public class AbsoluteValue { public static void main(String[] args) { - assert absVal(-13) == 13; - assert absVal(0) == 0; - assert absVal(100) == 100; - - int value = -34; - System.out.println("The absolute value of " + value + " is " + absVal(value)); + Random random = new Random(); + + /* test 1000 random numbers */ + for (int i = 1; i <= 1000; ++i) { + int randomNumber = random.nextInt(); + assert absVal(randomNumber) == Math.abs(randomNumber); + } } /** diff --git a/Maths/Ceil.java b/Maths/Ceil.java index d84ab82567cc..b6f08693617e 100644 --- a/Maths/Ceil.java +++ b/Maths/Ceil.java @@ -1,17 +1,14 @@ package Maths; +import java.util.Random; + public class Ceil { public static void main(String[] args) { - assert ceil(10) == Math.ceil(10); - assert ceil(-10) == Math.ceil(-10); - assert ceil(10.0) == Math.ceil(10.0); - assert ceil(-10.0) == Math.ceil(-10.0); - assert ceil(10.1) == Math.ceil(10.1); - assert ceil(-10.1) == Math.ceil(-10.1); - assert ceil(0) == Math.ceil(0); - assert ceil(-0) == Math.ceil(-0); - assert ceil(0.0) == Math.ceil(0.0); - assert ceil(-0.0) == Math.ceil(-0.0); + Random random = new Random(); + for (int i = 1; i <= 1000; ++i) { + double randomNumber = random.nextDouble(); + assert ceil(randomNumber) == Math.ceil(randomNumber); + } } /** diff --git a/Maths/FindMax.java b/Maths/FindMax.java index f98ec5d0647a..1a332367de15 100644 --- a/Maths/FindMax.java +++ b/Maths/FindMax.java @@ -1,18 +1,33 @@ package Maths; +import java.util.Arrays; +import java.util.Random; + public class FindMax { - //Driver + /** + * Driver Code + */ public static void main(String[] args) { - int[] array = {2, 4, 9, 7, 19, 94, 5}; - assert findMax(array) == 94; + Random random = new Random(); + + /* random size */ + int size = random.nextInt(100) + 1; + int[] array = new int[size]; + + /* init array with random numbers */ + for (int i = 0; i < size; i++) { + array[i] = random.nextInt() % 100; + } + + assert Arrays.stream(array).max().getAsInt() == findMax(array); } /** * find max of array * * @param array the array contains element - * @return max value + * @return max value of given array */ public static int findMax(int[] array) { int max = array[0]; diff --git a/Maths/FindMaxRecursion.java b/Maths/FindMaxRecursion.java index 6d0616269c4a..867390b315c5 100644 --- a/Maths/FindMaxRecursion.java +++ b/Maths/FindMaxRecursion.java @@ -1,13 +1,23 @@ package Maths; +import java.util.Arrays; +import java.util.Random; + public class FindMaxRecursion { public static void main(String[] args) { - int[] array = {2, 4, 9, 7, 19, 94, 5}; - int low = 0; - int high = array.length - 1; + Random rand = new Random(); + + /* rand size */ + int size = rand.nextInt(100) + 1; + int[] array = new int[size]; + + /* init array with rand numbers */ + for (int i = 0; i < size; i++) { + array[i] = rand.nextInt() % 100; + } - assert max(array, low, high) == 94; - assert max(array, array.length) == 94; + assert max(array, array.length) == Arrays.stream(array).max().getAsInt(); + assert max(array, 0, array.length - 1) == Arrays.stream(array).max().getAsInt(); } /** diff --git a/Maths/FindMin.java b/Maths/FindMin.java index a52b3ff206b1..b8996cd106eb 100644 --- a/Maths/FindMin.java +++ b/Maths/FindMin.java @@ -1,11 +1,26 @@ package Maths; +import java.util.Arrays; +import java.util.Random; + public class FindMin { - //Driver + /** + * Driver Code + */ public static void main(String[] args) { - int[] array = {2, 4, 9, 7, 19, 94, 5}; - assert findMin(array) == 2; + Random random = new Random(); + + /* random size */ + int size = random.nextInt(100) + 1; + int[] array = new int[size]; + + /* init array with random numbers */ + for (int i = 0; i < size; i++) { + array[i] = random.nextInt() % 100; + } + + assert Arrays.stream(array).min().getAsInt() == findMin(array); } /** diff --git a/Maths/FindMinRecursion.java b/Maths/FindMinRecursion.java index c1b5f2856cb0..ba9b9c91f24e 100644 --- a/Maths/FindMinRecursion.java +++ b/Maths/FindMinRecursion.java @@ -1,13 +1,27 @@ package Maths; +import java.util.Arrays; +import java.util.Random; + public class FindMinRecursion { + + /** + * Driver Code + */ public static void main(String[] args) { - int[] array = {2, 4, 9, -7, 19, 94, 5}; - int low = 0; - int high = array.length - 1; + Random rand = new Random(); + + /* rand size */ + int size = rand.nextInt(100) + 1; + int[] array = new int[size]; + + /* init array with rand numbers */ + for (int i = 0; i < size; i++) { + array[i] = rand.nextInt() % 100; + } - assert min(array, low, high) == -7; - assert min(array, array.length) == -7; + assert min(array, 0, array.length - 1) == Arrays.stream(array).min().getAsInt(); + assert min(array, array.length) == Arrays.stream(array).min().getAsInt(); } /** diff --git a/Maths/Floor.java b/Maths/Floor.java index e8a43da4103e..5bb4b86708f1 100644 --- a/Maths/Floor.java +++ b/Maths/Floor.java @@ -1,17 +1,14 @@ package Maths; +import java.util.Random; + public class Floor { public static void main(String[] args) { - assert floor(10) == Math.floor(10); - assert floor(-10) == Math.floor(-10); - assert floor(10.0) == Math.floor(10.0); - assert floor(-10.0) == Math.floor(-10.0); - assert floor(10.1) == Math.floor(10.1); - assert floor(-10.1) == Math.floor(-10.1); - assert floor(0) == Math.floor(0); - assert floor(-0) == Math.floor(-0); - assert floor(0.0) == Math.floor(0.0); - assert floor(-0.0) == Math.floor(-0.0); + Random random = new Random(); + for (int i = 1; i <= 1000; ++i) { + double randomNumber = random.nextDouble(); + assert floor(randomNumber) == Math.floor(randomNumber); + } } /** diff --git a/Maths/MaxValue.java b/Maths/MaxValue.java index 9be31cd1550b..d163bd3cfdc1 100644 --- a/Maths/MaxValue.java +++ b/Maths/MaxValue.java @@ -1,7 +1,24 @@ package Maths; +import java.util.Random; + public class MaxValue { + /** + * Driver Code + */ + public static void main(String[] args) { + Random rand = new Random(); + + /* test 100 times using rand numbers */ + for (int i = 1; i <= 100; ++i) { + /* generate number from -50 to 49 */ + int a = rand.nextInt(100) - 50; + int b = rand.nextInt(100) - 50; + assert max(a, b) == Math.max(a, b); + } + } + /** * Returns the greater of two {@code int} values. That is, the * result is the argument closer to the value of @@ -15,15 +32,4 @@ public class MaxValue { public static int max(int a, int b) { return a >= b ? a : b; } - - public static void main(String[] args) { - assert max(-3,3) == 3; - assert max(-6,-20) == -6; - assert max(100,32) == 100; - assert max(13,13) == 13; - - int a = 3; - int b = 4; - System.out.format("max:%d between %d and %d", max(a, b), a, b); - } } diff --git a/Maths/MinValue.java b/Maths/MinValue.java index 7bafd880c844..1e92169fce51 100644 --- a/Maths/MinValue.java +++ b/Maths/MinValue.java @@ -1,7 +1,24 @@ package Maths; +import java.util.Random; + public class MinValue { + /** + * Driver Code + */ + public static void main(String[] args) { + Random rand = new Random(); + + /* test 100 times using rand numbers */ + for (int i = 1; i <= 100; ++i) { + /* generate number from -50 to 49 */ + int a = rand.nextInt(100) - 50; + int b = rand.nextInt(100) - 50; + assert min(a, b) == Math.min(a, b); + } + } + /** * Returns the smaller of two {@code int} values. That is, * the result the argument closer to the value of @@ -15,15 +32,4 @@ public class MinValue { public static int min(int a, int b) { return a <= b ? a : b; } - - public static void main(String[] args) { - assert min(-3,3) == -3; - assert min(-6,-20) == -20; - assert min(100,32) == 32; - assert min(13,13) == 13; - - int a = 3; - int b = 4; - System.out.format("min:%d between %d and %d", min(a, b), a, b); - } } From 14b271632dea7d88c6136b7377ae244be24066c2 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 23 Aug 2020 13:06:49 +0800 Subject: [PATCH 395/521] Added pull request template --- .github/pull_request_template.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000000..1c134e481976 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,23 @@ +### **Describe your change:** + + + +* [ ] Add an algorithm? +* [ ] Fix a bug or typo in an existing algorithm? +* [ ] Documentation change? + +#### References + + +### **Checklist:** + + +* [ ] I have read [CONTRIBUTING.md](https://github.com/TheAlgorithms/Java/blob/master/CONTRIBUTING.md). +* [ ] This pull request is all my own work -- I have not plagiarized. +* [ ] I know that pull requests will not be merged if they fail the automated tests. +* [ ] This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms. +* [ ] All new Java files are placed inside an existing directory. +* [ ] All filenames are in all uppercase characters with no spaces or dashes. +* [ ] All functions and variable names follow Java naming conventions. +* [ ] All new algorithms have a URL in its comments that points to Wikipedia or other similar explanation. +* [ ] If this pull request resolves one or more open issues then the commit message contains `Fixes: #{$ISSUE_NO}`. From 6356db0b9771902ea3deb9f1469326f5453bdc87 Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 26 Aug 2020 00:05:11 +0800 Subject: [PATCH 396/521] * rename file * create strings directory * fix docs * add test --- {Others => Maths}/Armstrong.java | 2 +- Others/Abecedarian.java | 24 ----------- Others/Palindrome.java | 50 ----------------------- Others/ReverseString.java | 46 --------------------- strings/Alphabetical.java | 35 ++++++++++++++++ strings/Palindrome.java | 68 ++++++++++++++++++++++++++++++++ strings/ReverseString.java | 44 +++++++++++++++++++++ 7 files changed, 148 insertions(+), 121 deletions(-) rename {Others => Maths}/Armstrong.java (98%) delete mode 100644 Others/Abecedarian.java delete mode 100644 Others/Palindrome.java delete mode 100644 Others/ReverseString.java create mode 100644 strings/Alphabetical.java create mode 100644 strings/Palindrome.java create mode 100644 strings/ReverseString.java diff --git a/Others/Armstrong.java b/Maths/Armstrong.java similarity index 98% rename from Others/Armstrong.java rename to Maths/Armstrong.java index 109993280efd..60fd8b40ad1a 100644 --- a/Others/Armstrong.java +++ b/Maths/Armstrong.java @@ -1,4 +1,4 @@ -package Others; +package strings; /** * An Armstrong number is equal to the sum of the cubes of its digits. diff --git a/Others/Abecedarian.java b/Others/Abecedarian.java deleted file mode 100644 index 13c9b7286389..000000000000 --- a/Others/Abecedarian.java +++ /dev/null @@ -1,24 +0,0 @@ -package Others; - -/** - * An Abecadrian is a word where each letter is in alphabetical order - * - * @author Oskar Enmalm - */ -class Abecedarian { - - public static boolean isAbecedarian(String s) { - int index = s.length() - 1; - - for (int i = 0; i < index; i++) { - - if (s.charAt(i) <= s.charAt(i + 1)) { - } //Need to check if each letter for the whole word is less than the one before it - - else { - return false; - } - } - return true; - } -} diff --git a/Others/Palindrome.java b/Others/Palindrome.java deleted file mode 100644 index af4a72fdede3..000000000000 --- a/Others/Palindrome.java +++ /dev/null @@ -1,50 +0,0 @@ -package Others; - -class Palindrome { - - private String reverseString(String x) { // *helper method - StringBuilder output = new StringBuilder(x); - return output.reverse().toString(); - } - - public boolean FirstWay(String x) { // *palindrome method, returns true if palindrome - if (x == null || x.length() <= 1) - return true; - return x.equalsIgnoreCase(reverseString(x)); - } - - public boolean SecondWay(String x) { - if (x.length() == 0 || x.length() == 1) - return true; - - if (x.charAt(0) != x.charAt(x.length() - 1)) - return false; - - return SecondWay(x.substring(1, x.length() - 1)); - } - - /** - * This method ignores all non-alphanumeric characters and case runs in O(n) - * where n is the length of s - * - * @param s String to check - * @return true if s is palindrome else false - */ - public boolean isPalindrome(String s) { - s = s.toLowerCase().trim(); - StringBuilder sb = new StringBuilder(); - for (char c : s.toCharArray()) { - if (Character.isLetter(c) || Character.isDigit(c)) - sb.append(c); - } - s = sb.toString(); - int start = 0; - int end = s.length() - 1; - while (start <= end) { - if (s.charAt(start++) != s.charAt(end--)) - return false; - - } - return true; - } -} diff --git a/Others/ReverseString.java b/Others/ReverseString.java deleted file mode 100644 index 76bbfb5da93a..000000000000 --- a/Others/ReverseString.java +++ /dev/null @@ -1,46 +0,0 @@ -package Others; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -/** - * This method produces a reversed version of a string - * - * @author Unknown - */ -public class ReverseString { - - /** - * This method reverses the string str and returns it - * - * @param str String to be reversed - * @return Reversed string - */ - public static String reverse(String str) { - if (str == null || str.isEmpty()) return str; - - char[] arr = str.toCharArray(); - for (int i = 0, j = str.length() - 1; i < j; i++, j--) { - char temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } - return new String(arr); - } - - /** - * Main Method - * - * @param args Command line arguments - * @throws IOException Exception thrown because of BufferedReader - */ - public static void main(String[] args) throws IOException { - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - System.out.println("Enter the string"); - String srr = br.readLine(); - System.out.println("Reverse=" + reverse(srr)); - br.close(); - } -} - diff --git a/strings/Alphabetical.java b/strings/Alphabetical.java new file mode 100644 index 000000000000..babf542bf01f --- /dev/null +++ b/strings/Alphabetical.java @@ -0,0 +1,35 @@ +package strings; + +/** + *

+ * Alphabetical order is a system whereby character strings are placed in order + * based on the position of the characters in the conventional ordering of an alphabet. + *

+ * Wikipedia: https://en.wikipedia.org/wiki/Alphabetical_order + */ +class Alphabetical { + + public static void main(String[] args) { + assert !isAlphabetical("123abc"); + assert isAlphabetical("aBC"); + assert isAlphabetical("abc"); + assert !isAlphabetical("xyzabc"); + assert isAlphabetical("abcxyz"); + } + + /** + * Check if a string is alphabetical order or not + * + * @param s a string + * @return {@code true} if given string is alphabetical order, otherwise {@code false} + */ + public static boolean isAlphabetical(String s) { + s = s.toLowerCase(); + for (int i = 0; i < s.length() - 1; ++i) { + if (!Character.isLetter(s.charAt(i)) || !(s.charAt(i) <= s.charAt(i + 1))) { + return false; + } + } + return true; + } +} \ No newline at end of file diff --git a/strings/Palindrome.java b/strings/Palindrome.java new file mode 100644 index 000000000000..8f95a83a0787 --- /dev/null +++ b/strings/Palindrome.java @@ -0,0 +1,68 @@ +package strings; + +/** + * Wikipedia: https://en.wikipedia.org/wiki/Palindrome + */ +class Palindrome { + + /** + * Driver Code + */ + public static void main(String[] args) { + String[] palindromes = {null, "", "aba", "123321"}; + for (String s : palindromes) { + assert isPalindrome(s) && isPalindromeRecursion(s) && isPalindrome1(s); + } + + String[] notPalindromes = {"abb", "abc", "abc123"}; + for (String s : notPalindromes) { + assert !isPalindrome(s) && !isPalindromeRecursion(s) && !isPalindrome1(s); + } + } + + /** + * Check if a string is palindrome string or not + * + * @param s a string to check + * @return {@code true} if given string is palindrome, otherwise {@code false} + */ + public static boolean isPalindrome(String s) { + return (s == null || s.length() <= 1) || s.equals(new StringBuilder(s).reverse().toString()); + } + + /** + * Check if a string is palindrome string or not using recursion + * + * @param s a string to check + * @return {@code true} if given string is palindrome, otherwise {@code false} + */ + public static boolean isPalindromeRecursion(String s) { + if (s == null || s.length() <= 1) { + return true; + } + + if (s.charAt(0) != s.charAt(s.length() - 1)) { + return false; + } + + return isPalindrome(s.substring(1, s.length() - 1)); + } + + /** + * Check if a string is palindrome string or not another way + * + * @param s a string to check + * @return {@code true} if given string is palindrome, otherwise {@code false} + */ + public static boolean isPalindrome1(String s) { + if (s == null || s.length() <= 1) { + return true; + } + for (int i = 0, j = s.length() - 1; i < j; ++i, --j) { + if (s.charAt(i) != s.charAt(j)) { + return false; + } + } + return true; + } +} diff --git a/strings/ReverseString.java b/strings/ReverseString.java new file mode 100644 index 000000000000..71191731fe37 --- /dev/null +++ b/strings/ReverseString.java @@ -0,0 +1,44 @@ +package strings; + +/** + * Reverse String using different version + */ +public class ReverseString { + + public static void main(String[] args) { + assert reverse("abc123").equals("321cba"); + assert reverse2("abc123").equals("321cba"); + } + + /** + * easiest way to reverses the string str and returns it + * + * @param str string to be reversed + * @return reversed string + */ + public static String reverse(String str) { + return new StringBuilder(str).reverse().toString(); + } + + /** + * second way to reverses the string str and returns it + * + * @param str string to be reversed + * @return reversed string + */ + public static String reverse2(String str) { + + if (str == null || str.isEmpty()) { + return str; + } + + char[] value = str.toCharArray(); + for (int i = 0, j = str.length() - 1; i < j; i++, j--) { + char temp = value[i]; + value[i] = value[j]; + value[j] = temp; + } + return new String(value); + } + +} \ No newline at end of file From 1d0bc46551ea522088d890c391731bf5d9c31c69 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 25 Aug 2020 16:06:31 +0000 Subject: [PATCH 397/521] updating DIRECTORY.md --- DIRECTORY.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index c90502c7042a..6abc2b576c83 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -120,6 +120,7 @@ * [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) + * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) * [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) * [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) @@ -162,8 +163,6 @@ ## Others * [3 sum](https://github.com/TheAlgorithms/Java/blob/master/Others/3%20sum.java) - * [Abecedarian](https://github.com/TheAlgorithms/Java/blob/master/Others/Abecedarian.java) - * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Others/Armstrong.java) * [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) * [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) @@ -181,7 +180,6 @@ * [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) * [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) * [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) - * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/Palindrome.java) * [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Others/PowerOfTwoOrNot.java) @@ -190,7 +188,6 @@ * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) - * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseString.java) * [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) * [Rotation of array without using extra space](https://github.com/TheAlgorithms/Java/blob/master/Others/Rotation%20of%20array%20without%20using%20extra%20space.java) * [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) @@ -235,3 +232,8 @@ * [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) * [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) * [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) + +## strings + * [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) + * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) + * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) From 94bb2088be676fc152138b460afddd8ed063c13a Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Wed, 26 Aug 2020 00:12:00 +0800 Subject: [PATCH 398/521] Update Maths/Armstrong.java --- Maths/Armstrong.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Maths/Armstrong.java b/Maths/Armstrong.java index 60fd8b40ad1a..e1e10847376b 100644 --- a/Maths/Armstrong.java +++ b/Maths/Armstrong.java @@ -1,4 +1,4 @@ -package strings; +package Maths; /** * An Armstrong number is equal to the sum of the cubes of its digits. From 19176d9edee360780f92a646e44044fb08a007db Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 26 Aug 2020 21:40:48 +0800 Subject: [PATCH 399/521] rename file --- Maths/PowerOfTwoOrNot.java | 28 ++++++++++++++++++++++++++++ Others/PowerOfTwoOrNot.java | 36 ------------------------------------ 2 files changed, 28 insertions(+), 36 deletions(-) create mode 100644 Maths/PowerOfTwoOrNot.java delete mode 100644 Others/PowerOfTwoOrNot.java diff --git a/Maths/PowerOfTwoOrNot.java b/Maths/PowerOfTwoOrNot.java new file mode 100644 index 000000000000..d03151bcbbb7 --- /dev/null +++ b/Maths/PowerOfTwoOrNot.java @@ -0,0 +1,28 @@ +package Maths; + +/** + * A utility to check if a given number is power of two or not. + * For example 8,16 etc. + */ + +public class PowerOfTwoOrNot { + + public static void main(String[] args) { + assert !checkIfPowerOfTwoOrNot(0); + assert checkIfPowerOfTwoOrNot(1); + assert checkIfPowerOfTwoOrNot(8); + assert checkIfPowerOfTwoOrNot(16); + assert checkIfPowerOfTwoOrNot(1024); + } + + + /** + * Checks whether given number is power of two or not. + * + * @param number the number to check + * @return {@code true} if given number is power of two, otherwise {@code false} + */ + public static boolean checkIfPowerOfTwoOrNot(int number) { + return number != 0 && ((number & (number - 1)) == 0); + } +} diff --git a/Others/PowerOfTwoOrNot.java b/Others/PowerOfTwoOrNot.java deleted file mode 100644 index 8f0400133066..000000000000 --- a/Others/PowerOfTwoOrNot.java +++ /dev/null @@ -1,36 +0,0 @@ -package Others; - -import java.util.Scanner; - -/** - * A utility to check if a given number is power of two or not. - * For example 8,16 etc. - */ - -public class PowerOfTwoOrNot { - - public static void main(String[] args) { - - Scanner sc = new Scanner(System.in); - System.out.println("Enter the number"); - int num = sc.nextInt(); - boolean isPowerOfTwo = checkIfPowerOfTwoOrNot(num); - if (isPowerOfTwo) { - System.out.println("Number is a power of two"); - } else { - System.out.println("Number is not a power of two"); - } - sc.close(); - } - - - /** - * Checks whether given number is power of two or not. - * - * @param number - * @return boolean - */ - public static boolean checkIfPowerOfTwoOrNot(int number) { - return number != 0 && ((number & (number - 1)) == 0); - } -} From 3d3ca095397c2f91e0fcf3d14df6a03bd3f9630a Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 26 Aug 2020 13:41:40 +0000 Subject: [PATCH 400/521] updating DIRECTORY.md --- DIRECTORY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 6abc2b576c83..8e84bc15ab07 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -146,6 +146,7 @@ * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) * [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) + * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) @@ -182,7 +183,6 @@ * [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) * [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) - * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Others/PowerOfTwoOrNot.java) * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) From 0f4905d1d99740139a661fd32226d89baa902449 Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 27 Aug 2020 00:01:50 +0800 Subject: [PATCH 401/521] * Lower.java * Upper.java * Pangram.java * CharactersSame.java * CheckAnagrams.java --- strings/CharactersSame.java | 29 +++++++++++++++++++++++++++ strings/CheckAnagrams.java | 32 ++++++++++++++++++++++++++++++ strings/Lower.java | 30 ++++++++++++++++++++++++++++ strings/Pangram.java | 39 +++++++++++++++++++++++++++++++++++++ strings/Upper.java | 30 ++++++++++++++++++++++++++++ 5 files changed, 160 insertions(+) create mode 100644 strings/CharactersSame.java create mode 100644 strings/CheckAnagrams.java create mode 100644 strings/Lower.java create mode 100644 strings/Pangram.java create mode 100644 strings/Upper.java diff --git a/strings/CharactersSame.java b/strings/CharactersSame.java new file mode 100644 index 000000000000..d88c03209d88 --- /dev/null +++ b/strings/CharactersSame.java @@ -0,0 +1,29 @@ +package strings; + +public class CharactersSame { + + /** + * Driver Code + */ + public static void main(String[] args) { + assert isAllCharactersSame(""); + assert !isAllCharactersSame("aab"); + assert isAllCharactersSame("aaa"); + assert isAllCharactersSame("11111"); + } + + /** + * check if all the characters of a string are same + * + * @param s the string to check + * @return {@code true} if all characters of a string are same, otherwise {@code false} + */ + public static boolean isAllCharactersSame(String s) { + for (int i = 1, length = s.length(); i < length; ++i) { + if (s.charAt(i) != s.charAt(0)) { + return false; + } + } + return true; + } +} diff --git a/strings/CheckAnagrams.java b/strings/CheckAnagrams.java new file mode 100644 index 000000000000..46642e01e4b7 --- /dev/null +++ b/strings/CheckAnagrams.java @@ -0,0 +1,32 @@ +package strings; + +import java.util.Arrays; + +/** + * Two strings are anagrams if they are made of the same letters + * arranged differently (ignoring the case). + */ +public class CheckAnagrams { + public static void main(String[] args) { + assert isAnagrams("Silent", "Listen"); + assert isAnagrams("This is a string", "Is this a string"); + assert !isAnagrams("There", "Their"); + } + + /** + * Check if two strings are anagrams or not + * + * @param s1 the first string + * @param s2 the second string + * @return {@code true} if two string are anagrams, otherwise {@code false} + */ + public static boolean isAnagrams(String s1, String s2) { + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + char[] values1 = s1.toCharArray(); + char[] values2 = s2.toCharArray(); + Arrays.sort(values1); + Arrays.sort(values2); + return new String(values1).equals(new String(values2)); + } +} diff --git a/strings/Lower.java b/strings/Lower.java new file mode 100644 index 000000000000..15cc027eb785 --- /dev/null +++ b/strings/Lower.java @@ -0,0 +1,30 @@ +package strings; + +public class Lower { + + /** + * Driver Code + */ + public static void main(String[] args) { + String[] strings = {"ABC", "ABC123", "abcABC", "abc123ABC"}; + for (String s : strings) { + assert toLowerCase(s).equals(s.toLowerCase()); + } + } + + /** + * Converts all of the characters in this {@code String} to lower case + * + * @param s the string to convert + * @return the {@code String}, converted to lowercase. + */ + public static String toLowerCase(String s) { + char[] values = s.toCharArray(); + for (int i = 0; i < values.length; ++i) { + if (Character.isLetter(values[i]) && Character.isUpperCase(values[i])) { + values[i] = Character.toLowerCase(values[i]); + } + } + return new String(values); + } +} diff --git a/strings/Pangram.java b/strings/Pangram.java new file mode 100644 index 000000000000..a18cb12c783e --- /dev/null +++ b/strings/Pangram.java @@ -0,0 +1,39 @@ +package strings; + +/** + * Wikipedia: https://en.wikipedia.org/wiki/Pangram + */ +public class Pangram { + + /** + * Driver Code + */ + public static void main(String[] args) { + assert isPangram("The quick brown fox jumps over the lazy dog"); + assert !isPangram("The quick brown fox jumps over the azy dog"); /* not exists l character */ + } + + /** + * Check if a string is a pangram string or not + * + * @param s string to check + * @return {@code true} if given string is pangram, otherwise {@code false} + */ + public static boolean isPangram(String s) { + boolean[] marked = new boolean[26]; /* by default all letters don't exists */ + char[] values = s.toCharArray(); + for (char value : values) { + if (Character.isLetter(value)) { + int index = Character.isUpperCase(value) ? value - 'A' : value - 'a'; + marked[index] = true; /* mark current character exists */ + } + } + + for (boolean b : marked) { + if (!b) { + return false; + } + } + return true; + } +} diff --git a/strings/Upper.java b/strings/Upper.java new file mode 100644 index 000000000000..ef5a616d05f2 --- /dev/null +++ b/strings/Upper.java @@ -0,0 +1,30 @@ +package strings; + +public class Upper { + + /** + * Driver Code + */ + public static void main(String[] args) { + String[] strings = {"ABC", "ABC123", "abcABC", "abc123ABC"}; + for (String s : strings) { + assert toUpperCase(s).equals(s.toUpperCase()); + } + } + + /** + * Converts all of the characters in this {@code String} to upper case + * + * @param s the string to convert + * @return the {@code String}, converted to uppercase. + */ + public static String toUpperCase(String s) { + char[] values = s.toCharArray(); + for (int i = 0; i < values.length; ++i) { + if (Character.isLetter(values[i]) && Character.isLowerCase(values[i])) { + values[i] = Character.toUpperCase(values[i]); + } + } + return new String(values); + } +} From e88ff87df5d462f3f9b23dcba686e59c69ee8059 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 26 Aug 2020 16:03:29 +0000 Subject: [PATCH 402/521] updating DIRECTORY.md --- DIRECTORY.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 6abc2b576c83..0f2e3528cb0f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -146,6 +146,7 @@ * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) * [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) + * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) @@ -182,7 +183,6 @@ * [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) * [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) - * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Others/PowerOfTwoOrNot.java) * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) @@ -235,5 +235,10 @@ ## strings * [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) + * [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) + * [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) + * [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) + * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) + * [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) From 1b09878aafa6c3096fe426771b0c3d8056c7b7f1 Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 27 Aug 2020 20:23:41 +0800 Subject: [PATCH 403/521] update Stack --- DataStructures/Stacks/StackArray.java | 32 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/DataStructures/Stacks/StackArray.java b/DataStructures/Stacks/StackArray.java index 4365dc448d2d..eaad1d401b6b 100644 --- a/DataStructures/Stacks/StackArray.java +++ b/DataStructures/Stacks/StackArray.java @@ -8,32 +8,31 @@ * of an array implementation of a Stack. So an element can only be added/removed * from the end of the array. In theory stack have no fixed size, but with an * array implementation it does. - * - * @author Unknown */ public class StackArray { /** - * Main method - * - * @param args Command line arguments + * Driver Code */ public static void main(String[] args) { // Declare a stack of maximum size 4 StackArray myStackArray = new StackArray(4); + assert myStackArray.isEmpty(); + assert !myStackArray.isFull(); + // Populate the stack myStackArray.push(5); myStackArray.push(8); myStackArray.push(2); myStackArray.push(9); - System.out.println("*********************Stack Array Implementation*********************"); - System.out.println(myStackArray.isEmpty()); // will print false - System.out.println(myStackArray.isFull()); // will print true - System.out.println(myStackArray.peek()); // will print 9 - System.out.println(myStackArray.pop()); // will print 9 - System.out.println(myStackArray.peek()); // will print 2 + assert !myStackArray.isEmpty(); + assert myStackArray.isFull(); + assert myStackArray.peek() == 9; + assert myStackArray.pop() == 9; + assert myStackArray.peek() == 2; + assert myStackArray.size() == 3; } /** @@ -62,7 +61,7 @@ public static void main(String[] args) { public StackArray() { this(DEFAULT_CAPACITY); } - + /** * Constructor * @@ -162,4 +161,13 @@ public boolean isFull() { public void makeEmpty() { // Doesn't delete elements in the array but if you call top = -1; // push method after calling makeEmpty it will overwrite previous values } + + /** + * Return size of stack + * + * @return size of stack + */ + public int size() { + return top + 1; + } } From 5606a8de0a3cb4a19a86f63136d057d60b75b25b Mon Sep 17 00:00:00 2001 From: = Date: Thu, 27 Aug 2020 20:31:49 +0800 Subject: [PATCH 404/521] update Java/Maths/PrimeFactorization.java --- Maths/PrimeFactorization.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Maths/PrimeFactorization.java b/Maths/PrimeFactorization.java index a488bf8e990c..bba2057d8ea9 100644 --- a/Maths/PrimeFactorization.java +++ b/Maths/PrimeFactorization.java @@ -11,6 +11,7 @@ public static void main(String[] args){ int n = scanner.nextInt(); System.out.print(("printing factors of " + n + " : ")); pfactors(n); + scanner.close(); } public static void pfactors(int n){ From 68bb2db6fb99e3be8640334ddc18297d090ecbf0 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 30 Aug 2020 20:03:07 +0800 Subject: [PATCH 405/521] rotation string --- strings/Rotation.java | 64 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 strings/Rotation.java diff --git a/strings/Rotation.java b/strings/Rotation.java new file mode 100644 index 000000000000..e1f0046f15f4 --- /dev/null +++ b/strings/Rotation.java @@ -0,0 +1,64 @@ +package strings; + + +/** + * Given a string, moving several characters + * in front of the string to the end of the string. + * For example, move the two characters'a' and 'b' in + * front of the string "abcdef" to the end of the string, + * so that the original string becomes the string "cdefab" + */ +public class Rotation { + public static void main(String[] args) { + assert rotation("abcdef", 2).equals("cdefab"); + + char[] values = "abcdef".toCharArray(); + rotation(values, 2); + assert new String(values).equals("cdefab"); + } + + /** + * Move {@code n} characters in front of given string to the end of string + * time complexity: O(n) + * space complexity: O(n) + * + * @param s given string + * @param n the total characters to be moved + * @return string after rotation + */ + public static String rotation(String s, int n) { + return s.substring(n) + s.substring(0, n); + } + + /** + * Move {@code n} characters in front of given character array to the end of array + * time complexity: O(n) + * space complexity: O(1) + * + * @param values given character array + * @param n the total characters to be moved + */ + public static void rotation(char[] values, int n) { + reverse(values, 0, n - 1); + reverse(values, n, values.length - 1); + reverse(values, 0, values.length - 1); + } + + /** + * Reverse character array + * + * @param values character array + * @param from begin index of given array + * @param to end index of given array + */ + public static void reverse(char[] values, int from, int to) { + while (from < to) { + char temp = values[from]; + values[from] = values[to]; + values[to] = temp; + from++; + to--; + } + } + +} From 93cee09e995e5bb6d870ef86fb6ffe2330c947fc Mon Sep 17 00:00:00 2001 From: NorthernBrain Date: Mon, 31 Aug 2020 18:36:38 +0800 Subject: [PATCH 406/521] Modify to prevent memory leaks. --- DynamicProgramming/MinimumSumPartition.java | 1 + 1 file changed, 1 insertion(+) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 9cbfe7ec2025..18668e73e23c 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -41,6 +41,7 @@ public static void main (String[] args) min = Math.min(min,(sum-2*ans[i])); System.out.println(min); } + sc.close(); } static int[] subset(int arr[],int sum) { From e7193aab8a22460a2ae5507263235ca50d46234a Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 12:31:11 +0800 Subject: [PATCH 407/521] Update MinimumSumPartition.java fix code issue --- DynamicProgramming/MinimumSumPartition.java | 121 +++++++++++--------- 1 file changed, 69 insertions(+), 52 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 18668e73e23c..bcc68338d9a4 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -20,56 +20,73 @@ import java.io.*; public class MinimumSumPartition { - public static void main (String[] args) - { - Scanner sc = new Scanner(System.in); - int t = sc.nextInt(); - while(t-->0) - { - int n = sc.nextInt(); - int arr[] = new int[n]; - int sum = 0; - for(int i = 0;i < n;i++) - { - arr[i] = sc.nextInt(); - sum += arr[i]; - } - int ans[] = new int[sum]; - ans = subset(arr,sum); - int min = Integer.MAX_VALUE; - for (int i = 0; i < ans.length; i++) - min = Math.min(min,(sum-2*ans[i])); - System.out.println(min); - } - sc.close(); - } - static int[] subset(int arr[],int sum) - { - int n = arr.length; - boolean dp[][] = new boolean[n+1][sum+1]; - for(int i = 0; i <= n; i++) - dp[i][0] = true; - for(int i = 1; i <= sum; i++) - dp[0][i] = false; - // subset sum concept - for(int i = 1; i <= n; i++) - { - for(int j = 1; j <= sum; j++) - { - if(arr[i-1] <= j) - dp[i][j] = dp[i-1][j-arr[i-1]] || dp[i-1][j]; - else - dp[i][j] = dp[i-1][j]; - } - } - //storing last dp column whose value is true till sum/2 - int index[] = new int[sum]; - int p = 0; - for(int i = 0 ; i <= sum / 2; i++) - { - if(dp[n][i] == true) - index[p++] = i; - } - return index; - } + public static int subSet(int arr[]){ + int n = arr.length; + int sum = getSum(arr); + boolean dp[][] = new boolean[n+1][sum+1]; + for(int i = 0; i < n; i++){ + dp[i][0] = true; + } + for(int j = 0; j < sum; j++){ + dp[0][j] = false; + } + + //fill dp array + for(int i = 1; i <= n; i++){ + for(int j = 1; j <= sum; j++){ + if(arr[i-1] < j){ + dp[i][j] = dp[i-1][j - arr[i-1]] || dp[i-1][j]; + } + else if(arr[i-1] == j){ + dp[i][j] = true; + } + else{ + dp[i][j] = dp[i-1][j]; + } + } + } + + // fill the index array + int index[] = new int[sum]; + int p = 0; + for(int i = 0; i <= sum / 2; i++){ + if(dp[n][i]){ + index[p++] = i; + } + } + + return getMin(index, sum); + } + + public static int getSum(int arr[]){ + if(arr.length <= 0){ + return 0; + } + int sum = 0; + for(int i = 0; i < arr.length; i++){ + sum += arr[i]; + } + return sum; + } + + public static int getMin(int arr[], int sum){ + if(arr.length <= 0){ + return 0; + } + int min = Integer.MAX_VALUE; + for(int i = 0; i < arr.length; i++){ + min = Math.min(min, (sum - 2*arr[i])); + } + return min; + } + + public static void main(String args[]){ + Scanner in = new Scanner(System.in); + int n = in.nextInt(); + int arr[] = new int[n]; + for(int i = 0 ; i Date: Sun, 6 Sep 2020 16:52:32 +0800 Subject: [PATCH 408/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index bcc68338d9a4..01816d8a4bb8 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -69,13 +69,13 @@ public static int getSum(int arr[]){ return sum; } - public static int getMin(int arr[], int sum){ - if(arr.length <= 0){ + public static int getMin(int[] arr, int sum) { + if (arr.length == 0) { return 0; } int min = Integer.MAX_VALUE; - for(int i = 0; i < arr.length; i++){ - min = Math.min(min, (sum - 2*arr[i])); + for (int temp : arr) { + min = Math.min(min, sum - 2 * temp); } return min; } From 880240c9081defbc52e7ae258731961baa349830 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:52:41 +0800 Subject: [PATCH 409/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 01816d8a4bb8..4796e7648bb4 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -20,7 +20,7 @@ import java.io.*; public class MinimumSumPartition { - public static int subSet(int arr[]){ + public static int subSet(int[] arr) { int n = arr.length; int sum = getSum(arr); boolean dp[][] = new boolean[n+1][sum+1]; From 9672ffccfe673494f9384922852b8a1a0bcd3c38 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:52:50 +0800 Subject: [PATCH 410/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 4796e7648bb4..d9a2b344662c 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -23,7 +23,7 @@ public class MinimumSumPartition public static int subSet(int[] arr) { int n = arr.length; int sum = getSum(arr); - boolean dp[][] = new boolean[n+1][sum+1]; + boolean[][] dp = new boolean[n + 1][sum + 1]; for(int i = 0; i < n; i++){ dp[i][0] = true; } From e27175bc10e6f39a076206f118d7dac58173b768 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:08 +0800 Subject: [PATCH 411/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index d9a2b344662c..50250adce66d 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -58,13 +58,16 @@ else if(arr[i-1] == j){ return getMin(index, sum); } - public static int getSum(int arr[]){ - if(arr.length <= 0){ - return 0; - } + /** + * Calculate sum of array elements + * + * @param arr the array + * @return sum of given array + */ + public static int getSum(int[] arr) { int sum = 0; - for(int i = 0; i < arr.length; i++){ - sum += arr[i]; + for (int temp : arr) { + sum += temp; } return sum; } From 6fdd9c90dab26725a36af96eff28d226295c043d Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:17 +0800 Subject: [PATCH 412/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 50250adce66d..6220315ee80e 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -24,7 +24,7 @@ public static int subSet(int[] arr) { int n = arr.length; int sum = getSum(arr); boolean[][] dp = new boolean[n + 1][sum + 1]; - for(int i = 0; i < n; i++){ + for (int i = 0; i <= n; i++) { dp[i][0] = true; } for(int j = 0; j < sum; j++){ From e8a4628c96dd313483ddd8cd083b8b2d2dd144f4 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:25 +0800 Subject: [PATCH 413/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 6220315ee80e..20aeef84e054 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -27,7 +27,7 @@ public static int subSet(int[] arr) { for (int i = 0; i <= n; i++) { dp[i][0] = true; } - for(int j = 0; j < sum; j++){ + for (int j = 0; j <= sum; j++) { dp[0][j] = false; } From ad3bb8187cf456c67cef87ce2fd8058b83592e41 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:33 +0800 Subject: [PATCH 414/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 20aeef84e054..58fe1edf844b 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -49,8 +49,8 @@ else if(arr[i-1] == j){ // fill the index array int index[] = new int[sum]; int p = 0; - for(int i = 0; i <= sum / 2; i++){ - if(dp[n][i]){ + for (int i = 0; i <= sum / 2; i++) { + if (dp[n][i]) { index[p++] = i; } } From 695123086281f1b45dbb0689e7b86d3093a39e11 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:45 +0800 Subject: [PATCH 415/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 58fe1edf844b..2108ecfb74f8 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -47,7 +47,7 @@ else if(arr[i-1] == j){ } // fill the index array - int index[] = new int[sum]; + int[] index = new int[sum]; int p = 0; for (int i = 0; i <= sum / 2; i++) { if (dp[n][i]) { From 86d6e932ab99699d2adc87908eaf264489749a14 Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:53:52 +0800 Subject: [PATCH 416/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index 2108ecfb74f8..c40d8090f7da 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -32,16 +32,14 @@ public static int subSet(int[] arr) { } //fill dp array - for(int i = 1; i <= n; i++){ - for(int j = 1; j <= sum; j++){ - if(arr[i-1] < j){ - dp[i][j] = dp[i-1][j - arr[i-1]] || dp[i-1][j]; - } - else if(arr[i-1] == j){ + for (int i = 1; i <= n; i++) { + for (int j = 1; j <= sum; j++) { + if (arr[i - 1] < j) { + dp[i][j] = dp[i - 1][j - arr[i - 1]] || dp[i - 1][j]; + } else if (arr[i - 1] == j) { dp[i][j] = true; - } - else{ - dp[i][j] = dp[i-1][j]; + } else { + dp[i][j] = dp[i - 1][j]; } } } From 3e727e3ff51e6586f86fb312c6d032a0f1a5daee Mon Sep 17 00:00:00 2001 From: tribbleofjim <44364697+tribbleofjim@users.noreply.github.com> Date: Sun, 6 Sep 2020 16:54:10 +0800 Subject: [PATCH 417/521] Update DynamicProgramming/MinimumSumPartition.java Co-authored-by: Du Yuanchao --- DynamicProgramming/MinimumSumPartition.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index c40d8090f7da..e0fb5296f4b4 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -81,13 +81,12 @@ public static int getMin(int[] arr, int sum) { return min; } - public static void main(String args[]){ - Scanner in = new Scanner(System.in); - int n = in.nextInt(); - int arr[] = new int[n]; - for(int i = 0 ; i Date: Tue, 8 Sep 2020 01:31:23 +0000 Subject: [PATCH 418/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 0f2e3528cb0f..e9c514520022 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -241,4 +241,5 @@ * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) + * [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) * [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) From 09a4db6d7899e0fb6fa2ac32acd92957d346daf6 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 8 Sep 2020 11:33:42 +0800 Subject: [PATCH 419/521] updated BucketSort --- Sorts/BucketSort.java | 173 ++++++++++++++++++++++++++---------------- 1 file changed, 108 insertions(+), 65 deletions(-) diff --git a/Sorts/BucketSort.java b/Sorts/BucketSort.java index 1d2e94ff2d58..5f5678919f93 100644 --- a/Sorts/BucketSort.java +++ b/Sorts/BucketSort.java @@ -1,72 +1,115 @@ package Sorts; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import java.util.Random; - -public class BucketSort -{ - static int[] sort(int[] sequence, int maxValue) - { - // Bucket Sort - int[] Bucket = new int[maxValue + 1]; - int[] sorted_sequence = new int[sequence.length]; - - for (int i = 0; i < sequence.length; i++) - Bucket[sequence[i]]++; - - int outPos = 0; - for (int i = 0; i < Bucket.length; i++) - for (int j = 0; j < Bucket[i]; j++) - sorted_sequence[outPos++] = i; - - return sorted_sequence; + +/** + * Wikipedia: https://en.wikipedia.org/wiki/Bucket_sort + */ +public class BucketSort { + public static void main(String[] args) { + int[] arr = new int[10]; + + /* generate 10 random numbers from -50 to 49 */ + Random random = new Random(); + for (int i = 0; i < arr.length; ++i) { + arr[i] = random.nextInt(100) - 50; + } + + bucketSort(arr); + + /* check array is sorted or not */ + for (int i = 0, limit = arr.length - 1; i < limit; ++i) { + assert arr[i] <= arr[i + 1]; + } } - - static void printSequence(int[] sorted_sequence) - { - for (int i = 0; i < sorted_sequence.length; i++) - System.out.print(sorted_sequence[i] + " "); + + /** + * BucketSort algorithms implements + * + * @param arr the array contains elements + */ + private static void bucketSort(int[] arr) { + /* get max value of arr */ + int max = max(arr); + + /* get min value of arr */ + int min = min(arr); + + /* number of buckets */ + int numberOfBuckets = max - min + 1; + + List> buckets = new ArrayList<>(numberOfBuckets); + + /* init buckets */ + for (int i = 0; i < numberOfBuckets; ++i) { + buckets.add(new ArrayList<>()); + } + + /* store elements to buckets */ + for (int value : arr) { + int hash = hash(value, max, numberOfBuckets); + buckets.get(hash).add(value); + } + + /* sort individual bucket */ + for (List bucket : buckets) { + Collections.sort(bucket); + } + + /* concatenate buckets to origin array */ + int index = 0; + for (List bucket : buckets) { + for (int value : bucket) { + arr[index++] = value; + } + } } - - static int maxValue(int[] sequence) - { - int maxValue = 0; - for (int i = 0; i < sequence.length; i++) - if (sequence[i] > maxValue) - maxValue = sequence[i]; - return maxValue; + + + /** + * Get index of bucket which of our elements gets placed into it. + * + * @param elem the element of array to be sorted + * @param min min value of array + * @param numberOfBucket the number of bucket + * @return index of bucket + */ + private static int hash(int elem, int min, int numberOfBucket) { + return (elem - min) / numberOfBucket; } - - public static void main(String args[]) - { - System.out.println("Sorting of randomly generated numbers using BUCKET SORT"); - Random random = new Random(); - int N = 20; - int[] sequence = new int[N]; - - for (int i = 0; i < N; i++) - sequence[i] = Math.abs(random.nextInt(100)); - - int maxValue = maxValue(sequence); - - System.out.println("\nOriginal Sequence: "); - printSequence(sequence); - - System.out.println("\nSorted Sequence: "); - printSequence(sort(sequence, maxValue)); + + /** + * Calculate max value of array + * + * @param arr the array contains elements + * @return max value of given array + */ + public static int max(int[] arr) { + int max = arr[0]; + for (int value : arr) { + if (value > max) { + max = value; + } + } + return max; + } + + /** + * Calculate min value of array + * + * @param arr the array contains elements + * @return min value of given array + */ + public static int min(int[] arr) { + int min = arr[0]; + for (int value : arr) { + if (value < min) { + min = value; + } + } + return min; } -} - - -/* -#Output: - -$ javac Bucket_Sort.java -$ java Bucket_Sort - -Sorting of randomly generated numbers using BUCKET SORT - -Original Sequence: -95 9 95 87 8 81 18 54 57 53 92 15 38 24 8 56 29 69 64 66 -Sorted Sequence: -8 8 9 15 18 24 29 38 53 54 56 57 64 66 69 81 87 92 95 95 -*/ +} \ No newline at end of file From 20d82c544e16ba99cbcf3cf99ab70b3fe94076df Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Tue, 8 Sep 2020 11:46:12 +0800 Subject: [PATCH 420/521] Update Sorts/BucketSort.java --- Sorts/BucketSort.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sorts/BucketSort.java b/Sorts/BucketSort.java index 5f5678919f93..0ff4a92ec4aa 100644 --- a/Sorts/BucketSort.java +++ b/Sorts/BucketSort.java @@ -50,7 +50,7 @@ private static void bucketSort(int[] arr) { /* store elements to buckets */ for (int value : arr) { - int hash = hash(value, max, numberOfBuckets); + int hash = hash(value, min, numberOfBuckets); buckets.get(hash).add(value); } @@ -112,4 +112,4 @@ public static int min(int[] arr) { } return min; } -} \ No newline at end of file +} From 4ab05480e204e4c6b33f603e9458b461eb617446 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 13 Sep 2020 12:16:19 +0800 Subject: [PATCH 421/521] * Added arithmetic series * Fixed compare two double * Fiexed documentation --- Maths/Area.java | 38 +++++++++++++++--------------- Maths/PowRecursion.java | 16 +++++-------- Maths/SumOfArithmeticSeries.java | 40 ++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 29 deletions(-) create mode 100644 Maths/SumOfArithmeticSeries.java diff --git a/Maths/Area.java b/Maths/Area.java index 00e93e32ff86..2faac63b21a4 100644 --- a/Maths/Area.java +++ b/Maths/Area.java @@ -5,31 +5,31 @@ */ public class Area { public static void main(String[] args) { + /* test cube */ - assert surfaceAreaCube(1) == 6; + assert Double.compare(surfaceAreaCube(1), 6.0) == 0; /* test sphere */ - assert surfaceAreaSphere(5) == 314.1592653589793; - assert surfaceAreaSphere(1) == 12.566370614359172; + assert Double.compare(surfaceAreaSphere(5), 314.1592653589793) == 0; + assert Double.compare(surfaceAreaSphere(1), 12.566370614359172) == 0; /* test rectangle */ - assert surfaceAreaRectangle(10, 20) == 200; + assert Double.compare(surfaceAreaRectangle(10, 20), 200.0) == 0; /* test square */ - assert surfaceAreaSquare(10) == 100; + assert Double.compare(surfaceAreaSquare(10), 100.0) == 0; /* test triangle */ - assert surfaceAreaTriangle(10, 10) == 50; + assert Double.compare(surfaceAreaTriangle(10, 10), 50.0) == 0; /* test parallelogram */ - assert surfaceAreaParallelogram(10, 20) == 200; + assert Double.compare(surfaceAreaParallelogram(10, 20), 200.0) == 0; /* test trapezium */ - assert surfaceAreaTrapezium(10, 20, 30) == 450; + assert Double.compare(surfaceAreaTrapezium(10, 20, 30), 450.0) == 0; /* test circle */ - assert surfaceAreaCircle(20) == 1256.6370614359173; - + assert Double.compare(surfaceAreaCircle(20), 1256.6370614359173) == 0; } /** @@ -38,7 +38,7 @@ public static void main(String[] args) { * @param sideLength side length of cube * @return surface area of given cube */ - public static double surfaceAreaCube(double sideLength) { + private static double surfaceAreaCube(double sideLength) { return 6 * sideLength * sideLength; } @@ -48,7 +48,7 @@ public static double surfaceAreaCube(double sideLength) { * @param radius radius of sphere * @return surface area of given sphere */ - public static double surfaceAreaSphere(double radius) { + private static double surfaceAreaSphere(double radius) { return 4 * Math.PI * radius * radius; } @@ -59,7 +59,7 @@ public static double surfaceAreaSphere(double radius) { * @param width width of rectangle * @return area of given rectangle */ - public static double surfaceAreaRectangle(double length, double width) { + private static double surfaceAreaRectangle(double length, double width) { return length * width; } @@ -69,7 +69,7 @@ public static double surfaceAreaRectangle(double length, double width) { * @param sideLength side length of square * @return area of given square */ - public static double surfaceAreaSquare(double sideLength) { + private static double surfaceAreaSquare(double sideLength) { return sideLength * sideLength; } @@ -80,7 +80,7 @@ public static double surfaceAreaSquare(double sideLength) { * @param height height of triangle * @return area of given triangle */ - public static double surfaceAreaTriangle(double base, double height) { + private static double surfaceAreaTriangle(double base, double height) { return base * height / 2; } @@ -91,7 +91,7 @@ public static double surfaceAreaTriangle(double base, double height) { * @param height height of parallelogram * @return area of given parallelogram */ - public static double surfaceAreaParallelogram(double base, double height) { + private static double surfaceAreaParallelogram(double base, double height) { return base * height; } @@ -103,7 +103,7 @@ public static double surfaceAreaParallelogram(double base, double height) { * @param height height of trapezium * @return area of given trapezium */ - public static double surfaceAreaTrapezium(double base1, double base2, double height) { + private static double surfaceAreaTrapezium(double base1, double base2, double height) { return (base1 + base2) * height / 2; } @@ -113,7 +113,7 @@ public static double surfaceAreaTrapezium(double base1, double base2, double hei * @param radius radius of circle * @return area of given circle */ - public static double surfaceAreaCircle(double radius) { + private static double surfaceAreaCircle(double radius) { return Math.PI * radius * radius; } -} +} \ No newline at end of file diff --git a/Maths/PowRecursion.java b/Maths/PowRecursion.java index 243548708771..dab336b306fe 100644 --- a/Maths/PowRecursion.java +++ b/Maths/PowRecursion.java @@ -2,10 +2,10 @@ public class PowRecursion { public static void main(String[] args) { - assert pow(2, 0) == Math.pow(2, 0); - assert pow(0, 2) == Math.pow(0, 2); - assert pow(2, 10) == Math.pow(2, 10); - assert pow(10, 2) == Math.pow(10, 2); + assert Double.compare(pow(2, 0), Math.pow(2, 0)) == 0; + assert Double.compare(pow(0, 2), Math.pow(0, 2)) == 0; + assert Double.compare(pow(2, 10), Math.pow(2, 10)) == 0; + assert Double.compare(pow(10, 2), Math.pow(10, 2)) == 0; } /** @@ -17,10 +17,6 @@ public static void main(String[] args) { * @return the value {@code a}{@code b}. */ public static long pow(int a, int b) { - if (b == 0) { - return 1; - } else { - return a * pow(a, b - 1); - } + return b == 0 ? 1 : a * pow(a, b - 1); } -} +} \ No newline at end of file diff --git a/Maths/SumOfArithmeticSeries.java b/Maths/SumOfArithmeticSeries.java new file mode 100644 index 000000000000..5d03c2308d30 --- /dev/null +++ b/Maths/SumOfArithmeticSeries.java @@ -0,0 +1,40 @@ +package Maths; + +/** + *

+ * In mathematics, an arithmetic progression (AP) or arithmetic sequence is a sequence of numbers such that the + * difference between the consecutive terms is constant. Difference here means the second minus the first. + * For instance, the sequence 5, 7, 9, 11, 13, 15, . . . is an arithmetic progression with common difference of 2. + *

+ * Wikipedia: https://en.wikipedia.org/wiki/Arithmetic_progression + */ +public class SumOfArithmeticSeries { + public static void main(String[] args) { + + /* 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 */ + assert Double.compare(55.0, sumOfSeries(1, 1, 10)) == 0; + + /* 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 */ + assert Double.compare(100.0, sumOfSeries(1, 2, 10)) == 0; + + /* 1 + 11 + 21 + 31 + 41 + 51 + 61 + 71 + 81 + 91 */ + assert Double.compare(460.0, sumOfSeries(1, 10, 10)) == 0; + + /* 0.1 + 0.2 + 0.3 + 0.4 + 0.5 + 0.6 + 0.7 + 0.8 + 0.9 + 1.0 */ + assert Double.compare(5.5, sumOfSeries(0.1, 0.1, 10)) == 0; + + assert Double.compare(49600.0, sumOfSeries(1, 10, 100)) == 0; + } + + /** + * Calculate sum of arithmetic series + * + * @param firstTerm the initial term of an arithmetic series + * @param commonDiff the common difference of an arithmetic series + * @param numOfTerms the total terms of an arithmetic series + * @return sum of given arithmetic series + */ + private static double sumOfSeries(double firstTerm, double commonDiff, int numOfTerms) { + return numOfTerms / 2.0 * (2 * firstTerm + (numOfTerms - 1) * commonDiff); + } +} \ No newline at end of file From 86e90cdac5f1a699ea3e02b83ab1eb0b5c27a57e Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 13 Sep 2020 04:18:21 +0000 Subject: [PATCH 422/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index e9c514520022..430940f52075 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -151,6 +151,7 @@ * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) * [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) + * [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) * [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) From cdd662c9a1f05d1f8ee6f3c212e6ab139407f7d0 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 13 Sep 2020 17:23:51 +0800 Subject: [PATCH 423/521] Added ProjectEuler --- ProjectEuler/Problem01.java | 51 +++++++++++++++++++++++++++++++++++++ ProjectEuler/Problem02.java | 43 +++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 ProjectEuler/Problem01.java create mode 100644 ProjectEuler/Problem02.java diff --git a/ProjectEuler/Problem01.java b/ProjectEuler/Problem01.java new file mode 100644 index 000000000000..fffb0eca7f35 --- /dev/null +++ b/ProjectEuler/Problem01.java @@ -0,0 +1,51 @@ +package ProjectEuler; + +/** + * If we list all the natural numbers below 10 that are multiples of 3 or 5, + * we get 3, 5, 6 and 9. The sum of these multiples is 23. + *

+ * Find the sum of all the multiples of 3 or 5 below 1000. + *

+ * Link: https://projecteuler.net/problem=1 + */ +public class Problem01 { + public static void main(String[] args) { + int[][] testNumber = { + {3, 0}, + {4, 3}, + {10, 23}, + {1000, 233168}, + {-1, 0} + }; + + for (int[] ints : testNumber) { + assert solution1(ints[0]) == ints[1]; + assert solution2(ints[0]) == ints[1]; + } + } + + private static int solution1(int n) { + int sum = 0; + for (int i = 3; i < n; ++i) { + if (i % 3 == 0 || i % 5 == 0) { + sum += i; + } + } + return sum; + } + + private static int solution2(int n) { + int sum = 0; + + int terms = (n - 1) / 3; + sum += terms * (6 + (terms - 1) * 3) / 2; + + terms = (n - 1) / 5; + sum += terms * (10 + (terms - 1) * 5) / 2; + + terms = (n - 1) / 15; + sum -= terms * (30 + (terms - 1) * 15) / 2; + + return sum; + } +} \ No newline at end of file diff --git a/ProjectEuler/Problem02.java b/ProjectEuler/Problem02.java new file mode 100644 index 000000000000..5f8d1f051ebe --- /dev/null +++ b/ProjectEuler/Problem02.java @@ -0,0 +1,43 @@ +package ProjectEuler; + +/** + * Each new term in the Fibonacci sequence is generated by adding the previous two terms. + * By starting with 1 and 2, the first 10 terms will be: + *

+ * 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... + *

+ * By considering the terms in the Fibonacci sequence whose values do not exceed four million, + * find the sum of the even-valued terms. + *

+ * Link: https://projecteuler.net/problem=2 + */ +public class Problem02 { + public static void main(String[] args) { + int[][] testNumbers = { + {10, 10}, /* 2 + 8 == 10 */ + {15, 10}, /* 2 + 8 == 10 */ + {2, 2}, + {1, 0}, + {89, 44} /* 2 + 8 + 34 == 44 */ + }; + + for (int[] ints : testNumbers) { + assert solution1(ints[0]) == ints[1]; + } + } + + private static int solution1(int n) { + int sum = 0; + int first = 1; + int second = 2; + while (second <= n) { + if (second % 2 == 0) { + sum += second; + } + int temp = first + second; + first = second; + second = temp; + } + return sum; + } +} \ No newline at end of file From fb36493dab4c3efdf5f54249ebcf93e1f6771a54 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 13 Sep 2020 09:24:23 +0000 Subject: [PATCH 424/521] updating DIRECTORY.md --- DIRECTORY.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 430940f52075..c796ea9cb5d0 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -200,6 +200,10 @@ * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) +## ProjectEuler + * [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) + * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) + ## Searches * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) * [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) From 89ae3d5dec9370f2540aa7ad3c32d25456b8fd3c Mon Sep 17 00:00:00 2001 From: shellhub Date: Mon, 14 Sep 2020 20:18:54 +0800 Subject: [PATCH 425/521] Updated StackArrayList --- DataStructures/Stacks/StackArrayList.java | 92 +++++++++++++---------- 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/DataStructures/Stacks/StackArrayList.java b/DataStructures/Stacks/StackArrayList.java index 666b9ea99055..5f7168c63bba 100644 --- a/DataStructures/Stacks/StackArrayList.java +++ b/DataStructures/Stacks/StackArrayList.java @@ -1,6 +1,7 @@ package DataStructures.Stacks; import java.util.ArrayList; +import java.util.EmptyStackException; /** * This class implements a Stack using an ArrayList. @@ -10,43 +11,49 @@ *

* This is an ArrayList Implementation of a stack, where size is not * a problem we can extend the stack as much as we want. - * - * @author Unknown */ public class StackArrayList { /** - * Main method - * - * @param args Command line arguments + * Driver Code */ public static void main(String[] args) { - - StackArrayList myStackArrayList = new StackArrayList(); - - myStackArrayList.push(5); - myStackArrayList.push(8); - myStackArrayList.push(2); - myStackArrayList.push(9); - - System.out.println("*********************Stack List Implementation*********************"); - System.out.println(myStackArrayList.isEmpty()); // will print false - System.out.println(myStackArrayList.peek()); // will print 9 - System.out.println(myStackArrayList.pop()); // will print 9 - System.out.println(myStackArrayList.peek()); // will print 2 - System.out.println(myStackArrayList.pop()); // will print 2 + StackArrayList stack = new StackArrayList(); + assert stack.isEmpty(); + + for (int i = 1; i <= 5; ++i) { + stack.push(i); + assert stack.size() == i; + } + + assert stack.size() == 5; + assert stack.peek() == 5 && stack.pop() == 5 && stack.peek() == 4; + + /* pop elements at the top of this stack one by one */ + while (!stack.isEmpty()) { + stack.pop(); + } + assert stack.isEmpty(); + + try { + stack.pop(); + assert false; /* this should not happen */ + } catch (EmptyStackException e) { + assert true; /* this should happen */ + } + } /** * ArrayList representation of the stack */ - private ArrayList stackList; + private ArrayList stack; /** * Constructor */ public StackArrayList() { - stackList = new ArrayList<>(); + stack = new ArrayList<>(); } /** @@ -56,42 +63,51 @@ public StackArrayList() { * @param value value to be added */ public void push(int value) { - stackList.add(value); + stack.add(value); } /** - * Pops last element of list which is indeed - * the top for Stack + * Removes the element at the top of this stack and returns * * @return Element popped + * @throws EmptyStackException if the stack is empty. */ public int pop() { - - if (!isEmpty()) { // checks for an empty Stack - int popValue = stackList.get(stackList.size() - 1); - stackList.remove(stackList.size() - 1); // removes the poped element from the list - return popValue; + if (isEmpty()) { + throw new EmptyStackException(); } - System.out.print("The stack is already empty!"); - return -1; + /* remove the element on the top of the stack */ + return stack.remove(stack.size() - 1); } /** - * Checks for empty Stack + * Test if the stack is empty. * - * @return true if stack is empty + * @return {@code true} if this stack is empty, {@code false} otherwise. */ public boolean isEmpty() { - return stackList.isEmpty(); + return stack.isEmpty(); } /** - * Top element of stack + * Return the element at the top of this stack without removing it from the stack. * - * @return top element of stack + * @return the element at the top of this stack. */ public int peek() { - return stackList.get(stackList.size() - 1); + if (isEmpty()) { + throw new EmptyStackException(); + } + return stack.get(stack.size() - 1); + } + + /** + * Return size of this stack. + * + * @return size of this stack. + */ + public int size() { + return stack.size(); } -} +} \ No newline at end of file From 623210b362ca77d65ecf129007f273c9b7f100d4 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 15 Sep 2020 00:46:38 +0800 Subject: [PATCH 426/521] Created Problem04 in project_euler --- ProjectEuler/Problem04.java | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 ProjectEuler/Problem04.java diff --git a/ProjectEuler/Problem04.java b/ProjectEuler/Problem04.java new file mode 100644 index 000000000000..b9d51f8bbf90 --- /dev/null +++ b/ProjectEuler/Problem04.java @@ -0,0 +1,41 @@ +package ProjectEuler; + +/** + * A palindromic number reads the same both ways. + * The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99. + *

+ * Find the largest palindrome made from the product of two 3-digit numbers. + *

+ * link: https://projecteuler.net/problem=4 + */ +public class Problem04 { + public static void main(String[] args) { + + assert solution1(10000) == -1; + assert solution1(20000) == 19591; /* 19591 == 143*137 */ + assert solution1(30000) == 29992; /* 29992 == 184*163 */ + assert solution1(40000) == 39893; /* 39893 == 287*139 */ + assert solution1(50000) == 49894; /* 49894 == 494*101 */ + assert solution1(60000) == 59995; /* 59995 == 355*169 */ + assert solution1(70000) == 69996; /* 69996 == 614*114 */ + assert solution1(80000) == 79897; /* 79897 == 733*109 */ + assert solution1(90000) == 89798; /* 89798 == 761*118 */ + assert solution1(100000) == 99999; /* 100000 == 813*123 */ + } + + private static int solution1(int n) { + for (int i = n - 1; i >= 10000; --i) { + String strNumber = String.valueOf(i); + + /* Test if strNumber is palindrome */ + if (new StringBuilder(strNumber).reverse().toString().equals(strNumber)) { + for (int divisor = 999; divisor >= 100; --divisor) { + if (i % divisor == 0 && String.valueOf(i / divisor).length() == 3) { + return i; + } + } + } + } + return -1; /* not found */ + } +} \ No newline at end of file From c0c830546ebdd3c510aefedad4a052f28dbeaa6b Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 14 Sep 2020 16:47:16 +0000 Subject: [PATCH 427/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index c796ea9cb5d0..906ab4636be1 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -203,6 +203,7 @@ ## ProjectEuler * [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) + * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) ## Searches * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) From db819c27a00594b6aa3d69ed04e5e04859e2e256 Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 16 Sep 2020 22:51:31 +0800 Subject: [PATCH 428/521] Created Problem06 in ProjectEuler --- ProjectEuler/Problem06.java | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 ProjectEuler/Problem06.java diff --git a/ProjectEuler/Problem06.java b/ProjectEuler/Problem06.java new file mode 100644 index 000000000000..f5361a39ba60 --- /dev/null +++ b/ProjectEuler/Problem06.java @@ -0,0 +1,46 @@ +package ProjectEuler; + +/** + * The sum of the squares of the first ten natural numbers is, + * 1^2 + 2^2 + ... + 10^2 = 385 + * The square of the sum of the first ten natural numbers is, + * (1 + 2 + ... + 10)^2 = 552 = 3025 + * Hence the difference between the sum of the squares of the first ten natural + * numbers and the square of the sum is 3025 − 385 = 2640. + * Find the difference between the sum of the squares of the first N natural + * numbers and the square of the sum. + *

+ * link: https://projecteuler.net/problem=6 + */ +public class Problem06 { + public static void main(String[] args) { + int[][] testNumbers = { + {10, 2640}, + {15, 13160}, + {20, 41230}, + {50, 1582700} + }; + + for (int[] testNumber : testNumbers) { + assert solution1(testNumber[0]) == testNumber[1] + && solutions2(testNumber[0]) == testNumber[1]; + } + } + + private static int solution1(int n) { + int sum1 = 0; + int sum2 = 0; + for (int i = 1; i <= n; ++i) { + sum1 += i * i; + sum2 += i; + } + return sum2 * sum2 - sum1; + } + + + private static int solutions2(int n) { + int sumOfSquares = n * (n + 1) * (2 * n + 1) / 6; + int squareOfSum = (int) Math.pow((n * (n + 1) / 2.0), 2); + return squareOfSum - sumOfSquares; + } +} \ No newline at end of file From a195c6974e3b8c7dbf288841ab8c764c8a836a6f Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 16 Sep 2020 14:52:32 +0000 Subject: [PATCH 429/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 906ab4636be1..85c87625051d 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -204,6 +204,7 @@ * [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) + * [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) ## Searches * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) From 4d301033b179c0706278f2241be00e35a80e4c9d Mon Sep 17 00:00:00 2001 From: varunvjha Date: Thu, 17 Sep 2020 10:58:26 +0530 Subject: [PATCH 430/521] added TwoPointersAlgo --- Others/TwoPointersAlgo.java | 73 +++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Others/TwoPointersAlgo.java diff --git a/Others/TwoPointersAlgo.java b/Others/TwoPointersAlgo.java new file mode 100644 index 000000000000..31e2b367c448 --- /dev/null +++ b/Others/TwoPointersAlgo.java @@ -0,0 +1,73 @@ +import java.util.*; +import java.lang.*; +import java.io.*; + +class TwoPointersAlgo { + //This function prints all pairs in the array that sum to a number X. If no such pair exists then output will be -1. + static void twoSum(int A[], int X) + { + Arrays.sort(A); + + //Array sorting is necessary for this algo to function correctly + + int n = A.length; + int i = 0, j = n-1, flag=0; + //Implementation of the algorithm starts + while(i0) + { + t--; + n = in.nextInt(); + int a[] = new int[n]; + for(int i = 0; i Date: Thu, 17 Sep 2020 11:07:43 +0530 Subject: [PATCH 431/521] Update TwoPointersAlgo.java --- Others/TwoPointersAlgo.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Others/TwoPointersAlgo.java b/Others/TwoPointersAlgo.java index 31e2b367c448..903c9d79c5fa 100644 --- a/Others/TwoPointersAlgo.java +++ b/Others/TwoPointersAlgo.java @@ -2,6 +2,8 @@ import java.lang.*; import java.io.*; +//https://www.geeksforgeeks.org/two-pointers-technique/ + class TwoPointersAlgo { //This function prints all pairs in the array that sum to a number X. If no such pair exists then output will be -1. static void twoSum(int A[], int X) @@ -70,4 +72,4 @@ public static void main (String[] args) { 1 7 8 2 6 8 3 5 8 -*/ \ No newline at end of file +*/ From 2ecef7e44a5318b1dbc23171a75edaaee95be34d Mon Sep 17 00:00:00 2001 From: Varun Vaibhav Jha <60656060+varunvjha@users.noreply.github.com> Date: Thu, 17 Sep 2020 11:15:14 +0530 Subject: [PATCH 432/521] Update DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 85c87625051d..d52a9543dc76 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -198,6 +198,7 @@ * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) + * [TwoPointersAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointersAlgo.java) * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) ## ProjectEuler From 47ad7ec9b32be9dc8ae225dfb12cdef0c29724d7 Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 17 Sep 2020 15:19:53 +0800 Subject: [PATCH 433/521] reformat code --- Others/TwoPointers.java | 50 +++++++++++++++++++++++++ Others/TwoPointersAlgo.java | 75 ------------------------------------- 2 files changed, 50 insertions(+), 75 deletions(-) create mode 100644 Others/TwoPointers.java delete mode 100644 Others/TwoPointersAlgo.java diff --git a/Others/TwoPointers.java b/Others/TwoPointers.java new file mode 100644 index 000000000000..99040b552d98 --- /dev/null +++ b/Others/TwoPointers.java @@ -0,0 +1,50 @@ +package Others; + +import java.util.Arrays; + +/** + * The two pointer technique is a useful tool to utilize when searching for pairs in a sorted array. + *

+ * link: https://www.geeksforgeeks.org/two-pointers-technique/ + */ +class TwoPointers { + + public static void main(String[] args) { + int[] arr = {10, 20, 35, 50, 75, 80}; + int key = 70; + assert isPairedSum(arr, key); /* 20 + 60 == 70 */ + + arr = new int[]{1, 2, 3, 4, 5, 6, 7}; + key = 13; + assert isPairedSum(arr, key); /* 6 + 7 == 13 */ + + key = 14; + assert !isPairedSum(arr, key); + } + + /** + * Given a sorted array arr (sorted in ascending order). + * Find if there exists any pair of elements such that their sum is equal to key. + * + * @param arr the array contains elements + * @param key the number to search + * @return {@code true} if there exists a pair of elements, {@code false} otherwise. + */ + private static boolean isPairedSum(int[] arr, int key) { + /* array sorting is necessary for this algorithm to function correctly */ + Arrays.sort(arr); + int i = 0; /* index of first element */ + int j = arr.length - 1; /* index of last element */ + + while (i < j) { + if (arr[i] + arr[j] == key) { + return true; + } else if (arr[i] + arr[j] < key) { + i++; + } else { + j--; + } + } + return false; + } +} \ No newline at end of file diff --git a/Others/TwoPointersAlgo.java b/Others/TwoPointersAlgo.java deleted file mode 100644 index 903c9d79c5fa..000000000000 --- a/Others/TwoPointersAlgo.java +++ /dev/null @@ -1,75 +0,0 @@ -import java.util.*; -import java.lang.*; -import java.io.*; - -//https://www.geeksforgeeks.org/two-pointers-technique/ - -class TwoPointersAlgo { - //This function prints all pairs in the array that sum to a number X. If no such pair exists then output will be -1. - static void twoSum(int A[], int X) - { - Arrays.sort(A); - - //Array sorting is necessary for this algo to function correctly - - int n = A.length; - int i = 0, j = n-1, flag=0; - //Implementation of the algorithm starts - while(i0) - { - t--; - n = in.nextInt(); - int a[] = new int[n]; - for(int i = 0; i Date: Thu, 17 Sep 2020 15:27:02 +0800 Subject: [PATCH 434/521] remove link --- DIRECTORY.md | 1 - 1 file changed, 1 deletion(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index d52a9543dc76..85c87625051d 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -198,7 +198,6 @@ * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) - * [TwoPointersAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointersAlgo.java) * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) ## ProjectEuler From f9bb4a57dc97bda06b265f71c9b4aca9afe1a9ce Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Thu, 17 Sep 2020 07:39:38 +0000 Subject: [PATCH 435/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 85c87625051d..9840da0522f9 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -198,6 +198,7 @@ * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) + * [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) ## ProjectEuler From 0646f5e09579d4053920ce130ec3070b3c96e67f Mon Sep 17 00:00:00 2001 From: arrnavvv <61576354+arrnavvv@users.noreply.github.com> Date: Thu, 17 Sep 2020 21:29:03 +0530 Subject: [PATCH 436/521] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d2a467239faa..c77db447f709 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ You can run and edit the algorithms or contribute to them using Gitpod.io, a fre [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) -### All algorithms are implemented in Java (for education purposes) +### All algorithms are implemented in Java (for educational purposes) These implementations are for learning purposes. The implementations may be less efficient than the Java standard library. ## Contribution Guidelines From db32fbb30017e4df26f3b53b24359d09c118acf3 Mon Sep 17 00:00:00 2001 From: arrnavvv <61576354+arrnavvv@users.noreply.github.com> Date: Thu, 17 Sep 2020 21:35:30 +0530 Subject: [PATCH 437/521] Update README.md A grammatical correction. Changed "education" purposes to "educational" purposes. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d2a467239faa..c77db447f709 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ You can run and edit the algorithms or contribute to them using Gitpod.io, a fre [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) -### All algorithms are implemented in Java (for education purposes) +### All algorithms are implemented in Java (for educational purposes) These implementations are for learning purposes. The implementations may be less efficient than the Java standard library. ## Contribution Guidelines From 1490b03d687a45b252712b37ae84378b7d228c53 Mon Sep 17 00:00:00 2001 From: shellhub Date: Fri, 18 Sep 2020 11:58:51 +0800 Subject: [PATCH 438/521] Created Problem07 in Project Euler --- ProjectEuler/Problem07.java | 59 +++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 ProjectEuler/Problem07.java diff --git a/ProjectEuler/Problem07.java b/ProjectEuler/Problem07.java new file mode 100644 index 000000000000..cba097c156a6 --- /dev/null +++ b/ProjectEuler/Problem07.java @@ -0,0 +1,59 @@ +package ProjectEuler; + +/** + * By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. + *

+ * What is the 10 001st prime number? + *

+ * link: https://projecteuler.net/problem=7 + */ +public class Problem07 { + public static void main(String[] args) { + int[][] testNumbers = { + {1, 2}, + {2, 3}, + {3, 5}, + {4, 7}, + {5, 11}, + {6, 13}, + {20, 71}, + {50, 229}, + {100, 541} + }; + for (int[] number : testNumbers) { + assert solution1(number[0]) == number[1]; + } + } + + /*** + * Checks if a number is prime or not + * @param number the number + * @return {@code true} if {@code number} is prime + */ + private static boolean isPrime(int number) { + if (number == 2) { + return true; + } + if (number < 2 || number % 2 == 0) { + return false; + } + for (int i = 3, limit = (int) Math.sqrt(number); i <= limit; i += 2) { + if (number % i == 0) { + return false; + } + } + return true; + } + + private static int solution1(int n) { + int count = 0; + int number = 1; + + while (count != n) { + if (isPrime(++number)) { + count++; + } + } + return number; + } +} \ No newline at end of file From 6e6c451a5431a57182f9a7ebfcdc1f0ca6c3dada Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Fri, 18 Sep 2020 03:59:20 +0000 Subject: [PATCH 439/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 9840da0522f9..45161e5f5fdc 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -206,6 +206,7 @@ * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) * [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) + * [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) ## Searches * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) From ebdf7bede8d62412256d74cf63c207a10ca97155 Mon Sep 17 00:00:00 2001 From: arrnavvv <61576354+arrnavvv@users.noreply.github.com> Date: Fri, 18 Sep 2020 11:31:47 +0530 Subject: [PATCH 440/521] Update PasswordGen.java --- Others/PasswordGen.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Others/PasswordGen.java b/Others/PasswordGen.java index 8d49e6c65633..c41768ad0685 100644 --- a/Others/PasswordGen.java +++ b/Others/PasswordGen.java @@ -35,13 +35,13 @@ static String generatePassword(int min_length, int max_length) { // Inbuilt method to randomly shuffle a elements of a list Collections.shuffle(letters); - String password = ""; + StringBuilder password = new StringBuilder(); // Note that size of the password is also random for (int i = random.nextInt(max_length - min_length) + min_length; i > 0; --i) { - password += letters.get(random.nextInt(letters.size())); + password .append( letters.get(random.nextInt(letters.size()))); } - return password; + return password.toString(); } } From c41d10abeb4906b2fe4d03dffd926d1413b91cd0 Mon Sep 17 00:00:00 2001 From: Jesse Adams Date: Sun, 20 Sep 2020 16:23:40 -0500 Subject: [PATCH 441/521] Created SubsetSum.java --- DynamicProgramming/SubsetSum.java | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 DynamicProgramming/SubsetSum.java diff --git a/DynamicProgramming/SubsetSum.java b/DynamicProgramming/SubsetSum.java new file mode 100644 index 000000000000..80596346d1f1 --- /dev/null +++ b/DynamicProgramming/SubsetSum.java @@ -0,0 +1,57 @@ +package DynamicProgramming; + +public class SubsetSum { + + /* + This algorithm will determine if a set of integers contains + a subset that sum to a given integer. The algorithm will + return true if such a subset exists and false otherwise. + This is a dynamic programming implementation. + */ + + private static boolean subsetSum(int arr[], int n, int sum){ + boolean isSum[][] = new boolean[n + 2][sum + 1]; + + isSum[n + 1][0] = true; + for (int i = 1; i <= sum; i++) { + isSum[n + 1][i] = false; + } + + for (int i = n; i > 0; i--) { + isSum[i][0] = true; + for (int j = 1; j <= arr[i - 1] - 1; j++) { + if (j <= sum) { + isSum[i][j] = isSum[i + 1][j]; + } + } + for (int j = arr[i - 1]; j <= sum; j++) { + isSum[i][j] = (isSum[i + 1][j] || isSum[i + 1][j - arr[i - 1]]); + } + } + + return isSum[1][sum]; + } + + /* + This is a driver method to run the algorithm with four + test values: the first two should evaluate true, and the + last two should evaluate false. + */ + public static void main(String args[]) { + int arr[] = new int[]{50, 4, 10, 15, 34}; + int n = arr.length; + // 4 + 10 + 15 + 34 = 64 + int sum1 = 64; + // 50 + 15 + 34 = 99 + int sum2 = 99; + // No subset of the given array will give a sum + // of 5 or 66 + int sum3 = 5; + int sum4 = 66; + + System.out.println(subsetSum(arr, n, sum1)); + System.out.println(subsetSum(arr, n, sum2)); + System.out.println(subsetSum(arr, n, sum3)); + System.out.println(subsetSum(arr, n, sum4)); + } +} \ No newline at end of file From 26cd94114317e1bbcfa597577c720d345c5cbb5d Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 22 Sep 2020 09:47:09 +0800 Subject: [PATCH 442/521] * Update SinglyLinkedList * Refactor MergeSortedSinglyLinkedList to single file * Create Problem09 and Problem10 in Project Euler --- .../Lists/MergeSortedSinglyLinkedList.java | 51 +++++ DataStructures/Lists/SinglyLinkedList.java | 216 ++++++++---------- ProjectEuler/Problem09.java | 30 +++ ProjectEuler/Problem10.java | 55 +++++ 4 files changed, 236 insertions(+), 116 deletions(-) create mode 100644 DataStructures/Lists/MergeSortedSinglyLinkedList.java create mode 100644 ProjectEuler/Problem09.java create mode 100644 ProjectEuler/Problem10.java diff --git a/DataStructures/Lists/MergeSortedSinglyLinkedList.java b/DataStructures/Lists/MergeSortedSinglyLinkedList.java new file mode 100644 index 000000000000..2daae0d70574 --- /dev/null +++ b/DataStructures/Lists/MergeSortedSinglyLinkedList.java @@ -0,0 +1,51 @@ +package DataStructures.Lists; + +public class MergeSortedSinglyLinkedList extends SinglyLinkedList { + + public static void main(String[] args) { + SinglyLinkedList listA = new SinglyLinkedList(); + SinglyLinkedList listB = new SinglyLinkedList(); + + for (int i = 2; i <= 10; i += 2) { + listA.insert(i); + listB.insert(i - 1); + } + assert listA.toString().equals("2->4->6->8->10"); + assert listB.toString().equals("1->3->5->7->9"); + assert merge(listA, listB).toString().equals("1->2->3->4->5->6->7->8->9->10"); + } + + /** + * Merge two sorted SingleLinkedList + * + * @param listA the first sorted list + * @param listB the second sored list + * @return merged sorted list + */ + public static SinglyLinkedList merge(SinglyLinkedList listA, SinglyLinkedList listB) { + Node headA = listA.getHead(); + Node headB = listB.getHead(); + + int size = listA.size() + listB.size(); + + Node head = new Node(); + Node tail = head; + while (headA != null && headB != null) { + if (headA.value <= headB.value) { + tail.next = headA; + headA = headA.next; + } else { + tail.next = headB; + headB = headB.next; + } + tail = tail.next; + } + if (headA == null) { + tail.next = headB; + } + if (headB == null) { + tail.next = headA; + } + return new SinglyLinkedList(head.next, size); + } +} diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 5fda2f5f87bd..7c10f8cf9239 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -18,15 +18,15 @@ public class SinglyLinkedList { private Node head; /** - * size of SinglyLinkedList + * Size of SinglyLinkedList */ private int size; /** - * init SinglyLinkedList + * Init SinglyLinkedList */ public SinglyLinkedList() { - head = new Node(0); + head = null; size = 0; } @@ -42,87 +42,86 @@ public SinglyLinkedList(Node head, int size) { } /** - * This method inserts an element at the head + * Inserts an element at the head of the list * - * @param x Element to be added + * @param x element to be added */ public void insertHead(int x) { insertNth(x, 0); } /** - * insert an element at the tail of list + * Insert an element at the tail of the list * - * @param data Element to be added + * @param data element to be added */ public void insert(int data) { insertNth(data, size); } /** - * Inserts a new node at a specified position + * Inserts a new node at a specified position of the list * * @param data data to be stored in a new node * @param position position at which a new node is to be inserted */ public void insertNth(int data, int position) { checkBounds(position, 0, size); - Node cur = head; - for (int i = 0; i < position; ++i) { - cur = cur.next; + Node newNode = new Node(data); + if (head == null) { /* the list is empty */ + head = newNode; + size++; + return; + } else if (position == 0) { /* insert at the head of the list */ + newNode.next = head; + head = newNode; + size++; + return; } - Node node = new Node(data); - node.next = cur.next; - cur.next = node; - size++; - } - - /** - * Insert element to list, always sorted - * - * @param data to be inserted - */ - public void insertSorted(int data) { Node cur = head; - while (cur.next != null && data > cur.next.value) { + for (int i = 0; i < position - 1; ++i) { cur = cur.next; } - - Node newNode = new Node(data); newNode.next = cur.next; cur.next = newNode; size++; } + /** - * This method deletes an element at the head - * - * @return The element deleted + * Deletes a node at the head */ public void deleteHead() { deleteNth(0); } /** - * This method deletes an element at the tail + * Deletes an element at the tail */ public void delete() { deleteNth(size - 1); } /** - * This method deletes an element at Nth position + * Deletes an element at Nth position */ public void deleteNth(int position) { checkBounds(position, 0, size - 1); + if (position == 0) { + Node destroy = head; + head = head.next; + destroy = null; /* clear to let GC do its work */ + size--; + return; + } Node cur = head; - for (int i = 0; i < position; ++i) { + for (int i = 0; i < position - 1; ++i) { cur = cur.next; } - //Node destroy = cur.next; + Node destroy = cur.next; cur.next = cur.next.next; - //destroy = null; // clear to let GC do its work + destroy = null; // clear to let GC do its work size--; } @@ -140,47 +139,68 @@ public void checkBounds(int position, int low, int high) { } /** - * clear all nodes in list + * Clear all nodes in the list */ public void clear() { - if (size == 0) { - return; - } - Node prev = head.next; - Node cur = prev.next; + Node cur = head; while (cur != null) { - prev = null; // clear to let GC do its work - prev = cur; + Node prev = cur; cur = cur.next; + prev = null; // clear to let GC do its work } - prev = null; - head.next = null; + head = null; size = 0; } /** * Checks if the list is empty * - * @return true is list is empty + * @return {@code true} if list is empty, otherwise {@code false}. */ public boolean isEmpty() { return size == 0; } /** - * Returns the size of the linked list + * Returns the size of the linked list. + * + * @return the size of the list. */ public int size() { return size; } + /** + * Get head of the list. + * + * @return head of the list. + */ + public Node getHead() { + return head; + } + + /** + * Calculate the count of the list manually + * + * @return count of the list + */ + public int count() { + int count = 0; + Node cur = head; + while (cur != null) { + cur = cur.next; + count++; + } + return count; + } + @Override public String toString() { if (size == 0) { return ""; } StringBuilder builder = new StringBuilder(); - Node cur = head.next; + Node cur = head; while (cur != null) { builder.append(cur.value).append("->"); cur = cur.next; @@ -188,79 +208,43 @@ public String toString() { return builder.replace(builder.length() - 2, builder.length(), "").toString(); } - /** - * Merge two sorted SingleLinkedList - * - * @param listA the first sorted list - * @param listB the second sored list - * @return merged sorted list - */ - public static SinglyLinkedList merge(SinglyLinkedList listA, SinglyLinkedList listB) { - Node headA = listA.head.next; - Node headB = listB.head.next; - - int size = listA.size() + listB.size(); - - Node head = new Node(); - Node tail = head; - while (headA != null && headB != null) { - if (headA.value <= headB.value) { - tail.next = headA; - headA = headA.next; - } else { - tail.next = headB; - headB = headB.next; - } - tail = tail.next; - } - if (headA == null) { - tail.next = headB; - } - if (headB == null) { - tail.next = headA; - } - return new SinglyLinkedList(head, size); - } /** - * Main method - * - * @param args Command line arguments + * Driver Code */ - public static void main(String args[]) { - SinglyLinkedList myList = new SinglyLinkedList(); - assert myList.isEmpty(); - assert myList.toString().equals(""); - - myList.insertHead(5); - myList.insertHead(7); - myList.insertHead(10); - assert myList.toString().equals("10->7->5"); - - myList.deleteHead(); - assert myList.toString().equals("7->5"); - - myList.insertNth(11, 2); - assert myList.toString().equals("7->5->11"); - - myList.deleteNth(1); - assert myList.toString().equals("7->11"); - - myList.clear(); - assert myList.isEmpty(); - - /* Test MergeTwoSortedLinkedList */ - SinglyLinkedList listA = new SinglyLinkedList(); - SinglyLinkedList listB = new SinglyLinkedList(); - - for (int i = 10; i >= 2; i -= 2) { - listA.insertSorted(i); - listB.insertSorted(i - 1); + public static void main(String[] arg) { + SinglyLinkedList list = new SinglyLinkedList(); + assert list.isEmpty(); + assert list.size() == 0 + && list.count() == 0; + assert list.toString().equals(""); + + /* Test insert function */ + list.insertHead(5); + list.insertHead(7); + list.insertHead(10); + list.insert(3); + list.insertNth(1, 4); + assert list.toString().equals("10->7->5->3->1"); + + /* Test delete function */ + list.deleteHead(); + list.deleteNth(1); + list.delete(); + assert list.toString().equals("7->3"); + + assert list.size == 2 + && list.size() == list.count(); + + list.clear(); + assert list.isEmpty(); + + try { + list.delete(); + assert false; /* this should not happen */ + } catch (Exception e) { + assert true; /* this should happen */ } - assert listA.toString().equals("2->4->6->8->10"); - assert listB.toString().equals("1->3->5->7->9"); - assert SinglyLinkedList.merge(listA, listB).toString().equals("1->2->3->4->5->6->7->8->9->10"); - } } diff --git a/ProjectEuler/Problem09.java b/ProjectEuler/Problem09.java new file mode 100644 index 000000000000..5d259d506c5c --- /dev/null +++ b/ProjectEuler/Problem09.java @@ -0,0 +1,30 @@ +package ProjectEuler; + +/** + * A Pythagorean triplet is a set of three natural numbers, a < b < c, for which, + *

+ * a^2 + b^2 = c^2 + * For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2. + *

+ * There exists exactly one Pythagorean triplet for which a + b + c = 1000. + * Find the product abc. + *

+ * link: https://projecteuler.net/problem=9 + */ +public class Problem09 { + public static void main(String[] args) { + assert solution1() == 31875000; + } + + private static int solution1() { + for (int i = 0; i <= 300; ++i) { + for (int j = 0; j <= 400; ++j) { + int k = 1000 - i - j; + if (i * i + j * j == k * k) { + return i * j * k; + } + } + } + return -1; /* should not happen */ + } +} \ No newline at end of file diff --git a/ProjectEuler/Problem10.java b/ProjectEuler/Problem10.java new file mode 100644 index 000000000000..451948c524dc --- /dev/null +++ b/ProjectEuler/Problem10.java @@ -0,0 +1,55 @@ +package ProjectEuler; + +/** + * The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. + *

+ * Find the sum of all the primes below two million. + *

+ * link: https://projecteuler.net/problem=10 + */ +public class Problem10 { + public static void main(String[] args) { + long[][] testNumbers = { + {2000000, 142913828922L}, + {10000, 5736396}, + {5000, 1548136}, + {1000, 76127}, + {10, 17}, + {7, 10} + }; + + for (long[] testNumber : testNumbers) { + assert solution1(testNumber[0]) == testNumber[1]; + } + } + + /*** + * Checks if a number is prime or not + * @param n the number + * @return {@code true} if {@code n} is prime + */ + private static boolean isPrime(int n) { + if (n == 2) { + return true; + } + if (n < 2 || n % 2 == 0) { + return false; + } + for (int i = 3, limit = (int) Math.sqrt(n); i <= limit; i += 2) { + if (n % i == 0) { + return false; + } + } + return true; + } + + private static long solution1(long n) { + long sum = 0; + for (int i = 2; i < n; ++i) { + if (isPrime(i)) { + sum += i; + } + } + return sum; + } +} \ No newline at end of file From e53327268470bf12a544be2cf95b8df94fc721b6 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 22 Sep 2020 01:47:56 +0000 Subject: [PATCH 443/521] updating DIRECTORY.md --- DIRECTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 45161e5f5fdc..ab43fd8744ba 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -65,6 +65,7 @@ * [ListAddnFun](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/ListAddnFun.java) * [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) * [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) + * [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) * [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) * Queues * [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) @@ -207,6 +208,8 @@ * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) * [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) * [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) + * [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) + * [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) ## Searches * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) From e5a3e4b479134d9e33ec3a3cdcee9d0def7e8ada Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 22 Sep 2020 10:09:04 +0800 Subject: [PATCH 444/521] reformat code --- DynamicProgramming/SubsetSum.java | 49 ++++++++++++------------------- 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/DynamicProgramming/SubsetSum.java b/DynamicProgramming/SubsetSum.java index 80596346d1f1..18a357248720 100644 --- a/DynamicProgramming/SubsetSum.java +++ b/DynamicProgramming/SubsetSum.java @@ -2,15 +2,27 @@ public class SubsetSum { - /* - This algorithm will determine if a set of integers contains - a subset that sum to a given integer. The algorithm will - return true if such a subset exists and false otherwise. - This is a dynamic programming implementation. + /** + * Driver Code */ + public static void main(String[] args) { + int[] arr = new int[]{50, 4, 10, 15, 34}; + assert subsetSum(arr, 64); /* 4 + 10 + 15 + 34 = 64 */ + assert subsetSum(arr, 99); /* 50 + 15 + 34 = 99 */ + assert !subsetSum(arr, 5); + assert !subsetSum(arr, 66); + } - private static boolean subsetSum(int arr[], int n, int sum){ - boolean isSum[][] = new boolean[n + 2][sum + 1]; + /** + * Test if a set of integers contains a subset that sum to a given integer. + * + * @param arr the array contains integers. + * @param sum target sum of subset. + * @return {@code true} if subset exists, otherwise {@code false}. + */ + private static boolean subsetSum(int[] arr, int sum) { + int n = arr.length; + boolean[][] isSum = new boolean[n + 2][sum + 1]; isSum[n + 1][0] = true; for (int i = 1; i <= sum; i++) { @@ -31,27 +43,4 @@ private static boolean subsetSum(int arr[], int n, int sum){ return isSum[1][sum]; } - - /* - This is a driver method to run the algorithm with four - test values: the first two should evaluate true, and the - last two should evaluate false. - */ - public static void main(String args[]) { - int arr[] = new int[]{50, 4, 10, 15, 34}; - int n = arr.length; - // 4 + 10 + 15 + 34 = 64 - int sum1 = 64; - // 50 + 15 + 34 = 99 - int sum2 = 99; - // No subset of the given array will give a sum - // of 5 or 66 - int sum3 = 5; - int sum4 = 66; - - System.out.println(subsetSum(arr, n, sum1)); - System.out.println(subsetSum(arr, n, sum2)); - System.out.println(subsetSum(arr, n, sum3)); - System.out.println(subsetSum(arr, n, sum4)); - } } \ No newline at end of file From db86674a6df86337232f70b31546feeb606449a4 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 22 Sep 2020 02:11:57 +0000 Subject: [PATCH 445/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index ab43fd8744ba..8dc90ecdf98f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -113,6 +113,7 @@ * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) * [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) * [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) + * [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) ## Maths * [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) From 093cc37806ac4ed5e4f8b1d51fda2029e986cdb8 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 22 Sep 2020 11:06:57 +0800 Subject: [PATCH 446/521] count singly linked list using recursion --- .../Lists/CountSinglyLinkedListRecursion.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 DataStructures/Lists/CountSinglyLinkedListRecursion.java diff --git a/DataStructures/Lists/CountSinglyLinkedListRecursion.java b/DataStructures/Lists/CountSinglyLinkedListRecursion.java new file mode 100644 index 000000000000..652791be4542 --- /dev/null +++ b/DataStructures/Lists/CountSinglyLinkedListRecursion.java @@ -0,0 +1,26 @@ +package DataStructures.Lists; + +public class CountSinglyLinkedListRecursion extends SinglyLinkedList { + public static void main(String[] args) { + CountSinglyLinkedListRecursion list = new CountSinglyLinkedListRecursion(); + for (int i = 1; i <= 5; ++i) { + list.insert(i); + } + assert list.count() == 5; + } + + /** + * Calculate the count of the list manually using recursion. + * + * @param head head of the list. + * @return count of the list. + */ + private int countRecursion(Node head) { + return head == null ? 0 : 1 + countRecursion(head.next); + } + + @Override + public int count() { + return countRecursion(getHead()); + } +} From e98693b14036dd482b9471444c815038ed2e720a Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 22 Sep 2020 11:09:19 +0800 Subject: [PATCH 447/521] search element --- DataStructures/Lists/SinglyLinkedList.java | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 7c10f8cf9239..668a40da3dcd 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -194,6 +194,24 @@ public int count() { return count; } + /** + * Test if the value key is present in the list. + * + * @param key the value to be searched. + * @return {@code true} if key is present in the list, otherwise {@code false}. + */ + public boolean search(int key) { + Node cur = head; + while (cur != null) { + if (cur.value == key) { + return true; + } + cur = cur.next; + } + return false; + } + + @Override public String toString() { if (size == 0) { @@ -227,6 +245,12 @@ public static void main(String[] arg) { list.insertNth(1, 4); assert list.toString().equals("10->7->5->3->1"); + /* Test search function */ + assert list.search(10) + && list.search(5) + && list.search(1) + && !list.search(100); + /* Test delete function */ list.deleteHead(); list.deleteNth(1); From cc0e3510e2ff76d346c5458c2c24697539f618e1 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 22 Sep 2020 11:23:45 +0800 Subject: [PATCH 448/521] search in singly linked list using recursion --- .../SearchSinglyLinkedListRecursion.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 DataStructures/Lists/SearchSinglyLinkedListRecursion.java diff --git a/DataStructures/Lists/SearchSinglyLinkedListRecursion.java b/DataStructures/Lists/SearchSinglyLinkedListRecursion.java new file mode 100644 index 000000000000..10755c0b84ae --- /dev/null +++ b/DataStructures/Lists/SearchSinglyLinkedListRecursion.java @@ -0,0 +1,32 @@ +package DataStructures.Lists; + +public class SearchSinglyLinkedListRecursion extends SinglyLinkedList { + public static void main(String[] args) { + SearchSinglyLinkedListRecursion list = new SearchSinglyLinkedListRecursion(); + for (int i = 1; i <= 10; ++i) { + list.insert(i); + } + + for (int i = 1; i <= 10; ++i) { + assert list.search(i); + } + assert !list.search(-1) + && !list.search(100); + } + + /** + * Test if the value key is present in the list using recursion. + * + * @param node the head node. + * @param key the value to be searched. + * @return {@code true} if key is present in the list, otherwise {@code false}. + */ + private boolean searchRecursion(Node node, int key) { + return node != null && (node.value == key || searchRecursion(node.next, key)); + } + + @Override + public boolean search(int key) { + return searchRecursion(getHead(), key); + } +} From e003f9a2debe1889c5aad8e4ed7b9a7536ec191b Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 22 Sep 2020 11:58:41 +0800 Subject: [PATCH 449/521] get element at special index --- DataStructures/Lists/SinglyLinkedList.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 668a40da3dcd..1df0b4131fed 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -211,6 +211,21 @@ public boolean search(int key) { return false; } + /** + * Return element at special index. + * + * @param index given index of element + * @return element at special index. + */ + public int getNth(int index) { + checkBounds(index, 0, size - 1); + Node cur = head; + for (int i = 0; i < index; ++i) { + cur = cur.next; + } + return cur.value; + } + @Override public String toString() { @@ -251,6 +266,11 @@ public static void main(String[] arg) { && list.search(1) && !list.search(100); + /* Test get function */ + assert list.getNth(0) == 10 + && list.getNth(2) == 5 + && list.getNth(4) == 1; + /* Test delete function */ list.deleteHead(); list.deleteNth(1); From d4e16ab4741f612344886b939e4c1432551df796 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 22 Sep 2020 03:59:10 +0000 Subject: [PATCH 450/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 8dc90ecdf98f..78e0fbda24b3 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -60,12 +60,14 @@ * [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) * Lists * [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) + * [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) * [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) * [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) * [ListAddnFun](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/ListAddnFun.java) * [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) * [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) * [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) + * [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) * [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) * Queues * [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) From 2f2e94424904011b9c96ec405f3781de0fce4a40 Mon Sep 17 00:00:00 2001 From: Sombit Bose Date: Wed, 30 Sep 2020 20:23:07 +0530 Subject: [PATCH 451/521] Create Problem12.java Added solution for problem 12 of Project Euler --- ProjectEuler/Problem12.java | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 ProjectEuler/Problem12.java diff --git a/ProjectEuler/Problem12.java b/ProjectEuler/Problem12.java new file mode 100644 index 000000000000..d85721d76d9e --- /dev/null +++ b/ProjectEuler/Problem12.java @@ -0,0 +1,63 @@ +/* + The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. + The first ten terms would be: + + 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... + + Let us list the factors of the first seven triangle numbers: + + 1: 1 + 3: 1,3 + 6: 1,2,3,6 + 10: 1,2,5,10 + 15: 1,3,5,15 + 21: 1,3,7,21 + 28: 1,2,4,7,14,28 + We can see that 28 is the first triangle number to have over five divisors. + + What is the value of the first triangle number to have over five hundred divisors? +*/ + +public class Problem_12_Highly_Divisible_Triangular_Number { + + /* returns the nth triangle number; that is, the sum of all the natural numbers less than, or equal to, n */ + public static int triangleNumber(int n) { + int sum = 0; + for (int i = 0; i <= n; i++) + sum += i; + return sum; + } + + public static void main(String[] args) { + + long start = System.currentTimeMillis(); // start the stopwatch + + int j = 0; // j represents the jth triangle number + int n = 0; // n represents the triangle number corresponding to j + int numberOfDivisors = 0; // number of divisors for triangle number n + + while (numberOfDivisors <= 500) { + + // resets numberOfDivisors because it's now checking a new triangle number + // and also sets n to be the next triangle number + numberOfDivisors = 0; + j++; + n = triangleNumber(j); + + // for every number from 1 to the square root of this triangle number, + // count the number of divisors + for (int i = 1; i <= Math.sqrt(n); i++) + if (n % i == 0) + numberOfDivisors++; + + // 1 to the square root of the number holds exactly half of the divisors + // so multiply it by 2 to include the other corresponding half + numberOfDivisors *= 2; + } + + long finish = System.currentTimeMillis(); // stop the stopwatch + + System.out.println(n); + System.out.println("Time taken: " + (finish - start) + " milliseconds"); + } +} From afddfd02d554c03f11846fd67ca918433ed2712b Mon Sep 17 00:00:00 2001 From: Nishant Ingle <30694286+Nishant-Ingle@users.noreply.github.com> Date: Thu, 1 Oct 2020 21:21:56 +0530 Subject: [PATCH 452/521] Add comment above parameterised constructor --- DataStructures/Lists/SinglyLinkedList.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 1df0b4131fed..2e7c5d37b75b 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -321,6 +321,11 @@ class Node { this(value, null); } + /** + * Constructor + * @param value Value to be put in the node + * @param next Reference to the next node + */ Node(int value, Node next) { this.value = value; this.next = next; From eb3fc306c3afc2b7893841e806d512d1d4fd1f70 Mon Sep 17 00:00:00 2001 From: Emrullah YILDIRIM Date: Sun, 4 Oct 2020 14:10:08 +0300 Subject: [PATCH 453/521] Remove unnecassary variable usage. (cherry picked from commit ca51ac0ecea9fd1dfd3d957e77f95aa8e0f467bb) --- divideconquer/ClosestPair.java | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/divideconquer/ClosestPair.java b/divideconquer/ClosestPair.java index 67ebe89b8628..3d717417a80c 100644 --- a/divideconquer/ClosestPair.java +++ b/divideconquer/ClosestPair.java @@ -97,7 +97,6 @@ public int xPartition( final Location[] a, final int first, final int last) { Location pivot = a[last]; // pivot - int pIndex = last; int i = first - 1; Location temp; // Temporarily store value for position transformation for (int j = first; j <= last - 1; j++) { @@ -110,8 +109,8 @@ public int xPartition( } i++; temp = a[i]; // array[pivot] <-> array[i] - a[i] = a[pIndex]; - a[pIndex] = temp; + a[i] = a[last]; + a[last] = temp; return i; // pivot index } @@ -128,7 +127,6 @@ public int yPartition( final Location[] a, final int first, final int last) { Location pivot = a[last]; // pivot - int pIndex = last; int i = first - 1; Location temp; // Temporarily store value for position transformation for (int j = first; j <= last - 1; j++) { @@ -141,8 +139,8 @@ public int yPartition( } i++; temp = a[i]; // array[pivot] <-> array[i] - a[i] = a[pIndex]; - a[pIndex] = temp; + a[i] = a[last]; + a[last] = temp; return i; // pivot index } @@ -194,11 +192,10 @@ public double closestPair(final Location[] a, final int indexNum) { Location[] divideArray = new Location[indexNum]; System.arraycopy(a, 0, divideArray, 0, indexNum); // Copy previous array - int totalNum = indexNum; // number of coordinates in the divideArray int divideX = indexNum / 2; // Intermediate value for divide Location[] leftArray = new Location[divideX]; //divide - left array //divide-right array - Location[] rightArray = new Location[totalNum - divideX]; + Location[] rightArray = new Location[indexNum - divideX]; if (indexNum <= 3) { // If the number of coordinates is 3 or less return bruteForce(divideArray); } @@ -206,20 +203,20 @@ public double closestPair(final Location[] a, final int indexNum) { System.arraycopy(divideArray, 0, leftArray, 0, divideX); //divide-right array System.arraycopy( - divideArray, divideX, rightArray, 0, totalNum - divideX); + divideArray, divideX, rightArray, 0, indexNum - divideX); double minLeftArea = 0; //Minimum length of left array double minRightArea = 0; //Minimum length of right array double minValue = 0; //Minimum lengt minLeftArea = closestPair(leftArray, divideX); // recursive closestPair - minRightArea = closestPair(rightArray, totalNum - divideX); + minRightArea = closestPair(rightArray, indexNum - divideX); // window size (= minimum length) minValue = Math.min(minLeftArea, minRightArea); // Create window. Set the size for creating a window // and creating a new array for the coordinates in the window - for (int i = 0; i < totalNum; i++) { + for (int i = 0; i < indexNum; i++) { double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); if (xGap < minValue) { ClosestPair.setSecondCount(secondCount + 1); // size of the array @@ -232,7 +229,7 @@ public double closestPair(final Location[] a, final int indexNum) { // new array for coordinates in window Location[] firstWindow = new Location[secondCount]; int k = 0; - for (int i = 0; i < totalNum; i++) { + for (int i = 0; i < indexNum; i++) { double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); if (xGap < minValue) { // if it's inside a window firstWindow[k] = divideArray[i]; // put in an array From 064d941722674cd023d3e8e5f59823fbc0d691b3 Mon Sep 17 00:00:00 2001 From: Sombit Bose Date: Tue, 6 Oct 2020 07:34:52 +0530 Subject: [PATCH 454/521] Update Problem12.java --- ProjectEuler/Problem12.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProjectEuler/Problem12.java b/ProjectEuler/Problem12.java index d85721d76d9e..72e1b5b7160e 100644 --- a/ProjectEuler/Problem12.java +++ b/ProjectEuler/Problem12.java @@ -18,7 +18,7 @@ What is the value of the first triangle number to have over five hundred divisors? */ -public class Problem_12_Highly_Divisible_Triangular_Number { +public class Problem_12 { /* returns the nth triangle number; that is, the sum of all the natural numbers less than, or equal to, n */ public static int triangleNumber(int n) { From 8ad87ce9d3c09b8d2e3382e58b6e3aa0651c8e06 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 6 Oct 2020 14:58:38 +0800 Subject: [PATCH 455/521] reformat --- ProjectEuler/Problem12.java | 69 +++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/ProjectEuler/Problem12.java b/ProjectEuler/Problem12.java index 72e1b5b7160e..89ea3e0ac35f 100644 --- a/ProjectEuler/Problem12.java +++ b/ProjectEuler/Problem12.java @@ -1,24 +1,34 @@ -/* - The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. - The first ten terms would be: +package ProjectEuler; +/** + * The sequence of triangle numbers is generated by adding the natural numbers. + * So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. + * The first ten terms would be: + *

+ * 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... + *

+ * Let us list the factors of the first seven triangle numbers: + *

+ * 1: 1 + * 3: 1,3 + * 6: 1,2,3,6 + * 10: 1,2,5,10 + * 15: 1,3,5,15 + * 21: 1,3,7,21 + * 28: 1,2,4,7,14,28 + * We can see that 28 is the first triangle number to have over five divisors. + *

+ * What is the value of the first triangle number to have over five hundred divisors? + *

+ * link: https://projecteuler.net/problem=12 + */ +public class Problem12 { - 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... - - Let us list the factors of the first seven triangle numbers: - - 1: 1 - 3: 1,3 - 6: 1,2,3,6 - 10: 1,2,5,10 - 15: 1,3,5,15 - 21: 1,3,7,21 - 28: 1,2,4,7,14,28 - We can see that 28 is the first triangle number to have over five divisors. - - What is the value of the first triangle number to have over five hundred divisors? -*/ - -public class Problem_12 { + /** + * Driver Code + */ + public static void main(String[] args) { + assert solution1(500) == 76576500; + } /* returns the nth triangle number; that is, the sum of all the natural numbers less than, or equal to, n */ public static int triangleNumber(int n) { @@ -28,36 +38,29 @@ public static int triangleNumber(int n) { return sum; } - public static void main(String[] args) { - - long start = System.currentTimeMillis(); // start the stopwatch - + public static int solution1(int number) { int j = 0; // j represents the jth triangle number int n = 0; // n represents the triangle number corresponding to j int numberOfDivisors = 0; // number of divisors for triangle number n - - while (numberOfDivisors <= 500) { + + while (numberOfDivisors <= number) { // resets numberOfDivisors because it's now checking a new triangle number // and also sets n to be the next triangle number numberOfDivisors = 0; j++; n = triangleNumber(j); - + // for every number from 1 to the square root of this triangle number, // count the number of divisors for (int i = 1; i <= Math.sqrt(n); i++) if (n % i == 0) numberOfDivisors++; - + // 1 to the square root of the number holds exactly half of the divisors // so multiply it by 2 to include the other corresponding half numberOfDivisors *= 2; } - - long finish = System.currentTimeMillis(); // stop the stopwatch - - System.out.println(n); - System.out.println("Time taken: " + (finish - start) + " milliseconds"); + return n; } } From d7a5dbe3a49c8851acde0eb29c7934860dbb8d92 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 6 Oct 2020 07:04:06 +0000 Subject: [PATCH 456/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 78e0fbda24b3..9e5b08ce0d0d 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -213,6 +213,7 @@ * [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) * [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) * [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) + * [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) ## Searches * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) From 1bf0fe05a2284c971825b466d92a493c6b62829d Mon Sep 17 00:00:00 2001 From: mmessmer Date: Fri, 9 Oct 2020 10:53:39 +0200 Subject: [PATCH 457/521] LPS algorithm --- .../LongestPalindromicSubsequence.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 DynamicProgramming/LongestPalindromicSubsequence.java diff --git a/DynamicProgramming/LongestPalindromicSubsequence.java b/DynamicProgramming/LongestPalindromicSubsequence.java new file mode 100644 index 000000000000..2ad1c0255da4 --- /dev/null +++ b/DynamicProgramming/LongestPalindromicSubsequence.java @@ -0,0 +1,58 @@ +package DynamicProgramming; +import java.lang.*; +import java.io.*; +import java.util.*; + +/** + * @author Matteo Messmer https://github.com/matteomessmer + */ +public class LongestPalindromicSubsequence { + public static void main(String[] args) { + String a = "BBABCBCAB"; + String b = "BABCBAB"; + + String aLPS = LPS(a); + String bLPS = LPS(b); + + System.out.println(a + " => " + aLPS); + System.out.println(b + " => " + bLPS); + } + + private static String LPS(String original) { + StringBuilder reverse = new StringBuilder(); + reverse.append(original); + reverse = reverse.reverse(); + return recursiveLPS(original, reverse); + } + + private static String recursiveLPS(String original, String reverse) { + String bestResult = "" + + //no more chars, then return empty + if(original.length() == 0 || reverse.length() == 0) { + bestResult = ""; + } else { + + //if the last chars match, then remove it from both strings and recur + if(original.charAt(original.length() - 1) == reverse.charAt(reverse.length() - 1)) { + String bestSubResult = recursiveLPS(original.substring(0, original.length() - 1), reverse.substring(0, reverse.length() - 1)); + + bestResult = reverse.charAt(reverse.length() - 1) + bestSubResult; + } else { + //otherwise (1) ignore the last character of reverse, and recur on original and updated reverse again + //(2) ignore the last character of original and recur on the updated original and reverse again + //then select the best result from these two subproblems. + + String bestSubResult1 = recursiveLPS(original, reverse.substring(0, reverse.length() - 1)); + String bestSubResult2 = recursiveLPS(original.substring(0, original.length() - 1), reverse); + if(bestSubResult1.length()>bestSubResult2.length()) { + bestResult = bestSubResult1; + } else { + bestResult = bestSubResult2; + } + } + } + + return bestResult; + } +} \ No newline at end of file From 196fcb30df4b5a3304b16858a7c5f598ce3bf173 Mon Sep 17 00:00:00 2001 From: mmessmer Date: Fri, 9 Oct 2020 10:59:20 +0200 Subject: [PATCH 458/521] LPS algorithm fix --- DynamicProgramming/LongestPalindromicSubsequence.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DynamicProgramming/LongestPalindromicSubsequence.java b/DynamicProgramming/LongestPalindromicSubsequence.java index 2ad1c0255da4..4f017fe10842 100644 --- a/DynamicProgramming/LongestPalindromicSubsequence.java +++ b/DynamicProgramming/LongestPalindromicSubsequence.java @@ -22,11 +22,11 @@ private static String LPS(String original) { StringBuilder reverse = new StringBuilder(); reverse.append(original); reverse = reverse.reverse(); - return recursiveLPS(original, reverse); + return recursiveLPS(original, reverse.toString()); } private static String recursiveLPS(String original, String reverse) { - String bestResult = "" + String bestResult = ""; //no more chars, then return empty if(original.length() == 0 || reverse.length() == 0) { From 9bcb7f5f0b706ebcd45f8cb77611d0b4b3a6eb51 Mon Sep 17 00:00:00 2001 From: mmessmer Date: Fri, 9 Oct 2020 11:42:53 +0200 Subject: [PATCH 459/521] Fixes: #1709 --- DynamicProgramming/LongestPalindromicSubsequence.java | 1 + 1 file changed, 1 insertion(+) diff --git a/DynamicProgramming/LongestPalindromicSubsequence.java b/DynamicProgramming/LongestPalindromicSubsequence.java index 4f017fe10842..28b43a5fed6f 100644 --- a/DynamicProgramming/LongestPalindromicSubsequence.java +++ b/DynamicProgramming/LongestPalindromicSubsequence.java @@ -5,6 +5,7 @@ /** * @author Matteo Messmer https://github.com/matteomessmer + * Algorithm explanation https://www.educative.io/edpresso/longest-palindromic-subsequence-algorithm */ public class LongestPalindromicSubsequence { public static void main(String[] args) { From 60c0291e6a18ccdd8f0d1b1b54aa3f55d768f90b Mon Sep 17 00:00:00 2001 From: mmessmer Date: Sat, 10 Oct 2020 18:07:03 +0200 Subject: [PATCH 460/521] added tests --- .../LongestPalindromicSubsequence.java | 8 ++--- .../LongestPalindromicSubsequenceTests.java | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 DynamicProgramming/LongestPalindromicSubsequenceTests.java diff --git a/DynamicProgramming/LongestPalindromicSubsequence.java b/DynamicProgramming/LongestPalindromicSubsequence.java index 28b43a5fed6f..53ea6a794519 100644 --- a/DynamicProgramming/LongestPalindromicSubsequence.java +++ b/DynamicProgramming/LongestPalindromicSubsequence.java @@ -1,10 +1,9 @@ -package DynamicProgramming; +package test; import java.lang.*; import java.io.*; import java.util.*; /** - * @author Matteo Messmer https://github.com/matteomessmer * Algorithm explanation https://www.educative.io/edpresso/longest-palindromic-subsequence-algorithm */ public class LongestPalindromicSubsequence { @@ -19,9 +18,8 @@ public static void main(String[] args) { System.out.println(b + " => " + bLPS); } - private static String LPS(String original) { - StringBuilder reverse = new StringBuilder(); - reverse.append(original); + public static String LPS(String original) throws IllegalArgumentException { + StringBuilder reverse = new StringBuilder(original); reverse = reverse.reverse(); return recursiveLPS(original, reverse.toString()); } diff --git a/DynamicProgramming/LongestPalindromicSubsequenceTests.java b/DynamicProgramming/LongestPalindromicSubsequenceTests.java new file mode 100644 index 000000000000..7171f48495e4 --- /dev/null +++ b/DynamicProgramming/LongestPalindromicSubsequenceTests.java @@ -0,0 +1,33 @@ +package test; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class LongestPalindromicSubsequenceTests { + + @Test + void test1() { + assertEquals(LongestPalindromicSubsequence.LPS(""), ""); + } + + @Test + void test2() { + assertEquals(LongestPalindromicSubsequence.LPS("A"), "A"); + } + + @Test + void test3() { + assertEquals(LongestPalindromicSubsequence.LPS("BABCBAB"), "BABCBAB"); + } + + @Test + void test4() { + assertEquals(LongestPalindromicSubsequence.LPS("BBABCBCAB"), "BABCBAB"); + } + + @Test + void test5() { + assertEquals(LongestPalindromicSubsequence.LPS("AAAAAAAAAAAAAAAAAAAAAAAA"), "AAAAAAAAAAAAAAAAAAAAAAAA"); + } +} From 0cc28082da6a94877cea953cd953d2793213b772 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 14 Oct 2020 15:14:48 +0000 Subject: [PATCH 461/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 9e5b08ce0d0d..49d34f1688c4 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -111,6 +111,8 @@ * [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) * [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) + * [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) + * [LongestPalindromicSubsequenceTests](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequenceTests.java) * [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) * [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) From 3d7a6cb5ce7fe08ba324d53f660212c69afe0628 Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Fri, 23 Oct 2020 14:07:04 +0800 Subject: [PATCH 462/521] feat: add new workflow --- .github/workflows/prettier.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/prettier.yml diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 000000000000..ea532013349d --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,26 @@ +name: Prettier + +on: + pull_request: + push: + branches: + - master + - Development + +jobs: + prettier: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.head_ref }} + + - name: Prettify code + uses: creyD/prettier_action@v3.0 + with: + prettier_options: --write **/*.{java,md} + commit_message: 'feat: prettify code' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 84d92d085f6110f3070d4432420b2508d2a197cf Mon Sep 17 00:00:00 2001 From: yanglbme Date: Fri, 23 Oct 2020 06:07:43 +0000 Subject: [PATCH 463/521] feat: prettify code --- .github/pull_request_template.md | 28 +- CONTRIBUTING.md | 16 +- DIRECTORY.md | 488 ++++++++++++++++--------------- README-ko.md | 162 +++++----- README.md | 7 +- 5 files changed, 361 insertions(+), 340 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 1c134e481976..c805c24b29f3 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,23 +1,23 @@ ### **Describe your change:** - - -* [ ] Add an algorithm? -* [ ] Fix a bug or typo in an existing algorithm? -* [ ] Documentation change? +- [ ] Add an algorithm? +- [ ] Fix a bug or typo in an existing algorithm? +- [ ] Documentation change? #### References + ### **Checklist:** + -* [ ] I have read [CONTRIBUTING.md](https://github.com/TheAlgorithms/Java/blob/master/CONTRIBUTING.md). -* [ ] This pull request is all my own work -- I have not plagiarized. -* [ ] I know that pull requests will not be merged if they fail the automated tests. -* [ ] This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms. -* [ ] All new Java files are placed inside an existing directory. -* [ ] All filenames are in all uppercase characters with no spaces or dashes. -* [ ] All functions and variable names follow Java naming conventions. -* [ ] All new algorithms have a URL in its comments that points to Wikipedia or other similar explanation. -* [ ] If this pull request resolves one or more open issues then the commit message contains `Fixes: #{$ISSUE_NO}`. +- [ ] I have read [CONTRIBUTING.md](https://github.com/TheAlgorithms/Java/blob/master/CONTRIBUTING.md). +- [ ] This pull request is all my own work -- I have not plagiarized. +- [ ] I know that pull requests will not be merged if they fail the automated tests. +- [ ] This PR only changes one algorithm file. To ease review, please open separate PRs for separate algorithms. +- [ ] All new Java files are placed inside an existing directory. +- [ ] All filenames are in all uppercase characters with no spaces or dashes. +- [ ] All functions and variable names follow Java naming conventions. +- [ ] All new algorithms have a URL in its comments that points to Wikipedia or other similar explanation. +- [ ] If this pull request resolves one or more open issues then the commit message contains `Fixes: #{$ISSUE_NO}`. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 92a2dbf3e104..2bcbf507c7b1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,24 +4,26 @@ #### **Did you find a bug?** -* **Ensure the bug was not already reported** by searching on GitHub under [Project Issues](https://github.com/TheAlgorithms/Java/issues). +- **Ensure the bug was not already reported** by searching on GitHub under [Project Issues](https://github.com/TheAlgorithms/Java/issues). -* Please avoid opening issues asking to be "assigned†to a particular algorithm. This merely creates unnecessary noise for maintainers. Instead, please submit your implementation in a pull request and it will be evaluated by project maintainers. +- Please avoid opening issues asking to be "assigned†to a particular algorithm. This merely creates unnecessary noise for maintainers. Instead, please submit your implementation in a pull request and it will be evaluated by project maintainers. -* If you are unable to find an open issue refering to the same problem, depending on the type of issue follow the appropriate steps: +- If you are unable to find an open issue refering to the same problem, depending on the type of issue follow the appropriate steps: #### **Do you want to contribute to the documentation?** -* Please read the documentation in here [Contributing to the Documentation]() ,[open a new one issue](https://github.com/TheAlgorithms/Java/issues/new), make changes and then create a pull request, it will be put under review and accepted if it is approprite. +- Please read the documentation in here [Contributing to the Documentation]() ,[open a new one issue](https://github.com/TheAlgorithms/Java/issues/new), make changes and then create a pull request, it will be put under review and accepted if it is approprite. #### **Do you want to add a new feature?** -* [Open a new one issue](https://github.com/TheAlgorithms/Java/issues/new). Be sure to include a **title and a clear description** and a **test case** demonstrating the new feature that you want to add to the project. + +- [Open a new one issue](https://github.com/TheAlgorithms/Java/issues/new). Be sure to include a **title and a clear description** and a **test case** demonstrating the new feature that you want to add to the project. #### **Do you want to fix a bug?** -* [Open a new one issue](https://github.com/TheAlgorithms/Java/issues/new).Be sure to include a **title and a clear description** and a **test case** demonstrating the expected behaviour that is not occuring. + +- [Open a new one issue](https://github.com/TheAlgorithms/Java/issues/new).Be sure to include a **title and a clear description** and a **test case** demonstrating the expected behaviour that is not occuring. #### **Do you have questions about the source code?** -* Ask any question about how to use the repository in the [TheAlgorithms room in GITTER](https://gitter.im/TheAlgorithms/community?source=orgpage#) or [open a new one issue](https://github.com/TheAlgorithms/Java/issues/new) +- Ask any question about how to use the repository in the [TheAlgorithms room in GITTER](https://gitter.im/TheAlgorithms/community?source=orgpage#) or [open a new one issue](https://github.com/TheAlgorithms/Java/issues/new) :+1::tada: That's all you need to know about the process now it's your turn to help us improve the repository, thank you again! :+1::tada: diff --git a/DIRECTORY.md b/DIRECTORY.md index 49d34f1688c4..d58405a8a9d8 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -1,263 +1,275 @@ - ## ciphers - * [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) - * [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) - * [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) - * [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) - * [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) - * [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) - * [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) + +- [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) +- [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) +- [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) +- [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) +- [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) +- [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) +- [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) ## Conversions - * [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) - * [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) - * [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) - * [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) - * [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) - * [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) - * [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) - * [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) - * [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) - * [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) - * [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) - * [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) - * [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) - * [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) - * [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) - * [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) - * [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) + +- [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) +- [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) +- [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) +- [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) +- [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) +- [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) +- [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) +- [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) +- [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) +- [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) +- [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) +- [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) +- [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) +- [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) +- [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) +- [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) +- [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) ## DataStructures - * Bags - * [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) - * Buffers - * [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) - * DynamicArray - * [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) - * Graphs - * [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) - * [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) - * [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) - * [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) - * [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) - * [GraphAlgos](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/GraphAlgos.java) - * [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) - * [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) - * [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) - * [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) - * HashMap - * Hashing - * [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) - * [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) - * [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) - * [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) - * Heaps - * [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) - * [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) - * [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) - * [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) - * [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) - * [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) - * Lists - * [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) - * [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) - * [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) - * [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) - * [ListAddnFun](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/ListAddnFun.java) - * [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) - * [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) - * [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) - * [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) - * [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) - * Queues - * [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) - * [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) - * [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) - * [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) - * Stacks - * [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) - * [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) - * [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) - * [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) - * [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) - * [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) - * Trees - * [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) - * [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) - * [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) - * [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) - * [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) - * [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) - * [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) - * [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) - * [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) - * [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) - * [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) - * [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) + +- Bags + - [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) +- Buffers + - [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) +- DynamicArray + - [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) +- Graphs + - [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) + - [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) + - [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) + - [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) + - [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) + - [GraphAlgos](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/GraphAlgos.java) + - [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) + - [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) + - [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) + - [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) +- HashMap + - Hashing + - [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) + - [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) + - [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) + - [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) +- Heaps + - [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) + - [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) + - [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) + - [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) + - [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) + - [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) +- Lists + - [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) + - [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) + - [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) + - [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) + - [ListAddnFun](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/ListAddnFun.java) + - [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) + - [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) + - [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) + - [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) + - [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) +- Queues + - [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) + - [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) + - [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) + - [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) +- Stacks + - [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) + - [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) + - [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) + - [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) + - [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) + - [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) +- Trees + - [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) + - [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) + - [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) + - [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) + - [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) + - [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) + - [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) + - [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) + - [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) + - [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) + - [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) + - [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) ## divideconquer - * [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) - * [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) + +- [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) +- [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) ## DynamicProgramming - * [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) - * [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) - * [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) - * [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) - * [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) - * [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) - * [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) - * [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) - * [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) - * [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) - * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) - * [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) - * [LongestPalindromicSubsequenceTests](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequenceTests.java) - * [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) - * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) - * [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) - * [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) - * [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) + +- [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) +- [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) +- [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) +- [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) +- [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) +- [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) +- [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) +- [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) +- [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) +- [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) +- [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) +- [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) +- [LongestPalindromicSubsequenceTests](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequenceTests.java) +- [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) +- [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) +- [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) +- [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) +- [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) ## Maths - * [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) - * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) - * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) - * [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) - * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) - * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) - * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) - * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) - * [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) - * [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) - * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) - * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) - * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) - * [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) - * [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) - * [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) - * [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) - * [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) - * [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) - * [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) - * [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) - * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) - * [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) - * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) - * [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) - * [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) - * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) - * [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) - * [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) - * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) - * [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) - * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) - * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) - * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) - * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) - * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) - * [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) - * [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) - * [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) - * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) + +- [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) +- [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) +- [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) +- [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) +- [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) +- [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) +- [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) +- [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) +- [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) +- [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) +- [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) +- [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) +- [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) +- [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) +- [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) +- [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) +- [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) +- [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) +- [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) +- [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) +- [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) +- [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) +- [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) +- [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) +- [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) +- [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) +- [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) +- [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) +- [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) +- [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) +- [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) +- [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) +- [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) +- [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) +- [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) +- [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) +- [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) +- [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) +- [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) +- [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) ## MinimizingLateness - * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) + +- [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) ## Misc - * [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Misc/HeapSort.java) - * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) - * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) + +- [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Misc/HeapSort.java) +- [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) +- [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) ## Others - * [3 sum](https://github.com/TheAlgorithms/Java/blob/master/Others/3%20sum.java) - * [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) - * [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) - * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) - * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) - * [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) - * [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) - * [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) - * [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) - * [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) - * [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) - * [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) - * [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) - * [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) - * [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) - * [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) - * [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) - * [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) - * [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) - * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) - * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) - * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) - * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) - * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) - * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) - * [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) - * [Rotation of array without using extra space](https://github.com/TheAlgorithms/Java/blob/master/Others/Rotation%20of%20array%20without%20using%20extra%20space.java) - * [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) - * [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) - * [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) - * [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) - * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) - * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) - * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) - * [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) - * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) + +- [3 sum](https://github.com/TheAlgorithms/Java/blob/master/Others/3%20sum.java) +- [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) +- [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) +- [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) +- [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) +- [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) +- [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) +- [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) +- [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) +- [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) +- [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) +- [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) +- [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) +- [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) +- [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) +- [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) +- [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) +- [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) +- [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) +- [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) +- [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) +- [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) +- [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) +- [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) +- [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) +- [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) +- [Rotation of array without using extra space](https://github.com/TheAlgorithms/Java/blob/master/Others/Rotation%20of%20array%20without%20using%20extra%20space.java) +- [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) +- [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) +- [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) +- [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) +- [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) +- [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) +- [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) +- [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) +- [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) ## ProjectEuler - * [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) - * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) - * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) - * [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) - * [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) - * [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) - * [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) - * [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) + +- [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) +- [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) +- [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) +- [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) +- [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) +- [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) +- [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) +- [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) ## Searches - * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) - * [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) - * [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) - * [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) - * [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) - * [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) - * [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) - * [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) - * [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) - * [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) + +- [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) +- [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) +- [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) +- [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) +- [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) +- [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) +- [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) +- [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) +- [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) +- [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) ## Sorts - * [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) - * [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) - * [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) - * [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) - * [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) - * [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) - * [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) - * [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) - * [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) - * [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) - * [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) - * [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) - * [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) - * [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) - * [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) - * [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) - * [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) - * [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) - * [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) - * [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) + +- [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) +- [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) +- [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) +- [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) +- [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) +- [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) +- [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) +- [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) +- [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) +- [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) +- [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) +- [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) +- [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) +- [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) +- [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) +- [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) +- [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) +- [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) +- [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) +- [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) ## strings - * [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) - * [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) - * [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) - * [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) - * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) - * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) - * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) - * [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) - * [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) + +- [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) +- [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) +- [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) +- [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) +- [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) +- [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) +- [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) +- [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) +- [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) diff --git a/README-ko.md b/README-ko.md index c53868cc1310..cd3bac479d3f 100644 --- a/README-ko.md +++ b/README-ko.md @@ -8,80 +8,87 @@ ## ì •ë ¬ 알고리즘 - ### Bubble(버블 ì •ë ¬) + ![alt text][bubble-image] From [Wikipedia][bubble-wiki]: 버블 소트(sinking sorë¼ê³ ë„ 불리움)는 리스트를 반복ì ì¸ 단계로 접근하여 정렬한다. ê°ê°ì˜ ì§ì„ 비êµí•˜ë©°, 순서가 ìž˜ëª»ëœ ê²½ìš° 그접한 ì•„ì´í…œë“¤ì„ 스왑하는 알고리즘ì´ë‹¤. ë” ì´ìƒ 스왑할 ê²ƒì´ ì—†ì„ ë•Œê¹Œì§€ 반복하며, ë°˜ë³µì´ ëë‚¨ìŒ ë¦¬ìŠ¤íŠ¸ê°€ ì •ë ¬ë˜ì—ˆìŒì„ ì˜ë¯¸í•œë‹¤. -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n) -* í‰ê·  성능 O(n^2) - -###### View the algorithm in [action][bubble-toptal] +**ì†ì„±** +- ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +- ìµœê³ ì˜ ì„±ëŠ¥ O(n) +- í‰ê·  성능 O(n^2) +###### View the algorithm in [action][bubble-toptal] ### Insertion(삽입 ì •ë ¬) + ![alt text][insertion-image] From [Wikipedia][insertion-wiki]: 삽입 ì •ë ¬ì€ ìµœì¢… ì •ë ¬ëœ ë°°ì—´(ë˜ëŠ” 리스트)ì„ í•œë²ˆì— í•˜ë‚˜ì”© 구축하는 알고리즘ì´ë‹¤. ì´ê²ƒì€ í° ë¦¬ìŠ¤íŠ¸ì—서 ë” ë‚˜ì€ ì•Œê³ ë¦¬ì¦˜ì¸ í€µ 소트, íž™ 소트, ë˜ëŠ” 머지 소트보다 훨씬 ì•ˆì¢‹ì€ íš¨ìœ¨ì„ ê°€ì§„ë‹¤. 그림ì—서 ê° ë§‰ëŒ€ëŠ” 정렬해야 하는 ë°°ì—´ì˜ ìš”ì†Œë¥¼ 나타낸다. ìƒë‹¨ê³¼ ë‘ ë²ˆì§¸ ìƒë‹¨ ë§‰ëŒ€ì˜ ì²« 번째 êµì°¨ì ì—서 ë°œìƒí•˜ëŠ” ê²ƒì€ ë‘ ë²ˆì§¸ 요소가 첫 번째 요소보다 ë” ë†’ì€ ìš°ì„  순위를 가지기 ë–„ë¬¸ì— ë§‰ëŒ€ë¡œ 표시ë˜ëŠ” ì´ëŸ¬í•œ 요소를 êµí™˜í•œ 것ì´ë‹¤. ì´ ë°©ë²•ì„ ë°˜ë³µí•˜ë©´ 삽입 ì •ë ¬ì´ ì™„ë£Œëœë‹¤. -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n) -* í‰ê·  O(n^2) +**ì†ì„±** -###### View the algorithm in [action][insertion-toptal] +- ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +- ìµœê³ ì˜ ì„±ëŠ¥ O(n) +- í‰ê·  O(n^2) +###### View the algorithm in [action][insertion-toptal] ### Merge(합병 ì •ë ¬) + ![alt text][merge-image] From [Wikipedia][merge-wiki]: 컴퓨터 과학ì—서, 합병 ì •ë ¬ì€ íš¨ìœ¨ì ì¸, 범용ì ì¸, ë¹„êµ ê¸°ë°˜ ì •ë ¬ 알고리즘ì´ë‹¤. ëŒ€ë¶€ë¶„ì˜ êµ¬í˜„ì€ ì•ˆì •ì ì¸ 분류를 ì´ë£¨ëŠ”ë°, ì´ê²ƒì€ êµ¬í˜„ì´ ì •ë ¬ëœ ì¶œë ¥ì— ë™ì¼í•œ ìš”ì†Œì˜ ìž…ë ¥ 순서를 유지한다는 ê²ƒì„ ì˜ë¯¸í•œë‹¤. 합병 ì •ë ¬ì€ 1945ë…„ì— John von Neumannì´ ë°œëª…í•œ ë¶„í•  ì •ë³µ 알고리즘ì´ë‹¤. -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n log n) (ì¼ë°˜ì ) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) -* í‰ê·  O(n log n) +**ì†ì„±** +- ìµœì•…ì˜ ì„±ëŠ¥ O(n log n) (ì¼ë°˜ì ) +- ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) +- í‰ê·  O(n log n) ###### View the algorithm in [action][merge-toptal] ### Quick(퀵 ì •ë ¬) + ![alt text][quick-image] From [Wikipedia][quick-wiki]: 퀵 ì •ë ¬sometimes called partition-exchange sort)ì€ íš¨ìœ¨ì ì¸ ì •ë ¬ 알고리즘으로, ë°°ì—´ì˜ ìš”ì†Œë¥¼ 순서대로 정렬하는 체계ì ì¸ 방법 ì—­í™œì„ í•œë‹¤. -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) or O(n) with three-way partition -* í‰ê·  O(n log n) +**ì†ì„±** + +- ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +- ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) or O(n) with three-way partition +- í‰ê·  O(n log n) ###### View the algorithm in [action][quick-toptal] ### Selection(ì„ íƒ ì •ë ¬) + ![alt text][selection-image] From [Wikipedia][selection-wiki]: 알고리즘 ìž…ë ¥ 리스트를 ë‘ ë¶€ë¶„ìœ¼ë¡œ 나눈다 : 첫 ë¶€ë¶„ì€ ì•„ì´í…œë“¤ì´ ì´ë¯¸ 왼쪽ì—서 오른쪽으로 ì •ë ¬ë˜ì—ˆë‹¤. 그리고 ë‚¨ì€ ë¶€ë¶„ì˜ ì•„ì´í…œë“¤ì€ 나머지 í•­ëª©ì„ ì°¨ì§€í•˜ëŠ” 리스트ì´ë‹¤. 처ìŒì—는 ì •ë ¬ëœ ë¦¬ìŠ¤íŠ¸ëŠ” 공백ì´ê³  나머지가 ì „ë¶€ì´ë‹¤. 오르차순(ë˜ëŠ” 내림차순) ì•Œê³ ë¦¬ì¦˜ì€ ê°€ìž¥ ìž‘ì€ ìš”ì†Œë¥¼ ì •ë ¬ë˜ì§€ ì•Šì€ ë¦¬ìŠ¤íŠ¸ì—서 찾고 ì •ë ¬ì´ ì•ˆëœ ê°€ìž¥ 왼쪽(ì •ë ¬ëœ ë¦¬ìŠ¤íŠ¸) 리스트와 바꾼다. ì´ë ‡ê²Œ 오른쪽으로 나아간다. -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n^2) -* í‰ê·  O(n^2) +**ì†ì„±** + +- ìµœì•…ì˜ ì„±ëŠ¥ O(n^2) +- ìµœê³ ì˜ ì„±ëŠ¥ O(n^2) +- í‰ê·  O(n^2) ###### View the algorithm in [action][selection-toptal] ### Shell(쉘 ì •ë ¬) + ![alt text][shell-image] -From [Wikipedia][shell-wiki]: 쉘 ì •ë ¬ì€ ë©€ë¦¬ 떨어져 있는 í•­ëª©ì˜ êµí™˜ì„ 허용하는 삽입 ì¢…ë¥˜ì˜ ì¼ë°˜í™”ì´ë‹¤. ê·¸ ì•„ì´ë””어는 모든 n번째 요소가 ì •ë ¬ëœ ëª©ë¡ì„ 제공한다는 ê²ƒì„ ê³ ë ¤í•˜ì—¬ ì–´ëŠ ê³³ì—서든지 시작하ë„ë¡ ìš”ì†Œì˜ ëª©ë¡ì„ 배열하는 것ì´ë‹¤. ì´ëŸ¬í•œ 목ë¡ì€ h-sorted로 알려져 있다. 마찬가지로, ê°ê° 개별ì ìœ¼ë¡œ ì •ë ¬ëœ h ì¸í„°ë¦¬ë¸Œ 목ë¡ìœ¼ë¡œ ê°„ì£¼ë  ìˆ˜ 있다. +From [Wikipedia][shell-wiki]: 쉘 ì •ë ¬ì€ ë©€ë¦¬ 떨어져 있는 í•­ëª©ì˜ êµí™˜ì„ 허용하는 삽입 ì¢…ë¥˜ì˜ ì¼ë°˜í™”ì´ë‹¤. ê·¸ ì•„ì´ë””어는 모든 n번째 요소가 ì •ë ¬ëœ ëª©ë¡ì„ 제공한다는 ê²ƒì„ ê³ ë ¤í•˜ì—¬ ì–´ëŠ ê³³ì—서든지 시작하ë„ë¡ ìš”ì†Œì˜ ëª©ë¡ì„ 배열하는 것ì´ë‹¤. ì´ëŸ¬í•œ 목ë¡ì€ h-sorted로 알려져 있다. 마찬가지로, ê°ê° 개별ì ìœ¼ë¡œ ì •ë ¬ëœ h ì¸í„°ë¦¬ë¸Œ 목ë¡ìœ¼ë¡œ ê°„ì£¼ë  ìˆ˜ 있다. + +**ì†ì„±** -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(nlog2 2n) -* ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) -* Average case performance depends on gap sequence +- ìµœì•…ì˜ ì„±ëŠ¥ O(nlog2 2n) +- ìµœê³ ì˜ ì„±ëŠ¥ O(n log n) +- Average case performance depends on gap sequence ###### View the algorithm in [action][shell-toptal] @@ -91,97 +98,94 @@ __ì†ì„±__ [복잡성 그래프](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) ----------------------------------------------------------------------------------- +--- ## 검색 알고리즘 ### Linear (선형 íƒìƒ‰) + ![alt text][linear-image] From [Wikipedia][linear-wiki]: 선형 íƒìƒ‰ ë˜ëŠ” 순차 íƒìƒ‰ì€ ëª©ë¡ ë‚´ì—서 ëª©í‘œê°’ì„ ì°¾ëŠ” 방법ì´ë‹¤. ì¼ì¹˜ í•­ëª©ì´ ë°œê²¬ë˜ê±°ë‚˜ 모든 요소가 íƒìƒ‰ë  때까지 목ë¡ì˜ ê° ìš”ì†Œì— ëŒ€í•´ ëª©í‘œê°’ì„ ìˆœì°¨ì ìœ¼ë¡œ 검사한다. - 선형 ê²€ìƒ‰ì€ ìµœì•…ì˜ ì„ í˜• 시간으로 실행ë˜ë©° 최대 nê°œì˜ ë¹„êµì—서 ì´ë£¨ì–´ì§„다. 여기서 nì€ ëª©ë¡ì˜ 길ì´ë‹¤. +선형 ê²€ìƒ‰ì€ ìµœì•…ì˜ ì„ í˜• 시간으로 실행ë˜ë©° 최대 nê°œì˜ ë¹„êµì—서 ì´ë£¨ì–´ì§„다. 여기서 nì€ ëª©ë¡ì˜ 길ì´ë‹¤. + +**ì†ì„±** -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(n) -* ìµœê³ ì˜ ì„±ëŠ¥ O(1) -* í‰ê·  O(n) -* ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) iterative +- ìµœì•…ì˜ ì„±ëŠ¥ O(n) +- ìµœê³ ì˜ ì„±ëŠ¥ O(1) +- í‰ê·  O(n) +- ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) iterative ### Binary (ì´ì§„ íƒìƒ‰) + ![alt text][binary-image] From [Wikipedia][binary-wiki]: ì´ì§„ íƒìƒ‰, (also known as half-interval search or logarithmic search), ì€ ì •ë ¬ëœ ë°°ì—´ ë‚´ì—서 ëª©í‘œê°’ì˜ ìœ„ì¹˜ë¥¼ 찾는 검색 알고리즘ì´ë‹¤. ëª©í‘œê°’ì„ ë°°ì—´ì˜ ì¤‘ê°„ 요소와 비êµí•œë‹¤; 만약 ëª©í‘œê°’ì´ ë™ì¼í•˜ì§€ 않으면, ëª©í‘œë¬¼ì˜ ì ˆë°˜ì´ ì œê±°ë˜ê³  ê²€ìƒ‰ì´ ì„±ê³µí•  때까지 나머지 절반ì—서 게ì†ëœë‹¤. -__ì†ì„±__ -* ìµœì•…ì˜ ì„±ëŠ¥ O(log n) -* ìµœê³ ì˜ ì„±ëŠ¥ O(1) -* í‰ê·  O(log n) -* ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) +**ì†ì„±** +- ìµœì•…ì˜ ì„±ëŠ¥ O(log n) +- ìµœê³ ì˜ ì„±ëŠ¥ O(1) +- í‰ê·  O(log n) +- ìµœì•…ì˜ ê²½ìš° 공간 복잡성 O(1) [bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort [bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort [bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" - [insertion-toptal]: https://www.toptal.com/developers/sorting-algorithms/insertion-sort [insertion-wiki]: https://en.wikipedia.org/wiki/Insertion_sort [insertion-image]: https://upload.wikimedia.org/wikipedia/commons/7/7e/Insertionsort-edited.png "Insertion Sort" - [quick-toptal]: https://www.toptal.com/developers/sorting-algorithms/quick-sort [quick-wiki]: https://en.wikipedia.org/wiki/Quicksort [quick-image]: https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif "Quick Sort" - [merge-toptal]: https://www.toptal.com/developers/sorting-algorithms/merge-sort [merge-wiki]: https://en.wikipedia.org/wiki/Merge_sort [merge-image]: https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif "Merge Sort" - [selection-toptal]: https://www.toptal.com/developers/sorting-algorithms/selection-sort [selection-wiki]: https://en.wikipedia.org/wiki/Selection_sort [selection-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/250px-Selection_sort_animation.gif "Selection Sort Sort" - [shell-toptal]: https://www.toptal.com/developers/sorting-algorithms/shell-sort [shell-wiki]: https://en.wikipedia.org/wiki/Shellsort [shell-image]: https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif "Shell Sort" - [linear-wiki]: https://en.wikipedia.org/wiki/Linear_search [linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif - [binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm [binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png +--- --------------------------------------------------------------------- ## 나머지 ì•Œê³ ë¦¬ì¦˜ì— ëŒ€í•œ ë§í¬ -전환 | 다ì´ë‚˜ë¯¹í”„로그래ë°(DP) |암호|ê·¸ 외 것들| ------------ |----------------------------------------------------------------|-------|-------------| -[Any Base to Any Base](Conversions/AnyBaseToAnyBase.java)| [Coin Change](Dynamic%20Programming/CoinChange.java)|[Caesar](ciphers/Caesar.java)|[Heap Sort](misc/heap_sort.java)| -[Any Base to Decimal](Conversions/AnyBaseToDecimal.java)|[Egg Dropping](Dynamic%20Programming/EggDropping.java)|[Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java)|[Palindromic Prime Checker](misc/PalindromicPrime.java)| -[Binary to Decimal](Conversions/BinaryToDecimal.java)|[Fibonacci](Dynamic%20Programming/Fibonacci.java)|[RSA](ciphers/RSA.java)|More soon...| -[Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java)|[Kadane Algorithm](Dynamic%20Programming/KadaneAlgorithm.java)|more coming soon...| -[Binary to Octal](Conversions/BinaryToOctal.java)|[Knapsack](Dynamic%20Programming/Knapsack.java)| -[Decimal To Any Base](Conversions/DecimalToAnyBase.java)|[Longest Common Subsequence](Dynamic%20Programming/LongestCommonSubsequence.java)| -[Decimal To Binary](Conversions/DecimalToBinary.java)|[Longest Increasing Subsequence](Dynamic%20Programming/LongestIncreasingSubsequence.java)| -[Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java)|[Rod Cutting](Dynamic%20Programming/RodCutting.java)| -and much more...| and more...| +| 전환 | 다ì´ë‚˜ë¯¹í”„로그래ë°(DP) | 암호 | ê·¸ 외 것들 | +| --------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------- | +| [Any Base to Any Base](Conversions/AnyBaseToAnyBase.java) | [Coin Change](Dynamic%20Programming/CoinChange.java) | [Caesar](ciphers/Caesar.java) | [Heap Sort](misc/heap_sort.java) | +| [Any Base to Decimal](Conversions/AnyBaseToDecimal.java) | [Egg Dropping](Dynamic%20Programming/EggDropping.java) | [Columnar Transposition Cipher](ciphers/ColumnarTranspositionCipher.java) | [Palindromic Prime Checker](misc/PalindromicPrime.java) | +| [Binary to Decimal](Conversions/BinaryToDecimal.java) | [Fibonacci](Dynamic%20Programming/Fibonacci.java) | [RSA](ciphers/RSA.java) | More soon... | +| [Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java) | [Kadane Algorithm](Dynamic%20Programming/KadaneAlgorithm.java) | more coming soon... | +| [Binary to Octal](Conversions/BinaryToOctal.java) | [Knapsack](Dynamic%20Programming/Knapsack.java) | +| [Decimal To Any Base](Conversions/DecimalToAnyBase.java) | [Longest Common Subsequence](Dynamic%20Programming/LongestCommonSubsequence.java) | +| [Decimal To Binary](Conversions/DecimalToBinary.java) | [Longest Increasing Subsequence](Dynamic%20Programming/LongestIncreasingSubsequence.java) | +| [Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java) | [Rod Cutting](Dynamic%20Programming/RodCutting.java) | +| and much more... | and more... | ### ìžë£Œ 구조 -그래프|íž™|리스트|í| -------|-----|-----|------| -[너비우선íƒìƒ‰](DataStructures/Graphs/BFS.java)|[빈 íž™ 예외처리](DataStructures/Heaps/EmptyHeapException.java)|[ì›í˜• 연결리스트](DataStructures/Lists/CircleLinkedList.java)|[제너릭 ì–´ë ˆì´ ë¦¬ìŠ¤íŠ¸ í](DataStructures/Queues/GenericArrayListQueue.java)| -[깊ì´ìš°ì„ íƒìƒ‰](DataStructures/Graphs/DFS.java)|[íž™](DataStructures/Heaps/Heap.java)|[ì´ì¤‘ 연결리스트](DataStructures/Lists/DoublyLinkedList.java)|[í](DataStructures/Queues/Queues.java)| -[그래프](DataStructures/Graphs/Graphs.java)|[íž™ 요소](DataStructures/Heaps/HeapElement.java)|[단순 연결리스트](DataStructures/Lists/SinglyLinkedList.java)| -[í¬ë£¨ìŠ¤ì¹¼ 알고리즘](DataStructures/Graphs/KruskalsAlgorithm.java)|[최대힙](Data%Structures/Heaps/MaxHeap.java)| -[행렬 그래프](DataStructures/Graphs/MatrixGraphs.java)|[최소힙](DataStructures/Heaps/MinHeap.java)| -[프림 최소신장트리](DataStructures/Graphs/PrimMST.java)| - -스íƒ|트리| -------|-----| -[노드 스íƒ](DataStructures/Stacks/NodeStack.java)|[AVL 트리](DataStructures/Trees/AVLTree.java)| -[연결리스트 스íƒ](DataStructures/Stacks/StackOfLinkedList.java)|[ì´ì§„ 트리](DataStructures/Trees/BinaryTree.java)| -[스íƒ](DataStructures/Stacks)|And much more...| - -* [Bags](DataStructures/Bags/Bag.java) -* [Buffer](DataStructures/Buffers/CircularBuffer.java) -* [HashMap](DataStructures/HashMap/HashMap.java) -* [Matrix](DataStructures/Matrix/Matrix.java) + +| 그래프 | íž™ | 리스트 | í | +| ----------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------------------------------- | +| [너비우선íƒìƒ‰](DataStructures/Graphs/BFS.java) | [빈 íž™ 예외처리](DataStructures/Heaps/EmptyHeapException.java) | [ì›í˜• 연결리스트](DataStructures/Lists/CircleLinkedList.java) | [제너릭 ì–´ë ˆì´ ë¦¬ìŠ¤íŠ¸ í](DataStructures/Queues/GenericArrayListQueue.java) | +| [깊ì´ìš°ì„ íƒìƒ‰](DataStructures/Graphs/DFS.java) | [íž™](DataStructures/Heaps/Heap.java) | [ì´ì¤‘ 연결리스트](DataStructures/Lists/DoublyLinkedList.java) | [í](DataStructures/Queues/Queues.java) | +| [그래프](DataStructures/Graphs/Graphs.java) | [íž™ 요소](DataStructures/Heaps/HeapElement.java) | [단순 연결리스트](DataStructures/Lists/SinglyLinkedList.java) | +| [í¬ë£¨ìŠ¤ì¹¼ 알고리즘](DataStructures/Graphs/KruskalsAlgorithm.java) | [최대힙](Data%Structures/Heaps/MaxHeap.java) | +| [행렬 그래프](DataStructures/Graphs/MatrixGraphs.java) | [최소힙](DataStructures/Heaps/MinHeap.java) | +| [프림 최소신장트리](DataStructures/Graphs/PrimMST.java) | + +| ìŠ¤íƒ | 트리 | +| --------------------------------------------------------------- | ------------------------------------------------- | +| [노드 스íƒ](DataStructures/Stacks/NodeStack.java) | [AVL 트리](DataStructures/Trees/AVLTree.java) | +| [연결리스트 스íƒ](DataStructures/Stacks/StackOfLinkedList.java) | [ì´ì§„ 트리](DataStructures/Trees/BinaryTree.java) | +| [스íƒ](DataStructures/Stacks) | And much more... | + +- [Bags](DataStructures/Bags/Bag.java) +- [Buffer](DataStructures/Buffers/CircularBuffer.java) +- [HashMap](DataStructures/HashMap/HashMap.java) +- [Matrix](DataStructures/Matrix/Matrix.java) diff --git a/README.md b/README.md index c77db447f709..ba9b5237b2e1 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,26 @@ # The Algorithms - Java + [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/TheAlgorithms/100) [![Gitter chat](https://img.shields.io/badge/Chat-Gitter-ff69b4.svg?label=Chat&logo=gitter&style=flat-square)](https://gitter.im/TheAlgorithms)  - NOTE: A [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch is made for this repo where we're trying to migrate the existing project to a Java project structure. You can switch to [Development](https://github.com/TheAlgorithms/Java/tree/Development) branch for contributions. Please refer [this issue](https://github.com/TheAlgorithms/Java/issues/474) for more info. You can run and edit the algorithms or contribute to them using Gitpod.io, a free online development environment, with a single click. [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) - ### All algorithms are implemented in Java (for educational purposes) + These implementations are for learning purposes. The implementations may be less efficient than the Java standard library. ## Contribution Guidelines + Read our [Contribution Guidelines](CONTRIBUTING.md) before you contribute. ## Community Channel + We're on [Gitter](https://gitter.im/TheAlgorithms)! Please join us. ## Algorithms + See our [directory](DIRECTORY.md). From cfd0bd68d17a0b414cc5b87b3bdc4ecb21c0148f Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 16:09:37 +0800 Subject: [PATCH 464/521] remove invalid file --- ...on of array without using extra space.java | 75 ------------------- Others/{3 sum.java => ThreeSum.java} | 2 +- 2 files changed, 1 insertion(+), 76 deletions(-) delete mode 100644 Others/Rotation of array without using extra space.java rename Others/{3 sum.java => ThreeSum.java} (98%) diff --git a/Others/Rotation of array without using extra space.java b/Others/Rotation of array without using extra space.java deleted file mode 100644 index 76380be37300..000000000000 --- a/Others/Rotation of array without using extra space.java +++ /dev/null @@ -1,75 +0,0 @@ -package Others; - -import java.util.*; - -/** - * Rotation of array without using extra space - * - * - * @author Ujjawal Joshi - * @date 2020.05.18 - * - * Test Cases: - - Input: - 2 //Size of matrix - 1 2 - 3 4 - Output: - 3 1 - 4 2 - ------------------------------ - Input: - 3 //Size of matrix - 1 2 3 - 4 5 6 - 7 8 9 - Output: - 7 4 1 - 8 5 2 - 9 6 3 - * - */ - -class main{ - public static void main(String[] args) - { - Scanner sc=new Scanner(System.in); - int n=sc.nextInt(); - int a[][]=new int[n][n]; - - for(int i=0;i Date: Sat, 24 Oct 2020 16:33:40 +0800 Subject: [PATCH 465/521] fixed build error --- DataStructures/DynamicArray/DynamicArray.java | 3 + DataStructures/Graphs/GraphAlgos.java | 487 ------------------ DataStructures/Lists/ListAddnFun.java | 153 ------ .../LongestPalindromicSubsequenceTests.java | 33 -- Misc/HeapSort.java | 67 --- ciphers/Caesar.java | 4 - ciphers/RSA.java | 7 - 7 files changed, 3 insertions(+), 751 deletions(-) delete mode 100644 DataStructures/Graphs/GraphAlgos.java delete mode 100644 DataStructures/Lists/ListAddnFun.java delete mode 100644 DynamicProgramming/LongestPalindromicSubsequenceTests.java delete mode 100644 Misc/HeapSort.java diff --git a/DataStructures/DynamicArray/DynamicArray.java b/DataStructures/DynamicArray/DynamicArray.java index 1e8ce8abff09..f016448729fa 100644 --- a/DataStructures/DynamicArray/DynamicArray.java +++ b/DataStructures/DynamicArray/DynamicArray.java @@ -1,6 +1,9 @@ package DataStructures.DynamicArray; import java.util.*; +import java.util.function.Consumer; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; /** * This class implements a dynamic array diff --git a/DataStructures/Graphs/GraphAlgos.java b/DataStructures/Graphs/GraphAlgos.java deleted file mode 100644 index 19938c48f042..000000000000 --- a/DataStructures/Graphs/GraphAlgos.java +++ /dev/null @@ -1,487 +0,0 @@ -package DataStructures.Graphs; -/* -Implementation of graph by using hashmap for vertices of class which contains hashmap for vertex and then algos like prims dijktsra ,depth for search and traversal ,breadth for search and traversal ,algo for cycle present or not ,connected or not ,if not connected then connect it -Test case -Graph gp=new Graph(); - gp.addVertex("A"); - gp.addVertex("B"); - gp.addVertex("C"); - gp.addVertex("D"); - gp.addVertex("E"); - gp.addVertex("F"); - gp.addVertex("G"); - gp.addEdge("A", "B", 2); - gp.addEdge("A", "D", 10); - gp.addEdge("B", "C", 3); - gp.addEdge("C", "D", 1); - gp.addEdge("D", "E", 8); - gp.addEdge("E", "F", 5); - gp.addEdge("E", "G", 6); - gp.addEdge("F", "G", 4); - -// gp.display(); -// System.out.println(gp.numVertex()); -// System.out.println(gp.numEdge()); -// System.out.println(gp.containsEdge("A", "C")); -// -// System.out.println(gp.containsEdge("E", "F")); -// gp.removeEdge("D", "E"); -// gp.display(); -// gp.removeVertex("F"); -// gp.addVertex("F"); -// gp.display(); -// System.out.println(gp.hasPath("A", "F", new HashMap<>())); -// System.out.println(gp.dfs("A", "F")); -// gp.bft(); -// gp.dft(); -// gp.removeEdge("B","C"); -// gp.removeEdge("F","G"); -// System.out.println(gp.isConnected()); -// System.out.println(gp.isCyclic()); -// System.out.println(gp.isTree()); -// System.out.println(gp.getConnectedComp()); -// gp.prims().display(); - System.out.println(gp.Dijktsra("A")); - - - -*/ - - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import Heaps.GenericHeap; -public class Graph { - private class vertex{ - HashMap nbrs=new HashMap<>(); - } - HashMap vertcs; - public Graph(){ - vertcs=new HashMap<>(); - } - public int numVertex() { - return this.vertcs.size(); - } - public boolean containsVertex(String vname) { - return this.vertcs.containsKey(vname); - } - public void addVertex(String vname) { - - vertex vtx=new vertex(); - this.vertcs.put(vname,vtx); - } - public void removeVertex(String vname) { - vertex vtx=this.vertcs.get(vname); - ArrayList keys=new ArrayList<>(vtx.nbrs.keySet()); - for(String key:keys) { - vertex nbrvtx=this.vertcs.get(key); - nbrvtx.nbrs.remove(vname); - } - this.vertcs.remove(vname); - } - - public int numEdge() { - int count=0; - ArrayList keys=new ArrayList<>(this.vertcs.keySet()); - for(String key:keys) { - vertex vtx=this.vertcs.get(key); - count+=vtx.nbrs.size(); - } - return count/2; - } - public boolean containsEdge(String vname1,String vname2) { - vertex vtx1=this.vertcs.get(vname1); - vertex vtx2=this.vertcs.get(vname2); - if(vtx1==null||vtx2==null||!vtx1.nbrs.containsKey(vname2)) - return false; - return true; - } - public void addEdge(String vname1,String vname2,int cost) { - vertex vtx1=this.vertcs.get(vname1); - vertex vtx2=this.vertcs.get(vname2); - if(vtx1==null||vtx2==null||vtx1.nbrs.containsKey(vname2)) - return; - vtx1.nbrs.put(vname2,cost); - vtx2.nbrs.put(vname1,cost); - } - public void removeEdge(String vname1,String vname2) { - vertex vtx1=this.vertcs.get(vname1); - vertex vtx2=this.vertcs.get(vname2); - if(vtx1==null||vtx2==null||!vtx1.nbrs.containsKey(vname2)) - return; - vtx1.nbrs.remove(vname2); - vtx2.nbrs.remove(vname1); - } - - public void display() { - ArrayList keys=new ArrayList<>(this.vertcs.keySet()); - for(String key:keys) { - vertex vtx=this.vertcs.get(key); - System.out.println(key+" := "+vtx.nbrs); - } - } - - public boolean hasPath(String source ,String dest,HashMap processed) { - processed.put(source, true); - if(containsEdge(source,dest)) { - return true; - } - vertex vtx=this.vertcs.get(source); - ArrayList keys=new ArrayList<>(vtx.nbrs.keySet()); - for(String key:keys) { - if(!processed.containsKey(key) && hasPath(key,dest,processed)) - return true; - } - return false; - - } - private class pair{ - String vname; - String psf; - } - public boolean bfs(String source,String dest) { // breadth first search - HashMap processed=new HashMap<>(); - - LinkedList queue=new LinkedList<>(); - pair sp=new pair(); - sp.vname=source; - sp.psf=source; - queue.addLast(sp); - - while(!queue.isEmpty()) { - pair rp=queue.removeFirst(); - if(processed.containsKey(rp.vname)) - continue; - processed.put(rp.vname,true); - - if(containsEdge(rp.vname,dest)) { - System.out.println(rp.psf+dest); - return true; - } - vertex vtx=this.vertcs.get(rp.vname); - ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); - for(String nbr:nbrs) { - if(!processed.containsKey(nbr)) { - pair np=new pair(); - np.vname=nbr; - np.psf=rp.psf+nbr; - queue.addLast(np); - } - } - } - return false; - } - public boolean dfs(String source,String dest) { //deapth first search - LinkedList stack=new LinkedList<>(); - HashMap processed=new HashMap<>(); - pair sp=new pair(); - sp.vname=source; - sp.psf=source; - stack.addFirst(sp); - while(!stack.isEmpty()) { - pair rp=stack.removeFirst(); - if(processed.containsKey(rp.vname)) - continue; - processed.put(rp.vname,true); - if(containsEdge(rp.vname,dest)) { - System.out.println(rp.psf+dest); - return true; - } - vertex vtx=this.vertcs.get(rp.vname); - ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); - for(String nbr:nbrs) { - if(!processed.containsKey(nbr)) { - pair np=new pair(); - np.vname=nbr; - np.psf=rp.psf+nbr; - stack.addFirst(np); - } - } - - } - return false; - } - public void bft() { //breadth first traversal - HashMap processed=new HashMap<>(); - LinkedList queue=new LinkedList<>(); - ArrayList keys=new ArrayList<>(this.vertcs.keySet()); - for(String key:keys) { - if(processed.containsKey(key)) - continue; - pair sp=new pair(); - sp.vname=key; - sp.psf=key; - queue.addLast(sp); - - while(!queue.isEmpty()) { - pair rp=queue.removeFirst(); - if(processed.containsKey(rp.vname)) - continue; - processed.put(rp.vname,true); - - System.out.println(rp.vname+" via "+rp.psf); - - vertex vtx=this.vertcs.get(rp.vname); - ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); - for(String nbr:nbrs) { - if(!processed.containsKey(nbr)) { - pair np=new pair(); - np.vname=nbr; - np.psf=rp.psf+nbr; - queue.addLast(np); - } - } - } - } - } - public void dft() { //deapt first traversal - HashMap processed=new HashMap<>(); - LinkedList stack=new LinkedList<>(); - ArrayList keys=new ArrayList<>(this.vertcs.keySet()); - for(String key:keys) { - pair sp=new pair(); - sp.vname=key; - sp.psf=key; - stack.addFirst(sp); - - while(!stack.isEmpty()) { - pair rp=stack.removeFirst(); - if(processed.containsKey(rp.vname)) - continue; - processed.put(rp.vname,true); - - System.out.println(rp.vname+" via "+rp.psf); - - vertex vtx=this.vertcs.get(rp.vname); - ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); - for(String nbr:nbrs) { - if(!processed.containsKey(nbr)) { - pair np=new pair(); - np.vname=nbr; - np.psf=rp.psf+nbr; - stack.addFirst(np); - } - } - } - } - } - - - public boolean isCyclic() { - HashMap processed=new HashMap<>(); - LinkedList queue=new LinkedList<>(); - ArrayList keys=new ArrayList<>(this.vertcs.keySet()); - for(String key:keys) { - if(processed.containsKey(key)) - continue; - pair sp=new pair(); - sp.vname=key; - sp.psf=key; - queue.addLast(sp); - - while(!queue.isEmpty()) { - pair rp=queue.removeFirst(); - if(processed.containsKey(rp.vname)) - return true; - processed.put(rp.vname,true); - - vertex vtx=this.vertcs.get(rp.vname); - ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); - for(String nbr:nbrs) { - if(!processed.containsKey(nbr)) { - pair np=new pair(); - np.vname=nbr; - np.psf=rp.psf+nbr; - queue.addLast(np); - } - } - } - } - return false; - } - public boolean isConnected() { - int flag=0; - HashMap processed=new HashMap<>(); - LinkedList queue=new LinkedList<>(); - ArrayList keys=new ArrayList<>(this.vertcs.keySet()); - for(String key:keys) { - if(processed.containsKey(key)) - continue; - flag++; - pair sp=new pair(); - sp.vname=key; - sp.psf=key; - queue.addLast(sp); - - while(!queue.isEmpty()) { - pair rp=queue.removeFirst(); - if(processed.containsKey(rp.vname)) - continue; - processed.put(rp.vname,true); - - vertex vtx=this.vertcs.get(rp.vname); - ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); - for(String nbr:nbrs) { - if(!processed.containsKey(nbr)) { - pair np=new pair(); - np.vname=nbr; - np.psf=rp.psf+nbr; - queue.addLast(np); - } - } - } - } - if(flag>=2) - return false; - else - return true; - } - public boolean isTree() { - return !isCyclic()&&isConnected(); - } - public ArrayList> getConnectedComp() { - ArrayList> ans=new ArrayList<>(); - HashMap processed=new HashMap<>(); - LinkedList queue=new LinkedList<>(); - ArrayList keys=new ArrayList<>(this.vertcs.keySet()); - for(String key:keys) { - if(processed.containsKey(key)) - continue; - ArrayList subans=new ArrayList<>(); - pair sp=new pair(); - sp.vname=key; - sp.psf=key; - queue.addLast(sp); - - while(!queue.isEmpty()) { - pair rp=queue.removeFirst(); - if(processed.containsKey(rp.vname)) - continue; - processed.put(rp.vname,true); - - subans.add(rp.vname); - - vertex vtx=this.vertcs.get(rp.vname); - ArrayList nbrs=new ArrayList<>(vtx.nbrs.keySet()); - for(String nbr:nbrs) { - if(!processed.containsKey(nbr)) { - pair np=new pair(); - np.vname=nbr; - np.psf=rp.psf+nbr; - queue.addLast(np); - } - } - } - ans.add(subans); - } - return ans; - } - private class PrimsPair implements Comparable{ - String vname; - String acqvname; - int cost; - public int compareTo(PrimsPair o) { - return o.cost-this.cost; - } - - } - public Graph prims() { - HashMap map=new HashMap<>(); - GenericHeap heap=new GenericHeap<>(); - Graph mst=new Graph(); - for(String vrtx:this.vertcs.keySet()) { - PrimsPair np=new PrimsPair(); - np.acqvname=null; - np.vname=vrtx; - np.cost=Integer.MAX_VALUE; - heap.add(np); - map.put(vrtx, np); - } - while(!heap.isEmpty()) { - PrimsPair rp=heap.remove(); - map.remove(rp.vname); - - if(rp.acqvname==null) { - mst.addVertex(rp.vname); - }else { - mst.addVertex(rp.vname); - mst.addEdge(rp.vname, rp.acqvname, rp.cost); - } - - for(String nbr:this.vertcs.get(rp.vname).nbrs.keySet()) { - if(map.containsKey(nbr)) { - //old cost that is from diff path stored in map - int oc=map.get(nbr).cost; - // cost that present vname need cost to go to nbr - int nc=this.vertcs.get(rp.vname).nbrs.get(nbr); - if(nc{ - String vname; - String psf; - int cost; - public int compareTo(DijktsraPair o) { - return o.cost-this.cost; - } - - } - public HashMap Dijktsra(String source) { - HashMap map=new HashMap<>(); - GenericHeap heap=new GenericHeap<>(); - HashMap ans =new HashMap<>(); - for(String vrtx:this.vertcs.keySet()) { - DijktsraPair np=new DijktsraPair(); - np.psf=""; - np.vname=vrtx; - np.cost=Integer.MAX_VALUE; - if(vrtx==source) { - np.cost=0; - np.psf=source; - } - heap.add(np); - map.put(vrtx, np); - } - while(!heap.isEmpty()) { - DijktsraPair rp=heap.remove(); - map.remove(rp.vname); - - ans.put(rp.vname,rp.cost); - - for(String nbr:this.vertcs.get(rp.vname).nbrs.keySet()) { - if(map.containsKey(nbr)) { - //old cost that is from diff path stored in map - int oc=map.get(nbr).cost; - // cost that present vname need cost to go to nbr - int nc=rp.cost+this.vertcs.get(rp.vname).nbrs.get(nbr); - if(nc= 0; i--) - heapify(arr, n, i); - - // One by one extract an element from heap - for (int i = n - 1; i >= 0; i--) { - // Move current root to end - int temp = arr[0]; - arr[0] = arr[i]; - arr[i] = temp; - - // call max heapify on the reduced heap - heapify(arr, i, 0); - } - } - - // To heapify a subtree rooted with node i which is - // an index in arr[]. n is size of heap - void heapify(int[] arr, int n, int i) { - int largest = i; // Initialize largest as root - int l = 2 * i + 1; // left = 2*i + 1 - int r = 2 * i + 2; // right = 2*i + 2 - - // If left child is larger than root - if (l < n && arr[l] > arr[largest]) - largest = l; - - // If right child is larger than largest so far - if (r < n && arr[r] > arr[largest]) - largest = r; - - // If largest is not root - if (largest != i) { - int swap = arr[i]; - arr[i] = arr[largest]; - arr[largest] = swap; - - // Recursively heapify the affected sub-tree - heapify(arr, n, largest); - } - } - - /* A utility function to print array of size n */ - static void printArray(int[] arr) { - int n = arr.length; - for (int i = 0; i < n; ++i) - System.out.print(arr[i] + " "); - System.out.println(); - } - - // Driver program - public static void main(String args[]) { - int arr[] = {12, 11, 13, 5, 6, 7}; - - heap_sort ob = new heap_sort(); - ob.sort(arr); - - System.out.println("Sorted array is"); - printArray(arr); - } -} diff --git a/ciphers/Caesar.java b/ciphers/Caesar.java index 76893f45327e..d9028613bce8 100644 --- a/ciphers/Caesar.java +++ b/ciphers/Caesar.java @@ -104,10 +104,6 @@ private static boolean IsSmallLatinLetter(char c) { return c >= 'a' && c <= 'z'; } - /** - * - * @deprecated TODO remove main and make JUnit Testing - */ public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Please enter the message (Latin Alphabet)"); diff --git a/ciphers/RSA.java b/ciphers/RSA.java index acb99f0f664a..751475168a4f 100644 --- a/ciphers/RSA.java +++ b/ciphers/RSA.java @@ -9,13 +9,6 @@ */ public final class RSA { - /** - * Trivial test program. - * - * @param args - * @deprecated TODO remove main and make JUnit Testing or any other - * methodology - */ public static void main(String[] args) { RSA rsa = new RSA(1024); From ddff7efcbd393a1d3b51b8a8b2b50e451c1381b3 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 16:48:33 +0800 Subject: [PATCH 466/521] add build action --- .github/workflows/build.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000000..87cf28668a45 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,16 @@ +name: Build + +on: [push] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - name: Set up JDK 12 + uses: actions/setup-java@v1 + with: + java-version: 12 + - run: find . -type f -name "*.java" > sources.txt + - run: javac @sources.txt \ No newline at end of file From 6aa373e292cb882191e40ed6efbecb6c3dffd9cf Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 16:52:16 +0800 Subject: [PATCH 467/521] fixed action --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 87cf28668a45..92ee5cde4359 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,6 @@ name: Build -on: [push] +on: [push, pull_request] jobs: lint: From 14ebae6ba33a8768e3a48ae74854388c39a17474 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 16:57:49 +0800 Subject: [PATCH 468/521] test build error --- Misc/MedianOfRunningArray.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/MedianOfRunningArray.java b/Misc/MedianOfRunningArray.java index 32bbf51947a1..a46788a5b967 100644 --- a/Misc/MedianOfRunningArray.java +++ b/Misc/MedianOfRunningArray.java @@ -9,7 +9,7 @@ */ public class MedianOfRunningArray { private PriorityQueue p1; - private PriorityQueue p2; + private PriorityQueue p2 //Constructor public MedianOfRunningArray() { From c4f5729e9eb15915e8e2398e0a616b4fed9654f8 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 17:05:58 +0800 Subject: [PATCH 469/521] complete build action --- Misc/MedianOfRunningArray.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/MedianOfRunningArray.java b/Misc/MedianOfRunningArray.java index a46788a5b967..32bbf51947a1 100644 --- a/Misc/MedianOfRunningArray.java +++ b/Misc/MedianOfRunningArray.java @@ -9,7 +9,7 @@ */ public class MedianOfRunningArray { private PriorityQueue p1; - private PriorityQueue p2 + private PriorityQueue p2; //Constructor public MedianOfRunningArray() { From 409d1b6b732df6f4894286f10e70ea029e60c024 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 17:16:41 +0800 Subject: [PATCH 470/521] remove prettier --- .github/workflows/prettier.yml | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 .github/workflows/prettier.yml diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml deleted file mode 100644 index ea532013349d..000000000000 --- a/.github/workflows/prettier.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Prettier - -on: - pull_request: - push: - branches: - - master - - Development - -jobs: - prettier: - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - ref: ${{ github.head_ref }} - - - name: Prettify code - uses: creyD/prettier_action@v3.0 - with: - prettier_options: --write **/*.{java,md} - commit_message: 'feat: prettify code' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From e3e3f8f2981f5202bf7d82bddaa293485bd57df5 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sat, 24 Oct 2020 09:17:43 +0000 Subject: [PATCH 471/521] updating DIRECTORY.md --- DIRECTORY.md | 483 +++++++++++++++++++++++++-------------------------- 1 file changed, 233 insertions(+), 250 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index d58405a8a9d8..2ac0c93b082f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -1,275 +1,258 @@ -## ciphers -- [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) -- [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) -- [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) -- [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) -- [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) -- [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) -- [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) +## ciphers + * [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) + * [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) + * [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) + * [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) + * [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) + * [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) + * [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) ## Conversions - -- [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) -- [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) -- [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) -- [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) -- [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) -- [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) -- [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) -- [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) -- [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) -- [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) -- [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) -- [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) -- [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) -- [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) -- [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) -- [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) -- [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) + * [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) + * [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) + * [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) + * [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) + * [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) + * [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) + * [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) + * [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) + * [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) + * [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) + * [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) + * [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) + * [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) + * [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) + * [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) + * [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) + * [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) ## DataStructures - -- Bags - - [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) -- Buffers - - [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) -- DynamicArray - - [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) -- Graphs - - [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) - - [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) - - [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) - - [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) - - [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) - - [GraphAlgos](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/GraphAlgos.java) - - [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) - - [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) - - [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) - - [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) -- HashMap - - Hashing - - [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) - - [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) - - [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) - - [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) -- Heaps - - [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) - - [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) - - [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) - - [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) - - [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) - - [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) -- Lists - - [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) - - [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) - - [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) - - [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) - - [ListAddnFun](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/ListAddnFun.java) - - [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) - - [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) - - [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) - - [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) - - [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) -- Queues - - [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) - - [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) - - [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) - - [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) -- Stacks - - [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) - - [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) - - [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) - - [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) - - [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) - - [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) -- Trees - - [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) - - [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) - - [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) - - [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) - - [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) - - [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) - - [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) - - [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) - - [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) - - [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) - - [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) - - [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) + * Bags + * [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) + * Buffers + * [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) + * DynamicArray + * [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) + * Graphs + * [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) + * [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) + * [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) + * [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) + * [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) + * [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) + * [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) + * [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) + * [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) + * HashMap + * Hashing + * [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) + * [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) + * [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) + * [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) + * Heaps + * [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) + * [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) + * [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) + * [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) + * [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) + * [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) + * Lists + * [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) + * [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) + * [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) + * [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) + * [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) + * [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) + * [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) + * [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) + * [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) + * Queues + * [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) + * [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) + * [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) + * [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) + * Stacks + * [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) + * [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) + * [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) + * [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) + * [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) + * [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) + * Trees + * [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) + * [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) + * [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) + * [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) + * [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) + * [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) + * [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) + * [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) + * [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) + * [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) + * [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) + * [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) ## divideconquer - -- [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) -- [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) + * [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) + * [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) ## DynamicProgramming - -- [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) -- [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) -- [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) -- [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) -- [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) -- [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) -- [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) -- [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) -- [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) -- [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) -- [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) -- [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) -- [LongestPalindromicSubsequenceTests](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequenceTests.java) -- [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) -- [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) -- [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) -- [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) -- [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) + * [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) + * [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) + * [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) + * [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) + * [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) + * [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) + * [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) + * [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) + * [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) + * [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) + * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) + * [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) + * [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) + * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) + * [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) + * [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) + * [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) ## Maths - -- [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) -- [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) -- [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) -- [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) -- [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) -- [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) -- [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) -- [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) -- [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) -- [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) -- [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) -- [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) -- [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) -- [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) -- [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) -- [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) -- [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) -- [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) -- [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) -- [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) -- [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) -- [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) -- [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) -- [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) -- [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) -- [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) -- [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) -- [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) -- [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) -- [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) -- [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) -- [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) -- [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) -- [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) -- [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) -- [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) -- [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) -- [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) -- [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) -- [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) + * [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) + * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) + * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) + * [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) + * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) + * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) + * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) + * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) + * [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) + * [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) + * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) + * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) + * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) + * [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) + * [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) + * [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) + * [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) + * [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) + * [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) + * [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) + * [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) + * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) + * [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) + * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) + * [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) + * [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) + * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) + * [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) + * [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) + * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) + * [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) + * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) + * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) + * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) + * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) + * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) + * [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) + * [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) + * [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) + * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) ## MinimizingLateness - -- [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) + * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) ## Misc - -- [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Misc/HeapSort.java) -- [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) -- [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) + * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) + * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) ## Others - -- [3 sum](https://github.com/TheAlgorithms/Java/blob/master/Others/3%20sum.java) -- [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) -- [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) -- [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) -- [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) -- [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) -- [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) -- [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) -- [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) -- [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) -- [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) -- [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) -- [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) -- [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) -- [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) -- [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) -- [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) -- [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) -- [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) -- [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) -- [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) -- [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) -- [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) -- [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) -- [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) -- [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) -- [Rotation of array without using extra space](https://github.com/TheAlgorithms/Java/blob/master/Others/Rotation%20of%20array%20without%20using%20extra%20space.java) -- [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) -- [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) -- [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) -- [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) -- [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) -- [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) -- [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) -- [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) -- [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) + * [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) + * [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) + * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) + * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) + * [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) + * [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) + * [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) + * [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) + * [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) + * [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) + * [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) + * [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) + * [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) + * [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) + * [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) + * [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) + * [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) + * [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) + * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) + * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) + * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) + * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) + * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) + * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) + * [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) + * [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) + * [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) + * [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) + * [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) + * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) + * [ThreeSum](https://github.com/TheAlgorithms/Java/blob/master/Others/ThreeSum.java) + * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) + * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) + * [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) + * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) ## ProjectEuler - -- [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) -- [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) -- [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) -- [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) -- [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) -- [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) -- [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) -- [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) + * [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) + * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) + * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) + * [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) + * [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) + * [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) + * [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) + * [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) ## Searches - -- [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) -- [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) -- [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) -- [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) -- [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) -- [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) -- [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) -- [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) -- [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) -- [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) + * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) + * [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) + * [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) + * [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) + * [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) + * [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) + * [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) + * [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) + * [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) + * [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) ## Sorts - -- [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) -- [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) -- [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) -- [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) -- [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) -- [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) -- [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) -- [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) -- [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) -- [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) -- [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) -- [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) -- [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) -- [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) -- [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) -- [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) -- [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) -- [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) -- [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) -- [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) + * [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) + * [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) + * [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) + * [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) + * [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) + * [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) + * [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) + * [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) + * [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) + * [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) + * [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) + * [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) + * [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) + * [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) + * [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) + * [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) + * [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) + * [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) + * [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) + * [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) ## strings - -- [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) -- [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) -- [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) -- [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) -- [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) -- [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) -- [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) -- [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) -- [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) + * [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) + * [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) + * [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) + * [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) + * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) + * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) + * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) + * [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) + * [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) From 1c5b1d0bf11df69b2438ea27c16f4459bb6a827e Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 17:23:09 +0800 Subject: [PATCH 472/521] rename jobs --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 92ee5cde4359..cbfc697f3a65 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,9 +1,9 @@ -name: Build +name: Build Project on: [push, pull_request] jobs: - lint: + build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 From c7a931c107bdc4210681156adc4d7dc86b8267a4 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 17:27:29 +0800 Subject: [PATCH 473/521] add prettier.xml --- .github/workflows/prettier.xml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/prettier.xml diff --git a/.github/workflows/prettier.xml b/.github/workflows/prettier.xml new file mode 100644 index 000000000000..ea532013349d --- /dev/null +++ b/.github/workflows/prettier.xml @@ -0,0 +1,26 @@ +name: Prettier + +on: + pull_request: + push: + branches: + - master + - Development + +jobs: + prettier: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.head_ref }} + + - name: Prettify code + uses: creyD/prettier_action@v3.0 + with: + prettier_options: --write **/*.{java,md} + commit_message: 'feat: prettify code' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 6e0e31655bc1b0e857a7286c43fc000a3f504abf Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Sat, 24 Oct 2020 17:46:42 +0800 Subject: [PATCH 474/521] Rename prettier.xml to prettier.yml --- .github/workflows/{prettier.xml => prettier.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{prettier.xml => prettier.yml} (100%) diff --git a/.github/workflows/prettier.xml b/.github/workflows/prettier.yml similarity index 100% rename from .github/workflows/prettier.xml rename to .github/workflows/prettier.yml From 58f462b6299c7da4117e6af9f898e1a9f97d2967 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 09:47:09 +0000 Subject: [PATCH 475/521] feat: prettify code --- DIRECTORY.md | 478 ++++++++++++++++++++++++++------------------------- 1 file changed, 245 insertions(+), 233 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 2ac0c93b082f..45d8182cd6da 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -1,258 +1,270 @@ - ## ciphers - * [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) - * [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) - * [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) - * [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) - * [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) - * [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) - * [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) + +- [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) +- [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) +- [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) +- [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) +- [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) +- [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) +- [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) ## Conversions - * [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) - * [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) - * [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) - * [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) - * [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) - * [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) - * [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) - * [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) - * [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) - * [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) - * [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) - * [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) - * [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) - * [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) - * [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) - * [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) - * [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) + +- [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) +- [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) +- [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) +- [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) +- [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) +- [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) +- [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) +- [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) +- [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) +- [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) +- [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) +- [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) +- [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) +- [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) +- [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) +- [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) +- [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) ## DataStructures - * Bags - * [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) - * Buffers - * [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) - * DynamicArray - * [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) - * Graphs - * [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) - * [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) - * [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) - * [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) - * [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) - * [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) - * [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) - * [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) - * [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) - * HashMap - * Hashing - * [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) - * [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) - * [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) - * [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) - * Heaps - * [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) - * [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) - * [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) - * [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) - * [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) - * [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) - * Lists - * [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) - * [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) - * [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) - * [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) - * [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) - * [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) - * [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) - * [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) - * [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) - * Queues - * [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) - * [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) - * [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) - * [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) - * Stacks - * [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) - * [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) - * [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) - * [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) - * [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) - * [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) - * Trees - * [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) - * [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) - * [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) - * [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) - * [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) - * [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) - * [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) - * [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) - * [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) - * [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) - * [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) - * [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) + +- Bags + - [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) +- Buffers + - [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) +- DynamicArray + - [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) +- Graphs + - [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) + - [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) + - [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) + - [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) + - [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) + - [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) + - [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) + - [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) + - [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) +- HashMap + - Hashing + - [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) + - [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) + - [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) + - [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) +- Heaps + - [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) + - [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) + - [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) + - [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) + - [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) + - [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) +- Lists + - [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) + - [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) + - [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) + - [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) + - [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) + - [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) + - [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) + - [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) + - [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) +- Queues + - [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) + - [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) + - [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) + - [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) +- Stacks + - [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) + - [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) + - [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) + - [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) + - [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) + - [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) +- Trees + - [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) + - [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) + - [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) + - [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) + - [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) + - [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) + - [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) + - [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) + - [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) + - [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) + - [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) + - [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) ## divideconquer - * [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) - * [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) + +- [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) +- [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) ## DynamicProgramming - * [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) - * [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) - * [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) - * [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) - * [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) - * [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) - * [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) - * [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) - * [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) - * [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) - * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) - * [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) - * [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) - * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) - * [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) - * [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) - * [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) + +- [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) +- [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) +- [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) +- [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) +- [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) +- [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) +- [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) +- [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) +- [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) +- [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) +- [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) +- [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) +- [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) +- [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) +- [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) +- [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) +- [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) ## Maths - * [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) - * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) - * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) - * [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) - * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) - * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) - * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) - * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) - * [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) - * [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) - * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) - * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) - * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) - * [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) - * [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) - * [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) - * [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) - * [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) - * [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) - * [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) - * [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) - * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) - * [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) - * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) - * [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) - * [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) - * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) - * [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) - * [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) - * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) - * [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) - * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) - * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) - * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) - * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) - * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) - * [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) - * [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) - * [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) - * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) + +- [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) +- [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) +- [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) +- [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) +- [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) +- [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) +- [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) +- [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) +- [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) +- [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) +- [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) +- [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) +- [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) +- [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) +- [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) +- [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) +- [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) +- [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) +- [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) +- [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) +- [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) +- [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) +- [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) +- [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) +- [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) +- [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) +- [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) +- [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) +- [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) +- [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) +- [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) +- [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) +- [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) +- [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) +- [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) +- [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) +- [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) +- [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) +- [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) +- [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) ## MinimizingLateness - * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) + +- [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) ## Misc - * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) - * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) + +- [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) +- [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) ## Others - * [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) - * [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) - * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) - * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) - * [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) - * [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) - * [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) - * [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) - * [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) - * [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) - * [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) - * [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) - * [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) - * [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) - * [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) - * [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) - * [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) - * [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) - * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) - * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) - * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) - * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) - * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) - * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) - * [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) - * [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) - * [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) - * [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) - * [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) - * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) - * [ThreeSum](https://github.com/TheAlgorithms/Java/blob/master/Others/ThreeSum.java) - * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) - * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) - * [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) - * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) + +- [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) +- [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) +- [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) +- [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) +- [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) +- [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) +- [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) +- [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) +- [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) +- [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) +- [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) +- [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) +- [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) +- [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) +- [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) +- [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) +- [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) +- [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) +- [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) +- [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) +- [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) +- [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) +- [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) +- [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) +- [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) +- [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) +- [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) +- [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) +- [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) +- [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) +- [ThreeSum](https://github.com/TheAlgorithms/Java/blob/master/Others/ThreeSum.java) +- [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) +- [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) +- [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) +- [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) ## ProjectEuler - * [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) - * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) - * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) - * [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) - * [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) - * [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) - * [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) - * [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) + +- [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) +- [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) +- [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) +- [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) +- [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) +- [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) +- [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) +- [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) ## Searches - * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) - * [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) - * [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) - * [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) - * [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) - * [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) - * [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) - * [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) - * [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) - * [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) + +- [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) +- [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) +- [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) +- [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) +- [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) +- [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) +- [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) +- [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) +- [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) +- [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) ## Sorts - * [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) - * [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) - * [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) - * [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) - * [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) - * [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) - * [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) - * [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) - * [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) - * [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) - * [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) - * [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) - * [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) - * [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) - * [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) - * [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) - * [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) - * [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) - * [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) - * [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) + +- [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) +- [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) +- [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) +- [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) +- [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) +- [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) +- [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) +- [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) +- [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) +- [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) +- [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) +- [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) +- [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) +- [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) +- [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) +- [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) +- [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) +- [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) +- [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) +- [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) ## strings - * [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) - * [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) - * [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) - * [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) - * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) - * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) - * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) - * [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) - * [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) + +- [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) +- [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) +- [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) +- [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) +- [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) +- [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) +- [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) +- [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) +- [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) From c05dd46f5eff6bb0cd5a94779132e27fc8ccc429 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 17:56:57 +0800 Subject: [PATCH 476/521] add travis --- .travis.yml | 9 +++++++++ README.md | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000000..d493a510925d --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: java +script: + - find . -type f -name "*.java" > sources.txt + - javac @sources.txt + +notifications: + webhooks: https://www.travisbuddy.com/ + on_success: never + on_failure: always \ No newline at end of file diff --git a/README.md b/README.md index ba9b5237b2e1..4f6d64541114 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # The Algorithms - Java - +[![Build Status](https://img.shields.io/travis/TheAlgorithms/Java.svg?label=Travis%20CI&logo=travis&style=flat-square)](https://travis-ci.com/TheAlgorithms/Java)  [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/TheAlgorithms/100) [![Gitter chat](https://img.shields.io/badge/Chat-Gitter-ff69b4.svg?label=Chat&logo=gitter&style=flat-square)](https://gitter.im/TheAlgorithms)  From a463a5c3f963d677ee9009a7de8793498b63b3ea Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 18:06:42 +0800 Subject: [PATCH 477/521] fixed prettier error --- .github/workflows/prettier.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index ea532013349d..f1ee3157b4ab 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -20,7 +20,7 @@ jobs: - name: Prettify code uses: creyD/prettier_action@v3.0 with: - prettier_options: --write **/*.{java,md} + prettier_options: --write **/*.{java} commit_message: 'feat: prettify code' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From a6181b372307b03523a267e52150018b7fbadd51 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sat, 24 Oct 2020 10:07:14 +0000 Subject: [PATCH 478/521] updating DIRECTORY.md --- DIRECTORY.md | 478 +++++++++++++++++++++++++-------------------------- 1 file changed, 233 insertions(+), 245 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 45d8182cd6da..2ac0c93b082f 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -1,270 +1,258 @@ -## ciphers -- [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) -- [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) -- [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) -- [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) -- [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) -- [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) -- [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) +## ciphers + * [AES](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AES.java) + * [AESEncryption](https://github.com/TheAlgorithms/Java/blob/master/ciphers/AESEncryption.java) + * [Caesar](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Caesar.java) + * [ColumnarTranspositionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/ColumnarTranspositionCipher.java) + * [RSA](https://github.com/TheAlgorithms/Java/blob/master/ciphers/RSA.java) + * [SimpleSubstitutionCipher](https://github.com/TheAlgorithms/Java/blob/master/ciphers/SimpleSubstitutionCipher.java) + * [Vigenere](https://github.com/TheAlgorithms/Java/blob/master/ciphers/Vigenere.java) ## Conversions - -- [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) -- [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) -- [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) -- [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) -- [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) -- [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) -- [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) -- [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) -- [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) -- [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) -- [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) -- [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) -- [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) -- [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) -- [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) -- [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) -- [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) + * [AnyBaseToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToAnyBase.java) + * [AnyBaseToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnyBaseToDecimal.java) + * [AnytoAny](https://github.com/TheAlgorithms/Java/blob/master/Conversions/AnytoAny.java) + * [BinaryToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToDecimal.java) + * [BinaryToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToHexadecimal.java) + * [BinaryToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/BinaryToOctal.java) + * [DecimalToAnyBase](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToAnyBase.java) + * [DecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToBinary.java) + * [DecimalToHexaDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToHexaDecimal.java) + * [DecimalToOctal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/DecimalToOctal.java) + * [HexaDecimalToBinary](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToBinary.java) + * [HexaDecimalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexaDecimalToDecimal.java) + * [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/Conversions/HexToOct.java) + * [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/Conversions/IntegerToRoman.java) + * [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToDecimal.java) + * [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/Conversions/OctalToHexadecimal.java) + * [RomanToInteger](https://github.com/TheAlgorithms/Java/blob/master/Conversions/RomanToInteger.java) ## DataStructures - -- Bags - - [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) -- Buffers - - [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) -- DynamicArray - - [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) -- Graphs - - [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) - - [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) - - [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) - - [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) - - [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) - - [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) - - [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) - - [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) - - [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) -- HashMap - - Hashing - - [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) - - [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) - - [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) - - [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) -- Heaps - - [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) - - [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) - - [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) - - [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) - - [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) - - [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) -- Lists - - [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) - - [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) - - [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) - - [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) - - [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) - - [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) - - [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) - - [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) - - [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) -- Queues - - [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) - - [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) - - [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) - - [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) -- Stacks - - [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) - - [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) - - [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) - - [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) - - [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) - - [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) -- Trees - - [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) - - [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) - - [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) - - [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) - - [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) - - [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) - - [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) - - [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) - - [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) - - [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) - - [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) - - [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) + * Bags + * [Bag](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Bags/Bag.java) + * Buffers + * [CircularBuffer](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Buffers/CircularBuffer.java) + * DynamicArray + * [DynamicArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/DynamicArray/DynamicArray.java) + * Graphs + * [A Star](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/A_Star.java) + * [BellmanFord](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/BellmanFord.java) + * [ConnectedComponent](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/ConnectedComponent.java) + * [Cycles](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Cycles.java) + * [FloydWarshall](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/FloydWarshall.java) + * [Graphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Graphs.java) + * [Kruskal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/Kruskal.java) + * [MatrixGraphs](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/MatrixGraphs.java) + * [PrimMST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Graphs/PrimMST.java) + * HashMap + * Hashing + * [HashMap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMap.java) + * [HashMapLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/HashMapLinearProbing.java) + * [Main](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/Main.java) + * [MainLinearProbing](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/HashMap/Hashing/MainLinearProbing.java) + * Heaps + * [EmptyHeapException](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/EmptyHeapException.java) + * [Heap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/Heap.java) + * [HeapElement](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/HeapElement.java) + * [MaxHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MaxHeap.java) + * [MinHeap](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinHeap.java) + * [MinPriorityQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Heaps/MinPriorityQueue.java) + * Lists + * [CircleLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CircleLinkedList.java) + * [CountSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CountSinglyLinkedListRecursion.java) + * [CursorLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/CursorLinkedList.java) + * [DoublyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/DoublyLinkedList.java) + * [Merge K SortedLinkedlist](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/Merge_K_SortedLinkedlist.java) + * [MergeSortedArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedArrayList.java) + * [MergeSortedSinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/MergeSortedSinglyLinkedList.java) + * [SearchSinglyLinkedListRecursion](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SearchSinglyLinkedListRecursion.java) + * [SinglyLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Lists/SinglyLinkedList.java) + * Queues + * [GenericArrayListQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/GenericArrayListQueue.java) + * [LinkedQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/LinkedQueue.java) + * [PriorityQueues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/PriorityQueues.java) + * [Queues](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Queues/Queues.java) + * Stacks + * [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) + * [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) + * [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) + * [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) + * [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) + * [StackOfLinkedList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackOfLinkedList.java) + * Trees + * [AVLTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/AVLTree.java) + * [BinaryTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BinaryTree.java) + * [BSTIterative](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTIterative.java) + * [BSTRecursive](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/BSTRecursive.java) + * [GenericTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/GenericTree.java) + * [LevelOrderTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversal.java) + * [LevelOrderTraversalQueue](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/LevelOrderTraversalQueue.java) + * [PrintTopViewofTree](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/PrintTopViewofTree.java) + * [RedBlackBST](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/RedBlackBST.java) + * [TreeTraversal](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TreeTraversal.java) + * [TrieImp](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/TrieImp.java) + * [ValidBSTOrNot](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Trees/ValidBSTOrNot.java) ## divideconquer - -- [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) -- [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) + * [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/ClosestPair.java) + * [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/divideconquer/SkylineAlgorithm.java) ## DynamicProgramming - -- [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) -- [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) -- [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) -- [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) -- [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) -- [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) -- [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) -- [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) -- [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) -- [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) -- [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) -- [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) -- [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) -- [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) -- [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) -- [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) -- [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) + * [BoardPath](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/BoardPath.java) + * [CoinChange](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/CoinChange.java) + * [EditDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EditDistance.java) + * [EggDropping](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/EggDropping.java) + * [Fibonacci](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Fibonacci.java) + * [FordFulkerson](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/FordFulkerson.java) + * [KadaneAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/KadaneAlgorithm.java) + * [Knapsack](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/Knapsack.java) + * [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LevenshteinDistance.java) + * [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestCommonSubsequence.java) + * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestIncreasingSubsequence.java) + * [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) + * [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) + * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) + * [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) + * [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) + * [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) ## Maths - -- [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) -- [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) -- [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) -- [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) -- [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) -- [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) -- [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) -- [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) -- [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) -- [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) -- [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) -- [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) -- [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) -- [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) -- [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) -- [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) -- [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) -- [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) -- [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) -- [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) -- [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) -- [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) -- [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) -- [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) -- [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) -- [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) -- [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) -- [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) -- [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) -- [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) -- [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) -- [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) -- [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) -- [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) -- [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) -- [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) -- [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) -- [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) -- [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) -- [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) + * [AbsoluteMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMax.java) + * [AbsoluteMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteMin.java) + * [AbsoluteValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/AbsoluteValue.java) + * [AliquotSum](https://github.com/TheAlgorithms/Java/blob/master/Maths/AliquotSum.java) + * [AmicableNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/AmicableNumber.java) + * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) + * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) + * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) + * [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) + * [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) + * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) + * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) + * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) + * [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) + * [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) + * [FindMin](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMin.java) + * [FindMinRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMinRecursion.java) + * [Floor](https://github.com/TheAlgorithms/Java/blob/master/Maths/Floor.java) + * [GCD](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCD.java) + * [GCDRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/GCDRecursion.java) + * [LucasSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/LucasSeries.java) + * [MaxValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MaxValue.java) + * [Median](https://github.com/TheAlgorithms/Java/blob/master/Maths/Median.java) + * [MinValue](https://github.com/TheAlgorithms/Java/blob/master/Maths/MinValue.java) + * [Mode](https://github.com/TheAlgorithms/Java/blob/master/Maths/Mode.java) + * [NumberOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/NumberOfDigits.java) + * [PalindromeNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PalindromeNumber.java) + * [ParseInteger](https://github.com/TheAlgorithms/Java/blob/master/Maths/ParseInteger.java) + * [PerfectCube](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectCube.java) + * [PerfectNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectNumber.java) + * [PerfectSquare](https://github.com/TheAlgorithms/Java/blob/master/Maths/PerfectSquare.java) + * [Pow](https://github.com/TheAlgorithms/Java/blob/master/Maths/Pow.java) + * [PowerOfTwoOrNot](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowerOfTwoOrNot.java) + * [PowRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/PowRecursion.java) + * [PrimeCheck](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeCheck.java) + * [PrimeFactorization](https://github.com/TheAlgorithms/Java/blob/master/Maths/PrimeFactorization.java) + * [PythagoreanTriple](https://github.com/TheAlgorithms/Java/blob/master/Maths/PythagoreanTriple.java) + * [SumOfArithmeticSeries](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfArithmeticSeries.java) + * [SumOfDigits](https://github.com/TheAlgorithms/Java/blob/master/Maths/SumOfDigits.java) + * [VampireNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/VampireNumber.java) ## MinimizingLateness - -- [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) + * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) ## Misc - -- [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) -- [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) + * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) + * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) ## Others - -- [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) -- [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) -- [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) -- [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) -- [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) -- [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) -- [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) -- [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) -- [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) -- [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) -- [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) -- [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) -- [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) -- [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) -- [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) -- [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) -- [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) -- [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) -- [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) -- [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) -- [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) -- [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) -- [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) -- [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) -- [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) -- [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) -- [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) -- [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) -- [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) -- [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) -- [ThreeSum](https://github.com/TheAlgorithms/Java/blob/master/Others/ThreeSum.java) -- [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) -- [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) -- [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) -- [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) + * [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) + * [BrianKernighanAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/BrianKernighanAlgorithm.java) + * [CountChar](https://github.com/TheAlgorithms/Java/blob/master/Others/CountChar.java) + * [CountWords](https://github.com/TheAlgorithms/Java/blob/master/Others/CountWords.java) + * [CRC32](https://github.com/TheAlgorithms/Java/blob/master/Others/CRC32.java) + * [CRCAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Others/CRCAlgorithm.java) + * [Dijkstra](https://github.com/TheAlgorithms/Java/blob/master/Others/Dijkstra.java) + * [EulersFunction](https://github.com/TheAlgorithms/Java/blob/master/Others/EulersFunction.java) + * [FibToN](https://github.com/TheAlgorithms/Java/blob/master/Others/FibToN.java) + * [FirstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/FirstFit.java) + * [FloydTriangle](https://github.com/TheAlgorithms/Java/blob/master/Others/FloydTriangle.java) + * [GuassLegendre](https://github.com/TheAlgorithms/Java/blob/master/Others/GuassLegendre.java) + * [InsertDeleteInArray](https://github.com/TheAlgorithms/Java/blob/master/Others/InsertDeleteInArray.java) + * [KMP](https://github.com/TheAlgorithms/Java/blob/master/Others/KMP.java) + * [Krishnamurthy](https://github.com/TheAlgorithms/Java/blob/master/Others/Krishnamurthy.java) + * [LinearCongruentialGenerator](https://github.com/TheAlgorithms/Java/blob/master/Others/LinearCongruentialGenerator.java) + * [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/Others/LowestBasePalindrome.java) + * [PasswordGen](https://github.com/TheAlgorithms/Java/blob/master/Others/PasswordGen.java) + * [PerlinNoise](https://github.com/TheAlgorithms/Java/blob/master/Others/PerlinNoise.java) + * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) + * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) + * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) + * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) + * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) + * [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) + * [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/Others/SieveOfEratosthenes.java) + * [SJF](https://github.com/TheAlgorithms/Java/blob/master/Others/SJF.java) + * [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/Others/SkylineProblem.java) + * [StackPostfixNotation](https://github.com/TheAlgorithms/Java/blob/master/Others/StackPostfixNotation.java) + * [StringMatchFiniteAutomata](https://github.com/TheAlgorithms/Java/blob/master/Others/StringMatchFiniteAutomata.java) + * [ThreeSum](https://github.com/TheAlgorithms/Java/blob/master/Others/ThreeSum.java) + * [TopKWords](https://github.com/TheAlgorithms/Java/blob/master/Others/TopKWords.java) + * [TowerOfHanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/TowerOfHanoi.java) + * [TwoPointers](https://github.com/TheAlgorithms/Java/blob/master/Others/TwoPointers.java) + * [WorstFit](https://github.com/TheAlgorithms/Java/blob/master/Others/WorstFit.java) ## ProjectEuler - -- [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) -- [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) -- [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) -- [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) -- [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) -- [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) -- [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) -- [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) + * [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) + * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) + * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) + * [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) + * [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) + * [Problem09](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem09.java) + * [Problem10](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem10.java) + * [Problem12](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem12.java) ## Searches - -- [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) -- [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) -- [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) -- [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) -- [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) -- [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) -- [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) -- [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) -- [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) -- [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) + * [BinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/BinarySearch.java) + * [InterpolationSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/InterpolationSearch.java) + * [IterativeBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeBinarySearch.java) + * [IterativeTernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/IterativeTernarySearch.java) + * [JumpSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/JumpSearch.java) + * [LinearSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/LinearSearch.java) + * [PerfectBinarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/PerfectBinarySearch.java) + * [SaddlebackSearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/SaddlebackSearch.java) + * [SearchAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java) + * [TernarySearch](https://github.com/TheAlgorithms/Java/blob/master/Searches/TernarySearch.java) ## Sorts - -- [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) -- [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) -- [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) -- [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) -- [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) -- [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) -- [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) -- [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) -- [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) -- [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) -- [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) -- [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) -- [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) -- [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) -- [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) -- [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) -- [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) -- [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) -- [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) -- [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) + * [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BitonicSort.java) + * [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BogoSort.java) + * [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSort.java) + * [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BubbleSortRecursion.java) + * [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/BucketSort.java) + * [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CocktailShakerSort.java) + * [CombSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CombSort.java) + * [CountingSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CountingSort.java) + * [CycleSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/CycleSort.java) + * [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/GnomeSort.java) + * [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/HeapSort.java) + * [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/InsertionSort.java) + * [MergeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/MergeSort.java) + * [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/PancakeSort.java) + * [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/QuickSort.java) + * [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/RadixSort.java) + * [SelectionSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SelectionSort.java) + * [ShellSort](https://github.com/TheAlgorithms/Java/blob/master/Sorts/ShellSort.java) + * [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortAlgorithm.java) + * [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/Sorts/SortUtils.java) ## strings - -- [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) -- [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) -- [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) -- [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) -- [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) -- [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) -- [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) -- [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) -- [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) + * [Alphabetical](https://github.com/TheAlgorithms/Java/blob/master/strings/Alphabetical.java) + * [CharactersSame](https://github.com/TheAlgorithms/Java/blob/master/strings/CharactersSame.java) + * [CheckAnagrams](https://github.com/TheAlgorithms/Java/blob/master/strings/CheckAnagrams.java) + * [Lower](https://github.com/TheAlgorithms/Java/blob/master/strings/Lower.java) + * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/strings/Palindrome.java) + * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/strings/Pangram.java) + * [ReverseString](https://github.com/TheAlgorithms/Java/blob/master/strings/ReverseString.java) + * [Rotation](https://github.com/TheAlgorithms/Java/blob/master/strings/Rotation.java) + * [Upper](https://github.com/TheAlgorithms/Java/blob/master/strings/Upper.java) From a23bac99e82831437ad39fe7c4a1b350110ea136 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 24 Oct 2020 18:22:35 +0800 Subject: [PATCH 479/521] support google java style --- .github/workflows/checkstyle.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/checkstyle.yml diff --git a/.github/workflows/checkstyle.yml b/.github/workflows/checkstyle.yml new file mode 100644 index 000000000000..1f9393690d2a --- /dev/null +++ b/.github/workflows/checkstyle.yml @@ -0,0 +1,24 @@ +name: Code Formatter + +on: [push] + +jobs: + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - name: Set up JDK 12 + uses: actions/setup-java@v1 + with: + java-version: 12 + - run: wget https://github.com/google/google-java-format/releases/download/google-java-format-1.9/google-java-format-1.9-all-deps.jar -O formatter.jar + - run: java -jar formatter.jar --replace --set-exit-if-changed $(find . -type f -name "*.java") + - name: Commit Format changes + if: failure() + run: | + git config --global user.name github-actions + git config --global user.email '${GITHUB_ACTOR}@users.noreply.github.com' + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY + git commit -am "Formatted with Google Java Formatter" + git push --force origin HEAD:$GITHUB_REF \ No newline at end of file From 5d59a2e828de8e9d4ba48001d39cc50805de30cd Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sat, 24 Oct 2020 10:23:28 +0000 Subject: [PATCH 480/521] Formatted with Google Java Formatter --- Conversions/AnyBaseToAnyBase.java | 212 ++- Conversions/AnyBaseToDecimal.java | 82 +- Conversions/AnytoAny.java | 44 +- Conversions/BinaryToDecimal.java | 41 +- Conversions/BinaryToHexadecimal.java | 82 +- Conversions/BinaryToOctal.java | 69 +- Conversions/DecimalToAnyBase.java | 98 +- Conversions/DecimalToBinary.java | 87 +- Conversions/DecimalToHexaDecimal.java | 55 +- Conversions/DecimalToOctal.java | 46 +- Conversions/HexToOct.java | 106 +- Conversions/HexaDecimalToBinary.java | 45 +- Conversions/HexaDecimalToDecimal.java | 53 +- Conversions/IntegerToRoman.java | 58 +- Conversions/OctalToDecimal.java | 70 +- Conversions/OctalToHexadecimal.java | 91 +- Conversions/RomanToInteger.java | 94 +- DataStructures/Bags/Bag.java | 178 ++- DataStructures/Buffers/CircularBuffer.java | 204 ++- DataStructures/DynamicArray/DynamicArray.java | 350 ++--- DataStructures/Graphs/A_Star.java | 280 ++-- DataStructures/Graphs/BellmanFord.java | 288 ++-- DataStructures/Graphs/ConnectedComponent.java | 208 ++- DataStructures/Graphs/Cycles.java | 139 +- DataStructures/Graphs/FloydWarshall.java | 122 +- DataStructures/Graphs/Graphs.java | 212 ++- DataStructures/Graphs/Kruskal.java | 163 +-- DataStructures/Graphs/MatrixGraphs.java | 238 ++-- DataStructures/Graphs/PrimMST.java | 182 ++- DataStructures/HashMap/Hashing/HashMap.java | 259 ++-- .../HashMap/Hashing/HashMapLinearProbing.java | 353 ++--- DataStructures/HashMap/Hashing/Main.java | 81 +- .../HashMap/Hashing/MainLinearProbing.java | 107 +- DataStructures/Heaps/EmptyHeapException.java | 10 +- DataStructures/Heaps/Heap.java | 58 +- DataStructures/Heaps/HeapElement.java | 240 ++-- DataStructures/Heaps/MaxHeap.java | 194 +-- DataStructures/Heaps/MinHeap.java | 184 +-- DataStructures/Heaps/MinPriorityQueue.java | 220 ++- DataStructures/Lists/CircleLinkedList.java | 102 +- .../Lists/CountSinglyLinkedListRecursion.java | 38 +- DataStructures/Lists/CursorLinkedList.java | 292 ++-- DataStructures/Lists/DoublyLinkedList.java | 592 ++++---- .../Lists/MergeSortedArrayList.java | 94 +- .../Lists/MergeSortedSinglyLinkedList.java | 80 +- .../Lists/Merge_K_SortedLinkedlist.java | 84 +- .../SearchSinglyLinkedListRecursion.java | 47 +- DataStructures/Lists/SinglyLinkedList.java | 584 ++++---- .../Queues/GenericArrayListQueue.java | 132 +- DataStructures/Queues/LinkedQueue.java | 286 ++-- DataStructures/Queues/PriorityQueues.java | 196 ++- DataStructures/Queues/Queues.java | 307 ++--- DataStructures/Stacks/BalancedBrackets.java | 125 +- .../Stacks/DecimalToAnyUsingStack.java | 68 +- DataStructures/Stacks/NodeStack.java | 319 +++-- DataStructures/Stacks/StackArray.java | 299 ++-- DataStructures/Stacks/StackArrayList.java | 178 ++- DataStructures/Stacks/StackOfLinkedList.java | 219 ++- DataStructures/Trees/AVLTree.java | 372 +++-- DataStructures/Trees/BinaryTree.java | 445 +++--- DataStructures/Trees/GenericTree.java | 426 +++--- DataStructures/Trees/LevelOrderTraversal.java | 86 +- .../Trees/LevelOrderTraversalQueue.java | 71 +- DataStructures/Trees/PrintTopViewofTree.java | 146 +- DataStructures/Trees/RedBlackBST.java | 578 ++++---- DataStructures/Trees/TreeTraversal.java | 184 ++- DataStructures/Trees/TrieImp.java | 212 ++- DataStructures/Trees/ValidBSTOrNot.java | 68 +- DynamicProgramming/BoardPath.java | 100 +- DynamicProgramming/CoinChange.java | 127 +- DynamicProgramming/EditDistance.java | 127 +- DynamicProgramming/EggDropping.java | 62 +- DynamicProgramming/Fibonacci.java | 159 +-- DynamicProgramming/FordFulkerson.java | 114 +- DynamicProgramming/KadaneAlgorithm.java | 77 +- DynamicProgramming/Knapsack.java | 53 +- DynamicProgramming/LevenshteinDistance.java | 86 +- .../LongestCommonSubsequence.java | 100 +- .../LongestIncreasingSubsequence.java | 84 +- .../LongestPalindromicSubsequence.java | 95 +- .../LongestValidParentheses.java | 83 +- .../MatrixChainMultiplication.java | 225 ++- DynamicProgramming/MinimumSumPartition.java | 131 +- DynamicProgramming/RodCutting.java | 41 +- DynamicProgramming/SubsetSum.java | 72 +- Maths/AbsoluteMax.java | 47 +- Maths/AbsoluteMin.java | 47 +- Maths/AbsoluteValue.java | 33 +- Maths/AliquotSum.java | 51 +- Maths/AmicableNumber.java | 144 +- Maths/Area.java | 230 ++-- Maths/Armstrong.java | 69 +- Maths/Average.java | 74 +- Maths/Ceil.java | 42 +- Maths/Combinations.java | 58 +- Maths/Factorial.java | 41 +- Maths/FactorialRecursion.java | 38 +- Maths/FibonacciNumber.java | 60 +- Maths/FindMax.java | 54 +- Maths/FindMaxRecursion.java | 82 +- Maths/FindMin.java | 54 +- Maths/FindMinRecursion.java | 90 +- Maths/Floor.java | 42 +- Maths/GCD.java | 86 +- Maths/GCDRecursion.java | 52 +- Maths/LucasSeries.java | 73 +- Maths/MaxValue.java | 47 +- Maths/Median.java | 42 +- Maths/MinValue.java | 47 +- Maths/Mode.java | 96 +- Maths/NumberOfDigits.java | 103 +- Maths/PalindromeNumber.java | 46 +- Maths/ParseInteger.java | 54 +- Maths/PerfectCube.java | 41 +- Maths/PerfectNumber.java | 49 +- Maths/PerfectSquare.java | 40 +- Maths/Pow.java | 41 +- Maths/PowRecursion.java | 35 +- Maths/PowerOfTwoOrNot.java | 39 +- Maths/PrimeCheck.java | 56 +- Maths/PrimeFactorization.java | 48 +- Maths/PythagoreanTriple.java | 54 +- Maths/SumOfArithmeticSeries.java | 58 +- Maths/SumOfDigits.java | 96 +- Maths/VampireNumber.java | 132 +- MinimizingLateness/MinimizingLateness.java | 87 +- Misc/MedianOfRunningArray.java | 78 +- Misc/PalindromePrime.java | 68 +- Others/BestFit.java | 159 +-- Others/BrianKernighanAlgorithm.java | 65 +- Others/CRC32.java | 38 +- Others/CRCAlgorithm.java | 338 +++-- Others/CountChar.java | 32 +- Others/CountWords.java | 62 +- Others/Dijkstra.java | 351 +++-- Others/EulersFunction.java | 35 +- Others/FibToN.java | 42 +- Others/FirstFit.java | 120 +- Others/FloydTriangle.java | 23 +- Others/GuassLegendre.java | 59 +- Others/InsertDeleteInArray.java | 75 +- Others/KMP.java | 100 +- Others/Krishnamurthy.java | 41 +- Others/LinearCongruentialGenerator.java | 90 +- Others/LowestBasePalindrome.java | 237 ++-- Others/PasswordGen.java | 53 +- Others/PerlinNoise.java | 293 ++-- Others/QueueUsingTwoStacks.java | 260 ++-- Others/RabinKarp.java | 127 +- Others/RemoveDuplicateFromString.java | 65 +- Others/ReturnSubsequence.java | 77 +- Others/ReverseStackUsingRecursion.java | 87 +- Others/RootPrecision.java | 46 +- Others/SJF.java | 280 ++-- Others/SieveOfEratosthenes.java | 65 +- Others/SkylineProblem.java | 195 ++- Others/StackPostfixNotation.java | 62 +- Others/StringMatchFiniteAutomata.java | 168 ++- Others/ThreeSum.java | 85 +- Others/TopKWords.java | 131 +- Others/TowerOfHanoi.java | 34 +- Others/TwoPointers.java | 72 +- Others/WorstFit.java | 134 +- ProjectEuler/Problem01.java | 78 +- ProjectEuler/Problem02.java | 66 +- ProjectEuler/Problem04.java | 62 +- ProjectEuler/Problem06.java | 68 +- ProjectEuler/Problem07.java | 97 +- ProjectEuler/Problem09.java | 40 +- ProjectEuler/Problem10.java | 86 +- ProjectEuler/Problem12.java | 94 +- Searches/BinarySearch.java | 132 +- Searches/InterpolationSearch.java | 115 +- Searches/IterativeBinarySearch.java | 122 +- Searches/IterativeTernarySearch.java | 113 +- Searches/JumpSearch.java | 59 +- Searches/LinearSearch.java | 85 +- Searches/PerfectBinarySearch.java | 47 +- Searches/SaddlebackSearch.java | 119 +- Searches/SearchAlgorithm.java | 17 +- Searches/TernarySearch.java | 152 +-- Sorts/BitonicSort.java | 130 +- Sorts/BogoSort.java | 60 +- Sorts/BubbleSort.java | 68 +- Sorts/BubbleSortRecursion.java | 82 +- Sorts/BucketSort.java | 185 ++- Sorts/CocktailShakerSort.java | 98 +- Sorts/CombSort.java | 94 +- Sorts/CountingSort.java | 163 ++- Sorts/CycleSort.java | 104 +- Sorts/GnomeSort.java | 51 +- Sorts/HeapSort.java | 196 ++- Sorts/InsertionSort.java | 73 +- Sorts/MergeSort.java | 144 +- Sorts/PancakeSort.java | 55 +- Sorts/QuickSort.java | 162 ++- Sorts/RadixSort.java | 70 +- Sorts/SelectionSort.java | 95 +- Sorts/ShellSort.java | 58 +- Sorts/SortAlgorithm.java | 37 +- Sorts/SortUtils.java | 132 +- ciphers/AES.java | 1207 +++++++++-------- ciphers/AESEncryption.java | 193 ++- ciphers/Caesar.java | 199 ++- ciphers/ColumnarTranspositionCipher.java | 362 +++-- ciphers/RSA.java | 150 +- ciphers/SimpleSubstitutionCipher.java | 138 +- ciphers/Vigenere.java | 90 +- divideconquer/ClosestPair.java | 642 ++++----- divideconquer/SkylineAlgorithm.java | 295 ++-- strings/Alphabetical.java | 52 +- strings/CharactersSame.java | 42 +- strings/CheckAnagrams.java | 46 +- strings/Lower.java | 42 +- strings/Palindrome.java | 104 +- strings/Pangram.java | 58 +- strings/ReverseString.java | 67 +- strings/Rotation.java | 100 +- strings/Upper.java | 42 +- 219 files changed, 13754 insertions(+), 14578 deletions(-) diff --git a/Conversions/AnyBaseToAnyBase.java b/Conversions/AnyBaseToAnyBase.java index 8ecc79904c11..2fc4499a0526 100644 --- a/Conversions/AnyBaseToAnyBase.java +++ b/Conversions/AnyBaseToAnyBase.java @@ -6,130 +6,122 @@ import java.util.Scanner; /** - * Class for converting from "any" base to "any" other base, when "any" means from 2-36. - * Works by going from base 1 to decimal to base 2. Includes auxiliary method for - * determining whether a number is valid for a given base. + * Class for converting from "any" base to "any" other base, when "any" means from 2-36. Works by + * going from base 1 to decimal to base 2. Includes auxiliary method for determining whether a + * number is valid for a given base. * * @author Michael Rolland * @version 2017.10.10 */ public class AnyBaseToAnyBase { - /** - * Smallest and largest base you want to accept as valid input - */ - static final int MINIMUM_BASE = 2; - static final int MAXIMUM_BASE = 36; + /** Smallest and largest base you want to accept as valid input */ + static final int MINIMUM_BASE = 2; - public static void main(String[] args) { - Scanner in = new Scanner(System.in); - String n; - int b1, b2; - while (true) { - try { - System.out.print("Enter number: "); - n = in.next(); - System.out.print("Enter beginning base (between " + MINIMUM_BASE + " and " + MAXIMUM_BASE + "): "); - b1 = in.nextInt(); - if (b1 > MAXIMUM_BASE || b1 < MINIMUM_BASE) { - System.out.println("Invalid base!"); - continue; - } - if (!validForBase(n, b1)) { - System.out.println("The number is invalid for this base!"); - continue; - } - System.out.print("Enter end base (between " + MINIMUM_BASE + " and " + MAXIMUM_BASE + "): "); - b2 = in.nextInt(); - if (b2 > MAXIMUM_BASE || b2 < MINIMUM_BASE) { - System.out.println("Invalid base!"); - continue; - } - break; - } catch (InputMismatchException e) { - System.out.println("Invalid input."); - in.next(); - } + static final int MAXIMUM_BASE = 36; + + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + String n; + int b1, b2; + while (true) { + try { + System.out.print("Enter number: "); + n = in.next(); + System.out.print( + "Enter beginning base (between " + MINIMUM_BASE + " and " + MAXIMUM_BASE + "): "); + b1 = in.nextInt(); + if (b1 > MAXIMUM_BASE || b1 < MINIMUM_BASE) { + System.out.println("Invalid base!"); + continue; + } + if (!validForBase(n, b1)) { + System.out.println("The number is invalid for this base!"); + continue; } - System.out.println(base2base(n, b1, b2)); - in.close(); + System.out.print( + "Enter end base (between " + MINIMUM_BASE + " and " + MAXIMUM_BASE + "): "); + b2 = in.nextInt(); + if (b2 > MAXIMUM_BASE || b2 < MINIMUM_BASE) { + System.out.println("Invalid base!"); + continue; + } + break; + } catch (InputMismatchException e) { + System.out.println("Invalid input."); + in.next(); + } } + System.out.println(base2base(n, b1, b2)); + in.close(); + } - /** - * Checks if a number (as a String) is valid for a given base. - */ - public static boolean validForBase(String n, int base) { - char[] validDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', - 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', - 'W', 'X', 'Y', 'Z'}; - // digitsForBase contains all the valid digits for the base given - char[] digitsForBase = Arrays.copyOfRange(validDigits, 0, base); + /** Checks if a number (as a String) is valid for a given base. */ + public static boolean validForBase(String n, int base) { + char[] validDigits = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', + 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' + }; + // digitsForBase contains all the valid digits for the base given + char[] digitsForBase = Arrays.copyOfRange(validDigits, 0, base); - // Convert character array into set for convenience of contains() method - HashSet digitsList = new HashSet<>(); - for (int i = 0; i < digitsForBase.length; i++) - digitsList.add(digitsForBase[i]); + // Convert character array into set for convenience of contains() method + HashSet digitsList = new HashSet<>(); + for (int i = 0; i < digitsForBase.length; i++) digitsList.add(digitsForBase[i]); - // Check that every digit in n is within the list of valid digits for that base. - for (char c : n.toCharArray()) - if (!digitsList.contains(c)) - return false; + // Check that every digit in n is within the list of valid digits for that base. + for (char c : n.toCharArray()) if (!digitsList.contains(c)) return false; - return true; - } + return true; + } - /** - * Method to convert any integer from base b1 to base b2. Works by converting from b1 to decimal, - * then decimal to b2. - * - * @param n The integer to be converted. - * @param b1 Beginning base. - * @param b2 End base. - * @return n in base b2. - */ - public static String base2base(String n, int b1, int b2) { - // Declare variables: decimal value of n, - // character of base b1, character of base b2, - // and the string that will be returned. - int decimalValue = 0, charB2; - char charB1; - String output = ""; - // Go through every character of n - for (int i = 0; i < n.length(); i++) { - // store the character in charB1 - charB1 = n.charAt(i); - // if it is a non-number, convert it to a decimal value >9 and store it in charB2 - if (charB1 >= 'A' && charB1 <= 'Z') - charB2 = 10 + (charB1 - 'A'); - // Else, store the integer value in charB2 - else - charB2 = charB1 - '0'; - // Convert the digit to decimal and add it to the - // decimalValue of n - decimalValue = decimalValue * b1 + charB2; - } + /** + * Method to convert any integer from base b1 to base b2. Works by converting from b1 to decimal, + * then decimal to b2. + * + * @param n The integer to be converted. + * @param b1 Beginning base. + * @param b2 End base. + * @return n in base b2. + */ + public static String base2base(String n, int b1, int b2) { + // Declare variables: decimal value of n, + // character of base b1, character of base b2, + // and the string that will be returned. + int decimalValue = 0, charB2; + char charB1; + String output = ""; + // Go through every character of n + for (int i = 0; i < n.length(); i++) { + // store the character in charB1 + charB1 = n.charAt(i); + // if it is a non-number, convert it to a decimal value >9 and store it in charB2 + if (charB1 >= 'A' && charB1 <= 'Z') charB2 = 10 + (charB1 - 'A'); + // Else, store the integer value in charB2 + else charB2 = charB1 - '0'; + // Convert the digit to decimal and add it to the + // decimalValue of n + decimalValue = decimalValue * b1 + charB2; + } - // Converting the decimal value to base b2: - // A number is converted from decimal to another base - // by continuously dividing by the base and recording - // the remainder until the quotient is zero. The number in the - // new base is the remainders, with the last remainder - // being the left-most digit. - if (0 == decimalValue) - return "0"; - // While the quotient is NOT zero: - while (decimalValue != 0) { - // If the remainder is a digit < 10, simply add it to - // the left side of the new number. - if (decimalValue % b2 < 10) - output = Integer.toString(decimalValue % b2) + output; - // If the remainder is >= 10, add a character with the - // corresponding value to the new number. (A = 10, B = 11, C = 12, ...) - else - output = (char) ((decimalValue % b2) + 55) + output; - // Divide by the new base again - decimalValue /= b2; - } - return output; + // Converting the decimal value to base b2: + // A number is converted from decimal to another base + // by continuously dividing by the base and recording + // the remainder until the quotient is zero. The number in the + // new base is the remainders, with the last remainder + // being the left-most digit. + if (0 == decimalValue) return "0"; + // While the quotient is NOT zero: + while (decimalValue != 0) { + // If the remainder is a digit < 10, simply add it to + // the left side of the new number. + if (decimalValue % b2 < 10) output = Integer.toString(decimalValue % b2) + output; + // If the remainder is >= 10, add a character with the + // corresponding value to the new number. (A = 10, B = 11, C = 12, ...) + else output = (char) ((decimalValue % b2) + 55) + output; + // Divide by the new base again + decimalValue /= b2; } + return output; + } } diff --git a/Conversions/AnyBaseToDecimal.java b/Conversions/AnyBaseToDecimal.java index 6b4a680a06da..61b1a82f0ea3 100644 --- a/Conversions/AnyBaseToDecimal.java +++ b/Conversions/AnyBaseToDecimal.java @@ -1,53 +1,51 @@ package Conversions; -/** - * @author Varun Upadhyay (https://github.com/varunu28) - */ +/** @author Varun Upadhyay (https://github.com/varunu28) */ // Driver program public class AnyBaseToDecimal { - public static void main(String[] args) { - assert convertToDecimal("1010", 2) == Integer.valueOf("1010", 2); - assert convertToDecimal("777", 8) == Integer.valueOf("777", 8); - assert convertToDecimal("999", 10) == Integer.valueOf("999", 10); - assert convertToDecimal("ABCDEF", 16) == Integer.valueOf("ABCDEF", 16); - assert convertToDecimal("XYZ", 36) == Integer.valueOf("XYZ", 36); - } + public static void main(String[] args) { + assert convertToDecimal("1010", 2) == Integer.valueOf("1010", 2); + assert convertToDecimal("777", 8) == Integer.valueOf("777", 8); + assert convertToDecimal("999", 10) == Integer.valueOf("999", 10); + assert convertToDecimal("ABCDEF", 16) == Integer.valueOf("ABCDEF", 16); + assert convertToDecimal("XYZ", 36) == Integer.valueOf("XYZ", 36); + } - /** - * Convert any radix to decimal number - * - * @param s the string to be convert - * @param radix the radix - * @return decimal of bits - * @throws NumberFormatException if {@code bits} or {@code radix} is invalid - */ - public static int convertToDecimal(String s, int radix) { - int num = 0; - int pow = 1; + /** + * Convert any radix to decimal number + * + * @param s the string to be convert + * @param radix the radix + * @return decimal of bits + * @throws NumberFormatException if {@code bits} or {@code radix} is invalid + */ + public static int convertToDecimal(String s, int radix) { + int num = 0; + int pow = 1; - for (int i = s.length() - 1; i >= 0; i--) { - int digit = valOfChar(s.charAt(i)); - if (digit >= radix) { - throw new NumberFormatException("For input string " + s); - } - num += valOfChar(s.charAt(i)) * pow; - pow *= radix; - } - return num; + for (int i = s.length() - 1; i >= 0; i--) { + int digit = valOfChar(s.charAt(i)); + if (digit >= radix) { + throw new NumberFormatException("For input string " + s); + } + num += valOfChar(s.charAt(i)) * pow; + pow *= radix; } + return num; + } - /** - * Convert character to integer - * - * @param c the character - * @return represented digit of given character - * @throws NumberFormatException if {@code ch} is not UpperCase or Digit character. - */ - public static int valOfChar(char c) { - if (!(Character.isUpperCase(c) || Character.isDigit(c))) { - throw new NumberFormatException("invalid character :" + c); - } - return Character.isDigit(c) ? c - '0' : c - 'A' + 10; + /** + * Convert character to integer + * + * @param c the character + * @return represented digit of given character + * @throws NumberFormatException if {@code ch} is not UpperCase or Digit character. + */ + public static int valOfChar(char c) { + if (!(Character.isUpperCase(c) || Character.isDigit(c))) { + throw new NumberFormatException("invalid character :" + c); } + return Character.isDigit(c) ? c - '0' : c - 'A' + 10; + } } diff --git a/Conversions/AnytoAny.java b/Conversions/AnytoAny.java index 1bc115404696..c213513171ef 100644 --- a/Conversions/AnytoAny.java +++ b/Conversions/AnytoAny.java @@ -1,30 +1,30 @@ package Conversions; import java.util.Scanner; -//given a source number , source base, destination base, this code can give you the destination number. -//sn ,sb,db ---> ()dn . this is what we have to do . +// given a source number , source base, destination base, this code can give you the destination +// number. +// sn ,sb,db ---> ()dn . this is what we have to do . public class AnytoAny { - public static void main(String[] args) { - Scanner scn = new Scanner(System.in); - int sn = scn.nextInt(); - int sb = scn.nextInt(); - int db = scn.nextInt(); - int m = 1, dec = 0, dn = 0; - while (sn != 0) { - dec = dec + (sn % 10) * m; - m *= sb; - sn /= 10; - } - m = 1; - while (dec != 0) { - dn = dn + (dec % db) * m; - m *= 10; - dec /= db; - } - System.out.println(dn); - scn.close(); + public static void main(String[] args) { + Scanner scn = new Scanner(System.in); + int sn = scn.nextInt(); + int sb = scn.nextInt(); + int db = scn.nextInt(); + int m = 1, dec = 0, dn = 0; + while (sn != 0) { + dec = dec + (sn % 10) * m; + m *= sb; + sn /= 10; } - + m = 1; + while (dec != 0) { + dn = dn + (dec % db) * m; + m *= 10; + dec /= db; + } + System.out.println(dn); + scn.close(); + } } diff --git a/Conversions/BinaryToDecimal.java b/Conversions/BinaryToDecimal.java index 6db926d3b932..beb71af5107d 100644 --- a/Conversions/BinaryToDecimal.java +++ b/Conversions/BinaryToDecimal.java @@ -2,29 +2,26 @@ import java.util.Scanner; -/** - * This class converts a Binary number to a Decimal number - * - */ +/** This class converts a Binary number to a Decimal number */ class BinaryToDecimal { - /** - * Main Method - * - * @param args Command line arguments - */ - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - int binNum, binCopy, d, s = 0, power = 0; - System.out.print("Binary number: "); - binNum = sc.nextInt(); - binCopy = binNum; - while (binCopy != 0) { - d = binCopy % 10; - s += d * (int) Math.pow(2, power++); - binCopy /= 10; - } - System.out.println("Decimal equivalent:" + s); - sc.close(); + /** + * Main Method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + int binNum, binCopy, d, s = 0, power = 0; + System.out.print("Binary number: "); + binNum = sc.nextInt(); + binCopy = binNum; + while (binCopy != 0) { + d = binCopy % 10; + s += d * (int) Math.pow(2, power++); + binCopy /= 10; } + System.out.println("Decimal equivalent:" + s); + sc.close(); + } } diff --git a/Conversions/BinaryToHexadecimal.java b/Conversions/BinaryToHexadecimal.java index d923c1d8041d..c5ff3298fd03 100644 --- a/Conversions/BinaryToHexadecimal.java +++ b/Conversions/BinaryToHexadecimal.java @@ -9,47 +9,47 @@ */ public class BinaryToHexadecimal { - /** - * This method converts a binary number to - * a hexadecimal number. - * - * @param binary The binary number - * @return The hexadecimal number - */ - static String binToHex(int binary) { - //hm to store hexadecimal codes for binary numbers within the range: 0000 to 1111 i.e. for decimal numbers 0 to 15 - HashMap hm = new HashMap<>(); - //String to store hexadecimal code - String hex = ""; - int i; - for (i = 0; i < 10; i++) { - hm.put(i, String.valueOf(i)); - } - for (i = 10; i < 16; i++) hm.put(i, String.valueOf((char) ('A' + i - 10))); - int currbit; - while (binary != 0) { - int code4 = 0; //to store decimal equivalent of number formed by 4 decimal digits - for (i = 0; i < 4; i++) { - currbit = binary % 10; - binary = binary / 10; - code4 += currbit * Math.pow(2, i); - } - hex = hm.get(code4) + hex; - } - return hex; + /** + * This method converts a binary number to a hexadecimal number. + * + * @param binary The binary number + * @return The hexadecimal number + */ + static String binToHex(int binary) { + // hm to store hexadecimal codes for binary numbers within the range: 0000 to 1111 i.e. for + // decimal numbers 0 to 15 + HashMap hm = new HashMap<>(); + // String to store hexadecimal code + String hex = ""; + int i; + for (i = 0; i < 10; i++) { + hm.put(i, String.valueOf(i)); } - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - System.out.println("Enter binary number:"); - int binary = sc.nextInt(); - String hex = binToHex(binary); - System.out.println("Hexadecimal Code:" + hex); - sc.close(); + for (i = 10; i < 16; i++) hm.put(i, String.valueOf((char) ('A' + i - 10))); + int currbit; + while (binary != 0) { + int code4 = 0; // to store decimal equivalent of number formed by 4 decimal digits + for (i = 0; i < 4; i++) { + currbit = binary % 10; + binary = binary / 10; + code4 += currbit * Math.pow(2, i); + } + hex = hm.get(code4) + hex; } + return hex; + } + + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.println("Enter binary number:"); + int binary = sc.nextInt(); + String hex = binToHex(binary); + System.out.println("Hexadecimal Code:" + hex); + sc.close(); + } } diff --git a/Conversions/BinaryToOctal.java b/Conversions/BinaryToOctal.java index 833ab3a221f7..1ea555e42916 100644 --- a/Conversions/BinaryToOctal.java +++ b/Conversions/BinaryToOctal.java @@ -9,42 +9,39 @@ */ public class BinaryToOctal { - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - System.out.println("Input the binary number: "); - int b = sc.nextInt(); - System.out.println("Octal equivalent: " + convertBinaryToOctal(b)); - sc.close(); + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + System.out.println("Input the binary number: "); + int b = sc.nextInt(); + System.out.println("Octal equivalent: " + convertBinaryToOctal(b)); + sc.close(); + } + /** + * This method converts a binary number to an octal number. + * + * @param binary The binary number + * @return The octal number + */ + public static String convertBinaryToOctal(int binary) { + String octal = ""; + int currBit = 0, j = 1; + while (binary != 0) { + int code3 = 0; + for (int i = 0; i < 3; i++) { + currBit = binary % 10; + binary = binary / 10; + code3 += currBit * j; + j *= 2; + } + octal = code3 + octal; + j = 1; } - - /** - * This method converts a binary number to - * an octal number. - * - * @param binary The binary number - * @return The octal number - */ - public static String convertBinaryToOctal(int binary) { - String octal = ""; - int currBit = 0, j = 1; - while (binary != 0) { - int code3 = 0; - for (int i = 0; i < 3; i++) { - currBit = binary % 10; - binary = binary / 10; - code3 += currBit * j; - j *= 2; - } - octal = code3 + octal; - j = 1; - } - return octal; - } - + return octal; + } } diff --git a/Conversions/DecimalToAnyBase.java b/Conversions/DecimalToAnyBase.java index 4b23fc6bbef3..127cc22c0ce7 100644 --- a/Conversions/DecimalToAnyBase.java +++ b/Conversions/DecimalToAnyBase.java @@ -4,64 +4,58 @@ import java.io.InputStreamReader; import java.util.ArrayList; -/** - * - * @author Varun Upadhyay (https://github.com/varunu28) - * - */ +/** @author Varun Upadhyay (https://github.com/varunu28) */ // Driver Program public class DecimalToAnyBase { - public static void main (String[] args) throws Exception{ - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - System.out.println("Enter the decimal input below: "); - int decInput = Integer.parseInt(br.readLine()); - System.out.println(); - - System.out.println("Enter the base below: "); - int base = Integer.parseInt(br.readLine()); - System.out.println(); - - System.out.println("Decimal Input" + " is: " + decInput); - System.out.println("Value of " + decInput + " in base " + base + " is: " + convertToAnyBase(decInput, base)); - - br.close(); + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + System.out.println("Enter the decimal input below: "); + int decInput = Integer.parseInt(br.readLine()); + System.out.println(); + + System.out.println("Enter the base below: "); + int base = Integer.parseInt(br.readLine()); + System.out.println(); + + System.out.println("Decimal Input" + " is: " + decInput); + System.out.println( + "Value of " + decInput + " in base " + base + " is: " + convertToAnyBase(decInput, base)); + + br.close(); + } + + /** + * This method produces a String value of any given input decimal in any base + * + * @param inp Decimal of which we need the value in base in String format + * @return string format of the converted value in the given base + */ + public static String convertToAnyBase(int inp, int base) { + ArrayList charArr = new ArrayList<>(); + + while (inp > 0) { + charArr.add(reVal(inp % base)); + inp /= base; } - /** - * This method produces a String value of any given input decimal in any base - * @param inp Decimal of which we need the value in base in String format - * @return string format of the converted value in the given base - */ - - public static String convertToAnyBase(int inp, int base) { - ArrayList charArr = new ArrayList<>(); - - while (inp > 0) { - charArr.add(reVal(inp%base)); - inp /= base; - } + StringBuilder str = new StringBuilder(charArr.size()); - StringBuilder str = new StringBuilder(charArr.size()); - - for(Character ch: charArr) - { - str.append(ch); - } - - return str.reverse().toString(); + for (Character ch : charArr) { + str.append(ch); } - /** - * This method produces character value of the input integer and returns it - * @param num integer of which we need the character value of - * @return character value of input integer - */ - - public static char reVal(int num) { - if (num >= 0 && num <= 9) - return (char)(num + '0'); - else - return (char)(num - 10 + 'A'); - } + return str.reverse().toString(); + } + + /** + * This method produces character value of the input integer and returns it + * + * @param num integer of which we need the character value of + * @return character value of input integer + */ + public static char reVal(int num) { + if (num >= 0 && num <= 9) return (char) (num + '0'); + else return (char) (num - 10 + 'A'); + } } diff --git a/Conversions/DecimalToBinary.java b/Conversions/DecimalToBinary.java index 4dd1ba4f4414..0f79394c79db 100644 --- a/Conversions/DecimalToBinary.java +++ b/Conversions/DecimalToBinary.java @@ -2,59 +2,46 @@ import java.util.Scanner; -/** - * This class converts a Decimal number to a Binary number - * - * - */ +/** This class converts a Decimal number to a Binary number */ class DecimalToBinary { - /** - * Main Method - * - * @param args Command Line Arguments - */ - public static void main(String args[]) { - conventionalConversion(); - bitwiseConversion(); - } + /** + * Main Method + * + * @param args Command Line Arguments + */ + public static void main(String args[]) { + conventionalConversion(); + bitwiseConversion(); + } - /** - * This method converts a decimal number - * to a binary number using a conventional - * algorithm. - */ - public static void conventionalConversion() { - int n, b = 0, c = 0, d; - Scanner input = new Scanner(System.in); - System.out.printf("Conventional conversion.%n Enter the decimal number: "); - n = input.nextInt(); - while (n != 0) { - d = n % 2; - b = b + d * (int) Math.pow(10, c++); - n /= 2; - } //converting decimal to binary - System.out.println("\tBinary number: " + b); - input.close(); - } + /** This method converts a decimal number to a binary number using a conventional algorithm. */ + public static void conventionalConversion() { + int n, b = 0, c = 0, d; + Scanner input = new Scanner(System.in); + System.out.printf("Conventional conversion.%n Enter the decimal number: "); + n = input.nextInt(); + while (n != 0) { + d = n % 2; + b = b + d * (int) Math.pow(10, c++); + n /= 2; + } // converting decimal to binary + System.out.println("\tBinary number: " + b); + input.close(); + } - /** - * This method converts a decimal number - * to a binary number using a bitwise - * algorithm - */ - public static void bitwiseConversion() { - int n, b = 0, c = 0, d; - Scanner input = new Scanner(System.in); - System.out.printf("Bitwise conversion.%n Enter the decimal number: "); - n = input.nextInt(); - while (n != 0) { - d = (n & 1); - b += d * (int) Math.pow(10, c++); - n >>= 1; - } - System.out.println("\tBinary number: " + b); - input.close(); + /** This method converts a decimal number to a binary number using a bitwise algorithm */ + public static void bitwiseConversion() { + int n, b = 0, c = 0, d; + Scanner input = new Scanner(System.in); + System.out.printf("Bitwise conversion.%n Enter the decimal number: "); + n = input.nextInt(); + while (n != 0) { + d = (n & 1); + b += d * (int) Math.pow(10, c++); + n >>= 1; } - + System.out.println("\tBinary number: " + b); + input.close(); + } } diff --git a/Conversions/DecimalToHexaDecimal.java b/Conversions/DecimalToHexaDecimal.java index 3d0351dd0122..21abb681a547 100644 --- a/Conversions/DecimalToHexaDecimal.java +++ b/Conversions/DecimalToHexaDecimal.java @@ -1,32 +1,33 @@ package Conversions; -//hex = [0 - 9] -> [A - F] +// hex = [0 - 9] -> [A - F] class DecimalToHexaDecimal { - private static final int sizeOfIntInHalfBytes = 8; - private static final int numberOfBitsInAHalfByte = 4; - private static final int halfByte = 0x0F; - private static final char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', - 'F' }; + private static final int sizeOfIntInHalfBytes = 8; + private static final int numberOfBitsInAHalfByte = 4; + private static final int halfByte = 0x0F; + private static final char[] hexDigits = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; - // Returns the hex value of the dec entered in the parameter. - public static String decToHex(int dec) { - StringBuilder hexBuilder = new StringBuilder(sizeOfIntInHalfBytes); - hexBuilder.setLength(sizeOfIntInHalfBytes); - for (int i = sizeOfIntInHalfBytes - 1; i >= 0; --i) { - int j = dec & halfByte; - hexBuilder.setCharAt(i, hexDigits[j]); - dec >>= numberOfBitsInAHalfByte; - } - return hexBuilder.toString().toLowerCase(); - } + // Returns the hex value of the dec entered in the parameter. + public static String decToHex(int dec) { + StringBuilder hexBuilder = new StringBuilder(sizeOfIntInHalfBytes); + hexBuilder.setLength(sizeOfIntInHalfBytes); + for (int i = sizeOfIntInHalfBytes - 1; i >= 0; --i) { + int j = dec & halfByte; + hexBuilder.setCharAt(i, hexDigits[j]); + dec >>= numberOfBitsInAHalfByte; + } + return hexBuilder.toString().toLowerCase(); + } - // Test above function. - public static void main(String[] args) { - System.out.println("Test..."); - int dec = 305445566; - String libraryDecToHex = Integer.toHexString(dec); - String decToHex = decToHex(dec); - System.out.println("Result from the library : " + libraryDecToHex); - System.out.println("Result decToHex method : " + decToHex); - } -} \ No newline at end of file + // Test above function. + public static void main(String[] args) { + System.out.println("Test..."); + int dec = 305445566; + String libraryDecToHex = Integer.toHexString(dec); + String decToHex = decToHex(dec); + System.out.println("Result from the library : " + libraryDecToHex); + System.out.println("Result decToHex method : " + decToHex); + } +} diff --git a/Conversions/DecimalToOctal.java b/Conversions/DecimalToOctal.java index 98c9f1bb0c48..1a4fa9f75b1c 100644 --- a/Conversions/DecimalToOctal.java +++ b/Conversions/DecimalToOctal.java @@ -2,32 +2,28 @@ import java.util.Scanner; -/** - * This class converts Decimal numbers to Octal Numbers - * - * - */ +/** This class converts Decimal numbers to Octal Numbers */ public class DecimalToOctal { - /** - * Main Method - * - * @param args Command line Arguments - */ + /** + * Main Method + * + * @param args Command line Arguments + */ - //enter in a decimal value to get Octal output - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - int n, k, d, s = 0, c = 0; - System.out.print("Decimal number: "); - n = sc.nextInt(); - k = n; - while (k != 0) { - d = k % 8; - s += d * (int) Math.pow(10, c++); - k /= 8; - } - - System.out.println("Octal equivalent:" + s); - sc.close(); + // enter in a decimal value to get Octal output + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int n, k, d, s = 0, c = 0; + System.out.print("Decimal number: "); + n = sc.nextInt(); + k = n; + while (k != 0) { + d = k % 8; + s += d * (int) Math.pow(10, c++); + k /= 8; } + + System.out.println("Octal equivalent:" + s); + sc.close(); + } } diff --git a/Conversions/HexToOct.java b/Conversions/HexToOct.java index 2807735f72fb..c64f549a6fa5 100644 --- a/Conversions/HexToOct.java +++ b/Conversions/HexToOct.java @@ -8,62 +8,66 @@ * @author Tanmay Joshi */ public class HexToOct { - /** - * This method converts a Hexadecimal number to a decimal number - * - * @param s The Hexadecimal Number - * @return The Decimal number - */ - public static int hex2decimal(String s) { - String str = "0123456789ABCDEF"; - s = s.toUpperCase(); - int val = 0; - for (int i = 0; i < s.length(); i++) { - char a = s.charAt(i); - int n = str.indexOf(a); - val = 16 * val + n; - } - return val; + /** + * This method converts a Hexadecimal number to a decimal number + * + * @param s The Hexadecimal Number + * @return The Decimal number + */ + public static int hex2decimal(String s) { + String str = "0123456789ABCDEF"; + s = s.toUpperCase(); + int val = 0; + for (int i = 0; i < s.length(); i++) { + char a = s.charAt(i); + int n = str.indexOf(a); + val = 16 * val + n; } + return val; + } - /** - * This method converts a Decimal number to a octal number - * - * @param q The Decimal Number - * @return The Octal number - */ - public static int decimal2octal(int q) { - int now; - int i = 1; - int octnum = 0; - while (q > 0) { - now = q % 8; - octnum = (now * (int) (Math.pow(10, i))) + octnum; - q /= 8; - i++; - } - octnum /= 10; - return octnum; + /** + * This method converts a Decimal number to a octal number + * + * @param q The Decimal Number + * @return The Octal number + */ + public static int decimal2octal(int q) { + int now; + int i = 1; + int octnum = 0; + while (q > 0) { + now = q % 8; + octnum = (now * (int) (Math.pow(10, i))) + octnum; + q /= 8; + i++; } + octnum /= 10; + return octnum; + } - /** - * Main method that gets the hex input from user and converts it into octal. - * @param args arguments - */ - public static void main(String args[]) { - String hexadecnum; - int decnum, octalnum; - Scanner scan = new Scanner(System.in); + /** + * Main method that gets the hex input from user and converts it into octal. + * + * @param args arguments + */ + public static void main(String args[]) { + String hexadecnum; + int decnum, octalnum; + Scanner scan = new Scanner(System.in); - System.out.print("Enter Hexadecimal Number : "); - hexadecnum = scan.nextLine(); + System.out.print("Enter Hexadecimal Number : "); + hexadecnum = scan.nextLine(); - // first convert hexadecimal to decimal - decnum = hex2decimal(hexadecnum); //Pass the string to the hex2decimal function and get the decimal form in variable decnum + // first convert hexadecimal to decimal + decnum = + hex2decimal( + hexadecnum); // Pass the string to the hex2decimal function and get the decimal form in + // variable decnum - // convert decimal to octal - octalnum = decimal2octal(decnum); - System.out.println("Number in octal: " + octalnum); - scan.close(); - } + // convert decimal to octal + octalnum = decimal2octal(decnum); + System.out.println("Number in octal: " + octalnum); + scan.close(); + } } diff --git a/Conversions/HexaDecimalToBinary.java b/Conversions/HexaDecimalToBinary.java index 091822ce0cb4..06fbc7efd24a 100644 --- a/Conversions/HexaDecimalToBinary.java +++ b/Conversions/HexaDecimalToBinary.java @@ -1,36 +1,35 @@ package Conversions; -//Hex [0-9],[A-F] -> Binary [0,1] +// Hex [0-9],[A-F] -> Binary [0,1] public class HexaDecimalToBinary { - private final int LONG_BITS = 8; + private final int LONG_BITS = 8; - public void convert(String numHex) { - // String a HexaDecimal: - int conHex = Integer.parseInt(numHex, 16); - // Hex a Binary: - String binary = Integer.toBinaryString(conHex); - // Output: - System.out.println(numHex + " = " + completeDigits(binary)); - } + public void convert(String numHex) { + // String a HexaDecimal: + int conHex = Integer.parseInt(numHex, 16); + // Hex a Binary: + String binary = Integer.toBinaryString(conHex); + // Output: + System.out.println(numHex + " = " + completeDigits(binary)); + } - public String completeDigits(String binNum) { - for (int i = binNum.length(); i < LONG_BITS; i++) { - binNum = "0" + binNum; - } - return binNum; + public String completeDigits(String binNum) { + for (int i = binNum.length(); i < LONG_BITS; i++) { + binNum = "0" + binNum; } + return binNum; + } - public static void main(String[] args) { + public static void main(String[] args) { - //Testing Numbers: - String[] hexNums = {"1", "A1", "ef", "BA", "AA", "BB", - "19", "01", "02", "03", "04"}; - HexaDecimalToBinary objConvert = new HexaDecimalToBinary(); + // Testing Numbers: + String[] hexNums = {"1", "A1", "ef", "BA", "AA", "BB", "19", "01", "02", "03", "04"}; + HexaDecimalToBinary objConvert = new HexaDecimalToBinary(); - for (String num : hexNums) { - objConvert.convert(num); - } + for (String num : hexNums) { + objConvert.convert(num); } + } } diff --git a/Conversions/HexaDecimalToDecimal.java b/Conversions/HexaDecimalToDecimal.java index 14b0d94d76c2..d85177b791bb 100644 --- a/Conversions/HexaDecimalToDecimal.java +++ b/Conversions/HexaDecimalToDecimal.java @@ -4,37 +4,36 @@ public class HexaDecimalToDecimal { - // convert hexadecimal to decimal - public static int getHexaToDec(String hex) { - String digits = "0123456789ABCDEF"; - hex = hex.toUpperCase(); - int val = 0; - for (int i = 0; i < hex.length(); i++) { - int d = digits.indexOf(hex.charAt(i)); - val = 16 * val + d; - } - return val; + // convert hexadecimal to decimal + public static int getHexaToDec(String hex) { + String digits = "0123456789ABCDEF"; + hex = hex.toUpperCase(); + int val = 0; + for (int i = 0; i < hex.length(); i++) { + int d = digits.indexOf(hex.charAt(i)); + val = 16 * val + d; } + return val; + } - // Main method gets the hexadecimal input from user and converts it into Decimal output. - - public static void main(String args[]) { - String hexa_Input; - int dec_output; - Scanner scan = new Scanner(System.in); + // Main method gets the hexadecimal input from user and converts it into Decimal output. - System.out.print("Enter Hexadecimal Number : "); - hexa_Input = scan.nextLine(); + public static void main(String args[]) { + String hexa_Input; + int dec_output; + Scanner scan = new Scanner(System.in); - // convert hexadecimal to decimal + System.out.print("Enter Hexadecimal Number : "); + hexa_Input = scan.nextLine(); - dec_output = getHexaToDec(hexa_Input); - /* - Pass the string to the getHexaToDec function - and it returns the decimal form in the variable dec_output. - */ - System.out.println("Number in Decimal: " + dec_output); - scan.close(); + // convert hexadecimal to decimal - } + dec_output = getHexaToDec(hexa_Input); + /* + Pass the string to the getHexaToDec function + and it returns the decimal form in the variable dec_output. + */ + System.out.println("Number in Decimal: " + dec_output); + scan.close(); + } } diff --git a/Conversions/IntegerToRoman.java b/Conversions/IntegerToRoman.java index 8886ef4ad016..5c039a0f026e 100644 --- a/Conversions/IntegerToRoman.java +++ b/Conversions/IntegerToRoman.java @@ -3,47 +3,37 @@ /** * Converting Integers into Roman Numerals * - *('I', 1); - *('IV',4); - *('V', 5); - *('IV',9); - *('X', 10); - *('XL',40; - *('L', 50); - *('XC',90); - *('C', 100); - *('D', 500); - *('M', 1000); - * + *

('I', 1); ('IV',4); ('V', 5); ('IV',9); ('X', 10); ('XL',40; ('L', 50); ('XC',90); ('C', 100); + * ('D', 500); ('M', 1000); */ - - public class IntegerToRoman { - private static int[] allArabianRomanNumbers = new int[]{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; - private static String[] allRomanNumbers = new String[]{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; - - //Value must be > 0 + private static int[] allArabianRomanNumbers = + new int[] {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; + private static String[] allRomanNumbers = + new String[] {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; - public static String integerToRoman(int num) { - if (num <= 0) { - return ""; - } + // Value must be > 0 - StringBuilder builder = new StringBuilder(); + public static String integerToRoman(int num) { + if (num <= 0) { + return ""; + } - for (int a = 0; a < allArabianRomanNumbers.length; a++) { - int times = num / allArabianRomanNumbers[a]; - for (int b = 0; b < times; b++) { - builder.append(allRomanNumbers[a]); - } + StringBuilder builder = new StringBuilder(); - num -= times * allArabianRomanNumbers[a]; - } + for (int a = 0; a < allArabianRomanNumbers.length; a++) { + int times = num / allArabianRomanNumbers[a]; + for (int b = 0; b < times; b++) { + builder.append(allRomanNumbers[a]); + } - return builder.toString(); + num -= times * allArabianRomanNumbers[a]; } - public static void main(String[] args) { - System.out.println(IntegerToRoman.integerToRoman(2131)); - } + return builder.toString(); + } + + public static void main(String[] args) { + System.out.println(IntegerToRoman.integerToRoman(2131)); + } } diff --git a/Conversions/OctalToDecimal.java b/Conversions/OctalToDecimal.java index 3b8c996bc200..1f3ad662a3bc 100644 --- a/Conversions/OctalToDecimal.java +++ b/Conversions/OctalToDecimal.java @@ -4,46 +4,42 @@ /** * Converts any Octal Number to a Decimal Number - * - * @author Zachary Jones * + * @author Zachary Jones */ public class OctalToDecimal { - /** - * Main method - * - * @param args - * Command line arguments - */ - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - System.out.print("Octal Input: "); - String inputOctal = sc.nextLine(); - int result = convertOctalToDecimal(inputOctal); - if (result != -1) - System.out.println("Result convertOctalToDecimal : " + result); - sc.close(); - } + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + System.out.print("Octal Input: "); + String inputOctal = sc.nextLine(); + int result = convertOctalToDecimal(inputOctal); + if (result != -1) System.out.println("Result convertOctalToDecimal : " + result); + sc.close(); + } - /** - * This method converts an octal number to a decimal number. - * - * @param inputOctal - * The octal number - * @return The decimal number - */ - public static int convertOctalToDecimal(String inputOctal) { + /** + * This method converts an octal number to a decimal number. + * + * @param inputOctal The octal number + * @return The decimal number + */ + public static int convertOctalToDecimal(String inputOctal) { - try { - // Actual conversion of Octal to Decimal: - Integer outputDecimal = Integer.parseInt(inputOctal, 8); - return outputDecimal; - } catch (NumberFormatException ne) { - // Printing a warning message if the input is not a valid octal - // number: - System.out.println("Invalid Input, Expecting octal number 0-7"); - return -1; - } - } -} \ No newline at end of file + try { + // Actual conversion of Octal to Decimal: + Integer outputDecimal = Integer.parseInt(inputOctal, 8); + return outputDecimal; + } catch (NumberFormatException ne) { + // Printing a warning message if the input is not a valid octal + // number: + System.out.println("Invalid Input, Expecting octal number 0-7"); + return -1; + } + } +} diff --git a/Conversions/OctalToHexadecimal.java b/Conversions/OctalToHexadecimal.java index 4f15c488237b..4035ada70432 100644 --- a/Conversions/OctalToHexadecimal.java +++ b/Conversions/OctalToHexadecimal.java @@ -9,57 +9,54 @@ */ public class OctalToHexadecimal { - /** - * This method converts a Octal number to a decimal number - * - * @param s The Octal Number - * @return The Decimal number - */ - public static int octToDec(String s) { - int i = 0; - for (int j = 0; j < s.length(); j++) { - char num = s.charAt(j); - num -= '0'; - i *= 8; - i += num; - } - return i; + /** + * This method converts a Octal number to a decimal number + * + * @param s The Octal Number + * @return The Decimal number + */ + public static int octToDec(String s) { + int i = 0; + for (int j = 0; j < s.length(); j++) { + char num = s.charAt(j); + num -= '0'; + i *= 8; + i += num; } - - /** - * This method converts a Decimal number to a Hexadecimal number - * - * @param d The Decimal Number - * @return The Hexadecimal number - */ - public static String decimalToHex(int d) { - String digits = "0123456789ABCDEF"; - if (d <= 0) - return "0"; - String hex = ""; - while (d > 0) { - int digit = d % 16; - hex = digits.charAt(digit) + hex; - d = d / 16; - } - return hex; + return i; + } + + /** + * This method converts a Decimal number to a Hexadecimal number + * + * @param d The Decimal Number + * @return The Hexadecimal number + */ + public static String decimalToHex(int d) { + String digits = "0123456789ABCDEF"; + if (d <= 0) return "0"; + String hex = ""; + while (d > 0) { + int digit = d % 16; + hex = digits.charAt(digit) + hex; + d = d / 16; } + return hex; + } + public static void main(String args[]) { - public static void main(String args[]) { - - Scanner input = new Scanner(System.in); - System.out.print("Enter the Octal number: "); - // Take octal number as input from user in a string - String oct = input.next(); + Scanner input = new Scanner(System.in); + System.out.print("Enter the Octal number: "); + // Take octal number as input from user in a string + String oct = input.next(); - // Pass the octal number to function and get converted deciaml form - int decimal = octToDec(oct); + // Pass the octal number to function and get converted deciaml form + int decimal = octToDec(oct); - // Pass the decimla number to function and get converted Hex form of the number - String hex = decimalToHex(decimal); - System.out.println("The Hexadecimal equivalant is: " + hex); - input.close(); - } + // Pass the decimla number to function and get converted Hex form of the number + String hex = decimalToHex(decimal); + System.out.println("The Hexadecimal equivalant is: " + hex); + input.close(); + } } - diff --git a/Conversions/RomanToInteger.java b/Conversions/RomanToInteger.java index f66ab115ff1a..36a61e740a2a 100644 --- a/Conversions/RomanToInteger.java +++ b/Conversions/RomanToInteger.java @@ -4,63 +4,63 @@ public class RomanToInteger { - private static Map map = new HashMap() { - /** - * - */ + private static Map map = + new HashMap() { + /** */ private static final long serialVersionUID = 87605733047260530L; { - put('I', 1); - put('V', 5); - put('X', 10); - put('L', 50); - put('C', 100); - put('D', 500); - put('M', 1000); - }}; - //Roman Number = Roman Numerals - - /** - * This function convert Roman number into Integer - * - * @param A Roman number string - * @return integer - */ - public static int romanToInt(String A) { + put('I', 1); + put('V', 5); + put('X', 10); + put('L', 50); + put('C', 100); + put('D', 500); + put('M', 1000); + } + }; + // Roman Number = Roman Numerals - A = A.toUpperCase(); - char prev = ' '; + /** + * This function convert Roman number into Integer + * + * @param A Roman number string + * @return integer + */ + public static int romanToInt(String A) { - int sum = 0; + A = A.toUpperCase(); + char prev = ' '; - int newPrev = 0; - for (int i = A.length() - 1; i >= 0; i--) { - char c = A.charAt(i); + int sum = 0; - if (prev != ' ') { - // checking current Number greater then previous or not - newPrev = map.get(prev) > newPrev ? map.get(prev) : newPrev; - } + int newPrev = 0; + for (int i = A.length() - 1; i >= 0; i--) { + char c = A.charAt(i); - int currentNum = map.get(c); + if (prev != ' ') { + // checking current Number greater then previous or not + newPrev = map.get(prev) > newPrev ? map.get(prev) : newPrev; + } - // if current number greater then prev max previous then add - if (currentNum >= newPrev) { - sum += currentNum; - } else { - // subtract upcoming number until upcoming number not greater then prev max - sum -= currentNum; - } + int currentNum = map.get(c); - prev = c; - } + // if current number greater then prev max previous then add + if (currentNum >= newPrev) { + sum += currentNum; + } else { + // subtract upcoming number until upcoming number not greater then prev max + sum -= currentNum; + } - return sum; + prev = c; } - public static void main(String[] args) { - int sum = romanToInt("MDCCCIV"); - System.out.println(sum); - } -} + return sum; + } + + public static void main(String[] args) { + int sum = romanToInt("MDCCCIV"); + System.out.println(sum); + } +} diff --git a/DataStructures/Bags/Bag.java b/DataStructures/Bags/Bag.java index 2fd17ed65b04..dc89a8a33027 100644 --- a/DataStructures/Bags/Bag.java +++ b/DataStructures/Bags/Bag.java @@ -10,117 +10,101 @@ */ public class Bag implements Iterable { - private Node firstElement; // first element of the bag - private int size; // size of bag - - private static class Node { - private Element content; - private Node nextElement; - } - - /** - * Create an empty bag - */ - public Bag() { - firstElement = null; - size = 0; + private Node firstElement; // first element of the bag + private int size; // size of bag + + private static class Node { + private Element content; + private Node nextElement; + } + + /** Create an empty bag */ + public Bag() { + firstElement = null; + size = 0; + } + + /** @return true if this bag is empty, false otherwise */ + public boolean isEmpty() { + return firstElement == null; + } + + /** @return the number of elements */ + public int size() { + return size; + } + + /** @param element - the element to add */ + public void add(Element element) { + Node oldfirst = firstElement; + firstElement = new Node<>(); + firstElement.content = element; + firstElement.nextElement = oldfirst; + size++; + } + + /** + * Checks if the bag contains a specific element + * + * @param element which you want to look for + * @return true if bag contains element, otherwise false + */ + public boolean contains(Element element) { + Iterator iterator = this.iterator(); + while (iterator.hasNext()) { + if (iterator.next().equals(element)) { + return true; + } } + return false; + } - /** - * @return true if this bag is empty, false otherwise - */ - public boolean isEmpty() { - return firstElement == null; - } + /** @return an iterator that iterates over the elements in this bag in arbitrary order */ + public Iterator iterator() { + return new ListIterator<>(firstElement); + } - /** - * @return the number of elements - */ - public int size() { - return size; - } + @SuppressWarnings("hiding") + private class ListIterator implements Iterator { + private Node currentElement; - /** - * @param element - the element to add - */ - public void add(Element element) { - Node oldfirst = firstElement; - firstElement = new Node<>(); - firstElement.content = element; - firstElement.nextElement = oldfirst; - size++; + public ListIterator(Node firstElement) { + currentElement = firstElement; } - /** - * Checks if the bag contains a specific element - * - * @param element which you want to look for - * @return true if bag contains element, otherwise false - */ - public boolean contains(Element element) { - Iterator iterator = this.iterator(); - while (iterator.hasNext()) { - if (iterator.next().equals(element)) { - return true; - } - } - return false; + public boolean hasNext() { + return currentElement != null; } - /** - * @return an iterator that iterates over the elements in this bag in arbitrary order - */ - public Iterator iterator() { - return new ListIterator<>(firstElement); + /** remove is not allowed in a bag */ + @Override + public void remove() { + throw new UnsupportedOperationException(); } - @SuppressWarnings("hiding") - private class ListIterator implements Iterator { - private Node currentElement; - - public ListIterator(Node firstElement) { - currentElement = firstElement; - } - - public boolean hasNext() { - return currentElement != null; - } - - /** - * remove is not allowed in a bag - */ - @Override - public void remove() { - throw new UnsupportedOperationException(); - } - - public Element next() { - if (!hasNext()) - throw new NoSuchElementException(); - Element element = currentElement.content; - currentElement = currentElement.nextElement; - return element; - } + public Element next() { + if (!hasNext()) throw new NoSuchElementException(); + Element element = currentElement.content; + currentElement = currentElement.nextElement; + return element; } + } - /** - * main-method for testing - */ - public static void main(String[] args) { - Bag bag = new Bag<>(); - - bag.add("1"); - bag.add("1"); - bag.add("2"); + /** main-method for testing */ + public static void main(String[] args) { + Bag bag = new Bag<>(); - System.out.println("size of bag = " + bag.size()); - for (String s : bag) { - System.out.println(s); - } + bag.add("1"); + bag.add("1"); + bag.add("2"); - System.out.println(bag.contains(null)); - System.out.println(bag.contains("1")); - System.out.println(bag.contains("3")); + System.out.println("size of bag = " + bag.size()); + for (String s : bag) { + System.out.println(s); } + System.out.println(bag.contains(null)); + System.out.println(bag.contains("1")); + System.out.println(bag.contains("3")); + } } diff --git a/DataStructures/Buffers/CircularBuffer.java b/DataStructures/Buffers/CircularBuffer.java index a723f693089c..5c0304dbd366 100644 --- a/DataStructures/Buffers/CircularBuffer.java +++ b/DataStructures/Buffers/CircularBuffer.java @@ -4,129 +4,127 @@ import java.util.concurrent.atomic.AtomicInteger; public class CircularBuffer { - private char[] _buffer; - public final int _buffer_size; - private int _write_index = 0; - private int _read_index = 0; - private AtomicInteger _readable_data = new AtomicInteger(0); - - public CircularBuffer(int buffer_size) { - if (!IsPowerOfTwo(buffer_size)) { - throw new IllegalArgumentException(); - } - this._buffer_size = buffer_size; - _buffer = new char[buffer_size]; + private char[] _buffer; + public final int _buffer_size; + private int _write_index = 0; + private int _read_index = 0; + private AtomicInteger _readable_data = new AtomicInteger(0); + + public CircularBuffer(int buffer_size) { + if (!IsPowerOfTwo(buffer_size)) { + throw new IllegalArgumentException(); } + this._buffer_size = buffer_size; + _buffer = new char[buffer_size]; + } - private boolean IsPowerOfTwo(int i) { - return (i & (i - 1)) == 0; - } + private boolean IsPowerOfTwo(int i) { + return (i & (i - 1)) == 0; + } - private int getTrueIndex(int i) { - return i % _buffer_size; - } + private int getTrueIndex(int i) { + return i % _buffer_size; + } - - public Character readOutChar() { - Character result = null; - - - //if we have data to read - if (_readable_data.get() > 0) { - - result = Character.valueOf(_buffer[getTrueIndex(_read_index)]); - _readable_data.decrementAndGet(); - _read_index++; - } + public Character readOutChar() { + Character result = null; - return result; + // if we have data to read + if (_readable_data.get() > 0) { + + result = Character.valueOf(_buffer[getTrueIndex(_read_index)]); + _readable_data.decrementAndGet(); + _read_index++; } - public boolean writeToCharBuffer(char c) { - boolean result = false; + return result; + } - //if we can write to the buffer - if (_readable_data.get() < _buffer_size) { - //write to buffer - _buffer[getTrueIndex(_write_index)] = c; - _readable_data.incrementAndGet(); - _write_index++; - result = true; - } + public boolean writeToCharBuffer(char c) { + boolean result = false; - return result; + // if we can write to the buffer + if (_readable_data.get() < _buffer_size) { + // write to buffer + _buffer[getTrueIndex(_write_index)] = c; + _readable_data.incrementAndGet(); + _write_index++; + result = true; } - private static class TestWriteWorker implements Runnable { - String _alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"; - Random _random = new Random(); - CircularBuffer _buffer; - - public TestWriteWorker(CircularBuffer cb) { - this._buffer = cb; - } + return result; + } - private char getRandomChar() { - return _alphabet.charAt(_random.nextInt(_alphabet.length())); - } + private static class TestWriteWorker implements Runnable { + String _alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"; + Random _random = new Random(); + CircularBuffer _buffer; - public void run() { - while (!Thread.interrupted()) { - if (!_buffer.writeToCharBuffer(getRandomChar())) { - Thread.yield(); - try { - Thread.sleep(10); - } catch (InterruptedException e) { - return; - } - } - } - } + public TestWriteWorker(CircularBuffer cb) { + this._buffer = cb; } - private static class TestReadWorker implements Runnable { - CircularBuffer _buffer; - - public TestReadWorker(CircularBuffer cb) { - this._buffer = cb; - } + private char getRandomChar() { + return _alphabet.charAt(_random.nextInt(_alphabet.length())); + } - @Override - public void run() { - System.out.println("Printing Buffer:"); - while (!Thread.interrupted()) { - Character c = _buffer.readOutChar(); - if (c != null) { - System.out.print(c.charValue()); - } else { - Thread.yield(); - try { - Thread.sleep(10); - } catch (InterruptedException e) { - System.out.println(); - return; - } - } - } + public void run() { + while (!Thread.interrupted()) { + if (!_buffer.writeToCharBuffer(getRandomChar())) { + Thread.yield(); + try { + Thread.sleep(10); + } catch (InterruptedException e) { + return; + } } + } } + } - public static void main(String[] args) throws InterruptedException { - int buffer_size = 1024; - //create circular buffer - CircularBuffer cb = new CircularBuffer(buffer_size); - - //create threads that read and write the buffer. - Thread write_thread = new Thread(new TestWriteWorker(cb)); - Thread read_thread = new Thread(new TestReadWorker(cb)); - read_thread.start(); - write_thread.start(); + private static class TestReadWorker implements Runnable { + CircularBuffer _buffer; - //wait some amount of time - Thread.sleep(10000); + public TestReadWorker(CircularBuffer cb) { + this._buffer = cb; + } - //interrupt threads and exit - write_thread.interrupt(); - read_thread.interrupt(); + @Override + public void run() { + System.out.println("Printing Buffer:"); + while (!Thread.interrupted()) { + Character c = _buffer.readOutChar(); + if (c != null) { + System.out.print(c.charValue()); + } else { + Thread.yield(); + try { + Thread.sleep(10); + } catch (InterruptedException e) { + System.out.println(); + return; + } + } + } } + } + + public static void main(String[] args) throws InterruptedException { + int buffer_size = 1024; + // create circular buffer + CircularBuffer cb = new CircularBuffer(buffer_size); + + // create threads that read and write the buffer. + Thread write_thread = new Thread(new TestWriteWorker(cb)); + Thread read_thread = new Thread(new TestReadWorker(cb)); + read_thread.start(); + write_thread.start(); + + // wait some amount of time + Thread.sleep(10000); + + // interrupt threads and exit + write_thread.interrupt(); + read_thread.interrupt(); + } } diff --git a/DataStructures/DynamicArray/DynamicArray.java b/DataStructures/DynamicArray/DynamicArray.java index f016448729fa..d095627c6cdf 100644 --- a/DataStructures/DynamicArray/DynamicArray.java +++ b/DataStructures/DynamicArray/DynamicArray.java @@ -7,202 +7,210 @@ /** * This class implements a dynamic array + * * @param the type that each index of the array will hold */ public class DynamicArray implements Iterable { - private int capacity; - private int size; - private Object[] elements; - - /** - * constructor - * @param capacity the starting length of the desired array - */ - public DynamicArray(final int capacity) { - this.size = 0; - this.capacity = capacity; - this.elements = new Object[this.capacity]; - } + private int capacity; + private int size; + private Object[] elements; + + /** + * constructor + * + * @param capacity the starting length of the desired array + */ + public DynamicArray(final int capacity) { + this.size = 0; + this.capacity = capacity; + this.elements = new Object[this.capacity]; + } + + /** No-args constructor */ + public DynamicArray() { + this.size = 0; + this.capacity = 10; + this.elements = new Object[this.capacity]; + } + + /** + * Doubles the capacity of the array + * + * @return int the new capacity of the array + */ + public int newCapacity() { + this.capacity *= 2; + // changed from this.capacity <<= 1; now much easier to understand + return this.capacity; + } + + /** + * Adds an element to the array If full, creates a copy array twice the size of the current one + * + * @param element the element of type to be added to the array + */ + public void add(final E element) { + if (this.size == this.elements.length) { + this.elements = Arrays.copyOf(this.elements, newCapacity()); + } + + this.elements[this.size] = element; + size++; + } + + /** + * Places element of type at the desired index + * + * @param index the index for the element to be placed + * @param element the element to be inserted + */ + public void put(final int index, E element) { + this.elements[index] = element; + } + + /** + * get method for element at a given index returns null if the index is empty + * + * @param index the desired index of the element + * @return the element at the specified index + */ + public E get(final int index) { + return getElement(index); + } + + /** + * Removes an element from the array + * + * @param index the index of the element to be removed + * @return the element removed + */ + public E remove(final int index) { + final E oldElement = getElement(index); + fastRemove(this.elements, index); + + return oldElement; + } + + /** + * get method for size field + * + * @return int size + */ + public int getSize() { + return this.size; + } + + /** + * isEmpty helper method + * + * @return boolean true if the array contains no elements, false otherwise + */ + public boolean isEmpty() { + return this.size == 0; + } + + public Stream stream() { + return StreamSupport.stream(spliterator(), false); + } + + private void fastRemove(final Object[] elements, final int index) { + final int newSize = this.size - 1; + + if (newSize > index) { + System.arraycopy(elements, index + 1, elements, index, newSize - index); + } + + elements[this.size = newSize] = null; + } + + private E getElement(final int index) { + return (E) this.elements[index]; + } + + /** + * returns a String representation of this object + * + * @return String a String representing the array + */ + @Override + public String toString() { + return Arrays.toString(Arrays.stream(this.elements).filter(Objects::nonNull).toArray()); + } + + /** + * Creates and returns a new Dynamic Array Iterator + * + * @return Iterator a Dynamic Array Iterator + */ + @Override + public Iterator iterator() { + return new DynamicArrayIterator(); + } + + private class DynamicArrayIterator implements Iterator { + + private int cursor; - /** - * No-args constructor - */ - public DynamicArray() { - this.size = 0; - this.capacity = 10; - this.elements = new Object[this.capacity]; + @Override + public boolean hasNext() { + return this.cursor != size; } - /** - * Doubles the capacity of the array - * @return int the new capacity of the array - */ - public int newCapacity() { - this.capacity *= 2; - //changed from this.capacity <<= 1; now much easier to understand - return this.capacity; - } + @Override + public E next() { + if (this.cursor > DynamicArray.this.size) throw new NoSuchElementException(); - /** - * Adds an element to the array - * If full, creates a copy array twice the size of the current one - * @param element the element of type to be added to the array - */ - public void add(final E element) { - if (this.size == this.elements.length) { - this.elements = Arrays.copyOf(this.elements, newCapacity()); - } - - this.elements[this.size] = element; - size++; - } - - /** - * Places element of type at the desired index - * @param index the index for the element to be placed - * @param element the element to be inserted - */ - public void put(final int index, E element) { - this.elements[index] = element; - } + if (this.cursor > DynamicArray.this.elements.length) + throw new ConcurrentModificationException(); - /** - * get method for element at a given index - * returns null if the index is empty - * @param index the desired index of the element - * @return the element at the specified index - */ - public E get(final int index) { - return getElement(index); - } - - /** - * Removes an element from the array - * @param index the index of the element to be removed - * @return the element removed - */ - public E remove(final int index) { - final E oldElement = getElement(index); - fastRemove(this.elements, index); - - return oldElement; - } - - /** - * get method for size field - * @return int size - */ - public int getSize() { - return this.size; - } + final E element = DynamicArray.this.getElement(this.cursor); + this.cursor++; - /** - * isEmpty helper method - * @return boolean true if the array contains no elements, false otherwise - */ - public boolean isEmpty() { - return this.size == 0; + return element; } - - public Stream stream() { - return StreamSupport.stream(spliterator(), false); - } - - private void fastRemove(final Object[] elements, final int index) { - final int newSize = this.size - 1; - if (newSize > index) { - System.arraycopy(elements, index + 1, elements, index, newSize - index); - } - - elements[this.size = newSize] = null; - } + @Override + public void remove() { + if (this.cursor < 0) throw new IllegalStateException(); - private E getElement(final int index) { - return (E) this.elements[index]; + DynamicArray.this.remove(this.cursor); + this.cursor--; } - /** - * returns a String representation of this object - * @return String a String representing the array - */ @Override - public String toString() { - return Arrays.toString(Arrays.stream(this.elements).filter(Objects::nonNull).toArray()); - } + public void forEachRemaining(Consumer action) { + Objects.requireNonNull(action); - /** - * Creates and returns a new Dynamic Array Iterator - * @return Iterator a Dynamic Array Iterator - */ - @Override - public Iterator iterator() { - return new DynamicArrayIterator(); + for (int i = 0; i < DynamicArray.this.size; i++) { + action.accept(DynamicArray.this.getElement(i)); + } } + } - private class DynamicArrayIterator implements Iterator { - - private int cursor; - - @Override - public boolean hasNext() { - return this.cursor != size; - } - - @Override - public E next() { - if (this.cursor > DynamicArray.this.size) throw new NoSuchElementException(); - - if (this.cursor > DynamicArray.this.elements.length) throw new ConcurrentModificationException(); - - final E element = DynamicArray.this.getElement(this.cursor); - this.cursor++; + /** + * This class is the driver for the DynamicArray class it tests a variety of methods and prints + * the output + */ + public static void main(String[] args) { + DynamicArray names = new DynamicArray<>(); + names.add("Peubes"); + names.add("Marley"); - return element; - } - - @Override - public void remove() { - if (this.cursor < 0) throw new IllegalStateException(); - - DynamicArray.this.remove(this.cursor); - this.cursor--; - } - - @Override - public void forEachRemaining(Consumer action) { - Objects.requireNonNull(action); - - for (int i = 0; i < DynamicArray.this.size; i++) { - action.accept(DynamicArray.this.getElement(i)); - } - } + for (String name : names) { + System.out.println(name); } - /** - * This class is the driver for the DynamicArray class - * it tests a variety of methods and prints the output - */ - public static void main(String[] args) { - DynamicArray names = new DynamicArray<>(); - names.add("Peubes"); - names.add("Marley"); - - for (String name : names) { - System.out.println(name); - } - - names.stream().forEach(System.out::println); + names.stream().forEach(System.out::println); - System.out.println(names); + System.out.println(names); - System.out.println(names.getSize()); + System.out.println(names.getSize()); - names.remove(0); + names.remove(0); - for (String name : names) { - System.out.println(name); - } + for (String name : names) { + System.out.println(name); } + } } diff --git a/DataStructures/Graphs/A_Star.java b/DataStructures/Graphs/A_Star.java index 9fa92ce32118..09a809a30938 100644 --- a/DataStructures/Graphs/A_Star.java +++ b/DataStructures/Graphs/A_Star.java @@ -8,152 +8,172 @@ public class A_Star { - private static class Graph { - //Graph's structure can be changed only applying changes to this class. - private ArrayList [] graph; - - //Initialise ArrayLists in Constructor - public Graph(int size) { - this.graph = new ArrayList[size]; - for (int i = 0; i < size; i++) { - this.graph[i] = new ArrayList<>(); - } - } - - private ArrayList getNeighbours(int from) { return this.graph[from]; } - - //Graph is bidirectional, for just one direction remove second instruction of this method. - private void addEdge (Edge edge) { - this.graph[edge.getFrom()].add(new Edge(edge.getFrom(), edge.getTo(), edge.getWeight())); - this.graph[edge.getTo()].add(new Edge(edge.getTo(), edge.getFrom(), edge.getWeight())); - } + private static class Graph { + // Graph's structure can be changed only applying changes to this class. + private ArrayList[] graph; + + // Initialise ArrayLists in Constructor + public Graph(int size) { + this.graph = new ArrayList[size]; + for (int i = 0; i < size; i++) { + this.graph[i] = new ArrayList<>(); + } } - private static class Edge { - private int from; - private int to; - private int weight; - - public Edge(int from, int to, int weight) { - this.from = from; - this.to = to; - this.weight = weight; - } - - public int getFrom() { return from; } - - public int getTo() { return to; } - - public int getWeight() { return weight; } + private ArrayList getNeighbours(int from) { + return this.graph[from]; } - //class to iterate during the algorithm execution, and also used to return the solution. - private static class PathAndDistance { - private int distance; //distance advanced so far. - private ArrayList path; //list of visited nodes in this path. - private int estimated; //heuristic value associated to the last node od the path (current node). - - public PathAndDistance(int distance, ArrayList path, int estimated) { - this.distance = distance; - this.path = path; - this.estimated = estimated; - } + // Graph is bidirectional, for just one direction remove second instruction of this method. + private void addEdge(Edge edge) { + this.graph[edge.getFrom()].add(new Edge(edge.getFrom(), edge.getTo(), edge.getWeight())); + this.graph[edge.getTo()].add(new Edge(edge.getTo(), edge.getFrom(), edge.getWeight())); + } + } - public int getDistance() { return distance; } + private static class Edge { + private int from; + private int to; + private int weight; - public ArrayList getPath() { return path; } + public Edge(int from, int to, int weight) { + this.from = from; + this.to = to; + this.weight = weight; + } - public int getEstimated() { return estimated; } + public int getFrom() { + return from; + } - private void printSolution () { - if (this.path != null) - System.out.println("Optimal path: " + this.path.toString() + - ", distance: " + this.distance); - else - System.out.println("There is no path available to connect the points"); - } + public int getTo() { + return to; } - private static void initializeGraph(Graph graph, ArrayList data) { - for (int i = 0; i < data.size(); i+=4) { - graph.addEdge(new Edge(data.get(i), data.get(i + 1), data.get(i + 2))); - } - /* - .x. node - (y) cost - - or | or / bidirectional connection - - ( 98)- .7. -(86)- .4. - | - ( 85)- .17. -(142)- .18. -(92)- .8. -(87)- .11. - | - . 1. -------------------- (160) - | \ | - (211) \ .6. - | \ | - . 5. (101)-.13. -(138) (115) - | | | / - ( 99) ( 97) | / - | | | / - .12. -(151)- .15. -(80)- .14. | / - | | | | / - ( 71) (140) (146)- .2. -(120) - | | | - .19. -( 75)- . 0. .10. -(75)- .3. - | | - (118) ( 70) - | | - .16. -(111)- .9. - */ + public int getWeight() { + return weight; + } + } + + // class to iterate during the algorithm execution, and also used to return the solution. + private static class PathAndDistance { + private int distance; // distance advanced so far. + private ArrayList path; // list of visited nodes in this path. + private int + estimated; // heuristic value associated to the last node od the path (current node). + + public PathAndDistance(int distance, ArrayList path, int estimated) { + this.distance = distance; + this.path = path; + this.estimated = estimated; } - public static void main(String[] args) { - //heuristic function optimistic values - int[] heuristic = {366, 0, 160, 242, 161, 178, 77, 151, 226, - 244, 241, 234, 380, 98, 193, 253, 329, 80, 199, 374}; + public int getDistance() { + return distance; + } - Graph graph = new Graph(20); - ArrayList graphData = new ArrayList<>(Arrays.asList(0, 19, 75, null, - 0, 15, 140, null, 0, 16, 118, null, 19, 12, 71, null, 12, 15, 151, null, - 16, 9, 111, null, 9, 10, 70, null, 10, 3, 75, null, 3, 2, 120, null, - 2, 14, 146, null, 2, 13, 138, null, 2, 6, 115, null, 15, 14, 80, null, - 15, 5, 99, null, 14, 13, 97, null, 5, 1, 211, null, 13, 1, 101, null, - 6, 1, 160, null, 1, 17, 85, null, 17, 7, 98, null, 7, 4, 86, null, - 17, 18, 142, null, 18, 8, 92, null, 8, 11, 87)); - initializeGraph(graph, graphData); + public ArrayList getPath() { + return path; + } - PathAndDistance solution = aStar(3, 1, graph, heuristic); - solution.printSolution(); + public int getEstimated() { + return estimated; + } + private void printSolution() { + if (this.path != null) + System.out.println( + "Optimal path: " + this.path.toString() + ", distance: " + this.distance); + else System.out.println("There is no path available to connect the points"); } + } - public static PathAndDistance aStar(int from, int to, Graph graph, int[] heuristic) { - //nodes are prioritised by the less value of the current distance of their paths, and the estimated value - //given by the heuristic function to reach the destination point from the current point. - PriorityQueue queue = new PriorityQueue<> - (Comparator.comparingInt(a -> (a.getDistance() + a.getEstimated()))); - - //dummy data to start the algorithm from the beginning point - queue.add(new PathAndDistance(0, new ArrayList<>(Arrays.asList(from)), 0)); - - boolean solutionFound = false; - PathAndDistance currentData = new PathAndDistance(-1, null, -1); - while (!queue.isEmpty() && !solutionFound) { - currentData = queue.poll(); //first in the queue, best node so keep exploring. - int currentPosition = currentData.getPath().get(currentData.getPath().size() - 1); //current node. - if (currentPosition == to) - solutionFound = true; - else - for (Edge edge : graph.getNeighbours(currentPosition)) - if (!currentData.getPath().contains(edge.getTo())) { //Avoid Cycles - ArrayList updatedPath = new ArrayList<>(currentData.getPath()); - updatedPath.add(edge.getTo()); //Add the new node to the path, update the distance, - // and the heuristic function value associated to that path. - queue.add(new PathAndDistance(currentData.getDistance() + edge.getWeight(), - updatedPath, heuristic[edge.getTo()])); - } - } - return (solutionFound) ? currentData : new PathAndDistance(-1, null, -1); - //Out of while loop, if there is a solution, the current Data stores the optimal path, and its distance + private static void initializeGraph(Graph graph, ArrayList data) { + for (int i = 0; i < data.size(); i += 4) { + graph.addEdge(new Edge(data.get(i), data.get(i + 1), data.get(i + 2))); + } + /* + .x. node + (y) cost + - or | or / bidirectional connection + + ( 98)- .7. -(86)- .4. + | + ( 85)- .17. -(142)- .18. -(92)- .8. -(87)- .11. + | + . 1. -------------------- (160) + | \ | + (211) \ .6. + | \ | + . 5. (101)-.13. -(138) (115) + | | | / + ( 99) ( 97) | / + | | | / + .12. -(151)- .15. -(80)- .14. | / + | | | | / + ( 71) (140) (146)- .2. -(120) + | | | + .19. -( 75)- . 0. .10. -(75)- .3. + | | + (118) ( 70) + | | + .16. -(111)- .9. + */ + } + + public static void main(String[] args) { + // heuristic function optimistic values + int[] heuristic = { + 366, 0, 160, 242, 161, 178, 77, 151, 226, 244, 241, 234, 380, 98, 193, 253, 329, 80, 199, 374 + }; + + Graph graph = new Graph(20); + ArrayList graphData = + new ArrayList<>( + Arrays.asList( + 0, 19, 75, null, 0, 15, 140, null, 0, 16, 118, null, 19, 12, 71, null, 12, 15, 151, + null, 16, 9, 111, null, 9, 10, 70, null, 10, 3, 75, null, 3, 2, 120, null, 2, 14, + 146, null, 2, 13, 138, null, 2, 6, 115, null, 15, 14, 80, null, 15, 5, 99, null, 14, + 13, 97, null, 5, 1, 211, null, 13, 1, 101, null, 6, 1, 160, null, 1, 17, 85, null, + 17, 7, 98, null, 7, 4, 86, null, 17, 18, 142, null, 18, 8, 92, null, 8, 11, 87)); + initializeGraph(graph, graphData); + + PathAndDistance solution = aStar(3, 1, graph, heuristic); + solution.printSolution(); + } + + public static PathAndDistance aStar(int from, int to, Graph graph, int[] heuristic) { + // nodes are prioritised by the less value of the current distance of their paths, and the + // estimated value + // given by the heuristic function to reach the destination point from the current point. + PriorityQueue queue = + new PriorityQueue<>(Comparator.comparingInt(a -> (a.getDistance() + a.getEstimated()))); + + // dummy data to start the algorithm from the beginning point + queue.add(new PathAndDistance(0, new ArrayList<>(Arrays.asList(from)), 0)); + + boolean solutionFound = false; + PathAndDistance currentData = new PathAndDistance(-1, null, -1); + while (!queue.isEmpty() && !solutionFound) { + currentData = queue.poll(); // first in the queue, best node so keep exploring. + int currentPosition = + currentData.getPath().get(currentData.getPath().size() - 1); // current node. + if (currentPosition == to) solutionFound = true; + else + for (Edge edge : graph.getNeighbours(currentPosition)) + if (!currentData.getPath().contains(edge.getTo())) { // Avoid Cycles + ArrayList updatedPath = new ArrayList<>(currentData.getPath()); + updatedPath.add(edge.getTo()); // Add the new node to the path, update the distance, + // and the heuristic function value associated to that path. + queue.add( + new PathAndDistance( + currentData.getDistance() + edge.getWeight(), + updatedPath, + heuristic[edge.getTo()])); + } } + return (solutionFound) ? currentData : new PathAndDistance(-1, null, -1); + // Out of while loop, if there is a solution, the current Data stores the optimal path, and its + // distance + } } diff --git a/DataStructures/Graphs/BellmanFord.java b/DataStructures/Graphs/BellmanFord.java index 41c89bb020ee..841277a3a1bf 100644 --- a/DataStructures/Graphs/BellmanFord.java +++ b/DataStructures/Graphs/BellmanFord.java @@ -1,161 +1,161 @@ package DataStructures.Graphs; import java.util.*; + class BellmanFord -/*Implementation of Bellman ford to detect negative cycles. Graph accepts inputs in form of edges which have +/*Implementation of Bellman ford to detect negative cycles. Graph accepts inputs in form of edges which have start vertex, end vertes and weights. Vertices should be labelled with a number between 0 and total number of vertices-1,both inclusive*/ { - int vertex,edge; - private Edge edges[]; - private int index=0; - BellmanFord(int v,int e) - { - vertex=v; - edge=e; - edges=new Edge[e]; - } - class Edge - { - int u,v; - int w; - /** - *@param u Source Vertex - * @param v End vertex - * @param c Weight - */ - public Edge(int a,int b,int c) - { - u=a; - v=b; - w=c; - } - } + int vertex, edge; + private Edge edges[]; + private int index = 0; + + BellmanFord(int v, int e) { + vertex = v; + edge = e; + edges = new Edge[e]; + } + + class Edge { + int u, v; + int w; /** - * @param p[] Parent array which shows updates in edges - * @param i Current vertex under consideration + * @param u Source Vertex + * @param v End vertex + * @param c Weight */ - void printPath(int p[],int i) - { - if(p[i]==-1)//Found the path back to parent - return; - printPath(p,p[i]); - System.out.print(i+" "); + public Edge(int a, int b, int c) { + u = a; + v = b; + w = c; } - public static void main(String args[]) - { - BellmanFord obj=new BellmanFord(0,0);//Dummy object to call nonstatic variables - obj.go(); + } + /** + * @param p[] Parent array which shows updates in edges + * @param i Current vertex under consideration + */ + void printPath(int p[], int i) { + if (p[i] == -1) // Found the path back to parent + return; + printPath(p, p[i]); + System.out.print(i + " "); + } + + public static void main(String args[]) { + BellmanFord obj = new BellmanFord(0, 0); // Dummy object to call nonstatic variables + obj.go(); + } + + public void + go() // Interactive run for understanding the class first time. Assumes source vertex is 0 and + // shows distaance to all vertices + { + Scanner sc = new Scanner(System.in); // Grab scanner object for user input + int i, v, e, u, ve, w, j, neg = 0; + System.out.println("Enter no. of vertices and edges please"); + v = sc.nextInt(); + e = sc.nextInt(); + Edge arr[] = new Edge[e]; // Array of edges + System.out.println("Input edges"); + for (i = 0; i < e; i++) { + u = sc.nextInt(); + ve = sc.nextInt(); + w = sc.nextInt(); + arr[i] = new Edge(u, ve, w); } - public void go()//Interactive run for understanding the class first time. Assumes source vertex is 0 and shows distaance to all vertices - { - Scanner sc=new Scanner(System.in);//Grab scanner object for user input - int i,v,e,u,ve,w,j,neg=0; - System.out.println("Enter no. of vertices and edges please"); - v=sc.nextInt(); - e=sc.nextInt(); - Edge arr[]=new Edge[e];//Array of edges - System.out.println("Input edges"); - for(i=0;i dist[arr[j].u] + arr[j].w) { + dist[arr[j].v] = dist[arr[j].u] + arr[j].w; // Update + p[arr[j].v] = arr[j].u; } - int dist[]=new int[v];//Distance array for holding the finalized shortest path distance between source and all vertices - int p[]=new int[v];//Parent array for holding the paths - for(i=0;idist[arr[j].u]+arr[j].w) - { - dist[arr[j].v]=dist[arr[j].u]+arr[j].w;//Update - p[arr[j].v]=arr[j].u; - } - } - } - //Final cycle for negative checking - for(j=0;jdist[arr[j].u]+arr[j].w) - { - neg=1; - System.out.println("Negative cycle"); - break; - } - if(neg==0)//Go ahead and show results of computaion - { - System.out.println("Distances are: "); - for(i=0;i dist[arr[j].u] + arr[j].w) { + neg = 1; + System.out.println("Negative cycle"); + break; + } + if (neg == 0) // Go ahead and show results of computaion { - int i,j,v=vertex,e=edge,neg=0; - double dist[]=new double[v];//Distance array for holding the finalized shortest path distance between source and all vertices - int p[]=new int[v];//Parent array for holding the paths - for(i=0;idist[arr[j].u]+arr[j].w) - { - dist[arr[j].v]=dist[arr[j].u]+arr[j].w;//Update - p[arr[j].v]=arr[j].u; - } - } - } - //Final cycle for negative checking - for(j=0;jdist[arr[j].u]+arr[j].w) - { - neg=1; - System.out.println("Negative cycle"); - break; - } - if(neg==0)//Go ahead and show results of computaion - { - System.out.println("Distance is: "+dist[end]); - System.out.println("Path followed:"); - System.out.print(source+" "); - printPath(p,end); - System.out.println(); - } + System.out.println("Distances are: "); + for (i = 0; i < v; i++) System.out.println(i + " " + dist[i]); + System.out.println("Path followed:"); + for (i = 0; i < v; i++) { + System.out.print("0 "); + printPath(p, i); + System.out.println(); + } } - /** - *@param x Source Vertex - * @param y End vertex - * @param z Weight - */ - public void addEdge(int x,int y,int z)//Adds unidirectionl Edge - { - edges[index++]=new Edge(x,y,z); + sc.close(); + } + /** + * @param source Starting vertex + * @param end Ending vertex + * @param Edge Array of edges + */ + public void show( + int source, + int end, + Edge arr[]) // Just shows results of computation, if graph is passed to it. The graph should + // be created by using addEdge() method and passed by calling getEdgeArray() method + { + int i, j, v = vertex, e = edge, neg = 0; + double dist[] = + new double + [v]; // Distance array for holding the finalized shortest path distance between source + // and all vertices + int p[] = new int[v]; // Parent array for holding the paths + for (i = 0; i < v; i++) dist[i] = Integer.MAX_VALUE; // Initializing distance values + dist[source] = 0; + p[source] = -1; + for (i = 0; i < v - 1; i++) { + for (j = 0; j < e; j++) { + if ((int) dist[arr[j].u] != Integer.MAX_VALUE + && dist[arr[j].v] > dist[arr[j].u] + arr[j].w) { + dist[arr[j].v] = dist[arr[j].u] + arr[j].w; // Update + p[arr[j].v] = arr[j].u; + } + } } - public Edge[] getEdgeArray() + // Final cycle for negative checking + for (j = 0; j < e; j++) + if ((int) dist[arr[j].u] != Integer.MAX_VALUE && dist[arr[j].v] > dist[arr[j].u] + arr[j].w) { + neg = 1; + System.out.println("Negative cycle"); + break; + } + if (neg == 0) // Go ahead and show results of computaion { - return edges; + System.out.println("Distance is: " + dist[end]); + System.out.println("Path followed:"); + System.out.print(source + " "); + printPath(p, end); + System.out.println(); } -} \ No newline at end of file + } + /** + * @param x Source Vertex + * @param y End vertex + * @param z Weight + */ + public void addEdge(int x, int y, int z) // Adds unidirectionl Edge + { + edges[index++] = new Edge(x, y, z); + } + + public Edge[] getEdgeArray() { + return edges; + } +} diff --git a/DataStructures/Graphs/ConnectedComponent.java b/DataStructures/Graphs/ConnectedComponent.java index 4582bfd4406f..7f9403cadaec 100644 --- a/DataStructures/Graphs/ConnectedComponent.java +++ b/DataStructures/Graphs/ConnectedComponent.java @@ -11,131 +11,129 @@ */ class Graph> { - class Node { - E name; + class Node { + E name; - public Node(E name) { - this.name = name; - } + public Node(E name) { + this.name = name; } + } - class Edge { - Node startNode, endNode; + class Edge { + Node startNode, endNode; - public Edge(Node startNode, Node endNode) { - this.startNode = startNode; - this.endNode = endNode; - } + public Edge(Node startNode, Node endNode) { + this.startNode = startNode; + this.endNode = endNode; } - - ArrayList edgeList; - ArrayList nodeList; - - public Graph() { - edgeList = new ArrayList(); - nodeList = new ArrayList(); + } + + ArrayList edgeList; + ArrayList nodeList; + + public Graph() { + edgeList = new ArrayList(); + nodeList = new ArrayList(); + } + + /** + * Adds a new Edge to the graph. If the nodes aren't yet in nodeList, they will be added to it. + * + * @param startNode the starting Node from the edge + * @param endNode the ending Node from the edge + */ + public void addEdge(E startNode, E endNode) { + Node start = null, end = null; + for (Node node : nodeList) { + if (startNode.compareTo(node.name) == 0) { + start = node; + } else if (endNode.compareTo(node.name) == 0) { + end = node; + } } - - /** - * Adds a new Edge to the graph. If the nodes aren't yet in nodeList, they - * will be added to it. - * - * @param startNode the starting Node from the edge - * @param endNode the ending Node from the edge - */ - public void addEdge(E startNode, E endNode) { - Node start = null, end = null; - for (Node node : nodeList) { - if (startNode.compareTo(node.name) == 0) { - start = node; - } else if (endNode.compareTo(node.name) == 0) { - end = node; - } - } - if (start == null) { - start = new Node(startNode); - nodeList.add(start); - } - if (end == null) { - end = new Node(endNode); - nodeList.add(end); - } - - edgeList.add(new Edge(start, end)); + if (start == null) { + start = new Node(startNode); + nodeList.add(start); + } + if (end == null) { + end = new Node(endNode); + nodeList.add(end); } - /** - * Main method used for counting the connected components. Iterates through - * the array of nodes to do a depth first search to get all nodes of the - * graph from the actual node. These nodes are added to the array - * markedNodes and will be ignored if they are chosen in the nodeList. - * - * @return returns the amount of unconnected graphs - */ - public int countGraphs() { - int count = 0; - Set markedNodes = new HashSet(); - - for (Node n : nodeList) { - if (!markedNodes.contains(n)) { - markedNodes.add(n); - markedNodes.addAll(depthFirstSearch(n, new ArrayList())); - count++; - } - } - - return count; + edgeList.add(new Edge(start, end)); + } + + /** + * Main method used for counting the connected components. Iterates through the array of nodes to + * do a depth first search to get all nodes of the graph from the actual node. These nodes are + * added to the array markedNodes and will be ignored if they are chosen in the nodeList. + * + * @return returns the amount of unconnected graphs + */ + public int countGraphs() { + int count = 0; + Set markedNodes = new HashSet(); + + for (Node n : nodeList) { + if (!markedNodes.contains(n)) { + markedNodes.add(n); + markedNodes.addAll(depthFirstSearch(n, new ArrayList())); + count++; + } } - /** - * Implementation of depth first search. - * - * @param n the actual visiting node - * @param visited A list of already visited nodes in the depth first search - * @return returns a set of visited nodes - */ - public ArrayList depthFirstSearch(Node n, ArrayList visited) { - visited.add(n); - for (Edge e : edgeList) { - if (e.startNode.equals(n) && !visited.contains(e.endNode)) { - depthFirstSearch(e.endNode, visited); - } - } - return visited; + return count; + } + + /** + * Implementation of depth first search. + * + * @param n the actual visiting node + * @param visited A list of already visited nodes in the depth first search + * @return returns a set of visited nodes + */ + public ArrayList depthFirstSearch(Node n, ArrayList visited) { + visited.add(n); + for (Edge e : edgeList) { + if (e.startNode.equals(n) && !visited.contains(e.endNode)) { + depthFirstSearch(e.endNode, visited); + } } + return visited; + } } public class ConnectedComponent { - public static void main(String[] args) { - Graph graphChars = new Graph<>(); + public static void main(String[] args) { + Graph graphChars = new Graph<>(); - // Graph 1 - graphChars.addEdge('a', 'b'); - graphChars.addEdge('a', 'e'); - graphChars.addEdge('b', 'e'); - graphChars.addEdge('b', 'c'); - graphChars.addEdge('c', 'd'); - graphChars.addEdge('d', 'a'); + // Graph 1 + graphChars.addEdge('a', 'b'); + graphChars.addEdge('a', 'e'); + graphChars.addEdge('b', 'e'); + graphChars.addEdge('b', 'c'); + graphChars.addEdge('c', 'd'); + graphChars.addEdge('d', 'a'); - graphChars.addEdge('x', 'y'); - graphChars.addEdge('x', 'z'); + graphChars.addEdge('x', 'y'); + graphChars.addEdge('x', 'z'); - graphChars.addEdge('w', 'w'); + graphChars.addEdge('w', 'w'); - Graph graphInts = new Graph<>(); + Graph graphInts = new Graph<>(); - // Graph 2 - graphInts.addEdge(1, 2); - graphInts.addEdge(2, 3); - graphInts.addEdge(2, 4); - graphInts.addEdge(3, 5); + // Graph 2 + graphInts.addEdge(1, 2); + graphInts.addEdge(2, 3); + graphInts.addEdge(2, 4); + graphInts.addEdge(3, 5); - graphInts.addEdge(7, 8); - graphInts.addEdge(8, 10); - graphInts.addEdge(10, 8); + graphInts.addEdge(7, 8); + graphInts.addEdge(8, 10); + graphInts.addEdge(10, 8); - System.out.println("Amount of different char-graphs: " + graphChars.countGraphs()); - System.out.println("Amount of different int-graphs: " + graphInts.countGraphs()); - } + System.out.println("Amount of different char-graphs: " + graphChars.countGraphs()); + System.out.println("Amount of different int-graphs: " + graphInts.countGraphs()); + } } diff --git a/DataStructures/Graphs/Cycles.java b/DataStructures/Graphs/Cycles.java index 0b0ae22d7e8d..27b0c2bf3c42 100644 --- a/DataStructures/Graphs/Cycles.java +++ b/DataStructures/Graphs/Cycles.java @@ -1,92 +1,87 @@ package DataStructures.Graphs; -import java.util.Scanner; import java.util.ArrayList; - +import java.util.Scanner; class Cycle { - private int nodes, edges; - private int[][] adjacencyMatrix; - private boolean[] visited; - ArrayList> cycles = new ArrayList>(); - + private int nodes, edges; + private int[][] adjacencyMatrix; + private boolean[] visited; + ArrayList> cycles = new ArrayList>(); - public Cycle() { - Scanner in = new Scanner(System.in); - System.out.print("Enter the no. of nodes: "); - nodes = in.nextInt(); - System.out.print("Enter the no. of Edges: "); - edges = in.nextInt(); + public Cycle() { + Scanner in = new Scanner(System.in); + System.out.print("Enter the no. of nodes: "); + nodes = in.nextInt(); + System.out.print("Enter the no. of Edges: "); + edges = in.nextInt(); - adjacencyMatrix = new int[nodes][nodes]; - visited = new boolean[nodes]; - - for (int i = 0; i < nodes; i++) { - visited[i] = false; - } + adjacencyMatrix = new int[nodes][nodes]; + visited = new boolean[nodes]; - System.out.println("Enter the details of each edges "); + for (int i = 0; i < nodes; i++) { + visited[i] = false; + } - for (int i = 0; i < edges; i++) { - int start, end; - start = in.nextInt(); - end = in.nextInt(); - adjacencyMatrix[start][end] = 1; - } - in.close(); + System.out.println("Enter the details of each edges "); + for (int i = 0; i < edges; i++) { + int start, end; + start = in.nextInt(); + end = in.nextInt(); + adjacencyMatrix[start][end] = 1; } - - public void start() { - for (int i = 0; i < nodes; i++) { - ArrayList temp = new ArrayList<>(); - dfs(i, i, temp); - for (int j = 0; j < nodes; j++) { - adjacencyMatrix[i][j] = 0; - adjacencyMatrix[j][i] = 0; - } - } + in.close(); + } + + public void start() { + for (int i = 0; i < nodes; i++) { + ArrayList temp = new ArrayList<>(); + dfs(i, i, temp); + for (int j = 0; j < nodes; j++) { + adjacencyMatrix[i][j] = 0; + adjacencyMatrix[j][i] = 0; + } } - - private void dfs(Integer start, Integer curr, ArrayList temp) { - temp.add(curr); - visited[curr] = true; - for (int i = 0; i < nodes; i++) { - if (adjacencyMatrix[curr][i] == 1) { - if (i == start) { - cycles.add(new ArrayList(temp)); - } else { - if (!visited[i]) { - dfs(start, i, temp); - } - } - } - } - - if (temp.size() > 0) { - temp.remove(temp.size() - 1); + } + + private void dfs(Integer start, Integer curr, ArrayList temp) { + temp.add(curr); + visited[curr] = true; + for (int i = 0; i < nodes; i++) { + if (adjacencyMatrix[curr][i] == 1) { + if (i == start) { + cycles.add(new ArrayList(temp)); + } else { + if (!visited[i]) { + dfs(start, i, temp); + } } - visited[curr] = false; + } } - public void printAll() { - for (int i = 0; i < cycles.size(); i++) { - for (int j = 0; j < cycles.get(i).size(); j++) { - System.out.print(cycles.get(i).get(j) + " -> "); - } - System.out.println(cycles.get(i).get(0)); - System.out.println(); - } - + if (temp.size() > 0) { + temp.remove(temp.size() - 1); } - + visited[curr] = false; + } + + public void printAll() { + for (int i = 0; i < cycles.size(); i++) { + for (int j = 0; j < cycles.get(i).size(); j++) { + System.out.print(cycles.get(i).get(j) + " -> "); + } + System.out.println(cycles.get(i).get(0)); + System.out.println(); + } + } } public class Cycles { - public static void main(String[] args) { - Cycle c = new Cycle(); - c.start(); - c.printAll(); - } -} \ No newline at end of file + public static void main(String[] args) { + Cycle c = new Cycle(); + c.start(); + c.printAll(); + } +} diff --git a/DataStructures/Graphs/FloydWarshall.java b/DataStructures/Graphs/FloydWarshall.java index d6a6b48d4770..84cc3eddf6be 100644 --- a/DataStructures/Graphs/FloydWarshall.java +++ b/DataStructures/Graphs/FloydWarshall.java @@ -4,70 +4,74 @@ import java.util.Scanner; public class FloydWarshall { - private int DistanceMatrix[][]; - private int numberofvertices;//number of vertices in the graph - public static final int INFINITY = 999; + private int DistanceMatrix[][]; + private int numberofvertices; // number of vertices in the graph + public static final int INFINITY = 999; - public FloydWarshall(int numberofvertices) { - DistanceMatrix = new int[numberofvertices + 1][numberofvertices + 1];//stores the value of distance from all the possible path form the source vertex to destination vertex - Arrays.fill(DistanceMatrix, 0); - this.numberofvertices = numberofvertices; - } + public FloydWarshall(int numberofvertices) { + DistanceMatrix = + new int[numberofvertices + 1] + [numberofvertices + + 1]; // stores the value of distance from all the possible path form the source + // vertex to destination vertex + Arrays.fill(DistanceMatrix, 0); + this.numberofvertices = numberofvertices; + } - public void floydwarshall(int AdjacencyMatrix[][])//calculates all the distances from source to destination vertex - { - for (int source = 1; source <= numberofvertices; source++) { - for (int destination = 1; destination <= numberofvertices; destination++) { - DistanceMatrix[source][destination] = AdjacencyMatrix[source][destination]; - } - } - for (int intermediate = 1; intermediate <= numberofvertices; intermediate++) { - for (int source = 1; source <= numberofvertices; source++) { - for (int destination = 1; destination <= numberofvertices; destination++) { - if (DistanceMatrix[source][intermediate] + DistanceMatrix[intermediate][destination] - < DistanceMatrix[source][destination]) - // if the new distance calculated is less then the earlier shortest - // calculated distance it get replaced as new shortest distance - { - DistanceMatrix[source][destination] = DistanceMatrix[source][intermediate] - + DistanceMatrix[intermediate][destination]; - } - } - } - } - for (int source = 1; source <= numberofvertices; source++) - System.out.print("\t" + source); - System.out.println(); - for (int source = 1; source <= numberofvertices; source++) { - System.out.print(source + "\t"); - for (int destination = 1; destination <= numberofvertices; destination++) { - System.out.print(DistanceMatrix[source][destination] + "\t"); - } - System.out.println(); + public void floydwarshall( + int AdjacencyMatrix[][]) // calculates all the distances from source to destination vertex + { + for (int source = 1; source <= numberofvertices; source++) { + for (int destination = 1; destination <= numberofvertices; destination++) { + DistanceMatrix[source][destination] = AdjacencyMatrix[source][destination]; + } + } + for (int intermediate = 1; intermediate <= numberofvertices; intermediate++) { + for (int source = 1; source <= numberofvertices; source++) { + for (int destination = 1; destination <= numberofvertices; destination++) { + if (DistanceMatrix[source][intermediate] + DistanceMatrix[intermediate][destination] + < DistanceMatrix[source][destination]) + // if the new distance calculated is less then the earlier shortest + // calculated distance it get replaced as new shortest distance + { + DistanceMatrix[source][destination] = + DistanceMatrix[source][intermediate] + DistanceMatrix[intermediate][destination]; + } } + } + } + for (int source = 1; source <= numberofvertices; source++) System.out.print("\t" + source); + System.out.println(); + for (int source = 1; source <= numberofvertices; source++) { + System.out.print(source + "\t"); + for (int destination = 1; destination <= numberofvertices; destination++) { + System.out.print(DistanceMatrix[source][destination] + "\t"); + } + System.out.println(); } + } - public static void main(String... arg) { - Scanner scan = new Scanner(System.in); - System.out.println("Enter the number of vertices"); - int numberOfVertices = scan.nextInt(); - int[][] adjacencyMatrix = new int[numberOfVertices + 1][numberOfVertices + 1]; - System.out.println("Enter the Weighted Matrix for the graph"); - for (int source = 1; source <= numberOfVertices; source++) { - for (int destination = 1; destination <= numberOfVertices; destination++) { - adjacencyMatrix[source][destination] = scan.nextInt(); - if (source == destination) { - adjacencyMatrix[source][destination] = 0; - continue; - } - if (adjacencyMatrix[source][destination] == 0) { - adjacencyMatrix[source][destination] = INFINITY; - } - } + public static void main(String... arg) { + Scanner scan = new Scanner(System.in); + System.out.println("Enter the number of vertices"); + int numberOfVertices = scan.nextInt(); + int[][] adjacencyMatrix = new int[numberOfVertices + 1][numberOfVertices + 1]; + System.out.println("Enter the Weighted Matrix for the graph"); + for (int source = 1; source <= numberOfVertices; source++) { + for (int destination = 1; destination <= numberOfVertices; destination++) { + adjacencyMatrix[source][destination] = scan.nextInt(); + if (source == destination) { + adjacencyMatrix[source][destination] = 0; + continue; + } + if (adjacencyMatrix[source][destination] == 0) { + adjacencyMatrix[source][destination] = INFINITY; } - System.out.println("The Transitive Closure of the Graph"); - FloydWarshall floydwarshall = new FloydWarshall(numberOfVertices); - floydwarshall.floydwarshall(adjacencyMatrix); - scan.close(); + } } + System.out.println("The Transitive Closure of the Graph"); + FloydWarshall floydwarshall = new FloydWarshall(numberOfVertices); + floydwarshall.floydwarshall(adjacencyMatrix); + scan.close(); + } } diff --git a/DataStructures/Graphs/Graphs.java b/DataStructures/Graphs/Graphs.java index ea03b05f246b..9a1f713836b2 100644 --- a/DataStructures/Graphs/Graphs.java +++ b/DataStructures/Graphs/Graphs.java @@ -1,133 +1,129 @@ package DataStructures.Graphs; import java.util.ArrayList; -import java.lang.StringBuilder; class AdjacencyListGraph> { - ArrayList verticies; + ArrayList verticies; - public AdjacencyListGraph() { - verticies = new ArrayList<>(); - } + public AdjacencyListGraph() { + verticies = new ArrayList<>(); + } - private class Vertex { - E data; - ArrayList adjacentVerticies; + private class Vertex { + E data; + ArrayList adjacentVerticies; - public Vertex(E data) { - adjacentVerticies = new ArrayList<>(); - this.data = data; - } + public Vertex(E data) { + adjacentVerticies = new ArrayList<>(); + this.data = data; + } - public boolean addAdjacentVertex(Vertex to) { - for (Vertex v : adjacentVerticies) { - if (v.data.compareTo(to.data) == 0) { - return false; // the edge already exists - } - } - return adjacentVerticies.add(to); // this will return true; + public boolean addAdjacentVertex(Vertex to) { + for (Vertex v : adjacentVerticies) { + if (v.data.compareTo(to.data) == 0) { + return false; // the edge already exists } + } + return adjacentVerticies.add(to); // this will return true; + } - public boolean removeAdjacentVertex(E to) { - // use indexes here so it is possible to - // remove easily without implementing - // equals method that ArrayList.remove(Object o) uses - for (int i = 0; i < adjacentVerticies.size(); i++) { - if (adjacentVerticies.get(i).data.compareTo(to) == 0) { - adjacentVerticies.remove(i); - return true; - } - } - return false; + public boolean removeAdjacentVertex(E to) { + // use indexes here so it is possible to + // remove easily without implementing + // equals method that ArrayList.remove(Object o) uses + for (int i = 0; i < adjacentVerticies.size(); i++) { + if (adjacentVerticies.get(i).data.compareTo(to) == 0) { + adjacentVerticies.remove(i); + return true; } + } + return false; } + } - /** - * this method removes an edge from the graph between two specified - * verticies - * - * @param from the data of the vertex the edge is from - * @param to the data of the vertex the edge is going to - * @return returns false if the edge doesn't exist, returns true if the edge exists and is removed - */ - public boolean removeEdge(E from, E to) { - Vertex fromV = null; - for (Vertex v : verticies) { - if (from.compareTo(v.data) == 0) { - fromV = v; - break; - } - } - if (fromV == null) return false; - return fromV.removeAdjacentVertex(to); + /** + * this method removes an edge from the graph between two specified verticies + * + * @param from the data of the vertex the edge is from + * @param to the data of the vertex the edge is going to + * @return returns false if the edge doesn't exist, returns true if the edge exists and is removed + */ + public boolean removeEdge(E from, E to) { + Vertex fromV = null; + for (Vertex v : verticies) { + if (from.compareTo(v.data) == 0) { + fromV = v; + break; + } } + if (fromV == null) return false; + return fromV.removeAdjacentVertex(to); + } - /** - * this method adds an edge to the graph between two specified - * verticies - * - * @param from the data of the vertex the edge is from - * @param to the data of the vertex the edge is going to - * @return returns true if the edge did not exist, return false if it already did - */ - public boolean addEdge(E from, E to) { - Vertex fromV = null, toV = null; - for (Vertex v : verticies) { - if (from.compareTo(v.data) == 0) { // see if from vertex already exists - fromV = v; - } else if (to.compareTo(v.data) == 0) { // see if to vertex already exists - toV = v; - } - if (fromV != null && toV != null) break; // both nodes exist so stop searching - } - if (fromV == null) { - fromV = new Vertex(from); - verticies.add(fromV); - } - if (toV == null) { - toV = new Vertex(to); - verticies.add(toV); - } - return fromV.addAdjacentVertex(toV); + /** + * this method adds an edge to the graph between two specified verticies + * + * @param from the data of the vertex the edge is from + * @param to the data of the vertex the edge is going to + * @return returns true if the edge did not exist, return false if it already did + */ + public boolean addEdge(E from, E to) { + Vertex fromV = null, toV = null; + for (Vertex v : verticies) { + if (from.compareTo(v.data) == 0) { // see if from vertex already exists + fromV = v; + } else if (to.compareTo(v.data) == 0) { // see if to vertex already exists + toV = v; + } + if (fromV != null && toV != null) break; // both nodes exist so stop searching + } + if (fromV == null) { + fromV = new Vertex(from); + verticies.add(fromV); + } + if (toV == null) { + toV = new Vertex(to); + verticies.add(toV); } + return fromV.addAdjacentVertex(toV); + } - /** - * this gives a list of verticies in the graph and their adjacencies - * - * @return returns a string describing this graph - */ - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - for (Vertex v : verticies) { - sb.append("Vertex: "); - sb.append(v.data); - sb.append("\n"); - sb.append("Adjacent verticies: "); - for (Vertex v2 : v.adjacentVerticies) { - sb.append(v2.data); - sb.append(" "); - } - sb.append("\n"); - } - return sb.toString(); + /** + * this gives a list of verticies in the graph and their adjacencies + * + * @return returns a string describing this graph + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (Vertex v : verticies) { + sb.append("Vertex: "); + sb.append(v.data); + sb.append("\n"); + sb.append("Adjacent verticies: "); + for (Vertex v2 : v.adjacentVerticies) { + sb.append(v2.data); + sb.append(" "); + } + sb.append("\n"); } + return sb.toString(); + } } public class Graphs { - public static void main(String args[]) { - AdjacencyListGraph graph = new AdjacencyListGraph<>(); - assert graph.addEdge(1, 2); - assert graph.addEdge(1, 5); - assert graph.addEdge(2, 5); - assert !graph.addEdge(1, 2); - assert graph.addEdge(2, 3); - assert graph.addEdge(3, 4); - assert graph.addEdge(4, 1); - assert !graph.addEdge(2, 3); - System.out.println(graph); - } - + public static void main(String args[]) { + AdjacencyListGraph graph = new AdjacencyListGraph<>(); + assert graph.addEdge(1, 2); + assert graph.addEdge(1, 5); + assert graph.addEdge(2, 5); + assert !graph.addEdge(1, 2); + assert graph.addEdge(2, 3); + assert graph.addEdge(3, 4); + assert graph.addEdge(4, 1); + assert !graph.addEdge(2, 3); + System.out.println(graph); + } } diff --git a/DataStructures/Graphs/Kruskal.java b/DataStructures/Graphs/Kruskal.java index 731b821be076..941f30593ad9 100644 --- a/DataStructures/Graphs/Kruskal.java +++ b/DataStructures/Graphs/Kruskal.java @@ -1,8 +1,12 @@ -//Problem -> Connect all the edges with the minimum cost. -//Possible Solution -> Kruskal Algorithm (KA), KA finds the minimum-spanning-tree, which means, the group of edges with the minimum sum of their weights that connect the whole graph. -//The graph needs to be connected, because if there are nodes impossible to reach, there are no edges that could connect every node in the graph. -//KA is a Greedy Algorithm, because edges are analysed based on their weights, that is why a Priority Queue is used, to take first those less weighted. -//This implementations below has some changes compared to conventional ones, but they are explained all along the code. +// Problem -> Connect all the edges with the minimum cost. +// Possible Solution -> Kruskal Algorithm (KA), KA finds the minimum-spanning-tree, which means, the +// group of edges with the minimum sum of their weights that connect the whole graph. +// The graph needs to be connected, because if there are nodes impossible to reach, there are no +// edges that could connect every node in the graph. +// KA is a Greedy Algorithm, because edges are analysed based on their weights, that is why a +// Priority Queue is used, to take first those less weighted. +// This implementations below has some changes compared to conventional ones, but they are explained +// all along the code. import java.util.Comparator; import java.util.HashSet; @@ -10,89 +14,90 @@ public class Kruskal { - //Complexity: O(E log V) time, where E is the number of edges in the graph and V is the number of vertices + // Complexity: O(E log V) time, where E is the number of edges in the graph and V is the number of + // vertices - private static class Edge{ - private int from; - private int to; - private int weight; + private static class Edge { + private int from; + private int to; + private int weight; - public Edge(int from, int to, int weight) { - this.from = from; - this.to = to; - this.weight = weight; - } + public Edge(int from, int to, int weight) { + this.from = from; + this.to = to; + this.weight = weight; } + } - private static void addEdge (HashSet[] graph, int from, int to, int weight) { - graph[from].add(new Edge(from, to, weight)); - } + private static void addEdge(HashSet[] graph, int from, int to, int weight) { + graph[from].add(new Edge(from, to, weight)); + } - public static void main(String[] args) { - HashSet[] graph = new HashSet[7]; - for (int i = 0; i < graph.length; i++) { - graph[i] = new HashSet<>(); - } - addEdge(graph,0, 1, 2); - addEdge(graph,0, 2, 3); - addEdge(graph,0, 3, 3); - addEdge(graph,1, 2, 4); - addEdge(graph,2, 3, 5); - addEdge(graph,1, 4, 3); - addEdge(graph,2, 4, 1); - addEdge(graph,3, 5, 7); - addEdge(graph,4, 5, 8); - addEdge(graph,5, 6, 9); + public static void main(String[] args) { + HashSet[] graph = new HashSet[7]; + for (int i = 0; i < graph.length; i++) { + graph[i] = new HashSet<>(); + } + addEdge(graph, 0, 1, 2); + addEdge(graph, 0, 2, 3); + addEdge(graph, 0, 3, 3); + addEdge(graph, 1, 2, 4); + addEdge(graph, 2, 3, 5); + addEdge(graph, 1, 4, 3); + addEdge(graph, 2, 4, 1); + addEdge(graph, 3, 5, 7); + addEdge(graph, 4, 5, 8); + addEdge(graph, 5, 6, 9); - System.out.println("Initial Graph: "); - for (int i = 0; i < graph.length; i++) { - for (Edge edge: graph[i]) { - System.out.println(i + " <-- weight " + edge.weight + " --> " + edge.to); - } - } + System.out.println("Initial Graph: "); + for (int i = 0; i < graph.length; i++) { + for (Edge edge : graph[i]) { + System.out.println(i + " <-- weight " + edge.weight + " --> " + edge.to); + } + } - Kruskal k = new Kruskal(); - HashSet[] solGraph = k.kruskal(graph); + Kruskal k = new Kruskal(); + HashSet[] solGraph = k.kruskal(graph); - System.out.println("\nMinimal Graph: "); - for (int i = 0; i < solGraph.length; i++) { - for (Edge edge: solGraph[i]) { - System.out.println(i + " <-- weight " + edge.weight + " --> " + edge.to); - } - } + System.out.println("\nMinimal Graph: "); + for (int i = 0; i < solGraph.length; i++) { + for (Edge edge : solGraph[i]) { + System.out.println(i + " <-- weight " + edge.weight + " --> " + edge.to); + } } + } - public HashSet[] kruskal (HashSet[] graph) { - int nodes = graph.length; - int [] captain = new int [nodes]; - //captain of i, stores the set with all the connected nodes to i - HashSet[] connectedGroups = new HashSet[nodes]; - HashSet[] minGraph = new HashSet[nodes]; - PriorityQueue edges = new PriorityQueue<>((Comparator.comparingInt(edge -> edge.weight))); - for (int i = 0; i < nodes; i++) { - minGraph[i] = new HashSet<>(); - connectedGroups[i] = new HashSet<>(); - connectedGroups[i].add(i); - captain[i] = i; - edges.addAll(graph[i]); - } - int connectedElements = 0; - //as soon as two sets merge all the elements, the algorithm must stop - while (connectedElements != nodes && !edges.isEmpty()) { - Edge edge = edges.poll(); - //This if avoids cycles - if (!connectedGroups[captain[edge.from]].contains(edge.to) - && !connectedGroups[captain[edge.to]].contains(edge.from)) { - //merge sets of the captains of each point connected by the edge - connectedGroups[captain[edge.from]].addAll(connectedGroups[captain[edge.to]]); - //update captains of the elements merged - connectedGroups[captain[edge.from]].forEach(i -> captain[i] = captain[edge.from]); - //add Edge to minimal graph - addEdge(minGraph, edge.from, edge.to, edge.weight); - //count how many elements have been merged - connectedElements = connectedGroups[captain[edge.from]].size(); - } - } - return minGraph; + public HashSet[] kruskal(HashSet[] graph) { + int nodes = graph.length; + int[] captain = new int[nodes]; + // captain of i, stores the set with all the connected nodes to i + HashSet[] connectedGroups = new HashSet[nodes]; + HashSet[] minGraph = new HashSet[nodes]; + PriorityQueue edges = new PriorityQueue<>((Comparator.comparingInt(edge -> edge.weight))); + for (int i = 0; i < nodes; i++) { + minGraph[i] = new HashSet<>(); + connectedGroups[i] = new HashSet<>(); + connectedGroups[i].add(i); + captain[i] = i; + edges.addAll(graph[i]); + } + int connectedElements = 0; + // as soon as two sets merge all the elements, the algorithm must stop + while (connectedElements != nodes && !edges.isEmpty()) { + Edge edge = edges.poll(); + // This if avoids cycles + if (!connectedGroups[captain[edge.from]].contains(edge.to) + && !connectedGroups[captain[edge.to]].contains(edge.from)) { + // merge sets of the captains of each point connected by the edge + connectedGroups[captain[edge.from]].addAll(connectedGroups[captain[edge.to]]); + // update captains of the elements merged + connectedGroups[captain[edge.from]].forEach(i -> captain[i] = captain[edge.from]); + // add Edge to minimal graph + addEdge(minGraph, edge.from, edge.to, edge.weight); + // count how many elements have been merged + connectedElements = connectedGroups[captain[edge.from]].size(); + } } + return minGraph; + } } diff --git a/DataStructures/Graphs/MatrixGraphs.java b/DataStructures/Graphs/MatrixGraphs.java index 32a7c990e3ef..2265d2826a1b 100644 --- a/DataStructures/Graphs/MatrixGraphs.java +++ b/DataStructures/Graphs/MatrixGraphs.java @@ -2,145 +2,141 @@ public class MatrixGraphs { - public static void main(String args[]) { - AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(10); - graph.addEdge(1, 2); - graph.addEdge(1, 5); - graph.addEdge(2, 5); - graph.addEdge(1, 2); - graph.addEdge(2, 3); - graph.addEdge(3, 4); - graph.addEdge(4, 1); - graph.addEdge(2, 3); - System.out.println(graph); - } - + public static void main(String args[]) { + AdjacencyMatrixGraph graph = new AdjacencyMatrixGraph(10); + graph.addEdge(1, 2); + graph.addEdge(1, 5); + graph.addEdge(2, 5); + graph.addEdge(1, 2); + graph.addEdge(2, 3); + graph.addEdge(3, 4); + graph.addEdge(4, 1); + graph.addEdge(2, 3); + System.out.println(graph); + } } class AdjacencyMatrixGraph { - private int _numberOfVertices; - private int _numberOfEdges; - private int[][] _adjacency; - - static final int EDGE_EXIST = 1; - static final int EDGE_NONE = 0; - - public AdjacencyMatrixGraph(int givenNumberOfVertices) { - this.setNumberOfVertices(givenNumberOfVertices); - this.setNumberOfEdges(0); - this.setAdjacency(new int[givenNumberOfVertices][givenNumberOfVertices]); - for (int i = 0; i < givenNumberOfVertices; i++) { - for (int j = 0; j < givenNumberOfVertices; j++) { - this.adjacency()[i][j] = AdjacencyMatrixGraph.EDGE_NONE; - } - } + private int _numberOfVertices; + private int _numberOfEdges; + private int[][] _adjacency; + + static final int EDGE_EXIST = 1; + static final int EDGE_NONE = 0; + + public AdjacencyMatrixGraph(int givenNumberOfVertices) { + this.setNumberOfVertices(givenNumberOfVertices); + this.setNumberOfEdges(0); + this.setAdjacency(new int[givenNumberOfVertices][givenNumberOfVertices]); + for (int i = 0; i < givenNumberOfVertices; i++) { + for (int j = 0; j < givenNumberOfVertices; j++) { + this.adjacency()[i][j] = AdjacencyMatrixGraph.EDGE_NONE; + } } + } - private void setNumberOfVertices(int newNumberOfVertices) { - this._numberOfVertices = newNumberOfVertices; - } + private void setNumberOfVertices(int newNumberOfVertices) { + this._numberOfVertices = newNumberOfVertices; + } - public int numberOfVertices() { - return this._numberOfVertices; - } + public int numberOfVertices() { + return this._numberOfVertices; + } - private void setNumberOfEdges(int newNumberOfEdges) { - this._numberOfEdges = newNumberOfEdges; - } + private void setNumberOfEdges(int newNumberOfEdges) { + this._numberOfEdges = newNumberOfEdges; + } - public int numberOfEdges() { - return this._numberOfEdges; - } + public int numberOfEdges() { + return this._numberOfEdges; + } - private void setAdjacency(int[][] newAdjacency) { - this._adjacency = newAdjacency; - } + private void setAdjacency(int[][] newAdjacency) { + this._adjacency = newAdjacency; + } - private int[][] adjacency() { - return this._adjacency; - } + private int[][] adjacency() { + return this._adjacency; + } - private boolean adjacencyOfEdgeDoesExist(int from, int to) { - return (this.adjacency()[from][to] != AdjacencyMatrixGraph.EDGE_NONE); - } + private boolean adjacencyOfEdgeDoesExist(int from, int to) { + return (this.adjacency()[from][to] != AdjacencyMatrixGraph.EDGE_NONE); + } - public boolean vertexDoesExist(int aVertex) { - if (aVertex >= 0 && aVertex < this.numberOfVertices()) { - return true; - } else { - return false; - } + public boolean vertexDoesExist(int aVertex) { + if (aVertex >= 0 && aVertex < this.numberOfVertices()) { + return true; + } else { + return false; } + } - public boolean edgeDoesExist(int from, int to) { - if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) { - return (this.adjacencyOfEdgeDoesExist(from, to)); - } - - return false; + public boolean edgeDoesExist(int from, int to) { + if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) { + return (this.adjacencyOfEdgeDoesExist(from, to)); } - /** - * This method adds an edge to the graph between two specified - * vertices - * - * @param from the data of the vertex the edge is from - * @param to the data of the vertex the edge is going to - * @return returns true if the edge did not exist, return false if it already did - */ - public boolean addEdge(int from, int to) { - if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) { - if (!this.adjacencyOfEdgeDoesExist(from, to)) { - this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_EXIST; - this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_EXIST; - this.setNumberOfEdges(this.numberOfEdges() + 1); - return true; - } - } - - return false; + return false; + } + + /** + * This method adds an edge to the graph between two specified vertices + * + * @param from the data of the vertex the edge is from + * @param to the data of the vertex the edge is going to + * @return returns true if the edge did not exist, return false if it already did + */ + public boolean addEdge(int from, int to) { + if (this.vertexDoesExist(from) && this.vertexDoesExist(to)) { + if (!this.adjacencyOfEdgeDoesExist(from, to)) { + this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_EXIST; + this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_EXIST; + this.setNumberOfEdges(this.numberOfEdges() + 1); + return true; + } } - /** - * this method removes an edge from the graph between two specified - * vertices - * - * @param from the data of the vertex the edge is from - * @param to the data of the vertex the edge is going to - * @return returns false if the edge doesn't exist, returns true if the edge exists and is removed - */ - public boolean removeEdge(int from, int to) { - if (!this.vertexDoesExist(from) || !this.vertexDoesExist(to)) { - if (this.adjacencyOfEdgeDoesExist(from, to)) { - this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_NONE; - this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_NONE; - this.setNumberOfEdges(this.numberOfEdges() - 1); - return true; - } - } - return false; + return false; + } + + /** + * this method removes an edge from the graph between two specified vertices + * + * @param from the data of the vertex the edge is from + * @param to the data of the vertex the edge is going to + * @return returns false if the edge doesn't exist, returns true if the edge exists and is removed + */ + public boolean removeEdge(int from, int to) { + if (!this.vertexDoesExist(from) || !this.vertexDoesExist(to)) { + if (this.adjacencyOfEdgeDoesExist(from, to)) { + this.adjacency()[from][to] = AdjacencyMatrixGraph.EDGE_NONE; + this.adjacency()[to][from] = AdjacencyMatrixGraph.EDGE_NONE; + this.setNumberOfEdges(this.numberOfEdges() - 1); + return true; + } } - - /** - * this gives a list of vertices in the graph and their adjacencies - * - * @return returns a string describing this graph - */ - public String toString() { - String s = " "; - for (int i = 0; i < this.numberOfVertices(); i++) { - s = s + String.valueOf(i) + " "; - } - s = s + " \n"; - - for (int i = 0; i < this.numberOfVertices(); i++) { - s = s + String.valueOf(i) + " : "; - for (int j = 0; j < this.numberOfVertices(); j++) { - s = s + String.valueOf(this._adjacency[i][j]) + " "; - } - s = s + "\n"; - } - return s; + return false; + } + + /** + * this gives a list of vertices in the graph and their adjacencies + * + * @return returns a string describing this graph + */ + public String toString() { + String s = " "; + for (int i = 0; i < this.numberOfVertices(); i++) { + s = s + String.valueOf(i) + " "; } - + s = s + " \n"; + + for (int i = 0; i < this.numberOfVertices(); i++) { + s = s + String.valueOf(i) + " : "; + for (int j = 0; j < this.numberOfVertices(); j++) { + s = s + String.valueOf(this._adjacency[i][j]) + " "; + } + s = s + "\n"; + } + return s; + } } diff --git a/DataStructures/Graphs/PrimMST.java b/DataStructures/Graphs/PrimMST.java index 474893775870..9c3b973ffd63 100644 --- a/DataStructures/Graphs/PrimMST.java +++ b/DataStructures/Graphs/PrimMST.java @@ -1,106 +1,102 @@ package DataStructures.Graphs; /** - * A Java program for Prim's Minimum Spanning Tree (MST) algorithm. - * adjacency matrix representation of the graph + * A Java program for Prim's Minimum Spanning Tree (MST) algorithm. adjacency matrix representation + * of the graph */ class PrimMST { - // Number of vertices in the graph - private static final int V = 5; - - // A utility function to find the vertex with minimum key - // value, from the set of vertices not yet included in MST - int minKey(int key[], Boolean mstSet[]) { - // Initialize min value - int min = Integer.MAX_VALUE, min_index = -1; - - for (int v = 0; v < V; v++) - if (mstSet[v] == false && key[v] < min) { - min = key[v]; - min_index = v; - } - - return min_index; + // Number of vertices in the graph + private static final int V = 5; + + // A utility function to find the vertex with minimum key + // value, from the set of vertices not yet included in MST + int minKey(int key[], Boolean mstSet[]) { + // Initialize min value + int min = Integer.MAX_VALUE, min_index = -1; + + for (int v = 0; v < V; v++) + if (mstSet[v] == false && key[v] < min) { + min = key[v]; + min_index = v; + } + + return min_index; + } + + // A utility function to print the constructed MST stored in + // parent[] + void printMST(int parent[], int n, int graph[][]) { + System.out.println("Edge Weight"); + for (int i = 1; i < V; i++) + System.out.println(parent[i] + " - " + i + " " + graph[i][parent[i]]); + } + + // Function to construct and print MST for a graph represented + // using adjacency matrix representation + void primMST(int graph[][]) { + // Array to store constructed MST + int parent[] = new int[V]; + + // Key values used to pick minimum weight edge in cut + int key[] = new int[V]; + + // To represent set of vertices not yet included in MST + Boolean mstSet[] = new Boolean[V]; + + // Initialize all keys as INFINITE + for (int i = 0; i < V; i++) { + key[i] = Integer.MAX_VALUE; + mstSet[i] = false; } - // A utility function to print the constructed MST stored in - // parent[] - void printMST(int parent[], int n, int graph[][]) { - System.out.println("Edge Weight"); - for (int i = 1; i < V; i++) - System.out.println(parent[i] + " - " + i + " " + - graph[i][parent[i]]); - } - - // Function to construct and print MST for a graph represented - // using adjacency matrix representation - void primMST(int graph[][]) { - // Array to store constructed MST - int parent[] = new int[V]; - - // Key values used to pick minimum weight edge in cut - int key[] = new int[V]; - - // To represent set of vertices not yet included in MST - Boolean mstSet[] = new Boolean[V]; - - // Initialize all keys as INFINITE - for (int i = 0; i < V; i++) { - key[i] = Integer.MAX_VALUE; - mstSet[i] = false; + // Always include first 1st vertex in MST. + key[0] = 0; // Make key 0 so that this vertex is + // picked as first vertex + parent[0] = -1; // First node is always root of MST + + // The MST will have V vertices + for (int count = 0; count < V - 1; count++) { + // Pick thd minimum key vertex from the set of vertices + // not yet included in MST + int u = minKey(key, mstSet); + + // Add the picked vertex to the MST Set + mstSet[u] = true; + + // Update key value and parent index of the adjacent + // vertices of the picked vertex. Consider only those + // vertices which are not yet included in MST + for (int v = 0; v < V; v++) + + // graph[u][v] is non zero only for adjacent vertices of m + // mstSet[v] is false for vertices not yet included in MST + // Update the key only if graph[u][v] is smaller than key[v] + if (graph[u][v] != 0 && mstSet[v] == false && graph[u][v] < key[v]) { + parent[v] = u; + key[v] = graph[u][v]; } - - // Always include first 1st vertex in MST. - key[0] = 0; // Make key 0 so that this vertex is - // picked as first vertex - parent[0] = -1; // First node is always root of MST - - // The MST will have V vertices - for (int count = 0; count < V - 1; count++) { - // Pick thd minimum key vertex from the set of vertices - // not yet included in MST - int u = minKey(key, mstSet); - - // Add the picked vertex to the MST Set - mstSet[u] = true; - - // Update key value and parent index of the adjacent - // vertices of the picked vertex. Consider only those - // vertices which are not yet included in MST - for (int v = 0; v < V; v++) - - // graph[u][v] is non zero only for adjacent vertices of m - // mstSet[v] is false for vertices not yet included in MST - // Update the key only if graph[u][v] is smaller than key[v] - if (graph[u][v] != 0 && mstSet[v] == false && - graph[u][v] < key[v]) { - parent[v] = u; - key[v] = graph[u][v]; - } - } - - // print the constructed MST - printMST(parent, V, graph); } - public static void main(String[] args) { - /* Let us create the following graph - 2 3 - (0)--(1)--(2) - | / \ | - 6| 8/ \5 |7 - | / \ | - (3)-------(4) - 9 */ - PrimMST t = new PrimMST(); - int graph[][] = new int[][]{{0, 2, 0, 6, 0}, - {2, 0, 3, 8, 5}, - {0, 3, 0, 0, 7}, - {6, 8, 0, 0, 9}, - {0, 5, 7, 9, 0}, + // print the constructed MST + printMST(parent, V, graph); + } + + public static void main(String[] args) { + /* Let us create the following graph + 2 3 + (0)--(1)--(2) + | / \ | + 6| 8/ \5 |7 + | / \ | + (3)-------(4) + 9 */ + PrimMST t = new PrimMST(); + int graph[][] = + new int[][] { + {0, 2, 0, 6, 0}, {2, 0, 3, 8, 5}, {0, 3, 0, 0, 7}, {6, 8, 0, 0, 9}, {0, 5, 7, 9, 0}, }; - // Print the solution - t.primMST(graph); - } + // Print the solution + t.primMST(graph); + } } diff --git a/DataStructures/HashMap/Hashing/HashMap.java b/DataStructures/HashMap/Hashing/HashMap.java index c7d6c7c4beb6..38ea337fa1ec 100644 --- a/DataStructures/HashMap/Hashing/HashMap.java +++ b/DataStructures/HashMap/Hashing/HashMap.java @@ -1,148 +1,145 @@ package DataStructures.HashMap.Hashing; public class HashMap { - private int hsize; - private LinkedList[] buckets; - - public HashMap(int hsize) { - buckets = new LinkedList[hsize]; - for (int i = 0; i < hsize; i++) { - buckets[i] = new LinkedList(); - // Java requires explicit initialisaton of each object - } - this.hsize = hsize; + private int hsize; + private LinkedList[] buckets; + + public HashMap(int hsize) { + buckets = new LinkedList[hsize]; + for (int i = 0; i < hsize; i++) { + buckets[i] = new LinkedList(); + // Java requires explicit initialisaton of each object } + this.hsize = hsize; + } + + public int hashing(int key) { + int hash = key % hsize; + if (hash < 0) hash += hsize; + return hash; + } + + public void insertHash(int key) { + int hash = hashing(key); + buckets[hash].insert(key); + } - public int hashing(int key) { - int hash = key % hsize; - if (hash < 0) - hash += hsize; - return hash; + public void deleteHash(int key) { + int hash = hashing(key); + + buckets[hash].delete(key); + } + + public void displayHashtable() { + for (int i = 0; i < hsize; i++) { + System.out.printf("Bucket %d :", i); + System.out.println(buckets[i].display()); } + } - public void insertHash(int key) { - int hash = hashing(key); - buckets[hash].insert(key); + public static class LinkedList { + private Node first; + + public LinkedList() { + first = null; } + public void insert(int key) { + if (isEmpty()) { + first = new Node(key); + return; + } - public void deleteHash(int key) { - int hash = hashing(key); + Node temp = findEnd(first); + temp.setNext(new Node(key)); + } - buckets[hash].delete(key); + private Node findEnd(Node n) { + if (n.getNext() == null) { + return n; + } else { + return findEnd(n.getNext()); + } + } + + public Node findKey(int key) { + if (!isEmpty()) { + return findKey(first, key); + } else { + System.out.println("List is empty"); + return null; + } + } + + private Node findKey(Node n, int key) { + if (n.getKey() == key) { + return n; + } else if (n.getNext() == null) { + System.out.println("Key not found"); + return null; + } else { + return findKey(n.getNext(), key); + } + } + + public void delete(int key) { + if (!isEmpty()) { + if (first.getKey() == key) { + first = null; + } else { + delete(first, key); + } + } else { + System.out.println("List is empty"); + } } - public void displayHashtable() { - for (int i = 0; i < hsize; i++) { - System.out.printf("Bucket %d :", i); - System.out.println(buckets[i].display()); + private void delete(Node n, int key) { + if (n.getNext().getKey() == key) { + if (n.getNext().getNext() == null) { + n.setNext(null); + } else { + n.setNext(n.getNext().getNext()); } + } } - - public static class LinkedList { - private Node first; - - public LinkedList() { - first = null; - } - - public void insert(int key){ - if(isEmpty()) { - first = new Node(key); - return; - } - - Node temp = findEnd(first); - temp.setNext(new Node(key)); - } - - private Node findEnd(Node n) { - if(n.getNext() == null) { - return n; - } else { - return findEnd(n.getNext()); - } - } - - public Node findKey(int key) { - if(!isEmpty()) { - return findKey(first, key); - } else { - System.out.println("List is empty"); - return null; - } - - } - - private Node findKey(Node n, int key) { - if(n.getKey() == key) { - return n; - } else if(n.getNext() == null) { - System.out.println("Key not found"); - return null; - } else { - return findKey(n.getNext(),key); - } - } - - public void delete(int key) { - if(!isEmpty()) { - if(first.getKey() == key) { - first = null; - } else { - delete(first,key); - } - } else { - System.out.println("List is empty"); - } - } - - private void delete(Node n, int key) { - if(n.getNext().getKey() == key) { - if(n.getNext().getNext() == null) { - n.setNext(null); - } else { - n.setNext(n.getNext().getNext()); - } - } - } - - public String display() { - return display(first); - } - - private String display(Node n) { - if(n == null) { - return "null"; - } else { - return n.getKey() + "->" + display(n.getNext()); - } - } - - public boolean isEmpty() { - return first == null; - } - } - - public static class Node { - private Node next; - private int key; - - public Node(int key) { - next = null; - this.key = key; - } - - public Node getNext() { - return next; - } - - public int getKey() { - return key; - } - - public void setNext(Node next) { - this.next = next; - } + + public String display() { + return display(first); + } + + private String display(Node n) { + if (n == null) { + return "null"; + } else { + return n.getKey() + "->" + display(n.getNext()); + } + } + + public boolean isEmpty() { + return first == null; + } + } + + public static class Node { + private Node next; + private int key; + + public Node(int key) { + next = null; + this.key = key; + } + + public Node getNext() { + return next; + } + + public int getKey() { + return key; + } + + public void setNext(Node next) { + this.next = next; } + } } diff --git a/DataStructures/HashMap/Hashing/HashMapLinearProbing.java b/DataStructures/HashMap/Hashing/HashMapLinearProbing.java index 4da123b808aa..62ac6e8bb91e 100644 --- a/DataStructures/HashMap/Hashing/HashMapLinearProbing.java +++ b/DataStructures/HashMap/Hashing/HashMapLinearProbing.java @@ -3,191 +3,194 @@ import java.util.*; /** - * This class is an implementation of a hash table using linear probing - * It uses a dynamic array to lengthen the size of the hash table when - * load factor > .7 + * This class is an implementation of a hash table using linear probing It uses a dynamic array to + * lengthen the size of the hash table when load factor > .7 */ public class HashMapLinearProbing { - private int hsize; //size of the hash table - private Integer[] buckets; //array representing the table - private Integer AVAILABLE; - private int size; //amount of elements in the hash table - - /** - * Constructor initializes buckets array, hsize, and creates dummy object for AVAILABLE - * @param hsize the desired size of the hash map - */ - public HashMapLinearProbing(int hsize) { - this.buckets = new Integer[hsize]; - this.hsize = hsize; - this.AVAILABLE = new Integer(Integer.MIN_VALUE); - this.size = 0; + private int hsize; // size of the hash table + private Integer[] buckets; // array representing the table + private Integer AVAILABLE; + private int size; // amount of elements in the hash table + + /** + * Constructor initializes buckets array, hsize, and creates dummy object for AVAILABLE + * + * @param hsize the desired size of the hash map + */ + public HashMapLinearProbing(int hsize) { + this.buckets = new Integer[hsize]; + this.hsize = hsize; + this.AVAILABLE = new Integer(Integer.MIN_VALUE); + this.size = 0; + } + + /** + * The Hash Function takes a given key and finds an index based on its data + * + * @param key the desired key to be converted + * @return int an index corresponding to the key + */ + public int hashing(int key) { + int hash = key % hsize; + if (hash < 0) { + hash += hsize; } - - /** - * The Hash Function takes a given key and finds an index based on its data - * @param key the desired key to be converted - * @return int an index corresponding to the key - */ - public int hashing(int key) { - int hash = key % hsize; - if (hash < 0) { - hash += hsize; - } - return hash; + return hash; + } + + /** + * inserts the key into the hash map by wrapping it as an Integer object + * + * @param key the desired key to be inserted in the hash map + */ + public void insertHash(int key) { + Integer wrappedInt = new Integer(key); + int hash = hashing(key); + + if (isFull()) { + System.out.println("Hash table is full"); + return; } - - /** - * inserts the key into the hash map by wrapping it as an Integer object - * @param key the desired key to be inserted in the hash map - */ - public void insertHash(int key) { - Integer wrappedInt = new Integer(key); - int hash = hashing(key); - - if(isFull()) { - System.out.println("Hash table is full"); - return; - } - - for (int i = 0;i < hsize; i++) { - if(buckets[hash] == null || buckets[hash] == AVAILABLE) { - buckets[hash] = wrappedInt; - size++; - return; - } - - if(hash + 1 < hsize) { - hash++; - } else { - hash = 0; - } - } + + for (int i = 0; i < hsize; i++) { + if (buckets[hash] == null || buckets[hash] == AVAILABLE) { + buckets[hash] = wrappedInt; + size++; + return; + } + + if (hash + 1 < hsize) { + hash++; + } else { + hash = 0; + } } - - /** - * deletes a key from the hash map and adds an available placeholder - * @param key the desired key to be deleted - */ - public void deleteHash(int key) { - Integer wrappedInt = new Integer(key); - int hash = hashing(key); - - if(isEmpty()) { - System.out.println("Table is empty"); - return; - } - - for(int i = 0;i < hsize; i++) { - if(buckets[hash] != null && buckets[hash].equals(wrappedInt)) { - buckets[hash] = AVAILABLE; - size--; - return; - } - - if(hash + 1 < hsize) { - hash++; - } else { - hash = 0; - } - } - System.out.println("Key " + key + " not found"); + } + + /** + * deletes a key from the hash map and adds an available placeholder + * + * @param key the desired key to be deleted + */ + public void deleteHash(int key) { + Integer wrappedInt = new Integer(key); + int hash = hashing(key); + + if (isEmpty()) { + System.out.println("Table is empty"); + return; } - - /** - * Displays the hash table line by line - */ - public void displayHashtable() { - for (int i = 0; i < hsize; i++) { - if(buckets[i] == null || buckets[i] == AVAILABLE) { - System.out.println("Bucket " + i + ": Empty"); - } else { - System.out.println("Bucket " + i + ": " + buckets[i].toString()); - } - - } + + for (int i = 0; i < hsize; i++) { + if (buckets[hash] != null && buckets[hash].equals(wrappedInt)) { + buckets[hash] = AVAILABLE; + size--; + return; + } + + if (hash + 1 < hsize) { + hash++; + } else { + hash = 0; + } } - - /** - * Finds the index of location based on an inputed key - * @param key the desired key to be found - * @return int the index where the key is located - */ - public int findHash(int key) { - Integer wrappedInt = new Integer(key); - int hash = hashing(key); - - if(isEmpty()) { - System.out.println("Table is empty"); - return -1; - } - - for(int i = 0;i < hsize; i++) { - try { - if(buckets[hash].equals(wrappedInt)) { - buckets[hash] = AVAILABLE; - return hash; - } - } catch (Exception E) {} - - if(hash + 1 < hsize) { - hash++; - } else { - hash = 0; - } - } - System.out.println("Key " + key + " not found"); - return -1; + System.out.println("Key " + key + " not found"); + } + + /** Displays the hash table line by line */ + public void displayHashtable() { + for (int i = 0; i < hsize; i++) { + if (buckets[i] == null || buckets[i] == AVAILABLE) { + System.out.println("Bucket " + i + ": Empty"); + } else { + System.out.println("Bucket " + i + ": " + buckets[i].toString()); + } + } + } + + /** + * Finds the index of location based on an inputed key + * + * @param key the desired key to be found + * @return int the index where the key is located + */ + public int findHash(int key) { + Integer wrappedInt = new Integer(key); + int hash = hashing(key); + + if (isEmpty()) { + System.out.println("Table is empty"); + return -1; } - - private void lengthenTable() { - buckets = Arrays.copyOf(buckets, hsize * 2); - hsize *= 2; - System.out.println("Table size is now: " + hsize); + + for (int i = 0; i < hsize; i++) { + try { + if (buckets[hash].equals(wrappedInt)) { + buckets[hash] = AVAILABLE; + return hash; + } + } catch (Exception E) { + } + + if (hash + 1 < hsize) { + hash++; + } else { + hash = 0; + } } - - /** - * Checks the load factor of the hash table - * if greater than .7, automatically lengthens table - * to prevent further collisions - */ - public void checkLoadFactor() { - double factor = (double) size / hsize; - if(factor > .7) { - System.out.println("Load factor is " + factor + ", lengthening table"); - lengthenTable(); - } else { - System.out.println("Load factor is " + factor); - } + System.out.println("Key " + key + " not found"); + return -1; + } + + private void lengthenTable() { + buckets = Arrays.copyOf(buckets, hsize * 2); + hsize *= 2; + System.out.println("Table size is now: " + hsize); + } + + /** + * Checks the load factor of the hash table if greater than .7, automatically lengthens table to + * prevent further collisions + */ + public void checkLoadFactor() { + double factor = (double) size / hsize; + if (factor > .7) { + System.out.println("Load factor is " + factor + ", lengthening table"); + lengthenTable(); + } else { + System.out.println("Load factor is " + factor); } - - /** - * isFull returns true if the hash map is full and false if not full - * @return boolean is Empty - */ - public boolean isFull() { - boolean response = true; - for(int i = 0; i< hsize;i++) { - if(buckets[i] == null || buckets[i] == AVAILABLE) { - response = false; - break; - } - } - return response; + } + + /** + * isFull returns true if the hash map is full and false if not full + * + * @return boolean is Empty + */ + public boolean isFull() { + boolean response = true; + for (int i = 0; i < hsize; i++) { + if (buckets[i] == null || buckets[i] == AVAILABLE) { + response = false; + break; + } } - - /** - * isEmpty returns true if the hash map is empty and false if not empty - * @return boolean is Empty - */ - public boolean isEmpty() { - boolean response = true; - for(int i = 0; i< hsize;i++) { - if(buckets[i] != null) { - response = false; - break; - } - } - return response; + return response; + } + + /** + * isEmpty returns true if the hash map is empty and false if not empty + * + * @return boolean is Empty + */ + public boolean isEmpty() { + boolean response = true; + for (int i = 0; i < hsize; i++) { + if (buckets[i] != null) { + response = false; + break; + } } + return response; + } } diff --git a/DataStructures/HashMap/Hashing/Main.java b/DataStructures/HashMap/Hashing/Main.java index 9611b6025135..3cbe7f57a42d 100644 --- a/DataStructures/HashMap/Hashing/Main.java +++ b/DataStructures/HashMap/Hashing/Main.java @@ -3,46 +3,49 @@ import java.util.Scanner; public class Main { - public static void main(String[] args) { + public static void main(String[] args) { - int choice, key; + int choice, key; - HashMap h = new HashMap(7); - Scanner In = new Scanner(System.in); + HashMap h = new HashMap(7); + Scanner In = new Scanner(System.in); - while (true) { - System.out.println("Enter your Choice :"); - System.out.println("1. Add Key"); - System.out.println("2. Delete Key"); - System.out.println("3. Print Table"); - System.out.println("4. Exit"); - - choice = In.nextInt(); + while (true) { + System.out.println("Enter your Choice :"); + System.out.println("1. Add Key"); + System.out.println("2. Delete Key"); + System.out.println("3. Print Table"); + System.out.println("4. Exit"); - switch (choice) { - case 1: { - System.out.println("Enter the Key: "); - key = In.nextInt(); - h.insertHash(key); - break; - } - case 2: { - System.out.println("Enter the Key delete: "); - key = In.nextInt(); - h.deleteHash(key); - break; - } - case 3: { - System.out.println("Print table"); - h.displayHashtable(); - break; - } - case 4: { - In.close(); - return; - } - } - - } - } -} \ No newline at end of file + choice = In.nextInt(); + + switch (choice) { + case 1: + { + System.out.println("Enter the Key: "); + key = In.nextInt(); + h.insertHash(key); + break; + } + case 2: + { + System.out.println("Enter the Key delete: "); + key = In.nextInt(); + h.deleteHash(key); + break; + } + case 3: + { + System.out.println("Print table"); + h.displayHashtable(); + break; + } + case 4: + { + In.close(); + return; + } + } + } + } +} diff --git a/DataStructures/HashMap/Hashing/MainLinearProbing.java b/DataStructures/HashMap/Hashing/MainLinearProbing.java index c26435bdf960..90d1a7906704 100644 --- a/DataStructures/HashMap/Hashing/MainLinearProbing.java +++ b/DataStructures/HashMap/Hashing/MainLinearProbing.java @@ -3,58 +3,63 @@ import java.util.Scanner; public class MainLinearProbing { - public static void main(String[] args) { + public static void main(String[] args) { - int choice, key; + int choice, key; - HashMapLinearProbing h = new HashMapLinearProbing(7); - Scanner In = new Scanner(System.in); + HashMapLinearProbing h = new HashMapLinearProbing(7); + Scanner In = new Scanner(System.in); - while (true) { - System.out.println("Enter your Choice :"); - System.out.println("1. Add Key"); - System.out.println("2. Delete Key"); - System.out.println("3. Print Table"); - System.out.println("4. Exit"); - System.out.println("5. Search and print key index"); - System.out.println("6. Check load factor"); - - choice = In.nextInt(); + while (true) { + System.out.println("Enter your Choice :"); + System.out.println("1. Add Key"); + System.out.println("2. Delete Key"); + System.out.println("3. Print Table"); + System.out.println("4. Exit"); + System.out.println("5. Search and print key index"); + System.out.println("6. Check load factor"); - switch (choice) { - case 1: { - System.out.println("Enter the Key: "); - key = In.nextInt(); - h.insertHash(key); - break; - } - case 2: { - System.out.println("Enter the Key delete: "); - key = In.nextInt(); - h.deleteHash(key); - break; - } - case 3: { - System.out.println("Print table"); - h.displayHashtable(); - break; - } - case 4: { - In.close(); - return; - } - case 5: { - System.out.println("Enter the Key to find and print: "); - key = In.nextInt(); - System.out.println("Key: "+ key + " is at index: "+ h.findHash(key)); - break; - } - case 6: { - h.checkLoadFactor(); - break; - } - } - - } - } -} \ No newline at end of file + choice = In.nextInt(); + + switch (choice) { + case 1: + { + System.out.println("Enter the Key: "); + key = In.nextInt(); + h.insertHash(key); + break; + } + case 2: + { + System.out.println("Enter the Key delete: "); + key = In.nextInt(); + h.deleteHash(key); + break; + } + case 3: + { + System.out.println("Print table"); + h.displayHashtable(); + break; + } + case 4: + { + In.close(); + return; + } + case 5: + { + System.out.println("Enter the Key to find and print: "); + key = In.nextInt(); + System.out.println("Key: " + key + " is at index: " + h.findHash(key)); + break; + } + case 6: + { + h.checkLoadFactor(); + break; + } + } + } + } +} diff --git a/DataStructures/Heaps/EmptyHeapException.java b/DataStructures/Heaps/EmptyHeapException.java index a0fda5f53786..c47442951a6a 100644 --- a/DataStructures/Heaps/EmptyHeapException.java +++ b/DataStructures/Heaps/EmptyHeapException.java @@ -1,14 +1,12 @@ package DataStructures.Heaps; /** - * @author Nicolas Renard - * Exception to be thrown if the getElement method is used on an empty heap. + * @author Nicolas Renard Exception to be thrown if the getElement method is used on an empty heap. */ @SuppressWarnings("serial") public class EmptyHeapException extends Exception { - public EmptyHeapException(String message) { - super(message); - } - + public EmptyHeapException(String message) { + super(message); + } } diff --git a/DataStructures/Heaps/Heap.java b/DataStructures/Heaps/Heap.java index 0b7da3436581..75e113f8334f 100644 --- a/DataStructures/Heaps/Heap.java +++ b/DataStructures/Heaps/Heap.java @@ -2,39 +2,39 @@ /** * Interface common to heap data structures.
- *

Heaps are tree-like data structures that allow storing elements in a specific - * way. Each node corresponds to an element and has one parent node (except for the root) and - * at most two children nodes. Every element contains a key, and those keys - * indicate how the tree shall be built. For instance, for a min-heap, the key of a node shall - * be greater than or equal to its parent's and lower than or equal to its children's (the opposite rule applies to a - * max-heap).

- *

All heap-related operations (inserting or deleting an element, extracting the min or max) are performed in - * O(log n) time.

+ * + *

Heaps are tree-like data structures that allow storing elements in a specific way. Each node + * corresponds to an element and has one parent node (except for the root) and at most two children + * nodes. Every element contains a key, and those keys indicate how the tree shall be built. For + * instance, for a min-heap, the key of a node shall be greater than or equal to its parent's and + * lower than or equal to its children's (the opposite rule applies to a max-heap). + * + *

All heap-related operations (inserting or deleting an element, extracting the min or max) are + * performed in O(log n) time. * * @author Nicolas Renard */ public interface Heap { - /** - * @return the top element in the heap, the one with lowest key for min-heap or with - * the highest key for max-heap - * @throws EmptyHeapException if heap is empty - */ - HeapElement getElement() throws EmptyHeapException; - - /** - * Inserts an element in the heap. Adds it to then end and toggle it until it finds its - * right position. - * - * @param element an instance of the HeapElement class. - */ - void insertElement(HeapElement element); + /** + * @return the top element in the heap, the one with lowest key for min-heap or with the highest + * key for max-heap + * @throws EmptyHeapException if heap is empty + */ + HeapElement getElement() throws EmptyHeapException; - /** - * Delete an element in the heap. - * - * @param elementIndex int containing the position in the heap of the element to be deleted. - */ - void deleteElement(int elementIndex); + /** + * Inserts an element in the heap. Adds it to then end and toggle it until it finds its right + * position. + * + * @param element an instance of the HeapElement class. + */ + void insertElement(HeapElement element); -} \ No newline at end of file + /** + * Delete an element in the heap. + * + * @param elementIndex int containing the position in the heap of the element to be deleted. + */ + void deleteElement(int elementIndex); +} diff --git a/DataStructures/Heaps/HeapElement.java b/DataStructures/Heaps/HeapElement.java index 028d9b3e67de..5db98783eb7f 100644 --- a/DataStructures/Heaps/HeapElement.java +++ b/DataStructures/Heaps/HeapElement.java @@ -1,137 +1,125 @@ package DataStructures.Heaps; -import java.lang.Double; -import java.lang.Object; /** * Class for heap elements.
- *

A heap element contains two attributes: a key which will be used to build the tree (int - * or double, either primitive type or object) and any kind of IMMUTABLE object the user sees fit - * to carry any information he/she likes. Be aware that the use of a mutable object might - * jeopardize the integrity of this information.

+ * + *

A heap element contains two attributes: a key which will be used to build the tree (int or + * double, either primitive type or object) and any kind of IMMUTABLE object the user sees fit to + * carry any information he/she likes. Be aware that the use of a mutable object might jeopardize + * the integrity of this information. * * @author Nicolas Renard */ public class HeapElement { - private final double key; - private final Object additionalInfo; - - // Constructors - - /** - * @param key : a number of primitive type 'double' - * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry - * additional information of use for the user - */ - public HeapElement(double key, Object info) { - this.key = key; - this.additionalInfo = info; - } - - /** - * @param key : a number of primitive type 'int' - * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry - * additional information of use for the user - */ - public HeapElement(int key, Object info) { - this.key = key; - this.additionalInfo = info; - } - - /** - * @param key : a number of object type 'Integer' - * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry - * additional information of use for the user - */ - public HeapElement(Integer key, Object info) { - this.key = key; - this.additionalInfo = info; - } - - /** - * @param key : a number of object type 'Double' - * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry - * additional information of use for the user - */ - public HeapElement(Double key, Object info) { - this.key = key; - this.additionalInfo = info; - } - - /** - * @param key : a number of primitive type 'double' - */ - public HeapElement(double key) { - this.key = key; - this.additionalInfo = null; - } - - /** - * @param key : a number of primitive type 'int' - */ - public HeapElement(int key) { - this.key = key; - this.additionalInfo = null; - } - - /** - * @param key : a number of object type 'Integer' - */ - public HeapElement(Integer key) { - this.key = key; - this.additionalInfo = null; - } - - /** - * @param key : a number of object type 'Double' - */ - public HeapElement(Double key) { - this.key = key; - this.additionalInfo = null; - } - - // Getters - - /** - * @return the object containing the additional info provided by the user. - */ - public Object getInfo() { - return additionalInfo; - } - - /** - * @return the key value of the element - */ - public double getKey() { - return key; - } - - // Overridden object methods - - public String toString() { - return "Key: " + key + " - " + additionalInfo.toString(); - } - - /** - * @param otherHeapElement - * @return true if the keys on both elements are identical and the additional info objects - * are identical. - */ - @Override - public boolean equals(Object o) { - if (o != null) { - if (!(o instanceof HeapElement)) return false; - HeapElement otherHeapElement = (HeapElement) o; - return (this.key == otherHeapElement.key) && (this.additionalInfo.equals(otherHeapElement.additionalInfo)); - } - return false; - } - - @Override - public int hashCode() { - int result = 0; - result = 31*result + (int) key; - result = 31*result + (additionalInfo != null ? additionalInfo.hashCode() : 0); - return result; + private final double key; + private final Object additionalInfo; + + // Constructors + + /** + * @param key : a number of primitive type 'double' + * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry + * additional information of use for the user + */ + public HeapElement(double key, Object info) { + this.key = key; + this.additionalInfo = info; + } + + /** + * @param key : a number of primitive type 'int' + * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry + * additional information of use for the user + */ + public HeapElement(int key, Object info) { + this.key = key; + this.additionalInfo = info; + } + + /** + * @param key : a number of object type 'Integer' + * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry + * additional information of use for the user + */ + public HeapElement(Integer key, Object info) { + this.key = key; + this.additionalInfo = info; + } + + /** + * @param key : a number of object type 'Double' + * @param info : any kind of IMMUTABLE object. May be null, since the purpose is only to carry + * additional information of use for the user + */ + public HeapElement(Double key, Object info) { + this.key = key; + this.additionalInfo = info; + } + + /** @param key : a number of primitive type 'double' */ + public HeapElement(double key) { + this.key = key; + this.additionalInfo = null; + } + + /** @param key : a number of primitive type 'int' */ + public HeapElement(int key) { + this.key = key; + this.additionalInfo = null; + } + + /** @param key : a number of object type 'Integer' */ + public HeapElement(Integer key) { + this.key = key; + this.additionalInfo = null; + } + + /** @param key : a number of object type 'Double' */ + public HeapElement(Double key) { + this.key = key; + this.additionalInfo = null; + } + + // Getters + + /** @return the object containing the additional info provided by the user. */ + public Object getInfo() { + return additionalInfo; + } + + /** @return the key value of the element */ + public double getKey() { + return key; + } + + // Overridden object methods + + public String toString() { + return "Key: " + key + " - " + additionalInfo.toString(); + } + + /** + * @param otherHeapElement + * @return true if the keys on both elements are identical and the additional info objects are + * identical. + */ + @Override + public boolean equals(Object o) { + if (o != null) { + if (!(o instanceof HeapElement)) return false; + HeapElement otherHeapElement = (HeapElement) o; + return (this.key == otherHeapElement.key) + && (this.additionalInfo.equals(otherHeapElement.additionalInfo)); } + return false; + } + + @Override + public int hashCode() { + int result = 0; + result = 31 * result + (int) key; + result = 31 * result + (additionalInfo != null ? additionalInfo.hashCode() : 0); + return result; + } } diff --git a/DataStructures/Heaps/MaxHeap.java b/DataStructures/Heaps/MaxHeap.java index 3945caa97fde..1c9e0a08348f 100644 --- a/DataStructures/Heaps/MaxHeap.java +++ b/DataStructures/Heaps/MaxHeap.java @@ -4,116 +4,122 @@ import java.util.List; /** - * Heap tree where a node's key is higher than or equal to its parent's and lower than or equal - * to its children's. + * Heap tree where a node's key is higher than or equal to its parent's and lower than or equal to + * its children's. * * @author Nicolas Renard */ public class MaxHeap implements Heap { - private final List maxHeap; + private final List maxHeap; - public MaxHeap(List listElements) { - maxHeap = new ArrayList<>(); - for (HeapElement heapElement : listElements) { - if (heapElement != null) insertElement(heapElement); - else System.out.println("Null element. Not added to heap"); - } - if (maxHeap.size() == 0) System.out.println("No element has been added, empty heap."); + public MaxHeap(List listElements) { + maxHeap = new ArrayList<>(); + for (HeapElement heapElement : listElements) { + if (heapElement != null) insertElement(heapElement); + else System.out.println("Null element. Not added to heap"); } + if (maxHeap.size() == 0) System.out.println("No element has been added, empty heap."); + } - /** - * Get the element at a given index. The key for the list is equal to index value - 1 - * - * @param elementIndex index - * @return heapElement - */ - public HeapElement getElement(int elementIndex) { - if ((elementIndex <= 0) || (elementIndex > maxHeap.size())) - throw new IndexOutOfBoundsException("Index out of heap range"); - return maxHeap.get(elementIndex - 1); - } - - // Get the key of the element at a given index - private double getElementKey(int elementIndex) { - return maxHeap.get(elementIndex - 1).getKey(); - } - - // Swaps two elements in the heap - private void swap(int index1, int index2) { - HeapElement temporaryElement = maxHeap.get(index1 - 1); - maxHeap.set(index1 - 1, maxHeap.get(index2 - 1)); - maxHeap.set(index2 - 1, temporaryElement); - } + /** + * Get the element at a given index. The key for the list is equal to index value - 1 + * + * @param elementIndex index + * @return heapElement + */ + public HeapElement getElement(int elementIndex) { + if ((elementIndex <= 0) || (elementIndex > maxHeap.size())) + throw new IndexOutOfBoundsException("Index out of heap range"); + return maxHeap.get(elementIndex - 1); + } - // Toggle an element up to its right place as long as its key is lower than its parent's - private void toggleUp(int elementIndex) { - double key = maxHeap.get(elementIndex - 1).getKey(); - while (getElementKey((int) Math.floor(elementIndex / 2.0)) < key) { - swap(elementIndex, (int) Math.floor(elementIndex / 2.0)); - elementIndex = (int) Math.floor(elementIndex / 2.0); - } - } + // Get the key of the element at a given index + private double getElementKey(int elementIndex) { + return maxHeap.get(elementIndex - 1).getKey(); + } - // Toggle an element down to its right place as long as its key is higher - // than any of its children's - private void toggleDown(int elementIndex) { - double key = maxHeap.get(elementIndex - 1).getKey(); - boolean wrongOrder = (key < getElementKey(elementIndex * 2)) || (key < getElementKey(Math.min(elementIndex * 2, maxHeap.size()))); - while ((2 * elementIndex <= maxHeap.size()) && wrongOrder) { - // Check whether it shall swap the element with its left child or its right one if any. - if ((2 * elementIndex < maxHeap.size()) && (getElementKey(elementIndex * 2 + 1) > getElementKey(elementIndex * 2))) { - swap(elementIndex, 2 * elementIndex + 1); - elementIndex = 2 * elementIndex + 1; - } else { - swap(elementIndex, 2 * elementIndex); - elementIndex = 2 * elementIndex; - } - wrongOrder = (key < getElementKey(elementIndex * 2)) || (key < getElementKey(Math.min(elementIndex * 2, maxHeap.size()))); + // Swaps two elements in the heap + private void swap(int index1, int index2) { + HeapElement temporaryElement = maxHeap.get(index1 - 1); + maxHeap.set(index1 - 1, maxHeap.get(index2 - 1)); + maxHeap.set(index2 - 1, temporaryElement); + } - } + // Toggle an element up to its right place as long as its key is lower than its parent's + private void toggleUp(int elementIndex) { + double key = maxHeap.get(elementIndex - 1).getKey(); + while (getElementKey((int) Math.floor(elementIndex / 2.0)) < key) { + swap(elementIndex, (int) Math.floor(elementIndex / 2.0)); + elementIndex = (int) Math.floor(elementIndex / 2.0); } + } - private HeapElement extractMax() { - HeapElement result = maxHeap.get(0); - deleteElement(0); - return result; + // Toggle an element down to its right place as long as its key is higher + // than any of its children's + private void toggleDown(int elementIndex) { + double key = maxHeap.get(elementIndex - 1).getKey(); + boolean wrongOrder = + (key < getElementKey(elementIndex * 2)) + || (key < getElementKey(Math.min(elementIndex * 2, maxHeap.size()))); + while ((2 * elementIndex <= maxHeap.size()) && wrongOrder) { + // Check whether it shall swap the element with its left child or its right one if any. + if ((2 * elementIndex < maxHeap.size()) + && (getElementKey(elementIndex * 2 + 1) > getElementKey(elementIndex * 2))) { + swap(elementIndex, 2 * elementIndex + 1); + elementIndex = 2 * elementIndex + 1; + } else { + swap(elementIndex, 2 * elementIndex); + elementIndex = 2 * elementIndex; + } + wrongOrder = + (key < getElementKey(elementIndex * 2)) + || (key < getElementKey(Math.min(elementIndex * 2, maxHeap.size()))); } + } - @Override - public void insertElement(HeapElement element) { - maxHeap.add(element); - toggleUp(maxHeap.size()); + private HeapElement extractMax() { + HeapElement result = maxHeap.get(0); + deleteElement(0); + return result; + } - } + @Override + public void insertElement(HeapElement element) { + maxHeap.add(element); + toggleUp(maxHeap.size()); + } - @Override - public void deleteElement(int elementIndex) { - if (maxHeap.isEmpty()) - try { - throw new EmptyHeapException("Attempt to delete an element from an empty heap"); - } catch (EmptyHeapException e) { - e.printStackTrace(); - } - if ((elementIndex > maxHeap.size()) || (elementIndex <= 0)) - throw new IndexOutOfBoundsException("Index out of heap range"); - // The last element in heap replaces the one to be deleted - maxHeap.set(elementIndex - 1, getElement(maxHeap.size())); - maxHeap.remove(maxHeap.size()); - // Shall the new element be moved up... - if (getElementKey(elementIndex) > getElementKey((int) Math.floor(elementIndex / 2.0))) toggleUp(elementIndex); - // ... or down ? - else if (((2 * elementIndex <= maxHeap.size()) && (getElementKey(elementIndex) < getElementKey(elementIndex * 2))) || - ((2 * elementIndex < maxHeap.size()) && (getElementKey(elementIndex) < getElementKey(elementIndex * 2)))) - toggleDown(elementIndex); - } + @Override + public void deleteElement(int elementIndex) { + if (maxHeap.isEmpty()) + try { + throw new EmptyHeapException("Attempt to delete an element from an empty heap"); + } catch (EmptyHeapException e) { + e.printStackTrace(); + } + if ((elementIndex > maxHeap.size()) || (elementIndex <= 0)) + throw new IndexOutOfBoundsException("Index out of heap range"); + // The last element in heap replaces the one to be deleted + maxHeap.set(elementIndex - 1, getElement(maxHeap.size())); + maxHeap.remove(maxHeap.size()); + // Shall the new element be moved up... + if (getElementKey(elementIndex) > getElementKey((int) Math.floor(elementIndex / 2.0))) + toggleUp(elementIndex); + // ... or down ? + else if (((2 * elementIndex <= maxHeap.size()) + && (getElementKey(elementIndex) < getElementKey(elementIndex * 2))) + || ((2 * elementIndex < maxHeap.size()) + && (getElementKey(elementIndex) < getElementKey(elementIndex * 2)))) + toggleDown(elementIndex); + } - @Override - public HeapElement getElement() throws EmptyHeapException { - try { - return extractMax(); - } catch (Exception e) { - throw new EmptyHeapException("Heap is empty. Error retrieving element"); - } + @Override + public HeapElement getElement() throws EmptyHeapException { + try { + return extractMax(); + } catch (Exception e) { + throw new EmptyHeapException("Heap is empty. Error retrieving element"); } -} \ No newline at end of file + } +} diff --git a/DataStructures/Heaps/MinHeap.java b/DataStructures/Heaps/MinHeap.java index 39ee6ebf7b8f..1c384063c932 100644 --- a/DataStructures/Heaps/MinHeap.java +++ b/DataStructures/Heaps/MinHeap.java @@ -4,111 +4,117 @@ import java.util.List; /** - * Heap tree where a node's key is higher than or equal to its parent's and lower than or equal - * to its children's. + * Heap tree where a node's key is higher than or equal to its parent's and lower than or equal to + * its children's. * * @author Nicolas Renard */ public class MinHeap implements Heap { - private final List minHeap; + private final List minHeap; - public MinHeap(List listElements) { - minHeap = new ArrayList<>(); - for (HeapElement heapElement : listElements) { - if (heapElement != null) insertElement(heapElement); - else System.out.println("Null element. Not added to heap"); - } - if (minHeap.size() == 0) System.out.println("No element has been added, empty heap."); + public MinHeap(List listElements) { + minHeap = new ArrayList<>(); + for (HeapElement heapElement : listElements) { + if (heapElement != null) insertElement(heapElement); + else System.out.println("Null element. Not added to heap"); } + if (minHeap.size() == 0) System.out.println("No element has been added, empty heap."); + } - // Get the element at a given index. The key for the list is equal to index value - 1 - public HeapElement getElement(int elementIndex) { - if ((elementIndex <= 0) || (elementIndex > minHeap.size())) - throw new IndexOutOfBoundsException("Index out of heap range"); - return minHeap.get(elementIndex - 1); - } - - // Get the key of the element at a given index - private double getElementKey(int elementIndex) { - return minHeap.get(elementIndex - 1).getKey(); - } - - // Swaps two elements in the heap - private void swap(int index1, int index2) { - HeapElement temporaryElement = minHeap.get(index1 - 1); - minHeap.set(index1 - 1, minHeap.get(index2 - 1)); - minHeap.set(index2 - 1, temporaryElement); - } + // Get the element at a given index. The key for the list is equal to index value - 1 + public HeapElement getElement(int elementIndex) { + if ((elementIndex <= 0) || (elementIndex > minHeap.size())) + throw new IndexOutOfBoundsException("Index out of heap range"); + return minHeap.get(elementIndex - 1); + } - // Toggle an element up to its right place as long as its key is lower than its parent's - private void toggleUp(int elementIndex) { - double key = minHeap.get(elementIndex - 1).getKey(); - while (getElementKey((int) Math.floor(elementIndex / 2.0)) > key) { - swap(elementIndex, (int) Math.floor(elementIndex / 2.0)); - elementIndex = (int) Math.floor(elementIndex / 2.0); - } - } + // Get the key of the element at a given index + private double getElementKey(int elementIndex) { + return minHeap.get(elementIndex - 1).getKey(); + } - // Toggle an element down to its right place as long as its key is higher - // than any of its children's - private void toggleDown(int elementIndex) { - double key = minHeap.get(elementIndex - 1).getKey(); - boolean wrongOrder = (key > getElementKey(elementIndex * 2)) || (key > getElementKey(Math.min(elementIndex * 2, minHeap.size()))); - while ((2 * elementIndex <= minHeap.size()) && wrongOrder) { - // Check whether it shall swap the element with its left child or its right one if any. - if ((2 * elementIndex < minHeap.size()) && (getElementKey(elementIndex * 2 + 1) < getElementKey(elementIndex * 2))) { - swap(elementIndex, 2 * elementIndex + 1); - elementIndex = 2 * elementIndex + 1; - } else { - swap(elementIndex, 2 * elementIndex); - elementIndex = 2 * elementIndex; - } - wrongOrder = (key > getElementKey(elementIndex * 2)) || (key > getElementKey(Math.min(elementIndex * 2, minHeap.size()))); + // Swaps two elements in the heap + private void swap(int index1, int index2) { + HeapElement temporaryElement = minHeap.get(index1 - 1); + minHeap.set(index1 - 1, minHeap.get(index2 - 1)); + minHeap.set(index2 - 1, temporaryElement); + } - } + // Toggle an element up to its right place as long as its key is lower than its parent's + private void toggleUp(int elementIndex) { + double key = minHeap.get(elementIndex - 1).getKey(); + while (getElementKey((int) Math.floor(elementIndex / 2.0)) > key) { + swap(elementIndex, (int) Math.floor(elementIndex / 2.0)); + elementIndex = (int) Math.floor(elementIndex / 2.0); } + } - private HeapElement extractMin() { - HeapElement result = minHeap.get(0); - deleteElement(0); - return result; + // Toggle an element down to its right place as long as its key is higher + // than any of its children's + private void toggleDown(int elementIndex) { + double key = minHeap.get(elementIndex - 1).getKey(); + boolean wrongOrder = + (key > getElementKey(elementIndex * 2)) + || (key > getElementKey(Math.min(elementIndex * 2, minHeap.size()))); + while ((2 * elementIndex <= minHeap.size()) && wrongOrder) { + // Check whether it shall swap the element with its left child or its right one if any. + if ((2 * elementIndex < minHeap.size()) + && (getElementKey(elementIndex * 2 + 1) < getElementKey(elementIndex * 2))) { + swap(elementIndex, 2 * elementIndex + 1); + elementIndex = 2 * elementIndex + 1; + } else { + swap(elementIndex, 2 * elementIndex); + elementIndex = 2 * elementIndex; + } + wrongOrder = + (key > getElementKey(elementIndex * 2)) + || (key > getElementKey(Math.min(elementIndex * 2, minHeap.size()))); } + } - @Override - public void insertElement(HeapElement element) { - minHeap.add(element); - toggleUp(minHeap.size()); + private HeapElement extractMin() { + HeapElement result = minHeap.get(0); + deleteElement(0); + return result; + } - } + @Override + public void insertElement(HeapElement element) { + minHeap.add(element); + toggleUp(minHeap.size()); + } - @Override - public void deleteElement(int elementIndex) { - if (minHeap.isEmpty()) - try { - throw new EmptyHeapException("Attempt to delete an element from an empty heap"); - } catch (EmptyHeapException e) { - e.printStackTrace(); - } - if ((elementIndex > minHeap.size()) || (elementIndex <= 0)) - throw new IndexOutOfBoundsException("Index out of heap range"); - // The last element in heap replaces the one to be deleted - minHeap.set(elementIndex - 1, getElement(minHeap.size())); - minHeap.remove(minHeap.size()); - // Shall the new element be moved up... - if (getElementKey(elementIndex) < getElementKey((int)Math.floor(elementIndex / 2.0))) toggleUp(elementIndex); - // ... or down ? - else if (((2 * elementIndex <= minHeap.size()) && (getElementKey(elementIndex) > getElementKey(elementIndex * 2))) || - ((2 * elementIndex < minHeap.size()) && (getElementKey(elementIndex) > getElementKey(elementIndex * 2)))) - toggleDown(elementIndex); - } + @Override + public void deleteElement(int elementIndex) { + if (minHeap.isEmpty()) + try { + throw new EmptyHeapException("Attempt to delete an element from an empty heap"); + } catch (EmptyHeapException e) { + e.printStackTrace(); + } + if ((elementIndex > minHeap.size()) || (elementIndex <= 0)) + throw new IndexOutOfBoundsException("Index out of heap range"); + // The last element in heap replaces the one to be deleted + minHeap.set(elementIndex - 1, getElement(minHeap.size())); + minHeap.remove(minHeap.size()); + // Shall the new element be moved up... + if (getElementKey(elementIndex) < getElementKey((int) Math.floor(elementIndex / 2.0))) + toggleUp(elementIndex); + // ... or down ? + else if (((2 * elementIndex <= minHeap.size()) + && (getElementKey(elementIndex) > getElementKey(elementIndex * 2))) + || ((2 * elementIndex < minHeap.size()) + && (getElementKey(elementIndex) > getElementKey(elementIndex * 2)))) + toggleDown(elementIndex); + } - @Override - public HeapElement getElement() throws EmptyHeapException { - try { - return extractMin(); - } catch (Exception e) { - throw new EmptyHeapException("Heap is empty. Error retrieving element"); - } + @Override + public HeapElement getElement() throws EmptyHeapException { + try { + return extractMin(); + } catch (Exception e) { + throw new EmptyHeapException("Heap is empty. Error retrieving element"); } -} \ No newline at end of file + } +} diff --git a/DataStructures/Heaps/MinPriorityQueue.java b/DataStructures/Heaps/MinPriorityQueue.java index 52e475abf4be..82950d22e700 100644 --- a/DataStructures/Heaps/MinPriorityQueue.java +++ b/DataStructures/Heaps/MinPriorityQueue.java @@ -1,133 +1,125 @@ package DataStructures.Heaps; /** - * Minimum Priority Queue - * It is a part of heap data structure - * A heap is a specific tree based data structure - * in which all the nodes of tree are in a specific order. - * that is the children are arranged in some - * respect of their parents, can either be greater - * or less than the parent. This makes it a min priority queue - * or max priority queue. + * Minimum Priority Queue It is a part of heap data structure A heap is a specific tree based data + * structure in which all the nodes of tree are in a specific order. that is the children are + * arranged in some respect of their parents, can either be greater or less than the parent. This + * makes it a min priority queue or max priority queue. + * *

- *

- * Functions: insert, delete, peek, isEmpty, print, heapSort, sink + * + *

Functions: insert, delete, peek, isEmpty, print, heapSort, sink */ public class MinPriorityQueue { - private int[] heap; - private int capacity; - private int size; + private int[] heap; + private int capacity; + private int size; - // calss the constructor and initializes the capacity - MinPriorityQueue(int c) { - this.capacity = c; - this.size = 0; - this.heap = new int[c + 1]; - } + // calss the constructor and initializes the capacity + MinPriorityQueue(int c) { + this.capacity = c; + this.size = 0; + this.heap = new int[c + 1]; + } - // inserts the key at the end and rearranges it - // so that the binary heap is in appropriate order - public void insert(int key) { - if (this.isFull()) - return; - this.heap[this.size + 1] = key; - int k = this.size + 1; - while (k > 1) { - if (this.heap[k] < this.heap[k / 2]) { - int temp = this.heap[k]; - this.heap[k] = this.heap[k / 2]; - this.heap[k / 2] = temp; - } - k = k / 2; - } - this.size++; + // inserts the key at the end and rearranges it + // so that the binary heap is in appropriate order + public void insert(int key) { + if (this.isFull()) return; + this.heap[this.size + 1] = key; + int k = this.size + 1; + while (k > 1) { + if (this.heap[k] < this.heap[k / 2]) { + int temp = this.heap[k]; + this.heap[k] = this.heap[k / 2]; + this.heap[k / 2] = temp; + } + k = k / 2; } + this.size++; + } - // returns the highest priority value - public int peek() { - return this.heap[1]; - } + // returns the highest priority value + public int peek() { + return this.heap[1]; + } - // returns boolean value whether the heap is empty or not - public boolean isEmpty() { - if (0 == this.size) - return true; - return false; - } + // returns boolean value whether the heap is empty or not + public boolean isEmpty() { + if (0 == this.size) return true; + return false; + } - // returns boolean value whether the heap is full or not - public boolean isFull() { - if (this.size == this.capacity) - return true; - return false; - } + // returns boolean value whether the heap is full or not + public boolean isFull() { + if (this.size == this.capacity) return true; + return false; + } - // prints the heap - public void print() { - for (int i = 1; i <= this.capacity; i++) - System.out.print(this.heap[i] + " "); - System.out.println(); - } + // prints the heap + public void print() { + for (int i = 1; i <= this.capacity; i++) System.out.print(this.heap[i] + " "); + System.out.println(); + } - // heap sorting can be done by performing - // delete function to the number of times of the size of the heap - // it returns reverse sort because it is a min priority queue - public void heapSort() { - for (int i = 1; i < this.capacity; i++) - this.delete(); - } + // heap sorting can be done by performing + // delete function to the number of times of the size of the heap + // it returns reverse sort because it is a min priority queue + public void heapSort() { + for (int i = 1; i < this.capacity; i++) this.delete(); + } - // this function reorders the heap after every delete function - private void sink() { - int k = 1; - while (2 * k <= this.size || 2 * k + 1 <= this.size) { - int minIndex; - if (this.heap[2 * k] >= this.heap[k]) { - if (2 * k + 1 <= this.size && this.heap[2 * k + 1] >= this.heap[k]) { - break; - } else if (2 * k + 1 > this.size) { - break; - } - } - if (2 * k + 1 > this.size) { - minIndex = this.heap[2 * k] < this.heap[k] ? 2 * k : k; - } else { - if (this.heap[k] > this.heap[2 * k] || this.heap[k] > this.heap[2 * k + 1]) { - minIndex = this.heap[2 * k] < this.heap[2 * k + 1] ? 2 * k : 2 * k + 1; - } else { - minIndex = k; - } - } - int temp = this.heap[k]; - this.heap[k] = this.heap[minIndex]; - this.heap[minIndex] = temp; - k = minIndex; + // this function reorders the heap after every delete function + private void sink() { + int k = 1; + while (2 * k <= this.size || 2 * k + 1 <= this.size) { + int minIndex; + if (this.heap[2 * k] >= this.heap[k]) { + if (2 * k + 1 <= this.size && this.heap[2 * k + 1] >= this.heap[k]) { + break; + } else if (2 * k + 1 > this.size) { + break; + } + } + if (2 * k + 1 > this.size) { + minIndex = this.heap[2 * k] < this.heap[k] ? 2 * k : k; + } else { + if (this.heap[k] > this.heap[2 * k] || this.heap[k] > this.heap[2 * k + 1]) { + minIndex = this.heap[2 * k] < this.heap[2 * k + 1] ? 2 * k : 2 * k + 1; + } else { + minIndex = k; } + } + int temp = this.heap[k]; + this.heap[k] = this.heap[minIndex]; + this.heap[minIndex] = temp; + k = minIndex; } + } - // deletes the highest priority value from the heap - public int delete() { - int min = this.heap[1]; - this.heap[1] = this.heap[this.size]; - this.heap[this.size] = min; - this.size--; - this.sink(); - return min; - } + // deletes the highest priority value from the heap + public int delete() { + int min = this.heap[1]; + this.heap[1] = this.heap[this.size]; + this.heap[this.size] = min; + this.size--; + this.sink(); + return min; + } - public static void main(String[] args) { - // testing - MinPriorityQueue q = new MinPriorityQueue(8); - q.insert(5); - q.insert(2); - q.insert(4); - q.insert(1); - q.insert(7); - q.insert(6); - q.insert(3); - q.insert(8); - q.print(); // [ 1, 2, 3, 5, 7, 6, 4, 8 ] - q.heapSort(); - q.print(); // [ 8, 7, 6, 5, 4, 3, 2, 1 ] - } -} \ No newline at end of file + public static void main(String[] args) { + // testing + MinPriorityQueue q = new MinPriorityQueue(8); + q.insert(5); + q.insert(2); + q.insert(4); + q.insert(1); + q.insert(7); + q.insert(6); + q.insert(3); + q.insert(8); + q.print(); // [ 1, 2, 3, 5, 7, 6, 4, 8 ] + q.heapSort(); + q.print(); // [ 8, 7, 6, 5, 4, 3, 2, 1 ] + } +} diff --git a/DataStructures/Lists/CircleLinkedList.java b/DataStructures/Lists/CircleLinkedList.java index b46441a1fa47..b1f9ec77d738 100644 --- a/DataStructures/Lists/CircleLinkedList.java +++ b/DataStructures/Lists/CircleLinkedList.java @@ -1,63 +1,65 @@ package DataStructures.Lists; public class CircleLinkedList { - private static class Node { - Node next; - E value; + private static class Node { + Node next; + E value; - private Node(E value, Node next) { - this.value = value; - this.next = next; - } + private Node(E value, Node next) { + this.value = value; + this.next = next; } + } - //For better O.O design this should be private allows for better black box design - private int size; - //this will point to dummy node; - private Node head = null; + // For better O.O design this should be private allows for better black box design + private int size; + // this will point to dummy node; + private Node head = null; - //constructer for class.. here we will make a dummy node for circly linked list implementation with reduced error catching as our list will never be empty; - public CircleLinkedList() { - //creation of the dummy node - head = new Node(null, head); - size = 0; - } + // constructer for class.. here we will make a dummy node for circly linked list implementation + // with reduced error catching as our list will never be empty; + public CircleLinkedList() { + // creation of the dummy node + head = new Node(null, head); + size = 0; + } - // getter for the size... needed because size is private. - public int getSize() { - return size; - } + // getter for the size... needed because size is private. + public int getSize() { + return size; + } - // for the sake of simplistiy this class will only contain the append function or addLast other add functions can be implemented however this is the basses of them all really. - public void append(E value) { - if (value == null) { - // we do not want to add null elements to the list. - throw new NullPointerException("Cannot add null element to the list"); - } - //head.next points to the last element; - head.next = new Node(value, head); - size++; + // for the sake of simplistiy this class will only contain the append function or addLast other + // add functions can be implemented however this is the basses of them all really. + public void append(E value) { + if (value == null) { + // we do not want to add null elements to the list. + throw new NullPointerException("Cannot add null element to the list"); } + // head.next points to the last element; + head.next = new Node(value, head); + size++; + } - public E remove(int pos) { - if (pos > size || pos < 0) { - //catching errors - throw new IndexOutOfBoundsException("position cannot be greater than size or negative"); - } - //we need to keep track of the element before the element we want to remove we can see why bellow. - Node before = head; - for (int i = 1; i <= pos; i++) { - before = before.next; - } - Node destroy = before.next; - E saved = destroy.value; - // assigning the next reference to the the element following the element we want to remove... the last element will be assigned to the head. - before.next = before.next.next; - // scrubbing - destroy = null; - size--; - return saved; - + public E remove(int pos) { + if (pos > size || pos < 0) { + // catching errors + throw new IndexOutOfBoundsException("position cannot be greater than size or negative"); } - + // we need to keep track of the element before the element we want to remove we can see why + // bellow. + Node before = head; + for (int i = 1; i <= pos; i++) { + before = before.next; + } + Node destroy = before.next; + E saved = destroy.value; + // assigning the next reference to the the element following the element we want to remove... + // the last element will be assigned to the head. + before.next = before.next.next; + // scrubbing + destroy = null; + size--; + return saved; + } } diff --git a/DataStructures/Lists/CountSinglyLinkedListRecursion.java b/DataStructures/Lists/CountSinglyLinkedListRecursion.java index 652791be4542..00fc1d90b1ac 100644 --- a/DataStructures/Lists/CountSinglyLinkedListRecursion.java +++ b/DataStructures/Lists/CountSinglyLinkedListRecursion.java @@ -1,26 +1,26 @@ package DataStructures.Lists; public class CountSinglyLinkedListRecursion extends SinglyLinkedList { - public static void main(String[] args) { - CountSinglyLinkedListRecursion list = new CountSinglyLinkedListRecursion(); - for (int i = 1; i <= 5; ++i) { - list.insert(i); - } - assert list.count() == 5; + public static void main(String[] args) { + CountSinglyLinkedListRecursion list = new CountSinglyLinkedListRecursion(); + for (int i = 1; i <= 5; ++i) { + list.insert(i); } + assert list.count() == 5; + } - /** - * Calculate the count of the list manually using recursion. - * - * @param head head of the list. - * @return count of the list. - */ - private int countRecursion(Node head) { - return head == null ? 0 : 1 + countRecursion(head.next); - } + /** + * Calculate the count of the list manually using recursion. + * + * @param head head of the list. + * @return count of the list. + */ + private int countRecursion(Node head) { + return head == null ? 0 : 1 + countRecursion(head.next); + } - @Override - public int count() { - return countRecursion(getHead()); - } + @Override + public int count() { + return countRecursion(getHead()); + } } diff --git a/DataStructures/Lists/CursorLinkedList.java b/DataStructures/Lists/CursorLinkedList.java index b12794fd1067..aa9a1aeea2cb 100644 --- a/DataStructures/Lists/CursorLinkedList.java +++ b/DataStructures/Lists/CursorLinkedList.java @@ -4,213 +4,185 @@ public class CursorLinkedList { - - private static class Node { + private static class Node { - T element; - int next; + T element; + int next; - Node(T element, int next) { - this.element = element; - this.next = next; - } - } - - private final int os; - private int head; - private final Node[] cursorSpace; - private int count; - private final static int CURSOR_SPACE_SIZE = 100; - - - - { - // init at loading time - cursorSpace = new Node[CURSOR_SPACE_SIZE]; - for (int i = 0; i < CURSOR_SPACE_SIZE; i++) { - cursorSpace[i] = new Node<>(null, i + 1); - } - cursorSpace[CURSOR_SPACE_SIZE - 1].next = 0; + Node(T element, int next) { + this.element = element; + this.next = next; } - - - public CursorLinkedList() { - os = 0; - count = 0; - head = -1; + } + + private final int os; + private int head; + private final Node[] cursorSpace; + private int count; + private static final int CURSOR_SPACE_SIZE = 100; + + { + // init at loading time + cursorSpace = new Node[CURSOR_SPACE_SIZE]; + for (int i = 0; i < CURSOR_SPACE_SIZE; i++) { + cursorSpace[i] = new Node<>(null, i + 1); } + cursorSpace[CURSOR_SPACE_SIZE - 1].next = 0; + } - public void printList() { + public CursorLinkedList() { + os = 0; + count = 0; + head = -1; + } - if (head != -1) { + public void printList() { + if (head != -1) { - int start = head; - while (start != -1) { - - T element = cursorSpace[start].element; - System.out.println(element.toString()); - start = cursorSpace[start].next; - } - } + int start = head; + while (start != -1) { + T element = cursorSpace[start].element; + System.out.println(element.toString()); + start = cursorSpace[start].next; + } } - - - /** - * @return the logical index of the element within the list , not the actual - * index of the [cursorSpace] array - */ - public int indexOf(T element) { - - - Objects.requireNonNull(element); - Node iterator = cursorSpace[head]; - for (int i = 0; i < count; i++) { - if (iterator.element.equals(element)) { - return i; - } - iterator = cursorSpace[iterator.next]; - } - - - return -1; + } + + /** + * @return the logical index of the element within the list , not the actual index of the + * [cursorSpace] array + */ + public int indexOf(T element) { + + Objects.requireNonNull(element); + Node iterator = cursorSpace[head]; + for (int i = 0; i < count; i++) { + if (iterator.element.equals(element)) { + return i; + } + iterator = cursorSpace[iterator.next]; } + return -1; + } - /** - * @param position , the logical index of the element , not the actual one - * within the [cursorSpace] array . - * this method should be used to get the index give by indexOf() method. - * @return - */ - - public T get(int position) { - - if (position >= 0 && position < count) { - - int start = head; - int counter = 0; - while (start != -1) { + /** + * @param position , the logical index of the element , not the actual one within the + * [cursorSpace] array . this method should be used to get the index give by indexOf() method. + * @return + */ + public T get(int position) { - T element = cursorSpace[start].element; - if (counter == position) { - return element; - } + if (position >= 0 && position < count) { - start = cursorSpace[start].next; - counter++; - } + int start = head; + int counter = 0; + while (start != -1) { + T element = cursorSpace[start].element; + if (counter == position) { + return element; } - return null; + start = cursorSpace[start].next; + counter++; + } } + return null; + } - public void removeByIndex(int index) { + public void removeByIndex(int index) { - if (index >= 0 && index < count) { - - T element = get(index); - remove(element); - } + if (index >= 0 && index < count) { + T element = get(index); + remove(element); } + } - public void remove(T element) { - - - Objects.requireNonNull(element); - - // case element is in the head - T temp_element = cursorSpace[head].element; - int temp_next = cursorSpace[head].next; - if (temp_element.equals(element)) { - free(head); - head = temp_next; - } else { // otherwise cases + public void remove(T element) { - int prev_index = head; - int current_index = cursorSpace[prev_index].next; + Objects.requireNonNull(element); - while (current_index != -1) { + // case element is in the head + T temp_element = cursorSpace[head].element; + int temp_next = cursorSpace[head].next; + if (temp_element.equals(element)) { + free(head); + head = temp_next; + } else { // otherwise cases - T current_element = cursorSpace[current_index].element; - if (current_element.equals(element)) { - cursorSpace[prev_index].next = cursorSpace[current_index].next; - free(current_index); - break; - } + int prev_index = head; + int current_index = cursorSpace[prev_index].next; - prev_index = current_index; - current_index = cursorSpace[prev_index].next; - } + while (current_index != -1) { + T current_element = cursorSpace[current_index].element; + if (current_element.equals(element)) { + cursorSpace[prev_index].next = cursorSpace[current_index].next; + free(current_index); + break; } - - count--; - - } - - private void free(int index) { - - Node os_node = cursorSpace[os]; - int os_next = os_node.next; - cursorSpace[os].next = index; - cursorSpace[index].element = null; - cursorSpace[index].next = os_next; - + prev_index = current_index; + current_index = cursorSpace[prev_index].next; + } } + count--; + } - public void append(T element) { - - Objects.requireNonNull(element); - int availableIndex = alloc(); - cursorSpace[availableIndex].element = element; + private void free(int index) { - if (head == -1) { - head = availableIndex; - } - - int iterator = head; - while (cursorSpace[iterator].next != -1) { - iterator = cursorSpace[iterator].next; - } + Node os_node = cursorSpace[os]; + int os_next = os_node.next; + cursorSpace[os].next = index; + cursorSpace[index].element = null; + cursorSpace[index].next = os_next; + } - cursorSpace[iterator].next = availableIndex; - cursorSpace[availableIndex].next = -1; + public void append(T element) { + Objects.requireNonNull(element); + int availableIndex = alloc(); + cursorSpace[availableIndex].element = element; - count++; + if (head == -1) { + head = availableIndex; } - /** - * @return the index of the next available node - */ - private int alloc() { - + int iterator = head; + while (cursorSpace[iterator].next != -1) { + iterator = cursorSpace[iterator].next; + } - //1- get the index at which the os is pointing - int availableNodeIndex = cursorSpace[os].next; + cursorSpace[iterator].next = availableIndex; + cursorSpace[availableIndex].next = -1; - if (availableNodeIndex == 0) { - throw new OutOfMemoryError(); - } + count++; + } - //2- make the os point to the next of the @var{availableNodeIndex} - int availableNext = cursorSpace[availableNodeIndex].next; - cursorSpace[os].next = availableNext; + /** @return the index of the next available node */ + private int alloc() { - // this to indicate an end of the list , helpful at testing since any err - // would throw an outOfBoundException - cursorSpace[availableNodeIndex].next = -1; - - return availableNodeIndex; + // 1- get the index at which the os is pointing + int availableNodeIndex = cursorSpace[os].next; + if (availableNodeIndex == 0) { + throw new OutOfMemoryError(); } + // 2- make the os point to the next of the @var{availableNodeIndex} + int availableNext = cursorSpace[availableNodeIndex].next; + cursorSpace[os].next = availableNext; + + // this to indicate an end of the list , helpful at testing since any err + // would throw an outOfBoundException + cursorSpace[availableNodeIndex].next = -1; + return availableNodeIndex; + } } diff --git a/DataStructures/Lists/DoublyLinkedList.java b/DataStructures/Lists/DoublyLinkedList.java index c1250b754003..5b22d68c4827 100644 --- a/DataStructures/Lists/DoublyLinkedList.java +++ b/DataStructures/Lists/DoublyLinkedList.java @@ -1,343 +1,307 @@ package DataStructures.Lists; /** - * This class implements a DoublyLinkedList. This is done using the classes - * LinkedList and Link. - *

- * A linked list is similar to an array, it holds values. However, - * links in a linked list do not have indexes. With a linked list - * you do not need to predetermine it's size as it grows and shrinks - * as it is edited. This is an example of a double ended, doubly - * linked list. Each link references the next link and the previous - * one. + * This class implements a DoublyLinkedList. This is done using the classes LinkedList and Link. + * + *

A linked list is similar to an array, it holds values. However, links in a linked list do not + * have indexes. With a linked list you do not need to predetermine it's size as it grows and + * shrinks as it is edited. This is an example of a double ended, doubly linked list. Each link + * references the next link and the previous one. * * @author Unknown */ - public class DoublyLinkedList { - /** - * Head refers to the front of the list - */ - private Link head; - /** - * Tail refers to the back of the list - */ - private Link tail; - - /** - * Size refers to the number of elements present in the list - */ - private int size; - - /** - * Default Constructor - */ - public DoublyLinkedList() { - head = null; - tail = null; - size = 0; - } - - /** - * Constructs a list containing the elements of the array - * - * @param array the array whose elements are to be placed into this list - * @throws NullPointerException if the specified collection is null - */ - public DoublyLinkedList(int[] array) { - if (array == null) throw new NullPointerException(); - for (int i : array) { - insertTail(i); - } - size = array.length; + /** Head refers to the front of the list */ + private Link head; + /** Tail refers to the back of the list */ + private Link tail; + + /** Size refers to the number of elements present in the list */ + private int size; + + /** Default Constructor */ + public DoublyLinkedList() { + head = null; + tail = null; + size = 0; + } + + /** + * Constructs a list containing the elements of the array + * + * @param array the array whose elements are to be placed into this list + * @throws NullPointerException if the specified collection is null + */ + public DoublyLinkedList(int[] array) { + if (array == null) throw new NullPointerException(); + for (int i : array) { + insertTail(i); } - - /** - * Insert an element at the head - * - * @param x Element to be inserted - */ - public void insertHead(int x) { - Link newLink = new Link(x); // Create a new link with a value attached to it - if (isEmpty()) // Set the first element added to be the tail - tail = newLink; - else - head.previous = newLink; // newLink <-- currenthead(head) - newLink.next = head; // newLink <--> currenthead(head) - head = newLink; // newLink(head) <--> oldhead - ++size; + size = array.length; + } + + /** + * Insert an element at the head + * + * @param x Element to be inserted + */ + public void insertHead(int x) { + Link newLink = new Link(x); // Create a new link with a value attached to it + if (isEmpty()) // Set the first element added to be the tail + tail = newLink; + else head.previous = newLink; // newLink <-- currenthead(head) + newLink.next = head; // newLink <--> currenthead(head) + head = newLink; // newLink(head) <--> oldhead + ++size; + } + + /** + * Insert an element at the tail + * + * @param x Element to be inserted + */ + public void insertTail(int x) { + Link newLink = new Link(x); + newLink.next = null; // currentTail(tail) newlink --> + if (isEmpty()) { // Check if there are no elements in list then it adds first element + tail = newLink; + head = tail; + } else { + tail.next = newLink; // currentTail(tail) --> newLink --> + newLink.previous = tail; // currentTail(tail) <--> newLink --> + tail = newLink; // oldTail <--> newLink(tail) --> } - - /** - * Insert an element at the tail - * - * @param x Element to be inserted - */ - public void insertTail(int x) { + ++size; + } + + /** + * Insert an element at the index + * + * @param x Element to be inserted + * @param index Index(from start) at which the element x to be inserted + */ + public void insertElementByIndex(int x, int index) { + if (index > size) throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); + if (index == 0) { + insertHead(x); + } else { + if (index == size) { + insertTail(x); + } else { Link newLink = new Link(x); - newLink.next = null; // currentTail(tail) newlink --> - if (isEmpty()) { // Check if there are no elements in list then it adds first element - tail = newLink; - head = tail; - } else { - tail.next = newLink; // currentTail(tail) --> newLink --> - newLink.previous = tail; // currentTail(tail) <--> newLink --> - tail = newLink; // oldTail <--> newLink(tail) --> + Link previousLink = head; // + for (int i = 1; i < index; i++) { // Loop to reach the index + previousLink = previousLink.next; } - ++size; + // previousLink is the Link at index - 1 from start + previousLink.next.previous = newLink; + newLink.next = previousLink.next; + newLink.previous = previousLink; + previousLink.next = newLink; + } } - - /** - * Insert an element at the index - * - * @param x Element to be inserted - * @param index Index(from start) at which the element x to be inserted - * - */ - public void insertElementByIndex(int x,int index){ - if(index > size) throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); - if(index == 0){ - insertHead(x); - }else{ - if(index == size){ - insertTail(x); - }else{ - Link newLink = new Link(x); - Link previousLink = head; // - for(int i = 1; i < index; i++){ //Loop to reach the index - previousLink = previousLink.next; - } - // previousLink is the Link at index - 1 from start - previousLink.next.previous = newLink; - newLink.next = previousLink.next; - newLink.previous = previousLink; - previousLink.next = newLink; - } - } - ++size; - + ++size; + } + + /** + * Delete the element at the head + * + * @return The new head + */ + public Link deleteHead() { + Link temp = head; + head = head.next; // oldHead <--> 2ndElement(head) + + if (head == null) { + tail = null; + } else { + head.previous = + null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed } - - /** - * Delete the element at the head - * - * @return The new head - */ - public Link deleteHead() { - Link temp = head; - head = head.next; // oldHead <--> 2ndElement(head) - - if (head == null) { - tail = null; - } else { - head.previous = null; // oldHead --> 2ndElement(head) nothing pointing at old head so will be removed - } - --size; - return temp; + --size; + return temp; + } + + /** + * Delete the element at the tail + * + * @return The new tail + */ + public Link deleteTail() { + Link temp = tail; + tail = tail.previous; // 2ndLast(tail) <--> oldTail --> null + + if (tail == null) { + head = null; + } else { + tail.next = null; // 2ndLast(tail) --> null } - - /** - * Delete the element at the tail - * - * @return The new tail - */ - public Link deleteTail() { - Link temp = tail; - tail = tail.previous; // 2ndLast(tail) <--> oldTail --> null - - if (tail == null) { - head = null; - } else{ - tail.next = null; // 2ndLast(tail) --> null - } - --size; - return temp; + --size; + return temp; + } + + /** + * Delete the element from somewhere in the list + * + * @param x element to be deleted + * @return Link deleted + */ + public void delete(int x) { + Link current = head; + + while (current.value != x) { // Find the position to delete + if (current != tail) { + current = current.next; + } else { // If we reach the tail and the element is still not found + throw new RuntimeException("The element to be deleted does not exist!"); + } } - /** - * Delete the element from somewhere in the list - * - * @param x element to be deleted - * @return Link deleted - */ - public void delete(int x) { - Link current = head; - - while (current.value != x) {// Find the position to delete - if (current != tail) { - current = current.next; - } else {// If we reach the tail and the element is still not found - throw new RuntimeException("The element to be deleted does not exist!"); - } - } - - if (current == head) - deleteHead(); - - else if (current == tail) - deleteTail(); - - else { // Before: 1 <--> 2(current) <--> 3 - current.previous.next = current.next; // 1 --> 3 - current.next.previous = current.previous; // 1 <--> 3 - } - --size; + if (current == head) deleteHead(); + else if (current == tail) deleteTail(); + else { // Before: 1 <--> 2(current) <--> 3 + current.previous.next = current.next; // 1 --> 3 + current.next.previous = current.previous; // 1 <--> 3 } - - /** - * Inserts element and reorders - * - * @param x Element to be added - */ - public void insertOrdered(int x) { - Link newLink = new Link(x); - Link current = head; - while (current != null && x > current.value) // Find the position to insert - current = current.next; - - if (current == head) - insertHead(x); - - else if (current == null) - insertTail(x); - - else { // Before: 1 <--> 2(current) <--> 3 - newLink.previous = current.previous; // 1 <-- newLink - current.previous.next = newLink; // 1 <--> newLink - newLink.next = current; // 1 <--> newLink --> 2(current) <--> 3 - current.previous = newLink; // 1 <--> newLink <--> 2(current) <--> 3 - } - ++size; + --size; + } + + /** + * Inserts element and reorders + * + * @param x Element to be added + */ + public void insertOrdered(int x) { + Link newLink = new Link(x); + Link current = head; + while (current != null && x > current.value) // Find the position to insert + current = current.next; + + if (current == head) insertHead(x); + else if (current == null) insertTail(x); + else { // Before: 1 <--> 2(current) <--> 3 + newLink.previous = current.previous; // 1 <-- newLink + current.previous.next = newLink; // 1 <--> newLink + newLink.next = current; // 1 <--> newLink --> 2(current) <--> 3 + current.previous = newLink; // 1 <--> newLink <--> 2(current) <--> 3 } - - /** - * Deletes the passed node from the current list - * - * @param z Element to be deleted - */ - public void deleteNode(Link z) { - if(z.next == null){ - deleteTail(); - } else if(z == head){ - deleteHead(); - } else{ //before <-- 1 <--> 2(z) <--> 3 --> - z.previous.next = z.next; // 1 --> 3 - z.next.previous = z.previous; // 1 <--> 3 - } - --size; + ++size; + } + + /** + * Deletes the passed node from the current list + * + * @param z Element to be deleted + */ + public void deleteNode(Link z) { + if (z.next == null) { + deleteTail(); + } else if (z == head) { + deleteHead(); + } else { // before <-- 1 <--> 2(z) <--> 3 --> + z.previous.next = z.next; // 1 --> 3 + z.next.previous = z.previous; // 1 <--> 3 } - - public static void removeDuplicates(DoublyLinkedList l ) { - Link linkOne = l.head ; - while(linkOne.next != null) { // list is present - Link linkTwo = linkOne.next; // second link for comparison - while(linkTwo.next!= null) { - if(linkOne.value == linkTwo.value) // if there are duplicates values then - l.delete(linkTwo.value); // delete the link - linkTwo = linkTwo.next ; // go to next link - } - linkOne = linkOne.next; // go to link link to iterate the whole list again - } + --size; + } + + public static void removeDuplicates(DoublyLinkedList l) { + Link linkOne = l.head; + while (linkOne.next != null) { // list is present + Link linkTwo = linkOne.next; // second link for comparison + while (linkTwo.next != null) { + if (linkOne.value == linkTwo.value) // if there are duplicates values then + l.delete(linkTwo.value); // delete the link + linkTwo = linkTwo.next; // go to next link + } + linkOne = linkOne.next; // go to link link to iterate the whole list again } - - /** - * Clears List - * - */ - public void clearList(){ - head = null; - tail = null; - size = 0; - } - - /** - * Returns true if list is empty - * - * @return true if list is empty - */ - public boolean isEmpty() { - return (head == null); - } - - /** - * Prints contents of the list - */ - public void display() { // Prints contents of the list - Link current = head; - while (current != null) { - current.displayLink(); - current = current.next; - } - System.out.println(); + } + + /** Clears List */ + public void clearList() { + head = null; + tail = null; + size = 0; + } + + /** + * Returns true if list is empty + * + * @return true if list is empty + */ + public boolean isEmpty() { + return (head == null); + } + + /** Prints contents of the list */ + public void display() { // Prints contents of the list + Link current = head; + while (current != null) { + current.displayLink(); + current = current.next; } + System.out.println(); + } } /** - * This class is used to implement the nodes of the - * linked list. + * This class is used to implement the nodes of the linked list. * * @author Unknown */ class Link { - /** - * Value of node - */ - public int value; - /** - * This points to the link in front of the new link - */ - public Link next; - /** - * This points to the link behind the new link - */ - public Link previous; - - /** - * Constructor - * - * @param value Value of node - */ - public Link(int value) { - this.value = value; - } - - /** - * Displays the node - */ - public void displayLink() { - System.out.print(value + " "); - } - - /** - * Main Method - * - * @param args Command line arguments - */ - public static void main(String args[]) { - DoublyLinkedList myList = new DoublyLinkedList(); - myList.insertHead(13); - myList.insertHead(7); - myList.insertHead(10); - myList.display(); // <-- 10(head) <--> 7 <--> 13(tail) --> - - myList.insertTail(11); - myList.display(); // <-- 10(head) <--> 7 <--> 13 <--> 11(tail) --> - - myList.deleteTail(); - myList.display(); // <-- 10(head) <--> 7 <--> 13(tail) --> - - myList.delete(7); - myList.display(); // <-- 10(head) <--> 13(tail) --> - - myList.insertOrdered(23); - myList.insertOrdered(67); - myList.insertOrdered(3); - myList.display(); // <-- 3(head) <--> 10 <--> 13 <--> 23 <--> 67(tail) --> - myList.insertElementByIndex(5, 1); - myList.display(); // <-- 3(head) <--> 5 <--> 10 <--> 13 <--> 23 <--> 67(tail) --> - myList.clearList(); - myList.display(); - myList.insertHead(20); - myList.display(); - } + /** Value of node */ + public int value; + /** This points to the link in front of the new link */ + public Link next; + /** This points to the link behind the new link */ + public Link previous; + + /** + * Constructor + * + * @param value Value of node + */ + public Link(int value) { + this.value = value; + } + + /** Displays the node */ + public void displayLink() { + System.out.print(value + " "); + } + + /** + * Main Method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + DoublyLinkedList myList = new DoublyLinkedList(); + myList.insertHead(13); + myList.insertHead(7); + myList.insertHead(10); + myList.display(); // <-- 10(head) <--> 7 <--> 13(tail) --> + + myList.insertTail(11); + myList.display(); // <-- 10(head) <--> 7 <--> 13 <--> 11(tail) --> + + myList.deleteTail(); + myList.display(); // <-- 10(head) <--> 7 <--> 13(tail) --> + + myList.delete(7); + myList.display(); // <-- 10(head) <--> 13(tail) --> + + myList.insertOrdered(23); + myList.insertOrdered(67); + myList.insertOrdered(3); + myList.display(); // <-- 3(head) <--> 10 <--> 13 <--> 23 <--> 67(tail) --> + myList.insertElementByIndex(5, 1); + myList.display(); // <-- 3(head) <--> 5 <--> 10 <--> 13 <--> 23 <--> 67(tail) --> + myList.clearList(); + myList.display(); + myList.insertHead(20); + myList.display(); + } } diff --git a/DataStructures/Lists/MergeSortedArrayList.java b/DataStructures/Lists/MergeSortedArrayList.java index ea32e031f7dc..45f30f66c4fd 100644 --- a/DataStructures/Lists/MergeSortedArrayList.java +++ b/DataStructures/Lists/MergeSortedArrayList.java @@ -3,58 +3,54 @@ import java.util.ArrayList; import java.util.List; -/** - * @author https://github.com/shellhub - */ - +/** @author https://github.com/shellhub */ public class MergeSortedArrayList { - public static void main(String[] args) { - List listA = new ArrayList<>(); - List listB = new ArrayList<>(); - List listC = new ArrayList<>(); - - /* init ListA and List B */ - for (int i = 1; i <= 10; i += 2) { - listA.add(i); /* listA: [1, 3, 5, 7, 9] */ - listB.add(i + 1); /* listB: [2, 4, 6, 8, 10] */ - } - - /* merge listA and listB to listC */ - merge(listA, listB, listC); - - System.out.println("listA: " + listA); - System.out.println("listB: " + listB); - System.out.println("listC: " + listC); + public static void main(String[] args) { + List listA = new ArrayList<>(); + List listB = new ArrayList<>(); + List listC = new ArrayList<>(); + + /* init ListA and List B */ + for (int i = 1; i <= 10; i += 2) { + listA.add(i); /* listA: [1, 3, 5, 7, 9] */ + listB.add(i + 1); /* listB: [2, 4, 6, 8, 10] */ + } + + /* merge listA and listB to listC */ + merge(listA, listB, listC); + + System.out.println("listA: " + listA); + System.out.println("listB: " + listB); + System.out.println("listC: " + listC); + } + + /** + * merge two sorted ArrayList + * + * @param listA the first list to merge + * @param listB the second list to merge + * @param listC the result list after merging + */ + public static void merge(List listA, List listB, List listC) { + int pa = 0; /* the index of listA */ + int pb = 0; /* the index of listB */ + + while (pa < listA.size() && pb < listB.size()) { + if (listA.get(pa) <= listB.get(pb)) { + listC.add(listA.get(pa++)); + } else { + listC.add(listB.get(pb++)); + } } - /** - * merge two sorted ArrayList - * - * @param listA the first list to merge - * @param listB the second list to merge - * @param listC the result list after merging - */ - public static void merge(List listA, List listB, List listC) { - int pa = 0; /* the index of listA */ - int pb = 0; /* the index of listB */ - - while (pa < listA.size() && pb < listB.size()) { - if (listA.get(pa) <= listB.get(pb)) { - listC.add(listA.get(pa++)); - } else { - listC.add(listB.get(pb++)); - } - } - - /* copy left element of listA to listC */ - while (pa < listA.size()) { - listC.add(listA.get(pa++)); - } - - /* copy left element of listB to listC */ - while (pb < listB.size()) { - listC.add(listB.get(pb++)); - } + /* copy left element of listA to listC */ + while (pa < listA.size()) { + listC.add(listA.get(pa++)); } + /* copy left element of listB to listC */ + while (pb < listB.size()) { + listC.add(listB.get(pb++)); + } + } } diff --git a/DataStructures/Lists/MergeSortedSinglyLinkedList.java b/DataStructures/Lists/MergeSortedSinglyLinkedList.java index 2daae0d70574..526a539ce41e 100644 --- a/DataStructures/Lists/MergeSortedSinglyLinkedList.java +++ b/DataStructures/Lists/MergeSortedSinglyLinkedList.java @@ -2,50 +2,50 @@ public class MergeSortedSinglyLinkedList extends SinglyLinkedList { - public static void main(String[] args) { - SinglyLinkedList listA = new SinglyLinkedList(); - SinglyLinkedList listB = new SinglyLinkedList(); + public static void main(String[] args) { + SinglyLinkedList listA = new SinglyLinkedList(); + SinglyLinkedList listB = new SinglyLinkedList(); - for (int i = 2; i <= 10; i += 2) { - listA.insert(i); - listB.insert(i - 1); - } - assert listA.toString().equals("2->4->6->8->10"); - assert listB.toString().equals("1->3->5->7->9"); - assert merge(listA, listB).toString().equals("1->2->3->4->5->6->7->8->9->10"); + for (int i = 2; i <= 10; i += 2) { + listA.insert(i); + listB.insert(i - 1); } + assert listA.toString().equals("2->4->6->8->10"); + assert listB.toString().equals("1->3->5->7->9"); + assert merge(listA, listB).toString().equals("1->2->3->4->5->6->7->8->9->10"); + } - /** - * Merge two sorted SingleLinkedList - * - * @param listA the first sorted list - * @param listB the second sored list - * @return merged sorted list - */ - public static SinglyLinkedList merge(SinglyLinkedList listA, SinglyLinkedList listB) { - Node headA = listA.getHead(); - Node headB = listB.getHead(); + /** + * Merge two sorted SingleLinkedList + * + * @param listA the first sorted list + * @param listB the second sored list + * @return merged sorted list + */ + public static SinglyLinkedList merge(SinglyLinkedList listA, SinglyLinkedList listB) { + Node headA = listA.getHead(); + Node headB = listB.getHead(); - int size = listA.size() + listB.size(); + int size = listA.size() + listB.size(); - Node head = new Node(); - Node tail = head; - while (headA != null && headB != null) { - if (headA.value <= headB.value) { - tail.next = headA; - headA = headA.next; - } else { - tail.next = headB; - headB = headB.next; - } - tail = tail.next; - } - if (headA == null) { - tail.next = headB; - } - if (headB == null) { - tail.next = headA; - } - return new SinglyLinkedList(head.next, size); + Node head = new Node(); + Node tail = head; + while (headA != null && headB != null) { + if (headA.value <= headB.value) { + tail.next = headA; + headA = headA.next; + } else { + tail.next = headB; + headB = headB.next; + } + tail = tail.next; } + if (headA == null) { + tail.next = headB; + } + if (headB == null) { + tail.next = headA; + } + return new SinglyLinkedList(head.next, size); + } } diff --git a/DataStructures/Lists/Merge_K_SortedLinkedlist.java b/DataStructures/Lists/Merge_K_SortedLinkedlist.java index bdee79f8f5f7..61d3a90525ea 100644 --- a/DataStructures/Lists/Merge_K_SortedLinkedlist.java +++ b/DataStructures/Lists/Merge_K_SortedLinkedlist.java @@ -4,53 +4,51 @@ import java.util.Comparator; import java.util.PriorityQueue; -/** - * @author Arun Pandey (https://github.com/pandeyarun709) - */ +/** @author Arun Pandey (https://github.com/pandeyarun709) */ public class Merge_K_SortedLinkedlist { - /** - * This function merge K sorted LinkedList - * - * @param a array of LinkedList - * @param N size of array - * @return node - */ - Node mergeKList(Node[] a, int N) { - // Min Heap - PriorityQueue min = new PriorityQueue<>(Comparator.comparingInt(x -> x.data)); - - // adding head of all linkedList in min heap - min.addAll(Arrays.asList(a).subList(0, N)); - - // Make new head among smallest heads in K linkedList - Node head = min.poll(); - min.add(head.next); - Node curr = head; - - // merging LinkedList - while (!min.isEmpty()) { - - Node temp = min.poll(); - curr.next = temp; - curr = temp; - - // Add Node in min Heap only if temp.next is not null - if (temp.next != null) { - min.add(temp.next); - } - } - - return head; + /** + * This function merge K sorted LinkedList + * + * @param a array of LinkedList + * @param N size of array + * @return node + */ + Node mergeKList(Node[] a, int N) { + // Min Heap + PriorityQueue min = new PriorityQueue<>(Comparator.comparingInt(x -> x.data)); + + // adding head of all linkedList in min heap + min.addAll(Arrays.asList(a).subList(0, N)); + + // Make new head among smallest heads in K linkedList + Node head = min.poll(); + min.add(head.next); + Node curr = head; + + // merging LinkedList + while (!min.isEmpty()) { + + Node temp = min.poll(); + curr.next = temp; + curr = temp; + + // Add Node in min Heap only if temp.next is not null + if (temp.next != null) { + min.add(temp.next); + } } - private class Node { - private int data; - private Node next; + return head; + } - public Node(int d) { - this.data = d; - next = null; - } + private class Node { + private int data; + private Node next; + + public Node(int d) { + this.data = d; + next = null; } + } } diff --git a/DataStructures/Lists/SearchSinglyLinkedListRecursion.java b/DataStructures/Lists/SearchSinglyLinkedListRecursion.java index 10755c0b84ae..2f5cd4b18ca6 100644 --- a/DataStructures/Lists/SearchSinglyLinkedListRecursion.java +++ b/DataStructures/Lists/SearchSinglyLinkedListRecursion.java @@ -1,32 +1,31 @@ package DataStructures.Lists; public class SearchSinglyLinkedListRecursion extends SinglyLinkedList { - public static void main(String[] args) { - SearchSinglyLinkedListRecursion list = new SearchSinglyLinkedListRecursion(); - for (int i = 1; i <= 10; ++i) { - list.insert(i); - } - - for (int i = 1; i <= 10; ++i) { - assert list.search(i); - } - assert !list.search(-1) - && !list.search(100); + public static void main(String[] args) { + SearchSinglyLinkedListRecursion list = new SearchSinglyLinkedListRecursion(); + for (int i = 1; i <= 10; ++i) { + list.insert(i); } - /** - * Test if the value key is present in the list using recursion. - * - * @param node the head node. - * @param key the value to be searched. - * @return {@code true} if key is present in the list, otherwise {@code false}. - */ - private boolean searchRecursion(Node node, int key) { - return node != null && (node.value == key || searchRecursion(node.next, key)); + for (int i = 1; i <= 10; ++i) { + assert list.search(i); } + assert !list.search(-1) && !list.search(100); + } - @Override - public boolean search(int key) { - return searchRecursion(getHead(), key); - } + /** + * Test if the value key is present in the list using recursion. + * + * @param node the head node. + * @param key the value to be searched. + * @return {@code true} if key is present in the list, otherwise {@code false}. + */ + private boolean searchRecursion(Node node, int key) { + return node != null && (node.value == key || searchRecursion(node.next, key)); + } + + @Override + public boolean search(int key) { + return searchRecursion(getHead(), key); + } } diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index 2e7c5d37b75b..d6b0beba76a6 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -1,333 +1,301 @@ package DataStructures.Lists; /** - * This class implements a SinglyLinked List. This is done - * using SinglyLinkedList class and a LinkForLinkedList Class. - *

- * A linked list is similar to an array, it hold values. - * However, links in a linked list do not have indexes. With - * a linked list you do not need to predetermine it's size as - * it grows and shrinks as it is edited. This is an example of - * a singly linked list. Elements can only be added/removed - * at the head/front of the list. + * This class implements a SinglyLinked List. This is done using SinglyLinkedList class and a + * LinkForLinkedList Class. + * + *

A linked list is similar to an array, it hold values. However, links in a linked list do not + * have indexes. With a linked list you do not need to predetermine it's size as it grows and + * shrinks as it is edited. This is an example of a singly linked list. Elements can only be + * added/removed at the head/front of the list. */ public class SinglyLinkedList { - /** - * Head refer to the front of the list - */ - private Node head; - - /** - * Size of SinglyLinkedList - */ - private int size; - - /** - * Init SinglyLinkedList - */ - public SinglyLinkedList() { - head = null; - size = 0; + /** Head refer to the front of the list */ + private Node head; + + /** Size of SinglyLinkedList */ + private int size; + + /** Init SinglyLinkedList */ + public SinglyLinkedList() { + head = null; + size = 0; + } + + /** + * Init SinglyLinkedList with specified head node and size + * + * @param head the head node of list + * @param size the size of list + */ + public SinglyLinkedList(Node head, int size) { + this.head = head; + this.size = size; + } + + /** + * Inserts an element at the head of the list + * + * @param x element to be added + */ + public void insertHead(int x) { + insertNth(x, 0); + } + + /** + * Insert an element at the tail of the list + * + * @param data element to be added + */ + public void insert(int data) { + insertNth(data, size); + } + + /** + * Inserts a new node at a specified position of the list + * + * @param data data to be stored in a new node + * @param position position at which a new node is to be inserted + */ + public void insertNth(int data, int position) { + checkBounds(position, 0, size); + Node newNode = new Node(data); + if (head == null) { + /* the list is empty */ + head = newNode; + size++; + return; + } else if (position == 0) { + /* insert at the head of the list */ + newNode.next = head; + head = newNode; + size++; + return; } - - /** - * Init SinglyLinkedList with specified head node and size - * - * @param head the head node of list - * @param size the size of list - */ - public SinglyLinkedList(Node head, int size) { - this.head = head; - this.size = size; - } - - /** - * Inserts an element at the head of the list - * - * @param x element to be added - */ - public void insertHead(int x) { - insertNth(x, 0); - } - - /** - * Insert an element at the tail of the list - * - * @param data element to be added - */ - public void insert(int data) { - insertNth(data, size); - } - - /** - * Inserts a new node at a specified position of the list - * - * @param data data to be stored in a new node - * @param position position at which a new node is to be inserted - */ - public void insertNth(int data, int position) { - checkBounds(position, 0, size); - Node newNode = new Node(data); - if (head == null) { /* the list is empty */ - head = newNode; - size++; - return; - } else if (position == 0) { /* insert at the head of the list */ - newNode.next = head; - head = newNode; - size++; - return; - } - Node cur = head; - for (int i = 0; i < position - 1; ++i) { - cur = cur.next; - } - newNode.next = cur.next; - cur.next = newNode; - size++; - } - - - /** - * Deletes a node at the head - */ - public void deleteHead() { - deleteNth(0); - } - - /** - * Deletes an element at the tail - */ - public void delete() { - deleteNth(size - 1); + Node cur = head; + for (int i = 0; i < position - 1; ++i) { + cur = cur.next; } - - /** - * Deletes an element at Nth position - */ - public void deleteNth(int position) { - checkBounds(position, 0, size - 1); - if (position == 0) { - Node destroy = head; - head = head.next; - destroy = null; /* clear to let GC do its work */ - size--; - return; - } - Node cur = head; - for (int i = 0; i < position - 1; ++i) { - cur = cur.next; - } - - Node destroy = cur.next; - cur.next = cur.next.next; - destroy = null; // clear to let GC do its work - - size--; - } - - /** - * @param position to check position - * @param low low index - * @param high high index - * @throws IndexOutOfBoundsException if {@code position} not in range {@code low} to {@code high} - */ - public void checkBounds(int position, int low, int high) { - if (position > high || position < low) { - throw new IndexOutOfBoundsException(position + ""); - } + newNode.next = cur.next; + cur.next = newNode; + size++; + } + + /** Deletes a node at the head */ + public void deleteHead() { + deleteNth(0); + } + + /** Deletes an element at the tail */ + public void delete() { + deleteNth(size - 1); + } + + /** Deletes an element at Nth position */ + public void deleteNth(int position) { + checkBounds(position, 0, size - 1); + if (position == 0) { + Node destroy = head; + head = head.next; + destroy = null; /* clear to let GC do its work */ + size--; + return; } - - /** - * Clear all nodes in the list - */ - public void clear() { - Node cur = head; - while (cur != null) { - Node prev = cur; - cur = cur.next; - prev = null; // clear to let GC do its work - } - head = null; - size = 0; + Node cur = head; + for (int i = 0; i < position - 1; ++i) { + cur = cur.next; } - /** - * Checks if the list is empty - * - * @return {@code true} if list is empty, otherwise {@code false}. - */ - public boolean isEmpty() { - return size == 0; + Node destroy = cur.next; + cur.next = cur.next.next; + destroy = null; // clear to let GC do its work + + size--; + } + + /** + * @param position to check position + * @param low low index + * @param high high index + * @throws IndexOutOfBoundsException if {@code position} not in range {@code low} to {@code high} + */ + public void checkBounds(int position, int low, int high) { + if (position > high || position < low) { + throw new IndexOutOfBoundsException(position + ""); } - - /** - * Returns the size of the linked list. - * - * @return the size of the list. - */ - public int size() { - return size; + } + + /** Clear all nodes in the list */ + public void clear() { + Node cur = head; + while (cur != null) { + Node prev = cur; + cur = cur.next; + prev = null; // clear to let GC do its work } - - /** - * Get head of the list. - * - * @return head of the list. - */ - public Node getHead() { - return head; + head = null; + size = 0; + } + + /** + * Checks if the list is empty + * + * @return {@code true} if list is empty, otherwise {@code false}. + */ + public boolean isEmpty() { + return size == 0; + } + + /** + * Returns the size of the linked list. + * + * @return the size of the list. + */ + public int size() { + return size; + } + + /** + * Get head of the list. + * + * @return head of the list. + */ + public Node getHead() { + return head; + } + + /** + * Calculate the count of the list manually + * + * @return count of the list + */ + public int count() { + int count = 0; + Node cur = head; + while (cur != null) { + cur = cur.next; + count++; } - - /** - * Calculate the count of the list manually - * - * @return count of the list - */ - public int count() { - int count = 0; - Node cur = head; - while (cur != null) { - cur = cur.next; - count++; - } - return count; + return count; + } + + /** + * Test if the value key is present in the list. + * + * @param key the value to be searched. + * @return {@code true} if key is present in the list, otherwise {@code false}. + */ + public boolean search(int key) { + Node cur = head; + while (cur != null) { + if (cur.value == key) { + return true; + } + cur = cur.next; } - - /** - * Test if the value key is present in the list. - * - * @param key the value to be searched. - * @return {@code true} if key is present in the list, otherwise {@code false}. - */ - public boolean search(int key) { - Node cur = head; - while (cur != null) { - if (cur.value == key) { - return true; - } - cur = cur.next; - } - return false; + return false; + } + + /** + * Return element at special index. + * + * @param index given index of element + * @return element at special index. + */ + public int getNth(int index) { + checkBounds(index, 0, size - 1); + Node cur = head; + for (int i = 0; i < index; ++i) { + cur = cur.next; } + return cur.value; + } - /** - * Return element at special index. - * - * @param index given index of element - * @return element at special index. - */ - public int getNth(int index) { - checkBounds(index, 0, size - 1); - Node cur = head; - for (int i = 0; i < index; ++i) { - cur = cur.next; - } - return cur.value; + @Override + public String toString() { + if (size == 0) { + return ""; } - - - @Override - public String toString() { - if (size == 0) { - return ""; - } - StringBuilder builder = new StringBuilder(); - Node cur = head; - while (cur != null) { - builder.append(cur.value).append("->"); - cur = cur.next; - } - return builder.replace(builder.length() - 2, builder.length(), "").toString(); + StringBuilder builder = new StringBuilder(); + Node cur = head; + while (cur != null) { + builder.append(cur.value).append("->"); + cur = cur.next; } - - - /** - * Driver Code - */ - public static void main(String[] arg) { - SinglyLinkedList list = new SinglyLinkedList(); - assert list.isEmpty(); - assert list.size() == 0 - && list.count() == 0; - assert list.toString().equals(""); - - /* Test insert function */ - list.insertHead(5); - list.insertHead(7); - list.insertHead(10); - list.insert(3); - list.insertNth(1, 4); - assert list.toString().equals("10->7->5->3->1"); - - /* Test search function */ - assert list.search(10) - && list.search(5) - && list.search(1) - && !list.search(100); - - /* Test get function */ - assert list.getNth(0) == 10 - && list.getNth(2) == 5 - && list.getNth(4) == 1; - - /* Test delete function */ - list.deleteHead(); - list.deleteNth(1); - list.delete(); - assert list.toString().equals("7->3"); - - assert list.size == 2 - && list.size() == list.count(); - - list.clear(); - assert list.isEmpty(); - - try { - list.delete(); - assert false; /* this should not happen */ - } catch (Exception e) { - assert true; /* this should happen */ - } + return builder.replace(builder.length() - 2, builder.length(), "").toString(); + } + + /** Driver Code */ + public static void main(String[] arg) { + SinglyLinkedList list = new SinglyLinkedList(); + assert list.isEmpty(); + assert list.size() == 0 && list.count() == 0; + assert list.toString().equals(""); + + /* Test insert function */ + list.insertHead(5); + list.insertHead(7); + list.insertHead(10); + list.insert(3); + list.insertNth(1, 4); + assert list.toString().equals("10->7->5->3->1"); + + /* Test search function */ + assert list.search(10) && list.search(5) && list.search(1) && !list.search(100); + + /* Test get function */ + assert list.getNth(0) == 10 && list.getNth(2) == 5 && list.getNth(4) == 1; + + /* Test delete function */ + list.deleteHead(); + list.deleteNth(1); + list.delete(); + assert list.toString().equals("7->3"); + + assert list.size == 2 && list.size() == list.count(); + + list.clear(); + assert list.isEmpty(); + + try { + list.delete(); + assert false; /* this should not happen */ + } catch (Exception e) { + assert true; /* this should happen */ } + } } /** - * This class is the nodes of the SinglyLinked List. - * They consist of a value and a pointer to the node - * after them. + * This class is the nodes of the SinglyLinked List. They consist of a value and a pointer to the + * node after them. */ class Node { - /** - * The value of the node - */ - int value; - - /** - * Point to the next node - */ - Node next; - - Node() { - - } - - /** - * Constructor - * - * @param value Value to be put in the node - */ - Node(int value) { - this(value, null); - } - - /** - * Constructor - * @param value Value to be put in the node - * @param next Reference to the next node - */ - Node(int value, Node next) { - this.value = value; - this.next = next; - } + /** The value of the node */ + int value; + + /** Point to the next node */ + Node next; + + Node() {} + + /** + * Constructor + * + * @param value Value to be put in the node + */ + Node(int value) { + this(value, null); + } + + /** + * Constructor + * + * @param value Value to be put in the node + * @param next Reference to the next node + */ + Node(int value, Node next) { + this.value = value; + this.next = next; + } } diff --git a/DataStructures/Queues/GenericArrayListQueue.java b/DataStructures/Queues/GenericArrayListQueue.java index 9c2f2658800d..cc37ab02eb53 100644 --- a/DataStructures/Queues/GenericArrayListQueue.java +++ b/DataStructures/Queues/GenericArrayListQueue.java @@ -4,80 +4,80 @@ /** * This class implements a GenericArrayListQueue. - *

- * A GenericArrayListQueue data structure functions the same as any specific-typed queue. - * The GenericArrayListQueue holds elemets of types to-be-specified at runtime. - * The elements that are added first are the first to be removed (FIFO) - * New elements are added to the back/rear of the queue. * + *

A GenericArrayListQueue data structure functions the same as any specific-typed queue. The + * GenericArrayListQueue holds elemets of types to-be-specified at runtime. The elements that are + * added first are the first to be removed (FIFO) New elements are added to the back/rear of the + * queue. */ public class GenericArrayListQueue { - /** - * The generic ArrayList for the queue - * T is the generic element - */ - ArrayList _queue = new ArrayList(); + /** The generic ArrayList for the queue T is the generic element */ + ArrayList _queue = new ArrayList(); - /** - * Checks if the queue has elements (not empty) - * - * @return True if the queue has elements. False otherwise. - */ - private boolean hasElements() { - return !_queue.isEmpty(); - } + /** + * Checks if the queue has elements (not empty) + * + * @return True if the queue has elements. False otherwise. + */ + private boolean hasElements() { + return !_queue.isEmpty(); + } - /** - * Checks what's at the front of the queue - * - * @return If queue is not empty, element at the front of the queue. Otherwise, null - */ - public T peek() { - T result = null; - if(this.hasElements()) { result = _queue.get(0); } - return result; + /** + * Checks what's at the front of the queue + * + * @return If queue is not empty, element at the front of the queue. Otherwise, null + */ + public T peek() { + T result = null; + if (this.hasElements()) { + result = _queue.get(0); } + return result; + } - /** - * Inserts an element of type T to the queue. - * - * @param element of type T to be added - * @return True if the element was added successfully - */ - public boolean add(T element) { - return _queue.add(element); - } + /** + * Inserts an element of type T to the queue. + * + * @param element of type T to be added + * @return True if the element was added successfully + */ + public boolean add(T element) { + return _queue.add(element); + } - /** - * Retrieve what's at the front of the queue - * - * @return If queue is not empty, element retrieved. Otherwise, null - */ - public T poll() { - T result = null; - if(this.hasElements()) { result = _queue.remove(0); } - return result; + /** + * Retrieve what's at the front of the queue + * + * @return If queue is not empty, element retrieved. Otherwise, null + */ + public T poll() { + T result = null; + if (this.hasElements()) { + result = _queue.remove(0); } + return result; + } - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - GenericArrayListQueue queue = new GenericArrayListQueue(); - System.out.println("Running..."); - assert queue.peek() == null; - assert queue.poll() == null; - assert queue.add(1) == true; - assert queue.peek() == 1; - assert queue.add(2) == true; - assert queue.peek() == 1; - assert queue.poll() == 1; - assert queue.peek() == 2; - assert queue.poll() == 2; - assert queue.peek() == null; - assert queue.poll() == null; - System.out.println("Finished."); - } + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + GenericArrayListQueue queue = new GenericArrayListQueue(); + System.out.println("Running..."); + assert queue.peek() == null; + assert queue.poll() == null; + assert queue.add(1) == true; + assert queue.peek() == 1; + assert queue.add(2) == true; + assert queue.peek() == 1; + assert queue.poll() == 1; + assert queue.peek() == 2; + assert queue.poll() == 2; + assert queue.peek() == null; + assert queue.poll() == null; + System.out.println("Finished."); + } } diff --git a/DataStructures/Queues/LinkedQueue.java b/DataStructures/Queues/LinkedQueue.java index dac13dcaaad6..b60cc4b47393 100644 --- a/DataStructures/Queues/LinkedQueue.java +++ b/DataStructures/Queues/LinkedQueue.java @@ -3,167 +3,157 @@ import java.util.NoSuchElementException; public class LinkedQueue { - class Node { - int data; - Node next; - - public Node() { - this(0); - } - - public Node(int data) { - this(data, null); - } - - public Node(int data, Node next) { - this.data = data; - this.next = next; - } - } + class Node { + int data; + Node next; - /** - * Front of Queue - */ - private Node front; - - /** - * Rear of Queue - */ - private Node rear; - - /** - * Size of Queue - */ - private int size; - - /** - * Init LinkedQueue - */ - public LinkedQueue() { - front = rear = new Node(); + public Node() { + this(0); } - /** - * Check if queue is empty - * - * @return true if queue is empty, otherwise false - */ - public boolean isEmpty() { - return size == 0; + public Node(int data) { + this(data, null); } - /** - * Add element to rear of queue - * - * @param data insert value - * @return true if add successfully - */ - public boolean enqueue(int data) { - Node newNode = new Node(data); - rear.next = newNode; - rear = newNode; /* make rear point at last node */ - size++; - return true; + public Node(int data, Node next) { + this.data = data; + this.next = next; } - - /** - * Remove element at the front of queue - * - * @return element at the front of queue - */ - public int dequeue() { - if (isEmpty()) { - throw new NoSuchElementException("queue is empty"); - } - Node destroy = front.next; - int retValue = destroy.data; - front.next = front.next.next; - destroy = null; /* clear let GC do it's work */ - size--; - - if (isEmpty()) { - front = rear; - } - - return retValue; + } + + /** Front of Queue */ + private Node front; + + /** Rear of Queue */ + private Node rear; + + /** Size of Queue */ + private int size; + + /** Init LinkedQueue */ + public LinkedQueue() { + front = rear = new Node(); + } + + /** + * Check if queue is empty + * + * @return true if queue is empty, otherwise false + */ + public boolean isEmpty() { + return size == 0; + } + + /** + * Add element to rear of queue + * + * @param data insert value + * @return true if add successfully + */ + public boolean enqueue(int data) { + Node newNode = new Node(data); + rear.next = newNode; + rear = newNode; /* make rear point at last node */ + size++; + return true; + } + + /** + * Remove element at the front of queue + * + * @return element at the front of queue + */ + public int dequeue() { + if (isEmpty()) { + throw new NoSuchElementException("queue is empty"); } - - /** - * Peek element at the front of queue without removing - * - * @return element at the front - */ - public int peekFront() { - if (isEmpty()) { - throw new NoSuchElementException("queue is empty"); - } - return front.next.data; + Node destroy = front.next; + int retValue = destroy.data; + front.next = front.next.next; + destroy = null; /* clear let GC do it's work */ + size--; + + if (isEmpty()) { + front = rear; } - /** - * Peek element at the rear of queue without removing - * - * @return element at the front - */ - public int peekRear() { - if (isEmpty()) { - throw new NoSuchElementException("queue is empty"); - } - return rear.data; + return retValue; + } + + /** + * Peek element at the front of queue without removing + * + * @return element at the front + */ + public int peekFront() { + if (isEmpty()) { + throw new NoSuchElementException("queue is empty"); } - - /** - * Return size of queue - * - * @return size of queue - */ - public int size() { - return size; + return front.next.data; + } + + /** + * Peek element at the rear of queue without removing + * + * @return element at the front + */ + public int peekRear() { + if (isEmpty()) { + throw new NoSuchElementException("queue is empty"); } - - /** - * Clear all nodes in queue - */ - public void clear() { - while (!isEmpty()) { - dequeue(); - } + return rear.data; + } + + /** + * Return size of queue + * + * @return size of queue + */ + public int size() { + return size; + } + + /** Clear all nodes in queue */ + public void clear() { + while (!isEmpty()) { + dequeue(); } + } - @Override - public String toString() { - if (isEmpty()) { - return "[]"; - } - StringBuilder builder = new StringBuilder(); - Node cur = front.next; - builder.append("["); - while (cur != null) { - builder.append(cur.data).append(", "); - cur = cur.next; - } - builder.replace(builder.length() - 2, builder.length(), "]"); - return builder.toString(); + @Override + public String toString() { + if (isEmpty()) { + return "[]"; } - - /* Driver Code */ - public static void main(String[] args) { - LinkedQueue queue = new LinkedQueue(); - assert queue.isEmpty(); - - queue.enqueue(1); /* 1 */ - queue.enqueue(2); /* 1 2 */ - queue.enqueue(3); /* 1 2 3 */ - System.out.println(queue); /* [1, 2, 3] */ - - assert queue.size() == 3; - assert queue.dequeue() == 1; - assert queue.peekFront() == 2; - assert queue.peekRear() == 3; - - queue.clear(); - assert queue.isEmpty(); - - System.out.println(queue); /* [] */ + StringBuilder builder = new StringBuilder(); + Node cur = front.next; + builder.append("["); + while (cur != null) { + builder.append(cur.data).append(", "); + cur = cur.next; } + builder.replace(builder.length() - 2, builder.length(), "]"); + return builder.toString(); + } + + /* Driver Code */ + public static void main(String[] args) { + LinkedQueue queue = new LinkedQueue(); + assert queue.isEmpty(); + + queue.enqueue(1); /* 1 */ + queue.enqueue(2); /* 1 2 */ + queue.enqueue(3); /* 1 2 3 */ + System.out.println(queue); /* [1, 2, 3] */ + + assert queue.size() == 3; + assert queue.dequeue() == 1; + assert queue.peekFront() == 2; + assert queue.peekRear() == 3; + + queue.clear(); + assert queue.isEmpty(); + + System.out.println(queue); /* [] */ + } } diff --git a/DataStructures/Queues/PriorityQueues.java b/DataStructures/Queues/PriorityQueues.java index b2b959113490..bcdfb2ec7426 100644 --- a/DataStructures/Queues/PriorityQueues.java +++ b/DataStructures/Queues/PriorityQueues.java @@ -2,101 +2,94 @@ /** * This class implements a PriorityQueue. - *

- * A priority queue adds elements into positions based on their priority. - * So the most important elements are placed at the front/on the top. - * In this example I give numbers that are bigger, a higher priority. - * Queues in theory have no fixed size but when using an array - * implementation it does. + * + *

A priority queue adds elements into positions based on their priority. So the most important + * elements are placed at the front/on the top. In this example I give numbers that are bigger, a + * higher priority. Queues in theory have no fixed size but when using an array implementation it + * does. */ class PriorityQueue { - /** - * The max size of the queue - */ - private int maxSize; - /** - * The array for the queue - */ - private int[] queueArray; - /** - * How many items are in the queue - */ - private int nItems; + /** The max size of the queue */ + private int maxSize; + /** The array for the queue */ + private int[] queueArray; + /** How many items are in the queue */ + private int nItems; - /** - * Constructor - * - * @param size Size of the queue - */ - public PriorityQueue(int size) { - maxSize = size; - queueArray = new int[size]; - nItems = 0; - } + /** + * Constructor + * + * @param size Size of the queue + */ + public PriorityQueue(int size) { + maxSize = size; + queueArray = new int[size]; + nItems = 0; + } - /** - * Inserts an element in it's appropriate place - * - * @param value Value to be inserted - */ - public void insert(int value) { - if (isFull()) { - throw new RuntimeException("Queue is full"); - } else { - int j = nItems - 1; // index of last element - while (j >= 0 && queueArray[j] > value) { - queueArray[j + 1] = queueArray[j]; // Shifts every element up to make room for insertion - j--; - } - queueArray[j + 1] = value; // Once the correct position is found the value is inserted - nItems++; - } + /** + * Inserts an element in it's appropriate place + * + * @param value Value to be inserted + */ + public void insert(int value) { + if (isFull()) { + throw new RuntimeException("Queue is full"); + } else { + int j = nItems - 1; // index of last element + while (j >= 0 && queueArray[j] > value) { + queueArray[j + 1] = queueArray[j]; // Shifts every element up to make room for insertion + j--; + } + queueArray[j + 1] = value; // Once the correct position is found the value is inserted + nItems++; } + } - /** - * Remove the element from the front of the queue - * - * @return The element removed - */ - public int remove() { - return queueArray[--nItems]; - } + /** + * Remove the element from the front of the queue + * + * @return The element removed + */ + public int remove() { + return queueArray[--nItems]; + } - /** - * Checks what's at the front of the queue - * - * @return element at the front of the queue - */ - public int peek() { - return queueArray[nItems - 1]; - } + /** + * Checks what's at the front of the queue + * + * @return element at the front of the queue + */ + public int peek() { + return queueArray[nItems - 1]; + } - /** - * Returns true if the queue is empty - * - * @return true if the queue is empty - */ - public boolean isEmpty() { - return (nItems == 0); - } + /** + * Returns true if the queue is empty + * + * @return true if the queue is empty + */ + public boolean isEmpty() { + return (nItems == 0); + } - /** - * Returns true if the queue is full - * - * @return true if the queue is full - */ - public boolean isFull() { - return (nItems == maxSize); - } + /** + * Returns true if the queue is full + * + * @return true if the queue is full + */ + public boolean isFull() { + return (nItems == maxSize); + } - /** - * Returns the number of elements in the queue - * - * @return number of elements in the queue - */ - public int getSize() { - return nItems; - } + /** + * Returns the number of elements in the queue + * + * @return number of elements in the queue + */ + public int getSize() { + return nItems; + } } /** @@ -105,22 +98,23 @@ public int getSize() { * @author Unknown */ public class PriorityQueues { - /** - * Main method - * - * @param args Command Line Arguments - */ - public static void main(String[] args) { - PriorityQueue myQueue = new PriorityQueue(4); - myQueue.insert(10); - myQueue.insert(2); - myQueue.insert(5); - myQueue.insert(3); - // [2, 3, 5, 10] Here higher numbers have higher priority, so they are on the top + /** + * Main method + * + * @param args Command Line Arguments + */ + public static void main(String[] args) { + PriorityQueue myQueue = new PriorityQueue(4); + myQueue.insert(10); + myQueue.insert(2); + myQueue.insert(5); + myQueue.insert(3); + // [2, 3, 5, 10] Here higher numbers have higher priority, so they are on the top - for (int i = 3; i >= 0; i--) - System.out.print(myQueue.remove() + " "); // will print the queue in reverse order [10, 5, 3, 2] + for (int i = 3; i >= 0; i--) + System.out.print( + myQueue.remove() + " "); // will print the queue in reverse order [10, 5, 3, 2] - // As you can see, a Priority Queue can be used as a sorting algotithm - } + // As you can see, a Priority Queue can be used as a sorting algotithm + } } diff --git a/DataStructures/Queues/Queues.java b/DataStructures/Queues/Queues.java index 2f820d70cf71..6bd5bdc484e9 100644 --- a/DataStructures/Queues/Queues.java +++ b/DataStructures/Queues/Queues.java @@ -2,148 +2,131 @@ /** * This implements Queues by using the class Queue. - *

- * A queue data structure functions the same as a real world queue. - * The elements that are added first are the first to be removed. - * New elements are added to the back/rear of the queue. * + *

A queue data structure functions the same as a real world queue. The elements that are added + * first are the first to be removed. New elements are added to the back/rear of the queue. */ class Queue { - /** - * Default initial capacity. - */ - private static final int DEFAULT_CAPACITY = 10; - - /** - * Max size of the queue - */ - private int maxSize; - /** - * The array representing the queue - */ - private int[] queueArray; - /** - * Front of the queue - */ - private int front; - /** - * Rear of the queue - */ - private int rear; - /** - * How many items are in the queue - */ - private int nItems; - - /** - * init with DEFAULT_CAPACITY - */ - public Queue() { - this(DEFAULT_CAPACITY); + /** Default initial capacity. */ + private static final int DEFAULT_CAPACITY = 10; + + /** Max size of the queue */ + private int maxSize; + /** The array representing the queue */ + private int[] queueArray; + /** Front of the queue */ + private int front; + /** Rear of the queue */ + private int rear; + /** How many items are in the queue */ + private int nItems; + + /** init with DEFAULT_CAPACITY */ + public Queue() { + this(DEFAULT_CAPACITY); + } + + /** + * Constructor + * + * @param size Size of the new queue + */ + public Queue(int size) { + maxSize = size; + queueArray = new int[size]; + front = 0; + rear = -1; + nItems = 0; + } + + /** + * Inserts an element at the rear of the queue + * + * @param x element to be added + * @return True if the element was added successfully + */ + public boolean insert(int x) { + if (isFull()) return false; + // If the back of the queue is the end of the array wrap around to the front + rear = (rear + 1) % maxSize; + queueArray[rear] = x; + nItems++; + return true; + } + + /** + * Remove an element from the front of the queue + * + * @return the new front of the queue + */ + public int remove() { + if (isEmpty()) { + return -1; } - - /** - * Constructor - * - * @param size Size of the new queue - */ - public Queue(int size) { - maxSize = size; - queueArray = new int[size]; - front = 0; - rear = -1; - nItems = 0; - } - - /** - * Inserts an element at the rear of the queue - * - * @param x element to be added - * @return True if the element was added successfully - */ - public boolean insert(int x) { - if (isFull()) - return false; - // If the back of the queue is the end of the array wrap around to the front - rear = (rear + 1) % maxSize; - queueArray[rear] = x; - nItems++; - return true; - } - - /** - * Remove an element from the front of the queue - * - * @return the new front of the queue - */ - public int remove() { - if (isEmpty()) { - return -1; - } - int temp = queueArray[front]; - front = (front + 1) % maxSize; - nItems--; - return temp; - } - - /** - * Checks what's at the front of the queue - * - * @return element at the front of the queue - */ - public int peekFront() { - return queueArray[front]; - } - - /** - * Checks what's at the rear of the queue - * - * @return element at the rear of the queue - */ - public int peekRear() { - return queueArray[rear]; - } - - /** - * Returns true if the queue is empty - * - * @return true if the queue is empty - */ - public boolean isEmpty() { - return nItems == 0; - } - - /** - * Returns true if the queue is full - * - * @return true if the queue is full - */ - public boolean isFull() { - return nItems == maxSize; - } - - /** - * Returns the number of elements in the queue - * - * @return number of elements in the queue - */ - public int getSize() { - return nItems; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("["); - for (int i = front; ; i = ++i % maxSize) { - sb.append(queueArray[i]).append(", "); - if (i == rear) { - break; - } - } - sb.replace(sb.length() - 2, sb.length(), "]"); - return sb.toString(); + int temp = queueArray[front]; + front = (front + 1) % maxSize; + nItems--; + return temp; + } + + /** + * Checks what's at the front of the queue + * + * @return element at the front of the queue + */ + public int peekFront() { + return queueArray[front]; + } + + /** + * Checks what's at the rear of the queue + * + * @return element at the rear of the queue + */ + public int peekRear() { + return queueArray[rear]; + } + + /** + * Returns true if the queue is empty + * + * @return true if the queue is empty + */ + public boolean isEmpty() { + return nItems == 0; + } + + /** + * Returns true if the queue is full + * + * @return true if the queue is full + */ + public boolean isFull() { + return nItems == maxSize; + } + + /** + * Returns the number of elements in the queue + * + * @return number of elements in the queue + */ + public int getSize() { + return nItems; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("["); + for (int i = front; ; i = ++i % maxSize) { + sb.append(queueArray[i]).append(", "); + if (i == rear) { + break; + } } + sb.replace(sb.length() - 2, sb.length(), "]"); + return sb.toString(); + } } /** @@ -152,29 +135,29 @@ public String toString() { * @author Unknown */ public class Queues { - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - Queue myQueue = new Queue(4); - myQueue.insert(10); - myQueue.insert(2); - myQueue.insert(5); - myQueue.insert(3); - // [10(front), 2, 5, 3(rear)] - - System.out.println(myQueue.isFull()); // Will print true - - myQueue.remove(); // Will make 2 the new front, making 10 no longer part of the queue - // [10, 2(front), 5, 3(rear)] - - myQueue.insert(7); // Insert 7 at the rear which will be index 0 because of wrap around - // [7(rear), 2(front), 5, 3] - - System.out.println(myQueue.peekFront()); // Will print 2 - System.out.println(myQueue.peekRear()); // Will print 7 - System.out.println(myQueue.toString()); // Will print [2, 5, 3, 7] - } + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + Queue myQueue = new Queue(4); + myQueue.insert(10); + myQueue.insert(2); + myQueue.insert(5); + myQueue.insert(3); + // [10(front), 2, 5, 3(rear)] + + System.out.println(myQueue.isFull()); // Will print true + + myQueue.remove(); // Will make 2 the new front, making 10 no longer part of the queue + // [10, 2(front), 5, 3(rear)] + + myQueue.insert(7); // Insert 7 at the rear which will be index 0 because of wrap around + // [7(rear), 2(front), 5, 3] + + System.out.println(myQueue.peekFront()); // Will print 2 + System.out.println(myQueue.peekRear()); // Will print 7 + System.out.println(myQueue.toString()); // Will print [2, 5, 3, 7] + } } diff --git a/DataStructures/Stacks/BalancedBrackets.java b/DataStructures/Stacks/BalancedBrackets.java index d9f6aa0a1f2f..6b8efce6d7a2 100644 --- a/DataStructures/Stacks/BalancedBrackets.java +++ b/DataStructures/Stacks/BalancedBrackets.java @@ -3,14 +3,12 @@ import java.util.Stack; /** - * The nested brackets problem is a problem that determines if a sequence of - * brackets are properly nested. A sequence of brackets s is considered properly - * nested if any of the following conditions are true: - s is empty - s has the - * form (U) or [U] or {U} where U is a properly nested string - s has the form - * VW where V and W are properly nested strings For example, the string - * "()()[()]" is properly nested but "[(()]" is not. The function called - * is_balanced takes as input a string S which is a sequence of brackets and - * returns true if S is nested and false otherwise. + * The nested brackets problem is a problem that determines if a sequence of brackets are properly + * nested. A sequence of brackets s is considered properly nested if any of the following conditions + * are true: - s is empty - s has the form (U) or [U] or {U} where U is a properly nested string - s + * has the form VW where V and W are properly nested strings For example, the string "()()[()]" is + * properly nested but "[(()]" is not. The function called is_balanced takes as input a string S + * which is a sequence of brackets and returns true if S is nested and false otherwise. * * @author akshay sharma * @author khalil2535 @@ -18,64 +16,63 @@ */ class BalancedBrackets { - /** - * Check if {@code leftBracket} and {@code rightBracket} is paired or not - * - * @param leftBracket left bracket - * @param rightBracket right bracket - * @return {@code true} if {@code leftBracket} and {@code rightBracket} is paired, - * otherwise {@code false} - */ - public static boolean isPaired(char leftBracket, char rightBracket) { - char[][] pairedBrackets = { - {'(', ')'}, - {'[', ']'}, - {'{', '}'}, - {'<', '>'} - }; - for (char[] pairedBracket : pairedBrackets) { - if (pairedBracket[0] == leftBracket && pairedBracket[1] == rightBracket) { - return true; - } - } - return false; + /** + * Check if {@code leftBracket} and {@code rightBracket} is paired or not + * + * @param leftBracket left bracket + * @param rightBracket right bracket + * @return {@code true} if {@code leftBracket} and {@code rightBracket} is paired, otherwise + * {@code false} + */ + public static boolean isPaired(char leftBracket, char rightBracket) { + char[][] pairedBrackets = { + {'(', ')'}, + {'[', ']'}, + {'{', '}'}, + {'<', '>'} + }; + for (char[] pairedBracket : pairedBrackets) { + if (pairedBracket[0] == leftBracket && pairedBracket[1] == rightBracket) { + return true; + } } + return false; + } - /** - * Check if {@code brackets} is balanced - * - * @param brackets the brackets - * @return {@code true} if {@code brackets} is balanced, otherwise {@code false} - */ - public static boolean isBalanced(String brackets) { - if (brackets == null) { - throw new IllegalArgumentException("brackets is null"); - } - Stack bracketsStack = new Stack<>(); - for (char bracket : brackets.toCharArray()) { - switch (bracket) { - case '(': - case '[': - case '{': - bracketsStack.push(bracket); - break; - case ')': - case ']': - case '}': - if (bracketsStack.isEmpty() || !isPaired(bracketsStack.pop(), bracket)) { - return false; - } - break; - default: /* other character is invalid */ - return false; - } - } - return bracketsStack.isEmpty(); + /** + * Check if {@code brackets} is balanced + * + * @param brackets the brackets + * @return {@code true} if {@code brackets} is balanced, otherwise {@code false} + */ + public static boolean isBalanced(String brackets) { + if (brackets == null) { + throw new IllegalArgumentException("brackets is null"); } - - - public static void main(String[] args) { - assert isBalanced("[()]{}{[()()]()}"); - assert !isBalanced("[(])"); + Stack bracketsStack = new Stack<>(); + for (char bracket : brackets.toCharArray()) { + switch (bracket) { + case '(': + case '[': + case '{': + bracketsStack.push(bracket); + break; + case ')': + case ']': + case '}': + if (bracketsStack.isEmpty() || !isPaired(bracketsStack.pop(), bracket)) { + return false; + } + break; + default: /* other character is invalid */ + return false; + } } + return bracketsStack.isEmpty(); + } + + public static void main(String[] args) { + assert isBalanced("[()]{}{[()()]()}"); + assert !isBalanced("[(])"); + } } diff --git a/DataStructures/Stacks/DecimalToAnyUsingStack.java b/DataStructures/Stacks/DecimalToAnyUsingStack.java index 6e129c32c6d9..d0fa7d5ba93b 100644 --- a/DataStructures/Stacks/DecimalToAnyUsingStack.java +++ b/DataStructures/Stacks/DecimalToAnyUsingStack.java @@ -3,42 +3,40 @@ import java.util.Stack; public class DecimalToAnyUsingStack { - public static void main(String[] args) { - assert convert(0, 2).equals("0"); - assert convert(30, 2).equals("11110"); - assert convert(30, 8).equals("36"); - assert convert(30, 10).equals("30"); - assert convert(30, 16).equals("1E"); - } + public static void main(String[] args) { + assert convert(0, 2).equals("0"); + assert convert(30, 2).equals("11110"); + assert convert(30, 8).equals("36"); + assert convert(30, 10).equals("30"); + assert convert(30, 16).equals("1E"); + } - /** - * Convert decimal number to another radix - * - * @param number the number to be converted - * @param radix the radix - * @return another radix - * @throws ArithmeticException if number or radius is invalid - */ - private static String convert(int number, int radix) { - if (radix < 2 || radix > 16) { - throw new ArithmeticException( - String.format("Invalid input -> number:%d,radius:%d", number, radix)); - } - char[] tables = { - '0', '1', '2', '3', '4', - '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F' - }; - Stack bits = new Stack<>(); - do { - bits.push(tables[number % radix]); - number = number / radix; - } while (number != 0); + /** + * Convert decimal number to another radix + * + * @param number the number to be converted + * @param radix the radix + * @return another radix + * @throws ArithmeticException if number or radius is invalid + */ + private static String convert(int number, int radix) { + if (radix < 2 || radix > 16) { + throw new ArithmeticException( + String.format("Invalid input -> number:%d,radius:%d", number, radix)); + } + char[] tables = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + Stack bits = new Stack<>(); + do { + bits.push(tables[number % radix]); + number = number / radix; + } while (number != 0); - StringBuilder result = new StringBuilder(); - while (!bits.isEmpty()) { - result.append(bits.pop()); - } - return result.toString(); + StringBuilder result = new StringBuilder(); + while (!bits.isEmpty()) { + result.append(bits.pop()); } + return result.toString(); + } } diff --git a/DataStructures/Stacks/NodeStack.java b/DataStructures/Stacks/NodeStack.java index 0f1d58686b0d..623068dcb1e3 100644 --- a/DataStructures/Stacks/NodeStack.java +++ b/DataStructures/Stacks/NodeStack.java @@ -1,184 +1,171 @@ package DataStructures.Stacks; /** -* Implementation of a stack using nodes. -* Unlimited size, no arraylist. -* -* @author Kyler Smith, 2017 -*/ - - + * Implementation of a stack using nodes. Unlimited size, no arraylist. + * + * @author Kyler Smith, 2017 + */ public class NodeStack { - /** - * Entry point for the program. - */ - public static void main(String[] args) { - NodeStack Stack = new NodeStack(); - - Stack.push(3); - Stack.push(4); - Stack.push(5); - System.out.println("Testing :"); - Stack.print(); // prints : 5 4 3 - - Integer x = Stack.pop(); // x = 5 - Stack.push(1); - Stack.push(8); - Integer y = Stack.peek(); // y = 8 - System.out.println("Testing :"); - Stack.print(); // prints : 8 1 4 3 - - System.out.println("Testing :"); - System.out.println("x : " + x); - System.out.println("y : " + y); - } - - /** - * Information each node should contain. - * @value data : information of the value in the node - * @value head : the head of the stack - * @value next : the next value from this node - * @value previous : the last value from this node - * @value size : size of the stack - */ - private Item data; - private static NodeStack head; - private NodeStack next; - private NodeStack previous; - private static int size = 0; - - - /** - * Constructors for the NodeStack. - */ - public NodeStack() { - } - - private NodeStack(Item item) { - this.data = item; - } - - /** - * Put a value onto the stack. - * - * @param item : value to be put on the stack. - */ - public void push(Item item) { - - NodeStack newNs = new NodeStack(item); - - if(this.isEmpty()) { - NodeStack.setHead(new NodeStack<>(item)); - newNs.setNext(null); - newNs.setPrevious(null); - } else { - newNs.setPrevious(NodeStack.head); - NodeStack.head.setNext(newNs); - NodeStack.head.setHead(newNs); - } - - NodeStack.setSize(NodeStack.getSize() + 1); - } - - /** - * Value to be taken off the stack. - * - * @return item : value that is returned. - */ - public Item pop() { - - Item item = (Item) NodeStack.head.getData(); - - NodeStack.head.setHead(NodeStack.head.getPrevious()); - NodeStack.head.setNext(null); - - NodeStack.setSize(NodeStack.getSize() - 1); - - return item; - } - - /** - * Value that is next to be taken off the stack. - * - * @return item : the next value that would be popped off the stack. - */ - public Item peek() { - return (Item) NodeStack.head.getData(); - } - - /** - * If the stack is empty or there is a value in. - * - * @return boolean : whether or not the stack has anything in it. - */ - public boolean isEmpty() { - return NodeStack.getSize() == 0; + /** Entry point for the program. */ + public static void main(String[] args) { + NodeStack Stack = new NodeStack(); + + Stack.push(3); + Stack.push(4); + Stack.push(5); + System.out.println("Testing :"); + Stack.print(); // prints : 5 4 3 + + Integer x = Stack.pop(); // x = 5 + Stack.push(1); + Stack.push(8); + Integer y = Stack.peek(); // y = 8 + System.out.println("Testing :"); + Stack.print(); // prints : 8 1 4 3 + + System.out.println("Testing :"); + System.out.println("x : " + x); + System.out.println("y : " + y); + } + + /** + * Information each node should contain. + * + * @value data : information of the value in the node + * @value head : the head of the stack + * @value next : the next value from this node + * @value previous : the last value from this node + * @value size : size of the stack + */ + private Item data; + + private static NodeStack head; + private NodeStack next; + private NodeStack previous; + private static int size = 0; + + /** Constructors for the NodeStack. */ + public NodeStack() {} + + private NodeStack(Item item) { + this.data = item; + } + + /** + * Put a value onto the stack. + * + * @param item : value to be put on the stack. + */ + public void push(Item item) { + + NodeStack newNs = new NodeStack(item); + + if (this.isEmpty()) { + NodeStack.setHead(new NodeStack<>(item)); + newNs.setNext(null); + newNs.setPrevious(null); + } else { + newNs.setPrevious(NodeStack.head); + NodeStack.head.setNext(newNs); + NodeStack.head.setHead(newNs); } - /** - * Returns the size of the stack. - * - * @return int : number of values in the stack. - */ - public int size() { - return NodeStack.getSize(); + NodeStack.setSize(NodeStack.getSize() + 1); + } + + /** + * Value to be taken off the stack. + * + * @return item : value that is returned. + */ + public Item pop() { + + Item item = (Item) NodeStack.head.getData(); + + NodeStack.head.setHead(NodeStack.head.getPrevious()); + NodeStack.head.setNext(null); + + NodeStack.setSize(NodeStack.getSize() - 1); + + return item; + } + + /** + * Value that is next to be taken off the stack. + * + * @return item : the next value that would be popped off the stack. + */ + public Item peek() { + return (Item) NodeStack.head.getData(); + } + + /** + * If the stack is empty or there is a value in. + * + * @return boolean : whether or not the stack has anything in it. + */ + public boolean isEmpty() { + return NodeStack.getSize() == 0; + } + + /** + * Returns the size of the stack. + * + * @return int : number of values in the stack. + */ + public int size() { + return NodeStack.getSize(); + } + + /** + * Print the contents of the stack in the following format. + * + *

x <- head (next out) y z <- tail (first in) . . . + */ + public void print() { + for (NodeStack n = NodeStack.head; n != null; n = n.previous) { + System.out.println(n.getData().toString()); } + } - /** - * Print the contents of the stack in the following format. - * - * x <- head (next out) - * y - * z <- tail (first in) - * . - * . - * . - * - */ - public void print() { - for(NodeStack n = NodeStack.head; n != null; n = n.previous) { - System.out.println(n.getData().toString()); - } - } + /** Getters and setters (private) */ + private NodeStack getHead() { + return NodeStack.head; + } - /** Getters and setters (private) */ - private NodeStack getHead() { - return NodeStack.head; - } - - private static void setHead(NodeStack ns) { - NodeStack.head = ns; - } + private static void setHead(NodeStack ns) { + NodeStack.head = ns; + } - private NodeStack getNext() { - return next; - } + private NodeStack getNext() { + return next; + } - private void setNext(NodeStack next) { - this.next = next; - } + private void setNext(NodeStack next) { + this.next = next; + } - private NodeStack getPrevious() { - return previous; - } + private NodeStack getPrevious() { + return previous; + } - private void setPrevious(NodeStack previous) { - this.previous = previous; - } + private void setPrevious(NodeStack previous) { + this.previous = previous; + } - private static int getSize() { - return size; - } + private static int getSize() { + return size; + } - private static void setSize(int size) { - NodeStack.size = size; - } + private static void setSize(int size) { + NodeStack.size = size; + } - private Item getData() { - return this.data; - } + private Item getData() { + return this.data; + } - private void setData(Item item) { - this.data = item; - } + private void setData(Item item) { + this.data = item; + } } diff --git a/DataStructures/Stacks/StackArray.java b/DataStructures/Stacks/StackArray.java index eaad1d401b6b..77f65e493c6e 100644 --- a/DataStructures/Stacks/StackArray.java +++ b/DataStructures/Stacks/StackArray.java @@ -2,172 +2,157 @@ /** * This class implements a Stack using a regular array. - *

- * A stack is exactly what it sounds like. An element gets added to the top of - * the stack and only the element on the top may be removed. This is an example - * of an array implementation of a Stack. So an element can only be added/removed - * from the end of the array. In theory stack have no fixed size, but with an - * array implementation it does. + * + *

A stack is exactly what it sounds like. An element gets added to the top of the stack and only + * the element on the top may be removed. This is an example of an array implementation of a Stack. + * So an element can only be added/removed from the end of the array. In theory stack have no fixed + * size, but with an array implementation it does. */ public class StackArray { - /** - * Driver Code - */ - public static void main(String[] args) { - // Declare a stack of maximum size 4 - StackArray myStackArray = new StackArray(4); - - assert myStackArray.isEmpty(); - assert !myStackArray.isFull(); - - // Populate the stack - myStackArray.push(5); - myStackArray.push(8); - myStackArray.push(2); - myStackArray.push(9); - - assert !myStackArray.isEmpty(); - assert myStackArray.isFull(); - assert myStackArray.peek() == 9; - assert myStackArray.pop() == 9; - assert myStackArray.peek() == 2; - assert myStackArray.size() == 3; + /** Driver Code */ + public static void main(String[] args) { + // Declare a stack of maximum size 4 + StackArray myStackArray = new StackArray(4); + + assert myStackArray.isEmpty(); + assert !myStackArray.isFull(); + + // Populate the stack + myStackArray.push(5); + myStackArray.push(8); + myStackArray.push(2); + myStackArray.push(9); + + assert !myStackArray.isEmpty(); + assert myStackArray.isFull(); + assert myStackArray.peek() == 9; + assert myStackArray.pop() == 9; + assert myStackArray.peek() == 2; + assert myStackArray.size() == 3; + } + + /** Default initial capacity. */ + private static final int DEFAULT_CAPACITY = 10; + + /** The max size of the Stack */ + private int maxSize; + + /** The array representation of the Stack */ + private int[] stackArray; + + /** The top of the stack */ + private int top; + + /** init Stack with DEFAULT_CAPACITY */ + public StackArray() { + this(DEFAULT_CAPACITY); + } + + /** + * Constructor + * + * @param size Size of the Stack + */ + public StackArray(int size) { + maxSize = size; + stackArray = new int[maxSize]; + top = -1; + } + + /** + * Adds an element to the top of the stack + * + * @param value The element added + */ + public void push(int value) { + if (!isFull()) { // Checks for a full stack + top++; + stackArray[top] = value; + } else { + resize(maxSize * 2); + push(value); // don't forget push after resizing } - - /** - * Default initial capacity. - */ - private static final int DEFAULT_CAPACITY = 10; - - /** - * The max size of the Stack - */ - private int maxSize; - - /** - * The array representation of the Stack - */ - private int[] stackArray; - - /** - * The top of the stack - */ - private int top; - - /** - * init Stack with DEFAULT_CAPACITY - */ - public StackArray() { - this(DEFAULT_CAPACITY); - } - - /** - * Constructor - * - * @param size Size of the Stack - */ - public StackArray(int size) { - maxSize = size; - stackArray = new int[maxSize]; - top = -1; - } - - /** - * Adds an element to the top of the stack - * - * @param value The element added - */ - public void push(int value) { - if (!isFull()) { // Checks for a full stack - top++; - stackArray[top] = value; - } else { - resize(maxSize * 2); - push(value); // don't forget push after resizing - } - } - - /** - * Removes the top element of the stack and returns the value you've removed - * - * @return value popped off the Stack - */ - public int pop() { - if (!isEmpty()) { // Checks for an empty stack - return stackArray[top--]; - } - - if (top < maxSize / 4) { - resize(maxSize / 2); - return pop();// don't forget pop after resizing - } else { - System.out.println("The stack is already empty"); - return -1; - } + } + + /** + * Removes the top element of the stack and returns the value you've removed + * + * @return value popped off the Stack + */ + public int pop() { + if (!isEmpty()) { // Checks for an empty stack + return stackArray[top--]; } - /** - * Returns the element at the top of the stack - * - * @return element at the top of the stack - */ - public int peek() { - if (!isEmpty()) { // Checks for an empty stack - return stackArray[top]; - } else { - System.out.println("The stack is empty, cant peek"); - return -1; - } + if (top < maxSize / 4) { + resize(maxSize / 2); + return pop(); // don't forget pop after resizing + } else { + System.out.println("The stack is already empty"); + return -1; } - - private void resize(int newSize) { - int[] transferArray = new int[newSize]; - - for (int i = 0; i < stackArray.length; i++) { - transferArray[i] = stackArray[i]; - } - // This reference change might be nice in here - stackArray = transferArray; - maxSize = newSize; - } - - /** - * Returns true if the stack is empty - * - * @return true if the stack is empty - */ - public boolean isEmpty() { - return (top == -1); + } + + /** + * Returns the element at the top of the stack + * + * @return element at the top of the stack + */ + public int peek() { + if (!isEmpty()) { // Checks for an empty stack + return stackArray[top]; + } else { + System.out.println("The stack is empty, cant peek"); + return -1; } + } - /** - * Returns true if the stack is full - * - * @return true if the stack is full - */ - public boolean isFull() { - return (top + 1 == maxSize); - } - - /** - * Deletes everything in the Stack - *

- * Doesn't delete elements in the array - * but if you call push method after calling - * makeEmpty it will overwrite previous - * values - */ - public void makeEmpty() { // Doesn't delete elements in the array but if you call - top = -1; // push method after calling makeEmpty it will overwrite previous values - } + private void resize(int newSize) { + int[] transferArray = new int[newSize]; - /** - * Return size of stack - * - * @return size of stack - */ - public int size() { - return top + 1; + for (int i = 0; i < stackArray.length; i++) { + transferArray[i] = stackArray[i]; } + // This reference change might be nice in here + stackArray = transferArray; + maxSize = newSize; + } + + /** + * Returns true if the stack is empty + * + * @return true if the stack is empty + */ + public boolean isEmpty() { + return (top == -1); + } + + /** + * Returns true if the stack is full + * + * @return true if the stack is full + */ + public boolean isFull() { + return (top + 1 == maxSize); + } + + /** + * Deletes everything in the Stack + * + *

Doesn't delete elements in the array but if you call push method after calling makeEmpty it + * will overwrite previous values + */ + public void makeEmpty() { // Doesn't delete elements in the array but if you call + top = -1; // push method after calling makeEmpty it will overwrite previous values + } + + /** + * Return size of stack + * + * @return size of stack + */ + public int size() { + return top + 1; + } } diff --git a/DataStructures/Stacks/StackArrayList.java b/DataStructures/Stacks/StackArrayList.java index 5f7168c63bba..c9b31d625dd9 100644 --- a/DataStructures/Stacks/StackArrayList.java +++ b/DataStructures/Stacks/StackArrayList.java @@ -5,109 +5,101 @@ /** * This class implements a Stack using an ArrayList. - *

- * A stack is exactly what it sounds like. An element gets added to the top of - * the stack and only the element on the top may be removed. - *

- * This is an ArrayList Implementation of a stack, where size is not - * a problem we can extend the stack as much as we want. + * + *

A stack is exactly what it sounds like. An element gets added to the top of the stack and only + * the element on the top may be removed. + * + *

This is an ArrayList Implementation of a stack, where size is not a problem we can extend the + * stack as much as we want. */ public class StackArrayList { - /** - * Driver Code - */ - public static void main(String[] args) { - StackArrayList stack = new StackArrayList(); - assert stack.isEmpty(); + /** Driver Code */ + public static void main(String[] args) { + StackArrayList stack = new StackArrayList(); + assert stack.isEmpty(); - for (int i = 1; i <= 5; ++i) { - stack.push(i); - assert stack.size() == i; - } - - assert stack.size() == 5; - assert stack.peek() == 5 && stack.pop() == 5 && stack.peek() == 4; - - /* pop elements at the top of this stack one by one */ - while (!stack.isEmpty()) { - stack.pop(); - } - assert stack.isEmpty(); - - try { - stack.pop(); - assert false; /* this should not happen */ - } catch (EmptyStackException e) { - assert true; /* this should happen */ - } - - } - - /** - * ArrayList representation of the stack - */ - private ArrayList stack; - - /** - * Constructor - */ - public StackArrayList() { - stack = new ArrayList<>(); + for (int i = 1; i <= 5; ++i) { + stack.push(i); + assert stack.size() == i; } - /** - * Adds value to the end of list which - * is the top for stack - * - * @param value value to be added - */ - public void push(int value) { - stack.add(value); - } + assert stack.size() == 5; + assert stack.peek() == 5 && stack.pop() == 5 && stack.peek() == 4; - /** - * Removes the element at the top of this stack and returns - * - * @return Element popped - * @throws EmptyStackException if the stack is empty. - */ - public int pop() { - if (isEmpty()) { - throw new EmptyStackException(); - } - - /* remove the element on the top of the stack */ - return stack.remove(stack.size() - 1); + /* pop elements at the top of this stack one by one */ + while (!stack.isEmpty()) { + stack.pop(); } + assert stack.isEmpty(); - /** - * Test if the stack is empty. - * - * @return {@code true} if this stack is empty, {@code false} otherwise. - */ - public boolean isEmpty() { - return stack.isEmpty(); + try { + stack.pop(); + assert false; /* this should not happen */ + } catch (EmptyStackException e) { + assert true; /* this should happen */ } - - /** - * Return the element at the top of this stack without removing it from the stack. - * - * @return the element at the top of this stack. - */ - public int peek() { - if (isEmpty()) { - throw new EmptyStackException(); - } - return stack.get(stack.size() - 1); + } + + /** ArrayList representation of the stack */ + private ArrayList stack; + + /** Constructor */ + public StackArrayList() { + stack = new ArrayList<>(); + } + + /** + * Adds value to the end of list which is the top for stack + * + * @param value value to be added + */ + public void push(int value) { + stack.add(value); + } + + /** + * Removes the element at the top of this stack and returns + * + * @return Element popped + * @throws EmptyStackException if the stack is empty. + */ + public int pop() { + if (isEmpty()) { + throw new EmptyStackException(); } - /** - * Return size of this stack. - * - * @return size of this stack. - */ - public int size() { - return stack.size(); + /* remove the element on the top of the stack */ + return stack.remove(stack.size() - 1); + } + + /** + * Test if the stack is empty. + * + * @return {@code true} if this stack is empty, {@code false} otherwise. + */ + public boolean isEmpty() { + return stack.isEmpty(); + } + + /** + * Return the element at the top of this stack without removing it from the stack. + * + * @return the element at the top of this stack. + */ + public int peek() { + if (isEmpty()) { + throw new EmptyStackException(); } -} \ No newline at end of file + return stack.get(stack.size() - 1); + } + + /** + * Return size of this stack. + * + * @return size of this stack. + */ + public int size() { + return stack.size(); + } +} diff --git a/DataStructures/Stacks/StackOfLinkedList.java b/DataStructures/Stacks/StackOfLinkedList.java index 60d8a1b0f7a0..39e1f5275161 100644 --- a/DataStructures/Stacks/StackOfLinkedList.java +++ b/DataStructures/Stacks/StackOfLinkedList.java @@ -2,143 +2,134 @@ import java.util.NoSuchElementException; -/** - * @author Varun Upadhyay (https://github.com/varunu28) - */ +/** @author Varun Upadhyay (https://github.com/varunu28) */ // An implementation of a Stack using a Linked List class StackOfLinkedList { - public static void main(String[] args) { + public static void main(String[] args) { - LinkedListStack stack = new LinkedListStack(); - stack.push(1); - stack.push(2); - stack.push(3); - stack.push(4); - stack.push(5); + LinkedListStack stack = new LinkedListStack(); + stack.push(1); + stack.push(2); + stack.push(3); + stack.push(4); + stack.push(5); - System.out.println(stack); + System.out.println(stack); - System.out.println("Size of stack currently is: " + stack.getSize()); + System.out.println("Size of stack currently is: " + stack.getSize()); - assert stack.pop() == 5; - assert stack.pop() == 4; + assert stack.pop() == 5; + assert stack.pop() == 4; - System.out.println("Top element of stack currently is: " + stack.peek()); - } + System.out.println("Top element of stack currently is: " + stack.peek()); + } } // A node class class Node { - public int data; - public Node next; + public int data; + public Node next; - public Node(int data) { - this.data = data; - this.next = null; - } + public Node(int data) { + this.data = data; + this.next = null; + } } /** * A class which implements a stack using a linked list - *

- * Contains all the stack methods : push, pop, printStack, isEmpty - **/ - + * + *

Contains all the stack methods : push, pop, printStack, isEmpty + */ class LinkedListStack { - /** - * Top of stack - */ - Node head; - - /** - * Size of stack - */ - private int size; - - /** - * Init properties - */ - public LinkedListStack() { - head = null; - size = 0; - } - - /** - * Add element at top - * - * @param x to be added - * @return true if add successfully - */ - public boolean push(int x) { - Node newNode = new Node(x); - newNode.next = head; - head = newNode; - size++; - return true; + /** Top of stack */ + Node head; + + /** Size of stack */ + private int size; + + /** Init properties */ + public LinkedListStack() { + head = null; + size = 0; + } + + /** + * Add element at top + * + * @param x to be added + * @return true if add successfully + */ + public boolean push(int x) { + Node newNode = new Node(x); + newNode.next = head; + head = newNode; + size++; + return true; + } + + /** + * Pop element at top of stack + * + * @return element at top of stack + * @throws NoSuchElementException if stack is empty + */ + public int pop() { + if (size == 0) { + throw new NoSuchElementException("Empty stack. Nothing to pop"); } - - /** - * Pop element at top of stack - * - * @return element at top of stack - * @throws NoSuchElementException if stack is empty - */ - public int pop() { - if (size == 0) { - throw new NoSuchElementException("Empty stack. Nothing to pop"); - } - Node destroy = head; - head = head.next; - int retValue = destroy.data; - destroy = null; // clear to let GC do it's work - size--; - return retValue; - } - - /** - * Peek element at top of stack - * - * @return element at top of stack - * @throws NoSuchElementException if stack is empty - */ - public int peek() { - if (size == 0) { - throw new NoSuchElementException("Empty stack. Nothing to pop"); - } - return head.data; - } - - @Override - public String toString() { - Node cur = head; - StringBuilder builder = new StringBuilder(); - while (cur != null) { - builder.append(cur.data).append("->"); - cur = cur.next; - } - return builder.replace(builder.length() - 2, builder.length(), "").toString(); - } - - /** - * Check if stack is empty - * - * @return true if stack is empty, otherwise false - */ - public boolean isEmpty() { - return size == 0; + Node destroy = head; + head = head.next; + int retValue = destroy.data; + destroy = null; // clear to let GC do it's work + size--; + return retValue; + } + + /** + * Peek element at top of stack + * + * @return element at top of stack + * @throws NoSuchElementException if stack is empty + */ + public int peek() { + if (size == 0) { + throw new NoSuchElementException("Empty stack. Nothing to pop"); } - - /** - * Return size of stack - * - * @return size of stack - */ - public int getSize() { - return size; + return head.data; + } + + @Override + public String toString() { + Node cur = head; + StringBuilder builder = new StringBuilder(); + while (cur != null) { + builder.append(cur.data).append("->"); + cur = cur.next; } + return builder.replace(builder.length() - 2, builder.length(), "").toString(); + } + + /** + * Check if stack is empty + * + * @return true if stack is empty, otherwise false + */ + public boolean isEmpty() { + return size == 0; + } + + /** + * Return size of stack + * + * @return size of stack + */ + public int getSize() { + return size; + } } diff --git a/DataStructures/Trees/AVLTree.java b/DataStructures/Trees/AVLTree.java index fb9e2cb34df9..52121a56a5ca 100644 --- a/DataStructures/Trees/AVLTree.java +++ b/DataStructures/Trees/AVLTree.java @@ -2,237 +2,223 @@ public class AVLTree { - private Node root; - - private class Node { - private int key; - private int balance; - private int height; - private Node left, right, parent; - - Node(int k, Node p) { - key = k; - parent = p; + private Node root; + + private class Node { + private int key; + private int balance; + private int height; + private Node left, right, parent; + + Node(int k, Node p) { + key = k; + parent = p; + } + } + + public boolean insert(int key) { + if (root == null) root = new Node(key, null); + else { + Node n = root; + Node parent; + while (true) { + if (n.key == key) return false; + + parent = n; + + boolean goLeft = n.key > key; + n = goLeft ? n.left : n.right; + + if (n == null) { + if (goLeft) { + parent.left = new Node(key, parent); + } else { + parent.right = new Node(key, parent); + } + rebalance(parent); + break; } + } } + return true; + } - public boolean insert(int key) { - if (root == null) - root = new Node(key, null); - else { - Node n = root; - Node parent; - while (true) { - if (n.key == key) - return false; - - parent = n; - - boolean goLeft = n.key > key; - n = goLeft ? n.left : n.right; - - if (n == null) { - if (goLeft) { - parent.left = new Node(key, parent); - } else { - parent.right = new Node(key, parent); - } - rebalance(parent); - break; - } - } - } - return true; + private void delete(Node node) { + if (node.left == null && node.right == null) { + if (node.parent == null) root = null; + else { + Node parent = node.parent; + if (parent.left == node) { + parent.left = null; + } else parent.right = null; + rebalance(parent); + } + return; + } + if (node.left != null) { + Node child = node.left; + while (child.right != null) child = child.right; + node.key = child.key; + delete(child); + } else { + Node child = node.right; + while (child.left != null) child = child.left; + node.key = child.key; + delete(child); } + } - private void delete(Node node) { - if (node.left == null && node.right == null) { - if (node.parent == null) root = null; - else { - Node parent = node.parent; - if (parent.left == node) { - parent.left = null; - } else parent.right = null; - rebalance(parent); - } - return; - } - if (node.left != null) { - Node child = node.left; - while (child.right != null) child = child.right; - node.key = child.key; - delete(child); - } else { - Node child = node.right; - while (child.left != null) child = child.left; - node.key = child.key; - delete(child); - } + public void delete(int delKey) { + if (root == null) return; + Node node = root; + Node child = root; + + while (child != null) { + node = child; + child = delKey >= node.key ? node.right : node.left; + if (delKey == node.key) { + delete(node); + return; + } } + } - public void delete(int delKey) { - if (root == null) - return; - Node node = root; - Node child = root; - - while (child != null) { - node = child; - child = delKey >= node.key ? node.right : node.left; - if (delKey == node.key) { - delete(node); - return; - } - } + private void rebalance(Node n) { + setBalance(n); + + if (n.balance == -2) { + if (height(n.left.left) >= height(n.left.right)) n = rotateRight(n); + else n = rotateLeftThenRight(n); + + } else if (n.balance == 2) { + if (height(n.right.right) >= height(n.right.left)) n = rotateLeft(n); + else n = rotateRightThenLeft(n); } - private void rebalance(Node n) { - setBalance(n); + if (n.parent != null) { + rebalance(n.parent); + } else { + root = n; + } + } - if (n.balance == -2) { - if (height(n.left.left) >= height(n.left.right)) - n = rotateRight(n); - else - n = rotateLeftThenRight(n); + private Node rotateLeft(Node a) { - } else if (n.balance == 2) { - if (height(n.right.right) >= height(n.right.left)) - n = rotateLeft(n); - else - n = rotateRightThenLeft(n); - } + Node b = a.right; + b.parent = a.parent; - if (n.parent != null) { - rebalance(n.parent); - } else { - root = n; - } + a.right = b.left; + + if (a.right != null) a.right.parent = a; + + b.left = a; + a.parent = b; + + if (b.parent != null) { + if (b.parent.right == a) { + b.parent.right = b; + } else { + b.parent.left = b; + } } - private Node rotateLeft(Node a) { + setBalance(a, b); - Node b = a.right; - b.parent = a.parent; + return b; + } - a.right = b.left; + private Node rotateRight(Node a) { - if (a.right != null) - a.right.parent = a; + Node b = a.left; + b.parent = a.parent; - b.left = a; - a.parent = b; + a.left = b.right; - if (b.parent != null) { - if (b.parent.right == a) { - b.parent.right = b; - } else { - b.parent.left = b; - } - } + if (a.left != null) a.left.parent = a; - setBalance(a, b); + b.right = a; + a.parent = b; - return b; + if (b.parent != null) { + if (b.parent.right == a) { + b.parent.right = b; + } else { + b.parent.left = b; + } } - private Node rotateRight(Node a) { + setBalance(a, b); - Node b = a.left; - b.parent = a.parent; + return b; + } - a.left = b.right; + private Node rotateLeftThenRight(Node n) { + n.left = rotateLeft(n.left); + return rotateRight(n); + } - if (a.left != null) - a.left.parent = a; + private Node rotateRightThenLeft(Node n) { + n.right = rotateRight(n.right); + return rotateLeft(n); + } - b.right = a; - a.parent = b; + private int height(Node n) { + if (n == null) return -1; + return n.height; + } - if (b.parent != null) { - if (b.parent.right == a) { - b.parent.right = b; - } else { - b.parent.left = b; - } - } + private void setBalance(Node... nodes) { + for (Node n : nodes) { + reheight(n); + n.balance = height(n.right) - height(n.left); + } + } - setBalance(a, b); + public void printBalance() { + printBalance(root); + } - return b; + private void printBalance(Node n) { + if (n != null) { + printBalance(n.left); + System.out.printf("%s ", n.balance); + printBalance(n.right); } + } - private Node rotateLeftThenRight(Node n) { - n.left = rotateLeft(n.left); - return rotateRight(n); + private void reheight(Node node) { + if (node != null) { + node.height = 1 + Math.max(height(node.left), height(node.right)); } + } - private Node rotateRightThenLeft(Node n) { - n.right = rotateRight(n.right); - return rotateLeft(n); - } + public boolean search(int key) { + Node result = searchHelper(this.root, key); + if (result != null) return true; - private int height(Node n) { - if (n == null) - return -1; - return n.height; - } + return false; + } - private void setBalance(Node... nodes) { - for (Node n : nodes) { - reheight(n); - n.balance = height(n.right) - height(n.left); - } - } + private Node searchHelper(Node root, int key) { + // root is null or key is present at root + if (root == null || root.key == key) return root; - public void printBalance() { - printBalance(root); - } + // key is greater than root's key + if (root.key > key) + return searchHelper(root.left, key); // call the function on the node's left child - private void printBalance(Node n) { - if (n != null) { - printBalance(n.left); - System.out.printf("%s ", n.balance); - printBalance(n.right); - } - } + // key is less than root's key then + // call the function on the node's right child as it is greater + return searchHelper(root.right, key); + } - private void reheight(Node node) { - if (node != null) { - node.height = 1 + Math.max(height(node.left), height(node.right)); - } - } + public static void main(String[] args) { + AVLTree tree = new AVLTree(); - public boolean search(int key) { - Node result = searchHelper(this.root,key); - if(result != null) - return true ; - - return false ; - } - - private Node searchHelper(Node root, int key) - { - //root is null or key is present at root - if (root==null || root.key==key) - return root; - - // key is greater than root's key - if (root.key > key) - return searchHelper(root.left, key); // call the function on the node's left child - - // key is less than root's key then - //call the function on the node's right child as it is greater - return searchHelper(root.right, key); - } - - public static void main(String[] args) { - AVLTree tree = new AVLTree(); - - System.out.println("Inserting values 1 to 10"); - for (int i = 1; i < 10; i++) - tree.insert(i); - - System.out.print("Printing balance: "); - tree.printBalance(); - } + System.out.println("Inserting values 1 to 10"); + for (int i = 1; i < 10; i++) tree.insert(i); + + System.out.print("Printing balance: "); + tree.printBalance(); + } } diff --git a/DataStructures/Trees/BinaryTree.java b/DataStructures/Trees/BinaryTree.java index 6ef4b5ada325..9afbf6f0271b 100644 --- a/DataStructures/Trees/BinaryTree.java +++ b/DataStructures/Trees/BinaryTree.java @@ -1,282 +1,259 @@ package DataStructures.Trees; /** - * This entire class is used to build a Binary Tree data structure. - * There is the Node Class and the Tree Class, both explained below. + * This entire class is used to build a Binary Tree data structure. There is the Node Class and the + * Tree Class, both explained below. */ - /** - * A binary tree is a data structure in which an element - * has two successors(children). The left child is usually - * smaller than the parent, and the right child is usually - * bigger. + * A binary tree is a data structure in which an element has two successors(children). The left + * child is usually smaller than the parent, and the right child is usually bigger. * * @author Unknown - * */ public class BinaryTree { + /** + * This class implements the nodes that will go on the Binary Tree. They consist of the data in + * them, the node to the left, the node to the right, and the parent from which they came from. + * + * @author Unknown + */ + class Node { + /** Data for the node */ + public int data; + /** The Node to the left of this one */ + public Node left; + /** The Node to the right of this one */ + public Node right; + /** The parent of this node */ + public Node parent; + /** - * This class implements the nodes that will go on the Binary Tree. - * They consist of the data in them, the node to the left, the node - * to the right, and the parent from which they came from. - * - * @author Unknown + * Constructor of Node * + * @param value Value to put in the node */ - class Node { - /** Data for the node */ - public int data; - /** The Node to the left of this one */ - public Node left; - /** The Node to the right of this one */ - public Node right; - /** The parent of this node */ - public Node parent; - - /** - * Constructor of Node - * - * @param value Value to put in the node - */ - public Node(int value) { - data = value; - left = null; - right = null; - parent = null; - } + public Node(int value) { + data = value; + left = null; + right = null; + parent = null; } + } + /** The root of the Binary Tree */ + private Node root; - /** The root of the Binary Tree */ - private Node root; + /** Constructor */ + public BinaryTree() { + root = null; + } - /** - * Constructor - */ - public BinaryTree() { - root = null; - } - - /** - * Method to find a Node with a certain value - * - * @param key Value being looked for - * @return The node if it finds it, otherwise returns the parent - */ - public Node find(int key) { - Node current = root; - while (current != null) { - if (key < current.data) { - if (current.left == null) - return current; //The key isn't exist, returns the parent - current = current.left; - } else if (key > current.data) { - if (current.right == null) - return current; - current = current.right; - } else { // If you find the value return it - return current; - } - } - return null; + /** + * Method to find a Node with a certain value + * + * @param key Value being looked for + * @return The node if it finds it, otherwise returns the parent + */ + public Node find(int key) { + Node current = root; + while (current != null) { + if (key < current.data) { + if (current.left == null) return current; // The key isn't exist, returns the parent + current = current.left; + } else if (key > current.data) { + if (current.right == null) return current; + current = current.right; + } else { // If you find the value return it + return current; + } } + return null; + } - /** - * Inserts certain value into the Binary Tree - * - * @param value Value to be inserted - */ - public void put(int value) { - Node newNode = new Node(value); - if (root == null) - root = newNode; - else { - //This will return the soon to be parent of the value you're inserting - Node parent = find(value); + /** + * Inserts certain value into the Binary Tree + * + * @param value Value to be inserted + */ + public void put(int value) { + Node newNode = new Node(value); + if (root == null) root = newNode; + else { + // This will return the soon to be parent of the value you're inserting + Node parent = find(value); - //This if/else assigns the new node to be either the left or right child of the parent - if (value < parent.data) { - parent.left = newNode; - parent.left.parent = parent; - return; - } else { - parent.right = newNode; - parent.right.parent = parent; - return; - } - } + // This if/else assigns the new node to be either the left or right child of the parent + if (value < parent.data) { + parent.left = newNode; + parent.left.parent = parent; + return; + } else { + parent.right = newNode; + parent.right.parent = parent; + return; + } } + } - /** - * Deletes a given value from the Binary Tree - * - * @param value Value to be deleted - * @return If the value was deleted - */ - public boolean remove(int value) { - //temp is the node to be deleted - Node temp = find(value); + /** + * Deletes a given value from the Binary Tree + * + * @param value Value to be deleted + * @return If the value was deleted + */ + public boolean remove(int value) { + // temp is the node to be deleted + Node temp = find(value); - //If the value doesn't exist - if (temp.data != value) - return false; + // If the value doesn't exist + if (temp.data != value) return false; - //No children - if (temp.right == null && temp.left == null) { - if (temp == root) - root = null; + // No children + if (temp.right == null && temp.left == null) { + if (temp == root) root = null; - //This if/else assigns the new node to be either the left or right child of the parent - else if (temp.parent.data < temp.data) - temp.parent.right = null; - else - temp.parent.left = null; - return true; - } + // This if/else assigns the new node to be either the left or right child of the parent + else if (temp.parent.data < temp.data) temp.parent.right = null; + else temp.parent.left = null; + return true; + } - //Two children - else if (temp.left != null && temp.right != null) { - Node successor = findSuccessor(temp); + // Two children + else if (temp.left != null && temp.right != null) { + Node successor = findSuccessor(temp); - //The left tree of temp is made the left tree of the successor - successor.left = temp.left; - successor.left.parent = successor; + // The left tree of temp is made the left tree of the successor + successor.left = temp.left; + successor.left.parent = successor; - //If the successor has a right child, the child's grandparent is it's new parent - if(successor.parent!=temp){ - if(successor.right!=null){ - successor.right.parent = successor.parent; - successor.parent.left = successor.right; - successor.right = temp.right; - successor.right.parent = successor; - }else{ - successor.parent.left=null; - successor.right=temp.right; - successor.right.parent=successor; - } - } + // If the successor has a right child, the child's grandparent is it's new parent + if (successor.parent != temp) { + if (successor.right != null) { + successor.right.parent = successor.parent; + successor.parent.left = successor.right; + successor.right = temp.right; + successor.right.parent = successor; + } else { + successor.parent.left = null; + successor.right = temp.right; + successor.right.parent = successor; + } + } - if (temp == root) { - successor.parent = null; - root = successor; - return true; - } + if (temp == root) { + successor.parent = null; + root = successor; + return true; + } - //If you're not deleting the root - else { - successor.parent = temp.parent; + // If you're not deleting the root + else { + successor.parent = temp.parent; - //This if/else assigns the new node to be either the left or right child of the parent - if (temp.parent.data < temp.data) - temp.parent.right = successor; - else - temp.parent.left = successor; - return true; - } + // This if/else assigns the new node to be either the left or right child of the parent + if (temp.parent.data < temp.data) temp.parent.right = successor; + else temp.parent.left = successor; + return true; + } + } + // One child + else { + // If it has a right child + if (temp.right != null) { + if (temp == root) { + root = temp.right; + return true; } - //One child - else { - //If it has a right child - if (temp.right != null) { - if (temp == root) { - root = temp.right; - return true; - } - temp.right.parent = temp.parent; + temp.right.parent = temp.parent; - //Assigns temp to left or right child - if (temp.data < temp.parent.data) - temp.parent.left = temp.right; - else - temp.parent.right = temp.right; - return true; - } - //If it has a left child - else { - if (temp == root) { - root = temp.left; - return true; - } + // Assigns temp to left or right child + if (temp.data < temp.parent.data) temp.parent.left = temp.right; + else temp.parent.right = temp.right; + return true; + } + // If it has a left child + else { + if (temp == root) { + root = temp.left; + return true; + } - temp.left.parent = temp.parent; + temp.left.parent = temp.parent; - //Assigns temp to left or right side - if (temp.data < temp.parent.data) - temp.parent.left = temp.left; - else - temp.parent.right = temp.left; - return true; - } - } + // Assigns temp to left or right side + if (temp.data < temp.parent.data) temp.parent.left = temp.left; + else temp.parent.right = temp.left; + return true; + } } + } - /** - * This method finds the Successor to the Node given. - * Move right once and go left down the tree as far as you can - * - * @param n Node that you want to find the Successor of - * @return The Successor of the node - */ - public Node findSuccessor(Node n) { - if (n.right == null) - return n; - Node current = n.right; - Node parent = n.right; - while (current != null) { - parent = current; - current = current.left; - } - return parent; + /** + * This method finds the Successor to the Node given. Move right once and go left down the tree as + * far as you can + * + * @param n Node that you want to find the Successor of + * @return The Successor of the node + */ + public Node findSuccessor(Node n) { + if (n.right == null) return n; + Node current = n.right; + Node parent = n.right; + while (current != null) { + parent = current; + current = current.left; } + return parent; + } - /** - * Returns the root of the Binary Tree - * - * @return the root of the Binary Tree - */ - public Node getRoot() { - return root; - } + /** + * Returns the root of the Binary Tree + * + * @return the root of the Binary Tree + */ + public Node getRoot() { + return root; + } - /** - * Prints leftChild - root - rightChild - * - * @param localRoot The local root of the binary tree - */ - public void inOrder(Node localRoot) { - if (localRoot != null) { - inOrder(localRoot.left); - System.out.print(localRoot.data + " "); - inOrder(localRoot.right); - } + /** + * Prints leftChild - root - rightChild + * + * @param localRoot The local root of the binary tree + */ + public void inOrder(Node localRoot) { + if (localRoot != null) { + inOrder(localRoot.left); + System.out.print(localRoot.data + " "); + inOrder(localRoot.right); } + } - /** - * Prints root - leftChild - rightChild - * - * @param localRoot The local root of the binary tree - */ - public void preOrder(Node localRoot) { - if (localRoot != null) { - System.out.print(localRoot.data + " "); - preOrder(localRoot.left); - preOrder(localRoot.right); - } + /** + * Prints root - leftChild - rightChild + * + * @param localRoot The local root of the binary tree + */ + public void preOrder(Node localRoot) { + if (localRoot != null) { + System.out.print(localRoot.data + " "); + preOrder(localRoot.left); + preOrder(localRoot.right); } + } - /** - * Prints rightChild - leftChild - root - * - * @param localRoot The local root of the binary tree - */ - public void postOrder(Node localRoot) { - if (localRoot != null) { - postOrder(localRoot.left); - postOrder(localRoot.right); - System.out.print(localRoot.data + " "); - } + /** + * Prints rightChild - leftChild - root + * + * @param localRoot The local root of the binary tree + */ + public void postOrder(Node localRoot) { + if (localRoot != null) { + postOrder(localRoot.left); + postOrder(localRoot.right); + System.out.print(localRoot.data + " "); } + } } diff --git a/DataStructures/Trees/GenericTree.java b/DataStructures/Trees/GenericTree.java index 107a072cf965..cb30c4f452a2 100644 --- a/DataStructures/Trees/GenericTree.java +++ b/DataStructures/Trees/GenericTree.java @@ -5,230 +5,208 @@ import java.util.Scanner; /** - * A generic tree is a tree which can have as many children as it can be - * It might be possible that every node present is directly connected to - * root node. - *

- * In this code - * Every function has two copies: one function is helper function which can be called from - * main and from that function a private function is called which will do the actual work. - * I have done this, while calling from main one have to give minimum parameters. + * A generic tree is a tree which can have as many children as it can be It might be possible that + * every node present is directly connected to root node. + * + *

In this code Every function has two copies: one function is helper function which can be + * called from main and from that function a private function is called which will do the actual + * work. I have done this, while calling from main one have to give minimum parameters. */ public class GenericTree { - private class Node { - int data; - ArrayList child = new ArrayList<>(); - } - - private Node root; - private int size; - - public GenericTree() { //Constructor - Scanner scn = new Scanner(System.in); - root = create_treeG(null, 0, scn); - } - - private Node create_treeG(Node node, int childindx, Scanner scn) { - // display - if (node == null) { - System.out.println("Enter root's data"); - } else { - System.out.println("Enter data of parent of index " + node.data + " " + childindx); - } - // input - node = new Node(); - node.data = scn.nextInt(); - System.out.println("number of children"); - int number = scn.nextInt(); - for (int i = 0; i < number; i++) { - Node child = create_treeG(node, i, scn); - size++; - node.child.add(child); - } - return node; - } - - /** - * Function to display the generic tree - */ - public void display() { //Helper function - display_1(root); - } - - private void display_1(Node parent) { - System.out.print(parent.data + "=>"); - for (int i = 0; i < parent.child.size(); i++) { - System.out.print(parent.child.get(i).data + " "); - } - System.out.println("."); - for (int i = 0; i < parent.child.size(); i++) { - display_1(parent.child.get(i)); - } - } - - /** - * One call store the size directly but if you are asked compute size this function to calculate - * size goes as follows - * - * @return size - */ - public int size2call() { - return size2(root); - } - - public int size2(Node roott) { - int sz = 0; - for (int i = 0; i < roott.child.size(); i++) { - sz += size2(roott.child.get(i)); - } - return sz + 1; - } - - /** - * Function to compute maximum value in the generic tree - * - * @return maximum value - */ - public int maxcall() { - int maxi = root.data; - return max(root, maxi); - } - - private int max(Node roott, int maxi) { - if (maxi < roott.data) - maxi = roott.data; - for (int i = 0; i < roott.child.size(); i++) { - maxi = max(roott.child.get(i), maxi); - } - - return maxi; - } - - /** - * Function to compute HEIGHT of the generic tree - * - * @return height - */ - public int heightcall() { - return height(root) - 1; - } - - private int height(Node node) { - int h = 0; - for (int i = 0; i < node.child.size(); i++) { - int k = height(node.child.get(i)); - if (k > h) - h = k; - } - return h + 1; - } - - /** - * Function to find whether a number is present in the generic tree or not - * - * @param info number - * @return present or not - */ - public boolean findcall(int info) { - return find(root, info); - } - - private boolean find(Node node, int info) { - if (node.data == info) - return true; - for (int i = 0; i < node.child.size(); i++) { - if (find(node.child.get(i), info)) - return true; - } - return false; - } - - - /** - * Function to calculate depth of generic tree - * - * @param dep depth - */ - public void depthcaller(int dep) { - depth(root, dep); - } - - public void depth(Node node, int dep) { - if (dep == 0) { - System.out.println(node.data); - return; - } - for (int i = 0; i < node.child.size(); i++) - depth(node.child.get(i), dep - 1); - return; - } - - /** - * Function to print generic tree in pre-order - */ - public void preordercall() { - preorder(root); - System.out.println("."); - } - - private void preorder(Node node) { - System.out.print(node.data + " "); - for (int i = 0; i < node.child.size(); i++) - preorder(node.child.get(i)); - } - - /** - * Function to print generic tree in post-order - */ - public void postordercall() { - postorder(root); - System.out.println("."); - } - - private void postorder(Node node) { - for (int i = 0; i < node.child.size(); i++) - postorder(node.child.get(i)); - System.out.print(node.data + " "); - } - - /** - * Function to print generic tree in level-order - */ - public void levelorder() { - LinkedList q = new LinkedList<>(); - q.addLast(root); - while (!q.isEmpty()) { - int k = q.getFirst().data; - System.out.print(k + " "); - - for (int i = 0; i < q.getFirst().child.size(); i++) { - q.addLast(q.getFirst().child.get(i)); - } - q.removeFirst(); - } - System.out.println("."); - } - - /** - * Function to remove all leaves of generic tree - */ - public void removeleavescall() { - removeleaves(root); - } - - private void removeleaves(Node node) { - ArrayList arr = new ArrayList<>(); - for (int i = 0; i < node.child.size(); i++) { - if (node.child.get(i).child.size() == 0) { - arr.add(i); - // node.child.remove(i); - // i--; - } else - removeleaves(node.child.get(i)); - } - for (int i = arr.size() - 1; i >= 0; i--) { - node.child.remove(arr.get(i) + 0); - } - } - + private class Node { + int data; + ArrayList child = new ArrayList<>(); + } + + private Node root; + private int size; + + public GenericTree() { // Constructor + Scanner scn = new Scanner(System.in); + root = create_treeG(null, 0, scn); + } + + private Node create_treeG(Node node, int childindx, Scanner scn) { + // display + if (node == null) { + System.out.println("Enter root's data"); + } else { + System.out.println("Enter data of parent of index " + node.data + " " + childindx); + } + // input + node = new Node(); + node.data = scn.nextInt(); + System.out.println("number of children"); + int number = scn.nextInt(); + for (int i = 0; i < number; i++) { + Node child = create_treeG(node, i, scn); + size++; + node.child.add(child); + } + return node; + } + + /** Function to display the generic tree */ + public void display() { // Helper function + display_1(root); + } + + private void display_1(Node parent) { + System.out.print(parent.data + "=>"); + for (int i = 0; i < parent.child.size(); i++) { + System.out.print(parent.child.get(i).data + " "); + } + System.out.println("."); + for (int i = 0; i < parent.child.size(); i++) { + display_1(parent.child.get(i)); + } + } + + /** + * One call store the size directly but if you are asked compute size this function to calculate + * size goes as follows + * + * @return size + */ + public int size2call() { + return size2(root); + } + + public int size2(Node roott) { + int sz = 0; + for (int i = 0; i < roott.child.size(); i++) { + sz += size2(roott.child.get(i)); + } + return sz + 1; + } + + /** + * Function to compute maximum value in the generic tree + * + * @return maximum value + */ + public int maxcall() { + int maxi = root.data; + return max(root, maxi); + } + + private int max(Node roott, int maxi) { + if (maxi < roott.data) maxi = roott.data; + for (int i = 0; i < roott.child.size(); i++) { + maxi = max(roott.child.get(i), maxi); + } + + return maxi; + } + + /** + * Function to compute HEIGHT of the generic tree + * + * @return height + */ + public int heightcall() { + return height(root) - 1; + } + + private int height(Node node) { + int h = 0; + for (int i = 0; i < node.child.size(); i++) { + int k = height(node.child.get(i)); + if (k > h) h = k; + } + return h + 1; + } + + /** + * Function to find whether a number is present in the generic tree or not + * + * @param info number + * @return present or not + */ + public boolean findcall(int info) { + return find(root, info); + } + + private boolean find(Node node, int info) { + if (node.data == info) return true; + for (int i = 0; i < node.child.size(); i++) { + if (find(node.child.get(i), info)) return true; + } + return false; + } + + /** + * Function to calculate depth of generic tree + * + * @param dep depth + */ + public void depthcaller(int dep) { + depth(root, dep); + } + + public void depth(Node node, int dep) { + if (dep == 0) { + System.out.println(node.data); + return; + } + for (int i = 0; i < node.child.size(); i++) depth(node.child.get(i), dep - 1); + return; + } + + /** Function to print generic tree in pre-order */ + public void preordercall() { + preorder(root); + System.out.println("."); + } + + private void preorder(Node node) { + System.out.print(node.data + " "); + for (int i = 0; i < node.child.size(); i++) preorder(node.child.get(i)); + } + + /** Function to print generic tree in post-order */ + public void postordercall() { + postorder(root); + System.out.println("."); + } + + private void postorder(Node node) { + for (int i = 0; i < node.child.size(); i++) postorder(node.child.get(i)); + System.out.print(node.data + " "); + } + + /** Function to print generic tree in level-order */ + public void levelorder() { + LinkedList q = new LinkedList<>(); + q.addLast(root); + while (!q.isEmpty()) { + int k = q.getFirst().data; + System.out.print(k + " "); + + for (int i = 0; i < q.getFirst().child.size(); i++) { + q.addLast(q.getFirst().child.get(i)); + } + q.removeFirst(); + } + System.out.println("."); + } + + /** Function to remove all leaves of generic tree */ + public void removeleavescall() { + removeleaves(root); + } + + private void removeleaves(Node node) { + ArrayList arr = new ArrayList<>(); + for (int i = 0; i < node.child.size(); i++) { + if (node.child.get(i).child.size() == 0) { + arr.add(i); + // node.child.remove(i); + // i--; + } else removeleaves(node.child.get(i)); + } + for (int i = arr.size() - 1; i >= 0; i--) { + node.child.remove(arr.get(i) + 0); + } + } } diff --git a/DataStructures/Trees/LevelOrderTraversal.java b/DataStructures/Trees/LevelOrderTraversal.java index 69e65fe64089..07ae57041419 100644 --- a/DataStructures/Trees/LevelOrderTraversal.java +++ b/DataStructures/Trees/LevelOrderTraversal.java @@ -2,54 +2,48 @@ public class LevelOrderTraversal { - class Node { - int data; - Node left, right; - - public Node(int item) { - data = item; - left = right = null; - } - } - - // Root of the Binary Tree - Node root; - - public LevelOrderTraversal( Node root) { - this.root = root; - } + class Node { + int data; + Node left, right; - /* function to print level order traversal of tree*/ - void printLevelOrder() { - int h = height(root); - int i; - for (i = 1; i <= h; i++) - printGivenLevel(root, i); + public Node(int item) { + data = item; + left = right = null; } - - /* Compute the "height" of a tree -- the number of - nodes along the longest path from the root node - down to the farthest leaf node.*/ - int height(Node root) { - if (root == null) - return 0; - else { - /** - * Return the height of larger subtree - */ - return Math.max(height(root.left), height(root.right)) + 1; - } + } + + // Root of the Binary Tree + Node root; + + public LevelOrderTraversal(Node root) { + this.root = root; + } + + /* function to print level order traversal of tree*/ + void printLevelOrder() { + int h = height(root); + int i; + for (i = 1; i <= h; i++) printGivenLevel(root, i); + } + + /* Compute the "height" of a tree -- the number of + nodes along the longest path from the root node + down to the farthest leaf node.*/ + int height(Node root) { + if (root == null) return 0; + else { + /** Return the height of larger subtree */ + return Math.max(height(root.left), height(root.right)) + 1; } - - /* Print nodes at the given level */ - void printGivenLevel(Node root, int level) { - if (root == null) - return; - if (level == 1) - System.out.print(root.data + " "); - else if (level > 1) { - printGivenLevel(root.left, level - 1); - printGivenLevel(root.right, level - 1); - } + } + + /* Print nodes at the given level */ + void printGivenLevel(Node root, int level) { + if (root == null) return; + if (level == 1) System.out.print(root.data + " "); + else if (level > 1) { + printGivenLevel(root.left, level - 1); + printGivenLevel(root.right, level - 1); } + } } diff --git a/DataStructures/Trees/LevelOrderTraversalQueue.java b/DataStructures/Trees/LevelOrderTraversalQueue.java index 5f85f987d673..58f48eba6bc5 100644 --- a/DataStructures/Trees/LevelOrderTraversalQueue.java +++ b/DataStructures/Trees/LevelOrderTraversalQueue.java @@ -1,46 +1,45 @@ package DataStructures.Trees; -import java.util.Queue; import java.util.LinkedList; - +import java.util.Queue; /* Class to print Level Order Traversal */ public class LevelOrderTraversalQueue { - /* Class to represent Tree node */ - class Node { - int data; - Node left, right; + /* Class to represent Tree node */ + class Node { + int data; + Node left, right; - public Node(int item) { - data = item; - left = null; - right = null; - } + public Node(int item) { + data = item; + left = null; + right = null; } - - /* Given a binary tree. Print its nodes in level order - using array for implementing queue */ - void printLevelOrder(Node root) { - Queue queue = new LinkedList(); - queue.add(root); - while (!queue.isEmpty()) { - - /* poll() removes the present head. - For more information on poll() visit - http://www.tutorialspoint.com/java/util/linkedlist_poll.htm */ - Node tempNode = queue.poll(); - System.out.print(tempNode.data + " "); - - /*Enqueue left child */ - if (tempNode.left != null) { - queue.add(tempNode.left); - } - - /*Enqueue right child */ - if (tempNode.right != null) { - queue.add(tempNode.right); - } - } + } + + /* Given a binary tree. Print its nodes in level order + using array for implementing queue */ + void printLevelOrder(Node root) { + Queue queue = new LinkedList(); + queue.add(root); + while (!queue.isEmpty()) { + + /* poll() removes the present head. + For more information on poll() visit + http://www.tutorialspoint.com/java/util/linkedlist_poll.htm */ + Node tempNode = queue.poll(); + System.out.print(tempNode.data + " "); + + /*Enqueue left child */ + if (tempNode.left != null) { + queue.add(tempNode.left); + } + + /*Enqueue right child */ + if (tempNode.right != null) { + queue.add(tempNode.right); + } } -} \ No newline at end of file + } +} diff --git a/DataStructures/Trees/PrintTopViewofTree.java b/DataStructures/Trees/PrintTopViewofTree.java index 58f611305c51..78626f46ba7d 100644 --- a/DataStructures/Trees/PrintTopViewofTree.java +++ b/DataStructures/Trees/PrintTopViewofTree.java @@ -1,4 +1,4 @@ -package DataStructures.Trees;// Java program to print top view of Binary tree +package DataStructures.Trees; // Java program to print top view of Binary tree import java.util.HashSet; import java.util.LinkedList; @@ -6,101 +6,99 @@ // Class for a tree node class TreeNode { - // Members - int key; - TreeNode left, right; + // Members + int key; + TreeNode left, right; - // Constructor - public TreeNode(int key) { - this.key = key; - left = right = null; - } + // Constructor + public TreeNode(int key) { + this.key = key; + left = right = null; + } } // A class to represent a queue item. The queue is used to do Level // order traversal. Every Queue item contains node and horizontal // distance of node from root class QItem { - TreeNode node; - int hd; + TreeNode node; + int hd; - public QItem(TreeNode n, int h) { - node = n; - hd = h; - } + public QItem(TreeNode n, int h) { + node = n; + hd = h; + } } // Class for a Binary Tree class Tree { - TreeNode root; + TreeNode root; - // Constructors - public Tree() { - root = null; - } + // Constructors + public Tree() { + root = null; + } - public Tree(TreeNode n) { - root = n; - } + public Tree(TreeNode n) { + root = n; + } - // This method prints nodes in top view of binary tree - public void printTopView() { - // base case - if (root == null) { - return; - } + // This method prints nodes in top view of binary tree + public void printTopView() { + // base case + if (root == null) { + return; + } - // Creates an empty hashset - HashSet set = new HashSet<>(); + // Creates an empty hashset + HashSet set = new HashSet<>(); - // Create a queue and add root to it - Queue Q = new LinkedList(); - Q.add(new QItem(root, 0)); // Horizontal distance of root is 0 + // Create a queue and add root to it + Queue Q = new LinkedList(); + Q.add(new QItem(root, 0)); // Horizontal distance of root is 0 - // Standard BFS or level order traversal loop - while (!Q.isEmpty()) { - // Remove the front item and get its details - QItem qi = Q.remove(); - int hd = qi.hd; - TreeNode n = qi.node; + // Standard BFS or level order traversal loop + while (!Q.isEmpty()) { + // Remove the front item and get its details + QItem qi = Q.remove(); + int hd = qi.hd; + TreeNode n = qi.node; - // If this is the first node at its horizontal distance, - // then this node is in top view - if (!set.contains(hd)) { - set.add(hd); - System.out.print(n.key + " "); - } + // If this is the first node at its horizontal distance, + // then this node is in top view + if (!set.contains(hd)) { + set.add(hd); + System.out.print(n.key + " "); + } - // Enqueue left and right children of current node - if (n.left != null) - Q.add(new QItem(n.left, hd - 1)); - if (n.right != null) - Q.add(new QItem(n.right, hd + 1)); - } + // Enqueue left and right children of current node + if (n.left != null) Q.add(new QItem(n.left, hd - 1)); + if (n.right != null) Q.add(new QItem(n.right, hd + 1)); } + } } // Driver class to test above methods public class PrintTopViewofTree { - public static void main(String[] args) { - /* Create following Binary Tree - 1 - / \ - 2 3 - \ - 4 - \ - 5 - \ - 6*/ - TreeNode root = new TreeNode(1); - root.left = new TreeNode(2); - root.right = new TreeNode(3); - root.left.right = new TreeNode(4); - root.left.right.right = new TreeNode(5); - root.left.right.right.right = new TreeNode(6); - Tree t = new Tree(root); - System.out.println("Following are nodes in top view of Binary Tree"); - t.printTopView(); - } -} \ No newline at end of file + public static void main(String[] args) { + /* Create following Binary Tree + 1 + / \ + 2 3 + \ + 4 + \ + 5 + \ + 6*/ + TreeNode root = new TreeNode(1); + root.left = new TreeNode(2); + root.right = new TreeNode(3); + root.left.right = new TreeNode(4); + root.left.right.right = new TreeNode(5); + root.left.right.right.right = new TreeNode(6); + Tree t = new Tree(root); + System.out.println("Following are nodes in top view of Binary Tree"); + t.printTopView(); + } +} diff --git a/DataStructures/Trees/RedBlackBST.java b/DataStructures/Trees/RedBlackBST.java index 45501fd290e3..f8c7b640d6c1 100644 --- a/DataStructures/Trees/RedBlackBST.java +++ b/DataStructures/Trees/RedBlackBST.java @@ -2,334 +2,330 @@ import java.util.Scanner; -/** - * @author jack870131 - */ +/** @author jack870131 */ public class RedBlackBST { - private final int R = 0; - private final int B = 1; + private final int R = 0; + private final int B = 1; - private class Node { + private class Node { - int key = -1, color = B; - Node left = nil, right = nil, p = nil; + int key = -1, color = B; + Node left = nil, right = nil, p = nil; - Node(int key) { - this.key = key; - } + Node(int key) { + this.key = key; } + } - private final Node nil = new Node(-1); - private Node root = nil; + private final Node nil = new Node(-1); + private Node root = nil; - public void printTree(Node node) { - if (node == nil) { - return; - } - printTree(node.left); - System.out.print(((node.color == R) ? " R " : " B ") + "Key: " + node.key + " Parent: " + node.p.key + "\n"); - printTree(node.right); + public void printTree(Node node) { + if (node == nil) { + return; } + printTree(node.left); + System.out.print( + ((node.color == R) ? " R " : " B ") + "Key: " + node.key + " Parent: " + node.p.key + "\n"); + printTree(node.right); + } - public void printTreepre(Node node) { - if (node == nil) { - return; - } - System.out.print(((node.color == R) ? " R " : " B ") + "Key: " + node.key + " Parent: " + node.p.key + "\n"); - printTree(node.left); - printTree(node.right); + public void printTreepre(Node node) { + if (node == nil) { + return; } + System.out.print( + ((node.color == R) ? " R " : " B ") + "Key: " + node.key + " Parent: " + node.p.key + "\n"); + printTree(node.left); + printTree(node.right); + } - private Node findNode(Node findNode, Node node) { - if (root == nil) { - return null; - } - if (findNode.key < node.key) { - if (node.left != nil) { - return findNode(findNode, node.left); - } - } else if (findNode.key > node.key) { - if (node.right != nil) { - return findNode(findNode, node.right); - } - } else if (findNode.key == node.key) { - return node; - } - return null; + private Node findNode(Node findNode, Node node) { + if (root == nil) { + return null; + } + if (findNode.key < node.key) { + if (node.left != nil) { + return findNode(findNode, node.left); + } + } else if (findNode.key > node.key) { + if (node.right != nil) { + return findNode(findNode, node.right); + } + } else if (findNode.key == node.key) { + return node; } + return null; + } - private void insert(Node node) { - Node temp = root; - if (root == nil) { - root = node; - node.color = B; - node.p = nil; - } else { - node.color = R; - while (true) { - if (node.key < temp.key) { - if (temp.left == nil) { - temp.left = node; - node.p = temp; - break; - } else { - temp = temp.left; - } - } else if (node.key >= temp.key) { - if (temp.right == nil) { - temp.right = node; - node.p = temp; - break; - } else { - temp = temp.right; - } - } - } - fixTree(node); + private void insert(Node node) { + Node temp = root; + if (root == nil) { + root = node; + node.color = B; + node.p = nil; + } else { + node.color = R; + while (true) { + if (node.key < temp.key) { + if (temp.left == nil) { + temp.left = node; + node.p = temp; + break; + } else { + temp = temp.left; + } + } else if (node.key >= temp.key) { + if (temp.right == nil) { + temp.right = node; + node.p = temp; + break; + } else { + temp = temp.right; + } } + } + fixTree(node); } + } - private void fixTree(Node node) { - while (node.p.color == R) { - Node y = nil; - if (node.p == node.p.p.left) { - y = node.p.p.right; + private void fixTree(Node node) { + while (node.p.color == R) { + Node y = nil; + if (node.p == node.p.p.left) { + y = node.p.p.right; - if (y != nil && y.color == R) { - node.p.color = B; - y.color = B; - node.p.p.color = R; - node = node.p.p; - continue; - } - if (node == node.p.right) { - node = node.p; - rotateLeft(node); - } - node.p.color = B; - node.p.p.color = R; - rotateRight(node.p.p); - } else { - y = node.p.p.left; - if (y != nil && y.color == R) { - node.p.color = B; - y.color = B; - node.p.p.color = R; - node = node.p.p; - continue; - } - if (node == node.p.left) { - node = node.p; - rotateRight(node); - } - node.p.color = B; - node.p.p.color = R; - rotateLeft(node.p.p); - } + if (y != nil && y.color == R) { + node.p.color = B; + y.color = B; + node.p.p.color = R; + node = node.p.p; + continue; } - root.color = B; + if (node == node.p.right) { + node = node.p; + rotateLeft(node); + } + node.p.color = B; + node.p.p.color = R; + rotateRight(node.p.p); + } else { + y = node.p.p.left; + if (y != nil && y.color == R) { + node.p.color = B; + y.color = B; + node.p.p.color = R; + node = node.p.p; + continue; + } + if (node == node.p.left) { + node = node.p; + rotateRight(node); + } + node.p.color = B; + node.p.p.color = R; + rotateLeft(node.p.p); + } } + root.color = B; + } - void rotateLeft(Node node) { - if (node.p != nil) { - if (node == node.p.left) { - node.p.left = node.right; - } else { - node.p.right = node.right; - } - node.right.p = node.p; - node.p = node.right; - if (node.right.left != nil) { - node.right.left.p = node; - } - node.right = node.right.left; - node.p.left = node; - } else { - Node right = root.right; - root.right = right.left; - right.left.p = root; - root.p = right; - right.left = root; - right.p = nil; - root = right; - } + void rotateLeft(Node node) { + if (node.p != nil) { + if (node == node.p.left) { + node.p.left = node.right; + } else { + node.p.right = node.right; + } + node.right.p = node.p; + node.p = node.right; + if (node.right.left != nil) { + node.right.left.p = node; + } + node.right = node.right.left; + node.p.left = node; + } else { + Node right = root.right; + root.right = right.left; + right.left.p = root; + root.p = right; + right.left = root; + right.p = nil; + root = right; } + } - void rotateRight(Node node) { - if (node.p != nil) { - if (node == node.p.left) { - node.p.left = node.left; - } else { - node.p.right = node.left; - } + void rotateRight(Node node) { + if (node.p != nil) { + if (node == node.p.left) { + node.p.left = node.left; + } else { + node.p.right = node.left; + } - node.left.p = node.p; - node.p = node.left; - if (node.left.right != nil) { - node.left.right.p = node; - } - node.left = node.left.right; - node.p.right = node; - } else { - Node left = root.left; - root.left = root.left.right; - left.right.p = root; - root.p = left; - left.right = root; - left.p = nil; - root = left; - } + node.left.p = node.p; + node.p = node.left; + if (node.left.right != nil) { + node.left.right.p = node; + } + node.left = node.left.right; + node.p.right = node; + } else { + Node left = root.left; + root.left = root.left.right; + left.right.p = root; + root.p = left; + left.right = root; + left.p = nil; + root = left; } + } - void transplant(Node target, Node with) { - if (target.p == nil) { - root = with; - } else if (target == target.p.left) { - target.p.left = with; - } else - target.p.right = with; - with.p = target.p; - } + void transplant(Node target, Node with) { + if (target.p == nil) { + root = with; + } else if (target == target.p.left) { + target.p.left = with; + } else target.p.right = with; + with.p = target.p; + } - Node treeMinimum(Node subTreeRoot) { - while (subTreeRoot.left != nil) { - subTreeRoot = subTreeRoot.left; - } - return subTreeRoot; + Node treeMinimum(Node subTreeRoot) { + while (subTreeRoot.left != nil) { + subTreeRoot = subTreeRoot.left; } + return subTreeRoot; + } - boolean delete(Node z) { - if ((z = findNode(z, root)) == null) - return false; - Node x; - Node y = z; - int yorigcolor = y.color; + boolean delete(Node z) { + if ((z = findNode(z, root)) == null) return false; + Node x; + Node y = z; + int yorigcolor = y.color; - if (z.left == nil) { - x = z.right; - transplant(z, z.right); - } else if (z.right == nil) { - x = z.left; - transplant(z, z.left); - } else { - y = treeMinimum(z.right); - yorigcolor = y.color; - x = y.right; - if (y.p == z) - x.p = y; - else { - transplant(y, y.right); - y.right = z.right; - y.right.p = y; - } - transplant(z, y); - y.left = z.left; - y.left.p = y; - y.color = z.color; - } - if (yorigcolor == B) - deleteFixup(x); - return true; + if (z.left == nil) { + x = z.right; + transplant(z, z.right); + } else if (z.right == nil) { + x = z.left; + transplant(z, z.left); + } else { + y = treeMinimum(z.right); + yorigcolor = y.color; + x = y.right; + if (y.p == z) x.p = y; + else { + transplant(y, y.right); + y.right = z.right; + y.right.p = y; + } + transplant(z, y); + y.left = z.left; + y.left.p = y; + y.color = z.color; } + if (yorigcolor == B) deleteFixup(x); + return true; + } - void deleteFixup(Node x) { - while (x != root && x.color == B) { - if (x == x.p.left) { - Node w = x.p.right; - if (w.color == R) { - w.color = B; - x.p.color = R; - rotateLeft(x.p); - w = x.p.right; - } - if (w.left.color == B && w.right.color == B) { - w.color = R; - x = x.p; - continue; - } else if (w.right.color == B) { - w.left.color = B; - w.color = R; - rotateRight(w); - w = x.p.right; - } - if (w.right.color == R) { - w.color = x.p.color; - x.p.color = B; - w.right.color = B; - rotateLeft(x.p); - x = root; - } - } else { - Node w = x.p.left; - if (w.color == R) { - w.color = B; - x.p.color = R; - rotateRight(x.p); - w = x.p.left; - } - if (w.right.color == B && w.left.color == B) { - w.color = R; - x = x.p; - continue; - } else if (w.left.color == B) { - w.right.color = B; - w.color = R; - rotateLeft(w); - w = x.p.left; - } - if (w.left.color == R) { - w.color = x.p.color; - x.p.color = B; - w.left.color = B; - rotateRight(x.p); - x = root; - } - } + void deleteFixup(Node x) { + while (x != root && x.color == B) { + if (x == x.p.left) { + Node w = x.p.right; + if (w.color == R) { + w.color = B; + x.p.color = R; + rotateLeft(x.p); + w = x.p.right; + } + if (w.left.color == B && w.right.color == B) { + w.color = R; + x = x.p; + continue; + } else if (w.right.color == B) { + w.left.color = B; + w.color = R; + rotateRight(w); + w = x.p.right; + } + if (w.right.color == R) { + w.color = x.p.color; + x.p.color = B; + w.right.color = B; + rotateLeft(x.p); + x = root; + } + } else { + Node w = x.p.left; + if (w.color == R) { + w.color = B; + x.p.color = R; + rotateRight(x.p); + w = x.p.left; } - x.color = B; + if (w.right.color == B && w.left.color == B) { + w.color = R; + x = x.p; + continue; + } else if (w.left.color == B) { + w.right.color = B; + w.color = R; + rotateLeft(w); + w = x.p.left; + } + if (w.left.color == R) { + w.color = x.p.color; + x.p.color = B; + w.left.color = B; + rotateRight(x.p); + x = root; + } + } } + x.color = B; + } - public void insertDemo() { - Scanner scan = new Scanner(System.in); - while (true) { - System.out.println("Add items"); + public void insertDemo() { + Scanner scan = new Scanner(System.in); + while (true) { + System.out.println("Add items"); - int item; - Node node; + int item; + Node node; - item = scan.nextInt(); - while (item != -999) { - node = new Node(item); - insert(node); - item = scan.nextInt(); - } - printTree(root); - System.out.println("Pre order"); - printTreepre(root); - break; - } - scan.close(); - } - - public void deleteDemo() { - Scanner scan = new Scanner(System.in); - System.out.println("Delete items"); - int item; - Node node; - item = scan.nextInt(); + item = scan.nextInt(); + while (item != -999) { node = new Node(item); - System.out.print("Deleting item " + item); - if (delete(node)) { - System.out.print(": deleted!"); - } else { - System.out.print(": does not exist!"); - } + insert(node); + item = scan.nextInt(); + } + printTree(root); + System.out.println("Pre order"); + printTreepre(root); + break; + } + scan.close(); + } - System.out.println(); - printTree(root); - System.out.println("Pre order"); - printTreepre(root); - scan.close(); + public void deleteDemo() { + Scanner scan = new Scanner(System.in); + System.out.println("Delete items"); + int item; + Node node; + item = scan.nextInt(); + node = new Node(item); + System.out.print("Deleting item " + item); + if (delete(node)) { + System.out.print(": deleted!"); + } else { + System.out.print(": does not exist!"); } -} \ No newline at end of file + + System.out.println(); + printTree(root); + System.out.println("Pre order"); + printTreepre(root); + scan.close(); + } +} diff --git a/DataStructures/Trees/TreeTraversal.java b/DataStructures/Trees/TreeTraversal.java index 1c5f8a43715b..e9cca1ccdd6b 100644 --- a/DataStructures/Trees/TreeTraversal.java +++ b/DataStructures/Trees/TreeTraversal.java @@ -2,120 +2,112 @@ import java.util.LinkedList; -/** - * @author Varun Upadhyay (https://github.com/varunu28) - */ - +/** @author Varun Upadhyay (https://github.com/varunu28) */ // Driver Program public class TreeTraversal { - public static void main(String[] args) { - Node tree = new Node(5); - tree.insert(3); - tree.insert(2); - tree.insert(7); - tree.insert(4); - tree.insert(6); - tree.insert(8); + public static void main(String[] args) { + Node tree = new Node(5); + tree.insert(3); + tree.insert(2); + tree.insert(7); + tree.insert(4); + tree.insert(6); + tree.insert(8); - // Prints 5 3 2 4 7 6 8 - System.out.println("Pre order traversal:"); - tree.printPreOrder(); - System.out.println(); - // Prints 2 3 4 5 6 7 8 - System.out.println("In order traversal:"); - tree.printInOrder(); - System.out.println(); - // Prints 2 4 3 6 8 7 5 - System.out.println("Post order traversal:"); - tree.printPostOrder(); - System.out.println(); - // Prints 5 3 7 2 4 6 8 - System.out.println("Level order traversal:"); - tree.printLevelOrder(); - System.out.println(); - } + // Prints 5 3 2 4 7 6 8 + System.out.println("Pre order traversal:"); + tree.printPreOrder(); + System.out.println(); + // Prints 2 3 4 5 6 7 8 + System.out.println("In order traversal:"); + tree.printInOrder(); + System.out.println(); + // Prints 2 4 3 6 8 7 5 + System.out.println("Post order traversal:"); + tree.printPostOrder(); + System.out.println(); + // Prints 5 3 7 2 4 6 8 + System.out.println("Level order traversal:"); + tree.printLevelOrder(); + System.out.println(); + } } /** - * The Node class which initializes a Node of a tree - * Consists of all 4 traversal methods: printInOrder, printPostOrder, printPreOrder & printLevelOrder - * printInOrder: LEFT -> ROOT -> RIGHT - * printPreOrder: ROOT -> LEFT -> RIGHT - * printPostOrder: LEFT -> RIGHT -> ROOT - * printLevelOrder: Prints by level (starting at root), from left to right. + * The Node class which initializes a Node of a tree Consists of all 4 traversal methods: + * printInOrder, printPostOrder, printPreOrder & printLevelOrder printInOrder: LEFT -> ROOT -> RIGHT + * printPreOrder: ROOT -> LEFT -> RIGHT printPostOrder: LEFT -> RIGHT -> ROOT printLevelOrder: + * Prints by level (starting at root), from left to right. */ class Node { - Node left, right; - int data; + Node left, right; + int data; - public Node(int data) { - this.data = data; - } + public Node(int data) { + this.data = data; + } - public void insert(int value) { - if (value < data) { - if (left == null) { - left = new Node(value); - } else { - left.insert(value); - } - } else { - if (right == null) { - right = new Node(value); - } else { - right.insert(value); - } - } + public void insert(int value) { + if (value < data) { + if (left == null) { + left = new Node(value); + } else { + left.insert(value); + } + } else { + if (right == null) { + right = new Node(value); + } else { + right.insert(value); + } } + } - public void printInOrder() { - if (left != null) { - left.printInOrder(); - } - System.out.print(data + " "); - if (right != null) { - right.printInOrder(); - } + public void printInOrder() { + if (left != null) { + left.printInOrder(); + } + System.out.print(data + " "); + if (right != null) { + right.printInOrder(); } + } - public void printPreOrder() { - System.out.print(data + " "); - if (left != null) { - left.printPreOrder(); - } - if (right != null) { - right.printPreOrder(); - } + public void printPreOrder() { + System.out.print(data + " "); + if (left != null) { + left.printPreOrder(); } + if (right != null) { + right.printPreOrder(); + } + } - public void printPostOrder() { - if (left != null) { - left.printPostOrder(); - } - if (right != null) { - right.printPostOrder(); - } - System.out.print(data + " "); + public void printPostOrder() { + if (left != null) { + left.printPostOrder(); + } + if (right != null) { + right.printPostOrder(); } + System.out.print(data + " "); + } - /** - * O(n) time algorithm. - * Uses O(n) space to store nodes in a queue to aid in traversal. - */ - public void printLevelOrder() { - LinkedList queue = new LinkedList<>(); - queue.add(this); - while (queue.size() > 0) { - Node head = queue.remove(); - System.out.print(head.data + " "); - // Add children of recently-printed node to queue, if they exist. - if (head.left != null) { - queue.add(head.left); - } - if (head.right != null) { - queue.add(head.right); - } - } + /** O(n) time algorithm. Uses O(n) space to store nodes in a queue to aid in traversal. */ + public void printLevelOrder() { + LinkedList queue = new LinkedList<>(); + queue.add(this); + while (queue.size() > 0) { + Node head = queue.remove(); + System.out.print(head.data + " "); + // Add children of recently-printed node to queue, if they exist. + if (head.left != null) { + queue.add(head.left); + } + if (head.right != null) { + queue.add(head.right); + } } + } } diff --git a/DataStructures/Trees/TrieImp.java b/DataStructures/Trees/TrieImp.java index 24450f16c2cb..3c3ddc5d35ee 100644 --- a/DataStructures/Trees/TrieImp.java +++ b/DataStructures/Trees/TrieImp.java @@ -5,137 +5,125 @@ * * @author Dheeraj Kumar Barnwal (https://github.com/dheeraj92) */ - import java.util.Scanner; public class TrieImp { - public class TrieNode { - TrieNode[] child; - boolean end; + public class TrieNode { + TrieNode[] child; + boolean end; - public TrieNode() { - child = new TrieNode[26]; - end = false; - } + public TrieNode() { + child = new TrieNode[26]; + end = false; } + } - private final TrieNode root; + private final TrieNode root; - public TrieImp() { - root = new TrieNode(); - } + public TrieImp() { + root = new TrieNode(); + } - public void insert(String word) { - TrieNode currentNode = root; - for (int i = 0; i < word.length(); i++) { - TrieNode node = currentNode.child[word.charAt(i) - 'a']; - if (node == null) { - node = new TrieNode(); - currentNode.child[word.charAt(i) - 'a'] = node; - } - currentNode = node; - } - currentNode.end = true; + public void insert(String word) { + TrieNode currentNode = root; + for (int i = 0; i < word.length(); i++) { + TrieNode node = currentNode.child[word.charAt(i) - 'a']; + if (node == null) { + node = new TrieNode(); + currentNode.child[word.charAt(i) - 'a'] = node; + } + currentNode = node; } + currentNode.end = true; + } - public boolean search(String word) { - TrieNode currentNode = root; - for (int i = 0; i < word.length(); i++) { - char ch = word.charAt(i); - TrieNode node = currentNode.child[ch - 'a']; - if (node == null) { - return false; - } - currentNode = node; - } - return currentNode.end; + public boolean search(String word) { + TrieNode currentNode = root; + for (int i = 0; i < word.length(); i++) { + char ch = word.charAt(i); + TrieNode node = currentNode.child[ch - 'a']; + if (node == null) { + return false; + } + currentNode = node; } + return currentNode.end; + } - public boolean delete(String word) { - TrieNode currentNode = root; - for (int i = 0; i < word.length(); i++) { - char ch = word.charAt(i); - TrieNode node = currentNode.child[ch - 'a']; - if (node == null) { - return false; - } - currentNode = node; - } - if (currentNode.end == true) { - currentNode.end = false; - return true; - } + public boolean delete(String word) { + TrieNode currentNode = root; + for (int i = 0; i < word.length(); i++) { + char ch = word.charAt(i); + TrieNode node = currentNode.child[ch - 'a']; + if (node == null) { return false; + } + currentNode = node; } - - public static void sop(String print) { - System.out.println(print); + if (currentNode.end == true) { + currentNode.end = false; + return true; } + return false; + } - /** - * Regex to check if word contains only a-z character - */ - public static boolean isValid(String word) { - return word.matches("^[a-z]+$"); - } + public static void sop(String print) { + System.out.println(print); + } + + /** Regex to check if word contains only a-z character */ + public static boolean isValid(String word) { + return word.matches("^[a-z]+$"); + } - public static void main(String[] args) { - TrieImp obj = new TrieImp(); - String word; - @SuppressWarnings("resource") - Scanner scan = new Scanner(System.in); - sop("string should contain only a-z character for all operation"); - while (true) { - sop("1. Insert\n2. Search\n3. Delete\n4. Quit"); - try { - int t = scan.nextInt(); - switch (t) { - case 1: - word = scan.next(); - if (isValid(word)) - obj.insert(word); - else - sop("Invalid string: allowed only a-z"); - break; - case 2: - word = scan.next(); - boolean resS = false; - if (isValid(word)) - resS = obj.search(word); - else - sop("Invalid string: allowed only a-z"); - if (resS) - sop("word found"); - else - sop("word not found"); - break; - case 3: - word = scan.next(); - boolean resD = false; - if (isValid(word)) - resD = obj.delete(word); - else - sop("Invalid string: allowed only a-z"); - if (resD) { - sop("word got deleted successfully"); - } else { - sop("word not found"); - } - break; - case 4: - sop("Quit successfully"); - System.exit(1); - break; - default: - sop("Input int from 1-4"); - break; - } - } catch (Exception e) { - String badInput = scan.next(); - sop("This is bad input: " + badInput); + public static void main(String[] args) { + TrieImp obj = new TrieImp(); + String word; + @SuppressWarnings("resource") + Scanner scan = new Scanner(System.in); + sop("string should contain only a-z character for all operation"); + while (true) { + sop("1. Insert\n2. Search\n3. Delete\n4. Quit"); + try { + int t = scan.nextInt(); + switch (t) { + case 1: + word = scan.next(); + if (isValid(word)) obj.insert(word); + else sop("Invalid string: allowed only a-z"); + break; + case 2: + word = scan.next(); + boolean resS = false; + if (isValid(word)) resS = obj.search(word); + else sop("Invalid string: allowed only a-z"); + if (resS) sop("word found"); + else sop("word not found"); + break; + case 3: + word = scan.next(); + boolean resD = false; + if (isValid(word)) resD = obj.delete(word); + else sop("Invalid string: allowed only a-z"); + if (resD) { + sop("word got deleted successfully"); + } else { + sop("word not found"); } + break; + case 4: + sop("Quit successfully"); + System.exit(1); + break; + default: + sop("Input int from 1-4"); + break; } + } catch (Exception e) { + String badInput = scan.next(); + sop("This is bad input: " + badInput); + } } - + } } diff --git a/DataStructures/Trees/ValidBSTOrNot.java b/DataStructures/Trees/ValidBSTOrNot.java index ba50c079eac4..3b3d626286c9 100644 --- a/DataStructures/Trees/ValidBSTOrNot.java +++ b/DataStructures/Trees/ValidBSTOrNot.java @@ -2,43 +2,39 @@ public class ValidBSTOrNot { - class Node { - int data; - Node left, right; - - public Node(int item) { - data = item; - left = right = null; - } + class Node { + int data; + Node left, right; + + public Node(int item) { + data = item; + left = right = null; } + } - //Root of the Binary Tree - - /* can give min and max value according to your code or - can write a function to find min and max value of tree. */ + // Root of the Binary Tree - /* returns true if given search tree is binary - search tree (efficient version) */ - boolean isBST(Node root) { - return isBSTUtil(root, Integer.MIN_VALUE, - Integer.MAX_VALUE); - } + /* can give min and max value according to your code or + can write a function to find min and max value of tree. */ - /* Returns true if the given tree is a BST and its - values are >= min and <= max. */ - boolean isBSTUtil(Node node, int min, int max) { - /* an empty tree is BST */ - if (node == null) - return true; - - /* false if this node violates the min/max constraints */ - if (node.data < min || node.data > max) - return false; - - /* otherwise check the subtrees recursively - tightening the min/max constraints */ - // Allow only distinct values - return (isBSTUtil(node.left, min, node.data - 1) && - isBSTUtil(node.right, node.data + 1, max)); - } -} \ No newline at end of file + /* returns true if given search tree is binary + search tree (efficient version) */ + boolean isBST(Node root) { + return isBSTUtil(root, Integer.MIN_VALUE, Integer.MAX_VALUE); + } + + /* Returns true if the given tree is a BST and its + values are >= min and <= max. */ + boolean isBSTUtil(Node node, int min, int max) { + /* an empty tree is BST */ + if (node == null) return true; + + /* false if this node violates the min/max constraints */ + if (node.data < min || node.data > max) return false; + + /* otherwise check the subtrees recursively + tightening the min/max constraints */ + // Allow only distinct values + return (isBSTUtil(node.left, min, node.data - 1) && isBSTUtil(node.right, node.data + 1, max)); + } +} diff --git a/DynamicProgramming/BoardPath.java b/DynamicProgramming/BoardPath.java index 5ca14d1fab9b..89f5c805b577 100644 --- a/DynamicProgramming/BoardPath.java +++ b/DynamicProgramming/BoardPath.java @@ -1,8 +1,8 @@ package DynamicProgramming; /* -* this is an important Algo in which -* we have starting and ending of board and we have to reach -* we have to count no. of ways +* this is an important Algo in which +* we have starting and ending of board and we have to reach +* we have to count no. of ways * that help to reach end point i.e number by rolling dice * which have 1 to 6 digits @@ -20,58 +20,56 @@ startAlgo(); System.out.println(bpIS(0,n,strg)); System.out.println(endAlgo()+"ms"); - + */ public class BoardPath { - public static long startTime; - public static long endTime; - public static void startAlgo() { - startTime=System.currentTimeMillis(); - } - public static long endAlgo() { - endTime=System.currentTimeMillis(); - return endTime-startTime; - } - public static int bpR(int start,int end){ - if(start==end) { - return 1; - } - else if(start>end) - return 0; - int count=0; - for(int dice=1;dice<=6;dice++) { - count+=bpR(start+dice,end); - } - return count; - } - public static int bpRS(int curr,int end,int strg[]){ - if(curr==end) { - return 1; - } - else if(curr>end) - return 0; - if(strg[curr]!=0) - return strg[curr]; - int count=0; - for(int dice=1;dice<=6;dice++) { - count+=bpRS(curr+dice,end,strg); - } - strg[curr]=count; - return count; - } - public static int bpIS(int curr,int end,int[]strg){ - strg[end]=1; - for(int i=end-1;i>=0;i--) { - int count=0; - for(int dice=1;dice<=6&&dice+i end) return 0; + int count = 0; + for (int dice = 1; dice <= 6; dice++) { + count += bpR(start + dice, end); + } + return count; + } + public static int bpRS(int curr, int end, int strg[]) { + if (curr == end) { + return 1; + } else if (curr > end) return 0; + if (strg[curr] != 0) return strg[curr]; + int count = 0; + for (int dice = 1; dice <= 6; dice++) { + count += bpRS(curr + dice, end, strg); + } + strg[curr] = count; + return count; + } + public static int bpIS(int curr, int end, int[] strg) { + strg[end] = 1; + for (int i = end - 1; i >= 0; i--) { + int count = 0; + for (int dice = 1; dice <= 6 && dice + i < strg.length; dice++) { + count += strg[i + dice]; + } + strg[i] = count; + } + return strg[0]; + } } diff --git a/DynamicProgramming/CoinChange.java b/DynamicProgramming/CoinChange.java index 7e4e6181ccc9..f6d4f8f574c2 100644 --- a/DynamicProgramming/CoinChange.java +++ b/DynamicProgramming/CoinChange.java @@ -1,79 +1,82 @@ package DynamicProgramming; -/** - * @author Varun Upadhyay (https://github.com/varunu28) - */ +/** @author Varun Upadhyay (https://github.com/varunu28) */ public class CoinChange { - // Driver Program - public static void main(String[] args) { + // Driver Program + public static void main(String[] args) { - int amount = 12; - int[] coins = {2, 4, 5}; + int amount = 12; + int[] coins = {2, 4, 5}; - System.out.println("Number of combinations of getting change for " + amount + " is: " + change(coins, amount)); - System.out.println("Minimum number of coins required for amount :" + amount + " is: " + minimumCoins(coins, amount)); + System.out.println( + "Number of combinations of getting change for " + amount + " is: " + change(coins, amount)); + System.out.println( + "Minimum number of coins required for amount :" + + amount + + " is: " + + minimumCoins(coins, amount)); + } - } - - /** - * This method finds the number of combinations of getting change for a given amount and change coins - * - * @param coins The list of coins - * @param amount The amount for which we need to find the change - * Finds the number of combinations of change - **/ - public static int change(int[] coins, int amount) { + /** + * This method finds the number of combinations of getting change for a given amount and change + * coins + * + * @param coins The list of coins + * @param amount The amount for which we need to find the change Finds the number of combinations + * of change + */ + public static int change(int[] coins, int amount) { - int[] combinations = new int[amount + 1]; - combinations[0] = 1; - - for (int coin : coins) { - for (int i = coin; i < amount + 1; i++) { - combinations[i] += combinations[i - coin]; - } - // Uncomment the below line to see the state of combinations for each coin - // printAmount(combinations); - } + int[] combinations = new int[amount + 1]; + combinations[0] = 1; - return combinations[amount]; + for (int coin : coins) { + for (int i = coin; i < amount + 1; i++) { + combinations[i] += combinations[i - coin]; + } + // Uncomment the below line to see the state of combinations for each coin + // printAmount(combinations); } - /** - * This method finds the minimum number of coins needed for a given amount. - * - * @param coins The list of coins - * @param amount The amount for which we need to find the minimum number of coins. - * Finds the the minimum number of coins that make a given value. - **/ - public static int minimumCoins(int[] coins, int amount) { - //minimumCoins[i] will store the minimum coins needed for amount i - int[] minimumCoins = new int[amount + 1]; + return combinations[amount]; + } - minimumCoins[0] = 0; + /** + * This method finds the minimum number of coins needed for a given amount. + * + * @param coins The list of coins + * @param amount The amount for which we need to find the minimum number of coins. Finds the the + * minimum number of coins that make a given value. + */ + public static int minimumCoins(int[] coins, int amount) { + // minimumCoins[i] will store the minimum coins needed for amount i + int[] minimumCoins = new int[amount + 1]; - for (int i = 1; i <= amount; i++) { - minimumCoins[i] = Integer.MAX_VALUE; - } - for (int i = 1; i <= amount; i++) { - for (int coin : coins) { - if (coin <= i) { - int sub_res = minimumCoins[i - coin]; - if (sub_res != Integer.MAX_VALUE && sub_res + 1 < minimumCoins[i]) - minimumCoins[i] = sub_res + 1; - } - } + minimumCoins[0] = 0; + + for (int i = 1; i <= amount; i++) { + minimumCoins[i] = Integer.MAX_VALUE; + } + for (int i = 1; i <= amount; i++) { + for (int coin : coins) { + if (coin <= i) { + int sub_res = minimumCoins[i - coin]; + if (sub_res != Integer.MAX_VALUE && sub_res + 1 < minimumCoins[i]) + minimumCoins[i] = sub_res + 1; } - // Uncomment the below line to see the state of combinations for each coin - //printAmount(minimumCoins); - return minimumCoins[amount]; + } } + // Uncomment the below line to see the state of combinations for each coin + // printAmount(minimumCoins); + return minimumCoins[amount]; + } - // A basic print method which prints all the contents of the array - public static void printAmount(int[] arr) { - for (int i = 0; i < arr.length; i++) { - System.out.print(arr[i] + " "); - } - System.out.println(); + // A basic print method which prints all the contents of the array + public static void printAmount(int[] arr) { + for (int i = 0; i < arr.length; i++) { + System.out.print(arr[i] + " "); } -} \ No newline at end of file + System.out.println(); + } +} diff --git a/DynamicProgramming/EditDistance.java b/DynamicProgramming/EditDistance.java index 20cb8803a754..7a70db326250 100644 --- a/DynamicProgramming/EditDistance.java +++ b/DynamicProgramming/EditDistance.java @@ -1,79 +1,80 @@ package DynamicProgramming; /** - * A DynamicProgramming based solution for Edit Distance problem In Java - * Description of Edit Distance with an Example: - *

- * Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one another, - * by counting the minimum number of operations required to transform one string into the other. The - * distance operations are the removal, insertion, or substitution of a character in the string. - *

- *

- * The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the former into the latter is: + * A DynamicProgramming based solution for Edit Distance problem In Java Description of Edit + * Distance with an Example: + * + *

Edit distance is a way of quantifying how dissimilar two strings (e.g., words) are to one + * another, by counting the minimum number of operations required to transform one string into the + * other. The distance operations are the removal, insertion, or substitution of a character in the + * string. + * *

- * kitten → sitten (substitution of "s" for "k") - * sitten → sittin (substitution of "i" for "e") + * + *

The Distance between "kitten" and "sitting" is 3. A minimal edit script that transforms the + * former into the latter is: + * + *

kitten → sitten (substitution of "s" for "k") sitten → sittin (substitution of "i" for "e") * sittin → sitting (insertion of "g" at the end). * * @author SUBHAM SANGHAI - **/ - + */ import java.util.Scanner; public class EditDistance { - public static int minDistance(String word1, String word2) { - int len1 = word1.length(); - int len2 = word2.length(); - // len1+1, len2+1, because finally return dp[len1][len2] - int[][] dp = new int[len1 + 1][len2 + 1]; - /* If second string is empty, the only option is to - insert all characters of first string into second*/ - for (int i = 0; i <= len1; i++) { - dp[i][0] = i; - } - /* If first string is empty, the only option is to - insert all characters of second string into first*/ - for (int j = 0; j <= len2; j++) { - dp[0][j] = j; - } - //iterate though, and check last char - for (int i = 0; i < len1; i++) { - char c1 = word1.charAt(i); - for (int j = 0; j < len2; j++) { - char c2 = word2.charAt(j); - //if last two chars equal - if (c1 == c2) { - //update dp value for +1 length - dp[i + 1][j + 1] = dp[i][j]; - } else { - /* if two characters are different , - then take the minimum of the various operations(i.e insertion,removal,substitution)*/ - int replace = dp[i][j] + 1; - int insert = dp[i][j + 1] + 1; - int delete = dp[i + 1][j] + 1; + public static int minDistance(String word1, String word2) { + int len1 = word1.length(); + int len2 = word2.length(); + // len1+1, len2+1, because finally return dp[len1][len2] + int[][] dp = new int[len1 + 1][len2 + 1]; + /* If second string is empty, the only option is to + insert all characters of first string into second*/ + for (int i = 0; i <= len1; i++) { + dp[i][0] = i; + } + /* If first string is empty, the only option is to + insert all characters of second string into first*/ + for (int j = 0; j <= len2; j++) { + dp[0][j] = j; + } + // iterate though, and check last char + for (int i = 0; i < len1; i++) { + char c1 = word1.charAt(i); + for (int j = 0; j < len2; j++) { + char c2 = word2.charAt(j); + // if last two chars equal + if (c1 == c2) { + // update dp value for +1 length + dp[i + 1][j + 1] = dp[i][j]; + } else { + /* if two characters are different , + then take the minimum of the various operations(i.e insertion,removal,substitution)*/ + int replace = dp[i][j] + 1; + int insert = dp[i][j + 1] + 1; + int delete = dp[i + 1][j] + 1; - int min = replace > insert ? insert : replace; - min = delete > min ? min : delete; - dp[i + 1][j + 1] = min; - } - } + int min = replace > insert ? insert : replace; + min = delete > min ? min : delete; + dp[i + 1][j + 1] = min; } - /* return the final answer , after traversing through both the strings*/ - return dp[len1][len2]; + } } + /* return the final answer , after traversing through both the strings*/ + return dp[len1][len2]; + } - - public static void main(String[] args) { - Scanner input = new Scanner(System.in); - String s1, s2; - System.out.println("Enter the First String"); - s1 = input.nextLine(); - System.out.println("Enter the Second String"); - s2 = input.nextLine(); - //ans stores the final Edit Distance between the two strings - int ans = minDistance(s1, s2); - System.out.println("The minimum Edit Distance between \"" + s1 + "\" and \"" + s2 + "\" is " + ans); - input.close(); - } + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + String s1, s2; + System.out.println("Enter the First String"); + s1 = input.nextLine(); + System.out.println("Enter the Second String"); + s2 = input.nextLine(); + // ans stores the final Edit Distance between the two strings + int ans = minDistance(s1, s2); + System.out.println( + "The minimum Edit Distance between \"" + s1 + "\" and \"" + s2 + "\" is " + ans); + input.close(); + } } diff --git a/DynamicProgramming/EggDropping.java b/DynamicProgramming/EggDropping.java index f53712bd9304..cd2bf82a49cf 100644 --- a/DynamicProgramming/EggDropping.java +++ b/DynamicProgramming/EggDropping.java @@ -1,49 +1,45 @@ package DynamicProgramming; -/** - * DynamicProgramming solution for the Egg Dropping Puzzle - */ +/** DynamicProgramming solution for the Egg Dropping Puzzle */ public class EggDropping { - // min trials with n eggs and m floors + // min trials with n eggs and m floors - private static int minTrials(int n, int m) { + private static int minTrials(int n, int m) { - int[][] eggFloor = new int[n + 1][m + 1]; - int result, x; + int[][] eggFloor = new int[n + 1][m + 1]; + int result, x; - for (int i = 1; i <= n; i++) { - eggFloor[i][0] = 0; // Zero trial for zero floor. - eggFloor[i][1] = 1; // One trial for one floor - } + for (int i = 1; i <= n; i++) { + eggFloor[i][0] = 0; // Zero trial for zero floor. + eggFloor[i][1] = 1; // One trial for one floor + } - // j trials for only 1 egg + // j trials for only 1 egg - for (int j = 1; j <= m; j++) - eggFloor[1][j] = j; + for (int j = 1; j <= m; j++) eggFloor[1][j] = j; - // Using bottom-up approach in DP + // Using bottom-up approach in DP - for (int i = 2; i <= n; i++) { - for (int j = 2; j <= m; j++) { - eggFloor[i][j] = Integer.MAX_VALUE; - for (x = 1; x <= j; x++) { - result = 1 + Math.max(eggFloor[i - 1][x - 1], eggFloor[i][j - x]); + for (int i = 2; i <= n; i++) { + for (int j = 2; j <= m; j++) { + eggFloor[i][j] = Integer.MAX_VALUE; + for (x = 1; x <= j; x++) { + result = 1 + Math.max(eggFloor[i - 1][x - 1], eggFloor[i][j - x]); - // choose min of all values for particular x - if (result < eggFloor[i][j]) - eggFloor[i][j] = result; - } - } + // choose min of all values for particular x + if (result < eggFloor[i][j]) eggFloor[i][j] = result; } - - return eggFloor[n][m]; + } } - public static void main(String args[]) { - int n = 2, m = 4; - // result outputs min no. of trials in worst case for n eggs and m floors - int result = minTrials(n, m); - System.out.println(result); - } + return eggFloor[n][m]; + } + + public static void main(String args[]) { + int n = 2, m = 4; + // result outputs min no. of trials in worst case for n eggs and m floors + int result = minTrials(n, m); + System.out.println(result); + } } diff --git a/DynamicProgramming/Fibonacci.java b/DynamicProgramming/Fibonacci.java index 89be0836f6af..568cd4dd80a2 100644 --- a/DynamicProgramming/Fibonacci.java +++ b/DynamicProgramming/Fibonacci.java @@ -4,97 +4,88 @@ import java.util.Map; import java.util.Scanner; -/** - * @author Varun Upadhyay (https://github.com/varunu28) - */ - +/** @author Varun Upadhyay (https://github.com/varunu28) */ public class Fibonacci { - private static Map map = new HashMap<>(); - - - public static void main(String[] args) { - - // Methods all returning [0, 1, 1, 2, 3, 5, ...] for n = [0, 1, 2, 3, 4, 5, ...] - Scanner sc = new Scanner(System.in); - int n = sc.nextInt(); - - System.out.println(fibMemo(n)); - System.out.println(fibBotUp(n)); - System.out.println(fibOptimized(n)); - sc.close(); + private static Map map = new HashMap<>(); + + public static void main(String[] args) { + + // Methods all returning [0, 1, 1, 2, 3, 5, ...] for n = [0, 1, 2, 3, 4, 5, ...] + Scanner sc = new Scanner(System.in); + int n = sc.nextInt(); + + System.out.println(fibMemo(n)); + System.out.println(fibBotUp(n)); + System.out.println(fibOptimized(n)); + sc.close(); + } + + /** + * This method finds the nth fibonacci number using memoization technique + * + * @param n The input n for which we have to determine the fibonacci number Outputs the nth + * fibonacci number + */ + public static int fibMemo(int n) { + if (map.containsKey(n)) { + return map.get(n); } - /** - * This method finds the nth fibonacci number using memoization technique - * - * @param n The input n for which we have to determine the fibonacci number - * Outputs the nth fibonacci number - **/ - public static int fibMemo(int n) { - if (map.containsKey(n)) { - return map.get(n); - } - - int f; + int f; - if (n <= 1) { - f = n; - } else { - f = fibMemo(n - 1) + fibMemo(n - 2); - map.put(n, f); - } - return f; + if (n <= 1) { + f = n; + } else { + f = fibMemo(n - 1) + fibMemo(n - 2); + map.put(n, f); } - - /** - * This method finds the nth fibonacci number using bottom up - * - * @param n The input n for which we have to determine the fibonacci number - * Outputs the nth fibonacci number - **/ - public static int fibBotUp(int n) { - - Map fib = new HashMap<>(); - - for (int i = 0; i <= n; i++) { - int f; - if (i <= 1) { - f = i; - } else { - f = fib.get(i - 1) + fib.get(i - 2); - } - fib.put(i, f); - } - - return fib.get(n); + return f; + } + + /** + * This method finds the nth fibonacci number using bottom up + * + * @param n The input n for which we have to determine the fibonacci number Outputs the nth + * fibonacci number + */ + public static int fibBotUp(int n) { + + Map fib = new HashMap<>(); + + for (int i = 0; i <= n; i++) { + int f; + if (i <= 1) { + f = i; + } else { + f = fib.get(i - 1) + fib.get(i - 2); + } + fib.put(i, f); } - - /** - * This method finds the nth fibonacci number using bottom up - * - * @param n The input n for which we have to determine the fibonacci number - * Outputs the nth fibonacci number - *

- * This is optimized version of Fibonacci Program. Without using Hashmap and recursion. - * It saves both memory and time. - * Space Complexity will be O(1) - * Time Complexity will be O(n) - *

- * Whereas , the above functions will take O(n) Space. - * @author Shoaib Rayeen (https://github.com/shoaibrayeen) - **/ - public static int fibOptimized(int n) { - if (n == 0) { - return 0; - } - int prev = 0, res = 1, next; - for (int i = 2; i <= n; i++) { - next = prev + res; - prev = res; - res = next; - } - return res; + return fib.get(n); + } + + /** + * This method finds the nth fibonacci number using bottom up + * + * @param n The input n for which we have to determine the fibonacci number Outputs the nth + * fibonacci number + *

This is optimized version of Fibonacci Program. Without using Hashmap and recursion. It + * saves both memory and time. Space Complexity will be O(1) Time Complexity will be O(n) + *

Whereas , the above functions will take O(n) Space. + * @author Shoaib Rayeen (https://github.com/shoaibrayeen) + */ + public static int fibOptimized(int n) { + if (n == 0) { + return 0; + } + int prev = 0, res = 1, next; + for (int i = 2; i <= n; i++) { + next = prev + res; + prev = res; + res = next; } + return res; + } } diff --git a/DynamicProgramming/FordFulkerson.java b/DynamicProgramming/FordFulkerson.java index 7a162fbb06d1..419316d71ea5 100644 --- a/DynamicProgramming/FordFulkerson.java +++ b/DynamicProgramming/FordFulkerson.java @@ -5,68 +5,66 @@ import java.util.Vector; public class FordFulkerson { - final static int INF = 987654321; - // edges - static int V; - static int[][] capacity, flow; + static final int INF = 987654321; + // edges + static int V; + static int[][] capacity, flow; - public static void main(String[] args) { - System.out.println("V : 6"); - V = 6; - capacity = new int[V][V]; + public static void main(String[] args) { + System.out.println("V : 6"); + V = 6; + capacity = new int[V][V]; - capacity[0][1] = 12; - capacity[0][3] = 13; - capacity[1][2] = 10; - capacity[2][3] = 13; - capacity[2][4] = 3; - capacity[2][5] = 15; - capacity[3][2] = 7; - capacity[3][4] = 15; - capacity[4][5] = 17; + capacity[0][1] = 12; + capacity[0][3] = 13; + capacity[1][2] = 10; + capacity[2][3] = 13; + capacity[2][4] = 3; + capacity[2][5] = 15; + capacity[3][2] = 7; + capacity[3][4] = 15; + capacity[4][5] = 17; - System.out.println("Max capacity in networkFlow : " + networkFlow(0, 5)); - } - - private static int networkFlow(int source, int sink) { - flow = new int[V][V]; - int totalFlow = 0; - while (true) { - Vector parent = new Vector<>(V); - for (int i = 0; i < V; i++) - parent.add(-1); - Queue q = new LinkedList<>(); - parent.set(source, source); - q.add(source); - while (!q.isEmpty() && parent.get(sink) == -1) { - int here = q.peek(); - q.poll(); - for (int there = 0; there < V; ++there) - if (capacity[here][there] - flow[here][there] > 0 && parent.get(there) == -1) { - q.add(there); - parent.set(there, here); - } - } - if (parent.get(sink) == -1) - break; + System.out.println("Max capacity in networkFlow : " + networkFlow(0, 5)); + } - int amount = INF; - String printer = "path : "; - StringBuilder sb = new StringBuilder(); - for (int p = sink; p != source; p = parent.get(p)) { - amount = Math.min(capacity[parent.get(p)][p] - flow[parent.get(p)][p], amount); - sb.append(p + "-"); - } - sb.append(source); - for (int p = sink; p != source; p = parent.get(p)) { - flow[parent.get(p)][p] += amount; - flow[p][parent.get(p)] -= amount; - } - totalFlow += amount; - printer += sb.reverse() + " / max flow : " + totalFlow; - System.out.println(printer); - } + private static int networkFlow(int source, int sink) { + flow = new int[V][V]; + int totalFlow = 0; + while (true) { + Vector parent = new Vector<>(V); + for (int i = 0; i < V; i++) parent.add(-1); + Queue q = new LinkedList<>(); + parent.set(source, source); + q.add(source); + while (!q.isEmpty() && parent.get(sink) == -1) { + int here = q.peek(); + q.poll(); + for (int there = 0; there < V; ++there) + if (capacity[here][there] - flow[here][there] > 0 && parent.get(there) == -1) { + q.add(there); + parent.set(there, here); + } + } + if (parent.get(sink) == -1) break; - return totalFlow; + int amount = INF; + String printer = "path : "; + StringBuilder sb = new StringBuilder(); + for (int p = sink; p != source; p = parent.get(p)) { + amount = Math.min(capacity[parent.get(p)][p] - flow[parent.get(p)][p], amount); + sb.append(p + "-"); + } + sb.append(source); + for (int p = sink; p != source; p = parent.get(p)) { + flow[parent.get(p)][p] += amount; + flow[p][parent.get(p)] -= amount; + } + totalFlow += amount; + printer += sb.reverse() + " / max flow : " + totalFlow; + System.out.println(printer); } + + return totalFlow; + } } diff --git a/DynamicProgramming/KadaneAlgorithm.java b/DynamicProgramming/KadaneAlgorithm.java index 8d77c7a7c556..f33d941e8da1 100644 --- a/DynamicProgramming/KadaneAlgorithm.java +++ b/DynamicProgramming/KadaneAlgorithm.java @@ -3,53 +3,50 @@ import java.util.Scanner; /** - * Program to implement Kadane’s Algorithm to - * calculate maximum contiguous subarray sum of an array + * Program to implement Kadane’s Algorithm to calculate maximum contiguous subarray sum of an array * Time Complexity: O(n) * * @author Nishita Aggarwal */ - public class KadaneAlgorithm { - /** - * This method implements Kadane's Algorithm - * - * @param arr The input array - * @return The maximum contiguous subarray sum of the array - */ - static int largestContiguousSum(int arr[]) { - int i, len = arr.length, cursum = 0, maxsum = Integer.MIN_VALUE; - if (len == 0) //empty array - return 0; - for (i = 0; i < len; i++) { - cursum += arr[i]; - if (cursum > maxsum) { - maxsum = cursum; - } - if (cursum <= 0) { - cursum = 0; - } - } - return maxsum; + /** + * This method implements Kadane's Algorithm + * + * @param arr The input array + * @return The maximum contiguous subarray sum of the array + */ + static int largestContiguousSum(int arr[]) { + int i, len = arr.length, cursum = 0, maxsum = Integer.MIN_VALUE; + if (len == 0) // empty array + return 0; + for (i = 0; i < len; i++) { + cursum += arr[i]; + if (cursum > maxsum) { + maxsum = cursum; + } + if (cursum <= 0) { + cursum = 0; + } } + return maxsum; + } - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - int n, arr[], i; - n = sc.nextInt(); - arr = new int[n]; - for (i = 0; i < n; i++) { - arr[i] = sc.nextInt(); - } - int maxContSum = largestContiguousSum(arr); - System.out.println(maxContSum); - sc.close(); + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + int n, arr[], i; + n = sc.nextInt(); + arr = new int[n]; + for (i = 0; i < n; i++) { + arr[i] = sc.nextInt(); } - + int maxContSum = largestContiguousSum(arr); + System.out.println(maxContSum); + sc.close(); + } } diff --git a/DynamicProgramming/Knapsack.java b/DynamicProgramming/Knapsack.java index 1652dc63b14d..e49022e0ba56 100644 --- a/DynamicProgramming/Knapsack.java +++ b/DynamicProgramming/Knapsack.java @@ -1,39 +1,32 @@ package DynamicProgramming; -/** - * A DynamicProgramming based solution for 0-1 Knapsack problem - */ - +/** A DynamicProgramming based solution for 0-1 Knapsack problem */ public class Knapsack { - private static int knapSack(int W, int wt[], int val[], int n) throws IllegalArgumentException { - if(wt == null || val == null) - throw new IllegalArgumentException(); - int i, w; - int rv[][] = new int[n + 1][W + 1]; //rv means return value - - // Build table rv[][] in bottom up manner - for (i = 0; i <= n; i++) { - for (w = 0; w <= W; w++) { - if (i == 0 || w == 0) - rv[i][w] = 0; - else if (wt[i - 1] <= w) - rv[i][w] = Math.max(val[i - 1] + rv[i - 1][w - wt[i - 1]], rv[i - 1][w]); - else - rv[i][w] = rv[i - 1][w]; - } - } + private static int knapSack(int W, int wt[], int val[], int n) throws IllegalArgumentException { + if (wt == null || val == null) throw new IllegalArgumentException(); + int i, w; + int rv[][] = new int[n + 1][W + 1]; // rv means return value - return rv[n][W]; + // Build table rv[][] in bottom up manner + for (i = 0; i <= n; i++) { + for (w = 0; w <= W; w++) { + if (i == 0 || w == 0) rv[i][w] = 0; + else if (wt[i - 1] <= w) + rv[i][w] = Math.max(val[i - 1] + rv[i - 1][w - wt[i - 1]], rv[i - 1][w]); + else rv[i][w] = rv[i - 1][w]; + } } + return rv[n][W]; + } - // Driver program to test above function - public static void main(String args[]) { - int val[] = new int[]{50, 100, 130}; - int wt[] = new int[]{10, 20, 40}; - int W = 50; - int n = val.length; - System.out.println(knapSack(W, wt, val, n)); - } + // Driver program to test above function + public static void main(String args[]) { + int val[] = new int[] {50, 100, 130}; + int wt[] = new int[] {10, 20, 40}; + int W = 50; + int n = val.length; + System.out.println(knapSack(W, wt, val, n)); + } } diff --git a/DynamicProgramming/LevenshteinDistance.java b/DynamicProgramming/LevenshteinDistance.java index c4d53143f80b..c18d24f3f7a0 100644 --- a/DynamicProgramming/LevenshteinDistance.java +++ b/DynamicProgramming/LevenshteinDistance.java @@ -1,56 +1,52 @@ package DynamicProgramming; /** - * @author Kshitij VERMA (github.com/kv19971) - * LEVENSHTEIN DISTANCE dyamic programming implementation to show the difference between two strings (https://en.wikipedia.org/wiki/Levenshtein_distance) + * @author Kshitij VERMA (github.com/kv19971) LEVENSHTEIN DISTANCE dyamic programming implementation + * to show the difference between two strings + * (https://en.wikipedia.org/wiki/Levenshtein_distance) */ - public class LevenshteinDistance { - private static int minimum(int a, int b, int c) { - if (a < b && a < c) { - return a; - } else if (b < a && b < c) { - return b; - } else { - return c; - } + private static int minimum(int a, int b, int c) { + if (a < b && a < c) { + return a; + } else if (b < a && b < c) { + return b; + } else { + return c; } - - private static int calculate_distance(String a, String b) { - int len_a = a.length() + 1; - int len_b = b.length() + 1; - int[][] distance_mat = new int[len_a][len_b]; - for (int i = 0; i < len_a; i++) { - distance_mat[i][0] = i; - } - for (int j = 0; j < len_b; j++) { - distance_mat[0][j] = j; - } - for (int i = 0; i < len_a; i++) { - for (int j = 0; j < len_b; j++) { - int cost; - if (a.charAt(i) == b.charAt(j)) { - cost = 0; - } else { - cost = 1; - } - distance_mat[i][j] = minimum(distance_mat[i - 1][j], distance_mat[i - 1][j - 1], distance_mat[i][j - 1]) + cost; - - - } - + } + + private static int calculate_distance(String a, String b) { + int len_a = a.length() + 1; + int len_b = b.length() + 1; + int[][] distance_mat = new int[len_a][len_b]; + for (int i = 0; i < len_a; i++) { + distance_mat[i][0] = i; + } + for (int j = 0; j < len_b; j++) { + distance_mat[0][j] = j; + } + for (int i = 0; i < len_a; i++) { + for (int j = 0; j < len_b; j++) { + int cost; + if (a.charAt(i) == b.charAt(j)) { + cost = 0; + } else { + cost = 1; } - return distance_mat[len_a - 1][len_b - 1]; - + distance_mat[i][j] = + minimum(distance_mat[i - 1][j], distance_mat[i - 1][j - 1], distance_mat[i][j - 1]) + + cost; + } } + return distance_mat[len_a - 1][len_b - 1]; + } - public static void main(String[] args) { - String a = ""; // enter your string here - String b = ""; // enter your string here - - System.out.print("Levenshtein distance between " + a + " and " + b + " is: "); - System.out.println(calculate_distance(a, b)); + public static void main(String[] args) { + String a = ""; // enter your string here + String b = ""; // enter your string here - - } + System.out.print("Levenshtein distance between " + a + " and " + b + " is: "); + System.out.println(calculate_distance(a, b)); + } } diff --git a/DynamicProgramming/LongestCommonSubsequence.java b/DynamicProgramming/LongestCommonSubsequence.java index fad223748bdd..f39587010f14 100644 --- a/DynamicProgramming/LongestCommonSubsequence.java +++ b/DynamicProgramming/LongestCommonSubsequence.java @@ -2,67 +2,63 @@ class LongestCommonSubsequence { - public static String getLCS(String str1, String str2) { + public static String getLCS(String str1, String str2) { - //At least one string is null - if (str1 == null || str2 == null) - return null; + // At least one string is null + if (str1 == null || str2 == null) return null; - //At least one string is empty - if (str1.length() == 0 || str2.length() == 0) - return ""; + // At least one string is empty + if (str1.length() == 0 || str2.length() == 0) return ""; - String[] arr1 = str1.split(""); - String[] arr2 = str2.split(""); + String[] arr1 = str1.split(""); + String[] arr2 = str2.split(""); - //lcsMatrix[i][j] = LCS of first i elements of arr1 and first j characters of arr2 - int[][] lcsMatrix = new int[arr1.length + 1][arr2.length + 1]; + // lcsMatrix[i][j] = LCS of first i elements of arr1 and first j characters of arr2 + int[][] lcsMatrix = new int[arr1.length + 1][arr2.length + 1]; - for (int i = 0; i < arr1.length + 1; i++) - lcsMatrix[i][0] = 0; - for (int j = 1; j < arr2.length + 1; j++) - lcsMatrix[0][j] = 0; - for (int i = 1; i < arr1.length + 1; i++) { - for (int j = 1; j < arr2.length + 1; j++) { - if (arr1[i - 1].equals(arr2[j - 1])) { - lcsMatrix[i][j] = lcsMatrix[i - 1][j - 1] + 1; - } else { - lcsMatrix[i][j] = lcsMatrix[i - 1][j] > lcsMatrix[i][j - 1] ? lcsMatrix[i - 1][j] : lcsMatrix[i][j - 1]; - } - } + for (int i = 0; i < arr1.length + 1; i++) lcsMatrix[i][0] = 0; + for (int j = 1; j < arr2.length + 1; j++) lcsMatrix[0][j] = 0; + for (int i = 1; i < arr1.length + 1; i++) { + for (int j = 1; j < arr2.length + 1; j++) { + if (arr1[i - 1].equals(arr2[j - 1])) { + lcsMatrix[i][j] = lcsMatrix[i - 1][j - 1] + 1; + } else { + lcsMatrix[i][j] = + lcsMatrix[i - 1][j] > lcsMatrix[i][j - 1] ? lcsMatrix[i - 1][j] : lcsMatrix[i][j - 1]; } - return lcsString(str1, str2, lcsMatrix); + } } + return lcsString(str1, str2, lcsMatrix); + } - public static String lcsString(String str1, String str2, int[][] lcsMatrix) { - StringBuilder lcs = new StringBuilder(); - int i = str1.length(), - j = str2.length(); - while (i > 0 && j > 0) { - if (str1.charAt(i - 1) == str2.charAt(j - 1)) { - lcs.append(str1.charAt(i - 1)); - i--; - j--; - } else if (lcsMatrix[i - 1][j] > lcsMatrix[i][j - 1]) { - i--; - } else { - j--; - } - } - return lcs.reverse().toString(); + public static String lcsString(String str1, String str2, int[][] lcsMatrix) { + StringBuilder lcs = new StringBuilder(); + int i = str1.length(), j = str2.length(); + while (i > 0 && j > 0) { + if (str1.charAt(i - 1) == str2.charAt(j - 1)) { + lcs.append(str1.charAt(i - 1)); + i--; + j--; + } else if (lcsMatrix[i - 1][j] > lcsMatrix[i][j - 1]) { + i--; + } else { + j--; + } } + return lcs.reverse().toString(); + } - public static void main(String[] args) { - String str1 = "DSGSHSRGSRHTRD"; - String str2 = "DATRGAGTSHS"; - String lcs = getLCS(str1, str2); + public static void main(String[] args) { + String str1 = "DSGSHSRGSRHTRD"; + String str2 = "DATRGAGTSHS"; + String lcs = getLCS(str1, str2); - //Print LCS - if (lcs != null) { - System.out.println("String 1: " + str1); - System.out.println("String 2: " + str2); - System.out.println("LCS: " + lcs); - System.out.println("LCS length: " + lcs.length()); - } + // Print LCS + if (lcs != null) { + System.out.println("String 1: " + str1); + System.out.println("String 2: " + str2); + System.out.println("LCS: " + lcs); + System.out.println("LCS length: " + lcs.length()); } -} \ No newline at end of file + } +} diff --git a/DynamicProgramming/LongestIncreasingSubsequence.java b/DynamicProgramming/LongestIncreasingSubsequence.java index e30adfeffd39..06885fbdd463 100644 --- a/DynamicProgramming/LongestIncreasingSubsequence.java +++ b/DynamicProgramming/LongestIncreasingSubsequence.java @@ -2,64 +2,58 @@ import java.util.Scanner; -/** - * @author Afrizal Fikri (https://github.com/icalF) - */ +/** @author Afrizal Fikri (https://github.com/icalF) */ public class LongestIncreasingSubsequence { - public static void main(String[] args) { + public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - int n = sc.nextInt(); + Scanner sc = new Scanner(System.in); + int n = sc.nextInt(); - int ar[] = new int[n]; - for (int i = 0; i < n; i++) { - ar[i] = sc.nextInt(); - } - - System.out.println(LIS(ar)); - sc.close(); + int ar[] = new int[n]; + for (int i = 0; i < n; i++) { + ar[i] = sc.nextInt(); } - private static int upperBound(int[] ar, int l, int r, int key) { - while (l < r - 1) { - int m = (l + r) >>> 1; - if (ar[m] >= key) - r = m; - else - l = m; - } + System.out.println(LIS(ar)); + sc.close(); + } - return r; + private static int upperBound(int[] ar, int l, int r, int key) { + while (l < r - 1) { + int m = (l + r) >>> 1; + if (ar[m] >= key) r = m; + else l = m; } - private static int LIS(int[] array) { - int N = array.length; - if (N == 0) - return 0; + return r; + } - int[] tail = new int[N]; + private static int LIS(int[] array) { + int N = array.length; + if (N == 0) return 0; - // always points empty slot in tail - int length = 1; + int[] tail = new int[N]; - tail[0] = array[0]; - for (int i = 1; i < N; i++) { + // always points empty slot in tail + int length = 1; - // new smallest value - if (array[i] < tail[0]) - tail[0] = array[i]; + tail[0] = array[0]; + for (int i = 1; i < N; i++) { - // array[i] extends largest subsequence - else if (array[i] > tail[length - 1]) - tail[length++] = array[i]; + // new smallest value + if (array[i] < tail[0]) tail[0] = array[i]; - // array[i] will become end candidate of an existing subsequence or - // Throw away larger elements in all LIS, to make room for upcoming grater elements than array[i] - // (and also, array[i] would have already appeared in one of LIS, identify the location and replace it) - else - tail[upperBound(tail, -1, length - 1, array[i])] = array[i]; - } + // array[i] extends largest subsequence + else if (array[i] > tail[length - 1]) tail[length++] = array[i]; - return length; + // array[i] will become end candidate of an existing subsequence or + // Throw away larger elements in all LIS, to make room for upcoming grater elements than + // array[i] + // (and also, array[i] would have already appeared in one of LIS, identify the location and + // replace it) + else tail[upperBound(tail, -1, length - 1, array[i])] = array[i]; } -} \ No newline at end of file + + return length; + } +} diff --git a/DynamicProgramming/LongestPalindromicSubsequence.java b/DynamicProgramming/LongestPalindromicSubsequence.java index 53ea6a794519..a7a62891cf54 100644 --- a/DynamicProgramming/LongestPalindromicSubsequence.java +++ b/DynamicProgramming/LongestPalindromicSubsequence.java @@ -1,57 +1,62 @@ package test; -import java.lang.*; -import java.io.*; -import java.util.*; - + +import java.io.*; +import java.util.*; + /** * Algorithm explanation https://www.educative.io/edpresso/longest-palindromic-subsequence-algorithm */ public class LongestPalindromicSubsequence { - public static void main(String[] args) { - String a = "BBABCBCAB"; - String b = "BABCBAB"; + public static void main(String[] args) { + String a = "BBABCBCAB"; + String b = "BABCBAB"; - String aLPS = LPS(a); - String bLPS = LPS(b); + String aLPS = LPS(a); + String bLPS = LPS(b); - System.out.println(a + " => " + aLPS); - System.out.println(b + " => " + bLPS); - } + System.out.println(a + " => " + aLPS); + System.out.println(b + " => " + bLPS); + } - public static String LPS(String original) throws IllegalArgumentException { - StringBuilder reverse = new StringBuilder(original); - reverse = reverse.reverse(); - return recursiveLPS(original, reverse.toString()); - } + public static String LPS(String original) throws IllegalArgumentException { + StringBuilder reverse = new StringBuilder(original); + reverse = reverse.reverse(); + return recursiveLPS(original, reverse.toString()); + } + + private static String recursiveLPS(String original, String reverse) { + String bestResult = ""; - private static String recursiveLPS(String original, String reverse) { - String bestResult = ""; - - //no more chars, then return empty - if(original.length() == 0 || reverse.length() == 0) { - bestResult = ""; + // no more chars, then return empty + if (original.length() == 0 || reverse.length() == 0) { + bestResult = ""; + } else { + + // if the last chars match, then remove it from both strings and recur + if (original.charAt(original.length() - 1) == reverse.charAt(reverse.length() - 1)) { + String bestSubResult = + recursiveLPS( + original.substring(0, original.length() - 1), + reverse.substring(0, reverse.length() - 1)); + + bestResult = reverse.charAt(reverse.length() - 1) + bestSubResult; + } else { + // otherwise (1) ignore the last character of reverse, and recur on original and updated + // reverse again + // (2) ignore the last character of original and recur on the updated original and reverse + // again + // then select the best result from these two subproblems. + + String bestSubResult1 = recursiveLPS(original, reverse.substring(0, reverse.length() - 1)); + String bestSubResult2 = recursiveLPS(original.substring(0, original.length() - 1), reverse); + if (bestSubResult1.length() > bestSubResult2.length()) { + bestResult = bestSubResult1; } else { - - //if the last chars match, then remove it from both strings and recur - if(original.charAt(original.length() - 1) == reverse.charAt(reverse.length() - 1)) { - String bestSubResult = recursiveLPS(original.substring(0, original.length() - 1), reverse.substring(0, reverse.length() - 1)); - - bestResult = reverse.charAt(reverse.length() - 1) + bestSubResult; - } else { - //otherwise (1) ignore the last character of reverse, and recur on original and updated reverse again - //(2) ignore the last character of original and recur on the updated original and reverse again - //then select the best result from these two subproblems. - - String bestSubResult1 = recursiveLPS(original, reverse.substring(0, reverse.length() - 1)); - String bestSubResult2 = recursiveLPS(original.substring(0, original.length() - 1), reverse); - if(bestSubResult1.length()>bestSubResult2.length()) { - bestResult = bestSubResult1; - } else { - bestResult = bestSubResult2; - } - } + bestResult = bestSubResult2; } - - return bestResult; + } } -} \ No newline at end of file + + return bestResult; + } +} diff --git a/DynamicProgramming/LongestValidParentheses.java b/DynamicProgramming/LongestValidParentheses.java index bc5f18ae0593..3bae80acae32 100644 --- a/DynamicProgramming/LongestValidParentheses.java +++ b/DynamicProgramming/LongestValidParentheses.java @@ -3,59 +3,56 @@ import java.util.Scanner; /** - * Given a string containing just the characters '(' and ')', find the length of - * the longest valid (well-formed) parentheses substring. + * Given a string containing just the characters '(' and ')', find the length of the longest valid + * (well-formed) parentheses substring. * * @author Libin Yang (https://github.com/yanglbme) * @since 2018/10/5 */ - public class LongestValidParentheses { - public static int getLongestValidParentheses(String s) { - if (s == null || s.length() < 2) { - return 0; - } - char[] chars = s.toCharArray(); - int n = chars.length; - int[] res = new int[n]; - res[0] = 0; - res[1] = chars[1] == ')' && chars[0] == '(' ? 2 : 0; - - int max = res[1]; - - for (int i = 2; i < n; ++i) { - if (chars[i] == ')') { - if (chars[i - 1] == '(') { - res[i] = res[i - 2] + 2; - } else { - int index = i - res[i - 1] - 1; - if (index >= 0 && chars[index] == '(') { - // ()(()) - res[i] = res[i - 1] + 2 + (index - 1 >= 0 ? res[index - 1] : 0); - } - } - } - max = Math.max(max, res[i]); + public static int getLongestValidParentheses(String s) { + if (s == null || s.length() < 2) { + return 0; + } + char[] chars = s.toCharArray(); + int n = chars.length; + int[] res = new int[n]; + res[0] = 0; + res[1] = chars[1] == ')' && chars[0] == '(' ? 2 : 0; + + int max = res[1]; + + for (int i = 2; i < n; ++i) { + if (chars[i] == ')') { + if (chars[i - 1] == '(') { + res[i] = res[i - 2] + 2; + } else { + int index = i - res[i - 1] - 1; + if (index >= 0 && chars[index] == '(') { + // ()(()) + res[i] = res[i - 1] + 2 + (index - 1 >= 0 ? res[index - 1] : 0); + } } - - return max; - + } + max = Math.max(max, res[i]); } - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - - while (true) { - String str = sc.nextLine(); - if ("quit".equals(str)) { - break; - } - int len = getLongestValidParentheses(str); - System.out.println(len); + return max; + } - } + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); - sc.close(); + while (true) { + String str = sc.nextLine(); + if ("quit".equals(str)) { + break; + } + int len = getLongestValidParentheses(str); + System.out.println(len); } + + sc.close(); + } } diff --git a/DynamicProgramming/MatrixChainMultiplication.java b/DynamicProgramming/MatrixChainMultiplication.java index 9073400d3299..9a17fe815fa1 100644 --- a/DynamicProgramming/MatrixChainMultiplication.java +++ b/DynamicProgramming/MatrixChainMultiplication.java @@ -5,132 +5,131 @@ import java.util.Scanner; public class MatrixChainMultiplication { - private static Scanner scan = new Scanner(System.in); - private static ArrayList mArray = new ArrayList<>(); - private static int size; - private static int[][] m; - private static int[][] s; - private static int[] p; - - public static void main(String[] args) { - int count = 1; - while (true) { - String[] mSize = input("input size of matrix A(" + count + ") ( ex. 10 20 ) : "); - int col = Integer.parseInt(mSize[0]); - if (col == 0) break; - int row = Integer.parseInt(mSize[1]); - - Matrix matrix = new Matrix(count, col, row); - mArray.add(matrix); - count++; - } - for (Matrix m : mArray) { - System.out.format("A(%d) = %2d x %2d%n", m.count(), m.col(), m.row()); - } - - size = mArray.size(); - m = new int[size + 1][size + 1]; - s = new int[size + 1][size + 1]; - p = new int[size + 1]; - - for (int i = 0; i < size + 1; i++) { - Arrays.fill(m[i], -1); - Arrays.fill(s[i], -1); - } - - for (int i = 0; i < p.length; i++) { - p[i] = i == 0 ? mArray.get(i).col() : mArray.get(i - 1).row(); - } + private static Scanner scan = new Scanner(System.in); + private static ArrayList mArray = new ArrayList<>(); + private static int size; + private static int[][] m; + private static int[][] s; + private static int[] p; + + public static void main(String[] args) { + int count = 1; + while (true) { + String[] mSize = input("input size of matrix A(" + count + ") ( ex. 10 20 ) : "); + int col = Integer.parseInt(mSize[0]); + if (col == 0) break; + int row = Integer.parseInt(mSize[1]); + + Matrix matrix = new Matrix(count, col, row); + mArray.add(matrix); + count++; + } + for (Matrix m : mArray) { + System.out.format("A(%d) = %2d x %2d%n", m.count(), m.col(), m.row()); + } - matrixChainOrder(); - for (int i = 0; i < size; i++) { - System.out.print("-------"); - } - System.out.println(); - printArray(m); - for (int i = 0; i < size; i++) { - System.out.print("-------"); - } - System.out.println(); - printArray(s); - for (int i = 0; i < size; i++) { - System.out.print("-------"); - } - System.out.println(); + size = mArray.size(); + m = new int[size + 1][size + 1]; + s = new int[size + 1][size + 1]; + p = new int[size + 1]; - System.out.println("Optimal solution : " + m[1][size]); - System.out.print("Optimal parens : "); - printOptimalParens(1, size); + for (int i = 0; i < size + 1; i++) { + Arrays.fill(m[i], -1); + Arrays.fill(s[i], -1); } - private static void printOptimalParens(int i, int j) { - if (i == j) { - System.out.print("A" + i); - } else { - System.out.print("("); - printOptimalParens(i, s[i][j]); - printOptimalParens(s[i][j] + 1, j); - System.out.print(")"); - } + for (int i = 0; i < p.length; i++) { + p[i] = i == 0 ? mArray.get(i).col() : mArray.get(i - 1).row(); } - private static void printArray(int[][] array) { - for (int i = 1; i < size + 1; i++) { - for (int j = 1; j < size + 1; j++) { - System.out.print(String.format("%7d", array[i][j])); - } - System.out.println(); - } + matrixChainOrder(); + for (int i = 0; i < size; i++) { + System.out.print("-------"); } - - private static void matrixChainOrder() { - for (int i = 1; i < size + 1; i++) { - m[i][i] = 0; - } - - for (int l = 2; l < size + 1; l++) { - for (int i = 1; i < size - l + 2; i++) { - int j = i + l - 1; - m[i][j] = Integer.MAX_VALUE; - - for (int k = i; k < j; k++) { - int q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j]; - if (q < m[i][j]) { - m[i][j] = q; - s[i][j] = k; - } - } - } - } + System.out.println(); + printArray(m); + for (int i = 0; i < size; i++) { + System.out.print("-------"); } - - private static String[] input(String string) { - System.out.print(string); - return (scan.nextLine().split(" ")); + System.out.println(); + printArray(s); + for (int i = 0; i < size; i++) { + System.out.print("-------"); } - -} - -class Matrix { - private int count; - private int col; - private int row; - - Matrix(int count, int col, int row) { - this.count = count; - this.col = col; - this.row = row; + System.out.println(); + + System.out.println("Optimal solution : " + m[1][size]); + System.out.print("Optimal parens : "); + printOptimalParens(1, size); + } + + private static void printOptimalParens(int i, int j) { + if (i == j) { + System.out.print("A" + i); + } else { + System.out.print("("); + printOptimalParens(i, s[i][j]); + printOptimalParens(s[i][j] + 1, j); + System.out.print(")"); } - - int count() { - return count; + } + + private static void printArray(int[][] array) { + for (int i = 1; i < size + 1; i++) { + for (int j = 1; j < size + 1; j++) { + System.out.print(String.format("%7d", array[i][j])); + } + System.out.println(); } + } - int col() { - return col; + private static void matrixChainOrder() { + for (int i = 1; i < size + 1; i++) { + m[i][i] = 0; } - int row() { - return row; + for (int l = 2; l < size + 1; l++) { + for (int i = 1; i < size - l + 2; i++) { + int j = i + l - 1; + m[i][j] = Integer.MAX_VALUE; + + for (int k = i; k < j; k++) { + int q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j]; + if (q < m[i][j]) { + m[i][j] = q; + s[i][j] = k; + } + } + } } + } + + private static String[] input(String string) { + System.out.print(string); + return (scan.nextLine().split(" ")); + } +} + +class Matrix { + private int count; + private int col; + private int row; + + Matrix(int count, int col, int row) { + this.count = count; + this.col = col; + this.row = row; + } + + int count() { + return count; + } + + int col() { + return col; + } + + int row() { + return row; + } } diff --git a/DynamicProgramming/MinimumSumPartition.java b/DynamicProgramming/MinimumSumPartition.java index e0fb5296f4b4..745d22a1b5cf 100644 --- a/DynamicProgramming/MinimumSumPartition.java +++ b/DynamicProgramming/MinimumSumPartition.java @@ -1,12 +1,12 @@ package DynamicProgramming; // Partition a set into two subsets such that the difference of subset sums is minimum -/* -Input: arr[] = {1, 6, 11, 5} +/* +Input: arr[] = {1, 6, 11, 5} Output: 1 Explanation: -Subset1 = {1, 5, 6}, sum of Subset1 = 12 -Subset2 = {11}, sum of Subset2 = 11 +Subset1 = {1, 5, 6}, sum of Subset1 = 12 +Subset2 = {11}, sum of Subset2 = 11 Input: arr[] = {36, 7, 46, 40} Output: 23 @@ -15,78 +15,75 @@ Subset2 = {36, 40} ; sum of Subset2 = 76 */ -import java.util.*; -import java.lang.*; import java.io.*; -public class MinimumSumPartition -{ - public static int subSet(int[] arr) { - int n = arr.length; - int sum = getSum(arr); - boolean[][] dp = new boolean[n + 1][sum + 1]; - for (int i = 0; i <= n; i++) { - dp[i][0] = true; - } - for (int j = 0; j <= sum; j++) { - dp[0][j] = false; - } +import java.util.*; - //fill dp array - for (int i = 1; i <= n; i++) { - for (int j = 1; j <= sum; j++) { - if (arr[i - 1] < j) { - dp[i][j] = dp[i - 1][j - arr[i - 1]] || dp[i - 1][j]; - } else if (arr[i - 1] == j) { - dp[i][j] = true; - } else { - dp[i][j] = dp[i - 1][j]; - } - } - } +public class MinimumSumPartition { + public static int subSet(int[] arr) { + int n = arr.length; + int sum = getSum(arr); + boolean[][] dp = new boolean[n + 1][sum + 1]; + for (int i = 0; i <= n; i++) { + dp[i][0] = true; + } + for (int j = 0; j <= sum; j++) { + dp[0][j] = false; + } - // fill the index array - int[] index = new int[sum]; - int p = 0; - for (int i = 0; i <= sum / 2; i++) { - if (dp[n][i]) { - index[p++] = i; - } + // fill dp array + for (int i = 1; i <= n; i++) { + for (int j = 1; j <= sum; j++) { + if (arr[i - 1] < j) { + dp[i][j] = dp[i - 1][j - arr[i - 1]] || dp[i - 1][j]; + } else if (arr[i - 1] == j) { + dp[i][j] = true; + } else { + dp[i][j] = dp[i - 1][j]; } - - return getMin(index, sum); + } } - /** - * Calculate sum of array elements - * - * @param arr the array - * @return sum of given array - */ - public static int getSum(int[] arr) { - int sum = 0; - for (int temp : arr) { - sum += temp; - } - return sum; + // fill the index array + int[] index = new int[sum]; + int p = 0; + for (int i = 0; i <= sum / 2; i++) { + if (dp[n][i]) { + index[p++] = i; + } } - public static int getMin(int[] arr, int sum) { - if (arr.length == 0) { - return 0; - } - int min = Integer.MAX_VALUE; - for (int temp : arr) { - min = Math.min(min, sum - 2 * temp); - } - return min; + return getMin(index, sum); + } + + /** + * Calculate sum of array elements + * + * @param arr the array + * @return sum of given array + */ + public static int getSum(int[] arr) { + int sum = 0; + for (int temp : arr) { + sum += temp; } + return sum; + } - /** - * Driver Code - */ - public static void main(String[] args) { - assert subSet(new int[]{1, 6, 11,5}) == 1; - assert subSet(new int[]{36, 7, 46, 40}) == 23; - assert subSet(new int[]{1, 2, 3, 9}) == 3; + public static int getMin(int[] arr, int sum) { + if (arr.length == 0) { + return 0; + } + int min = Integer.MAX_VALUE; + for (int temp : arr) { + min = Math.min(min, sum - 2 * temp); } + return min; + } + + /** Driver Code */ + public static void main(String[] args) { + assert subSet(new int[] {1, 6, 11, 5}) == 1; + assert subSet(new int[] {36, 7, 46, 40}) == 23; + assert subSet(new int[] {1, 2, 3, 9}) == 3; + } } diff --git a/DynamicProgramming/RodCutting.java b/DynamicProgramming/RodCutting.java index 0913dfd80b1f..8a3242a05dbf 100644 --- a/DynamicProgramming/RodCutting.java +++ b/DynamicProgramming/RodCutting.java @@ -1,33 +1,30 @@ package DynamicProgramming; /** - * A DynamicProgramming solution for Rod cutting problem - * Returns the best obtainable price for a rod of - * length n and price[] as prices of different pieces + * A DynamicProgramming solution for Rod cutting problem Returns the best obtainable price for a rod + * of length n and price[] as prices of different pieces */ public class RodCutting { - private static int cutRod(int[] price, int n) { - int val[] = new int[n + 1]; - val[0] = 0; + private static int cutRod(int[] price, int n) { + int val[] = new int[n + 1]; + val[0] = 0; - for (int i = 1; i <= n; i++) { - int max_val = Integer.MIN_VALUE; - for (int j = 0; j < i; j++) - max_val = Math.max(max_val, price[j] + val[i - j - 1]); + for (int i = 1; i <= n; i++) { + int max_val = Integer.MIN_VALUE; + for (int j = 0; j < i; j++) max_val = Math.max(max_val, price[j] + val[i - j - 1]); - val[i] = max_val; - } - - return val[n]; + val[i] = max_val; } - // main function to test - public static void main(String args[]) { - int[] arr = new int[]{2, 5, 13, 19, 20}; - int size = arr.length; - int result = cutRod(arr,size); - System.out.println("Maximum Obtainable Value is " + - result); - } + return val[n]; + } + + // main function to test + public static void main(String args[]) { + int[] arr = new int[] {2, 5, 13, 19, 20}; + int size = arr.length; + int result = cutRod(arr, size); + System.out.println("Maximum Obtainable Value is " + result); + } } diff --git a/DynamicProgramming/SubsetSum.java b/DynamicProgramming/SubsetSum.java index 18a357248720..2e97ffb18042 100644 --- a/DynamicProgramming/SubsetSum.java +++ b/DynamicProgramming/SubsetSum.java @@ -2,45 +2,43 @@ public class SubsetSum { - /** - * Driver Code - */ - public static void main(String[] args) { - int[] arr = new int[]{50, 4, 10, 15, 34}; - assert subsetSum(arr, 64); /* 4 + 10 + 15 + 34 = 64 */ - assert subsetSum(arr, 99); /* 50 + 15 + 34 = 99 */ - assert !subsetSum(arr, 5); - assert !subsetSum(arr, 66); - } + /** Driver Code */ + public static void main(String[] args) { + int[] arr = new int[] {50, 4, 10, 15, 34}; + assert subsetSum(arr, 64); /* 4 + 10 + 15 + 34 = 64 */ + assert subsetSum(arr, 99); /* 50 + 15 + 34 = 99 */ + assert !subsetSum(arr, 5); + assert !subsetSum(arr, 66); + } - /** - * Test if a set of integers contains a subset that sum to a given integer. - * - * @param arr the array contains integers. - * @param sum target sum of subset. - * @return {@code true} if subset exists, otherwise {@code false}. - */ - private static boolean subsetSum(int[] arr, int sum) { - int n = arr.length; - boolean[][] isSum = new boolean[n + 2][sum + 1]; + /** + * Test if a set of integers contains a subset that sum to a given integer. + * + * @param arr the array contains integers. + * @param sum target sum of subset. + * @return {@code true} if subset exists, otherwise {@code false}. + */ + private static boolean subsetSum(int[] arr, int sum) { + int n = arr.length; + boolean[][] isSum = new boolean[n + 2][sum + 1]; - isSum[n + 1][0] = true; - for (int i = 1; i <= sum; i++) { - isSum[n + 1][i] = false; - } + isSum[n + 1][0] = true; + for (int i = 1; i <= sum; i++) { + isSum[n + 1][i] = false; + } - for (int i = n; i > 0; i--) { - isSum[i][0] = true; - for (int j = 1; j <= arr[i - 1] - 1; j++) { - if (j <= sum) { - isSum[i][j] = isSum[i + 1][j]; - } - } - for (int j = arr[i - 1]; j <= sum; j++) { - isSum[i][j] = (isSum[i + 1][j] || isSum[i + 1][j - arr[i - 1]]); - } + for (int i = n; i > 0; i--) { + isSum[i][0] = true; + for (int j = 1; j <= arr[i - 1] - 1; j++) { + if (j <= sum) { + isSum[i][j] = isSum[i + 1][j]; } - - return isSum[1][sum]; + } + for (int j = arr[i - 1]; j <= sum; j++) { + isSum[i][j] = (isSum[i + 1][j] || isSum[i + 1][j - arr[i - 1]]); + } } -} \ No newline at end of file + + return isSum[1][sum]; + } +} diff --git a/Maths/AbsoluteMax.java b/Maths/AbsoluteMax.java index 05aa653bd43e..fe1376232322 100644 --- a/Maths/AbsoluteMax.java +++ b/Maths/AbsoluteMax.java @@ -4,32 +4,31 @@ /** * description: - *

- * absMax([0, 5, 1, 11]) = 11, absMax([3 , -10, -2]) = -10 - *

+ * + *

absMax([0, 5, 1, 11]) = 11, absMax([3 , -10, -2]) = -10 */ public class AbsoluteMax { - public static void main(String[] args) { - int[] testnums = {-2, 0, 16}; - assert absMax(testnums) == 16; - - int[] numbers = {3, -10, -2}; - System.out.println("absMax(" + Arrays.toString(numbers) + ") = " + absMax(numbers)); - } + public static void main(String[] args) { + int[] testnums = {-2, 0, 16}; + assert absMax(testnums) == 16; + + int[] numbers = {3, -10, -2}; + System.out.println("absMax(" + Arrays.toString(numbers) + ") = " + absMax(numbers)); + } - /** - * get the value, return the absolute max value - * - * @param numbers contains elements - * @return the absolute max value - */ - public static int absMax(int[] numbers) { - int absMaxValue = numbers[0]; - for (int i = 1, length = numbers.length; i < length; ++i) { - if (Math.abs(numbers[i]) > Math.abs(absMaxValue)) { - absMaxValue = numbers[i]; - } - } - return absMaxValue; + /** + * get the value, return the absolute max value + * + * @param numbers contains elements + * @return the absolute max value + */ + public static int absMax(int[] numbers) { + int absMaxValue = numbers[0]; + for (int i = 1, length = numbers.length; i < length; ++i) { + if (Math.abs(numbers[i]) > Math.abs(absMaxValue)) { + absMaxValue = numbers[i]; + } } + return absMaxValue; + } } diff --git a/Maths/AbsoluteMin.java b/Maths/AbsoluteMin.java index 597944dca0a2..8e8c71fdbb29 100644 --- a/Maths/AbsoluteMin.java +++ b/Maths/AbsoluteMin.java @@ -4,32 +4,31 @@ /** * description: - *

- * absMin([0, 5, 1, 11]) = 0, absMin([3 , -10, -2]) = -2 - *

+ * + *

absMin([0, 5, 1, 11]) = 0, absMin([3 , -10, -2]) = -2 */ public class AbsoluteMin { - public static void main(String[] args) { - int[] testnums = {4, 0, 16}; - assert absMin(testnums) == 0; - - int[] numbers = {3, -10, -2}; - System.out.println("absMin(" + Arrays.toString(numbers) + ") = " + absMin(numbers)); - } + public static void main(String[] args) { + int[] testnums = {4, 0, 16}; + assert absMin(testnums) == 0; + + int[] numbers = {3, -10, -2}; + System.out.println("absMin(" + Arrays.toString(numbers) + ") = " + absMin(numbers)); + } - /** - * get the value, returns the absolute min value min - * - * @param numbers contains elements - * @return the absolute min value - */ - public static int absMin(int[] numbers) { - int absMinValue = numbers[0]; - for (int i = 1, length = numbers.length; i < length; ++i) { - if (Math.abs(numbers[i]) < Math.abs(absMinValue)) { - absMinValue = numbers[i]; - } - } - return absMinValue; + /** + * get the value, returns the absolute min value min + * + * @param numbers contains elements + * @return the absolute min value + */ + public static int absMin(int[] numbers) { + int absMinValue = numbers[0]; + for (int i = 1, length = numbers.length; i < length; ++i) { + if (Math.abs(numbers[i]) < Math.abs(absMinValue)) { + absMinValue = numbers[i]; + } } + return absMinValue; + } } diff --git a/Maths/AbsoluteValue.java b/Maths/AbsoluteValue.java index 440a7e230093..d465de67d4ff 100644 --- a/Maths/AbsoluteValue.java +++ b/Maths/AbsoluteValue.java @@ -4,24 +4,23 @@ public class AbsoluteValue { - public static void main(String[] args) { - Random random = new Random(); + public static void main(String[] args) { + Random random = new Random(); - /* test 1000 random numbers */ - for (int i = 1; i <= 1000; ++i) { - int randomNumber = random.nextInt(); - assert absVal(randomNumber) == Math.abs(randomNumber); - } - } - - /** - * If value is less than zero, make value positive. - * - * @param value a number - * @return the absolute value of a number - */ - public static int absVal(int value) { - return value < 0 ? -value : value; + /* test 1000 random numbers */ + for (int i = 1; i <= 1000; ++i) { + int randomNumber = random.nextInt(); + assert absVal(randomNumber) == Math.abs(randomNumber); } + } + /** + * If value is less than zero, make value positive. + * + * @param value a number + * @return the absolute value of a number + */ + public static int absVal(int value) { + return value < 0 ? -value : value; + } } diff --git a/Maths/AliquotSum.java b/Maths/AliquotSum.java index 28dbca41a7ff..09b7c730b159 100644 --- a/Maths/AliquotSum.java +++ b/Maths/AliquotSum.java @@ -1,35 +1,32 @@ package Maths; /** - *

- * In number theory, the aliquot sum s(n) of a positive integer n is the sum of all proper divisors of n, - * that is, all divisors of n other than n itself. - * For example, the proper divisors of 15 (that is, the positive divisors of 15 that are not equal to 15) - * are 1, 3 and 5, so the aliquot sum of 15 is 9 i.e. (1 + 3 + 5). - *

- * Wikipedia: https://en.wikipedia.org/wiki/Aliquot_sum + * In number theory, the aliquot sum s(n) of a positive integer n is the sum of all proper divisors + * of n, that is, all divisors of n other than n itself. For example, the proper divisors of 15 + * (that is, the positive divisors of 15 that are not equal to 15) are 1, 3 and 5, so the aliquot + * sum of 15 is 9 i.e. (1 + 3 + 5). Wikipedia: https://en.wikipedia.org/wiki/Aliquot_sum */ public class AliquotSum { - public static void main(String[] args) { - assert aliquotSum(1) == 0; - assert aliquotSum(6) == 6; - assert aliquotSum(15) == 9; - assert aliquotSum(19) == 1; - } + public static void main(String[] args) { + assert aliquotSum(1) == 0; + assert aliquotSum(6) == 6; + assert aliquotSum(15) == 9; + assert aliquotSum(19) == 1; + } - /** - * Finds the aliquot sum of an integer number - * - * @param number a positive integer - * @return aliquot sum of given {@code number} - */ - public static int aliquotSum(int number) { - int sum = 0; - for (int i = 1, limit = number / 2; i <= limit; ++i) { - if (number % i == 0) { - sum += i; - } - } - return sum; + /** + * Finds the aliquot sum of an integer number + * + * @param number a positive integer + * @return aliquot sum of given {@code number} + */ + public static int aliquotSum(int number) { + int sum = 0; + for (int i = 1, limit = number / 2; i <= limit; ++i) { + if (number % i == 0) { + sum += i; + } } + return sum; + } } diff --git a/Maths/AmicableNumber.java b/Maths/AmicableNumber.java index 1d81a393a6ff..4080ce6263a0 100644 --- a/Maths/AmicableNumber.java +++ b/Maths/AmicableNumber.java @@ -1,87 +1,87 @@ package Maths; /** - * Amicable numbers are two different numbers so related - * that the sum of the proper divisors of each is equal to the other number. - * (A proper divisor of a number is a positive factor of that number other than the number itself. - * For example, the proper divisors of 6 are 1, 2, and 3.) - * A pair of amicable numbers constitutes an aliquot sequence of period 2. - * It is unknown if there are infinitely many pairs of amicable numbers. - * * - *

- * * link: https://en.wikipedia.org/wiki/Amicable_numbers - * *

- *

- * Simple Example : (220,284) 220 is divisible by {1,2,4,5,10,11,20,22,44,55,110 } <- Sum = 284 - * 284 is divisible by -> 1,2,4,71,142 and the Sum of that is. Yes right you probably expected it 220 + * Amicable numbers are two different numbers so related that the sum of the proper divisors of each + * is equal to the other number. (A proper divisor of a number is a positive factor of that number + * other than the number itself. For example, the proper divisors of 6 are 1, 2, and 3.) A pair of + * amicable numbers constitutes an aliquot sequence of period 2. It is unknown if there are + * infinitely many pairs of amicable numbers. * + * + *

* link: https://en.wikipedia.org/wiki/Amicable_numbers * + * + *

Simple Example : (220,284) 220 is divisible by {1,2,4,5,10,11,20,22,44,55,110 } <- Sum = 284 + * 284 is divisible by -> 1,2,4,71,142 and the Sum of that is. Yes right you probably expected it + * 220 */ - public class AmicableNumber { - public static void main(String[] args) { + public static void main(String[] args) { - AmicableNumber.findAllInRange(1,3000); - /* Res -> Int Range of 1 till 3000there are 3Amicable_numbers These are 1: = ( 220,284) 2: = ( 1184,1210) - 3: = ( 2620,2924) So it worked */ + AmicableNumber.findAllInRange(1, 3000); + /* Res -> Int Range of 1 till 3000there are 3Amicable_numbers These are 1: = ( 220,284) 2: = ( 1184,1210) + 3: = ( 2620,2924) So it worked */ - } + } - /** - * @param startValue - * @param stopValue - * @return - */ - static void findAllInRange(int startValue, int stopValue) { + /** + * @param startValue + * @param stopValue + * @return + */ + static void findAllInRange(int startValue, int stopValue) { - /* the 2 for loops are to avoid to double check tuple. For example (200,100) and (100,200) is the same calculation - * also to avoid is to check the number with it self. a number with itself is always a AmicableNumber - * */ - StringBuilder res = new StringBuilder(); - int countofRes = 0; + /* the 2 for loops are to avoid to double check tuple. For example (200,100) and (100,200) is the same calculation + * also to avoid is to check the number with it self. a number with itself is always a AmicableNumber + * */ + StringBuilder res = new StringBuilder(); + int countofRes = 0; - for (int i = startValue; i < stopValue; i++) { - for (int j = i + 1; j <= stopValue; j++) { - if (isAmicableNumber(i, j)) { - countofRes++; - res.append("" + countofRes + ": = ( " + i + "," + j + ")" + "\t"); - } - } + for (int i = startValue; i < stopValue; i++) { + for (int j = i + 1; j <= stopValue; j++) { + if (isAmicableNumber(i, j)) { + countofRes++; + res.append("" + countofRes + ": = ( " + i + "," + j + ")" + "\t"); } - res.insert(0, "Int Range of " + startValue + " till " + stopValue + " there are " + countofRes + " Amicable_numbers.These are \n "); - System.out.println(res.toString()); + } } - - /** - * Check if {@code numberOne and numberTwo } are AmicableNumbers or not - * - * @param numberOne numberTwo - * @return {@code true} if {@code numberOne numberTwo} isAmicableNumbers otherwise false - */ - static boolean isAmicableNumber(int numberOne, int numberTwo) { - - return ((recursiveCalcOfDividerSum(numberOne, numberOne) == numberTwo && numberOne == recursiveCalcOfDividerSum(numberTwo, numberTwo))); - } - - /** - * calculated in recursive calls the Sum of all the Dividers beside it self - * - * @param number div = the next to test dividely by using the modulo operator - * @return sum of all the dividers - */ - static int recursiveCalcOfDividerSum(int number, int div) { - - if (div == 1) { - return 0; - } else if (number % --div == 0) { - return recursiveCalcOfDividerSum(number, div) + div; - } else { - return recursiveCalcOfDividerSum(number, div); - } + res.insert( + 0, + "Int Range of " + + startValue + + " till " + + stopValue + + " there are " + + countofRes + + " Amicable_numbers.These are \n "); + System.out.println(res.toString()); + } + + /** + * Check if {@code numberOne and numberTwo } are AmicableNumbers or not + * + * @param numberOne numberTwo + * @return {@code true} if {@code numberOne numberTwo} isAmicableNumbers otherwise false + */ + static boolean isAmicableNumber(int numberOne, int numberTwo) { + + return ((recursiveCalcOfDividerSum(numberOne, numberOne) == numberTwo + && numberOne == recursiveCalcOfDividerSum(numberTwo, numberTwo))); + } + + /** + * calculated in recursive calls the Sum of all the Dividers beside it self + * + * @param number div = the next to test dividely by using the modulo operator + * @return sum of all the dividers + */ + static int recursiveCalcOfDividerSum(int number, int div) { + + if (div == 1) { + return 0; + } else if (number % --div == 0) { + return recursiveCalcOfDividerSum(number, div) + div; + } else { + return recursiveCalcOfDividerSum(number, div); } - - - - - - + } } diff --git a/Maths/Area.java b/Maths/Area.java index 2faac63b21a4..ea1db120b779 100644 --- a/Maths/Area.java +++ b/Maths/Area.java @@ -1,119 +1,117 @@ package Maths; -/** - * Find the area of various geometric shapes - */ +/** Find the area of various geometric shapes */ public class Area { - public static void main(String[] args) { - - /* test cube */ - assert Double.compare(surfaceAreaCube(1), 6.0) == 0; - - /* test sphere */ - assert Double.compare(surfaceAreaSphere(5), 314.1592653589793) == 0; - assert Double.compare(surfaceAreaSphere(1), 12.566370614359172) == 0; - - /* test rectangle */ - assert Double.compare(surfaceAreaRectangle(10, 20), 200.0) == 0; - - /* test square */ - assert Double.compare(surfaceAreaSquare(10), 100.0) == 0; - - /* test triangle */ - assert Double.compare(surfaceAreaTriangle(10, 10), 50.0) == 0; - - /* test parallelogram */ - assert Double.compare(surfaceAreaParallelogram(10, 20), 200.0) == 0; - - /* test trapezium */ - assert Double.compare(surfaceAreaTrapezium(10, 20, 30), 450.0) == 0; - - /* test circle */ - assert Double.compare(surfaceAreaCircle(20), 1256.6370614359173) == 0; - } - - /** - * Calculate the surface area of a cube. - * - * @param sideLength side length of cube - * @return surface area of given cube - */ - private static double surfaceAreaCube(double sideLength) { - return 6 * sideLength * sideLength; - } - - /** - * Calculate the surface area of a sphere. - * - * @param radius radius of sphere - * @return surface area of given sphere - */ - private static double surfaceAreaSphere(double radius) { - return 4 * Math.PI * radius * radius; - } - - /** - * Calculate the area of a rectangle - * - * @param length length of rectangle - * @param width width of rectangle - * @return area of given rectangle - */ - private static double surfaceAreaRectangle(double length, double width) { - return length * width; - } - - /** - * Calculate the area of a square - * - * @param sideLength side length of square - * @return area of given square - */ - private static double surfaceAreaSquare(double sideLength) { - return sideLength * sideLength; - } - - /** - * Calculate the area of a triangle - * - * @param base base of triangle - * @param height height of triangle - * @return area of given triangle - */ - private static double surfaceAreaTriangle(double base, double height) { - return base * height / 2; - } - - /** - * Calculate the area of a parallelogram - * - * @param base base of parallelogram - * @param height height of parallelogram - * @return area of given parallelogram - */ - private static double surfaceAreaParallelogram(double base, double height) { - return base * height; - } - - /** - * Calculate the area of a trapezium - * - * @param base1 upper base of trapezium - * @param base2 bottom base of trapezium - * @param height height of trapezium - * @return area of given trapezium - */ - private static double surfaceAreaTrapezium(double base1, double base2, double height) { - return (base1 + base2) * height / 2; - } - - /** - * Calculate the area of a circle - * - * @param radius radius of circle - * @return area of given circle - */ - private static double surfaceAreaCircle(double radius) { - return Math.PI * radius * radius; - } -} \ No newline at end of file + public static void main(String[] args) { + + /* test cube */ + assert Double.compare(surfaceAreaCube(1), 6.0) == 0; + + /* test sphere */ + assert Double.compare(surfaceAreaSphere(5), 314.1592653589793) == 0; + assert Double.compare(surfaceAreaSphere(1), 12.566370614359172) == 0; + + /* test rectangle */ + assert Double.compare(surfaceAreaRectangle(10, 20), 200.0) == 0; + + /* test square */ + assert Double.compare(surfaceAreaSquare(10), 100.0) == 0; + + /* test triangle */ + assert Double.compare(surfaceAreaTriangle(10, 10), 50.0) == 0; + + /* test parallelogram */ + assert Double.compare(surfaceAreaParallelogram(10, 20), 200.0) == 0; + + /* test trapezium */ + assert Double.compare(surfaceAreaTrapezium(10, 20, 30), 450.0) == 0; + + /* test circle */ + assert Double.compare(surfaceAreaCircle(20), 1256.6370614359173) == 0; + } + + /** + * Calculate the surface area of a cube. + * + * @param sideLength side length of cube + * @return surface area of given cube + */ + private static double surfaceAreaCube(double sideLength) { + return 6 * sideLength * sideLength; + } + + /** + * Calculate the surface area of a sphere. + * + * @param radius radius of sphere + * @return surface area of given sphere + */ + private static double surfaceAreaSphere(double radius) { + return 4 * Math.PI * radius * radius; + } + + /** + * Calculate the area of a rectangle + * + * @param length length of rectangle + * @param width width of rectangle + * @return area of given rectangle + */ + private static double surfaceAreaRectangle(double length, double width) { + return length * width; + } + + /** + * Calculate the area of a square + * + * @param sideLength side length of square + * @return area of given square + */ + private static double surfaceAreaSquare(double sideLength) { + return sideLength * sideLength; + } + + /** + * Calculate the area of a triangle + * + * @param base base of triangle + * @param height height of triangle + * @return area of given triangle + */ + private static double surfaceAreaTriangle(double base, double height) { + return base * height / 2; + } + + /** + * Calculate the area of a parallelogram + * + * @param base base of parallelogram + * @param height height of parallelogram + * @return area of given parallelogram + */ + private static double surfaceAreaParallelogram(double base, double height) { + return base * height; + } + + /** + * Calculate the area of a trapezium + * + * @param base1 upper base of trapezium + * @param base2 bottom base of trapezium + * @param height height of trapezium + * @return area of given trapezium + */ + private static double surfaceAreaTrapezium(double base1, double base2, double height) { + return (base1 + base2) * height / 2; + } + + /** + * Calculate the area of a circle + * + * @param radius radius of circle + * @return area of given circle + */ + private static double surfaceAreaCircle(double radius) { + return Math.PI * radius * radius; + } +} diff --git a/Maths/Armstrong.java b/Maths/Armstrong.java index e1e10847376b..e41e85d062fd 100644 --- a/Maths/Armstrong.java +++ b/Maths/Armstrong.java @@ -1,43 +1,44 @@ package Maths; /** - * An Armstrong number is equal to the sum of the cubes of its digits. - * For example, 370 is an Armstrong number because 3*3*3 + 7*7*7 + 0*0*0 = 370. - * An Armstrong number is often called Narcissistic number. + * An Armstrong number is equal to the sum of the cubes of its digits. For example, 370 is an + * Armstrong number because 3*3*3 + 7*7*7 + 0*0*0 = 370. An Armstrong number is often called + * Narcissistic number. */ public class Armstrong { - public static void main(String[] args) { - assert (isArmStrong(0)); - assert (isArmStrong(1)); - assert (isArmStrong(153)); - assert (isArmStrong(1634)); - assert (isArmStrong(371)); - assert (!isArmStrong(200)); - } + public static void main(String[] args) { + assert (isArmStrong(0)); + assert (isArmStrong(1)); + assert (isArmStrong(153)); + assert (isArmStrong(1634)); + assert (isArmStrong(371)); + assert (!isArmStrong(200)); + } - /** - * Checks whether a given number is an armstrong number or not. - * - * @param number number to check - * @return {@code true} if given number is armstrong number, {@code false} otherwise - */ - private static boolean isArmStrong(int number) { - int sum = 0; - int temp = number; - int numberOfDigits = 0; - while (temp != 0) { - numberOfDigits++; - temp /= 10; - } - temp = number; /* copy number again */ - while (number > 0) { - int remainder = number % 10; - int power = 1; - for (int i = 1; i <= numberOfDigits; power *= remainder, ++i) ; - sum = sum + power; - number /= 10; - } - return sum == temp; + /** + * Checks whether a given number is an armstrong number or not. + * + * @param number number to check + * @return {@code true} if given number is armstrong number, {@code false} otherwise + */ + private static boolean isArmStrong(int number) { + int sum = 0; + int temp = number; + int numberOfDigits = 0; + while (temp != 0) { + numberOfDigits++; + temp /= 10; + } + temp = number; /* copy number again */ + while (number > 0) { + int remainder = number % 10; + int power = 1; + for (int i = 1; i <= numberOfDigits; power *= remainder, ++i) + ; + sum = sum + power; + number /= 10; } + return sum == temp; + } } diff --git a/Maths/Average.java b/Maths/Average.java index 9f4bb3af6b58..5c66569a642e 100644 --- a/Maths/Average.java +++ b/Maths/Average.java @@ -1,44 +1,42 @@ package Maths; -/** - * Calculate average of a list of numbers - */ +/** Calculate average of a list of numbers */ public class Average { - private static final double SMALL_VALUE = 0.00001f; - public static void main(String[] args) { - assert Math.abs(average(new double[]{3, 6, 9, 12, 15, 18, 21}) - 12) < SMALL_VALUE; - assert Math.abs(average(new double[]{5, 10, 15, 20, 25, 30, 35}) - 20) < SMALL_VALUE; - assert Math.abs(average(new double[]{1, 2, 3, 4, 5, 6, 7, 8}) - 4.5) < SMALL_VALUE; - int[] array = {2, 4, 10}; - assert average(array) == 5; - } + private static final double SMALL_VALUE = 0.00001f; + + public static void main(String[] args) { + assert Math.abs(average(new double[] {3, 6, 9, 12, 15, 18, 21}) - 12) < SMALL_VALUE; + assert Math.abs(average(new double[] {5, 10, 15, 20, 25, 30, 35}) - 20) < SMALL_VALUE; + assert Math.abs(average(new double[] {1, 2, 3, 4, 5, 6, 7, 8}) - 4.5) < SMALL_VALUE; + int[] array = {2, 4, 10}; + assert average(array) == 5; + } - /** - * Calculate average of a list of numbers - * - * @param numbers array to store numbers - * @return mean of given numbers - */ - public static double average(double[] numbers) { - double sum = 0; - for (double number : numbers) { - sum += number; - } - return sum / numbers.length; + /** + * Calculate average of a list of numbers + * + * @param numbers array to store numbers + * @return mean of given numbers + */ + public static double average(double[] numbers) { + double sum = 0; + for (double number : numbers) { + sum += number; } - - /** - * find average value of int array - * - * @param array the array contains element and the sum does not - * excess long value limit - * @return average value - */ - public static int average(int[] array) { - long sum = 0; - for (int i = 0 ; i < array.length; ++i) { - sum += array[i]; - } - return (int)(sum / array.length); + return sum / numbers.length; + } + + /** + * find average value of int array + * + * @param array the array contains element and the sum does not excess long value limit + * @return average value + */ + public static int average(int[] array) { + long sum = 0; + for (int i = 0; i < array.length; ++i) { + sum += array[i]; } -} \ No newline at end of file + return (int) (sum / array.length); + } +} diff --git a/Maths/Ceil.java b/Maths/Ceil.java index b6f08693617e..fd6d8300a4c9 100644 --- a/Maths/Ceil.java +++ b/Maths/Ceil.java @@ -3,27 +3,27 @@ import java.util.Random; public class Ceil { - public static void main(String[] args) { - Random random = new Random(); - for (int i = 1; i <= 1000; ++i) { - double randomNumber = random.nextDouble(); - assert ceil(randomNumber) == Math.ceil(randomNumber); - } + public static void main(String[] args) { + Random random = new Random(); + for (int i = 1; i <= 1000; ++i) { + double randomNumber = random.nextDouble(); + assert ceil(randomNumber) == Math.ceil(randomNumber); } + } - /** - * Returns the smallest (closest to negative infinity) - * - * @param number the number - * @return the smallest (closest to negative infinity) of given {@code number} - */ - public static double ceil(double number) { - if (number - (int) number == 0) { - return number; - } else if (number - (int) number > 0) { - return (int) (number + 1); - } else { - return (int) number; - } + /** + * Returns the smallest (closest to negative infinity) + * + * @param number the number + * @return the smallest (closest to negative infinity) of given {@code number} + */ + public static double ceil(double number) { + if (number - (int) number == 0) { + return number; + } else if (number - (int) number > 0) { + return (int) (number + 1); + } else { + return (int) number; } -} \ No newline at end of file + } +} diff --git a/Maths/Combinations.java b/Maths/Combinations.java index 4ff237bb362f..0fb2437c21f3 100644 --- a/Maths/Combinations.java +++ b/Maths/Combinations.java @@ -1,37 +1,35 @@ package Maths; -/** - * @see Combination - */ +/** @see Combination */ public class Combinations { - public static void main(String[] args) { - assert combinations(1, 1) == 1; - assert combinations(10, 5) == 252; - assert combinations(6, 3) == 20; - assert combinations(20, 5) == 15504; - } + public static void main(String[] args) { + assert combinations(1, 1) == 1; + assert combinations(10, 5) == 252; + assert combinations(6, 3) == 20; + assert combinations(20, 5) == 15504; + } - /** - * Calculate of factorial - * - * @param n the number - * @return factorial of given number - */ - public static long factorial(int n) { - if (n < 0) { - throw new IllegalArgumentException("number is negative"); - } - return n == 0 || n == 1 ? 1 : n * factorial(n - 1); + /** + * Calculate of factorial + * + * @param n the number + * @return factorial of given number + */ + public static long factorial(int n) { + if (n < 0) { + throw new IllegalArgumentException("number is negative"); } + return n == 0 || n == 1 ? 1 : n * factorial(n - 1); + } - /** - * Calculate combinations - * - * @param n first number - * @param k second number - * @return combinations of given {@code n} and {@code k} - */ - public static long combinations(int n, int k) { - return factorial(n) / (factorial(k) * factorial(n - k)); - } + /** + * Calculate combinations + * + * @param n first number + * @param k second number + * @return combinations of given {@code n} and {@code k} + */ + public static long combinations(int n, int k) { + return factorial(n) / (factorial(k) * factorial(n - k)); + } } diff --git a/Maths/Factorial.java b/Maths/Factorial.java index e1ce91f62f93..3bd2e74a4864 100644 --- a/Maths/Factorial.java +++ b/Maths/Factorial.java @@ -2,26 +2,27 @@ public class Factorial { - /* Driver Code */ - public static void main(String[] args) { - assert factorial(0) == 1; - assert factorial(1) == 1; - assert factorial(5) == 120; - assert factorial(10) == 3628800; - } + /* Driver Code */ + public static void main(String[] args) { + assert factorial(0) == 1; + assert factorial(1) == 1; + assert factorial(5) == 120; + assert factorial(10) == 3628800; + } - /** - * Calculate factorial N using iteration - * - * @param n the number - * @return the factorial of {@code n} - */ - public static long factorial(int n) { - if (n < 0) { - throw new IllegalArgumentException("number is negative"); - } - long factorial = 1; - for (int i = 1; i <= n; factorial *= i, ++i) ; - return factorial; + /** + * Calculate factorial N using iteration + * + * @param n the number + * @return the factorial of {@code n} + */ + public static long factorial(int n) { + if (n < 0) { + throw new IllegalArgumentException("number is negative"); } + long factorial = 1; + for (int i = 1; i <= n; factorial *= i, ++i) + ; + return factorial; + } } diff --git a/Maths/FactorialRecursion.java b/Maths/FactorialRecursion.java index 6e12d0babbcd..e580fe9b1ba6 100644 --- a/Maths/FactorialRecursion.java +++ b/Maths/FactorialRecursion.java @@ -2,25 +2,25 @@ public class FactorialRecursion { - /* Driver Code */ - public static void main(String[] args) { - assert factorial(0) == 1; - assert factorial(1) == 1; - assert factorial(2) == 2; - assert factorial(3) == 6; - assert factorial(5) == 120; - } + /* Driver Code */ + public static void main(String[] args) { + assert factorial(0) == 1; + assert factorial(1) == 1; + assert factorial(2) == 2; + assert factorial(3) == 6; + assert factorial(5) == 120; + } - /** - * Recursive FactorialRecursion Method - * - * @param n The number to factorial - * @return The factorial of the number - */ - public static long factorial(int n) { - if (n < 0) { - throw new IllegalArgumentException("number is negative"); - } - return n == 0 || n == 1 ? 1 : n * factorial(n - 1); + /** + * Recursive FactorialRecursion Method + * + * @param n The number to factorial + * @return The factorial of the number + */ + public static long factorial(int n) { + if (n < 0) { + throw new IllegalArgumentException("number is negative"); } + return n == 0 || n == 1 ? 1 : n * factorial(n - 1); + } } diff --git a/Maths/FibonacciNumber.java b/Maths/FibonacciNumber.java index 89796b337135..1cec0963d30c 100644 --- a/Maths/FibonacciNumber.java +++ b/Maths/FibonacciNumber.java @@ -1,37 +1,35 @@ package Maths; -/** - * Fibonacci: 0 1 1 2 3 5 8 13 21 ... - */ +/** Fibonacci: 0 1 1 2 3 5 8 13 21 ... */ public class FibonacciNumber { - public static void main(String[] args) { - assert isFibonacciNumber(1); - assert isFibonacciNumber(2); - assert isFibonacciNumber(21); - assert !isFibonacciNumber(9); - assert !isFibonacciNumber(10); - } + public static void main(String[] args) { + assert isFibonacciNumber(1); + assert isFibonacciNumber(2); + assert isFibonacciNumber(21); + assert !isFibonacciNumber(9); + assert !isFibonacciNumber(10); + } - /** - * Check if a number is perfect square number - * - * @param number the number to be checked - * @return true if {@code number} is perfect square, otherwise false - */ - public static boolean isPerfectSquare(int number) { - int sqrt = (int) Math.sqrt(number); - return sqrt * sqrt == number; - } + /** + * Check if a number is perfect square number + * + * @param number the number to be checked + * @return true if {@code number} is perfect square, otherwise false + */ + public static boolean isPerfectSquare(int number) { + int sqrt = (int) Math.sqrt(number); + return sqrt * sqrt == number; + } - /** - * Check if a number is fibonacci number - * This is true if and only if at least one of 5x^2+4 or 5x^2-4 is a perfect square - * - * @param number the number - * @return true if {@code number} is fibonacci number, otherwise false - * @link https://en.wikipedia.org/wiki/Fibonacci_number#Identification - */ - public static boolean isFibonacciNumber(int number) { - return isPerfectSquare(5 * number * number + 4) || isPerfectSquare(5 * number * number - 4); - } + /** + * Check if a number is fibonacci number This is true if and only if at least one of 5x^2+4 or + * 5x^2-4 is a perfect square + * + * @param number the number + * @return true if {@code number} is fibonacci number, otherwise false + * @link https://en.wikipedia.org/wiki/Fibonacci_number#Identification + */ + public static boolean isFibonacciNumber(int number) { + return isPerfectSquare(5 * number * number + 4) || isPerfectSquare(5 * number * number - 4); + } } diff --git a/Maths/FindMax.java b/Maths/FindMax.java index 1a332367de15..961b23380a3a 100644 --- a/Maths/FindMax.java +++ b/Maths/FindMax.java @@ -5,37 +5,35 @@ public class FindMax { - /** - * Driver Code - */ - public static void main(String[] args) { - Random random = new Random(); + /** Driver Code */ + public static void main(String[] args) { + Random random = new Random(); - /* random size */ - int size = random.nextInt(100) + 1; - int[] array = new int[size]; + /* random size */ + int size = random.nextInt(100) + 1; + int[] array = new int[size]; - /* init array with random numbers */ - for (int i = 0; i < size; i++) { - array[i] = random.nextInt() % 100; - } - - assert Arrays.stream(array).max().getAsInt() == findMax(array); + /* init array with random numbers */ + for (int i = 0; i < size; i++) { + array[i] = random.nextInt() % 100; } - /** - * find max of array - * - * @param array the array contains element - * @return max value of given array - */ - public static int findMax(int[] array) { - int max = array[0]; - for (int i = 1; i < array.length; ++i) { - if (array[i] > max) { - max = array[i]; - } - } - return max; + assert Arrays.stream(array).max().getAsInt() == findMax(array); + } + + /** + * find max of array + * + * @param array the array contains element + * @return max value of given array + */ + public static int findMax(int[] array) { + int max = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] > max) { + max = array[i]; + } } + return max; + } } diff --git a/Maths/FindMaxRecursion.java b/Maths/FindMaxRecursion.java index 867390b315c5..38fe2dae8ac5 100644 --- a/Maths/FindMaxRecursion.java +++ b/Maths/FindMaxRecursion.java @@ -4,51 +4,51 @@ import java.util.Random; public class FindMaxRecursion { - public static void main(String[] args) { - Random rand = new Random(); + public static void main(String[] args) { + Random rand = new Random(); - /* rand size */ - int size = rand.nextInt(100) + 1; - int[] array = new int[size]; + /* rand size */ + int size = rand.nextInt(100) + 1; + int[] array = new int[size]; - /* init array with rand numbers */ - for (int i = 0; i < size; i++) { - array[i] = rand.nextInt() % 100; - } - - assert max(array, array.length) == Arrays.stream(array).max().getAsInt(); - assert max(array, 0, array.length - 1) == Arrays.stream(array).max().getAsInt(); + /* init array with rand numbers */ + for (int i = 0; i < size; i++) { + array[i] = rand.nextInt() % 100; } - /** - * Get max of array using divide and conquer algorithm - * - * @param array contains elements - * @param low the index of the first element - * @param high the index of the last element - * @return max of {@code array} - */ - public static int max(int[] array, int low, int high) { - if (low == high) { - return array[low]; //or array[high] - } - - int mid = (low + high) >>> 1; - - int leftMax = max(array, low, mid); //get max in [low, mid] - int rightMax = max(array, mid + 1, high); //get max in [mid+1, high] - - return Math.max(leftMax, rightMax); + assert max(array, array.length) == Arrays.stream(array).max().getAsInt(); + assert max(array, 0, array.length - 1) == Arrays.stream(array).max().getAsInt(); + } + + /** + * Get max of array using divide and conquer algorithm + * + * @param array contains elements + * @param low the index of the first element + * @param high the index of the last element + * @return max of {@code array} + */ + public static int max(int[] array, int low, int high) { + if (low == high) { + return array[low]; // or array[high] } - /** - * Get max of array using recursion algorithm - * - * @param array contains elements - * @param len length of given array - * @return max value of {@code array} - */ - public static int max(int[] array, int len) { - return len == 1 ? array[0] : Math.max(max(array, len - 1), array[len - 1]); - } + int mid = (low + high) >>> 1; + + int leftMax = max(array, low, mid); // get max in [low, mid] + int rightMax = max(array, mid + 1, high); // get max in [mid+1, high] + + return Math.max(leftMax, rightMax); + } + + /** + * Get max of array using recursion algorithm + * + * @param array contains elements + * @param len length of given array + * @return max value of {@code array} + */ + public static int max(int[] array, int len) { + return len == 1 ? array[0] : Math.max(max(array, len - 1), array[len - 1]); + } } diff --git a/Maths/FindMin.java b/Maths/FindMin.java index b8996cd106eb..198bd1e93a7b 100644 --- a/Maths/FindMin.java +++ b/Maths/FindMin.java @@ -5,37 +5,35 @@ public class FindMin { - /** - * Driver Code - */ - public static void main(String[] args) { - Random random = new Random(); + /** Driver Code */ + public static void main(String[] args) { + Random random = new Random(); - /* random size */ - int size = random.nextInt(100) + 1; - int[] array = new int[size]; + /* random size */ + int size = random.nextInt(100) + 1; + int[] array = new int[size]; - /* init array with random numbers */ - for (int i = 0; i < size; i++) { - array[i] = random.nextInt() % 100; - } - - assert Arrays.stream(array).min().getAsInt() == findMin(array); + /* init array with random numbers */ + for (int i = 0; i < size; i++) { + array[i] = random.nextInt() % 100; } - /** - * Find the minimum number of an array of numbers. - * - * @param array the array contains element - * @return min value - */ - public static int findMin(int[] array) { - int min = array[0]; - for (int i = 1; i < array.length; ++i) { - if (array[i] < min) { - min = array[i]; - } - } - return min; + assert Arrays.stream(array).min().getAsInt() == findMin(array); + } + + /** + * Find the minimum number of an array of numbers. + * + * @param array the array contains element + * @return min value + */ + public static int findMin(int[] array) { + int min = array[0]; + for (int i = 1; i < array.length; ++i) { + if (array[i] < min) { + min = array[i]; + } } + return min; + } } diff --git a/Maths/FindMinRecursion.java b/Maths/FindMinRecursion.java index ba9b9c91f24e..4922e0d109e6 100644 --- a/Maths/FindMinRecursion.java +++ b/Maths/FindMinRecursion.java @@ -5,54 +5,52 @@ public class FindMinRecursion { - /** - * Driver Code - */ - public static void main(String[] args) { - Random rand = new Random(); - - /* rand size */ - int size = rand.nextInt(100) + 1; - int[] array = new int[size]; - - /* init array with rand numbers */ - for (int i = 0; i < size; i++) { - array[i] = rand.nextInt() % 100; - } - - assert min(array, 0, array.length - 1) == Arrays.stream(array).min().getAsInt(); - assert min(array, array.length) == Arrays.stream(array).min().getAsInt(); - } + /** Driver Code */ + public static void main(String[] args) { + Random rand = new Random(); + + /* rand size */ + int size = rand.nextInt(100) + 1; + int[] array = new int[size]; - /** - * Get min of array using divide and conquer algorithm - * - * @param array contains elements - * @param low the index of the first element - * @param high the index of the last element - * @return min of {@code array} - */ - public static int min(int[] array, int low, int high) { - if (low == high) { - return array[low]; //or array[high] - } - - int mid = (low + high) >>> 1; - - int leftMin = min(array, low, mid); //get min in [low, mid] - int rightMin = min(array, mid + 1, high); //get min in [mid+1, high] - - return Math.min(leftMin, rightMin); + /* init array with rand numbers */ + for (int i = 0; i < size; i++) { + array[i] = rand.nextInt() % 100; } - /** - * Get min of array using recursion algorithm - * - * @param array contains elements - * @param len length of given array - * @return min value of {@code array} - */ - public static int min(int[] array, int len) { - return len == 1 ? array[0] : Math.min(min(array, len - 1), array[len - 1]); + assert min(array, 0, array.length - 1) == Arrays.stream(array).min().getAsInt(); + assert min(array, array.length) == Arrays.stream(array).min().getAsInt(); + } + + /** + * Get min of array using divide and conquer algorithm + * + * @param array contains elements + * @param low the index of the first element + * @param high the index of the last element + * @return min of {@code array} + */ + public static int min(int[] array, int low, int high) { + if (low == high) { + return array[low]; // or array[high] } + + int mid = (low + high) >>> 1; + + int leftMin = min(array, low, mid); // get min in [low, mid] + int rightMin = min(array, mid + 1, high); // get min in [mid+1, high] + + return Math.min(leftMin, rightMin); + } + + /** + * Get min of array using recursion algorithm + * + * @param array contains elements + * @param len length of given array + * @return min value of {@code array} + */ + public static int min(int[] array, int len) { + return len == 1 ? array[0] : Math.min(min(array, len - 1), array[len - 1]); + } } diff --git a/Maths/Floor.java b/Maths/Floor.java index 5bb4b86708f1..dbd41ac87344 100644 --- a/Maths/Floor.java +++ b/Maths/Floor.java @@ -3,27 +3,27 @@ import java.util.Random; public class Floor { - public static void main(String[] args) { - Random random = new Random(); - for (int i = 1; i <= 1000; ++i) { - double randomNumber = random.nextDouble(); - assert floor(randomNumber) == Math.floor(randomNumber); - } + public static void main(String[] args) { + Random random = new Random(); + for (int i = 1; i <= 1000; ++i) { + double randomNumber = random.nextDouble(); + assert floor(randomNumber) == Math.floor(randomNumber); } + } - /** - * Returns the largest (closest to positive infinity) - * - * @param number the number - * @return the largest (closest to positive infinity) of given {@code number} - */ - public static double floor(double number) { - if (number - (int) number == 0) { - return number; - } else if (number - (int) number > 0) { - return (int) number; - } else { - return (int) number - 1; - } + /** + * Returns the largest (closest to positive infinity) + * + * @param number the number + * @return the largest (closest to positive infinity) of given {@code number} + */ + public static double floor(double number) { + if (number - (int) number == 0) { + return number; + } else if (number - (int) number > 0) { + return (int) number; + } else { + return (int) number - 1; } -} \ No newline at end of file + } +} diff --git a/Maths/GCD.java b/Maths/GCD.java index bff1c33c80f5..0f17f6ea5f11 100644 --- a/Maths/GCD.java +++ b/Maths/GCD.java @@ -1,57 +1,57 @@ package Maths; /** - * This is Euclid's algorithm which is used to find the greatest common denominator - * Overide function name gcd + * This is Euclid's algorithm which is used to find the greatest common denominator Overide function + * name gcd * * @author Oskar Enmalm 3/10/17 */ public class GCD { - /** - * get greatest common divisor - * - * @param num1 the first number - * @param num2 the second number - * @return gcd - */ - public static int gcd(int num1, int num2) { - if (num1 < 0 || num2 < 0) { - throw new ArithmeticException(); - } - - if (num1 == 0 || num2 == 0) { - return Math.abs(num1 - num2); - } - - while (num1 % num2 != 0) { - int remainder = num1 % num2; - num1 = num2; - num2 = remainder; - } - return num2; + /** + * get greatest common divisor + * + * @param num1 the first number + * @param num2 the second number + * @return gcd + */ + public static int gcd(int num1, int num2) { + if (num1 < 0 || num2 < 0) { + throw new ArithmeticException(); } - /** - * get greatest common divisor in array - * - * @param number contains number - * @return gcd - */ - public static int gcd(int[] number) { - int result = number[0]; - for (int i = 1; i < number.length; i++) - // call gcd function (input two value) - result = gcd(result, number[i]); - - return result; + if (num1 == 0 || num2 == 0) { + return Math.abs(num1 - num2); } - public static void main(String[] args) { - int[] myIntArray = {4, 16, 32}; - - // call gcd function (input array) - System.out.println(gcd(myIntArray)); // => 4 - System.out.printf("gcd(40,24)=%d gcd(24,40)=%d%n", gcd(40, 24), gcd(24, 40)); // => 8 + while (num1 % num2 != 0) { + int remainder = num1 % num2; + num1 = num2; + num2 = remainder; } + return num2; + } + + /** + * get greatest common divisor in array + * + * @param number contains number + * @return gcd + */ + public static int gcd(int[] number) { + int result = number[0]; + for (int i = 1; i < number.length; i++) + // call gcd function (input two value) + result = gcd(result, number[i]); + + return result; + } + + public static void main(String[] args) { + int[] myIntArray = {4, 16, 32}; + + // call gcd function (input array) + System.out.println(gcd(myIntArray)); // => 4 + System.out.printf("gcd(40,24)=%d gcd(24,40)=%d%n", gcd(40, 24), gcd(24, 40)); // => 8 + } } diff --git a/Maths/GCDRecursion.java b/Maths/GCDRecursion.java index be5e2904733e..d0104d3db9e9 100644 --- a/Maths/GCDRecursion.java +++ b/Maths/GCDRecursion.java @@ -1,36 +1,34 @@ package Maths; -/** - * @author https://github.com/shellhub/ - */ +/** @author https://github.com/shellhub/ */ public class GCDRecursion { - public static void main(String[] args) { - System.out.println(gcd(20, 15)); /* output: 5 */ - System.out.println(gcd(10, 8)); /* output: 2 */ - System.out.println(gcd(gcd(10, 5), gcd(5, 10))); /* output: 5 */ - } + public static void main(String[] args) { + System.out.println(gcd(20, 15)); /* output: 5 */ + System.out.println(gcd(10, 8)); /* output: 2 */ + System.out.println(gcd(gcd(10, 5), gcd(5, 10))); /* output: 5 */ + } - /** - * get greatest common divisor - * - * @param a the first number - * @param b the second number - * @return gcd - */ - public static int gcd(int a, int b) { + /** + * get greatest common divisor + * + * @param a the first number + * @param b the second number + * @return gcd + */ + public static int gcd(int a, int b) { - if (a < 0 || b < 0) { - throw new ArithmeticException(); - } + if (a < 0 || b < 0) { + throw new ArithmeticException(); + } - if (a == 0 || b == 0) { - return Math.abs(a - b); - } + if (a == 0 || b == 0) { + return Math.abs(a - b); + } - if (a % b == 0) { - return b; - } else { - return gcd(b, a % b); - } + if (a % b == 0) { + return b; + } else { + return gcd(b, a % b); } + } } diff --git a/Maths/LucasSeries.java b/Maths/LucasSeries.java index 8fa7097ba1d0..ade5ab2c52fe 100644 --- a/Maths/LucasSeries.java +++ b/Maths/LucasSeries.java @@ -1,44 +1,43 @@ package Maths; -/** - * https://en.wikipedia.org/wiki/Lucas_number - */ +/** https://en.wikipedia.org/wiki/Lucas_number */ public class LucasSeries { - public static void main(String[] args) { - assert lucasSeries(1) == 2 && lucasSeriesIteration(1) == 2; - assert lucasSeries(2) == 1 && lucasSeriesIteration(2) == 1; - assert lucasSeries(3) == 3 && lucasSeriesIteration(3) == 3; - assert lucasSeries(4) == 4 && lucasSeriesIteration(4) == 4; - assert lucasSeries(5) == 7 && lucasSeriesIteration(5) == 7; - assert lucasSeries(6) == 11 && lucasSeriesIteration(6) == 11; - assert lucasSeries(11) == 123 && lucasSeriesIteration(11) == 123; + public static void main(String[] args) { + assert lucasSeries(1) == 2 && lucasSeriesIteration(1) == 2; + assert lucasSeries(2) == 1 && lucasSeriesIteration(2) == 1; + assert lucasSeries(3) == 3 && lucasSeriesIteration(3) == 3; + assert lucasSeries(4) == 4 && lucasSeriesIteration(4) == 4; + assert lucasSeries(5) == 7 && lucasSeriesIteration(5) == 7; + assert lucasSeries(6) == 11 && lucasSeriesIteration(6) == 11; + assert lucasSeries(11) == 123 && lucasSeriesIteration(11) == 123; + } - } - - /** - * Calculate nth number of lucas series(2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, ....) using recursion - * - * @param n nth - * @return nth number of lucas series - */ - public static int lucasSeries(int n) { - return n == 1 ? 2 : n == 2 ? 1 : lucasSeries(n - 1) + lucasSeries(n - 2); - } + /** + * Calculate nth number of lucas series(2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, ....) using + * recursion + * + * @param n nth + * @return nth number of lucas series + */ + public static int lucasSeries(int n) { + return n == 1 ? 2 : n == 2 ? 1 : lucasSeries(n - 1) + lucasSeries(n - 2); + } - /** - * Calculate nth number of lucas series(2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, ....) using iteration - * - * @param n nth - * @return nth number of lucas series - */ - public static int lucasSeriesIteration(int n) { - int previous = 2; - int current = 1; - for (int i = 1; i < n; i++) { - int next = previous + current; - previous = current; - current = next; - } - return previous; + /** + * Calculate nth number of lucas series(2, 1, 3, 4, 7, 11, 18, 29, 47, 76, 123, ....) using + * iteration + * + * @param n nth + * @return nth number of lucas series + */ + public static int lucasSeriesIteration(int n) { + int previous = 2; + int current = 1; + for (int i = 1; i < n; i++) { + int next = previous + current; + previous = current; + current = next; } + return previous; + } } diff --git a/Maths/MaxValue.java b/Maths/MaxValue.java index d163bd3cfdc1..504f87bc20a8 100644 --- a/Maths/MaxValue.java +++ b/Maths/MaxValue.java @@ -4,32 +4,29 @@ public class MaxValue { - /** - * Driver Code - */ - public static void main(String[] args) { - Random rand = new Random(); + /** Driver Code */ + public static void main(String[] args) { + Random rand = new Random(); - /* test 100 times using rand numbers */ - for (int i = 1; i <= 100; ++i) { - /* generate number from -50 to 49 */ - int a = rand.nextInt(100) - 50; - int b = rand.nextInt(100) - 50; - assert max(a, b) == Math.max(a, b); - } + /* test 100 times using rand numbers */ + for (int i = 1; i <= 100; ++i) { + /* generate number from -50 to 49 */ + int a = rand.nextInt(100) - 50; + int b = rand.nextInt(100) - 50; + assert max(a, b) == Math.max(a, b); } + } - /** - * Returns the greater of two {@code int} values. That is, the - * result is the argument closer to the value of - * {@link Integer#MAX_VALUE}. If the arguments have the same value, - * the result is that same value. - * - * @param a an argument. - * @param b another argument. - * @return the larger of {@code a} and {@code b}. - */ - public static int max(int a, int b) { - return a >= b ? a : b; - } + /** + * Returns the greater of two {@code int} values. That is, the result is the argument closer to + * the value of {@link Integer#MAX_VALUE}. If the arguments have the same value, the result is + * that same value. + * + * @param a an argument. + * @param b another argument. + * @return the larger of {@code a} and {@code b}. + */ + public static int max(int a, int b) { + return a >= b ? a : b; + } } diff --git a/Maths/Median.java b/Maths/Median.java index 849535838d7a..b0b011232a3c 100644 --- a/Maths/Median.java +++ b/Maths/Median.java @@ -2,27 +2,27 @@ import java.util.Arrays; -/** - * Wikipedia: https://en.wikipedia.org/wiki/Median - */ +/** Wikipedia: https://en.wikipedia.org/wiki/Median */ public class Median { - public static void main(String[] args) { - assert median(new int[]{0}) == 0; - assert median(new int[]{1, 2}) == 1.5; - assert median(new int[]{4, 1, 3, 2}) == 2.5; - assert median(new int[]{1, 3, 3, 6, 7, 8, 9}) == 6; - assert median(new int[]{1, 2, 3, 4, 5, 6, 8, 9}) == 4.5; - } + public static void main(String[] args) { + assert median(new int[] {0}) == 0; + assert median(new int[] {1, 2}) == 1.5; + assert median(new int[] {4, 1, 3, 2}) == 2.5; + assert median(new int[] {1, 3, 3, 6, 7, 8, 9}) == 6; + assert median(new int[] {1, 2, 3, 4, 5, 6, 8, 9}) == 4.5; + } - /** - * Calculate average median - * - * @param values number series - * @return median of given {@code values} - */ - public static double median(int[] values) { - Arrays.sort(values); - int length = values.length; - return length % 2 == 0 ? (values[length / 2] + values[length / 2 - 1]) / 2.0 : values[length / 2]; - } + /** + * Calculate average median + * + * @param values number series + * @return median of given {@code values} + */ + public static double median(int[] values) { + Arrays.sort(values); + int length = values.length; + return length % 2 == 0 + ? (values[length / 2] + values[length / 2 - 1]) / 2.0 + : values[length / 2]; + } } diff --git a/Maths/MinValue.java b/Maths/MinValue.java index 1e92169fce51..3bb4b5434113 100644 --- a/Maths/MinValue.java +++ b/Maths/MinValue.java @@ -4,32 +4,29 @@ public class MinValue { - /** - * Driver Code - */ - public static void main(String[] args) { - Random rand = new Random(); + /** Driver Code */ + public static void main(String[] args) { + Random rand = new Random(); - /* test 100 times using rand numbers */ - for (int i = 1; i <= 100; ++i) { - /* generate number from -50 to 49 */ - int a = rand.nextInt(100) - 50; - int b = rand.nextInt(100) - 50; - assert min(a, b) == Math.min(a, b); - } + /* test 100 times using rand numbers */ + for (int i = 1; i <= 100; ++i) { + /* generate number from -50 to 49 */ + int a = rand.nextInt(100) - 50; + int b = rand.nextInt(100) - 50; + assert min(a, b) == Math.min(a, b); } + } - /** - * Returns the smaller of two {@code int} values. That is, - * the result the argument closer to the value of - * {@link Integer#MIN_VALUE}. If the arguments have the same - * value, the result is that same value. - * - * @param a an argument. - * @param b another argument. - * @return the smaller of {@code a} and {@code b}. - */ - public static int min(int a, int b) { - return a <= b ? a : b; - } + /** + * Returns the smaller of two {@code int} values. That is, the result the argument closer to the + * value of {@link Integer#MIN_VALUE}. If the arguments have the same value, the result is that + * same value. + * + * @param a an argument. + * @param b another argument. + * @return the smaller of {@code a} and {@code b}. + */ + public static int min(int a, int b) { + return a <= b ? a : b; + } } diff --git a/Maths/Mode.java b/Maths/Mode.java index d43ea16e8646..5d28c8c8c4bf 100644 --- a/Maths/Mode.java +++ b/Maths/Mode.java @@ -7,57 +7,53 @@ /* * Find the mode of an array of numbers - * - * The mode of an array of numbers is the most frequently occurring number in the array, + * + * The mode of an array of numbers is the most frequently occurring number in the array, * or the most frequently occurring numbers if there are multiple numbers with the same frequency */ public class Mode { - - public static void main(String[] args) { - - /* Test array of integers */ - assert (mode(new int[]{})) == null; - assert Arrays.equals(mode(new int[]{5}), new int[]{5}); - assert Arrays.equals(mode(new int[]{1, 2, 3, 4, 5}), new int[]{1, 2, 3, 4, 5}); - assert Arrays.equals(mode(new int[]{7, 9, 9, 4, 5, 6, 7, 7, 8}), new int[]{7}); - assert Arrays.equals(mode(new int[]{7, 9, 9, 4, 5, 6, 7, 7, 9}), new int[]{7, 9}); - - } - - /* - * Find the mode of an array of integers - * - * @param numbers array of integers - * @return mode of the array - */ - public static int[] mode(int[] numbers) { - - if(numbers.length == 0) return null; - - HashMap count = new HashMap<>(); - - for(int num : numbers) { - if(count.containsKey(num)) { - - count.put(num, count.get(num) + 1); - - } else { - - count.put(num, 1); - - } - - } - - int max = Collections.max(count.values()); - ArrayList modes = new ArrayList<>(); - - for(int num : count.keySet()) { - if(count.get(num) == max) { - modes.add(num); - } - } - return modes.stream().mapToInt(n -> n).toArray(); - } - + + public static void main(String[] args) { + + /* Test array of integers */ + assert (mode(new int[] {})) == null; + assert Arrays.equals(mode(new int[] {5}), new int[] {5}); + assert Arrays.equals(mode(new int[] {1, 2, 3, 4, 5}), new int[] {1, 2, 3, 4, 5}); + assert Arrays.equals(mode(new int[] {7, 9, 9, 4, 5, 6, 7, 7, 8}), new int[] {7}); + assert Arrays.equals(mode(new int[] {7, 9, 9, 4, 5, 6, 7, 7, 9}), new int[] {7, 9}); + } + + /* + * Find the mode of an array of integers + * + * @param numbers array of integers + * @return mode of the array + */ + public static int[] mode(int[] numbers) { + + if (numbers.length == 0) return null; + + HashMap count = new HashMap<>(); + + for (int num : numbers) { + if (count.containsKey(num)) { + + count.put(num, count.get(num) + 1); + + } else { + + count.put(num, 1); + } + } + + int max = Collections.max(count.values()); + ArrayList modes = new ArrayList<>(); + + for (int num : count.keySet()) { + if (count.get(num) == max) { + modes.add(num); + } + } + return modes.stream().mapToInt(n -> n).toArray(); + } } diff --git a/Maths/NumberOfDigits.java b/Maths/NumberOfDigits.java index 9e760727ae8b..acc9f8c91cb0 100644 --- a/Maths/NumberOfDigits.java +++ b/Maths/NumberOfDigits.java @@ -1,62 +1,59 @@ package Maths; -/** - * Find the number of digits in a number. - */ +/** Find the number of digits in a number. */ public class NumberOfDigits { - public static void main(String[] args) { - int[] numbers = {0, 12, 123, 1234, -12345, 123456, 1234567, 12345678, 123456789}; - for (int i = 0; i < numbers.length; ++i) { - assert numberOfDigits(numbers[i]) == i + 1; - assert numberOfDigitsFast(numbers[i]) == i + 1; - assert numberOfDigitsFaster(numbers[i]) == i + 1; - assert numberOfDigitsRecursion(numbers[i]) == i + 1; - } + public static void main(String[] args) { + int[] numbers = {0, 12, 123, 1234, -12345, 123456, 1234567, 12345678, 123456789}; + for (int i = 0; i < numbers.length; ++i) { + assert numberOfDigits(numbers[i]) == i + 1; + assert numberOfDigitsFast(numbers[i]) == i + 1; + assert numberOfDigitsFaster(numbers[i]) == i + 1; + assert numberOfDigitsRecursion(numbers[i]) == i + 1; } + } - /** - * Find the number of digits in a number. - * - * @param number number to find - * @return number of digits of given number - */ - private static int numberOfDigits(int number) { - int digits = 0; - do { - digits++; - number /= 10; - } while (number != 0); - return digits; - } + /** + * Find the number of digits in a number. + * + * @param number number to find + * @return number of digits of given number + */ + private static int numberOfDigits(int number) { + int digits = 0; + do { + digits++; + number /= 10; + } while (number != 0); + return digits; + } - /** - * Find the number of digits in a number fast version. - * - * @param number number to find - * @return number of digits of given number - */ - private static int numberOfDigitsFast(int number) { - return number == 0 ? 1 : (int) Math.floor(Math.log10(Math.abs(number)) + 1); - } + /** + * Find the number of digits in a number fast version. + * + * @param number number to find + * @return number of digits of given number + */ + private static int numberOfDigitsFast(int number) { + return number == 0 ? 1 : (int) Math.floor(Math.log10(Math.abs(number)) + 1); + } + /** + * Find the number of digits in a number faster version. + * + * @param number number to find + * @return number of digits of given number + */ + private static int numberOfDigitsFaster(int number) { + return number < 0 ? (-number + "").length() : (number + "").length(); + } - /** - * Find the number of digits in a number faster version. - * - * @param number number to find - * @return number of digits of given number - */ - private static int numberOfDigitsFaster(int number) { - return number < 0 ? (-number + "").length() : (number + "").length(); - } - - /** - * Find the number of digits in a number using recursion. - * - * @param number number to find - * @return number of digits of given number - */ - private static int numberOfDigitsRecursion(int number) { - return number / 10 == 0 ? 1 : 1 + numberOfDigitsRecursion(number / 10); - } + /** + * Find the number of digits in a number using recursion. + * + * @param number number to find + * @return number of digits of given number + */ + private static int numberOfDigitsRecursion(int number) { + return number / 10 == 0 ? 1 : 1 + numberOfDigitsRecursion(number / 10); + } } diff --git a/Maths/PalindromeNumber.java b/Maths/PalindromeNumber.java index 2916c753e67a..08c4ba01bea7 100644 --- a/Maths/PalindromeNumber.java +++ b/Maths/PalindromeNumber.java @@ -1,30 +1,30 @@ package Maths; public class PalindromeNumber { - public static void main(String[] args) { + public static void main(String[] args) { - assert isPalindrome(12321); - assert !isPalindrome(1234); - assert isPalindrome(1); - } + assert isPalindrome(12321); + assert !isPalindrome(1234); + assert isPalindrome(1); + } - /** - * Check if {@code n} is palindrome number or not - * - * @param number the number - * @return {@code true} if {@code n} is palindrome number, otherwise {@code false} - */ - public static boolean isPalindrome(int number) { - if (number < 0) { - throw new IllegalArgumentException(number + ""); - } - int numberCopy = number; - int reverseNumber = 0; - while (numberCopy != 0) { - int remainder = numberCopy % 10; - reverseNumber = reverseNumber * 10 + remainder; - numberCopy /= 10; - } - return number == reverseNumber; + /** + * Check if {@code n} is palindrome number or not + * + * @param number the number + * @return {@code true} if {@code n} is palindrome number, otherwise {@code false} + */ + public static boolean isPalindrome(int number) { + if (number < 0) { + throw new IllegalArgumentException(number + ""); + } + int numberCopy = number; + int reverseNumber = 0; + while (numberCopy != 0) { + int remainder = numberCopy % 10; + reverseNumber = reverseNumber * 10 + remainder; + numberCopy /= 10; } + return number == reverseNumber; + } } diff --git a/Maths/ParseInteger.java b/Maths/ParseInteger.java index c9c11528c1dc..cf9c9efc88fd 100644 --- a/Maths/ParseInteger.java +++ b/Maths/ParseInteger.java @@ -1,33 +1,33 @@ package Maths; public class ParseInteger { - public static void main(String[] args) { - assert parseInt("123") == Integer.parseInt("123"); - assert parseInt("-123") == Integer.parseInt("-123"); - assert parseInt("0123") == Integer.parseInt("0123"); - assert parseInt("+123") == Integer.parseInt("+123"); - } + public static void main(String[] args) { + assert parseInt("123") == Integer.parseInt("123"); + assert parseInt("-123") == Integer.parseInt("-123"); + assert parseInt("0123") == Integer.parseInt("0123"); + assert parseInt("+123") == Integer.parseInt("+123"); + } - /** - * Parse a string to integer - * - * @param s the string - * @return the integer value represented by the argument in decimal. - * @throws NumberFormatException if the {@code string} does not contain a parsable integer. - */ - public static int parseInt(String s) { - if (s == null || s.length() == 0) { - throw new NumberFormatException("null"); - } - boolean isNegative = s.charAt(0) == '-'; - boolean isPositive = s.charAt(0) == '+'; - int number = 0; - for (int i = isNegative ? 1 : isPositive ? 1 : 0, length = s.length(); i < length; ++i) { - if (!Character.isDigit(s.charAt(i))) { - throw new NumberFormatException("s=" + s); - } - number = number * 10 + s.charAt(i) - '0'; - } - return isNegative ? -number : number; + /** + * Parse a string to integer + * + * @param s the string + * @return the integer value represented by the argument in decimal. + * @throws NumberFormatException if the {@code string} does not contain a parsable integer. + */ + public static int parseInt(String s) { + if (s == null || s.length() == 0) { + throw new NumberFormatException("null"); + } + boolean isNegative = s.charAt(0) == '-'; + boolean isPositive = s.charAt(0) == '+'; + int number = 0; + for (int i = isNegative ? 1 : isPositive ? 1 : 0, length = s.length(); i < length; ++i) { + if (!Character.isDigit(s.charAt(i))) { + throw new NumberFormatException("s=" + s); + } + number = number * 10 + s.charAt(i) - '0'; } + return isNegative ? -number : number; + } } diff --git a/Maths/PerfectCube.java b/Maths/PerfectCube.java index 1db0dc3e9002..2ecb8e805a42 100644 --- a/Maths/PerfectCube.java +++ b/Maths/PerfectCube.java @@ -1,27 +1,24 @@ package Maths; -/** - * https://en.wikipedia.org/wiki/Cube_(algebra) - */ +/** https://en.wikipedia.org/wiki/Cube_(algebra) */ public class PerfectCube { - public static void main(String[] args) { - assert !isPerfectCube(-1); - assert isPerfectCube(0); - assert isPerfectCube(1); - assert !isPerfectCube(4); - assert isPerfectCube(8); - assert isPerfectCube(27); + public static void main(String[] args) { + assert !isPerfectCube(-1); + assert isPerfectCube(0); + assert isPerfectCube(1); + assert !isPerfectCube(4); + assert isPerfectCube(8); + assert isPerfectCube(27); + } - } - - /** - * Check if a number is perfect cube or not - * - * @param number number to check - * @return {@code true} if {@code number} is perfect cube, otherwise {@code false} - */ - public static boolean isPerfectCube(int number) { - int a = (int) Math.pow(number, 1.0 / 3); - return a * a * a == number; - } + /** + * Check if a number is perfect cube or not + * + * @param number number to check + * @return {@code true} if {@code number} is perfect cube, otherwise {@code false} + */ + public static boolean isPerfectCube(int number) { + int a = (int) Math.pow(number, 1.0 / 3); + return a * a * a == number; + } } diff --git a/Maths/PerfectNumber.java b/Maths/PerfectNumber.java index ceaf0b2bca3e..de56c4175c02 100644 --- a/Maths/PerfectNumber.java +++ b/Maths/PerfectNumber.java @@ -1,33 +1,32 @@ package Maths; /** - * In number theory, a perfect number is a positive integer that is equal to the sum of - * its positive divisors, excluding the number itself. For instance, 6 has divisors 1, 2 and 3 - * (excluding itself), and 1 + 2 + 3 = 6, so 6 is a perfect number. - *

- * link:https://en.wikipedia.org/wiki/Perfect_number - *

+ * In number theory, a perfect number is a positive integer that is equal to the sum of its positive + * divisors, excluding the number itself. For instance, 6 has divisors 1, 2 and 3 (excluding + * itself), and 1 + 2 + 3 = 6, so 6 is a perfect number. + * + *

link:https://en.wikipedia.org/wiki/Perfect_number */ public class PerfectNumber { - public static void main(String[] args) { - assert isPerfectNumber(6); /* 1 + 2 + 3 == 6 */ - assert !isPerfectNumber(8); /* 1 + 2 + 4 != 8 */ - assert isPerfectNumber(28); /* 1 + 2 + 4 + 7 + 14 == 28 */ - } + public static void main(String[] args) { + assert isPerfectNumber(6); /* 1 + 2 + 3 == 6 */ + assert !isPerfectNumber(8); /* 1 + 2 + 4 != 8 */ + assert isPerfectNumber(28); /* 1 + 2 + 4 + 7 + 14 == 28 */ + } - /** - * Check if {@code number} is perfect number or not - * - * @param number the number - * @return {@code true} if {@code number} is perfect number, otherwise false - */ - public static boolean isPerfectNumber(int number) { - int sum = 0; /* sum of its positive divisors */ - for (int i = 1; i < number; ++i) { - if (number % i == 0) { - sum += i; - } - } - return sum == number; + /** + * Check if {@code number} is perfect number or not + * + * @param number the number + * @return {@code true} if {@code number} is perfect number, otherwise false + */ + public static boolean isPerfectNumber(int number) { + int sum = 0; /* sum of its positive divisors */ + for (int i = 1; i < number; ++i) { + if (number % i == 0) { + sum += i; + } } + return sum == number; + } } diff --git a/Maths/PerfectSquare.java b/Maths/PerfectSquare.java index 7484b2fdaba7..aef645e2ed2b 100644 --- a/Maths/PerfectSquare.java +++ b/Maths/PerfectSquare.java @@ -1,25 +1,23 @@ package Maths; -/** - * https://en.wikipedia.org/wiki/Perfect_square - */ +/** https://en.wikipedia.org/wiki/Perfect_square */ public class PerfectSquare { - public static void main(String[] args) { - assert !isPerfectSquare(-1); - assert !isPerfectSquare(3); - assert !isPerfectSquare(5); - assert isPerfectSquare(9); - assert isPerfectSquare(100); - } + public static void main(String[] args) { + assert !isPerfectSquare(-1); + assert !isPerfectSquare(3); + assert !isPerfectSquare(5); + assert isPerfectSquare(9); + assert isPerfectSquare(100); + } - /** - * Check if a number is perfect square number - * - * @param number the number to be checked - * @return true if {@code number} is perfect square, otherwise false - */ - public static boolean isPerfectSquare(int number) { - int sqrt = (int) Math.sqrt(number); - return sqrt * sqrt == number; - } -} \ No newline at end of file + /** + * Check if a number is perfect square number + * + * @param number the number to be checked + * @return true if {@code number} is perfect square, otherwise false + */ + public static boolean isPerfectSquare(int number) { + int sqrt = (int) Math.sqrt(number); + return sqrt * sqrt == number; + } +} diff --git a/Maths/Pow.java b/Maths/Pow.java index ac58fbbbe7cd..6af5446510af 100644 --- a/Maths/Pow.java +++ b/Maths/Pow.java @@ -1,27 +1,26 @@ package Maths; -//POWER (exponentials) Examples (a^b) +// POWER (exponentials) Examples (a^b) public class Pow { - public static void main(String[] args) { - assert pow(2, 0) == Math.pow(2, 0); // == 1 - assert pow(0, 2) == Math.pow(0, 2); // == 0 - assert pow(2, 10) == Math.pow(2, 10); // == 1024 - assert pow(10, 2) == Math.pow(10, 2); // == 100 - } + public static void main(String[] args) { + assert pow(2, 0) == Math.pow(2, 0); // == 1 + assert pow(0, 2) == Math.pow(0, 2); // == 0 + assert pow(2, 10) == Math.pow(2, 10); // == 1024 + assert pow(10, 2) == Math.pow(10, 2); // == 100 + } - /** - * Returns the value of the first argument raised to the power of the - * second argument - * - * @param a the base. - * @param b the exponent. - * @return the value {@code a}{@code b}. - */ - public static long pow(int a, int b) { - long result = 1; - for (int i = 1; i <= b; i++) { - result *= a; - } - return result; + /** + * Returns the value of the first argument raised to the power of the second argument + * + * @param a the base. + * @param b the exponent. + * @return the value {@code a}{@code b}. + */ + public static long pow(int a, int b) { + long result = 1; + for (int i = 1; i <= b; i++) { + result *= a; } + return result; + } } diff --git a/Maths/PowRecursion.java b/Maths/PowRecursion.java index dab336b306fe..598fc724e54a 100644 --- a/Maths/PowRecursion.java +++ b/Maths/PowRecursion.java @@ -1,22 +1,21 @@ package Maths; public class PowRecursion { - public static void main(String[] args) { - assert Double.compare(pow(2, 0), Math.pow(2, 0)) == 0; - assert Double.compare(pow(0, 2), Math.pow(0, 2)) == 0; - assert Double.compare(pow(2, 10), Math.pow(2, 10)) == 0; - assert Double.compare(pow(10, 2), Math.pow(10, 2)) == 0; - } + public static void main(String[] args) { + assert Double.compare(pow(2, 0), Math.pow(2, 0)) == 0; + assert Double.compare(pow(0, 2), Math.pow(0, 2)) == 0; + assert Double.compare(pow(2, 10), Math.pow(2, 10)) == 0; + assert Double.compare(pow(10, 2), Math.pow(10, 2)) == 0; + } - /** - * Returns the value of the first argument raised to the power of the - * second argument - * - * @param a the base. - * @param b the exponent. - * @return the value {@code a}{@code b}. - */ - public static long pow(int a, int b) { - return b == 0 ? 1 : a * pow(a, b - 1); - } -} \ No newline at end of file + /** + * Returns the value of the first argument raised to the power of the second argument + * + * @param a the base. + * @param b the exponent. + * @return the value {@code a}{@code b}. + */ + public static long pow(int a, int b) { + return b == 0 ? 1 : a * pow(a, b - 1); + } +} diff --git a/Maths/PowerOfTwoOrNot.java b/Maths/PowerOfTwoOrNot.java index d03151bcbbb7..329f64d139f2 100644 --- a/Maths/PowerOfTwoOrNot.java +++ b/Maths/PowerOfTwoOrNot.java @@ -1,28 +1,23 @@ package Maths; -/** - * A utility to check if a given number is power of two or not. - * For example 8,16 etc. - */ - +/** A utility to check if a given number is power of two or not. For example 8,16 etc. */ public class PowerOfTwoOrNot { - public static void main(String[] args) { - assert !checkIfPowerOfTwoOrNot(0); - assert checkIfPowerOfTwoOrNot(1); - assert checkIfPowerOfTwoOrNot(8); - assert checkIfPowerOfTwoOrNot(16); - assert checkIfPowerOfTwoOrNot(1024); - } - + public static void main(String[] args) { + assert !checkIfPowerOfTwoOrNot(0); + assert checkIfPowerOfTwoOrNot(1); + assert checkIfPowerOfTwoOrNot(8); + assert checkIfPowerOfTwoOrNot(16); + assert checkIfPowerOfTwoOrNot(1024); + } - /** - * Checks whether given number is power of two or not. - * - * @param number the number to check - * @return {@code true} if given number is power of two, otherwise {@code false} - */ - public static boolean checkIfPowerOfTwoOrNot(int number) { - return number != 0 && ((number & (number - 1)) == 0); - } + /** + * Checks whether given number is power of two or not. + * + * @param number the number to check + * @return {@code true} if given number is power of two, otherwise {@code false} + */ + public static boolean checkIfPowerOfTwoOrNot(int number) { + return number != 0 && ((number & (number - 1)) == 0); + } } diff --git a/Maths/PrimeCheck.java b/Maths/PrimeCheck.java index c972aa8c3e5a..6ea901a8a73e 100644 --- a/Maths/PrimeCheck.java +++ b/Maths/PrimeCheck.java @@ -3,36 +3,36 @@ import java.util.Scanner; public class PrimeCheck { - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); - System.out.print("Enter a number: "); - int n = scanner.nextInt(); - if (isPrime(n)) { - System.out.println(n + " is a prime number"); - } else { - System.out.println(n + " is not a prime number"); - } - scanner.close(); + System.out.print("Enter a number: "); + int n = scanner.nextInt(); + if (isPrime(n)) { + System.out.println(n + " is a prime number"); + } else { + System.out.println(n + " is not a prime number"); } + scanner.close(); + } - /*** - * Checks if a number is prime or not - * @param n the number - * @return {@code true} if {@code n} is prime - */ - public static boolean isPrime(int n) { - if (n == 2) { - return true; - } - if (n < 2 || n % 2 == 0) { - return false; - } - for (int i = 3, limit = (int) Math.sqrt(n); i <= limit; i += 2) { - if (n % i == 0) { - return false; - } - } - return true; + /*** + * Checks if a number is prime or not + * @param n the number + * @return {@code true} if {@code n} is prime + */ + public static boolean isPrime(int n) { + if (n == 2) { + return true; } + if (n < 2 || n % 2 == 0) { + return false; + } + for (int i = 3, limit = (int) Math.sqrt(n); i <= limit; i += 2) { + if (n % i == 0) { + return false; + } + } + return true; + } } diff --git a/Maths/PrimeFactorization.java b/Maths/PrimeFactorization.java index bba2057d8ea9..79e12a7dc49b 100644 --- a/Maths/PrimeFactorization.java +++ b/Maths/PrimeFactorization.java @@ -1,36 +1,32 @@ package Maths; -import java.lang.Math; import java.util.Scanner; public class PrimeFactorization { - public static void main(String[] args){ - System.out.println("## all prime factors ##"); - Scanner scanner = new Scanner(System.in); - System.out.print("Enter a number: "); - int n = scanner.nextInt(); - System.out.print(("printing factors of " + n + " : ")); - pfactors(n); - scanner.close(); - } - public static void pfactors(int n){ + public static void main(String[] args) { + System.out.println("## all prime factors ##"); + Scanner scanner = new Scanner(System.in); + System.out.print("Enter a number: "); + int n = scanner.nextInt(); + System.out.print(("printing factors of " + n + " : ")); + pfactors(n); + scanner.close(); + } - while (n%2==0) - { - System.out.print(2 + " "); - n /= 2; - } + public static void pfactors(int n) { - for (int i=3; i<= Math.sqrt(n); i+=2) - { - while (n%i == 0) - { - System.out.print(i + " "); - n /= i; - } - } + while (n % 2 == 0) { + System.out.print(2 + " "); + n /= 2; + } - if(n > 2) - System.out.print(n); + for (int i = 3; i <= Math.sqrt(n); i += 2) { + while (n % i == 0) { + System.out.print(i + " "); + n /= i; + } } + + if (n > 2) System.out.print(n); + } } diff --git a/Maths/PythagoreanTriple.java b/Maths/PythagoreanTriple.java index 4eae9615fe04..5aaf95c7550e 100644 --- a/Maths/PythagoreanTriple.java +++ b/Maths/PythagoreanTriple.java @@ -1,32 +1,30 @@ package Maths; -/** - * https://en.wikipedia.org/wiki/Pythagorean_triple - * - */ +/** https://en.wikipedia.org/wiki/Pythagorean_triple */ public class PythagoreanTriple { - public static void main(String[] args) { - assert isPythagTriple(3,4,5); - assert isPythagTriple(5,12,13); - assert isPythagTriple(6,8,10); - assert !isPythagTriple(10,20,30); - assert !isPythagTriple(6,8,100); - assert !isPythagTriple(-1,-1,1); - } - - /** - * Check if a,b,c are a Pythagorean Triple - * - * @param a x/y component length of a right triangle - * @param b y/x component length of a right triangle - * @param c hypotenuse length of a right triangle - * @return boolean true if a, b, c satisfy the Pythagorean theorem, otherwise false - */ - public static boolean isPythagTriple(int a, int b, int c) { - if(a <= 0 || b <= 0 || c <= 0) { - return false; - } else { - return (a * a) + (b * b) == (c * c); - } - } + public static void main(String[] args) { + assert isPythagTriple(3, 4, 5); + assert isPythagTriple(5, 12, 13); + assert isPythagTriple(6, 8, 10); + assert !isPythagTriple(10, 20, 30); + assert !isPythagTriple(6, 8, 100); + assert !isPythagTriple(-1, -1, 1); + } + + /** + * Check if a,b,c are a Pythagorean Triple + * + * @param a x/y component length of a right triangle + * @param b y/x component length of a right triangle + * @param c hypotenuse length of a right triangle + * @return boolean true if a, b, c satisfy the Pythagorean theorem, otherwise + * false + */ + public static boolean isPythagTriple(int a, int b, int c) { + if (a <= 0 || b <= 0 || c <= 0) { + return false; + } else { + return (a * a) + (b * b) == (c * c); + } + } } diff --git a/Maths/SumOfArithmeticSeries.java b/Maths/SumOfArithmeticSeries.java index 5d03c2308d30..01e7c3a0357c 100644 --- a/Maths/SumOfArithmeticSeries.java +++ b/Maths/SumOfArithmeticSeries.java @@ -1,40 +1,40 @@ package Maths; /** - *

- * In mathematics, an arithmetic progression (AP) or arithmetic sequence is a sequence of numbers such that the - * difference between the consecutive terms is constant. Difference here means the second minus the first. - * For instance, the sequence 5, 7, 9, 11, 13, 15, . . . is an arithmetic progression with common difference of 2. - *

- * Wikipedia: https://en.wikipedia.org/wiki/Arithmetic_progression + * In mathematics, an arithmetic progression (AP) or arithmetic sequence is a sequence of numbers + * such that the difference between the consecutive terms is constant. Difference here means the + * second minus the first. For instance, the sequence 5, 7, 9, 11, 13, 15, . . . is an arithmetic + * progression with common difference of 2. + * + *

Wikipedia: https://en.wikipedia.org/wiki/Arithmetic_progression */ public class SumOfArithmeticSeries { - public static void main(String[] args) { + public static void main(String[] args) { - /* 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 */ - assert Double.compare(55.0, sumOfSeries(1, 1, 10)) == 0; + /* 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 */ + assert Double.compare(55.0, sumOfSeries(1, 1, 10)) == 0; - /* 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 */ - assert Double.compare(100.0, sumOfSeries(1, 2, 10)) == 0; + /* 1 + 3 + 5 + 7 + 9 + 11 + 13 + 15 + 17 + 19 */ + assert Double.compare(100.0, sumOfSeries(1, 2, 10)) == 0; - /* 1 + 11 + 21 + 31 + 41 + 51 + 61 + 71 + 81 + 91 */ - assert Double.compare(460.0, sumOfSeries(1, 10, 10)) == 0; + /* 1 + 11 + 21 + 31 + 41 + 51 + 61 + 71 + 81 + 91 */ + assert Double.compare(460.0, sumOfSeries(1, 10, 10)) == 0; - /* 0.1 + 0.2 + 0.3 + 0.4 + 0.5 + 0.6 + 0.7 + 0.8 + 0.9 + 1.0 */ - assert Double.compare(5.5, sumOfSeries(0.1, 0.1, 10)) == 0; + /* 0.1 + 0.2 + 0.3 + 0.4 + 0.5 + 0.6 + 0.7 + 0.8 + 0.9 + 1.0 */ + assert Double.compare(5.5, sumOfSeries(0.1, 0.1, 10)) == 0; - assert Double.compare(49600.0, sumOfSeries(1, 10, 100)) == 0; - } + assert Double.compare(49600.0, sumOfSeries(1, 10, 100)) == 0; + } - /** - * Calculate sum of arithmetic series - * - * @param firstTerm the initial term of an arithmetic series - * @param commonDiff the common difference of an arithmetic series - * @param numOfTerms the total terms of an arithmetic series - * @return sum of given arithmetic series - */ - private static double sumOfSeries(double firstTerm, double commonDiff, int numOfTerms) { - return numOfTerms / 2.0 * (2 * firstTerm + (numOfTerms - 1) * commonDiff); - } -} \ No newline at end of file + /** + * Calculate sum of arithmetic series + * + * @param firstTerm the initial term of an arithmetic series + * @param commonDiff the common difference of an arithmetic series + * @param numOfTerms the total terms of an arithmetic series + * @return sum of given arithmetic series + */ + private static double sumOfSeries(double firstTerm, double commonDiff, int numOfTerms) { + return numOfTerms / 2.0 * (2 * firstTerm + (numOfTerms - 1) * commonDiff); + } +} diff --git a/Maths/SumOfDigits.java b/Maths/SumOfDigits.java index baa798a39e5d..11b3726a9ddf 100644 --- a/Maths/SumOfDigits.java +++ b/Maths/SumOfDigits.java @@ -1,62 +1,56 @@ package Maths; public class SumOfDigits { - public static void main(String[] args) { - assert - sumOfDigits(-123) == 6 - && sumOfDigitsRecursion(-123) == 6 - && sumOfDigitsFast(-123) == 6; + public static void main(String[] args) { + assert sumOfDigits(-123) == 6 && sumOfDigitsRecursion(-123) == 6 && sumOfDigitsFast(-123) == 6; - assert sumOfDigits(0) == 0 - && sumOfDigitsRecursion(0) == 0 - && sumOfDigitsFast(0) == 0; + assert sumOfDigits(0) == 0 && sumOfDigitsRecursion(0) == 0 && sumOfDigitsFast(0) == 0; + assert sumOfDigits(12345) == 15 + && sumOfDigitsRecursion(12345) == 15 + && sumOfDigitsFast(12345) == 15; + } - assert sumOfDigits(12345) == 15 - && sumOfDigitsRecursion(12345) == 15 - && sumOfDigitsFast(12345) == 15; + /** + * Calculate the sum of digits of a number + * + * @param number the number contains digits + * @return sum of digits of given {@code number} + */ + public static int sumOfDigits(int number) { + number = number < 0 ? -number : number; /* calculate abs value */ + int sum = 0; + while (number != 0) { + sum += number % 10; + number /= 10; } + return sum; + } - /** - * Calculate the sum of digits of a number - * - * @param number the number contains digits - * @return sum of digits of given {@code number} - */ - public static int sumOfDigits(int number) { - number = number < 0 ? -number : number; /* calculate abs value */ - int sum = 0; - while (number != 0) { - sum += number % 10; - number /= 10; - } - return sum; - } - - /** - * Calculate the sum of digits of a number using recursion - * - * @param number the number contains digits - * @return sum of digits of given {@code number} - */ - public static int sumOfDigitsRecursion(int number) { - number = number < 0 ? -number : number; /* calculate abs value */ - return number < 10 ? number : number % 10 + sumOfDigitsRecursion(number / 10); - } + /** + * Calculate the sum of digits of a number using recursion + * + * @param number the number contains digits + * @return sum of digits of given {@code number} + */ + public static int sumOfDigitsRecursion(int number) { + number = number < 0 ? -number : number; /* calculate abs value */ + return number < 10 ? number : number % 10 + sumOfDigitsRecursion(number / 10); + } - /** - * Calculate the sum of digits of a number using char array - * - * @param number the number contains digits - * @return sum of digits of given {@code number} - */ - public static int sumOfDigitsFast(int number) { - number = number < 0 ? -number : number; /* calculate abs value */ - char[] digits = (number + "").toCharArray(); - int sum = 0; - for (int i = 0; i < digits.length; ++i) { - sum += digits[i] - '0'; - } - return sum; + /** + * Calculate the sum of digits of a number using char array + * + * @param number the number contains digits + * @return sum of digits of given {@code number} + */ + public static int sumOfDigitsFast(int number) { + number = number < 0 ? -number : number; /* calculate abs value */ + char[] digits = (number + "").toCharArray(); + int sum = 0; + for (int i = 0; i < digits.length; ++i) { + sum += digits[i] - '0'; } + return sum; + } } diff --git a/Maths/VampireNumber.java b/Maths/VampireNumber.java index 056ce681a4ae..e09dd0bb0cf8 100644 --- a/Maths/VampireNumber.java +++ b/Maths/VampireNumber.java @@ -2,93 +2,77 @@ import java.util.ArrayList; import java.util.Collections; -import java.util.List; /** - n number theory, a vampire number (or true vampire number) is a composite natural number with an even number of digits, - that can be factored into two natural numbers each with half as many digits as the original number - and not both with trailing zeroes, where the two factors contain precisely - all the digits of the original number, in any order, counting multiplicity. - The first vampire number is 1260 = 21 × 60. - * * - *

- * * link: https://en.wikipedia.org/wiki/Vampire_number - * *

- *

+ * n number theory, a vampire number (or true vampire number) is a composite natural number with an + * even number of digits, that can be factored into two natural numbers each with half as many + * digits as the original number and not both with trailing zeroes, where the two factors contain + * precisely all the digits of the original number, in any order, counting multiplicity. The first + * vampire number is 1260 = 21 × 60. * * + *

* link: https://en.wikipedia.org/wiki/Vampire_number * + * + *

*/ - - - - - - - public class VampireNumber { - public static void main(String[] args) { - - test(10,1000); - } - - static void test(int startValue, int stopValue) { - int countofRes = 1; - StringBuilder res = new StringBuilder(); + public static void main(String[] args) { + test(10, 1000); + } - for (int i = startValue; i <= stopValue; i++) { - for (int j = i; j <= stopValue; j++) { - // System.out.println(i+ " "+ j); - if (isVampireNumber(i, j,true)) { - countofRes++; - res.append("" + countofRes + ": = ( " + i + "," + j + " = " + i*j + ")" + "\n"); - } - } - } - System.out.println(res); - } - - - - - static boolean isVampireNumber(int a, int b, boolean noPseudoVamireNumbers ) { - - // this is for pseudoVampireNumbers pseudovampire number need not be of length n/2 digits for example - // 126 = 6 x 21 - if (noPseudoVamireNumbers) { - if (a * 10 <= b || b * 10 <= a) { - return false; - } - } - - String mulDigits = splitIntoDigits(a*b,0); - String faktorDigits = splitIntoDigits(a,b); - - return mulDigits.equals(faktorDigits); - } + static void test(int startValue, int stopValue) { + int countofRes = 1; + StringBuilder res = new StringBuilder(); + for (int i = startValue; i <= stopValue; i++) { + for (int j = i; j <= stopValue; j++) { + // System.out.println(i+ " "+ j); + if (isVampireNumber(i, j, true)) { + countofRes++; + res.append("" + countofRes + ": = ( " + i + "," + j + " = " + i * j + ")" + "\n"); + } + } + } + System.out.println(res); + } + + static boolean isVampireNumber(int a, int b, boolean noPseudoVamireNumbers) { + + // this is for pseudoVampireNumbers pseudovampire number need not be of length n/2 digits for + // example + // 126 = 6 x 21 + if (noPseudoVamireNumbers) { + if (a * 10 <= b || b * 10 <= a) { + return false; + } + } + String mulDigits = splitIntoDigits(a * b, 0); + String faktorDigits = splitIntoDigits(a, b); -// methode to Split the numbers to Digits - static String splitIntoDigits(int num, int num2) { + return mulDigits.equals(faktorDigits); + } - StringBuilder res = new StringBuilder(); + // methode to Split the numbers to Digits + static String splitIntoDigits(int num, int num2) { - ArrayList digits = new ArrayList<>(); - while (num > 0) { - digits.add(num%10); - num /= 10; - } - while (num2 > 0) { - digits.add(num2%10); - num2/= 10; - } - Collections.sort(digits); - for (int i : digits) { - res.append(i); - } + StringBuilder res = new StringBuilder(); + ArrayList digits = new ArrayList<>(); + while (num > 0) { + digits.add(num % 10); + num /= 10; + } + while (num2 > 0) { + digits.add(num2 % 10); + num2 /= 10; + } + Collections.sort(digits); + for (int i : digits) { + res.append(i); + } - return res.toString(); - } + return res.toString(); + } } diff --git a/MinimizingLateness/MinimizingLateness.java b/MinimizingLateness/MinimizingLateness.java index 46e6fb4e06d7..cf06a0d44a70 100644 --- a/MinimizingLateness/MinimizingLateness.java +++ b/MinimizingLateness/MinimizingLateness.java @@ -1,6 +1,5 @@ package MinimizingLateness; - import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; @@ -8,52 +7,54 @@ public class MinimizingLateness { - private static class Schedule { // Schedule class - int t = 0; // Time required for the operation to be performed - int d = 0; // Time the job should be completed - int s = 0; // Start time of the task - int f = 0; // End time of the operation + private static class Schedule { // Schedule class + int t = 0; // Time required for the operation to be performed + int d = 0; // Time the job should be completed + int s = 0; // Start time of the task + int f = 0; // End time of the operation - public Schedule(int t, int d) { - this.t = t; - this.d = d; - } + public Schedule(int t, int d) { + this.t = t; + this.d = d; } + } - public static void main(String[] args) throws IOException { - StringTokenizer token; + public static void main(String[] args) throws IOException { + StringTokenizer token; - BufferedReader in = new BufferedReader(new FileReader("MinimizingLateness/lateness_data.txt")); - String ch = in.readLine(); - if (ch == null || ch.isEmpty()) { - in.close(); - return; - } - int indexCount = Integer.parseInt(ch); - System.out.println("Input Data : "); - System.out.println(indexCount); // number of operations - Schedule[] array = new Schedule[indexCount]; // Create an array to hold the operation - int i = 0; - while ((ch = in.readLine()) != null) { - token = new StringTokenizer(ch, " "); - // Include the time required for the operation to be performed in the array and the time it should be completed. - array[i] = new Schedule(Integer.parseInt(token.nextToken()), Integer.parseInt(token.nextToken())); - i++; - System.out.println(array[i - 1].t + " " + array[i - 1].d); - } + BufferedReader in = new BufferedReader(new FileReader("MinimizingLateness/lateness_data.txt")); + String ch = in.readLine(); + if (ch == null || ch.isEmpty()) { + in.close(); + return; + } + int indexCount = Integer.parseInt(ch); + System.out.println("Input Data : "); + System.out.println(indexCount); // number of operations + Schedule[] array = new Schedule[indexCount]; // Create an array to hold the operation + int i = 0; + while ((ch = in.readLine()) != null) { + token = new StringTokenizer(ch, " "); + // Include the time required for the operation to be performed in the array and the time it + // should be completed. + array[i] = + new Schedule(Integer.parseInt(token.nextToken()), Integer.parseInt(token.nextToken())); + i++; + System.out.println(array[i - 1].t + " " + array[i - 1].d); + } - int tryTime = 0; // Total time worked - int lateness = 0; // Lateness - for (int j = 0; j < indexCount - 1; j++) { - array[j].s = tryTime; // Start time of the task - array[j].f = tryTime + array[j].t; // Time finished - tryTime = tryTime + array[j].t; // Add total work time - // Lateness - lateness = lateness + Math.max(0, tryTime - array[j].d); - } - System.out.println(); - System.out.println("Output Data : "); - System.out.println(lateness); - in.close(); + int tryTime = 0; // Total time worked + int lateness = 0; // Lateness + for (int j = 0; j < indexCount - 1; j++) { + array[j].s = tryTime; // Start time of the task + array[j].f = tryTime + array[j].t; // Time finished + tryTime = tryTime + array[j].t; // Add total work time + // Lateness + lateness = lateness + Math.max(0, tryTime - array[j].d); } + System.out.println(); + System.out.println("Output Data : "); + System.out.println(lateness); + in.close(); + } } diff --git a/Misc/MedianOfRunningArray.java b/Misc/MedianOfRunningArray.java index 32bbf51947a1..21485e62f00a 100644 --- a/Misc/MedianOfRunningArray.java +++ b/Misc/MedianOfRunningArray.java @@ -3,50 +3,44 @@ import java.util.Collections; import java.util.PriorityQueue; - -/** - * @author shrutisheoran - */ +/** @author shrutisheoran */ public class MedianOfRunningArray { - private PriorityQueue p1; - private PriorityQueue p2; - - //Constructor - public MedianOfRunningArray() { - this.p1 = new PriorityQueue<>(Collections.reverseOrder()); //Max Heap - this.p2 = new PriorityQueue<>(); //Min Heap - } - - /* - Inserting lower half of array to max Heap - and upper half to min heap - */ - public void insert(Integer e) { - p2.add(e); - if (p2.size() - p1.size() > 1) - p1.add(p2.remove()); - } - + private PriorityQueue p1; + private PriorityQueue p2; + + // Constructor + public MedianOfRunningArray() { + this.p1 = new PriorityQueue<>(Collections.reverseOrder()); // Max Heap + this.p2 = new PriorityQueue<>(); // Min Heap + } + + /* + Inserting lower half of array to max Heap + and upper half to min heap + */ + public void insert(Integer e) { + p2.add(e); + if (p2.size() - p1.size() > 1) p1.add(p2.remove()); + } + + /* + Returns median at any given point + */ + public Integer median() { + if (p1.size() == p2.size()) return (p1.peek() + p2.peek()) / 2; + return p1.size() > p2.size() ? p1.peek() : p2.peek(); + } + + public static void main(String[] args) { /* - Returns median at any given point + Testing the median function */ - public Integer median() { - if (p1.size() == p2.size()) - return (p1.peek() + p2.peek()) / 2; - return p1.size() > p2.size() ? p1.peek() : p2.peek(); - } - public static void main(String[] args) { - /* - Testing the median function - */ - - MedianOfRunningArray p = new MedianOfRunningArray(); - int arr[] = {10, 7, 4, 9, 2, 3, 11, 17, 14}; - for (int i = 0; i < 9; i++) { - p.insert(arr[i]); - System.out.print(p.median() + " "); - } + MedianOfRunningArray p = new MedianOfRunningArray(); + int arr[] = {10, 7, 4, 9, 2, 3, 11, 17, 14}; + for (int i = 0; i < 9; i++) { + p.insert(arr[i]); + System.out.print(p.median() + " "); } - -} \ No newline at end of file + } +} diff --git a/Misc/PalindromePrime.java b/Misc/PalindromePrime.java index 77a918c32297..50b115de81c1 100644 --- a/Misc/PalindromePrime.java +++ b/Misc/PalindromePrime.java @@ -4,44 +4,44 @@ public class PalindromePrime { - public static void main(String[] args) { // Main funtion - Scanner in = new Scanner(System.in); - System.out.println("Enter the quantity of First Palindromic Primes you want"); - int n = in.nextInt(); // Input of how many first pallindromic prime we want - functioning(n); // calling function - functioning - in.close(); - } + public static void main(String[] args) { // Main funtion + Scanner in = new Scanner(System.in); + System.out.println("Enter the quantity of First Palindromic Primes you want"); + int n = in.nextInt(); // Input of how many first pallindromic prime we want + functioning(n); // calling function - functioning + in.close(); + } - public static boolean prime(int num) { // checking if number is prime or not - for (int divisor = 3; divisor <= Math.sqrt(num); divisor += 2) { - if (num % divisor == 0) { - return false; // false if not prime - } - } - return true; // True if prime + public static boolean prime(int num) { // checking if number is prime or not + for (int divisor = 3; divisor <= Math.sqrt(num); divisor += 2) { + if (num % divisor == 0) { + return false; // false if not prime + } } + return true; // True if prime + } - public static int reverse(int n) { // Returns the reverse of the number - int reverse = 0; - while (n != 0) { - reverse *= 10; - reverse += n % 10; - n /= 10; - } - return reverse; + public static int reverse(int n) { // Returns the reverse of the number + int reverse = 0; + while (n != 0) { + reverse *= 10; + reverse += n % 10; + n /= 10; } + return reverse; + } - public static void functioning(int y) { - if (y == 0) return; - System.out.print(2 + "\n"); // print the first Palindromic Prime - int count = 1; - int num = 3; - while (count < y) { - if (num == reverse(num) && prime(num)) { // number is prime and it's reverse is same - count++; // counts check when to terminate while loop - System.out.print(num + "\n"); // print the Palindromic Prime - } - num += 2; // inrease iterator value by two - } + public static void functioning(int y) { + if (y == 0) return; + System.out.print(2 + "\n"); // print the first Palindromic Prime + int count = 1; + int num = 3; + while (count < y) { + if (num == reverse(num) && prime(num)) { // number is prime and it's reverse is same + count++; // counts check when to terminate while loop + System.out.print(num + "\n"); // print the Palindromic Prime + } + num += 2; // inrease iterator value by two } + } } diff --git a/Others/BestFit.java b/Others/BestFit.java index 71814d22b9f1..bfe775be8475 100644 --- a/Others/BestFit.java +++ b/Others/BestFit.java @@ -2,88 +2,95 @@ import java.util.ArrayList; -/** - * @author Dekas Dimitrios - */ +/** @author Dekas Dimitrios */ public class BestFit { - private static final int NO_ALLOCATION = -255; // if a process has been allocated in position -255, - // it means that it has not been actually allocated. + private static final int NO_ALLOCATION = + -255; // if a process has been allocated in position -255, + // it means that it has not been actually allocated. - /** - * Method to find the maximum valued element of an array filled with positive integers. - * - * @param array: an array filled with positive integers. - * @return the maximum valued element of the array. - */ - private static int findMaxElement(int[] array) { - int max = -1; - for (int value : array) { - if (value > max) { - max = value; - } - } - return max; + /** + * Method to find the maximum valued element of an array filled with positive integers. + * + * @param array: an array filled with positive integers. + * @return the maximum valued element of the array. + */ + private static int findMaxElement(int[] array) { + int max = -1; + for (int value : array) { + if (value > max) { + max = value; + } } + return max; + } - /** - * Method to find the index of the memory block that is going to fit the given process based on the best fit algorithm. - * - * @param blocks: the array with the available memory blocks. - * @param process: the size of the process. - * @return the index of the block that fits, or -255 if no such block exists. - */ - private static int findBestFit(int[] blockSizes, int processSize) { - // Initialize minDiff with an unreachable value by a difference between a blockSize and the processSize. - int minDiff = findMaxElement(blockSizes); - int index = NO_ALLOCATION; // If there is no block that can fit the process, return NO_ALLOCATION as the result. - for(int i=0 ; i < blockSizes.length ; i++) { // Find the most fitting memory block for the given process. - if(blockSizes[i] - processSize < minDiff && blockSizes[i] - processSize >= 0) { - minDiff = blockSizes[i] - processSize; - index = i; - } - } - return index; + /** + * Method to find the index of the memory block that is going to fit the given process based on + * the best fit algorithm. + * + * @param blocks: the array with the available memory blocks. + * @param process: the size of the process. + * @return the index of the block that fits, or -255 if no such block exists. + */ + private static int findBestFit(int[] blockSizes, int processSize) { + // Initialize minDiff with an unreachable value by a difference between a blockSize and the + // processSize. + int minDiff = findMaxElement(blockSizes); + int index = + NO_ALLOCATION; // If there is no block that can fit the process, return NO_ALLOCATION as the + // result. + for (int i = 0; + i < blockSizes.length; + i++) { // Find the most fitting memory block for the given process. + if (blockSizes[i] - processSize < minDiff && blockSizes[i] - processSize >= 0) { + minDiff = blockSizes[i] - processSize; + index = i; + } } + return index; + } - /** - * Method to allocate memory to blocks according to the best fit - * algorithm. It should return an ArrayList of Integers, where the - * index is the process ID (zero-indexed) and the value is the block - * number (also zero-indexed). - * - * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. - * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory blocks for. - * @return the ArrayList filled with Integers repressenting the memory allocation that took place. - */ - static ArrayList bestFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { - // The array list responsible for saving the memory allocations done by the best-fit algorithm - ArrayList memAlloc = new ArrayList<>(); - // Do this for every process - for(int processSize : sizeOfProcesses) { - int chosenBlockIdx = findBestFit(sizeOfBlocks, processSize); // Find the index of the memory block going to be used - memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list - if(chosenBlockIdx != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, - sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size - } - } - return memAlloc; + /** + * Method to allocate memory to blocks according to the best fit algorithm. It should return an + * ArrayList of Integers, where the index is the process ID (zero-indexed) and the value is the + * block number (also zero-indexed). + * + * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. + * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory + * blocks for. + * @return the ArrayList filled with Integers repressenting the memory allocation that took place. + */ + static ArrayList bestFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { + // The array list responsible for saving the memory allocations done by the best-fit algorithm + ArrayList memAlloc = new ArrayList<>(); + // Do this for every process + for (int processSize : sizeOfProcesses) { + int chosenBlockIdx = + findBestFit( + sizeOfBlocks, processSize); // Find the index of the memory block going to be used + memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list + if (chosenBlockIdx + != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, + sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size + } } + return memAlloc; + } - /** - * Method to print the memory allocated. - * - * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the bestFit method. - */ - public static void printMemoryAllocation(ArrayList memAllocation) { - System.out.println("Process No.\tBlock No."); - System.out.println("===========\t========="); - for (int i = 0; i < memAllocation.size(); i++) { - System.out.print(" " + i + "\t\t"); - if (memAllocation.get(i) != NO_ALLOCATION) - System.out.print(memAllocation.get(i)); - else - System.out.print("Not Allocated"); - System.out.println(); - } + /** + * Method to print the memory allocated. + * + * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the + * bestFit method. + */ + public static void printMemoryAllocation(ArrayList memAllocation) { + System.out.println("Process No.\tBlock No."); + System.out.println("===========\t========="); + for (int i = 0; i < memAllocation.size(); i++) { + System.out.print(" " + i + "\t\t"); + if (memAllocation.get(i) != NO_ALLOCATION) System.out.print(memAllocation.get(i)); + else System.out.print("Not Allocated"); + System.out.println(); } -} \ No newline at end of file + } +} diff --git a/Others/BrianKernighanAlgorithm.java b/Others/BrianKernighanAlgorithm.java index a35234f0e2af..8767bee42d44 100644 --- a/Others/BrianKernighanAlgorithm.java +++ b/Others/BrianKernighanAlgorithm.java @@ -4,46 +4,37 @@ /** * @author Nishita Aggarwal - *

- * Brian Kernighan’s Algorithm - *

- * algorithm to count the number of set bits in a given number - *

- * Subtraction of 1 from a number toggles all the bits (from right to left) till the rightmost set bit(including the - * rightmost set bit). - * So if we subtract a number by 1 and do bitwise & with itself i.e. (n & (n-1)), we unset the rightmost set bit. - *

- * If we do n & (n-1) in a loop and count the no of times loop executes we get the set bit count. - *

- *

- * Time Complexity: O(logn) + *

Brian Kernighan’s Algorithm + *

algorithm to count the number of set bits in a given number + *

Subtraction of 1 from a number toggles all the bits (from right to left) till the + * rightmost set bit(including the rightmost set bit). So if we subtract a number by 1 and do + * bitwise & with itself i.e. (n & (n-1)), we unset the rightmost set bit. + *

If we do n & (n-1) in a loop and count the no of times loop executes we get the set bit + * count. + *

+ *

Time Complexity: O(logn) */ - - public class BrianKernighanAlgorithm { - /** - * @param num: number in which we count the set bits - * @return int: Number of set bits - */ - static int countSetBits(int num) { - int cnt = 0; - while (num != 0) { - num = num & (num - 1); - cnt++; - } - return cnt; + /** + * @param num: number in which we count the set bits + * @return int: Number of set bits + */ + static int countSetBits(int num) { + int cnt = 0; + while (num != 0) { + num = num & (num - 1); + cnt++; } + return cnt; + } - - /** - * @param args : command line arguments - */ - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - int num = sc.nextInt(); - int setBitCount = countSetBits(num); - System.out.println(setBitCount); - sc.close(); - } + /** @param args : command line arguments */ + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + int num = sc.nextInt(); + int setBitCount = countSetBits(num); + System.out.println(setBitCount); + sc.close(); + } } diff --git a/Others/CRC32.java b/Others/CRC32.java index 80eb3d5c730c..23712eef164a 100644 --- a/Others/CRC32.java +++ b/Others/CRC32.java @@ -2,30 +2,26 @@ import java.util.BitSet; -/** - * Generates a crc32 checksum for a given string or byte array - */ +/** Generates a crc32 checksum for a given string or byte array */ public class CRC32 { - public static void main(String[] args) { - System.out.println(Integer.toHexString(crc32("Hello World"))); - } + public static void main(String[] args) { + System.out.println(Integer.toHexString(crc32("Hello World"))); + } - public static int crc32(String str) { - return crc32(str.getBytes()); - } + public static int crc32(String str) { + return crc32(str.getBytes()); + } - public static int crc32(byte[] data) { - BitSet bitSet = BitSet.valueOf(data); - int crc32 = 0xFFFFFFFF; // initial value - for (int i = 0; i < data.length * 8; i++) { - if (((crc32 >>> 31) & 1) != (bitSet.get(i) ? 1 : 0)) - crc32 = (crc32 << 1) ^ 0x04C11DB7; // xor with polynomial - else - crc32 = (crc32 << 1); - } - crc32 = Integer.reverse(crc32); // result reflect - return crc32 ^ 0xFFFFFFFF; // final xor value + public static int crc32(byte[] data) { + BitSet bitSet = BitSet.valueOf(data); + int crc32 = 0xFFFFFFFF; // initial value + for (int i = 0; i < data.length * 8; i++) { + if (((crc32 >>> 31) & 1) != (bitSet.get(i) ? 1 : 0)) + crc32 = (crc32 << 1) ^ 0x04C11DB7; // xor with polynomial + else crc32 = (crc32 << 1); } - + crc32 = Integer.reverse(crc32); // result reflect + return crc32 ^ 0xFFFFFFFF; // final xor value + } } diff --git a/Others/CRCAlgorithm.java b/Others/CRCAlgorithm.java index d53e3a02c2e3..3729a5ed5a33 100644 --- a/Others/CRCAlgorithm.java +++ b/Others/CRCAlgorithm.java @@ -4,200 +4,190 @@ import java.util.Random; import java.util.concurrent.ThreadLocalRandom; -/** - * @author dimgrichr - */ +/** @author dimgrichr */ public class CRCAlgorithm { - private int correctMess; + private int correctMess; - private int wrongMess; + private int wrongMess; - private int wrongMessCaught; + private int wrongMessCaught; - private int wrongMessNotCaught; + private int wrongMessNotCaught; - private int messSize; + private int messSize; - private double ber; + private double ber; - private boolean messageChanged; + private boolean messageChanged; - private ArrayList message; + private ArrayList message; - private ArrayList dividedMessage; + private ArrayList dividedMessage; - private ArrayList p; + private ArrayList p; - private Random randomGenerator; + private Random randomGenerator; - - /** - * The algorithm's main constructor. - * The most significant variables, used in the algorithm, - * are set in their initial values. - * - * @param str The binary number P, in a string form, which is used by the CRC algorithm - * @param size The size of every transmitted message - * @param ber The Bit Error Rate - */ - public CRCAlgorithm(String str, int size, double ber) { - messageChanged = false; - message = new ArrayList<>(); - messSize = size; - dividedMessage = new ArrayList<>(); - p = new ArrayList<>(); - for (int i = 0; i < str.length(); i++) { - p.add(Character.getNumericValue(str.charAt(i))); - } - randomGenerator = new Random(); - correctMess = 0; - wrongMess = 0; - wrongMessCaught = 0; - wrongMessNotCaught = 0; - this.ber = ber; - } - - - /** - * Returns the counter wrongMess - * - * @return wrongMess, the number of Wrong Messages - */ - public int getWrongMess() { - return wrongMess; - } - - /** - * Returns the counter wrongMessCaught - * - * @return wrongMessCaught, the number of wrong messages, which are caught by the CRC algoriithm - */ - public int getWrongMessCaught() { - return wrongMessCaught; - } - - /** - * Returns the counter wrongMessNotCaught - * - * @return wrongMessNotCaught, the number of wrong messages, which are not caught by the CRC algorithm - */ - public int getWrongMessNotCaught() { - return wrongMessNotCaught; - } - - /** - * Returns the counter correctMess - * - * @return correctMess, the number of the Correct Messages - */ - public int getCorrectMess() { - return correctMess; + /** + * The algorithm's main constructor. The most significant variables, used in the algorithm, are + * set in their initial values. + * + * @param str The binary number P, in a string form, which is used by the CRC algorithm + * @param size The size of every transmitted message + * @param ber The Bit Error Rate + */ + public CRCAlgorithm(String str, int size, double ber) { + messageChanged = false; + message = new ArrayList<>(); + messSize = size; + dividedMessage = new ArrayList<>(); + p = new ArrayList<>(); + for (int i = 0; i < str.length(); i++) { + p.add(Character.getNumericValue(str.charAt(i))); } - - /** - * Resets some of the object's values, used on the main function, - * so that it can be re-used, in order not to waste too much memory and time, - * by creating new objects. - */ - public void refactor() { - messageChanged = false; - message = new ArrayList<>(); - dividedMessage = new ArrayList<>(); + randomGenerator = new Random(); + correctMess = 0; + wrongMess = 0; + wrongMessCaught = 0; + wrongMessNotCaught = 0; + this.ber = ber; + } + + /** + * Returns the counter wrongMess + * + * @return wrongMess, the number of Wrong Messages + */ + public int getWrongMess() { + return wrongMess; + } + + /** + * Returns the counter wrongMessCaught + * + * @return wrongMessCaught, the number of wrong messages, which are caught by the CRC algoriithm + */ + public int getWrongMessCaught() { + return wrongMessCaught; + } + + /** + * Returns the counter wrongMessNotCaught + * + * @return wrongMessNotCaught, the number of wrong messages, which are not caught by the CRC + * algorithm + */ + public int getWrongMessNotCaught() { + return wrongMessNotCaught; + } + + /** + * Returns the counter correctMess + * + * @return correctMess, the number of the Correct Messages + */ + public int getCorrectMess() { + return correctMess; + } + + /** + * Resets some of the object's values, used on the main function, so that it can be re-used, in + * order not to waste too much memory and time, by creating new objects. + */ + public void refactor() { + messageChanged = false; + message = new ArrayList<>(); + dividedMessage = new ArrayList<>(); + } + + /** + * Random messages, consisted of 0's and 1's, are generated, so that they can later be transmitted + */ + public void generateRandomMess() { + for (int i = 0; i < messSize; i++) { + int x = ThreadLocalRandom.current().nextInt(0, 2); + message.add(x); } - - /** - * Random messages, consisted of 0's and 1's, - * are generated, so that they can later be transmitted - */ - public void generateRandomMess() { - for (int i = 0; i < messSize; i++) { - int x = ThreadLocalRandom.current().nextInt(0, 2); - message.add(x); - } + } + + /** + * The most significant part of the CRC algorithm. The message is divided by P, so the + * dividedMessage ArrayList is created. If check == true, the dividedMessaage is + * examined, in order to see if it contains any 1's. If it does, the message is considered to be + * wrong by the receiver,so the variable wrongMessCaught changes. If it does not, it is accepted, + * so one of the variables correctMess, wrongMessNotCaught, changes. If check == false, the + * diviided Message is added at the end of the ArrayList message. + * + * @param check the variable used to determine, if the message is going to be checked from the + * receiver if true, it is checked otherwise, it is not + */ + public void divideMessageWithP(boolean check) { + ArrayList x = new ArrayList<>(); + ArrayList k = (ArrayList) message.clone(); + if (!check) { + for (int i = 0; i < p.size() - 1; i++) { + k.add(0); + } } - - /** - * The most significant part of the CRC algorithm. - * The message is divided by P, so the dividedMessage ArrayList is created. - * If check == true, the dividedMessaage is examined, in order to see if it contains any 1's. - * If it does, the message is considered to be wrong by the receiver,so the variable wrongMessCaught changes. - * If it does not, it is accepted, so one of the variables correctMess, wrongMessNotCaught, changes. - * If check == false, the diviided Message is added at the end of the ArrayList message. - * - * @param check the variable used to determine, if the message is going to be checked from the receiver - * if true, it is checked - * otherwise, it is not - */ - public void divideMessageWithP(boolean check) { - ArrayList x = new ArrayList<>(); - ArrayList k = (ArrayList) message.clone(); - if (!check) { - for (int i = 0; i < p.size() - 1; i++) { - k.add(0); - } + while (!k.isEmpty()) { + while (x.size() < p.size() && !k.isEmpty()) { + x.add(k.get(0)); + k.remove(0); + } + if (x.size() == p.size()) { + for (int i = 0; i < p.size(); i++) { + if (x.get(i) == p.get(i)) { + x.set(i, 0); + } else { + x.set(i, 1); + } } - while (!k.isEmpty()) { - while (x.size() < p.size() && !k.isEmpty()) { - x.add(k.get(0)); - k.remove(0); - } - if (x.size() == p.size()) { - for (int i = 0; i < p.size(); i++) { - if (x.get(i) == p.get(i)) { - x.set(i, 0); - } else { - x.set(i, 1); - } - } - for (int i = 0; i < x.size() && x.get(i) != 1; i++) { - x.remove(0); - } - } + for (int i = 0; i < x.size() && x.get(i) != 1; i++) { + x.remove(0); } - dividedMessage = (ArrayList) x.clone(); - if (!check) { - for (int z : dividedMessage) { - message.add(z); - } + } + } + dividedMessage = (ArrayList) x.clone(); + if (!check) { + for (int z : dividedMessage) { + message.add(z); + } + } else { + if (dividedMessage.contains(1) && messageChanged) { + wrongMessCaught++; + } else if (!dividedMessage.contains(1) && messageChanged) { + wrongMessNotCaught++; + } else if (!messageChanged) { + correctMess++; + } + } + } + + /** + * Once the message is transmitted, some of it's elements, is possible to change from 1 to 0, or + * from 0 to 1, because of the Bit Error Rate (ber). For every element of the message, a random + * double number is created. If that number is smaller than ber, then the spesific element + * changes. On the other hand, if it's bigger than ber, it does not. Based on these changes. the + * boolean variable messageChanged, gets the value: true, or false. + */ + public void changeMess() { + for (int y : message) { + double x = randomGenerator.nextDouble(); + while (x < 0.0000 || x > 1.00000) { + x = randomGenerator.nextDouble(); + } + if (x < ber) { + messageChanged = true; + if (y == 1) { + message.set(message.indexOf(y), 0); } else { - if (dividedMessage.contains(1) && messageChanged) { - wrongMessCaught++; - } else if (!dividedMessage.contains(1) && messageChanged) { - wrongMessNotCaught++; - } else if (!messageChanged) { - correctMess++; - } + message.set(message.indexOf(y), 1); } + } } - - /** - * Once the message is transmitted, some of it's elements, - * is possible to change from 1 to 0, or from 0 to 1, - * because of the Bit Error Rate (ber). - * For every element of the message, a random double number is created. - * If that number is smaller than ber, then the spesific element changes. - * On the other hand, if it's bigger than ber, it does not. - * Based on these changes. the boolean variable messageChanged, gets the value: - * true, or false. - */ - public void changeMess() { - for (int y : message) { - double x = randomGenerator.nextDouble(); - while (x < 0.0000 || x > 1.00000) { - x = randomGenerator.nextDouble(); - } - if (x < ber) { - messageChanged = true; - if (y == 1) { - message.set(message.indexOf(y), 0); - } else { - message.set(message.indexOf(y), 1); - } - } - } - if (messageChanged) { - wrongMess++; - } + if (messageChanged) { + wrongMess++; } + } } diff --git a/Others/CountChar.java b/Others/CountChar.java index 8f37217ed5f9..9136a4e686d0 100644 --- a/Others/CountChar.java +++ b/Others/CountChar.java @@ -4,21 +4,21 @@ public class CountChar { - public static void main(String[] args) { - Scanner input = new Scanner(System.in); - System.out.print("Enter your text: "); - String str = input.nextLine(); - input.close(); - System.out.println("There are " + CountCharacters(str) + " characters."); - } + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + System.out.print("Enter your text: "); + String str = input.nextLine(); + input.close(); + System.out.println("There are " + CountCharacters(str) + " characters."); + } - /** - * Count non space character in string - * - * @param str String to count the characters - * @return number of character in the specified string - */ - private static int CountCharacters(String str) { - return str.replaceAll("\\s", "").length(); - } + /** + * Count non space character in string + * + * @param str String to count the characters + * @return number of character in the specified string + */ + private static int CountCharacters(String str) { + return str.replaceAll("\\s", "").length(); + } } diff --git a/Others/CountWords.java b/Others/CountWords.java index f1caf9a87734..746b027ebd59 100644 --- a/Others/CountWords.java +++ b/Others/CountWords.java @@ -3,46 +3,42 @@ import java.util.Scanner; /** - * You enter a string into this program, and it will return how many words were - * in that particular string + * You enter a string into this program, and it will return how many words were in that particular + * string * * @author Marcus */ public class CountWords { - public static void main(String[] args) { - Scanner input = new Scanner(System.in); - System.out.println("Enter your text: "); - String str = input.nextLine(); + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + System.out.println("Enter your text: "); + String str = input.nextLine(); - System.out.println("Your text has " + wordCount(str) + " word(s)"); - System.out.println("Your text has " + secondaryWordCount(str) + " word(s)"); - input.close(); - } + System.out.println("Your text has " + wordCount(str) + " word(s)"); + System.out.println("Your text has " + secondaryWordCount(str) + " word(s)"); + input.close(); + } - private static int wordCount(String s) { - if (s == null || s.isEmpty()) - return 0; - return s.trim().split("[\\s]+").length; - } + private static int wordCount(String s) { + if (s == null || s.isEmpty()) return 0; + return s.trim().split("[\\s]+").length; + } - /** - * counts the number of words in a sentence but ignores all potential - * non-alphanumeric characters that do not represent a word. runs in O(n) where - * n is the length of s - * - * @param s String: sentence with word(s) - * @return int: number of words - */ - private static int secondaryWordCount(String s) { - if (s == null || s.isEmpty()) - return 0; - StringBuilder sb = new StringBuilder(); - for (char c : s.toCharArray()) { - if (Character.isLetter(c) || Character.isDigit(c)) - sb.append(c); - } - s = sb.toString(); - return s.trim().split("[\\s]+").length; + /** + * counts the number of words in a sentence but ignores all potential non-alphanumeric characters + * that do not represent a word. runs in O(n) where n is the length of s + * + * @param s String: sentence with word(s) + * @return int: number of words + */ + private static int secondaryWordCount(String s) { + if (s == null || s.isEmpty()) return 0; + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + if (Character.isLetter(c) || Character.isDigit(c)) sb.append(c); } + s = sb.toString(); + return s.trim().split("[\\s]+").length; + } } diff --git a/Others/Dijkstra.java b/Others/Dijkstra.java index b1a0987d0245..913f25b3eb2b 100644 --- a/Others/Dijkstra.java +++ b/Others/Dijkstra.java @@ -1,219 +1,200 @@ package Others; - /** - * Dijkstra's algorithm,is a graph search algorithm that solves the single-source - * shortest path problem for a graph with nonnegative edge path costs, producing - * a shortest path tree. - *

- * NOTE: The inputs to Dijkstra's algorithm are a directed and weighted graph consisting - * of 2 or more nodes, generally represented by an adjacency matrix or list, and a start node. - *

- * Original source of code: https://rosettacode.org/wiki/Dijkstra%27s_algorithm#Java - * Also most of the comments are from RosettaCode. + * Dijkstra's algorithm,is a graph search algorithm that solves the single-source shortest path + * problem for a graph with nonnegative edge path costs, producing a shortest path tree. + * + *

NOTE: The inputs to Dijkstra's algorithm are a directed and weighted graph consisting of 2 or + * more nodes, generally represented by an adjacency matrix or list, and a start node. + * + *

Original source of code: https://rosettacode.org/wiki/Dijkstra%27s_algorithm#Java Also most of + * the comments are from RosettaCode. */ - import java.util.*; public class Dijkstra { - private static final Graph.Edge[] GRAPH = { - // Distance from node "a" to node "b" is 7. - // In the current Graph there is no way to move the other way (e,g, from "b" to "a"), - // a new edge would be needed for that - new Graph.Edge("a", "b", 7), - new Graph.Edge("a", "c", 9), - new Graph.Edge("a", "f", 14), - new Graph.Edge("b", "c", 10), - new Graph.Edge("b", "d", 15), - new Graph.Edge("c", "d", 11), - new Graph.Edge("c", "f", 2), - new Graph.Edge("d", "e", 6), - new Graph.Edge("e", "f", 9), - }; - private static final String START = "a"; - private static final String END = "e"; - - /** - * main function - * Will run the code with "GRAPH" that was defined above. - */ - public static void main(String[] args) { - Graph g = new Graph(GRAPH); - g.dijkstra(START); - g.printPath(END); - //g.printAllPaths(); - } + private static final Graph.Edge[] GRAPH = { + // Distance from node "a" to node "b" is 7. + // In the current Graph there is no way to move the other way (e,g, from "b" to "a"), + // a new edge would be needed for that + new Graph.Edge("a", "b", 7), + new Graph.Edge("a", "c", 9), + new Graph.Edge("a", "f", 14), + new Graph.Edge("b", "c", 10), + new Graph.Edge("b", "d", 15), + new Graph.Edge("c", "d", 11), + new Graph.Edge("c", "f", 2), + new Graph.Edge("d", "e", 6), + new Graph.Edge("e", "f", 9), + }; + private static final String START = "a"; + private static final String END = "e"; + + /** main function Will run the code with "GRAPH" that was defined above. */ + public static void main(String[] args) { + Graph g = new Graph(GRAPH); + g.dijkstra(START); + g.printPath(END); + // g.printAllPaths(); + } } class Graph { - // mapping of vertex names to Vertex objects, built from a set of Edges - private final Map graph; - - /** - * One edge of the graph (only used by Graph constructor) - */ - public static class Edge { - public final String v1, v2; - public final int dist; - - public Edge(String v1, String v2, int dist) { - this.v1 = v1; - this.v2 = v2; - this.dist = dist; - } + // mapping of vertex names to Vertex objects, built from a set of Edges + private final Map graph; + + /** One edge of the graph (only used by Graph constructor) */ + public static class Edge { + public final String v1, v2; + public final int dist; + + public Edge(String v1, String v2, int dist) { + this.v1 = v1; + this.v2 = v2; + this.dist = dist; + } + } + + /** One vertex of the graph, complete with mappings to neighbouring vertices */ + public static class Vertex implements Comparable { + public final String name; + // MAX_VALUE assumed to be infinity + public int dist = Integer.MAX_VALUE; + public Vertex previous = null; + public final Map neighbours = new HashMap<>(); + + public Vertex(String name) { + this.name = name; } - /** - * One vertex of the graph, complete with mappings to neighbouring vertices - */ - public static class Vertex implements Comparable { - public final String name; - // MAX_VALUE assumed to be infinity - public int dist = Integer.MAX_VALUE; - public Vertex previous = null; - public final Map neighbours = new HashMap<>(); - - public Vertex(String name) { - this.name = name; - } - - private void printPath() { - if (this == this.previous) { - System.out.printf("%s", this.name); - } else if (this.previous == null) { - System.out.printf("%s(unreached)", this.name); - } else { - this.previous.printPath(); - System.out.printf(" -> %s(%d)", this.name, this.dist); - } - } - - public int compareTo(Vertex other) { - if (dist == other.dist) - return name.compareTo(other.name); + private void printPath() { + if (this == this.previous) { + System.out.printf("%s", this.name); + } else if (this.previous == null) { + System.out.printf("%s(unreached)", this.name); + } else { + this.previous.printPath(); + System.out.printf(" -> %s(%d)", this.name, this.dist); + } + } - return Integer.compare(dist, other.dist); - } + public int compareTo(Vertex other) { + if (dist == other.dist) return name.compareTo(other.name); - @Override - public boolean equals(Object object) { - if (this == object) return true; - if (object == null || getClass() != object.getClass()) return false; - if (!super.equals(object)) return false; + return Integer.compare(dist, other.dist); + } - Vertex vertex = (Vertex) object; + @Override + public boolean equals(Object object) { + if (this == object) return true; + if (object == null || getClass() != object.getClass()) return false; + if (!super.equals(object)) return false; - if (dist != vertex.dist) return false; - if (name != null ? !name.equals(vertex.name) : vertex.name != null) return false; - if (previous != null ? !previous.equals(vertex.previous) : vertex.previous != null) return false; - if (neighbours != null ? !neighbours.equals(vertex.neighbours) : vertex.neighbours != null) return false; + Vertex vertex = (Vertex) object; - return true; - } + if (dist != vertex.dist) return false; + if (name != null ? !name.equals(vertex.name) : vertex.name != null) return false; + if (previous != null ? !previous.equals(vertex.previous) : vertex.previous != null) + return false; + if (neighbours != null ? !neighbours.equals(vertex.neighbours) : vertex.neighbours != null) + return false; - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + dist; - result = 31 * result + (previous != null ? previous.hashCode() : 0); - result = 31 * result + (neighbours != null ? neighbours.hashCode() : 0); - return result; - } + return true; + } - @Override - public String toString() { - return "(" + name + ", " + dist + ")"; - } + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + dist; + result = 31 * result + (previous != null ? previous.hashCode() : 0); + result = 31 * result + (neighbours != null ? neighbours.hashCode() : 0); + return result; } - /** - * Builds a graph from a set of edges - */ - public Graph(Edge[] edges) { - graph = new HashMap<>(edges.length); + @Override + public String toString() { + return "(" + name + ", " + dist + ")"; + } + } - // one pass to find all vertices - for (Edge e : edges) { - if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); - if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); - } + /** Builds a graph from a set of edges */ + public Graph(Edge[] edges) { + graph = new HashMap<>(edges.length); - // another pass to set neighbouring vertices - for (Edge e : edges) { - graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); - // graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected graph - } + // one pass to find all vertices + for (Edge e : edges) { + if (!graph.containsKey(e.v1)) graph.put(e.v1, new Vertex(e.v1)); + if (!graph.containsKey(e.v2)) graph.put(e.v2, new Vertex(e.v2)); } - /** - * Runs dijkstra using a specified source vertex - */ - public void dijkstra(String startName) { - if (!graph.containsKey(startName)) { - System.err.printf("Graph doesn't contain start vertex \"%s\"%n", startName); - return; - } - final Vertex source = graph.get(startName); - NavigableSet q = new TreeSet<>(); - - // set-up vertices - for (Vertex v : graph.values()) { - v.previous = v == source ? source : null; - v.dist = v == source ? 0 : Integer.MAX_VALUE; - q.add(v); - } - - dijkstra(q); + // another pass to set neighbouring vertices + for (Edge e : edges) { + graph.get(e.v1).neighbours.put(graph.get(e.v2), e.dist); + // graph.get(e.v2).neighbours.put(graph.get(e.v1), e.dist); // also do this for an undirected + // graph } + } - /** - * Implementation of dijkstra's algorithm using a binary heap. - */ - private void dijkstra(final NavigableSet q) { - Vertex u, v; - while (!q.isEmpty()) { - // vertex with shortest distance (first iteration will return source) - u = q.pollFirst(); - if (u.dist == Integer.MAX_VALUE) - break; // we can ignore u (and any other remaining vertices) since they are unreachable - - // look at distances to each neighbour - for (Map.Entry a : u.neighbours.entrySet()) { - v = a.getKey(); // the neighbour in this iteration - - final int alternateDist = u.dist + a.getValue(); - if (alternateDist < v.dist) { // shorter path to neighbour found - q.remove(v); - v.dist = alternateDist; - v.previous = u; - q.add(v); - } - } - } + /** Runs dijkstra using a specified source vertex */ + public void dijkstra(String startName) { + if (!graph.containsKey(startName)) { + System.err.printf("Graph doesn't contain start vertex \"%s\"%n", startName); + return; + } + final Vertex source = graph.get(startName); + NavigableSet q = new TreeSet<>(); + + // set-up vertices + for (Vertex v : graph.values()) { + v.previous = v == source ? source : null; + v.dist = v == source ? 0 : Integer.MAX_VALUE; + q.add(v); } - /** - * Prints a path from the source to the specified vertex - */ - public void printPath(String endName) { - if (!graph.containsKey(endName)) { - System.err.printf("Graph doesn't contain end vertex \"%s\"%n", endName); - return; + dijkstra(q); + } + + /** Implementation of dijkstra's algorithm using a binary heap. */ + private void dijkstra(final NavigableSet q) { + Vertex u, v; + while (!q.isEmpty()) { + // vertex with shortest distance (first iteration will return source) + u = q.pollFirst(); + if (u.dist == Integer.MAX_VALUE) + break; // we can ignore u (and any other remaining vertices) since they are unreachable + + // look at distances to each neighbour + for (Map.Entry a : u.neighbours.entrySet()) { + v = a.getKey(); // the neighbour in this iteration + + final int alternateDist = u.dist + a.getValue(); + if (alternateDist < v.dist) { // shorter path to neighbour found + q.remove(v); + v.dist = alternateDist; + v.previous = u; + q.add(v); } - - graph.get(endName).printPath(); - System.out.println(); + } } + } - /** - * Prints the path from the source to every vertex (output order is not guaranteed) - */ - public void printAllPaths() { - for (Vertex v : graph.values()) { - v.printPath(); - System.out.println(); - } + /** Prints a path from the source to the specified vertex */ + public void printPath(String endName) { + if (!graph.containsKey(endName)) { + System.err.printf("Graph doesn't contain end vertex \"%s\"%n", endName); + return; } -} \ No newline at end of file + graph.get(endName).printPath(); + System.out.println(); + } + + /** Prints the path from the source to every vertex (output order is not guaranteed) */ + public void printAllPaths() { + for (Vertex v : graph.values()) { + v.printPath(); + System.out.println(); + } + } +} diff --git a/Others/EulersFunction.java b/Others/EulersFunction.java index 0f848442bc92..1e7efeafbd0b 100644 --- a/Others/EulersFunction.java +++ b/Others/EulersFunction.java @@ -2,26 +2,27 @@ /** * You can read more about Euler's totient function - *

- * See https://en.wikipedia.org/wiki/Euler%27s_totient_function + * + *

See https://en.wikipedia.org/wiki/Euler%27s_totient_function */ public class EulersFunction { - // This method returns us number of x that (x < n) and gcd(x, n) == 1 in O(sqrt(n)) time complexity; - public static int getEuler(int n) { - int result = n; - for (int i = 2; i * i <= n; i++) { - if (n % i == 0) { - while (n % i == 0) n /= i; - result -= result / i; - } - } - if (n > 1) result -= result / n; - return result; + // This method returns us number of x that (x < n) and gcd(x, n) == 1 in O(sqrt(n)) time + // complexity; + public static int getEuler(int n) { + int result = n; + for (int i = 2; i * i <= n; i++) { + if (n % i == 0) { + while (n % i == 0) n /= i; + result -= result / i; + } } + if (n > 1) result -= result / n; + return result; + } - public static void main(String[] args) { - for (int i = 1; i < 100; i++) { - System.out.println(getEuler(i)); - } + public static void main(String[] args) { + for (int i = 1; i < 100; i++) { + System.out.println(getEuler(i)); } + } } diff --git a/Others/FibToN.java b/Others/FibToN.java index 03aad56fd833..479e895729c4 100644 --- a/Others/FibToN.java +++ b/Others/FibToN.java @@ -3,31 +3,29 @@ import java.util.Scanner; /** - * Fibonacci sequence, and characterized by the fact that every number - * after the first two is the sum of the two preceding ones. - *

- * Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21,... - *

- * Source for the explanation: https://en.wikipedia.org/wiki/Fibonacci_number + * Fibonacci sequence, and characterized by the fact that every number after the first two is the + * sum of the two preceding ones. + * + *

Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21,... + * + *

Source for the explanation: https://en.wikipedia.org/wiki/Fibonacci_number */ - public class FibToN { - public static void main(String[] args) { - //take input - Scanner scn = new Scanner(System.in); - int N = scn.nextInt(); - // print all Fibonacci numbers that are smaller than your given input N - int first = 0, second = 1; - scn.close(); - while (first <= N) { - //print first fibo 0 then add second fibo into it while updating second as well + public static void main(String[] args) { + // take input + Scanner scn = new Scanner(System.in); + int N = scn.nextInt(); + // print all Fibonacci numbers that are smaller than your given input N + int first = 0, second = 1; + scn.close(); + while (first <= N) { + // print first fibo 0 then add second fibo into it while updating second as well - System.out.println(first); + System.out.println(first); - int next = first + second; - first = second; - second = next; - } + int next = first + second; + first = second; + second = next; } - + } } diff --git a/Others/FirstFit.java b/Others/FirstFit.java index 61a25b422017..06cea111c54d 100644 --- a/Others/FirstFit.java +++ b/Others/FirstFit.java @@ -2,69 +2,71 @@ import java.util.ArrayList; -/** - * @author Dekas Dimitrios - */ +/** @author Dekas Dimitrios */ public class FirstFit { - private static final int NO_ALLOCATION = -255; // if a process has been allocated in position -255, - // it means that it has not been actually allocated. + private static final int NO_ALLOCATION = + -255; // if a process has been allocated in position -255, + // it means that it has not been actually allocated. - /** - * Method to find the index of the memory block that is going to fit the given process based on the first fit algorithm. - * - * @param blocks: the array with the available memory blocks. - * @param process: the size of the process. - * @return the index of the block that fits, or -255 if no such block exists. - */ - private static int findFirstFit(int[] blockSizes, int processSize) { - for(int i=0 ; i < blockSizes.length ; i++) { - if(blockSizes[i] >= processSize) { - return i; - } - } - // If there is not a block that can fit the process, return -255 as the result - return NO_ALLOCATION; + /** + * Method to find the index of the memory block that is going to fit the given process based on + * the first fit algorithm. + * + * @param blocks: the array with the available memory blocks. + * @param process: the size of the process. + * @return the index of the block that fits, or -255 if no such block exists. + */ + private static int findFirstFit(int[] blockSizes, int processSize) { + for (int i = 0; i < blockSizes.length; i++) { + if (blockSizes[i] >= processSize) { + return i; + } } + // If there is not a block that can fit the process, return -255 as the result + return NO_ALLOCATION; + } - /** - * Method to allocate memory to blocks according to the first fit - * algorithm. It should return an ArrayList of Integers, where the - * index is the process ID (zero-indexed) and the value is the block - * number (also zero-indexed). - * - * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. - * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory blocks for. - * @return the ArrayList filled with Integers repressenting the memory allocation that took place. - */ - static ArrayList firstFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { - // The array list responsible for saving the memory allocations done by the first-fit algorithm - ArrayList memAlloc = new ArrayList<>(); - // Do this for every process - for(int processSize : sizeOfProcesses) { - int chosenBlockIdx = findFirstFit(sizeOfBlocks, processSize); // Find the index of the memory block going to be used - memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list - if(chosenBlockIdx != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, - sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size - } - } - return memAlloc; + /** + * Method to allocate memory to blocks according to the first fit algorithm. It should return an + * ArrayList of Integers, where the index is the process ID (zero-indexed) and the value is the + * block number (also zero-indexed). + * + * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. + * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory + * blocks for. + * @return the ArrayList filled with Integers repressenting the memory allocation that took place. + */ + static ArrayList firstFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { + // The array list responsible for saving the memory allocations done by the first-fit algorithm + ArrayList memAlloc = new ArrayList<>(); + // Do this for every process + for (int processSize : sizeOfProcesses) { + int chosenBlockIdx = + findFirstFit( + sizeOfBlocks, processSize); // Find the index of the memory block going to be used + memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list + if (chosenBlockIdx + != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, + sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size + } } + return memAlloc; + } - /** - * Method to print the memory allocated. - * - * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the firstFit method. - */ - public static void printMemoryAllocation(ArrayList memAllocation) { - System.out.println("Process No.\tBlock No."); - System.out.println("===========\t========="); - for (int i = 0; i < memAllocation.size(); i++) { - System.out.print(" " + i + "\t\t"); - if (memAllocation.get(i) != NO_ALLOCATION) - System.out.print(memAllocation.get(i)); - else - System.out.print("Not Allocated"); - System.out.println(); - } + /** + * Method to print the memory allocated. + * + * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the + * firstFit method. + */ + public static void printMemoryAllocation(ArrayList memAllocation) { + System.out.println("Process No.\tBlock No."); + System.out.println("===========\t========="); + for (int i = 0; i < memAllocation.size(); i++) { + System.out.print(" " + i + "\t\t"); + if (memAllocation.get(i) != NO_ALLOCATION) System.out.print(memAllocation.get(i)); + else System.out.print("Not Allocated"); + System.out.println(); } -} \ No newline at end of file + } +} diff --git a/Others/FloydTriangle.java b/Others/FloydTriangle.java index 70479dd24e63..73b988f72398 100644 --- a/Others/FloydTriangle.java +++ b/Others/FloydTriangle.java @@ -2,18 +2,17 @@ import java.util.Scanner; - class FloydTriangle { - public static void main(String[] args) { - Scanner sc = new Scanner(System.in); - System.out.println("Enter the number of rows which you want in your Floyd Triangle: "); - int r = sc.nextInt(), n = 0; - sc.close(); - for (int i = 0; i < r; i++) { - for (int j = 0; j <= i; j++) { - System.out.print(++n + " "); - } - System.out.println(); - } + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.println("Enter the number of rows which you want in your Floyd Triangle: "); + int r = sc.nextInt(), n = 0; + sc.close(); + for (int i = 0; i < r; i++) { + for (int j = 0; j <= i; j++) { + System.out.print(++n + " "); + } + System.out.println(); } + } } diff --git a/Others/GuassLegendre.java b/Others/GuassLegendre.java index 409f626478ba..a1df3e22b346 100644 --- a/Others/GuassLegendre.java +++ b/Others/GuassLegendre.java @@ -1,46 +1,41 @@ package Others; -import java.lang.Math; /** - * Guass Legendre Algorithm - * ref https://en.wikipedia.org/wiki/Gauss–Legendre_algorithm + * Guass Legendre Algorithm ref https://en.wikipedia.org/wiki/Gauss–Legendre_algorithm * * @author AKS1996 */ public class GuassLegendre { - public static void main(String[] args) { - for (int i = 1; i <= 3; ++i) - System.out.println(pi(i)); - - } - - static double pi(int l) { - /* - * l: No of loops to run - */ - - double a = 1, b = Math.pow(2, -0.5), t = 0.25, p = 1; - for (int i = 0; i < l; ++i) { - double temp[] = update(a, b, t, p); - a = temp[0]; - b = temp[1]; - t = temp[2]; - p = temp[3]; - } - - return Math.pow(a + b, 2) / (4 * t); + public static void main(String[] args) { + for (int i = 1; i <= 3; ++i) System.out.println(pi(i)); + } + + static double pi(int l) { + /* + * l: No of loops to run + */ + + double a = 1, b = Math.pow(2, -0.5), t = 0.25, p = 1; + for (int i = 0; i < l; ++i) { + double temp[] = update(a, b, t, p); + a = temp[0]; + b = temp[1]; + t = temp[2]; + p = temp[3]; } - static double[] update(double a, double b, double t, double p) { - double values[] = new double[4]; - values[0] = (a + b) / 2; - values[1] = Math.sqrt(a * b); - values[2] = t - p * Math.pow(a - values[0], 2); - values[3] = 2 * p; + return Math.pow(a + b, 2) / (4 * t); + } - return values; - } + static double[] update(double a, double b, double t, double p) { + double values[] = new double[4]; + values[0] = (a + b) / 2; + values[1] = Math.sqrt(a * b); + values[2] = t - p * Math.pow(a - values[0], 2); + values[3] = 2 * p; + return values; + } } diff --git a/Others/InsertDeleteInArray.java b/Others/InsertDeleteInArray.java index dfb702847275..20d81462136f 100644 --- a/Others/InsertDeleteInArray.java +++ b/Others/InsertDeleteInArray.java @@ -4,46 +4,45 @@ public class InsertDeleteInArray { - public static void main(String[] args) { - Scanner s = new Scanner(System.in); // Input statement - System.out.println("Enter the size of the array"); - int size = s.nextInt(); - int a[] = new int[size]; - int i; + public static void main(String[] args) { + Scanner s = new Scanner(System.in); // Input statement + System.out.println("Enter the size of the array"); + int size = s.nextInt(); + int a[] = new int[size]; + int i; - // To enter the initial elements - for (i = 0; i < size; i++) { - System.out.println("Enter the element"); - a[i] = s.nextInt(); - } + // To enter the initial elements + for (i = 0; i < size; i++) { + System.out.println("Enter the element"); + a[i] = s.nextInt(); + } - // To insert a new element(we are creating a new array) - System.out.println("Enter the index at which the element should be inserted"); - int insert_pos = s.nextInt(); - System.out.println("Enter the element to be inserted"); - int ins = s.nextInt(); - int size2 = size + 1; - int b[] = new int[size2]; - for (i = 0; i < size2; i++) { - if (i <= insert_pos) { - b[i] = a[i]; - } else { - b[i] = a[i - 1]; - } - } - b[insert_pos] = ins; - for (i = 0; i < size2; i++) { - System.out.println(b[i]); - } + // To insert a new element(we are creating a new array) + System.out.println("Enter the index at which the element should be inserted"); + int insert_pos = s.nextInt(); + System.out.println("Enter the element to be inserted"); + int ins = s.nextInt(); + int size2 = size + 1; + int b[] = new int[size2]; + for (i = 0; i < size2; i++) { + if (i <= insert_pos) { + b[i] = a[i]; + } else { + b[i] = a[i - 1]; + } + } + b[insert_pos] = ins; + for (i = 0; i < size2; i++) { + System.out.println(b[i]); + } - // To delete an element given the index - System.out.println("Enter the index at which element is to be deleted"); - int del_pos = s.nextInt(); - for (i = del_pos; i < size2 - 1; i++) { - b[i] = b[i + 1]; - } - for (i = 0; i < size2 - 1; i++) - System.out.println(b[i]); - s.close(); + // To delete an element given the index + System.out.println("Enter the index at which element is to be deleted"); + int del_pos = s.nextInt(); + for (i = del_pos; i < size2 - 1; i++) { + b[i] = b[i + 1]; } + for (i = 0; i < size2 - 1; i++) System.out.println(b[i]); + s.close(); + } } diff --git a/Others/KMP.java b/Others/KMP.java index e883076759ff..c221edf3f353 100644 --- a/Others/KMP.java +++ b/Others/KMP.java @@ -1,57 +1,53 @@ package Others; -/** - * Implementation of Knuth–Morris–Pratt algorithm - * Usage: see the main function for an example - */ +/** Implementation of Knuth–Morris–Pratt algorithm Usage: see the main function for an example */ public class KMP { - //a working example - public static void main(String[] args) { - final String haystack = "AAAAABAAABA"; //This is the full string - final String needle = "AAAA"; //This is the substring that we want to find - KMPmatcher(haystack, needle); + // a working example + public static void main(String[] args) { + final String haystack = "AAAAABAAABA"; // This is the full string + final String needle = "AAAA"; // This is the substring that we want to find + KMPmatcher(haystack, needle); + } + + // find the starting index in string haystack[] that matches the search word P[] + public static void KMPmatcher(final String haystack, final String needle) { + final int m = haystack.length(); + final int n = needle.length(); + final int[] pi = computePrefixFunction(needle); + int q = 0; + for (int i = 0; i < m; i++) { + while (q > 0 && haystack.charAt(i) != needle.charAt(q)) { + q = pi[q - 1]; + } + + if (haystack.charAt(i) == needle.charAt(q)) { + q++; + } + + if (q == n) { + System.out.println("Pattern starts: " + (i + 1 - n)); + q = pi[q - 1]; + } } - - // find the starting index in string haystack[] that matches the search word P[] - public static void KMPmatcher(final String haystack, final String needle) { - final int m = haystack.length(); - final int n = needle.length(); - final int[] pi = computePrefixFunction(needle); - int q = 0; - for (int i = 0; i < m; i++) { - while (q > 0 && haystack.charAt(i) != needle.charAt(q)) { - q = pi[q - 1]; - } - - if (haystack.charAt(i) == needle.charAt(q)) { - q++; - } - - if (q == n) { - System.out.println("Pattern starts: " + (i + 1 - n)); - q = pi[q - 1]; - } - } - } - - // return the prefix function - private static int[] computePrefixFunction(final String P) { - final int n = P.length(); - final int[] pi = new int[n]; - pi[0] = 0; - int q = 0; - for (int i = 1; i < n; i++) { - while (q > 0 && P.charAt(q) != P.charAt(i)) { - q = pi[q - 1]; - } - - if (P.charAt(q) == P.charAt(i)) { - q++; - } - - pi[i] = q; - - } - return pi; + } + + // return the prefix function + private static int[] computePrefixFunction(final String P) { + final int n = P.length(); + final int[] pi = new int[n]; + pi[0] = 0; + int q = 0; + for (int i = 1; i < n; i++) { + while (q > 0 && P.charAt(q) != P.charAt(i)) { + q = pi[q - 1]; + } + + if (P.charAt(q) == P.charAt(i)) { + q++; + } + + pi[i] = q; } -} \ No newline at end of file + return pi; + } +} diff --git a/Others/Krishnamurthy.java b/Others/Krishnamurthy.java index f2f3533a7549..d7a48522537f 100644 --- a/Others/Krishnamurthy.java +++ b/Others/Krishnamurthy.java @@ -3,28 +3,25 @@ import java.util.Scanner; class Krishnamurthy { - static int fact(int n) { - int i, p = 1; - for (i = n; i >= 1; i--) - p = p * i; - return p; - } + static int fact(int n) { + int i, p = 1; + for (i = n; i >= 1; i--) p = p * i; + return p; + } - public static void main(String args[]) { - Scanner sc = new Scanner(System.in); - int a, b, s = 0; - System.out.print("Enter the number : "); - a = sc.nextInt(); - int n = a; - while (a > 0) { - b = a % 10; - s = s + fact(b); - a = a / 10; - } - if (s == n) - System.out.print(n + " is a krishnamurthy number"); - else - System.out.print(n + " is not a krishnamurthy number"); - sc.close(); + public static void main(String args[]) { + Scanner sc = new Scanner(System.in); + int a, b, s = 0; + System.out.print("Enter the number : "); + a = sc.nextInt(); + int n = a; + while (a > 0) { + b = a % 10; + s = s + fact(b); + a = a / 10; } + if (s == n) System.out.print(n + " is a krishnamurthy number"); + else System.out.print(n + " is not a krishnamurthy number"); + sc.close(); + } } diff --git a/Others/LinearCongruentialGenerator.java b/Others/LinearCongruentialGenerator.java index 7ce224e0e9fe..d735d6a663e0 100644 --- a/Others/LinearCongruentialGenerator.java +++ b/Others/LinearCongruentialGenerator.java @@ -8,53 +8,55 @@ */ public class LinearCongruentialGenerator { - private double a, c, m, previousValue; + private double a, c, m, previousValue; - /*** - * These parameters are saved and used when nextNumber() is called. - * The current timestamp in milliseconds is used as the seed. - * - * @param multiplier - * @param increment - * @param modulo The maximum number that can be generated (exclusive). A common value is 2^32. - */ - public LinearCongruentialGenerator(double multiplier, double increment, double modulo) { - this(System.currentTimeMillis(), multiplier, increment, modulo); - } + /*** + * These parameters are saved and used when nextNumber() is called. + * The current timestamp in milliseconds is used as the seed. + * + * @param multiplier + * @param increment + * @param modulo The maximum number that can be generated (exclusive). A common value is 2^32. + */ + public LinearCongruentialGenerator(double multiplier, double increment, double modulo) { + this(System.currentTimeMillis(), multiplier, increment, modulo); + } - /*** - * These parameters are saved and used when nextNumber() is called. - * - * @param seed - * @param multiplier - * @param increment - * @param modulo The maximum number that can be generated (exclusive). A common value is 2^32. - */ - public LinearCongruentialGenerator(double seed, double multiplier, double increment, double modulo) { - this.previousValue = seed; - this.a = multiplier; - this.c = increment; - this.m = modulo; - } + /*** + * These parameters are saved and used when nextNumber() is called. + * + * @param seed + * @param multiplier + * @param increment + * @param modulo The maximum number that can be generated (exclusive). A common value is 2^32. + */ + public LinearCongruentialGenerator( + double seed, double multiplier, double increment, double modulo) { + this.previousValue = seed; + this.a = multiplier; + this.c = increment; + this.m = modulo; + } - /** - * The smallest number that can be generated is zero. - * The largest number that can be generated is modulo-1. modulo is set in the constructor. - * - * @return a pseudorandom number. - */ - public double nextNumber() { - previousValue = (a * previousValue + c) % m; - return previousValue; - } + /** + * The smallest number that can be generated is zero. The largest number that can be generated is + * modulo-1. modulo is set in the constructor. + * + * @return a pseudorandom number. + */ + public double nextNumber() { + previousValue = (a * previousValue + c) % m; + return previousValue; + } - public static void main(String[] args) { - // Show the LCG in action. - // Decisive proof that the LCG works could be made by adding each number - // generated to a Set while checking for duplicates. - LinearCongruentialGenerator lcg = new LinearCongruentialGenerator(1664525, 1013904223, Math.pow(2.0, 32.0)); - for (int i = 0; i < 512; i++) { - System.out.println(lcg.nextNumber()); - } + public static void main(String[] args) { + // Show the LCG in action. + // Decisive proof that the LCG works could be made by adding each number + // generated to a Set while checking for duplicates. + LinearCongruentialGenerator lcg = + new LinearCongruentialGenerator(1664525, 1013904223, Math.pow(2.0, 32.0)); + for (int i = 0; i < 512; i++) { + System.out.println(lcg.nextNumber()); } + } } diff --git a/Others/LowestBasePalindrome.java b/Others/LowestBasePalindrome.java index 2f8831100d3d..b6d169887524 100644 --- a/Others/LowestBasePalindrome.java +++ b/Others/LowestBasePalindrome.java @@ -4,144 +4,139 @@ import java.util.Scanner; /** - * Class for finding the lowest base in which a given integer is a palindrome. - * Includes auxiliary methods for converting between bases and reversing strings. - *

- * NOTE: There is potential for error, see note at line 63. + * Class for finding the lowest base in which a given integer is a palindrome. Includes auxiliary + * methods for converting between bases and reversing strings. + * + *

NOTE: There is potential for error, see note at line 63. * * @author RollandMichael * @version 2017.09.28 */ public class LowestBasePalindrome { - public static void main(String[] args) { - Scanner in = new Scanner(System.in); - int n = 0; - while (true) { - try { - System.out.print("Enter number: "); - n = in.nextInt(); - break; - } catch (InputMismatchException e) { - System.out.println("Invalid input!"); - in.next(); - } - } - System.out.println(n + " is a palindrome in base " + lowestBasePalindrome(n)); - System.out.println(base2base(Integer.toString(n), 10, lowestBasePalindrome(n))); - in.close(); + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + int n = 0; + while (true) { + try { + System.out.print("Enter number: "); + n = in.nextInt(); + break; + } catch (InputMismatchException e) { + System.out.println("Invalid input!"); + in.next(); + } } + System.out.println(n + " is a palindrome in base " + lowestBasePalindrome(n)); + System.out.println(base2base(Integer.toString(n), 10, lowestBasePalindrome(n))); + in.close(); + } - /** - * Given a number in base 10, returns the lowest base in which the - * number is represented by a palindrome (read the same left-to-right - * and right-to-left). - * - * @param num A number in base 10. - * @return The lowest base in which num is a palindrome. - */ - public static int lowestBasePalindrome(int num) { - int base, num2 = num; - int digit; - char digitC; - boolean foundBase = false; - String newNum = ""; - String digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + /** + * Given a number in base 10, returns the lowest base in which the number is represented by a + * palindrome (read the same left-to-right and right-to-left). + * + * @param num A number in base 10. + * @return The lowest base in which num is a palindrome. + */ + public static int lowestBasePalindrome(int num) { + int base, num2 = num; + int digit; + char digitC; + boolean foundBase = false; + String newNum = ""; + String digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - while (!foundBase) { - // Try from bases 2 to num-1 - for (base = 2; base < num2; base++) { - newNum = ""; - while (num > 0) { - // Obtain the first digit of n in the current base, - // which is equivalent to the integer remainder of (n/base). - // The next digit is obtained by dividing n by the base and - // continuing the process of getting the remainder. This is done - // until n is <=0 and the number in the new base is obtained. - digit = (num % base); - num /= base; - // If the digit isn't in the set of [0-9][A-Z] (beyond base 36), its character - // form is just its value in ASCII. + while (!foundBase) { + // Try from bases 2 to num-1 + for (base = 2; base < num2; base++) { + newNum = ""; + while (num > 0) { + // Obtain the first digit of n in the current base, + // which is equivalent to the integer remainder of (n/base). + // The next digit is obtained by dividing n by the base and + // continuing the process of getting the remainder. This is done + // until n is <=0 and the number in the new base is obtained. + digit = (num % base); + num /= base; + // If the digit isn't in the set of [0-9][A-Z] (beyond base 36), its character + // form is just its value in ASCII. - // NOTE: This may cause problems, as the capital letters are ASCII values - // 65-90. It may cause false positives when one digit is, for instance 10 and assigned - // 'A' from the character array and the other is 65 and also assigned 'A'. + // NOTE: This may cause problems, as the capital letters are ASCII values + // 65-90. It may cause false positives when one digit is, for instance 10 and assigned + // 'A' from the character array and the other is 65 and also assigned 'A'. - // Regardless, the character is added to the representation of n - // in the current base. - if (digit >= digits.length()) { - digitC = (char) (digit); - newNum += digitC; - continue; - } - newNum += digits.charAt(digit); - } - // Num is assigned back its original value for the next iteration. - num = num2; - // Auxiliary method reverses the number. - String reverse = reverse(newNum); - // If the number is read the same as its reverse, then it is a palindrome. - // The current base is returned. - if (reverse.equals(newNum)) { - foundBase = true; - return base; - } - } + // Regardless, the character is added to the representation of n + // in the current base. + if (digit >= digits.length()) { + digitC = (char) (digit); + newNum += digitC; + continue; + } + newNum += digits.charAt(digit); } - // If all else fails, n is always a palindrome in base n-1. ("11") - return num - 1; + // Num is assigned back its original value for the next iteration. + num = num2; + // Auxiliary method reverses the number. + String reverse = reverse(newNum); + // If the number is read the same as its reverse, then it is a palindrome. + // The current base is returned. + if (reverse.equals(newNum)) { + foundBase = true; + return base; + } + } } + // If all else fails, n is always a palindrome in base n-1. ("11") + return num - 1; + } - private static String reverse(String str) { - String reverse = ""; - for (int i = str.length() - 1; i >= 0; i--) { - reverse += str.charAt(i); - } - return reverse; + private static String reverse(String str) { + String reverse = ""; + for (int i = str.length() - 1; i >= 0; i--) { + reverse += str.charAt(i); } + return reverse; + } - private static String base2base(String n, int b1, int b2) { - // Declare variables: decimal value of n, - // character of base b1, character of base b2, - // and the string that will be returned. - int decimalValue = 0, charB2; - char charB1; - String output = ""; - // Go through every character of n - for (int i = 0; i < n.length(); i++) { - // store the character in charB1 - charB1 = n.charAt(i); - // if it is a non-number, convert it to a decimal value >9 and store it in charB2 - if (charB1 >= 'A' && charB1 <= 'Z') - charB2 = 10 + (charB1 - 'A'); - // Else, store the integer value in charB2 - else - charB2 = charB1 - '0'; - // Convert the digit to decimal and add it to the - // decimalValue of n - decimalValue = decimalValue * b1 + charB2; - } + private static String base2base(String n, int b1, int b2) { + // Declare variables: decimal value of n, + // character of base b1, character of base b2, + // and the string that will be returned. + int decimalValue = 0, charB2; + char charB1; + String output = ""; + // Go through every character of n + for (int i = 0; i < n.length(); i++) { + // store the character in charB1 + charB1 = n.charAt(i); + // if it is a non-number, convert it to a decimal value >9 and store it in charB2 + if (charB1 >= 'A' && charB1 <= 'Z') charB2 = 10 + (charB1 - 'A'); + // Else, store the integer value in charB2 + else charB2 = charB1 - '0'; + // Convert the digit to decimal and add it to the + // decimalValue of n + decimalValue = decimalValue * b1 + charB2; + } - // Converting the decimal value to base b2: - // A number is converted from decimal to another base - // by continuously dividing by the base and recording - // the remainder until the quotient is zero. The number in the - // new base is the remainders, with the last remainder - // being the left-most digit. + // Converting the decimal value to base b2: + // A number is converted from decimal to another base + // by continuously dividing by the base and recording + // the remainder until the quotient is zero. The number in the + // new base is the remainders, with the last remainder + // being the left-most digit. - // While the quotient is NOT zero: - while (decimalValue != 0) { - // If the remainder is a digit < 10, simply add it to - // the left side of the new number. - if (decimalValue % b2 < 10) - output = Integer.toString(decimalValue % b2) + output; - // If the remainder is >= 10, add a character with the - // corresponding value to the new number. (A = 10, B = 11, C = 12, ...) - else - output = (char) ((decimalValue % b2) + 55) + output; - // Divide by the new base again - decimalValue /= b2; - } - return output; + // While the quotient is NOT zero: + while (decimalValue != 0) { + // If the remainder is a digit < 10, simply add it to + // the left side of the new number. + if (decimalValue % b2 < 10) output = Integer.toString(decimalValue % b2) + output; + // If the remainder is >= 10, add a character with the + // corresponding value to the new number. (A = 10, B = 11, C = 12, ...) + else output = (char) ((decimalValue % b2) + 55) + output; + // Divide by the new base again + decimalValue /= b2; } + return output; + } } diff --git a/Others/PasswordGen.java b/Others/PasswordGen.java index c41768ad0685..018cffe6bacd 100644 --- a/Others/PasswordGen.java +++ b/Others/PasswordGen.java @@ -1,47 +1,44 @@ package Others; +import java.util.ArrayList; import java.util.Collections; -import java.util.Random; import java.util.List; -import java.util.ArrayList; - +import java.util.Random; /** - * Creates a random password from ASCII letters - * Given password length bounds + * Creates a random password from ASCII letters Given password length bounds * * @author AKS1996 * @date 2017.10.25 */ class PasswordGen { - public static void main(String args[]) { - String password = generatePassword(8, 16); - System.out.print("Password: " + password); - } + public static void main(String args[]) { + String password = generatePassword(8, 16); + System.out.print("Password: " + password); + } - static String generatePassword(int min_length, int max_length) { - Random random = new Random(); + static String generatePassword(int min_length, int max_length) { + Random random = new Random(); - String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - String lower = "abcdefghijklmnopqrstuvwxyz"; - String numbers = "0123456789"; - String specialChars = "!@#$%^&*(){}?"; + String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + String lower = "abcdefghijklmnopqrstuvwxyz"; + String numbers = "0123456789"; + String specialChars = "!@#$%^&*(){}?"; - String allChars = upper + lower + numbers + specialChars; + String allChars = upper + lower + numbers + specialChars; - List letters = new ArrayList(); - for (char c : allChars.toCharArray()) - letters.add(c); + List letters = new ArrayList(); + for (char c : allChars.toCharArray()) letters.add(c); - // Inbuilt method to randomly shuffle a elements of a list - Collections.shuffle(letters); - StringBuilder password = new StringBuilder(); + // Inbuilt method to randomly shuffle a elements of a list + Collections.shuffle(letters); + StringBuilder password = new StringBuilder(); - // Note that size of the password is also random - for (int i = random.nextInt(max_length - min_length) + min_length; i > 0; --i) { - password .append( letters.get(random.nextInt(letters.size()))); - } - - return password.toString(); + // Note that size of the password is also random + for (int i = random.nextInt(max_length - min_length) + min_length; i > 0; --i) { + password.append(letters.get(random.nextInt(letters.size()))); } + + return password.toString(); + } } diff --git a/Others/PerlinNoise.java b/Others/PerlinNoise.java index f0e7f63dae31..4c1ad993a134 100644 --- a/Others/PerlinNoise.java +++ b/Others/PerlinNoise.java @@ -4,164 +4,165 @@ import java.util.Scanner; /** - * For detailed info and implementation see: Perlin-Noise + * For detailed info and implementation see: Perlin-Noise */ public class PerlinNoise { - /** - * @param width width of noise array - * @param height height of noise array - * @param octaveCount numbers of layers used for blending noise - * @param persistence value of impact each layer get while blending - * @param seed used for randomizer - * @return float array containing calculated "Perlin-Noise" values - */ - static float[][] generatePerlinNoise(int width, int height, int octaveCount, float persistence, long seed) { - final float[][] base = new float[width][height]; - final float[][] perlinNoise = new float[width][height]; - final float[][][] noiseLayers = new float[octaveCount][][]; - - Random random = new Random(seed); - //fill base array with random values as base for noise - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - base[x][y] = random.nextFloat(); - } - } + /** + * @param width width of noise array + * @param height height of noise array + * @param octaveCount numbers of layers used for blending noise + * @param persistence value of impact each layer get while blending + * @param seed used for randomizer + * @return float array containing calculated "Perlin-Noise" values + */ + static float[][] generatePerlinNoise( + int width, int height, int octaveCount, float persistence, long seed) { + final float[][] base = new float[width][height]; + final float[][] perlinNoise = new float[width][height]; + final float[][][] noiseLayers = new float[octaveCount][][]; + + Random random = new Random(seed); + // fill base array with random values as base for noise + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + base[x][y] = random.nextFloat(); + } + } - //calculate octaves with different roughness - for (int octave = 0; octave < octaveCount; octave++) { - noiseLayers[octave] = generatePerlinNoiseLayer(base, width, height, octave); - } + // calculate octaves with different roughness + for (int octave = 0; octave < octaveCount; octave++) { + noiseLayers[octave] = generatePerlinNoiseLayer(base, width, height, octave); + } - float amplitude = 1f; - float totalAmplitude = 0f; - - //calculate perlin noise by blending each layer together with specific persistence - for (int octave = octaveCount - 1; octave >= 0; octave--) { - amplitude *= persistence; - totalAmplitude += amplitude; - - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - //adding each value of the noise layer to the noise - //by increasing amplitude the rougher noises will have more impact - perlinNoise[x][y] += noiseLayers[octave][x][y] * amplitude; - } - } - } + float amplitude = 1f; + float totalAmplitude = 0f; - //normalize values so that they stay between 0..1 - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - perlinNoise[x][y] /= totalAmplitude; - } - } + // calculate perlin noise by blending each layer together with specific persistence + for (int octave = octaveCount - 1; octave >= 0; octave--) { + amplitude *= persistence; + totalAmplitude += amplitude; - return perlinNoise; - } - - /** - * @param base base random float array - * @param width width of noise array - * @param height height of noise array - * @param octave current layer - * @return float array containing calculated "Perlin-Noise-Layer" values - */ - static float[][] generatePerlinNoiseLayer(float[][] base, int width, int height, int octave) { - float[][] perlinNoiseLayer = new float[width][height]; - - //calculate period (wavelength) for different shapes - int period = 1 << octave; //2^k - float frequency = 1f / period; // 1/2^k - - for (int x = 0; x < width; x++) { - //calculates the horizontal sampling indices - int x0 = (x / period) * period; - int x1 = (x0 + period) % width; - float horizintalBlend = (x - x0) * frequency; - - for (int y = 0; y < height; y++) { - //calculates the vertical sampling indices - int y0 = (y / period) * period; - int y1 = (y0 + period) % height; - float verticalBlend = (y - y0) * frequency; - - //blend top corners - float top = interpolate(base[x0][y0], base[x1][y0], horizintalBlend); - - //blend bottom corners - float bottom = interpolate(base[x0][y1], base[x1][y1], horizintalBlend); - - //blend top and bottom interpolation to get the final blend value for this cell - perlinNoiseLayer[x][y] = interpolate(top, bottom, verticalBlend); - } + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + // adding each value of the noise layer to the noise + // by increasing amplitude the rougher noises will have more impact + perlinNoise[x][y] += noiseLayers[octave][x][y] * amplitude; } - - return perlinNoiseLayer; + } } - /** - * @param a value of point a - * @param b value of point b - * @param alpha determine which value has more impact (closer to 0 -> a, closer to 1 -> b) - * @return interpolated value - */ - static float interpolate(float a, float b, float alpha) { - return a * (1 - alpha) + alpha * b; + // normalize values so that they stay between 0..1 + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + perlinNoise[x][y] /= totalAmplitude; + } } - public static void main(String[] args) { - Scanner in = new Scanner(System.in); - - final int width; - final int height; - final int octaveCount; - final float persistence; - final long seed; - final String charset; - final float[][] perlinNoise; - - System.out.println("Width (int): "); - width = in.nextInt(); - - System.out.println("Height (int): "); - height = in.nextInt(); - - System.out.println("Octave count (int): "); - octaveCount = in.nextInt(); - - System.out.println("Persistence (float): "); - persistence = in.nextFloat(); - - System.out.println("Seed (long): "); - seed = in.nextLong(); - - System.out.println("Charset (String): "); - charset = in.next(); - - - perlinNoise = generatePerlinNoise(width, height, octaveCount, persistence, seed); - final char[] chars = charset.toCharArray(); - final int length = chars.length; - final float step = 1f / length; - //output based on charset - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - float value = step; - float noiseValue = perlinNoise[x][y]; - - for (char c : chars) { - if (noiseValue <= value) { - System.out.print(c); - break; - } - - value += step; - } - } + return perlinNoise; + } + + /** + * @param base base random float array + * @param width width of noise array + * @param height height of noise array + * @param octave current layer + * @return float array containing calculated "Perlin-Noise-Layer" values + */ + static float[][] generatePerlinNoiseLayer(float[][] base, int width, int height, int octave) { + float[][] perlinNoiseLayer = new float[width][height]; + + // calculate period (wavelength) for different shapes + int period = 1 << octave; // 2^k + float frequency = 1f / period; // 1/2^k + + for (int x = 0; x < width; x++) { + // calculates the horizontal sampling indices + int x0 = (x / period) * period; + int x1 = (x0 + period) % width; + float horizintalBlend = (x - x0) * frequency; + + for (int y = 0; y < height; y++) { + // calculates the vertical sampling indices + int y0 = (y / period) * period; + int y1 = (y0 + period) % height; + float verticalBlend = (y - y0) * frequency; + + // blend top corners + float top = interpolate(base[x0][y0], base[x1][y0], horizintalBlend); + + // blend bottom corners + float bottom = interpolate(base[x0][y1], base[x1][y1], horizintalBlend); + + // blend top and bottom interpolation to get the final blend value for this cell + perlinNoiseLayer[x][y] = interpolate(top, bottom, verticalBlend); + } + } - System.out.println(); + return perlinNoiseLayer; + } + + /** + * @param a value of point a + * @param b value of point b + * @param alpha determine which value has more impact (closer to 0 -> a, closer to 1 -> b) + * @return interpolated value + */ + static float interpolate(float a, float b, float alpha) { + return a * (1 - alpha) + alpha * b; + } + + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + + final int width; + final int height; + final int octaveCount; + final float persistence; + final long seed; + final String charset; + final float[][] perlinNoise; + + System.out.println("Width (int): "); + width = in.nextInt(); + + System.out.println("Height (int): "); + height = in.nextInt(); + + System.out.println("Octave count (int): "); + octaveCount = in.nextInt(); + + System.out.println("Persistence (float): "); + persistence = in.nextFloat(); + + System.out.println("Seed (long): "); + seed = in.nextLong(); + + System.out.println("Charset (String): "); + charset = in.next(); + + perlinNoise = generatePerlinNoise(width, height, octaveCount, persistence, seed); + final char[] chars = charset.toCharArray(); + final int length = chars.length; + final float step = 1f / length; + // output based on charset + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + float value = step; + float noiseValue = perlinNoise[x][y]; + + for (char c : chars) { + if (noiseValue <= value) { + System.out.print(c); + break; + } + + value += step; } - in.close(); + } + + System.out.println(); } + in.close(); + } } diff --git a/Others/QueueUsingTwoStacks.java b/Others/QueueUsingTwoStacks.java index d138f71aabfb..104f6b922088 100644 --- a/Others/QueueUsingTwoStacks.java +++ b/Others/QueueUsingTwoStacks.java @@ -5,156 +5,146 @@ /** * This implements Queue using two Stacks. * - * Big O Runtime: - * insert(): O(1) - * remove(): O(1) amortized - * isEmpty(): O(1) + *

Big O Runtime: insert(): O(1) remove(): O(1) amortized isEmpty(): O(1) * - * A queue data structure functions the same as a real world queue. - * The elements that are added first are the first to be removed. - * New elements are added to the back/rear of the queue. + *

A queue data structure functions the same as a real world queue. The elements that are added + * first are the first to be removed. New elements are added to the back/rear of the queue. * * @author sahilb2 (https://www.github.com/sahilb2) - * */ class QueueWithStack { - // Stack to keep track of elements inserted into the queue - private Stack inStack; - // Stack to keep track of elements to be removed next in queue - private Stack outStack; - - /** - * Constructor - */ - public QueueWithStack() { - this.inStack = new Stack(); - this.outStack = new Stack(); - } - - /** - * Inserts an element at the rear of the queue - * - * @param x element to be added - */ - public void insert(Object x) { - // Insert element into inStack - this.inStack.push(x); - } - - /** - * Remove an element from the front of the queue - * - * @return the new front of the queue - */ - public Object remove() { - if(this.outStack.isEmpty()) { - // Move all elements from inStack to outStack (preserving the order) - while(!this.inStack.isEmpty()) { - this.outStack.push( this.inStack.pop() ); - } - } - return this.outStack.pop(); - } - - /** - * Peek at the element from the front of the queue - * - * @return the front element of the queue - */ - public Object peekFront() { - if(this.outStack.isEmpty()) { - // Move all elements from inStack to outStack (preserving the order) - while(!this.inStack.isEmpty()) { - this.outStack.push( this.inStack.pop() ); - } - } - return this.outStack.peek(); + // Stack to keep track of elements inserted into the queue + private Stack inStack; + // Stack to keep track of elements to be removed next in queue + private Stack outStack; + + /** Constructor */ + public QueueWithStack() { + this.inStack = new Stack(); + this.outStack = new Stack(); + } + + /** + * Inserts an element at the rear of the queue + * + * @param x element to be added + */ + public void insert(Object x) { + // Insert element into inStack + this.inStack.push(x); + } + + /** + * Remove an element from the front of the queue + * + * @return the new front of the queue + */ + public Object remove() { + if (this.outStack.isEmpty()) { + // Move all elements from inStack to outStack (preserving the order) + while (!this.inStack.isEmpty()) { + this.outStack.push(this.inStack.pop()); + } } - - /** - * Peek at the element from the back of the queue - * - * @return the back element of the queue - */ - public Object peekBack() { - return this.inStack.peek(); - } - - /** - * Returns true if the queue is empty - * - * @return true if the queue is empty - */ - public boolean isEmpty() { - return (this.inStack.isEmpty() && this.outStack.isEmpty()); + return this.outStack.pop(); + } + + /** + * Peek at the element from the front of the queue + * + * @return the front element of the queue + */ + public Object peekFront() { + if (this.outStack.isEmpty()) { + // Move all elements from inStack to outStack (preserving the order) + while (!this.inStack.isEmpty()) { + this.outStack.push(this.inStack.pop()); + } } - + return this.outStack.peek(); + } + + /** + * Peek at the element from the back of the queue + * + * @return the back element of the queue + */ + public Object peekBack() { + return this.inStack.peek(); + } + + /** + * Returns true if the queue is empty + * + * @return true if the queue is empty + */ + public boolean isEmpty() { + return (this.inStack.isEmpty() && this.outStack.isEmpty()); + } } /** * This class is the example for the Queue class * * @author sahilb2 (https://www.github.com/sahilb2) - * */ public class QueueUsingTwoStacks { - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String args[]){ - QueueWithStack myQueue = new QueueWithStack(); - myQueue.insert(1); - System.out.println(myQueue.peekBack()); //Will print 1 - // instack: [(top) 1] - // outStack: [] - myQueue.insert(2); - System.out.println(myQueue.peekBack()); //Will print 2 - // instack: [(top) 2, 1] - // outStack: [] - myQueue.insert(3); - System.out.println(myQueue.peekBack()); //Will print 3 - // instack: [(top) 3, 2, 1] - // outStack: [] - myQueue.insert(4); - System.out.println(myQueue.peekBack()); //Will print 4 - // instack: [(top) 4, 3, 2, 1] - // outStack: [] - - System.out.println(myQueue.isEmpty()); //Will print false - - System.out.println(myQueue.remove()); //Will print 1 - System.out.println(myQueue.peekBack()); //Will print NULL - // instack: [] - // outStack: [(top) 2, 3, 4] - - myQueue.insert(5); - System.out.println(myQueue.peekFront()); //Will print 2 - // instack: [(top) 5] - // outStack: [(top) 2, 3, 4] - - myQueue.remove(); - System.out.println(myQueue.peekFront()); //Will print 3 - // instack: [(top) 5] - // outStack: [(top) 3, 4] - myQueue.remove(); - System.out.println(myQueue.peekFront()); //Will print 4 - // instack: [(top) 5] - // outStack: [(top) 4] - myQueue.remove(); - // instack: [(top) 5] - // outStack: [] - System.out.println(myQueue.peekFront()); //Will print 5 - // instack: [] - // outStack: [(top) 5] - myQueue.remove(); - // instack: [] - // outStack: [] - - System.out.println(myQueue.isEmpty()); //Will print true - - } + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String args[]) { + QueueWithStack myQueue = new QueueWithStack(); + myQueue.insert(1); + System.out.println(myQueue.peekBack()); // Will print 1 + // instack: [(top) 1] + // outStack: [] + myQueue.insert(2); + System.out.println(myQueue.peekBack()); // Will print 2 + // instack: [(top) 2, 1] + // outStack: [] + myQueue.insert(3); + System.out.println(myQueue.peekBack()); // Will print 3 + // instack: [(top) 3, 2, 1] + // outStack: [] + myQueue.insert(4); + System.out.println(myQueue.peekBack()); // Will print 4 + // instack: [(top) 4, 3, 2, 1] + // outStack: [] + + System.out.println(myQueue.isEmpty()); // Will print false + + System.out.println(myQueue.remove()); // Will print 1 + System.out.println(myQueue.peekBack()); // Will print NULL + // instack: [] + // outStack: [(top) 2, 3, 4] + + myQueue.insert(5); + System.out.println(myQueue.peekFront()); // Will print 2 + // instack: [(top) 5] + // outStack: [(top) 2, 3, 4] + + myQueue.remove(); + System.out.println(myQueue.peekFront()); // Will print 3 + // instack: [(top) 5] + // outStack: [(top) 3, 4] + myQueue.remove(); + System.out.println(myQueue.peekFront()); // Will print 4 + // instack: [(top) 5] + // outStack: [(top) 4] + myQueue.remove(); + // instack: [(top) 5] + // outStack: [] + System.out.println(myQueue.peekFront()); // Will print 5 + // instack: [] + // outStack: [(top) 5] + myQueue.remove(); + // instack: [] + // outStack: [] + + System.out.println(myQueue.isEmpty()); // Will print true + } } diff --git a/Others/RabinKarp.java b/Others/RabinKarp.java index ba1e6869db0a..7dafa00c7874 100644 --- a/Others/RabinKarp.java +++ b/Others/RabinKarp.java @@ -1,84 +1,79 @@ -/** - * @author Prateek Kumar Oraon (https://github.com/prateekKrOraon) - */ +/** @author Prateek Kumar Oraon (https://github.com/prateekKrOraon) */ import java.util.Scanner; -import java.lang.Math; -//An implementation of Rabin-Karp string matching algorithm -//Program will simply end if there is no match +// An implementation of Rabin-Karp string matching algorithm +// Program will simply end if there is no match public class RabinKarp { - public static Scanner scanner = null; - public final static int d = 256; + public static Scanner scanner = null; + public static final int d = 256; - public static void main(String[] args){ + public static void main(String[] args) { - scanner = new Scanner(System.in); - System.out.println("Enter String"); - String text = scanner.nextLine(); - System.out.println("Enter pattern"); - String pattern = scanner.nextLine(); + scanner = new Scanner(System.in); + System.out.println("Enter String"); + String text = scanner.nextLine(); + System.out.println("Enter pattern"); + String pattern = scanner.nextLine(); - int q = 101; - searchPat(text,pattern,q); + int q = 101; + searchPat(text, pattern, q); + } + private static void searchPat(String text, String pattern, int q) { + + int m = pattern.length(); + int n = text.length(); + int t = 0; + int p = 0; + int h = 1; + int j = 0; + int i = 0; + + h = (int) Math.pow(d, m - 1) % q; + + for (i = 0; i < m; i++) { + // hash value is calculated for each character and then added with the hash value of the next + // character for pattern + // as well as the text for length equal to the length of pattern + p = (d * p + pattern.charAt(i)) % q; + t = (d * t + text.charAt(i)) % q; } - private static void searchPat(String text, String pattern, int q) { + for (i = 0; i <= n - m; i++) { - int m = pattern.length(); - int n = text.length(); - int t = 0; - int p = 0; - int h = 1; - int j = 0; - int i = 0; + // if the calculated hash value of the pattern and text matches then + // all the characters of the pattern is matched with the text of length equal to length of the + // pattern + // if all matches then pattern exist in string + // if not then the hash value of the first character of the text is subtracted and hash value + // of the next character after the end + // of the evaluated characters is added + if (p == t) { - h = (int)Math.pow(d,m-1)%q; + // if hash value matches then the individual characters are matched + for (j = 0; j < m; j++) { - for(i =0 ; i< m; i++){ - //hash value is calculated for each character and then added with the hash value of the next character for pattern - // as well as the text for length equal to the length of pattern - p = (d*p + pattern.charAt(i))%q; - t = (d*t + text.charAt(i))%q; + // if not matched then break out of the loop + if (text.charAt(i + j) != pattern.charAt(j)) break; } - for(i=0; i<=n-m;i++){ - - //if the calculated hash value of the pattern and text matches then - //all the characters of the pattern is matched with the text of length equal to length of the pattern - //if all matches then pattern exist in string - //if not then the hash value of the first character of the text is subtracted and hash value of the next character after the end - //of the evaluated characters is added - if(p==t){ - - //if hash value matches then the individual characters are matched - for(j=0;j stack = new Stack<>(); - - //Main function - public static void main(String[] args) { - //To Create a Dummy Stack containing integers from 0-9 - for (int i = 0; i < 10; i++) { - stack.push(i); - } - System.out.println("STACK"); + // Stack + private static Stack stack = new Stack<>(); - //To print that dummy Stack - for (int k = 9; k >= 0; k--) { - System.out.println(k); - } - - //Reverse Function called - reverseUsingRecursion(stack); + // Main function + public static void main(String[] args) { + // To Create a Dummy Stack containing integers from 0-9 + for (int i = 0; i < 10; i++) { + stack.push(i); + } + System.out.println("STACK"); - System.out.println("REVERSED STACK : "); - //To print reversed stack - while (!stack.isEmpty()) { - System.out.println(stack.pop()); - } + // To print that dummy Stack + for (int k = 9; k >= 0; k--) { + System.out.println(k); + } + // Reverse Function called + reverseUsingRecursion(stack); + System.out.println("REVERSED STACK : "); + // To print reversed stack + while (!stack.isEmpty()) { + System.out.println(stack.pop()); } + } - //Function Used to reverse Stack Using Recursion - private static void reverseUsingRecursion(Stack stack) { - if (stack.isEmpty()) // If stack is empty then return - { - return; - } - /* All items are stored in call stack until we reach the end*/ - - int temptop = stack.peek(); - stack.pop(); - reverseUsingRecursion(stack); //Recursion call - insertAtEnd(temptop); // Insert items held in call stack one by one into stack + // Function Used to reverse Stack Using Recursion + private static void reverseUsingRecursion(Stack stack) { + if (stack.isEmpty()) // If stack is empty then return + { + return; } + /* All items are stored in call stack until we reach the end*/ - //Function used to insert element at the end of stack - private static void insertAtEnd(int temptop) { - if (stack.isEmpty()) { - stack.push(temptop); // If stack is empty push the element - } else { - int temp = stack.peek(); /* All the items are stored in call stack until we reach end*/ - stack.pop(); + int temptop = stack.peek(); + stack.pop(); + reverseUsingRecursion(stack); // Recursion call + insertAtEnd(temptop); // Insert items held in call stack one by one into stack + } - insertAtEnd(temptop); //Recursive call + // Function used to insert element at the end of stack + private static void insertAtEnd(int temptop) { + if (stack.isEmpty()) { + stack.push(temptop); // If stack is empty push the element + } else { + int temp = stack.peek(); /* All the items are stored in call stack until we reach end*/ + stack.pop(); - stack.push(temp); - } + insertAtEnd(temptop); // Recursive call + stack.push(temp); } - + } } diff --git a/Others/RootPrecision.java b/Others/RootPrecision.java index 71690a4b2591..4f9f86965c2b 100644 --- a/Others/RootPrecision.java +++ b/Others/RootPrecision.java @@ -4,33 +4,33 @@ public class RootPrecision { - public static void main(String[] args) { - // take input - Scanner scn = new Scanner(System.in); + public static void main(String[] args) { + // take input + Scanner scn = new Scanner(System.in); - // N is the input number - int N = scn.nextInt(); + // N is the input number + int N = scn.nextInt(); - // P is precision value for eg - P is 3 in 2.564 and 5 in 3.80870. - int P = scn.nextInt(); - System.out.println(squareRoot(N, P)); + // P is precision value for eg - P is 3 in 2.564 and 5 in 3.80870. + int P = scn.nextInt(); + System.out.println(squareRoot(N, P)); - scn.close(); - } + scn.close(); + } - public static double squareRoot(int N, int P) { - // rv means return value - double rv; + public static double squareRoot(int N, int P) { + // rv means return value + double rv; - double root = Math.pow(N, 0.5); + double root = Math.pow(N, 0.5); - // calculate precision to power of 10 and then multiply it with root value. - int precision = (int) Math.pow(10, P); - root = root * precision; - /*typecast it into integer then divide by precision and again typecast into double - so as to have decimal points upto P precision */ + // calculate precision to power of 10 and then multiply it with root value. + int precision = (int) Math.pow(10, P); + root = root * precision; + /*typecast it into integer then divide by precision and again typecast into double + so as to have decimal points upto P precision */ - rv = (int) root; - return rv / precision; - } -} \ No newline at end of file + rv = (int) root; + return rv / precision; + } +} diff --git a/Others/SJF.java b/Others/SJF.java index 247f3da0989f..9eb9e1844daf 100644 --- a/Others/SJF.java +++ b/Others/SJF.java @@ -1,182 +1,184 @@ package Others; /** + * + * *

Shortest job first.

- *

Shortest job first (SJF) or shortest job next, is a scheduling policy - * that selects the waiting process with the smallest execution time to execute next - * Shortest Job first has the advantage of having minimum average waiting time among all scheduling algorithms. - * It is a Greedy Algorithm. - * It may cause starvation if shorter processes keep coming. - * This problem has been solved using the concept of aging.

+ * + *

Shortest job first (SJF) or shortest job next, is a scheduling policy that selects the waiting + * process with the smallest execution time to execute next Shortest Job first has the advantage of + * having minimum average waiting time among all scheduling algorithms. It is a Greedy Algorithm. It + * may cause starvation if shorter processes keep coming. This problem has been solved using the + * concept of aging. * * @author shivg7706 * @since 2018/10/27 */ - -import java.util.Scanner; +import java.util.*; import java.util.ArrayList; import java.util.Comparator; -import java.util.*; +import java.util.Scanner; class Process { - public int pid; - public int arrivalTime; - public int burstTime; - public int priority; - public int turnAroundTime; - public int waitTime; - public int remainingTime; + public int pid; + public int arrivalTime; + public int burstTime; + public int priority; + public int turnAroundTime; + public int waitTime; + public int remainingTime; } class Schedule { - private int noOfProcess; - private int timer = 0; - private ArrayList processes; - private ArrayList remainingProcess; - private ArrayList gantChart; - private float burstAll; - private Map> arrivals; - - Schedule() { - Scanner in = new Scanner(System.in); - - processes = new ArrayList(); - remainingProcess = new ArrayList(); - - gantChart = new ArrayList<>(); - arrivals = new HashMap<>(); - - System.out.print("Enter the no. of processes: "); - noOfProcess = in.nextInt(); - System.out.println("Enter the arrival, burst and priority of processes"); - for (int i = 0; i < noOfProcess; i++) { - Process p = new Process(); - p.pid = i; - p.arrivalTime = in.nextInt(); - p.burstTime = in.nextInt(); - p.priority = in.nextInt(); - p.turnAroundTime = 0; - p.waitTime = 0; - p.remainingTime = p.burstTime; - - if (arrivals.get(p.arrivalTime) == null) { - arrivals.put(p.arrivalTime, new ArrayList()); - } - arrivals.get(p.arrivalTime).add(p); - processes.add(p); - burstAll += p.burstTime; - } - in.close(); - + private int noOfProcess; + private int timer = 0; + private ArrayList processes; + private ArrayList remainingProcess; + private ArrayList gantChart; + private float burstAll; + private Map> arrivals; + + Schedule() { + Scanner in = new Scanner(System.in); + + processes = new ArrayList(); + remainingProcess = new ArrayList(); + + gantChart = new ArrayList<>(); + arrivals = new HashMap<>(); + + System.out.print("Enter the no. of processes: "); + noOfProcess = in.nextInt(); + System.out.println("Enter the arrival, burst and priority of processes"); + for (int i = 0; i < noOfProcess; i++) { + Process p = new Process(); + p.pid = i; + p.arrivalTime = in.nextInt(); + p.burstTime = in.nextInt(); + p.priority = in.nextInt(); + p.turnAroundTime = 0; + p.waitTime = 0; + p.remainingTime = p.burstTime; + + if (arrivals.get(p.arrivalTime) == null) { + arrivals.put(p.arrivalTime, new ArrayList()); + } + arrivals.get(p.arrivalTime).add(p); + processes.add(p); + burstAll += p.burstTime; } + in.close(); + } + void startScheduling() { - void startScheduling() { + processes.sort( + new Comparator() { + @Override + public int compare(Process a, Process b) { + return a.arrivalTime - b.arrivalTime; + } + }); + + while (!(arrivals.size() == 0 && remainingProcess.size() == 0)) { + removeFinishedProcess(); + if (arrivals.get(timer) != null) { + remainingProcess.addAll(arrivals.get(timer)); + arrivals.remove(timer); + } + remainingProcess.sort( + new Comparator() { + private int alpha = 6; + private int beta = 1; - processes.sort(new Comparator() { @Override public int compare(Process a, Process b) { - return a.arrivalTime - b.arrivalTime; + int aRem = a.remainingTime; + int bRem = b.remainingTime; + int aprior = a.priority; + int bprior = b.priority; + return (alpha * aRem + beta * aprior) - (alpha * bRem + beta * bprior); } - }); + }); - while (!(arrivals.size() == 0 && remainingProcess.size() == 0)) { - removeFinishedProcess(); - if (arrivals.get(timer) != null) { - remainingProcess.addAll(arrivals.get(timer)); - arrivals.remove(timer); - } - - remainingProcess.sort(new Comparator() { - private int alpha = 6; - private int beta = 1; - - @Override - public int compare(Process a, Process b) { - int aRem = a.remainingTime; - int bRem = b.remainingTime; - int aprior = a.priority; - int bprior = b.priority; - return (alpha * aRem + beta * aprior) - (alpha * bRem + beta * bprior); - } - }); - - int k = timeElapsed(timer); - ageing(k); - timer++; - } - - System.out.println("Total time required: " + (timer - 1)); + int k = timeElapsed(timer); + ageing(k); + timer++; } - void removeFinishedProcess() { - ArrayList completed = new ArrayList(); - for (int i = 0; i < remainingProcess.size(); i++) { - if (remainingProcess.get(i).remainingTime == 0) { - completed.add(i); - } - } - - for (int i = 0; i < completed.size(); i++) { - int pid = remainingProcess.get(completed.get(i)).pid; - processes.get(pid).waitTime = remainingProcess.get(completed.get(i)).waitTime; - remainingProcess.remove(remainingProcess.get(completed.get(i))); - } - + System.out.println("Total time required: " + (timer - 1)); + } + void removeFinishedProcess() { + ArrayList completed = new ArrayList(); + for (int i = 0; i < remainingProcess.size(); i++) { + if (remainingProcess.get(i).remainingTime == 0) { + completed.add(i); + } } - public int timeElapsed(int i) { - if (!remainingProcess.isEmpty()) { - gantChart.add(i, remainingProcess.get(0).pid); - remainingProcess.get(0).remainingTime--; - return 1; - } - return 0; + for (int i = 0; i < completed.size(); i++) { + int pid = remainingProcess.get(completed.get(i)).pid; + processes.get(pid).waitTime = remainingProcess.get(completed.get(i)).waitTime; + remainingProcess.remove(remainingProcess.get(completed.get(i))); } + } - public void ageing(int k) { - for (int i = k; i < remainingProcess.size(); i++) { - remainingProcess.get(i).waitTime++; - if (remainingProcess.get(i).waitTime % 7 == 0) { - remainingProcess.get(i).priority--; - } - } + public int timeElapsed(int i) { + if (!remainingProcess.isEmpty()) { + gantChart.add(i, remainingProcess.get(0).pid); + remainingProcess.get(0).remainingTime--; + return 1; } + return 0; + } + + public void ageing(int k) { + for (int i = k; i < remainingProcess.size(); i++) { + remainingProcess.get(i).waitTime++; + if (remainingProcess.get(i).waitTime % 7 == 0) { + remainingProcess.get(i).priority--; + } + } + } + public void solve() { + System.out.println("Gant chart "); + for (int i = 0; i < gantChart.size(); i++) { + System.out.print(gantChart.get(i) + " "); + } + System.out.println(); - public void solve() { - System.out.println("Gant chart "); - for (int i = 0; i < gantChart.size(); i++) { - System.out.print(gantChart.get(i) + " "); - } - System.out.println(); - - float waitTimeTot = 0; - float tatTime = 0; - - for (int i = 0; i < noOfProcess; i++) { - processes.get(i).turnAroundTime = processes.get(i).waitTime + processes.get(i).burstTime; + float waitTimeTot = 0; + float tatTime = 0; - waitTimeTot += processes.get(i).waitTime; - tatTime += processes.get(i).turnAroundTime; + for (int i = 0; i < noOfProcess; i++) { + processes.get(i).turnAroundTime = processes.get(i).waitTime + processes.get(i).burstTime; - System.out.println("Process no.: " + i + " Wait time: " + processes.get(i).waitTime + " Turn Around Time: " + processes.get(i).turnAroundTime); - } + waitTimeTot += processes.get(i).waitTime; + tatTime += processes.get(i).turnAroundTime; - System.out.println("Average Waiting Time: " + waitTimeTot / noOfProcess); - System.out.println("Average TAT Time: " + tatTime / noOfProcess); - System.out.println("Throughput: " + (float) noOfProcess / (timer - 1)); + System.out.println( + "Process no.: " + + i + + " Wait time: " + + processes.get(i).waitTime + + " Turn Around Time: " + + processes.get(i).turnAroundTime); } + System.out.println("Average Waiting Time: " + waitTimeTot / noOfProcess); + System.out.println("Average TAT Time: " + tatTime / noOfProcess); + System.out.println("Throughput: " + (float) noOfProcess / (timer - 1)); + } } public class SJF { - public static void main(String[] args) { - Schedule s = new Schedule(); - s.startScheduling(); - s.solve(); - } -} \ No newline at end of file + public static void main(String[] args) { + Schedule s = new Schedule(); + s.startScheduling(); + s.solve(); + } +} diff --git a/Others/SieveOfEratosthenes.java b/Others/SieveOfEratosthenes.java index 465e600a59e9..f3759d2fdb56 100644 --- a/Others/SieveOfEratosthenes.java +++ b/Others/SieveOfEratosthenes.java @@ -1,49 +1,44 @@ package Others; -/** - * @author Varun Upadhyay (https://github.com/varunu28) - */ +/** @author Varun Upadhyay (https://github.com/varunu28) */ public class SieveOfEratosthenes { - /** - * This method implements the Sieve of Eratosthenes Algorithm - * - * @param n The number till which we have to check for prime - * Prints all the prime numbers till n - **/ + /** + * This method implements the Sieve of Eratosthenes Algorithm + * + * @param n The number till which we have to check for prime Prints all the prime numbers till n + */ + public static void findPrimesTillN(int n) { + int[] arr = new int[n + 1]; - public static void findPrimesTillN(int n) { - int[] arr = new int[n + 1]; - - for (int i = 0; i <= n; i++) { - arr[i] = 1; - } + for (int i = 0; i <= n; i++) { + arr[i] = 1; + } - arr[0] = arr[1] = 0; + arr[0] = arr[1] = 0; - for (int i = 2; i <= Math.sqrt(n); i++) { - if (arr[i] == 1) { - for (int j = 2; i * j <= n; j++) { - arr[i * j] = 0; - } - } - } - - for (int i = 0; i < n + 1; i++) { - if (arr[i] == 1) { - System.out.print(i + " "); - } + for (int i = 2; i <= Math.sqrt(n); i++) { + if (arr[i] == 1) { + for (int j = 2; i * j <= n; j++) { + arr[i * j] = 0; } + } + } - System.out.println(); + for (int i = 0; i < n + 1; i++) { + if (arr[i] == 1) { + System.out.print(i + " "); + } } - // Driver Program - public static void main(String[] args) { - int n = 100; + System.out.println(); + } - // Prints 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 - findPrimesTillN(n); - } + // Driver Program + public static void main(String[] args) { + int n = 100; + // Prints 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 + findPrimesTillN(n); + } } diff --git a/Others/SkylineProblem.java b/Others/SkylineProblem.java index 31dc961133aa..5be6501c9cc2 100644 --- a/Others/SkylineProblem.java +++ b/Others/SkylineProblem.java @@ -5,129 +5,128 @@ import java.util.Scanner; public class SkylineProblem { - Building[] building; - int count; + Building[] building; + int count; - public void run() { - Scanner sc = new Scanner(System.in); + public void run() { + Scanner sc = new Scanner(System.in); - int num = sc.nextInt(); - this.building = new Building[num]; + int num = sc.nextInt(); + this.building = new Building[num]; - for (int i = 0; i < num; i++) { - String input = sc.next(); - String[] data = input.split(","); - this.add(Integer.parseInt(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2])); - } - this.print(this.findSkyline(0, num - 1)); - - sc.close(); + for (int i = 0; i < num; i++) { + String input = sc.next(); + String[] data = input.split(","); + this.add(Integer.parseInt(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2])); } + this.print(this.findSkyline(0, num - 1)); - public void add(int left, int height, int right) { - building[count++] = new Building(left, height, right); - } + sc.close(); + } - public void print(ArrayList skyline) { - Iterator it = skyline.iterator(); + public void add(int left, int height, int right) { + building[count++] = new Building(left, height, right); + } - while (it.hasNext()) { - Skyline temp = it.next(); - System.out.print(temp.coordinates + "," + temp.height); - if (it.hasNext()) { - System.out.print(","); - } - } + public void print(ArrayList skyline) { + Iterator it = skyline.iterator(); + while (it.hasNext()) { + Skyline temp = it.next(); + System.out.print(temp.coordinates + "," + temp.height); + if (it.hasNext()) { + System.out.print(","); + } } + } - public ArrayList findSkyline(int start, int end) { - if (start == end) { - ArrayList list = new ArrayList<>(); - list.add(new Skyline(building[start].left, building[start].height)); - list.add(new Skyline(building[end].right, 0)); + public ArrayList findSkyline(int start, int end) { + if (start == end) { + ArrayList list = new ArrayList<>(); + list.add(new Skyline(building[start].left, building[start].height)); + list.add(new Skyline(building[end].right, 0)); - return list; - } + return list; + } - int mid = (start + end) / 2; + int mid = (start + end) / 2; - ArrayList sky1 = this.findSkyline(start, mid); - ArrayList sky2 = this.findSkyline(mid + 1, end); + ArrayList sky1 = this.findSkyline(start, mid); + ArrayList sky2 = this.findSkyline(mid + 1, end); - return this.mergeSkyline(sky1, sky2); - } + return this.mergeSkyline(sky1, sky2); + } - public ArrayList mergeSkyline(ArrayList sky1, ArrayList sky2) { - int currentH1 = 0, currentH2 = 0; - ArrayList skyline = new ArrayList<>(); - int maxH = 0; - - while (!sky1.isEmpty() && !sky2.isEmpty()) { - if (sky1.get(0).coordinates < sky2.get(0).coordinates) { - int currentX = sky1.get(0).coordinates; - currentH1 = sky1.get(0).height; - - if (currentH1 < currentH2) { - sky1.remove(0); - if (maxH != currentH2) skyline.add(new Skyline(currentX, currentH2)); - } else { - maxH = currentH1; - sky1.remove(0); - skyline.add(new Skyline(currentX, currentH1)); - } - } else { - int currentX = sky2.get(0).coordinates; - currentH2 = sky2.get(0).height; - - if (currentH2 < currentH1) { - sky2.remove(0); - if (maxH != currentH1) skyline.add(new Skyline(currentX, currentH1)); - } else { - maxH = currentH2; - sky2.remove(0); - skyline.add(new Skyline(currentX, currentH2)); - } - } - } + public ArrayList mergeSkyline(ArrayList sky1, ArrayList sky2) { + int currentH1 = 0, currentH2 = 0; + ArrayList skyline = new ArrayList<>(); + int maxH = 0; - while (!sky1.isEmpty()) { - skyline.add(sky1.get(0)); - sky1.remove(0); - } + while (!sky1.isEmpty() && !sky2.isEmpty()) { + if (sky1.get(0).coordinates < sky2.get(0).coordinates) { + int currentX = sky1.get(0).coordinates; + currentH1 = sky1.get(0).height; - while (!sky2.isEmpty()) { - skyline.add(sky2.get(0)); - sky2.remove(0); + if (currentH1 < currentH2) { + sky1.remove(0); + if (maxH != currentH2) skyline.add(new Skyline(currentX, currentH2)); + } else { + maxH = currentH1; + sky1.remove(0); + skyline.add(new Skyline(currentX, currentH1)); } - - return skyline; + } else { + int currentX = sky2.get(0).coordinates; + currentH2 = sky2.get(0).height; + + if (currentH2 < currentH1) { + sky2.remove(0); + if (maxH != currentH1) skyline.add(new Skyline(currentX, currentH1)); + } else { + maxH = currentH2; + sky2.remove(0); + skyline.add(new Skyline(currentX, currentH2)); + } + } } - public class Skyline { - public int coordinates; - public int height; + while (!sky1.isEmpty()) { + skyline.add(sky1.get(0)); + sky1.remove(0); + } - public Skyline(int coordinates, int height) { - this.coordinates = coordinates; - this.height = height; - } + while (!sky2.isEmpty()) { + skyline.add(sky2.get(0)); + sky2.remove(0); } - public class Building { - public int left; - public int height; - public int right; + return skyline; + } - public Building(int left, int height, int right) { - this.left = left; - this.height = height; - this.right = right; - } + public class Skyline { + public int coordinates; + public int height; + + public Skyline(int coordinates, int height) { + this.coordinates = coordinates; + this.height = height; } + } - public static void main(String[] args) { - SkylineProblem skylineProblem = new SkylineProblem(); - skylineProblem.run(); + public class Building { + public int left; + public int height; + public int right; + + public Building(int left, int height, int right) { + this.left = left; + this.height = height; + this.right = right; } + } + + public static void main(String[] args) { + SkylineProblem skylineProblem = new SkylineProblem(); + skylineProblem.run(); + } } diff --git a/Others/StackPostfixNotation.java b/Others/StackPostfixNotation.java index 2857199d0401..63b4d3c76a3a 100644 --- a/Others/StackPostfixNotation.java +++ b/Others/StackPostfixNotation.java @@ -3,40 +3,40 @@ import java.util.*; public class StackPostfixNotation { - public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - String post = scanner.nextLine(); // Takes input with spaces in between eg. "1 21 +" - System.out.println(postfixEvaluate(post)); - scanner.close(); - } - - // Evaluates the given postfix expression string and returns the result. - public static int postfixEvaluate(String exp) { - Stack s = new Stack(); - Scanner tokens = new Scanner(exp); + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + String post = scanner.nextLine(); // Takes input with spaces in between eg. "1 21 +" + System.out.println(postfixEvaluate(post)); + scanner.close(); + } - while (tokens.hasNext()) { - if (tokens.hasNextInt()) { - s.push(tokens.nextInt()); // If int then push to stack - } else { // else pop top two values and perform the operation - int num2 = s.pop(); - int num1 = s.pop(); - String op = tokens.next(); + // Evaluates the given postfix expression string and returns the result. + public static int postfixEvaluate(String exp) { + Stack s = new Stack(); + Scanner tokens = new Scanner(exp); - if (op.equals("+")) { - s.push(num1 + num2); - } else if (op.equals("-")) { - s.push(num1 - num2); - } else if (op.equals("*")) { - s.push(num1 * num2); - } else { - s.push(num1 / num2); - } + while (tokens.hasNext()) { + if (tokens.hasNextInt()) { + s.push(tokens.nextInt()); // If int then push to stack + } else { // else pop top two values and perform the operation + int num2 = s.pop(); + int num1 = s.pop(); + String op = tokens.next(); - // "+", "-", "*", "/" - } + if (op.equals("+")) { + s.push(num1 + num2); + } else if (op.equals("-")) { + s.push(num1 - num2); + } else if (op.equals("*")) { + s.push(num1 * num2); + } else { + s.push(num1 / num2); } - tokens.close(); - return s.pop(); + + // "+", "-", "*", "/" + } } + tokens.close(); + return s.pop(); + } } diff --git a/Others/StringMatchFiniteAutomata.java b/Others/StringMatchFiniteAutomata.java index 34eb60b70454..a6d3fbab4d62 100644 --- a/Others/StringMatchFiniteAutomata.java +++ b/Others/StringMatchFiniteAutomata.java @@ -1,91 +1,81 @@ -/** - * @author Prateek Kumar Oraon (https://github.com/prateekKrOraon) - */ +/** @author Prateek Kumar Oraon (https://github.com/prateekKrOraon) */ import java.util.Scanner; -//An implementaion of string matching using finite automata -public class StringMatchFiniteAutomata{ - - public static final int CHARS = 256; - public static int[][] FA; - public static Scanner scanner = null; - - public static void main(String[] args){ - - scanner = new Scanner(System.in); - System.out.println("Enter String"); - String text = scanner.nextLine(); - System.out.println("Enter pattern"); - String pat = scanner.nextLine(); - - searchPat(text, pat); - - scanner.close(); - - } - - public static void searchPat(String text, String pat){ - - int m = pat.length(); - int n = text.length(); - - FA = new int[m+1][CHARS]; - - computeFA(pat, m ,FA); - - int state = 0; - for(int i=0;i0; ns--){ - - if(pat.charAt(ns-1) == x){ - - for(int i=0; i 0; ns--) { + + if (pat.charAt(ns - 1) == x) { + + for (int i = 0; i < ns - 1; i++) { + + if (pat.charAt(i) != pat.charAt(state - ns + i + 1)) { + break; + } + + if (i == ns - 1) { + return ns; + } + } + } + } + + return 0; + } +} diff --git a/Others/ThreeSum.java b/Others/ThreeSum.java index 8ac2c13b4c42..9524bb6f54e4 100644 --- a/Others/ThreeSum.java +++ b/Others/ThreeSum.java @@ -1,60 +1,47 @@ package Others; -import java.util.Scanner; import java.util.Arrays; +import java.util.Scanner; /** * To find triplet equals to given sum in complexity O(n*log(n)) - * * - * Array must be sorted + *

Array must be sorted * * @author Ujjawal Joshi * @date 2020.05.18 - * - * Test Cases: - Input: - * 6 //Length of array - 12 3 4 1 6 9 - target=24 - * Output:3 9 12 - * Explanation: There is a triplet (12, 3 and 9) present - in the array whose sum is 24. - * - * - + *

Test Cases: Input: 6 //Length of array 12 3 4 1 6 9 target=24 Output:3 9 12 Explanation: + * There is a triplet (12, 3 and 9) present in the array whose sum is 24. */ - - -class ThreeSum{ - public static void main(String args[]) - { - Scanner sc =new Scanner(System.in); - int n=sc.nextInt(); //Length of an array - - int a[]=new int[n]; - - for(int i=0;i getDictionary() { - Map dictionary = new HashMap<>(); - FileInputStream fis = null; + public Map getDictionary() { + Map dictionary = new HashMap<>(); + FileInputStream fis = null; - try { + try { - fis = new FileInputStream(fileName); // open the file - int in = 0; - String s = ""; // init a empty word - in = fis.read(); // read one character + fis = new FileInputStream(fileName); // open the file + int in = 0; + String s = ""; // init a empty word + in = fis.read(); // read one character - while (-1 != in) { - if (Character.isLetter((char) in)) { - s += (char) in; //if get a letter, append to s - } else { - // this branch means an entire word has just been read - if (s.length() > 0) { - // see whether word exists or not - if (dictionary.containsKey(s)) { - // if exist, count++ - dictionary.put(s, dictionary.get(s) + 1); - } else { - // if not exist, initiate count of this word with 1 - dictionary.put(s, 1); - } - } - s = ""; // reInit a empty word - } - in = fis.read(); - } - return dictionary; - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - // you always have to close the I/O streams - if (fis != null) - fis.close(); - } catch (IOException e) { - e.printStackTrace(); - } + while (-1 != in) { + if (Character.isLetter((char) in)) { + s += (char) in; // if get a letter, append to s + } else { + // this branch means an entire word has just been read + if (s.length() > 0) { + // see whether word exists or not + if (dictionary.containsKey(s)) { + // if exist, count++ + dictionary.put(s, dictionary.get(s) + 1); + } else { + // if not exist, initiate count of this word with 1 + dictionary.put(s, 1); + } } - return null; + s = ""; // reInit a empty word + } + in = fis.read(); } + return dictionary; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + // you always have to close the I/O streams + if (fis != null) fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; } + } - public static void main(String[] args) { - // you can replace the filePath with yours - CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); - Map dictionary = cw.getDictionary(); // get the words dictionary: {word: frequency} + public static void main(String[] args) { + // you can replace the filePath with yours + CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); + Map dictionary = + cw.getDictionary(); // get the words dictionary: {word: frequency} - // we change the map to list for convenient sort - List> list = new ArrayList<>(dictionary.entrySet()); + // we change the map to list for convenient sort + List> list = new ArrayList<>(dictionary.entrySet()); - // sort by lambda valueComparator - list.sort(Comparator.comparing( - m -> m.getValue()) - ); + // sort by lambda valueComparator + list.sort(Comparator.comparing(m -> m.getValue())); - Scanner input = new Scanner(System.in); - int k = input.nextInt(); - while (k > list.size()) { - System.out.println("Retype a number, your number is too large"); - input = new Scanner(System.in); - k = input.nextInt(); - } - for (int i = 0; i < k; i++) { - System.out.println(list.get(list.size() - i - 1)); - } - input.close(); + Scanner input = new Scanner(System.in); + int k = input.nextInt(); + while (k > list.size()) { + System.out.println("Retype a number, your number is too large"); + input = new Scanner(System.in); + k = input.nextInt(); + } + for (int i = 0; i < k; i++) { + System.out.println(list.get(list.size() - i - 1)); } + input.close(); + } } - diff --git a/Others/TowerOfHanoi.java b/Others/TowerOfHanoi.java index 5648b3d2823d..c339739cc79e 100644 --- a/Others/TowerOfHanoi.java +++ b/Others/TowerOfHanoi.java @@ -3,22 +3,24 @@ import java.util.Scanner; class TowerOfHanoi { - public static void shift(int n, String startPole, String intermediatePole, String endPole) { - // if n becomes zero the program returns thus ending the loop. - if (n != 0) { - // Shift function is called in recursion for swapping the n-1 disc from the startPole to the intermediatePole - shift(n - 1, startPole, endPole, intermediatePole); - System.out.format("Move %d from %s to %s\n", n, startPole, endPole); // Result Printing - // Shift function is called in recursion for swapping the n-1 disc from the intermediatePole to the endPole - shift(n - 1, intermediatePole, startPole, endPole); - } + public static void shift(int n, String startPole, String intermediatePole, String endPole) { + // if n becomes zero the program returns thus ending the loop. + if (n != 0) { + // Shift function is called in recursion for swapping the n-1 disc from the startPole to the + // intermediatePole + shift(n - 1, startPole, endPole, intermediatePole); + System.out.format("Move %d from %s to %s\n", n, startPole, endPole); // Result Printing + // Shift function is called in recursion for swapping the n-1 disc from the intermediatePole + // to the endPole + shift(n - 1, intermediatePole, startPole, endPole); } + } - public static void main(String[] args) { - System.out.print("Enter number of discs on Pole 1: "); - Scanner scanner = new Scanner(System.in); - int numberOfDiscs = scanner.nextInt(); //input of number of discs on pole 1 - shift(numberOfDiscs, "Pole1", "Pole2", "Pole3"); //Shift function called - scanner.close(); - } + public static void main(String[] args) { + System.out.print("Enter number of discs on Pole 1: "); + Scanner scanner = new Scanner(System.in); + int numberOfDiscs = scanner.nextInt(); // input of number of discs on pole 1 + shift(numberOfDiscs, "Pole1", "Pole2", "Pole3"); // Shift function called + scanner.close(); + } } diff --git a/Others/TwoPointers.java b/Others/TwoPointers.java index 99040b552d98..ee38192d630c 100644 --- a/Others/TwoPointers.java +++ b/Others/TwoPointers.java @@ -4,47 +4,47 @@ /** * The two pointer technique is a useful tool to utilize when searching for pairs in a sorted array. - *

- * link: https://www.geeksforgeeks.org/two-pointers-technique/ + * + *

link: https://www.geeksforgeeks.org/two-pointers-technique/ */ class TwoPointers { - public static void main(String[] args) { - int[] arr = {10, 20, 35, 50, 75, 80}; - int key = 70; - assert isPairedSum(arr, key); /* 20 + 60 == 70 */ + public static void main(String[] args) { + int[] arr = {10, 20, 35, 50, 75, 80}; + int key = 70; + assert isPairedSum(arr, key); /* 20 + 60 == 70 */ - arr = new int[]{1, 2, 3, 4, 5, 6, 7}; - key = 13; - assert isPairedSum(arr, key); /* 6 + 7 == 13 */ + arr = new int[] {1, 2, 3, 4, 5, 6, 7}; + key = 13; + assert isPairedSum(arr, key); /* 6 + 7 == 13 */ - key = 14; - assert !isPairedSum(arr, key); - } + key = 14; + assert !isPairedSum(arr, key); + } - /** - * Given a sorted array arr (sorted in ascending order). - * Find if there exists any pair of elements such that their sum is equal to key. - * - * @param arr the array contains elements - * @param key the number to search - * @return {@code true} if there exists a pair of elements, {@code false} otherwise. - */ - private static boolean isPairedSum(int[] arr, int key) { - /* array sorting is necessary for this algorithm to function correctly */ - Arrays.sort(arr); - int i = 0; /* index of first element */ - int j = arr.length - 1; /* index of last element */ + /** + * Given a sorted array arr (sorted in ascending order). Find if there exists any pair of elements + * such that their sum is equal to key. + * + * @param arr the array contains elements + * @param key the number to search + * @return {@code true} if there exists a pair of elements, {@code false} otherwise. + */ + private static boolean isPairedSum(int[] arr, int key) { + /* array sorting is necessary for this algorithm to function correctly */ + Arrays.sort(arr); + int i = 0; /* index of first element */ + int j = arr.length - 1; /* index of last element */ - while (i < j) { - if (arr[i] + arr[j] == key) { - return true; - } else if (arr[i] + arr[j] < key) { - i++; - } else { - j--; - } - } - return false; + while (i < j) { + if (arr[i] + arr[j] == key) { + return true; + } else if (arr[i] + arr[j] < key) { + i++; + } else { + j--; + } } -} \ No newline at end of file + return false; + } +} diff --git a/Others/WorstFit.java b/Others/WorstFit.java index 0bb6c460b6b9..23753b28fef2 100644 --- a/Others/WorstFit.java +++ b/Others/WorstFit.java @@ -2,75 +2,79 @@ import java.util.ArrayList; -/** - * @author Dekas Dimitrios - */ +/** @author Dekas Dimitrios */ public class WorstFit { - private static final int NO_ALLOCATION = -255; // if a process has been allocated in position -255, - // it means that it has not been actually allocated. + private static final int NO_ALLOCATION = + -255; // if a process has been allocated in position -255, + // it means that it has not been actually allocated. - /** - * Method to find the index of the memory block that is going to fit the given process based on the worst fit algorithm. - * - * @param blocks: the array with the available memory blocks. - * @param process: the size of the process. - * @return the index of the block that fits, or -255 if no such block exists. - */ - private static int findWorstFit(int[] blockSizes, int processSize) { - int max = -1; - int index = -1; - for(int i=0 ; i < blockSizes.length ; i++) { // Find the index of the biggest memory block available. - if(blockSizes[i] > max) { - max = blockSizes[i]; - index = i; - } - } - // If the biggest memory block cannot fit the process, return -255 as the result - if(processSize > blockSizes[index]) { - return NO_ALLOCATION; - } - return index; + /** + * Method to find the index of the memory block that is going to fit the given process based on + * the worst fit algorithm. + * + * @param blocks: the array with the available memory blocks. + * @param process: the size of the process. + * @return the index of the block that fits, or -255 if no such block exists. + */ + private static int findWorstFit(int[] blockSizes, int processSize) { + int max = -1; + int index = -1; + for (int i = 0; + i < blockSizes.length; + i++) { // Find the index of the biggest memory block available. + if (blockSizes[i] > max) { + max = blockSizes[i]; + index = i; + } } + // If the biggest memory block cannot fit the process, return -255 as the result + if (processSize > blockSizes[index]) { + return NO_ALLOCATION; + } + return index; + } - /** - * Method to allocate memory to blocks according to the worst fit - * algorithm. It should return an ArrayList of Integers, where the - * index is the process ID (zero-indexed) and the value is the block - * number (also zero-indexed). - * - * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. - * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory blocks for. - * @return the ArrayList filled with Integers repressenting the memory allocation that took place. - */ - static ArrayList worstFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { - // The array list responsible for saving the memory allocations done by the worst-fit algorithm - ArrayList memAlloc = new ArrayList<>(); - // Do this for every process - for(int processSize : sizeOfProcesses) { - int chosenBlockIdx = findWorstFit(sizeOfBlocks, processSize); // Find the index of the memory block going to be used - memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list - if(chosenBlockIdx != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, - sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size - } - } - return memAlloc; + /** + * Method to allocate memory to blocks according to the worst fit algorithm. It should return an + * ArrayList of Integers, where the index is the process ID (zero-indexed) and the value is the + * block number (also zero-indexed). + * + * @param sizeOfBlocks: an int array that contains the sizes of the memory blocks available. + * @param sizeOfProcesses: an int array that contains the sizes of the processes we need memory + * blocks for. + * @return the ArrayList filled with Integers repressenting the memory allocation that took place. + */ + static ArrayList worstFit(int[] sizeOfBlocks, int[] sizeOfProcesses) { + // The array list responsible for saving the memory allocations done by the worst-fit algorithm + ArrayList memAlloc = new ArrayList<>(); + // Do this for every process + for (int processSize : sizeOfProcesses) { + int chosenBlockIdx = + findWorstFit( + sizeOfBlocks, processSize); // Find the index of the memory block going to be used + memAlloc.add(chosenBlockIdx); // Store the chosen block index in the memAlloc array list + if (chosenBlockIdx + != NO_ALLOCATION) { // Only if a block was chosen to store the process in it, + sizeOfBlocks[chosenBlockIdx] -= processSize; // resize the block based on the process size + } } + return memAlloc; + } - /** - * Method to print the memory allocated. - * - * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the worstFit method. - */ - public static void printMemoryAllocation(ArrayList memAllocation) { - System.out.println("Process No.\tBlock No."); - System.out.println("===========\t========="); - for (int i = 0; i < memAllocation.size(); i++) { - System.out.print(" " + i + "\t\t"); - if (memAllocation.get(i) != NO_ALLOCATION) - System.out.print(memAllocation.get(i)); - else - System.out.print("Not Allocated"); - System.out.println(); - } + /** + * Method to print the memory allocated. + * + * @param memAllocation: an ArrayList of Integer representing the memory allocation done by the + * worstFit method. + */ + public static void printMemoryAllocation(ArrayList memAllocation) { + System.out.println("Process No.\tBlock No."); + System.out.println("===========\t========="); + for (int i = 0; i < memAllocation.size(); i++) { + System.out.print(" " + i + "\t\t"); + if (memAllocation.get(i) != NO_ALLOCATION) System.out.print(memAllocation.get(i)); + else System.out.print("Not Allocated"); + System.out.println(); } -} \ No newline at end of file + } +} diff --git a/ProjectEuler/Problem01.java b/ProjectEuler/Problem01.java index fffb0eca7f35..a19876f86a9e 100644 --- a/ProjectEuler/Problem01.java +++ b/ProjectEuler/Problem01.java @@ -1,51 +1,51 @@ package ProjectEuler; /** - * If we list all the natural numbers below 10 that are multiples of 3 or 5, - * we get 3, 5, 6 and 9. The sum of these multiples is 23. - *

- * Find the sum of all the multiples of 3 or 5 below 1000. - *

- * Link: https://projecteuler.net/problem=1 + * If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. + * The sum of these multiples is 23. + * + *

Find the sum of all the multiples of 3 or 5 below 1000. + * + *

Link: https://projecteuler.net/problem=1 */ public class Problem01 { - public static void main(String[] args) { - int[][] testNumber = { - {3, 0}, - {4, 3}, - {10, 23}, - {1000, 233168}, - {-1, 0} - }; - - for (int[] ints : testNumber) { - assert solution1(ints[0]) == ints[1]; - assert solution2(ints[0]) == ints[1]; - } + public static void main(String[] args) { + int[][] testNumber = { + {3, 0}, + {4, 3}, + {10, 23}, + {1000, 233168}, + {-1, 0} + }; + + for (int[] ints : testNumber) { + assert solution1(ints[0]) == ints[1]; + assert solution2(ints[0]) == ints[1]; } - - private static int solution1(int n) { - int sum = 0; - for (int i = 3; i < n; ++i) { - if (i % 3 == 0 || i % 5 == 0) { - sum += i; - } - } - return sum; + } + + private static int solution1(int n) { + int sum = 0; + for (int i = 3; i < n; ++i) { + if (i % 3 == 0 || i % 5 == 0) { + sum += i; + } } + return sum; + } - private static int solution2(int n) { - int sum = 0; + private static int solution2(int n) { + int sum = 0; - int terms = (n - 1) / 3; - sum += terms * (6 + (terms - 1) * 3) / 2; + int terms = (n - 1) / 3; + sum += terms * (6 + (terms - 1) * 3) / 2; - terms = (n - 1) / 5; - sum += terms * (10 + (terms - 1) * 5) / 2; + terms = (n - 1) / 5; + sum += terms * (10 + (terms - 1) * 5) / 2; - terms = (n - 1) / 15; - sum -= terms * (30 + (terms - 1) * 15) / 2; + terms = (n - 1) / 15; + sum -= terms * (30 + (terms - 1) * 15) / 2; - return sum; - } -} \ No newline at end of file + return sum; + } +} diff --git a/ProjectEuler/Problem02.java b/ProjectEuler/Problem02.java index 5f8d1f051ebe..2d67c54f0353 100644 --- a/ProjectEuler/Problem02.java +++ b/ProjectEuler/Problem02.java @@ -1,43 +1,43 @@ package ProjectEuler; /** - * Each new term in the Fibonacci sequence is generated by adding the previous two terms. - * By starting with 1 and 2, the first 10 terms will be: - *

- * 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... - *

- * By considering the terms in the Fibonacci sequence whose values do not exceed four million, + * Each new term in the Fibonacci sequence is generated by adding the previous two terms. By + * starting with 1 and 2, the first 10 terms will be: + * + *

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... + * + *

By considering the terms in the Fibonacci sequence whose values do not exceed four million, * find the sum of the even-valued terms. - *

- * Link: https://projecteuler.net/problem=2 + * + *

Link: https://projecteuler.net/problem=2 */ public class Problem02 { - public static void main(String[] args) { - int[][] testNumbers = { - {10, 10}, /* 2 + 8 == 10 */ - {15, 10}, /* 2 + 8 == 10 */ - {2, 2}, - {1, 0}, - {89, 44} /* 2 + 8 + 34 == 44 */ - }; + public static void main(String[] args) { + int[][] testNumbers = { + {10, 10}, /* 2 + 8 == 10 */ + {15, 10}, /* 2 + 8 == 10 */ + {2, 2}, + {1, 0}, + {89, 44} /* 2 + 8 + 34 == 44 */ + }; - for (int[] ints : testNumbers) { - assert solution1(ints[0]) == ints[1]; - } + for (int[] ints : testNumbers) { + assert solution1(ints[0]) == ints[1]; } + } - private static int solution1(int n) { - int sum = 0; - int first = 1; - int second = 2; - while (second <= n) { - if (second % 2 == 0) { - sum += second; - } - int temp = first + second; - first = second; - second = temp; - } - return sum; + private static int solution1(int n) { + int sum = 0; + int first = 1; + int second = 2; + while (second <= n) { + if (second % 2 == 0) { + sum += second; + } + int temp = first + second; + first = second; + second = temp; } -} \ No newline at end of file + return sum; + } +} diff --git a/ProjectEuler/Problem04.java b/ProjectEuler/Problem04.java index b9d51f8bbf90..9f9a84bd62ab 100644 --- a/ProjectEuler/Problem04.java +++ b/ProjectEuler/Problem04.java @@ -1,41 +1,41 @@ package ProjectEuler; /** - * A palindromic number reads the same both ways. - * The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99. - *

- * Find the largest palindrome made from the product of two 3-digit numbers. - *

- * link: https://projecteuler.net/problem=4 + * A palindromic number reads the same both ways. The largest palindrome made from the product of + * two 2-digit numbers is 9009 = 91 × 99. + * + *

Find the largest palindrome made from the product of two 3-digit numbers. + * + *

link: https://projecteuler.net/problem=4 */ public class Problem04 { - public static void main(String[] args) { + public static void main(String[] args) { - assert solution1(10000) == -1; - assert solution1(20000) == 19591; /* 19591 == 143*137 */ - assert solution1(30000) == 29992; /* 29992 == 184*163 */ - assert solution1(40000) == 39893; /* 39893 == 287*139 */ - assert solution1(50000) == 49894; /* 49894 == 494*101 */ - assert solution1(60000) == 59995; /* 59995 == 355*169 */ - assert solution1(70000) == 69996; /* 69996 == 614*114 */ - assert solution1(80000) == 79897; /* 79897 == 733*109 */ - assert solution1(90000) == 89798; /* 89798 == 761*118 */ - assert solution1(100000) == 99999; /* 100000 == 813*123 */ - } + assert solution1(10000) == -1; + assert solution1(20000) == 19591; /* 19591 == 143*137 */ + assert solution1(30000) == 29992; /* 29992 == 184*163 */ + assert solution1(40000) == 39893; /* 39893 == 287*139 */ + assert solution1(50000) == 49894; /* 49894 == 494*101 */ + assert solution1(60000) == 59995; /* 59995 == 355*169 */ + assert solution1(70000) == 69996; /* 69996 == 614*114 */ + assert solution1(80000) == 79897; /* 79897 == 733*109 */ + assert solution1(90000) == 89798; /* 89798 == 761*118 */ + assert solution1(100000) == 99999; /* 100000 == 813*123 */ + } - private static int solution1(int n) { - for (int i = n - 1; i >= 10000; --i) { - String strNumber = String.valueOf(i); + private static int solution1(int n) { + for (int i = n - 1; i >= 10000; --i) { + String strNumber = String.valueOf(i); - /* Test if strNumber is palindrome */ - if (new StringBuilder(strNumber).reverse().toString().equals(strNumber)) { - for (int divisor = 999; divisor >= 100; --divisor) { - if (i % divisor == 0 && String.valueOf(i / divisor).length() == 3) { - return i; - } - } - } + /* Test if strNumber is palindrome */ + if (new StringBuilder(strNumber).reverse().toString().equals(strNumber)) { + for (int divisor = 999; divisor >= 100; --divisor) { + if (i % divisor == 0 && String.valueOf(i / divisor).length() == 3) { + return i; + } } - return -1; /* not found */ + } } -} \ No newline at end of file + return -1; /* not found */ + } +} diff --git a/ProjectEuler/Problem06.java b/ProjectEuler/Problem06.java index f5361a39ba60..0c1fbecd9026 100644 --- a/ProjectEuler/Problem06.java +++ b/ProjectEuler/Problem06.java @@ -1,46 +1,42 @@ package ProjectEuler; /** - * The sum of the squares of the first ten natural numbers is, - * 1^2 + 2^2 + ... + 10^2 = 385 - * The square of the sum of the first ten natural numbers is, - * (1 + 2 + ... + 10)^2 = 552 = 3025 - * Hence the difference between the sum of the squares of the first ten natural - * numbers and the square of the sum is 3025 − 385 = 2640. - * Find the difference between the sum of the squares of the first N natural - * numbers and the square of the sum. - *

- * link: https://projecteuler.net/problem=6 + * The sum of the squares of the first ten natural numbers is, 1^2 + 2^2 + ... + 10^2 = 385 The + * square of the sum of the first ten natural numbers is, (1 + 2 + ... + 10)^2 = 552 = 3025 Hence + * the difference between the sum of the squares of the first ten natural numbers and the square of + * the sum is 3025 − 385 = 2640. Find the difference between the sum of the squares of the first N + * natural numbers and the square of the sum. + * + *

link: https://projecteuler.net/problem=6 */ public class Problem06 { - public static void main(String[] args) { - int[][] testNumbers = { - {10, 2640}, - {15, 13160}, - {20, 41230}, - {50, 1582700} - }; + public static void main(String[] args) { + int[][] testNumbers = { + {10, 2640}, + {15, 13160}, + {20, 41230}, + {50, 1582700} + }; - for (int[] testNumber : testNumbers) { - assert solution1(testNumber[0]) == testNumber[1] - && solutions2(testNumber[0]) == testNumber[1]; - } + for (int[] testNumber : testNumbers) { + assert solution1(testNumber[0]) == testNumber[1] + && solutions2(testNumber[0]) == testNumber[1]; } + } - private static int solution1(int n) { - int sum1 = 0; - int sum2 = 0; - for (int i = 1; i <= n; ++i) { - sum1 += i * i; - sum2 += i; - } - return sum2 * sum2 - sum1; + private static int solution1(int n) { + int sum1 = 0; + int sum2 = 0; + for (int i = 1; i <= n; ++i) { + sum1 += i * i; + sum2 += i; } + return sum2 * sum2 - sum1; + } - - private static int solutions2(int n) { - int sumOfSquares = n * (n + 1) * (2 * n + 1) / 6; - int squareOfSum = (int) Math.pow((n * (n + 1) / 2.0), 2); - return squareOfSum - sumOfSquares; - } -} \ No newline at end of file + private static int solutions2(int n) { + int sumOfSquares = n * (n + 1) * (2 * n + 1) / 6; + int squareOfSum = (int) Math.pow((n * (n + 1) / 2.0), 2); + return squareOfSum - sumOfSquares; + } +} diff --git a/ProjectEuler/Problem07.java b/ProjectEuler/Problem07.java index cba097c156a6..25df143c9513 100644 --- a/ProjectEuler/Problem07.java +++ b/ProjectEuler/Problem07.java @@ -1,59 +1,60 @@ package ProjectEuler; /** - * By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. - *

- * What is the 10 001st prime number? - *

- * link: https://projecteuler.net/problem=7 + * By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is + * 13. + * + *

What is the 10 001st prime number? + * + *

link: https://projecteuler.net/problem=7 */ public class Problem07 { - public static void main(String[] args) { - int[][] testNumbers = { - {1, 2}, - {2, 3}, - {3, 5}, - {4, 7}, - {5, 11}, - {6, 13}, - {20, 71}, - {50, 229}, - {100, 541} - }; - for (int[] number : testNumbers) { - assert solution1(number[0]) == number[1]; - } + public static void main(String[] args) { + int[][] testNumbers = { + {1, 2}, + {2, 3}, + {3, 5}, + {4, 7}, + {5, 11}, + {6, 13}, + {20, 71}, + {50, 229}, + {100, 541} + }; + for (int[] number : testNumbers) { + assert solution1(number[0]) == number[1]; } + } - /*** - * Checks if a number is prime or not - * @param number the number - * @return {@code true} if {@code number} is prime - */ - private static boolean isPrime(int number) { - if (number == 2) { - return true; - } - if (number < 2 || number % 2 == 0) { - return false; - } - for (int i = 3, limit = (int) Math.sqrt(number); i <= limit; i += 2) { - if (number % i == 0) { - return false; - } - } - return true; + /*** + * Checks if a number is prime or not + * @param number the number + * @return {@code true} if {@code number} is prime + */ + private static boolean isPrime(int number) { + if (number == 2) { + return true; } + if (number < 2 || number % 2 == 0) { + return false; + } + for (int i = 3, limit = (int) Math.sqrt(number); i <= limit; i += 2) { + if (number % i == 0) { + return false; + } + } + return true; + } - private static int solution1(int n) { - int count = 0; - int number = 1; + private static int solution1(int n) { + int count = 0; + int number = 1; - while (count != n) { - if (isPrime(++number)) { - count++; - } - } - return number; + while (count != n) { + if (isPrime(++number)) { + count++; + } } -} \ No newline at end of file + return number; + } +} diff --git a/ProjectEuler/Problem09.java b/ProjectEuler/Problem09.java index 5d259d506c5c..b0dbebb940c8 100644 --- a/ProjectEuler/Problem09.java +++ b/ProjectEuler/Problem09.java @@ -2,29 +2,27 @@ /** * A Pythagorean triplet is a set of three natural numbers, a < b < c, for which, - *

- * a^2 + b^2 = c^2 - * For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2. - *

- * There exists exactly one Pythagorean triplet for which a + b + c = 1000. - * Find the product abc. - *

- * link: https://projecteuler.net/problem=9 + * + *

a^2 + b^2 = c^2 For example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2. + * + *

There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product abc. + * + *

link: https://projecteuler.net/problem=9 */ public class Problem09 { - public static void main(String[] args) { - assert solution1() == 31875000; - } + public static void main(String[] args) { + assert solution1() == 31875000; + } - private static int solution1() { - for (int i = 0; i <= 300; ++i) { - for (int j = 0; j <= 400; ++j) { - int k = 1000 - i - j; - if (i * i + j * j == k * k) { - return i * j * k; - } - } + private static int solution1() { + for (int i = 0; i <= 300; ++i) { + for (int j = 0; j <= 400; ++j) { + int k = 1000 - i - j; + if (i * i + j * j == k * k) { + return i * j * k; } - return -1; /* should not happen */ + } } -} \ No newline at end of file + return -1; /* should not happen */ + } +} diff --git a/ProjectEuler/Problem10.java b/ProjectEuler/Problem10.java index 451948c524dc..a51a22287358 100644 --- a/ProjectEuler/Problem10.java +++ b/ProjectEuler/Problem10.java @@ -2,54 +2,54 @@ /** * The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. - *

- * Find the sum of all the primes below two million. - *

- * link: https://projecteuler.net/problem=10 + * + *

Find the sum of all the primes below two million. + * + *

link: https://projecteuler.net/problem=10 */ public class Problem10 { - public static void main(String[] args) { - long[][] testNumbers = { - {2000000, 142913828922L}, - {10000, 5736396}, - {5000, 1548136}, - {1000, 76127}, - {10, 17}, - {7, 10} - }; + public static void main(String[] args) { + long[][] testNumbers = { + {2000000, 142913828922L}, + {10000, 5736396}, + {5000, 1548136}, + {1000, 76127}, + {10, 17}, + {7, 10} + }; - for (long[] testNumber : testNumbers) { - assert solution1(testNumber[0]) == testNumber[1]; - } + for (long[] testNumber : testNumbers) { + assert solution1(testNumber[0]) == testNumber[1]; } + } - /*** - * Checks if a number is prime or not - * @param n the number - * @return {@code true} if {@code n} is prime - */ - private static boolean isPrime(int n) { - if (n == 2) { - return true; - } - if (n < 2 || n % 2 == 0) { - return false; - } - for (int i = 3, limit = (int) Math.sqrt(n); i <= limit; i += 2) { - if (n % i == 0) { - return false; - } - } - return true; + /*** + * Checks if a number is prime or not + * @param n the number + * @return {@code true} if {@code n} is prime + */ + private static boolean isPrime(int n) { + if (n == 2) { + return true; } + if (n < 2 || n % 2 == 0) { + return false; + } + for (int i = 3, limit = (int) Math.sqrt(n); i <= limit; i += 2) { + if (n % i == 0) { + return false; + } + } + return true; + } - private static long solution1(long n) { - long sum = 0; - for (int i = 2; i < n; ++i) { - if (isPrime(i)) { - sum += i; - } - } - return sum; + private static long solution1(long n) { + long sum = 0; + for (int i = 2; i < n; ++i) { + if (isPrime(i)) { + sum += i; + } } -} \ No newline at end of file + return sum; + } +} diff --git a/ProjectEuler/Problem12.java b/ProjectEuler/Problem12.java index 89ea3e0ac35f..9743bc9d1b86 100644 --- a/ProjectEuler/Problem12.java +++ b/ProjectEuler/Problem12.java @@ -1,66 +1,54 @@ package ProjectEuler; /** - * The sequence of triangle numbers is generated by adding the natural numbers. - * So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. - * The first ten terms would be: - *

- * 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... - *

- * Let us list the factors of the first seven triangle numbers: - *

- * 1: 1 - * 3: 1,3 - * 6: 1,2,3,6 - * 10: 1,2,5,10 - * 15: 1,3,5,15 - * 21: 1,3,7,21 - * 28: 1,2,4,7,14,28 - * We can see that 28 is the first triangle number to have over five divisors. - *

- * What is the value of the first triangle number to have over five hundred divisors? - *

- * link: https://projecteuler.net/problem=12 + * The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle + * number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be: + * + *

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... + * + *

Let us list the factors of the first seven triangle numbers: + * + *

1: 1 3: 1,3 6: 1,2,3,6 10: 1,2,5,10 15: 1,3,5,15 21: 1,3,7,21 28: 1,2,4,7,14,28 We can see + * that 28 is the first triangle number to have over five divisors. + * + *

What is the value of the first triangle number to have over five hundred divisors? + * + *

link: https://projecteuler.net/problem=12 */ public class Problem12 { - /** - * Driver Code - */ - public static void main(String[] args) { - assert solution1(500) == 76576500; - } + /** Driver Code */ + public static void main(String[] args) { + assert solution1(500) == 76576500; + } - /* returns the nth triangle number; that is, the sum of all the natural numbers less than, or equal to, n */ - public static int triangleNumber(int n) { - int sum = 0; - for (int i = 0; i <= n; i++) - sum += i; - return sum; - } + /* returns the nth triangle number; that is, the sum of all the natural numbers less than, or equal to, n */ + public static int triangleNumber(int n) { + int sum = 0; + for (int i = 0; i <= n; i++) sum += i; + return sum; + } - public static int solution1(int number) { - int j = 0; // j represents the jth triangle number - int n = 0; // n represents the triangle number corresponding to j - int numberOfDivisors = 0; // number of divisors for triangle number n + public static int solution1(int number) { + int j = 0; // j represents the jth triangle number + int n = 0; // n represents the triangle number corresponding to j + int numberOfDivisors = 0; // number of divisors for triangle number n - while (numberOfDivisors <= number) { + while (numberOfDivisors <= number) { - // resets numberOfDivisors because it's now checking a new triangle number - // and also sets n to be the next triangle number - numberOfDivisors = 0; - j++; - n = triangleNumber(j); + // resets numberOfDivisors because it's now checking a new triangle number + // and also sets n to be the next triangle number + numberOfDivisors = 0; + j++; + n = triangleNumber(j); - // for every number from 1 to the square root of this triangle number, - // count the number of divisors - for (int i = 1; i <= Math.sqrt(n); i++) - if (n % i == 0) - numberOfDivisors++; + // for every number from 1 to the square root of this triangle number, + // count the number of divisors + for (int i = 1; i <= Math.sqrt(n); i++) if (n % i == 0) numberOfDivisors++; - // 1 to the square root of the number holds exactly half of the divisors - // so multiply it by 2 to include the other corresponding half - numberOfDivisors *= 2; - } - return n; + // 1 to the square root of the number holds exactly half of the divisors + // so multiply it by 2 to include the other corresponding half + numberOfDivisors *= 2; } + return n; + } } diff --git a/Searches/BinarySearch.java b/Searches/BinarySearch.java index 8c7e113cc885..b7dc37dc9267 100644 --- a/Searches/BinarySearch.java +++ b/Searches/BinarySearch.java @@ -1,95 +1,91 @@ package Searches; +import static java.lang.String.format; + import java.util.Arrays; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; import java.util.stream.IntStream; -import static java.lang.String.format; - /** + * Binary search is one of the most popular algorithms The algorithm finds the position of a target + * value within a sorted array * - * - * - * Binary search is one of the most popular algorithms - * The algorithm finds the position of a target value within a sorted array - * - * Worst-case performance O(log n) - * Best-case performance O(1) - * Average performance O(log n) - * Worst-case space complexity O(1) - * + *

Worst-case performance O(log n) Best-case performance O(1) Average performance O(log n) + * Worst-case space complexity O(1) * * @author Varun Upadhyay (https://github.com/varunu28) * @author Podshivalov Nikita (https://github.com/nikitap492) - * * @see SearchAlgorithm * @see IterativeBinarySearch - * */ - class BinarySearch implements SearchAlgorithm { - /** - * - * @param array is an array where the element should be found - * @param key is an element which should be found - * @param is any comparable type - * @return index of the element - */ - @Override - public > int find(T[] array, T key) { - return search(array, key, 0, array.length); - } - - /** - * This method implements the Generic Binary Search - * - * @param array The array to make the binary search - * @param key The number you are looking for - * @param left The lower bound - * @param right The upper bound - * @return the location of the key - **/ - private > int search(T array[], T key, int left, int right){ - if (right < left) return -1; // this means that the key not found - - // find median - int median = (left + right) >>> 1; - int comp = key.compareTo(array[median]); - - if (comp == 0) { - return median; - } else if (comp < 0) { - return search(array, key, left, median - 1); - } else { - return search(array, key, median + 1, right); - } + /** + * @param array is an array where the element should be found + * @param key is an element which should be found + * @param is any comparable type + * @return index of the element + */ + @Override + public > int find(T[] array, T key) { + return search(array, key, 0, array.length); + } + + /** + * This method implements the Generic Binary Search + * + * @param array The array to make the binary search + * @param key The number you are looking for + * @param left The lower bound + * @param right The upper bound + * @return the location of the key + */ + private > int search(T array[], T key, int left, int right) { + if (right < left) return -1; // this means that the key not found + + // find median + int median = (left + right) >>> 1; + int comp = key.compareTo(array[median]); + + if (comp == 0) { + return median; + } else if (comp < 0) { + return search(array, key, left, median - 1); + } else { + return search(array, key, median + 1, right); } + } - // Driver Program - public static void main(String[] args) { - // Just generate data - Random r = ThreadLocalRandom.current(); + // Driver Program + public static void main(String[] args) { + // Just generate data + Random r = ThreadLocalRandom.current(); - int size = 100; - int maxElement = 100000; + int size = 100; + int maxElement = 100000; - Integer[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().boxed().toArray(Integer[]::new); + Integer[] integers = + IntStream.generate(() -> r.nextInt(maxElement)) + .limit(size) + .sorted() + .boxed() + .toArray(Integer[]::new); + // The element that should be found + int shouldBeFound = integers[r.nextInt(size - 1)]; - // The element that should be found - int shouldBeFound = integers[r.nextInt(size - 1)]; + BinarySearch search = new BinarySearch(); + int atIndex = search.find(integers, shouldBeFound); - BinarySearch search = new BinarySearch(); - int atIndex = search.find(integers, shouldBeFound); - - System.out.println(format( + System.out.println( + format( "Should be found: %d. Found %d at index %d. An array length %d", - shouldBeFound, integers[atIndex], atIndex, size - )); + shouldBeFound, integers[atIndex], atIndex, size)); - int toCheck = Arrays.binarySearch(integers, shouldBeFound); - System.out.println(format("Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); - } + int toCheck = Arrays.binarySearch(integers, shouldBeFound); + System.out.println( + format( + "Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); + } } diff --git a/Searches/InterpolationSearch.java b/Searches/InterpolationSearch.java index 1b4f64a818b5..50e8686f6ddd 100644 --- a/Searches/InterpolationSearch.java +++ b/Searches/InterpolationSearch.java @@ -1,75 +1,70 @@ package Searches; +import static java.lang.String.format; + import java.util.Arrays; import java.util.Random; import java.util.stream.IntStream; -import static java.lang.String.format; - /** * Interpolation search algorithm implementation - *

- * Worst-case performance O(n) - * Best-case performance O(1) - * Average performance O(log(log(n))) if the elements are uniformly distributed if not O(n) - * Worst-case space complexity O(1) + * + *

Worst-case performance O(n) Best-case performance O(1) Average performance O(log(log(n))) if + * the elements are uniformly distributed if not O(n) Worst-case space complexity O(1) * * @author Podshivalov Nikita (https://github.com/nikitap492) */ class InterpolationSearch { - - /** - * @param array is a sorted array - * @param key is a value what shoulb be found in the array - * @return an index if the array contains the key unless -1 - */ - public int find(int array[], int key) { - // Find indexes of two corners - int start = 0, end = (array.length - 1); - - // Since array is sorted, an element present - // in array must be in range defined by corner - while (start <= end && key >= array[start] && key <= array[end]) { - // Probing the position with keeping - // uniform distribution in mind. - int pos = start + (((end - start) / (array[end] - array[start])) * (key - array[start])); - - // Condition of target found - if (array[pos] == key) - return pos; - - // If key is larger, key is in upper part - if (array[pos] < key) - start = pos + 1; - - // If key is smaller, x is in lower part - else - end = pos - 1; - } - return -1; - } - - // Driver method - public static void main(String[] args) { - Random r = new Random(); - int size = 100; - int maxElement = 100000; - int[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(); - - - //the element that should be found - Integer shouldBeFound = integers[r.nextInt(size - 1)]; - - InterpolationSearch search = new InterpolationSearch(); - int atIndex = search.find(integers, shouldBeFound); - - System.out.println(String.format("Should be found: %d. Found %d at index %d. An array length %d" - , shouldBeFound, integers[atIndex], atIndex, size)); - - - int toCheck = Arrays.binarySearch(integers, shouldBeFound); - System.out.println(format("Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); + /** + * @param array is a sorted array + * @param key is a value what shoulb be found in the array + * @return an index if the array contains the key unless -1 + */ + public int find(int array[], int key) { + // Find indexes of two corners + int start = 0, end = (array.length - 1); + + // Since array is sorted, an element present + // in array must be in range defined by corner + while (start <= end && key >= array[start] && key <= array[end]) { + // Probing the position with keeping + // uniform distribution in mind. + int pos = start + (((end - start) / (array[end] - array[start])) * (key - array[start])); + + // Condition of target found + if (array[pos] == key) return pos; + + // If key is larger, key is in upper part + if (array[pos] < key) start = pos + 1; + + // If key is smaller, x is in lower part + else end = pos - 1; } + return -1; + } + + // Driver method + public static void main(String[] args) { + Random r = new Random(); + int size = 100; + int maxElement = 100000; + int[] integers = IntStream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(); + + // the element that should be found + Integer shouldBeFound = integers[r.nextInt(size - 1)]; + + InterpolationSearch search = new InterpolationSearch(); + int atIndex = search.find(integers, shouldBeFound); + + System.out.println( + String.format( + "Should be found: %d. Found %d at index %d. An array length %d", + shouldBeFound, integers[atIndex], atIndex, size)); + + int toCheck = Arrays.binarySearch(integers, shouldBeFound); + System.out.println( + format( + "Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); + } } - diff --git a/Searches/IterativeBinarySearch.java b/Searches/IterativeBinarySearch.java index 5a3a6d9e11cc..d41cbc246993 100644 --- a/Searches/IterativeBinarySearch.java +++ b/Searches/IterativeBinarySearch.java @@ -1,79 +1,79 @@ package Searches; +import static java.lang.String.format; + import java.util.Arrays; import java.util.Random; import java.util.stream.Stream; -import static java.lang.String.format; - /** - * Binary search is one of the most popular algorithms - * This class represents iterative version {@link BinarySearch} - * Iterative binary search is likely to have lower constant factors because it doesn't involve the overhead of manipulating the call stack. - * But in java the recursive version can be optimized by the compiler to this version. - *

- * Worst-case performance O(log n) - * Best-case performance O(1) - * Average performance O(log n) - * Worst-case space complexity O(1) + * Binary search is one of the most popular algorithms This class represents iterative version + * {@link BinarySearch} Iterative binary search is likely to have lower constant factors because it + * doesn't involve the overhead of manipulating the call stack. But in java the recursive version + * can be optimized by the compiler to this version. + * + *

Worst-case performance O(log n) Best-case performance O(1) Average performance O(log n) + * Worst-case space complexity O(1) * * @author Gabriele La Greca : https://github.com/thegabriele97 * @author Podshivalov Nikita (https://github.com/nikitap492) * @see SearchAlgorithm * @see BinarySearch */ - public final class IterativeBinarySearch implements SearchAlgorithm { - /** - * This method implements an iterative version of binary search algorithm - * - * @param array a sorted array - * @param key the key to search in array - * @return the index of key in the array or -1 if not found - */ - @Override - public > int find(T[] array, T key) { - int l, r, k, cmp; - - l = 0; - r = array.length - 1; - - while (l <= r) { - k = (l + r) >>> 1; - cmp = key.compareTo(array[k]); - - if (cmp == 0) { - return k; - } else if (cmp < 0) { - r = --k; - } else { - l = ++k; - } - } - - return -1; + /** + * This method implements an iterative version of binary search algorithm + * + * @param array a sorted array + * @param key the key to search in array + * @return the index of key in the array or -1 if not found + */ + @Override + public > int find(T[] array, T key) { + int l, r, k, cmp; + + l = 0; + r = array.length - 1; + + while (l <= r) { + k = (l + r) >>> 1; + cmp = key.compareTo(array[k]); + + if (cmp == 0) { + return k; + } else if (cmp < 0) { + r = --k; + } else { + l = ++k; + } } - //Only a main method for test purpose - public static void main(String[] args) { - Random r = new Random(); - int size = 100; - int maxElement = 100000; - Integer[] integers = Stream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(Integer[]::new); - - - //the element that should be found - Integer shouldBeFound = integers[r.nextInt(size - 1)]; - - IterativeBinarySearch search = new IterativeBinarySearch(); - int atIndex = search.find(integers, shouldBeFound); - - System.out.println(String.format("Should be found: %d. Found %d at index %d. An array length %d" - , shouldBeFound, integers[atIndex], atIndex, size)); - - - int toCheck = Arrays.binarySearch(integers, shouldBeFound); - System.out.println(format("Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); - } + return -1; + } + + // Only a main method for test purpose + public static void main(String[] args) { + Random r = new Random(); + int size = 100; + int maxElement = 100000; + Integer[] integers = + Stream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(Integer[]::new); + + // the element that should be found + Integer shouldBeFound = integers[r.nextInt(size - 1)]; + + IterativeBinarySearch search = new IterativeBinarySearch(); + int atIndex = search.find(integers, shouldBeFound); + + System.out.println( + String.format( + "Should be found: %d. Found %d at index %d. An array length %d", + shouldBeFound, integers[atIndex], atIndex, size)); + + int toCheck = Arrays.binarySearch(integers, shouldBeFound); + System.out.println( + format( + "Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); + } } diff --git a/Searches/IterativeTernarySearch.java b/Searches/IterativeTernarySearch.java index 798cf444f47f..7c6adc505f8e 100644 --- a/Searches/IterativeTernarySearch.java +++ b/Searches/IterativeTernarySearch.java @@ -1,83 +1,74 @@ package Searches; +import static java.lang.String.format; + import java.util.Arrays; import java.util.Random; import java.util.stream.Stream; -import static java.lang.String.format; - /** - * A iterative version of a ternary search algorithm - * This is better way to implement the ternary search, because a recursive version adds some overhead to a stack. - * But in java the compile can transform the recursive version to iterative implicitly, - * so there are no much differences between these two algorithms - *

- * Worst-case performance Θ(log3(N)) - * Best-case performance O(1) - * Average performance Θ(log3(N)) - * Worst-case space complexity O(1) + * A iterative version of a ternary search algorithm This is better way to implement the ternary + * search, because a recursive version adds some overhead to a stack. But in java the compile can + * transform the recursive version to iterative implicitly, so there are no much differences between + * these two algorithms + * + *

Worst-case performance Θ(log3(N)) Best-case performance O(1) Average performance Θ(log3(N)) + * Worst-case space complexity O(1) * * @author Podshivalov Nikita (https://github.com/nikitap492) * @see SearchAlgorithm * @see TernarySearch * @since 2018-04-13 */ - public class IterativeTernarySearch implements SearchAlgorithm { + @Override + public > int find(T[] array, T key) { + int left = 0; + int right = array.length - 1; - @Override - public > int find(T[] array, T key) { - int left = 0; - int right = array.length - 1; - - while (right > left) { - - int leftCmp = array[left].compareTo(key); - int rightCmp = array[right].compareTo(key); - if (leftCmp == 0) return left; - if (rightCmp == 0) return right; + while (right > left) { - int leftThird = left + (right - left) / 3 + 1; - int rightThird = right - (right - left) / 3 - 1; + int leftCmp = array[left].compareTo(key); + int rightCmp = array[right].compareTo(key); + if (leftCmp == 0) return left; + if (rightCmp == 0) return right; + int leftThird = left + (right - left) / 3 + 1; + int rightThird = right - (right - left) / 3 - 1; - if (array[leftThird].compareTo(key) <= 0) { - left = leftThird; - } else { - right = rightThird; - } - } - - return -1; + if (array[leftThird].compareTo(key) <= 0) { + left = leftThird; + } else { + right = rightThird; + } } - - public static void main(String[] args) { - //just generate data - Random r = new Random(); - int size = 100; - int maxElement = 100000; - Integer[] integers = Stream.generate(() -> r.nextInt(maxElement)) - .limit(size) - .sorted() - .toArray(Integer[]::new); - - - //the element that should be found - Integer shouldBeFound = integers[r.nextInt(size - 1)]; - - IterativeTernarySearch search = new IterativeTernarySearch(); - int atIndex = search.find(integers, shouldBeFound); - - System.out.println(format("Should be found: %d. Found %d at index %d. An array length %d", - shouldBeFound, integers[atIndex], atIndex, size)); - - int toCheck = Arrays.binarySearch(integers, shouldBeFound); - System.out.println(format("Found by system method at an index: %d. Is equal: %b", - toCheck, toCheck == atIndex)); - - } - - + return -1; + } + + public static void main(String[] args) { + // just generate data + Random r = new Random(); + int size = 100; + int maxElement = 100000; + Integer[] integers = + Stream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(Integer[]::new); + + // the element that should be found + Integer shouldBeFound = integers[r.nextInt(size - 1)]; + + IterativeTernarySearch search = new IterativeTernarySearch(); + int atIndex = search.find(integers, shouldBeFound); + + System.out.println( + format( + "Should be found: %d. Found %d at index %d. An array length %d", + shouldBeFound, integers[atIndex], atIndex, size)); + + int toCheck = Arrays.binarySearch(integers, shouldBeFound); + System.out.println( + format( + "Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); + } } diff --git a/Searches/JumpSearch.java b/Searches/JumpSearch.java index 897bda6c4f15..87eafe25cbf1 100644 --- a/Searches/JumpSearch.java +++ b/Searches/JumpSearch.java @@ -2,38 +2,39 @@ public class JumpSearch implements SearchAlgorithm { - public static void main(String[] args) { - JumpSearch jumpSearch = new JumpSearch(); - Integer[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - for (int i = 0; i < array.length; i++) { - assert jumpSearch.find(array, i) == i; - } - assert jumpSearch.find(array, -1) == -1; - assert jumpSearch.find(array, 11) == -1; + public static void main(String[] args) { + JumpSearch jumpSearch = new JumpSearch(); + Integer[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + for (int i = 0; i < array.length; i++) { + assert jumpSearch.find(array, i) == i; } + assert jumpSearch.find(array, -1) == -1; + assert jumpSearch.find(array, 11) == -1; + } - /** - * Jump Search algorithm implements - * - * @param array the array contains elements - * @param key to be searched - * @return index of {@code key} if found, otherwise -1 - */ - @Override - public > int find(T[] array, T key) { - int length = array.length; /* length of array */ - int blockSize = (int) Math.sqrt(length); /* block size to be jumped */ + /** + * Jump Search algorithm implements + * + * @param array the array contains elements + * @param key to be searched + * @return index of {@code key} if found, otherwise -1 + */ + @Override + public > int find(T[] array, T key) { + int length = array.length; /* length of array */ + int blockSize = (int) Math.sqrt(length); /* block size to be jumped */ - int limit = blockSize; - while (key.compareTo(array[limit]) > 0 && limit < array.length - 1) { - limit = Math.min(limit + blockSize, array.length - 1); - } + int limit = blockSize; + while (key.compareTo(array[limit]) > 0 && limit < array.length - 1) { + limit = Math.min(limit + blockSize, array.length - 1); + } - for (int i = limit - blockSize; i <= limit; i++) { - if (array[i] == key) { /* execute linear search */ - return i; - } - } - return -1; /* not found */ + for (int i = limit - blockSize; i <= limit; i++) { + if (array[i] == key) { + /* execute linear search */ + return i; + } } + return -1; /* not found */ + } } diff --git a/Searches/LinearSearch.java b/Searches/LinearSearch.java index 8a69b758d6dd..e8da9ab196e8 100644 --- a/Searches/LinearSearch.java +++ b/Searches/LinearSearch.java @@ -4,57 +4,54 @@ import java.util.stream.Stream; /** - * Linear search is the easiest search algorithm - * It works with sorted and unsorted arrays (an binary search works only with sorted array) - * This algorithm just compares all elements of an array to find a value - *

- * Worst-case performance O(n) - * Best-case performance O(1) - * Average performance O(n) - * Worst-case space complexity + * Linear search is the easiest search algorithm It works with sorted and unsorted arrays (an binary + * search works only with sorted array) This algorithm just compares all elements of an array to + * find a value + * + *

Worst-case performance O(n) Best-case performance O(1) Average performance O(n) Worst-case + * space complexity * * @author Varun Upadhyay (https://github.com/varunu28) * @author Podshivalov Nikita (https://github.com/nikitap492) * @see BinarySearch * @see SearchAlgorithm */ - public class LinearSearch implements SearchAlgorithm { - /** - * Generic Linear search method - * - * @param array List to be searched - * @param value Key being searched for - * @return Location of the key - */ - @Override - public > int find(T[] array, T value) { - for (int i = 0; i < array.length; i++) { - if (array[i].compareTo(value) == 0) { - return i; - } - } - return -1; - } - - - public static void main(String[] args) { - //just generate data - Random r = new Random(); - int size = 200; - int maxElement = 100; - Integer[] integers = Stream.generate(() -> r.nextInt(maxElement)).limit(size).toArray(Integer[]::new); - - - //the element that should be found - Integer shouldBeFound = integers[r.nextInt(size - 1)]; - - LinearSearch search = new LinearSearch(); - int atIndex = search.find(integers, shouldBeFound); - - System.out.println(String.format("Should be found: %d. Found %d at index %d. An array length %d" - , shouldBeFound, integers[atIndex], atIndex, size)); + /** + * Generic Linear search method + * + * @param array List to be searched + * @param value Key being searched for + * @return Location of the key + */ + @Override + public > int find(T[] array, T value) { + for (int i = 0; i < array.length; i++) { + if (array[i].compareTo(value) == 0) { + return i; + } } - + return -1; + } + + public static void main(String[] args) { + // just generate data + Random r = new Random(); + int size = 200; + int maxElement = 100; + Integer[] integers = + Stream.generate(() -> r.nextInt(maxElement)).limit(size).toArray(Integer[]::new); + + // the element that should be found + Integer shouldBeFound = integers[r.nextInt(size - 1)]; + + LinearSearch search = new LinearSearch(); + int atIndex = search.find(integers, shouldBeFound); + + System.out.println( + String.format( + "Should be found: %d. Found %d at index %d. An array length %d", + shouldBeFound, integers[atIndex], atIndex, size)); + } } diff --git a/Searches/PerfectBinarySearch.java b/Searches/PerfectBinarySearch.java index 559ecf5d9d15..9399789d091c 100644 --- a/Searches/PerfectBinarySearch.java +++ b/Searches/PerfectBinarySearch.java @@ -2,35 +2,30 @@ import java.util.*; -class PerfectBinarySearch{ +class PerfectBinarySearch { - static int binarySearch(int[] arr, int target) - { - int low = 0 ; - int high = arr.length - 1 ; + static int binarySearch(int[] arr, int target) { + int low = 0; + int high = arr.length - 1; - while(low <= high) { - int mid =(low + high) / 2; + while (low <= high) { + int mid = (low + high) / 2; - if(arr[mid] == target) { - return mid; - } - else if(arr[mid] > target) { - high = mid - 1; - } - else { - low = mid + 1; - } - - } - return -1; + if (arr[mid] == target) { + return mid; + } else if (arr[mid] > target) { + high = mid - 1; + } else { + low = mid + 1; + } } + return -1; + } - public static void main(String[] args) - { - PerfectBinarySearch BinarySearch = new PerfectBinarySearch(); - int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; - assert BinarySearch.binarySearch(array, -1) == -1; - assert BinarySearch.binarySearch(array, 11) == -1; - } + public static void main(String[] args) { + PerfectBinarySearch BinarySearch = new PerfectBinarySearch(); + int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + assert BinarySearch.binarySearch(array, -1) == -1; + assert BinarySearch.binarySearch(array, 11) == -1; + } } diff --git a/Searches/SaddlebackSearch.java b/Searches/SaddlebackSearch.java index eee2f0bb6559..dca560566477 100644 --- a/Searches/SaddlebackSearch.java +++ b/Searches/SaddlebackSearch.java @@ -3,78 +3,67 @@ import java.util.Scanner; /** - * Program to perform Saddleback Search - * Given a sorted 2D array(elements are sorted across every row and column, assuming ascending order) - * of size n*m we can search a given element in O(n+m) - *

- * we start from bottom left corner - * if the current element is greater than the given element then we move up - * else we move right - * Sample Input: - * 5 5 ->Dimensions - * -10 -5 -3 4 9 - * -6 -2 0 5 10 - * -4 -1 1 6 12 - * 2 3 7 8 13 - * 100 120 130 140 150 - * 140 ->element to be searched - * output: 4 3 // first value is row, second one is column + * Program to perform Saddleback Search Given a sorted 2D array(elements are sorted across every row + * and column, assuming ascending order) of size n*m we can search a given element in O(n+m) + * + *

we start from bottom left corner if the current element is greater than the given element then + * we move up else we move right Sample Input: 5 5 ->Dimensions -10 -5 -3 4 9 -6 -2 0 5 10 -4 -1 1 6 + * 12 2 3 7 8 13 100 120 130 140 150 140 ->element to be searched output: 4 3 // first value is row, + * second one is column * * @author Nishita Aggarwal */ public class SaddlebackSearch { - /** - * This method performs Saddleback Search - * - * @param arr The **Sorted** array in which we will search the element. - * @param row the current row. - * @param col the current column. - * @param key the element that we want to search for. - * @return The index(row and column) of the element if found. - * Else returns -1 -1. - */ - private static int[] find(int arr[][], int row, int col, int key) { + /** + * This method performs Saddleback Search + * + * @param arr The **Sorted** array in which we will search the element. + * @param row the current row. + * @param col the current column. + * @param key the element that we want to search for. + * @return The index(row and column) of the element if found. Else returns -1 -1. + */ + private static int[] find(int arr[][], int row, int col, int key) { - //array to store the answer row and column - int ans[] = {-1, -1}; - if (row < 0 || col >= arr[row].length) { - return ans; - } - if (arr[row][col] == key) { - ans[0] = row; - ans[1] = col; - return ans; - } - //if the current element is greater than the given element then we move up - else if (arr[row][col] > key) { - return find(arr, row - 1, col, key); - } - //else we move right - return find(arr, row, col + 1, key); + // array to store the answer row and column + int ans[] = {-1, -1}; + if (row < 0 || col >= arr[row].length) { + return ans; } - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - // TODO Auto-generated method stub - Scanner sc = new Scanner(System.in); - int arr[][]; - int i, j, rows = sc.nextInt(), col = sc.nextInt(); - arr = new int[rows][col]; - for (i = 0; i < rows; i++) { - for (j = 0; j < col; j++) { - arr[i][j] = sc.nextInt(); - } - } - int ele = sc.nextInt(); - //we start from bottom left corner - int ans[] = find(arr, rows - 1, 0, ele); - System.out.println(ans[0] + " " + ans[1]); - sc.close(); + if (arr[row][col] == key) { + ans[0] = row; + ans[1] = col; + return ans; } + // if the current element is greater than the given element then we move up + else if (arr[row][col] > key) { + return find(arr, row - 1, col, key); + } + // else we move right + return find(arr, row, col + 1, key); + } + /** + * Main method + * + * @param args Command line arguments + */ + public static void main(String[] args) { + // TODO Auto-generated method stub + Scanner sc = new Scanner(System.in); + int arr[][]; + int i, j, rows = sc.nextInt(), col = sc.nextInt(); + arr = new int[rows][col]; + for (i = 0; i < rows; i++) { + for (j = 0; j < col; j++) { + arr[i][j] = sc.nextInt(); + } + } + int ele = sc.nextInt(); + // we start from bottom left corner + int ans[] = find(arr, rows - 1, 0, ele); + System.out.println(ans[0] + " " + ans[1]); + sc.close(); + } } diff --git a/Searches/SearchAlgorithm.java b/Searches/SearchAlgorithm.java index 00dce17f0226..1d5262d3a2dd 100644 --- a/Searches/SearchAlgorithm.java +++ b/Searches/SearchAlgorithm.java @@ -4,15 +4,14 @@ * The common interface of most searching algorithms * * @author Podshivalov Nikita (https://github.com/nikitap492) - **/ + */ public interface SearchAlgorithm { - /** - * @param key is an element which should be found - * @param array is an array where the element should be found - * @param Comparable type - * @return first found index of the element - */ - > int find(T array[], T key); - + /** + * @param key is an element which should be found + * @param array is an array where the element should be found + * @param Comparable type + * @return first found index of the element + */ + > int find(T array[], T key); } diff --git a/Searches/TernarySearch.java b/Searches/TernarySearch.java index ced67b0f56e7..20b0c436a98d 100644 --- a/Searches/TernarySearch.java +++ b/Searches/TernarySearch.java @@ -1,99 +1,97 @@ package Searches; +import static java.lang.String.format; import java.util.Arrays; import java.util.Random; import java.util.stream.Stream; -import static java.lang.String.format; - /** - * A ternary search algorithm is a technique in computer science for finding the minimum or maximum of a unimodal function - * The algorithm determines either that the minimum or maximum cannot be in the first third of the domain - * or that it cannot be in the last third of the domain, then repeats on the remaining third. - *

- * Worst-case performance Θ(log3(N)) - * Best-case performance O(1) - * Average performance Θ(log3(N)) - * Worst-case space complexity O(1) + * A ternary search algorithm is a technique in computer science for finding the minimum or maximum + * of a unimodal function The algorithm determines either that the minimum or maximum cannot be in + * the first third of the domain or that it cannot be in the last third of the domain, then repeats + * on the remaining third. + * + *

Worst-case performance Θ(log3(N)) Best-case performance O(1) Average performance Θ(log3(N)) + * Worst-case space complexity O(1) * * @author Podshivalov Nikita (https://github.com/nikitap492) * @see SearchAlgorithm * @see IterativeBinarySearch */ - public class TernarySearch implements SearchAlgorithm { - /** - * @param arr The **Sorted** array in which we will search the element. - * @param value The value that we want to search for. - * @return The index of the element if found. - * Else returns -1. - */ - @Override - public > int find(T[] arr, T value) { - return ternarySearch(arr, value, 0, arr.length - 1); + /** + * @param arr The **Sorted** array in which we will search the element. + * @param value The value that we want to search for. + * @return The index of the element if found. Else returns -1. + */ + @Override + public > int find(T[] arr, T value) { + return ternarySearch(arr, value, 0, arr.length - 1); + } + + /** + * @param arr The **Sorted** array in which we will search the element. + * @param key The value that we want to search for. + * @param start The starting index from which we will start Searching. + * @param end The ending index till which we will Search. + * @return Returns the index of the Element if found. Else returns -1. + */ + private > int ternarySearch(T[] arr, T key, int start, int end) { + if (start > end) { + return -1; } - - /** - * @param arr The **Sorted** array in which we will search the element. - * @param key The value that we want to search for. - * @param start The starting index from which we will start Searching. - * @param end The ending index till which we will Search. - * @return Returns the index of the Element if found. - * Else returns -1. - */ - private > int ternarySearch(T[] arr, T key, int start, int end) { - if (start > end) { - return -1; - } - /* First boundary: add 1/3 of length to start */ - int mid1 = start + (end - start) / 3; - /* Second boundary: add 2/3 of length to start */ - int mid2 = start + 2 * (end - start) / 3; - - if (key.compareTo(arr[mid1]) == 0) { - return mid1; - } else if (key.compareTo(arr[mid2]) == 0) { - return mid2; - } - - /* Search the first (1/3) rd part of the array.*/ - - else if (key.compareTo(arr[mid1]) < 0) { - return ternarySearch(arr, key, start, --mid1); - } - /* Search 3rd (1/3)rd part of the array */ - - else if (key.compareTo(arr[mid2]) > 0) { - return ternarySearch(arr, key, ++mid2, end); - } - /* Search middle (1/3)rd part of the array */ - - else { - return ternarySearch(arr, key, mid1, mid2); - } + /* First boundary: add 1/3 of length to start */ + int mid1 = start + (end - start) / 3; + /* Second boundary: add 2/3 of length to start */ + int mid2 = start + 2 * (end - start) / 3; + + if (key.compareTo(arr[mid1]) == 0) { + return mid1; + } else if (key.compareTo(arr[mid2]) == 0) { + return mid2; } - public static void main(String[] args) { - //just generate data - Random r = new Random(); - int size = 100; - int maxElement = 100000; - Integer[] integers = Stream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(Integer[]::new); - + /* Search the first (1/3) rd part of the array.*/ - //the element that should be found - Integer shouldBeFound = integers[r.nextInt(size - 1)]; - - TernarySearch search = new TernarySearch(); - int atIndex = search.find(integers, shouldBeFound); - - System.out.println(format("Should be found: %d. Found %d at index %d. An array length %d" - , shouldBeFound, integers[atIndex], atIndex, size)); + else if (key.compareTo(arr[mid1]) < 0) { + return ternarySearch(arr, key, start, --mid1); + } + /* Search 3rd (1/3)rd part of the array */ - int toCheck = Arrays.binarySearch(integers, shouldBeFound); - System.out.println(format("Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); + else if (key.compareTo(arr[mid2]) > 0) { + return ternarySearch(arr, key, ++mid2, end); + } + /* Search middle (1/3)rd part of the array */ + else { + return ternarySearch(arr, key, mid1, mid2); } -} \ No newline at end of file + } + + public static void main(String[] args) { + // just generate data + Random r = new Random(); + int size = 100; + int maxElement = 100000; + Integer[] integers = + Stream.generate(() -> r.nextInt(maxElement)).limit(size).sorted().toArray(Integer[]::new); + + // the element that should be found + Integer shouldBeFound = integers[r.nextInt(size - 1)]; + + TernarySearch search = new TernarySearch(); + int atIndex = search.find(integers, shouldBeFound); + + System.out.println( + format( + "Should be found: %d. Found %d at index %d. An array length %d", + shouldBeFound, integers[atIndex], atIndex, size)); + + int toCheck = Arrays.binarySearch(integers, shouldBeFound); + System.out.println( + format( + "Found by system method at an index: %d. Is equal: %b", toCheck, toCheck == atIndex)); + } +} diff --git a/Sorts/BitonicSort.java b/Sorts/BitonicSort.java index 195ae1712d48..4888cc070c6f 100644 --- a/Sorts/BitonicSort.java +++ b/Sorts/BitonicSort.java @@ -2,87 +2,73 @@ /* Java program for Bitonic Sort. Note that this program works only when size of input is a power of 2. */ -public class BitonicSort -{ - /* The parameter dir indicates the sorting direction, - ASCENDING or DESCENDING; if (a[i] > a[j]) agrees - with the direction, then a[i] and a[j] are - interchanged. */ - void compAndSwap(int a[], int i, int j, int dir) - { - if ( (a[i] > a[j] && dir == 1) || - (a[i] < a[j] && dir == 0)) - { - // Swapping elements - int temp = a[i]; - a[i] = a[j]; - a[j] = temp; - } +public class BitonicSort { + /* The parameter dir indicates the sorting direction, + ASCENDING or DESCENDING; if (a[i] > a[j]) agrees + with the direction, then a[i] and a[j] are + interchanged. */ + void compAndSwap(int a[], int i, int j, int dir) { + if ((a[i] > a[j] && dir == 1) || (a[i] < a[j] && dir == 0)) { + // Swapping elements + int temp = a[i]; + a[i] = a[j]; + a[j] = temp; } + } - /* It recursively sorts a bitonic sequence in ascending - order, if dir = 1, and in descending order otherwise - (means dir=0). The sequence to be sorted starts at - index position low, the parameter cnt is the number - of elements to be sorted.*/ - void bitonicMerge(int a[], int low, int cnt, int dir) - { - if (cnt>1) - { - int k = cnt/2; - for (int i=low; i 1) { + int k = cnt / 2; + for (int i = low; i < low + k; i++) compAndSwap(a, i, i + k, dir); + bitonicMerge(a, low, k, dir); + bitonicMerge(a, low + k, k, dir); } + } - /* This funcion first produces a bitonic sequence by - recursively sorting its two halves in opposite sorting - orders, and then calls bitonicMerge to make them in - the same order */ - void bitonicSort(int a[], int low, int cnt, int dir) - { - if (cnt>1) - { - int k = cnt/2; + /* This funcion first produces a bitonic sequence by + recursively sorting its two halves in opposite sorting + orders, and then calls bitonicMerge to make them in + the same order */ + void bitonicSort(int a[], int low, int cnt, int dir) { + if (cnt > 1) { + int k = cnt / 2; - // sort in ascending order since dir here is 1 - bitonicSort(a, low, k, 1); + // sort in ascending order since dir here is 1 + bitonicSort(a, low, k, 1); - // sort in descending order since dir here is 0 - bitonicSort(a,low+k, k, 0); + // sort in descending order since dir here is 0 + bitonicSort(a, low + k, k, 0); - // Will merge wole sequence in ascending order - // since dir=1. - bitonicMerge(a, low, cnt, dir); - } + // Will merge wole sequence in ascending order + // since dir=1. + bitonicMerge(a, low, cnt, dir); } + } - /*Caller of bitonicSort for sorting the entire array - of length N in ASCENDING order */ - void sort(int a[], int N, int up) - { - bitonicSort(a, 0, N, up); - } + /*Caller of bitonicSort for sorting the entire array + of length N in ASCENDING order */ + void sort(int a[], int N, int up) { + bitonicSort(a, 0, N, up); + } - /* A utility function to print array of size n */ - static void printArray(int arr[]) - { - int n = arr.length; - for (int i=0; i> boolean isSorted(T[] array) { - for (int i = 0; i < array.length - 1; i++) { - if (SortUtils.less(array[i + 1], array[i])) return false; - } - return true; + private static > boolean isSorted(T[] array) { + for (int i = 0; i < array.length - 1; i++) { + if (SortUtils.less(array[i + 1], array[i])) return false; } + return true; + } - // Randomly shuffles the array - private static void nextPermutation(T[] array) { - int length = array.length; + // Randomly shuffles the array + private static void nextPermutation(T[] array) { + int length = array.length; - for (int i = 0; i < array.length; i++) { - int randomIndex = i + random.nextInt(length - i); - SortUtils.swap(array, randomIndex, i); - } + for (int i = 0; i < array.length; i++) { + int randomIndex = i + random.nextInt(length - i); + SortUtils.swap(array, randomIndex, i); } + } - public > T[] sort(T[] array) { - while (!isSorted(array)) { - nextPermutation(array); - } - return array; + public > T[] sort(T[] array) { + while (!isSorted(array)) { + nextPermutation(array); } + return array; + } - // Driver Program - public static void main(String[] args) { - // Integer Input - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + // Driver Program + public static void main(String[] args) { + // Integer Input + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - BogoSort bogoSort = new BogoSort(); + BogoSort bogoSort = new BogoSort(); - // print a sorted array - SortUtils.print(bogoSort.sort(integers)); + // print a sorted array + SortUtils.print(bogoSort.sort(integers)); - // String Input - String[] strings = {"c", "a", "e", "b", "d"}; + // String Input + String[] strings = {"c", "a", "e", "b", "d"}; - SortUtils.print(bogoSort.sort(strings)); - } + SortUtils.print(bogoSort.sort(strings)); + } } diff --git a/Sorts/BubbleSort.java b/Sorts/BubbleSort.java index 7df1fae8a392..80385d24280f 100644 --- a/Sorts/BubbleSort.java +++ b/Sorts/BubbleSort.java @@ -7,47 +7,43 @@ * @author Podshivalov Nikita (https://github.com/nikitap492) * @see SortAlgorithm */ - class BubbleSort implements SortAlgorithm { - /** - * This method implements the Generic Bubble Sort - * - * @param array The array to be sorted - * Sorts the array in ascending order - **/ - - @Override - public > T[] sort(T[] array) { - for (int i = 0, size = array.length; i < size - 1; ++i) { - boolean swapped = false; - for (int j = 0; j < size - 1 - i; ++j) { - if (greater(array[j], array[j + 1])) { - swap(array, j, j + 1); - swapped = true; - } - } - if (!swapped) { - break; - } + /** + * This method implements the Generic Bubble Sort + * + * @param array The array to be sorted Sorts the array in ascending order + */ + @Override + public > T[] sort(T[] array) { + for (int i = 0, size = array.length; i < size - 1; ++i) { + boolean swapped = false; + for (int j = 0; j < size - 1 - i; ++j) { + if (greater(array[j], array[j + 1])) { + swap(array, j, j + 1); + swapped = true; } - return array; + } + if (!swapped) { + break; + } } + return array; + } - // Driver Program - public static void main(String[] args) { + // Driver Program + public static void main(String[] args) { - // Integer Input - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - BubbleSort bubbleSort = new BubbleSort(); - bubbleSort.sort(integers); + // Integer Input + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + BubbleSort bubbleSort = new BubbleSort(); + bubbleSort.sort(integers); - // Output => 1, 4, 6, 9, 12, 23, 54, 78, 231 - print(integers); + // Output => 1, 4, 6, 9, 12, 23, 54, 78, 231 + print(integers); - // String Input - String[] strings = {"c", "a", "e", "b", "d"}; - //Output => a, b, c, d, e - print(bubbleSort.sort(strings)); - - } + // String Input + String[] strings = {"c", "a", "e", "b", "d"}; + // Output => a, b, c, d, e + print(bubbleSort.sort(strings)); + } } diff --git a/Sorts/BubbleSortRecursion.java b/Sorts/BubbleSortRecursion.java index 6af7778f199a..ce51b1bfe29c 100644 --- a/Sorts/BubbleSortRecursion.java +++ b/Sorts/BubbleSortRecursion.java @@ -2,54 +2,52 @@ import java.util.Random; -/** - * BubbleSort algorithm implements using recursion - */ +/** BubbleSort algorithm implements using recursion */ public class BubbleSortRecursion implements SortAlgorithm { - public static void main(String[] args) { - Integer[] array = new Integer[10]; + public static void main(String[] args) { + Integer[] array = new Integer[10]; - Random random = new Random(); - /* generate 10 random numbers from -50 to 49 */ - for (int i = 0; i < array.length; ++i) { - array[i] = random.nextInt(100) - 50; - } + Random random = new Random(); + /* generate 10 random numbers from -50 to 49 */ + for (int i = 0; i < array.length; ++i) { + array[i] = random.nextInt(100) - 50; + } - BubbleSortRecursion bubbleSortRecursion = new BubbleSortRecursion(); - bubbleSortRecursion.sort(array); + BubbleSortRecursion bubbleSortRecursion = new BubbleSortRecursion(); + bubbleSortRecursion.sort(array); - /* check array is sorted or not */ - for (int i = 0; i < array.length - 1; ++i) { - assert (array[i].compareTo(array[i + 1]) <= 0); - } + /* check array is sorted or not */ + for (int i = 0; i < array.length - 1; ++i) { + assert (array[i].compareTo(array[i + 1]) <= 0); } + } - /** - * @param unsorted - an array should be sorted - * @return sorted array - */ - @Override - public > T[] sort(T[] unsorted) { - bubbleSort(unsorted, unsorted.length); - return unsorted; - } + /** + * @param unsorted - an array should be sorted + * @return sorted array + */ + @Override + public > T[] sort(T[] unsorted) { + bubbleSort(unsorted, unsorted.length); + return unsorted; + } - /** - * BubbleSort algorithm implements using recursion - * - * @param unsorted array contains elements - * @param len length of given array - */ - private static > void bubbleSort(T[] unsorted, int len) { - boolean swapped = false; /* flag to check if array is sorted or not */ - for (int i = 0; i < len - 1; ++i) { - if (SortUtils.greater(unsorted[i], unsorted[i + 1])) { - SortUtils.swap(unsorted, i, i + 1); - swapped = true; - } - } - if (swapped) { - bubbleSort(unsorted, len - 1); - } + /** + * BubbleSort algorithm implements using recursion + * + * @param unsorted array contains elements + * @param len length of given array + */ + private static > void bubbleSort(T[] unsorted, int len) { + boolean swapped = false; /* flag to check if array is sorted or not */ + for (int i = 0; i < len - 1; ++i) { + if (SortUtils.greater(unsorted[i], unsorted[i + 1])) { + SortUtils.swap(unsorted, i, i + 1); + swapped = true; + } + } + if (swapped) { + bubbleSort(unsorted, len - 1); } + } } diff --git a/Sorts/BucketSort.java b/Sorts/BucketSort.java index 0ff4a92ec4aa..66795f7f3c89 100644 --- a/Sorts/BucketSort.java +++ b/Sorts/BucketSort.java @@ -5,111 +5,108 @@ import java.util.List; import java.util.Random; -/** - * Wikipedia: https://en.wikipedia.org/wiki/Bucket_sort - */ +/** Wikipedia: https://en.wikipedia.org/wiki/Bucket_sort */ public class BucketSort { - public static void main(String[] args) { - int[] arr = new int[10]; + public static void main(String[] args) { + int[] arr = new int[10]; - /* generate 10 random numbers from -50 to 49 */ - Random random = new Random(); - for (int i = 0; i < arr.length; ++i) { - arr[i] = random.nextInt(100) - 50; - } + /* generate 10 random numbers from -50 to 49 */ + Random random = new Random(); + for (int i = 0; i < arr.length; ++i) { + arr[i] = random.nextInt(100) - 50; + } - bucketSort(arr); + bucketSort(arr); - /* check array is sorted or not */ - for (int i = 0, limit = arr.length - 1; i < limit; ++i) { - assert arr[i] <= arr[i + 1]; - } + /* check array is sorted or not */ + for (int i = 0, limit = arr.length - 1; i < limit; ++i) { + assert arr[i] <= arr[i + 1]; } + } - /** - * BucketSort algorithms implements - * - * @param arr the array contains elements - */ - private static void bucketSort(int[] arr) { - /* get max value of arr */ - int max = max(arr); - - /* get min value of arr */ - int min = min(arr); - - /* number of buckets */ - int numberOfBuckets = max - min + 1; - - List> buckets = new ArrayList<>(numberOfBuckets); - - /* init buckets */ - for (int i = 0; i < numberOfBuckets; ++i) { - buckets.add(new ArrayList<>()); - } - - /* store elements to buckets */ - for (int value : arr) { - int hash = hash(value, min, numberOfBuckets); - buckets.get(hash).add(value); - } - - /* sort individual bucket */ - for (List bucket : buckets) { - Collections.sort(bucket); - } - - /* concatenate buckets to origin array */ - int index = 0; - for (List bucket : buckets) { - for (int value : bucket) { - arr[index++] = value; - } - } - } + /** + * BucketSort algorithms implements + * + * @param arr the array contains elements + */ + private static void bucketSort(int[] arr) { + /* get max value of arr */ + int max = max(arr); + + /* get min value of arr */ + int min = min(arr); + + /* number of buckets */ + int numberOfBuckets = max - min + 1; + List> buckets = new ArrayList<>(numberOfBuckets); - /** - * Get index of bucket which of our elements gets placed into it. - * - * @param elem the element of array to be sorted - * @param min min value of array - * @param numberOfBucket the number of bucket - * @return index of bucket - */ - private static int hash(int elem, int min, int numberOfBucket) { - return (elem - min) / numberOfBucket; + /* init buckets */ + for (int i = 0; i < numberOfBuckets; ++i) { + buckets.add(new ArrayList<>()); } - /** - * Calculate max value of array - * - * @param arr the array contains elements - * @return max value of given array - */ - public static int max(int[] arr) { - int max = arr[0]; - for (int value : arr) { - if (value > max) { - max = value; - } - } - return max; + /* store elements to buckets */ + for (int value : arr) { + int hash = hash(value, min, numberOfBuckets); + buckets.get(hash).add(value); } - /** - * Calculate min value of array - * - * @param arr the array contains elements - * @return min value of given array - */ - public static int min(int[] arr) { - int min = arr[0]; - for (int value : arr) { - if (value < min) { - min = value; - } - } - return min; + /* sort individual bucket */ + for (List bucket : buckets) { + Collections.sort(bucket); + } + + /* concatenate buckets to origin array */ + int index = 0; + for (List bucket : buckets) { + for (int value : bucket) { + arr[index++] = value; + } + } + } + + /** + * Get index of bucket which of our elements gets placed into it. + * + * @param elem the element of array to be sorted + * @param min min value of array + * @param numberOfBucket the number of bucket + * @return index of bucket + */ + private static int hash(int elem, int min, int numberOfBucket) { + return (elem - min) / numberOfBucket; + } + + /** + * Calculate max value of array + * + * @param arr the array contains elements + * @return max value of given array + */ + public static int max(int[] arr) { + int max = arr[0]; + for (int value : arr) { + if (value > max) { + max = value; + } + } + return max; + } + + /** + * Calculate min value of array + * + * @param arr the array contains elements + * @return min value of given array + */ + public static int min(int[] arr) { + int min = arr[0]; + for (int value : arr) { + if (value < min) { + min = value; + } } + return min; + } } diff --git a/Sorts/CocktailShakerSort.java b/Sorts/CocktailShakerSort.java index c3b5df999d23..12f1e4f38e6b 100644 --- a/Sorts/CocktailShakerSort.java +++ b/Sorts/CocktailShakerSort.java @@ -4,60 +4,54 @@ * @author Mateus Bizzo (https://github.com/MattBizzo) * @author Podshivalov Nikita (https://github.com/nikitap492) */ - class CocktailShakerSort implements SortAlgorithm { - /** - * This method implements the Generic Cocktail Shaker Sort - * - * @param array The array to be sorted - * Sorts the array in increasing order - **/ - - @Override - public > T[] sort(T[] array) { - - int length = array.length; - int left = 0; - int right = length - 1; - int swappedLeft, swappedRight; - while (left < right) { - // front - swappedRight = 0; - for (int i = left; i < right; i++) { - if (SortUtils.less(array[i + 1], array[i])) { - SortUtils.swap(array, i, i + 1); - swappedRight = i; - } - } - // back - right = swappedRight; - swappedLeft = length - 1; - for (int j = right; j > left; j--) { - if (SortUtils.less(array[j], array[j - 1])) { - SortUtils.swap(array, j - 1, j); - swappedLeft = j; - } - } - left = swappedLeft; + /** + * This method implements the Generic Cocktail Shaker Sort + * + * @param array The array to be sorted Sorts the array in increasing order + */ + @Override + public > T[] sort(T[] array) { + + int length = array.length; + int left = 0; + int right = length - 1; + int swappedLeft, swappedRight; + while (left < right) { + // front + swappedRight = 0; + for (int i = left; i < right; i++) { + if (SortUtils.less(array[i + 1], array[i])) { + SortUtils.swap(array, i, i + 1); + swappedRight = i; } - return array; - - } - - // Driver Program - public static void main(String[] args) { - // Integer Input - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - CocktailShakerSort shakerSort = new CocktailShakerSort(); - - // Output => 1 4 6 9 12 23 54 78 231 - SortUtils.print(shakerSort.sort(integers)); - - // String Input - String[] strings = {"c", "a", "e", "b", "d"}; - SortUtils.print(shakerSort.sort(strings)); + } + // back + right = swappedRight; + swappedLeft = length - 1; + for (int j = right; j > left; j--) { + if (SortUtils.less(array[j], array[j - 1])) { + SortUtils.swap(array, j - 1, j); + swappedLeft = j; + } + } + left = swappedLeft; } - - + return array; + } + + // Driver Program + public static void main(String[] args) { + // Integer Input + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + CocktailShakerSort shakerSort = new CocktailShakerSort(); + + // Output => 1 4 6 9 12 23 54 78 231 + SortUtils.print(shakerSort.sort(integers)); + + // String Input + String[] strings = {"c", "a", "e", "b", "d"}; + SortUtils.print(shakerSort.sort(strings)); + } } diff --git a/Sorts/CombSort.java b/Sorts/CombSort.java index 652fc9f945a6..44afb3c288aa 100644 --- a/Sorts/CombSort.java +++ b/Sorts/CombSort.java @@ -2,15 +2,13 @@ import static Sorts.SortUtils.*; - /** * Comb Sort algorithm implementation - *

- * Best-case performance O(n * log(n)) - * Worst-case performance O(n ^ 2) - * Worst-case space complexity O(1) - *

- * Comb sort improves on bubble sort. + * + *

Best-case performance O(n * log(n)) Worst-case performance O(n ^ 2) Worst-case space + * complexity O(1) + * + *

Comb sort improves on bubble sort. * * @author Sandeep Roy (https://github.com/sandeeproy99) * @author Podshivalov Nikita (https://github.com/nikitap492) @@ -19,55 +17,55 @@ */ class CombSort implements SortAlgorithm { - // To find gap between elements - private int nextGap(int gap) { - // Shrink gap by Shrink factor - gap = (gap * 10) / 13; - return (gap < 1) ? 1 : gap; - } + // To find gap between elements + private int nextGap(int gap) { + // Shrink gap by Shrink factor + gap = (gap * 10) / 13; + return (gap < 1) ? 1 : gap; + } - /** - * Function to sort arr[] using Comb - * - * @param arr - an array should be sorted - * @return sorted array - */ - @Override - public > T[] sort(T[] arr) { - int size = arr.length; + /** + * Function to sort arr[] using Comb + * + * @param arr - an array should be sorted + * @return sorted array + */ + @Override + public > T[] sort(T[] arr) { + int size = arr.length; - // initialize gap - int gap = size; + // initialize gap + int gap = size; - // Initialize swapped as true to make sure that loop runs - boolean swapped = true; + // Initialize swapped as true to make sure that loop runs + boolean swapped = true; - // Keep running while gap is more than 1 and last iteration caused a swap - while (gap != 1 || swapped) { - // Find next gap - gap = nextGap(gap); + // Keep running while gap is more than 1 and last iteration caused a swap + while (gap != 1 || swapped) { + // Find next gap + gap = nextGap(gap); - // Initialize swapped as false so that we can check if swap happened or not - swapped = false; + // Initialize swapped as false so that we can check if swap happened or not + swapped = false; - // Compare all elements with current gap - for (int i = 0; i < size - gap; i++) { - if (less(arr[i + gap], arr[i])) { - // Swap arr[i] and arr[i+gap] - swapped = swap(arr, i, i + gap); - } - } + // Compare all elements with current gap + for (int i = 0; i < size - gap; i++) { + if (less(arr[i + gap], arr[i])) { + // Swap arr[i] and arr[i+gap] + swapped = swap(arr, i, i + gap); } - return arr; + } } + return arr; + } - // Driver method - public static void main(String[] args) { - CombSort ob = new CombSort(); - Integer[] arr = {8, 4, 1, 56, 3, -44, -1, 0, 36, 34, 8, 12, -66, -78, 23, -6, 28, 0}; - ob.sort(arr); + // Driver method + public static void main(String[] args) { + CombSort ob = new CombSort(); + Integer[] arr = {8, 4, 1, 56, 3, -44, -1, 0, 36, 34, 8, 12, -66, -78, 23, -6, 28, 0}; + ob.sort(arr); - System.out.println("sorted array"); - print(arr); - } + System.out.println("sorted array"); + print(arr); + } } diff --git a/Sorts/CountingSort.java b/Sorts/CountingSort.java index 7f10da6cca76..37a6c4e3a7a5 100644 --- a/Sorts/CountingSort.java +++ b/Sorts/CountingSort.java @@ -1,97 +1,96 @@ package Sorts; +import static Sorts.SortUtils.print; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; + import java.util.*; import java.util.stream.IntStream; import java.util.stream.Stream; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; -import static Sorts.SortUtils.print; - /** * @author Youssef Ali (https://github.com/youssefAli11997) * @author Podshivalov Nikita (https://github.com/nikitap492) */ class CountingSort implements SortAlgorithm { - @Override - public > T[] sort(T[] unsorted) { - return sort(Arrays.asList(unsorted)).toArray(unsorted); - } - - /** - * This method implements the Generic Counting Sort - * - * @param list The list to be sorted - *

- * Sorts the list in increasing order - * The method uses list elements as keys in the frequency map - **/ - @Override - public > List sort(List list) { - - Map frequency = new TreeMap<>(); - // The final output array - List sortedArray = new ArrayList<>(list.size()); - - // Counting the frequency of @param array elements - list.forEach(v -> frequency.put(v, frequency.getOrDefault(v, 0) + 1)); - - // Filling the sortedArray - for (Map.Entry element : frequency.entrySet()) { - for (int j = 0; j < element.getValue(); j++) { - sortedArray.add(element.getKey()); - } - } - - return sortedArray; - } - - - /** - * Stream Counting Sort - * The same as method {@link CountingSort#sort(List)} } but this method uses stream API - * - * @param list The list to be sorted - **/ - private static > List streamSort(List list) { - return list.stream() - .collect(toMap(k -> k, v -> 1, (v1, v2) -> v1 + v2, TreeMap::new)) - .entrySet() - .stream() - .flatMap(entry -> IntStream.rangeClosed(1, entry.getValue()).mapToObj(t -> entry.getKey())) - .collect(toList()); + @Override + public > T[] sort(T[] unsorted) { + return sort(Arrays.asList(unsorted)).toArray(unsorted); + } + + /** + * This method implements the Generic Counting Sort + * + * @param list The list to be sorted + *

Sorts the list in increasing order The method uses list elements as keys in the + * frequency map + */ + @Override + public > List sort(List list) { + + Map frequency = new TreeMap<>(); + // The final output array + List sortedArray = new ArrayList<>(list.size()); + + // Counting the frequency of @param array elements + list.forEach(v -> frequency.put(v, frequency.getOrDefault(v, 0) + 1)); + + // Filling the sortedArray + for (Map.Entry element : frequency.entrySet()) { + for (int j = 0; j < element.getValue(); j++) { + sortedArray.add(element.getKey()); + } } - // Driver Program - public static void main(String[] args) { - // Integer Input - List unsortedInts = Stream.of(4, 23, 6, 78, 1, 54, 23, 1, 9, 231, 9, 12).collect(toList()); - CountingSort countingSort = new CountingSort(); - - System.out.println("Before Sorting:"); - print(unsortedInts); - - // Output => 1 1 4 6 9 9 12 23 23 54 78 231 - System.out.println("After Sorting:"); - print(countingSort.sort(unsortedInts)); - System.out.println("After Sorting By Streams:"); - print(streamSort(unsortedInts)); - - System.out.println("\n------------------------------\n"); - - // String Input - List unsortedStrings = Stream.of("c", "a", "e", "b", "d", "a", "f", "g", "c").collect(toList()); - - System.out.println("Before Sorting:"); - print(unsortedStrings); - - //Output => a a b c c d e f g - System.out.println("After Sorting:"); - print(countingSort.sort(unsortedStrings)); - - System.out.println("After Sorting By Streams:"); - print(streamSort(unsortedStrings)); - - } + return sortedArray; + } + + /** + * Stream Counting Sort The same as method {@link CountingSort#sort(List)} } but this method uses + * stream API + * + * @param list The list to be sorted + */ + private static > List streamSort(List list) { + return list.stream() + .collect(toMap(k -> k, v -> 1, (v1, v2) -> v1 + v2, TreeMap::new)) + .entrySet() + .stream() + .flatMap(entry -> IntStream.rangeClosed(1, entry.getValue()).mapToObj(t -> entry.getKey())) + .collect(toList()); + } + + // Driver Program + public static void main(String[] args) { + // Integer Input + List unsortedInts = + Stream.of(4, 23, 6, 78, 1, 54, 23, 1, 9, 231, 9, 12).collect(toList()); + CountingSort countingSort = new CountingSort(); + + System.out.println("Before Sorting:"); + print(unsortedInts); + + // Output => 1 1 4 6 9 9 12 23 23 54 78 231 + System.out.println("After Sorting:"); + print(countingSort.sort(unsortedInts)); + System.out.println("After Sorting By Streams:"); + print(streamSort(unsortedInts)); + + System.out.println("\n------------------------------\n"); + + // String Input + List unsortedStrings = + Stream.of("c", "a", "e", "b", "d", "a", "f", "g", "c").collect(toList()); + + System.out.println("Before Sorting:"); + print(unsortedStrings); + + // Output => a a b c c d e f g + System.out.println("After Sorting:"); + print(countingSort.sort(unsortedStrings)); + + System.out.println("After Sorting By Streams:"); + print(streamSort(unsortedStrings)); + } } diff --git a/Sorts/CycleSort.java b/Sorts/CycleSort.java index 837c3c320454..20543665ea14 100644 --- a/Sorts/CycleSort.java +++ b/Sorts/CycleSort.java @@ -3,77 +3,69 @@ import static Sorts.SortUtils.less; import static Sorts.SortUtils.print; -/** - * @author Podshivalov Nikita (https://github.com/nikitap492) - */ +/** @author Podshivalov Nikita (https://github.com/nikitap492) */ class CycleSort implements SortAlgorithm { - @Override - public > T[] sort(T[] arr) { - int n = arr.length; + @Override + public > T[] sort(T[] arr) { + int n = arr.length; - // traverse array elements - for (int j = 0; j <= n - 2; j++) { - // initialize item as starting point - T item = arr[j]; + // traverse array elements + for (int j = 0; j <= n - 2; j++) { + // initialize item as starting point + T item = arr[j]; - // Find position where we put the item. - int pos = j; - for (int i = j + 1; i < n; i++) - if (less(arr[i], item)) pos++; + // Find position where we put the item. + int pos = j; + for (int i = j + 1; i < n; i++) if (less(arr[i], item)) pos++; - // If item is already in correct position - if (pos == j) continue; + // If item is already in correct position + if (pos == j) continue; - // ignore all duplicate elements - while (item.compareTo(arr[pos]) == 0) - pos += 1; + // ignore all duplicate elements + while (item.compareTo(arr[pos]) == 0) pos += 1; - // put the item to it's right position - if (pos != j) { - item = replace(arr, pos, item); - } + // put the item to it's right position + if (pos != j) { + item = replace(arr, pos, item); + } - // Rotate rest of the cycle - while (pos != j) { - pos = j; + // Rotate rest of the cycle + while (pos != j) { + pos = j; - // Find position where we put the element - for (int i = j + 1; i < n; i++) - if (less(arr[i], item)) { - pos += 1; - } + // Find position where we put the element + for (int i = j + 1; i < n; i++) + if (less(arr[i], item)) { + pos += 1; + } + // ignore all duplicate elements + while (item.compareTo(arr[pos]) == 0) pos += 1; - // ignore all duplicate elements - while (item.compareTo(arr[pos]) == 0) - pos += 1; - - // put the item to it's right position - if (item != arr[pos]) { - item = replace(arr, pos, item); - } - } + // put the item to it's right position + if (item != arr[pos]) { + item = replace(arr, pos, item); } - - return arr; + } } - private > T replace(T[] arr, int pos, T item) { - T temp = item; - item = arr[pos]; - arr[pos] = temp; - return item; - } + return arr; + } + private > T replace(T[] arr, int pos, T item) { + T temp = item; + item = arr[pos]; + arr[pos] = temp; + return item; + } - public static void main(String[] args) { - Integer arr[] = {4, 23, 6, 78, 1, 26, 11, 23, 0, -6, 3, 54, 231, 9, 12}; - CycleSort cycleSort = new CycleSort(); - cycleSort.sort(arr); - - System.out.println("After sort : "); - print(arr); - } + public static void main(String[] args) { + Integer arr[] = {4, 23, 6, 78, 1, 26, 11, 23, 0, -6, 3, 54, 231, 9, 12}; + CycleSort cycleSort = new CycleSort(); + cycleSort.sort(arr); + System.out.println("After sort : "); + print(arr); + } } diff --git a/Sorts/GnomeSort.java b/Sorts/GnomeSort.java index 8d5f62d438d2..3bf7213b38eb 100644 --- a/Sorts/GnomeSort.java +++ b/Sorts/GnomeSort.java @@ -7,39 +7,36 @@ * * @author Podshivalov Nikita (https://github.com/nikitap492) * @since 2018-04-10 - **/ + */ public class GnomeSort implements SortAlgorithm { - @Override - public > T[] sort(T[] arr) { - int i = 1; - int j = 2; - while (i < arr.length) { - if (less(arr[i - 1], arr[i])) i = j++; - else { - swap(arr, i - 1, i); - if (--i == 0) { - i = j++; - } - } + @Override + public > T[] sort(T[] arr) { + int i = 1; + int j = 2; + while (i < arr.length) { + if (less(arr[i - 1], arr[i])) i = j++; + else { + swap(arr, i - 1, i); + if (--i == 0) { + i = j++; } - - return null; + } } - public static void main(String[] args) { - Integer[] integers = {4, 23, 6, 78, 1, 26, 11, 23, 0, -6, 3, 54, 231, 9, 12}; - String[] strings = {"c", "a", "e", "b", "d", "dd", "da", "zz", "AA", "aa", "aB", "Hb", "Z"}; - GnomeSort gnomeSort = new GnomeSort(); - - gnomeSort.sort(integers); - gnomeSort.sort(strings); + return null; + } - System.out.println("After sort : "); - print(integers); - print(strings); + public static void main(String[] args) { + Integer[] integers = {4, 23, 6, 78, 1, 26, 11, 23, 0, -6, 3, 54, 231, 9, 12}; + String[] strings = {"c", "a", "e", "b", "d", "dd", "da", "zz", "AA", "aa", "aB", "Hb", "Z"}; + GnomeSort gnomeSort = new GnomeSort(); + gnomeSort.sort(integers); + gnomeSort.sort(strings); - } - + System.out.println("After sort : "); + print(integers); + print(strings); + } } diff --git a/Sorts/HeapSort.java b/Sorts/HeapSort.java index 77e63c7085b8..29f14bab658e 100644 --- a/Sorts/HeapSort.java +++ b/Sorts/HeapSort.java @@ -1,129 +1,121 @@ package Sorts; +import static Sorts.SortUtils.*; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import static Sorts.SortUtils.*; - /** - * Heap Sort Algorithm - * Implements MinHeap + * Heap Sort Algorithm Implements MinHeap * * @author Podshivalov Nikita (https://github.com/nikitap492) */ public class HeapSort implements SortAlgorithm { + private static class Heap> { + /** Array to store heap */ + private T[] heap; - private static class Heap> { - /** - * Array to store heap - */ - private T[] heap; - - /** - * Constructor - * - * @param heap array of unordered integers - */ - public Heap(T[] heap) { - this.heap = heap; - } + /** + * Constructor + * + * @param heap array of unordered integers + */ + public Heap(T[] heap) { + this.heap = heap; + } - /** - * Heapifies subtree from top as root to last as last child - * - * @param rootIndex index of root - * @param lastChild index of last child - */ - private void heapSubtree(int rootIndex, int lastChild) { - int leftIndex = rootIndex * 2 + 1; - int rightIndex = rootIndex * 2 + 2; - T root = heap[rootIndex]; - if (rightIndex <= lastChild) { // if has right and left children - T left = heap[leftIndex]; - T right = heap[rightIndex]; - if (less(left, right) && less(left, root)) { - swap(heap, leftIndex, rootIndex); - heapSubtree(leftIndex, lastChild); - } else if (less(right, root)) { - swap(heap, rightIndex, rootIndex); - heapSubtree(rightIndex, lastChild); - } - } else if (leftIndex <= lastChild) { // if no right child, but has left child - T left = heap[leftIndex]; - if (less(left, root)) { - swap(heap, leftIndex, rootIndex); - heapSubtree(leftIndex, lastChild); - } - } + /** + * Heapifies subtree from top as root to last as last child + * + * @param rootIndex index of root + * @param lastChild index of last child + */ + private void heapSubtree(int rootIndex, int lastChild) { + int leftIndex = rootIndex * 2 + 1; + int rightIndex = rootIndex * 2 + 2; + T root = heap[rootIndex]; + if (rightIndex <= lastChild) { // if has right and left children + T left = heap[leftIndex]; + T right = heap[rightIndex]; + if (less(left, right) && less(left, root)) { + swap(heap, leftIndex, rootIndex); + heapSubtree(leftIndex, lastChild); + } else if (less(right, root)) { + swap(heap, rightIndex, rootIndex); + heapSubtree(rightIndex, lastChild); } - - - /** - * Makes heap with root as root - * - * @param root index of root of heap - */ - private void makeMinHeap(int root) { - int leftIndex = root * 2 + 1; - int rightIndex = root * 2 + 2; - boolean hasLeftChild = leftIndex < heap.length; - boolean hasRightChild = rightIndex < heap.length; - if (hasRightChild) { //if has left and right - makeMinHeap(leftIndex); - makeMinHeap(rightIndex); - heapSubtree(root, heap.length - 1); - } else if (hasLeftChild) { - heapSubtree(root, heap.length - 1); - } + } else if (leftIndex <= lastChild) { // if no right child, but has left child + T left = heap[leftIndex]; + if (less(left, root)) { + swap(heap, leftIndex, rootIndex); + heapSubtree(leftIndex, lastChild); } - - /** - * Gets the root of heap - * - * @return root of heap - */ - private T getRoot(int size) { - swap(heap, 0, size); - heapSubtree(0, size - 1); - return heap[size]; // return old root - } - - + } } - @Override - public > T[] sort(T[] unsorted) { - return sort(Arrays.asList(unsorted)).toArray(unsorted); + /** + * Makes heap with root as root + * + * @param root index of root of heap + */ + private void makeMinHeap(int root) { + int leftIndex = root * 2 + 1; + int rightIndex = root * 2 + 2; + boolean hasLeftChild = leftIndex < heap.length; + boolean hasRightChild = rightIndex < heap.length; + if (hasRightChild) { // if has left and right + makeMinHeap(leftIndex); + makeMinHeap(rightIndex); + heapSubtree(root, heap.length - 1); + } else if (hasLeftChild) { + heapSubtree(root, heap.length - 1); + } } - @Override - public > List sort(List unsorted) { - int size = unsorted.size(); + /** + * Gets the root of heap + * + * @return root of heap + */ + private T getRoot(int size) { + swap(heap, 0, size); + heapSubtree(0, size - 1); + return heap[size]; // return old root + } + } - @SuppressWarnings("unchecked") - Heap heap = new Heap<>(unsorted.toArray((T[]) new Comparable[unsorted.size()])); + @Override + public > T[] sort(T[] unsorted) { + return sort(Arrays.asList(unsorted)).toArray(unsorted); + } - heap.makeMinHeap(0); // make min heap using index 0 as root. - List sorted = new ArrayList<>(size); - while (size > 0) { - T min = heap.getRoot(--size); - sorted.add(min); - } + @Override + public > List sort(List unsorted) { + int size = unsorted.size(); - return sorted; - } + @SuppressWarnings("unchecked") + Heap heap = new Heap<>(unsorted.toArray((T[]) new Comparable[unsorted.size()])); - /** - * Main method - * - * @param args the command line arguments - */ - public static void main(String[] args) { - Integer[] heap = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - HeapSort heapSort = new HeapSort(); - print(heapSort.sort(heap)); + heap.makeMinHeap(0); // make min heap using index 0 as root. + List sorted = new ArrayList<>(size); + while (size > 0) { + T min = heap.getRoot(--size); + sorted.add(min); } + return sorted; + } + + /** + * Main method + * + * @param args the command line arguments + */ + public static void main(String[] args) { + Integer[] heap = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + HeapSort heapSort = new HeapSort(); + print(heapSort.sort(heap)); + } } diff --git a/Sorts/InsertionSort.java b/Sorts/InsertionSort.java index 9a7169f77dfa..d2dd1c93e409 100644 --- a/Sorts/InsertionSort.java +++ b/Sorts/InsertionSort.java @@ -7,52 +7,49 @@ * @author Varun Upadhyay (https://github.com/varunu28) * @author Podshivalov Nikita (https://github.com/nikitap492) */ - class InsertionSort implements SortAlgorithm { - /** - * This method implements the Generic Insertion Sort - * Sorts the array in increasing order - * - * @param array The array to be sorted - **/ - - @Override - public > T[] sort(T[] array) { - for (int j = 1; j < array.length; j++) { - - // Picking up the key(Card) - T key = array[j]; - int i = j - 1; - - while (i >= 0 && less(key, array[i])) { - array[i + 1] = array[i]; - i--; - } - // Placing the key (Card) at its correct position in the sorted subarray - array[i + 1] = key; - } - return array; + /** + * This method implements the Generic Insertion Sort Sorts the array in increasing order + * + * @param array The array to be sorted + */ + @Override + public > T[] sort(T[] array) { + for (int j = 1; j < array.length; j++) { + + // Picking up the key(Card) + T key = array[j]; + int i = j - 1; + + while (i >= 0 && less(key, array[i])) { + array[i + 1] = array[i]; + i--; + } + // Placing the key (Card) at its correct position in the sorted subarray + array[i + 1] = key; } + return array; + } - // Driver Program - public static void main(String[] args) { - // Integer Input - Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + // Driver Program + public static void main(String[] args) { + // Integer Input + Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - InsertionSort sort = new InsertionSort(); + InsertionSort sort = new InsertionSort(); - sort.sort(integers); + sort.sort(integers); - // Output => 1 4 6 9 12 23 54 78 231 - print(integers); + // Output => 1 4 6 9 12 23 54 78 231 + print(integers); - // String Input - String[] strings = {"c", "a", "e", "b", "d"}; + // String Input + String[] strings = {"c", "a", "e", "b", "d"}; - sort.sort(strings); + sort.sort(strings); - //Output => a b c d e - print(strings); - } + // Output => a b c d e + print(strings); + } } diff --git a/Sorts/MergeSort.java b/Sorts/MergeSort.java index f15e7af4578f..dfd350afb283 100644 --- a/Sorts/MergeSort.java +++ b/Sorts/MergeSort.java @@ -9,90 +9,84 @@ * @author Podshivalov Nikita (https://github.com/nikitap492) * @see SortAlgorithm */ - class MergeSort implements SortAlgorithm { - /** - * This method implements the Generic Merge Sort - * - * @param unsorted the array which should be sorted - * @param Comparable class - * @return sorted array - */ - @Override - - public > T[] sort(T[] unsorted) { - doSort(unsorted, 0, unsorted.length - 1); - return unsorted; + /** + * This method implements the Generic Merge Sort + * + * @param unsorted the array which should be sorted + * @param Comparable class + * @return sorted array + */ + @Override + public > T[] sort(T[] unsorted) { + doSort(unsorted, 0, unsorted.length - 1); + return unsorted; + } + + /** + * @param arr The array to be sorted + * @param left The first index of the array + * @param right The last index of the array Recursively sorts the array in increasing order + */ + private static > void doSort(T[] arr, int left, int right) { + if (left < right) { + int mid = left + (right - left) / 2; + doSort(arr, left, mid); + doSort(arr, mid + 1, right); + merge(arr, left, mid, right); } - - /** - * @param arr The array to be sorted - * @param left The first index of the array - * @param right The last index of the array - * Recursively sorts the array in increasing order - **/ - private static > void doSort(T[] arr, int left, int right) { - if (left < right) { - int mid = left + (right - left) / 2; - doSort(arr, left, mid); - doSort(arr, mid + 1, right); - merge(arr, left, mid, right); - } - + } + + /** + * This method implements the merge step of the merge sort + * + * @param arr The array to be sorted + * @param left The first index of the array + * @param mid The middle index of the array + * @param right The last index of the array merges two parts of an array in increasing order + */ + private static > void merge(T[] arr, int left, int mid, int right) { + int length = right - left + 1; + T[] temp = (T[]) new Comparable[length]; + int i = left; + int j = mid + 1; + int k = 0; + + while (i <= mid && j <= right) { + if (arr[i].compareTo(arr[j]) <= 0) { + temp[k++] = arr[i++]; + } else { + temp[k++] = arr[j++]; + } } - /** - * This method implements the merge step of the merge sort - * - * @param arr The array to be sorted - * @param left The first index of the array - * @param mid The middle index of the array - * @param right The last index of the array - * merges two parts of an array in increasing order - **/ - - private static > void merge(T[] arr, int left, int mid, int right) { - int length = right - left + 1; - T[] temp = (T[]) new Comparable[length]; - int i = left; - int j = mid + 1; - int k = 0; - - while (i <= mid && j <= right) { - if (arr[i].compareTo(arr[j]) <= 0) { - temp[k++] = arr[i++]; - } else { - temp[k++] = arr[j++]; - } - } - - while (i <= mid) { - temp[k++] = arr[i++]; - } - - while (j <= right) { - temp[k++] = arr[j++]; - } + while (i <= mid) { + temp[k++] = arr[i++]; + } - System.arraycopy(temp, 0, arr, left, length); + while (j <= right) { + temp[k++] = arr[j++]; } - // Driver program - public static void main(String[] args) { + System.arraycopy(temp, 0, arr, left, length); + } - // Integer Input - Integer[] arr = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - MergeSort mergeSort = new MergeSort(); - mergeSort.sort(arr); + // Driver program + public static void main(String[] args) { - // Output => 1 4 6 9 12 23 54 78 231 - print(arr); + // Integer Input + Integer[] arr = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + MergeSort mergeSort = new MergeSort(); + mergeSort.sort(arr); - // String Inpu - String[] stringArray = {"c", "a", "e", "b", "d"}; - mergeSort.sort(stringArray); - //Output => a b c d e - print(stringArray); - } + // Output => 1 4 6 9 12 23 54 78 231 + print(arr); + + // String Inpu + String[] stringArray = {"c", "a", "e", "b", "d"}; + mergeSort.sort(stringArray); + // Output => a b c d e + print(stringArray); + } } diff --git a/Sorts/PancakeSort.java b/Sorts/PancakeSort.java index 330e9d0f6a60..f679b37226ad 100644 --- a/Sorts/PancakeSort.java +++ b/Sorts/PancakeSort.java @@ -7,36 +7,35 @@ * * @author Podshivalov Nikita (https://github.com/nikitap492) * @since 2018-04-10 - **/ + */ public class PancakeSort implements SortAlgorithm { - @Override - public > T[] sort(T[] array) { - int size = array.length; - - for (int i = 0; i < size; i++) { - T max = array[0]; - int index = 0; - for (int j = 0; j < size - i; j++) { - if (less(max, array[j])) { - max = array[j]; - index = j; - } - } - flip(array, index, array.length - 1 - i); + @Override + public > T[] sort(T[] array) { + int size = array.length; + + for (int i = 0; i < size; i++) { + T max = array[0]; + int index = 0; + for (int j = 0; j < size - i; j++) { + if (less(max, array[j])) { + max = array[j]; + index = j; } - return array; + } + flip(array, index, array.length - 1 - i); } - - - public static void main(String[] args) { - - Integer[] arr = {10, 9, 8, 7, 6, 15, 14, 7, 4, 3, 8, 6, 3, 1, 2, -2, -5, -8, -3, -1, 13, 12, 11, 5, 4, 3, 2, 1}; - PancakeSort pancakeSort = new PancakeSort(); - System.out.println("After sorting:"); - pancakeSort.sort(arr); - print(arr); - } - - + return array; + } + + public static void main(String[] args) { + + Integer[] arr = { + 10, 9, 8, 7, 6, 15, 14, 7, 4, 3, 8, 6, 3, 1, 2, -2, -5, -8, -3, -1, 13, 12, 11, 5, 4, 3, 2, 1 + }; + PancakeSort pancakeSort = new PancakeSort(); + System.out.println("After sorting:"); + pancakeSort.sort(arr); + print(arr); + } } diff --git a/Sorts/QuickSort.java b/Sorts/QuickSort.java index ef564ac722cb..b88b1dec5ce4 100644 --- a/Sorts/QuickSort.java +++ b/Sorts/QuickSort.java @@ -9,97 +9,89 @@ */ class QuickSort implements SortAlgorithm { - /** - * This method implements the Generic Quick Sort - * - * @param array The array to be sorted - * Sorts the array in increasing order - **/ - - @Override - public > T[] sort(T[] array) { - doSort(array, 0, array.length - 1); - return array; + /** + * This method implements the Generic Quick Sort + * + * @param array The array to be sorted Sorts the array in increasing order + */ + @Override + public > T[] sort(T[] array) { + doSort(array, 0, array.length - 1); + return array; + } + + /** + * The sorting process + * + * @param left The first index of an array + * @param right The last index of an array + * @param array The array to be sorted + */ + private static > void doSort(T[] array, int left, int right) { + if (left < right) { + int pivot = randomPartition(array, left, right); + doSort(array, left, pivot - 1); + doSort(array, pivot, right); } - - - /** - * The sorting process - * - * @param left The first index of an array - * @param right The last index of an array - * @param array The array to be sorted - **/ - - private static > void doSort(T[] array, int left, int right) { - if (left < right) { - int pivot = randomPartition(array, left, right); - doSort(array, left, pivot - 1); - doSort(array, pivot, right); - } + } + + /** + * Ramdomize the array to avoid the basically ordered sequences + * + * @param array The array to be sorted + * @param left The first index of an array + * @param right The last index of an array + * @return the partition index of the array + */ + private static > int randomPartition(T[] array, int left, int right) { + int randomIndex = left + (int) (Math.random() * (right - left + 1)); + swap(array, randomIndex, right); + return partition(array, left, right); + } + + /** + * This method finds the partition index for an array + * + * @param array The array to be sorted + * @param left The first index of an array + * @param right The last index of an array Finds the partition index of an array + */ + private static > int partition(T[] array, int left, int right) { + int mid = (left + right) >>> 1; + T pivot = array[mid]; + + while (left <= right) { + while (less(array[left], pivot)) { + ++left; + } + while (less(pivot, array[right])) { + --right; + } + if (left <= right) { + swap(array, left, right); + ++left; + --right; + } } + return left; + } - /** - * Ramdomize the array to avoid the basically ordered sequences - * - * @param array The array to be sorted - * @param left The first index of an array - * @param right The last index of an array - * @return the partition index of the array - */ + // Driver Program + public static void main(String[] args) { - private static > int randomPartition(T[] array, int left, int right) { - int randomIndex = left + (int)(Math.random()*(right - left + 1)); - swap(array, randomIndex, right); - return partition(array, left, right); - } - - /** - * This method finds the partition index for an array - * - * @param array The array to be sorted - * @param left The first index of an array - * @param right The last index of an array - * Finds the partition index of an array - **/ + // For integer input + Integer[] array = {3, 4, 1, 32, 0, 1, 5, 12, 2, 5, 7, 8, 9, 2, 44, 111, 5}; - private static > int partition(T[] array, int left, int right) { - int mid = (left + right) >>> 1; - T pivot = array[mid]; + QuickSort quickSort = new QuickSort(); + quickSort.sort(array); - while (left <= right) { - while (less(array[left], pivot)) { - ++left; - } - while (less(pivot, array[right])) { - --right; - } - if (left <= right) { - swap(array, left, right); - ++left; - --right; - } - } - return left; - } + // Output => 0 1 1 2 2 3 4 5 5 5 7 8 9 12 32 44 111 + print(array); - // Driver Program - public static void main(String[] args) { + String[] stringArray = {"c", "a", "e", "b", "d"}; + quickSort.sort(stringArray); - // For integer input - Integer[] array = {3, 4, 1, 32, 0, 1, 5, 12, 2, 5, 7, 8, 9, 2, 44, 111, 5}; - - QuickSort quickSort = new QuickSort(); - quickSort.sort(array); - - //Output => 0 1 1 2 2 3 4 5 5 5 7 8 9 12 32 44 111 - print(array); - - String[] stringArray = {"c", "a", "e", "b", "d"}; - quickSort.sort(stringArray); - - //Output => a b c d e - print(stringArray); - } + // Output => a b c d e + print(stringArray); + } } - diff --git a/Sorts/RadixSort.java b/Sorts/RadixSort.java index ca9ed767eaa0..83515fc03bb2 100644 --- a/Sorts/RadixSort.java +++ b/Sorts/RadixSort.java @@ -4,56 +4,46 @@ class RadixSort { - private static int getMax(int[] arr, int n) { - int mx = arr[0]; - for (int i = 1; i < n; i++) - if (arr[i] > mx) - mx = arr[i]; - return mx; - } - - private static void countSort(int[] arr, int n, int exp) { - int[] output = new int[n]; - int i; - int[] count = new int[10]; - Arrays.fill(count, 0); + private static int getMax(int[] arr, int n) { + int mx = arr[0]; + for (int i = 1; i < n; i++) if (arr[i] > mx) mx = arr[i]; + return mx; + } - for (i = 0; i < n; i++) - count[(arr[i] / exp) % 10]++; + private static void countSort(int[] arr, int n, int exp) { + int[] output = new int[n]; + int i; + int[] count = new int[10]; + Arrays.fill(count, 0); - for (i = 1; i < 10; i++) - count[i] += count[i - 1]; + for (i = 0; i < n; i++) count[(arr[i] / exp) % 10]++; - for (i = n - 1; i >= 0; i--) { - output[count[(arr[i] / exp) % 10] - 1] = arr[i]; - count[(arr[i] / exp) % 10]--; - } + for (i = 1; i < 10; i++) count[i] += count[i - 1]; - for (i = 0; i < n; i++) - arr[i] = output[i]; + for (i = n - 1; i >= 0; i--) { + output[count[(arr[i] / exp) % 10] - 1] = arr[i]; + count[(arr[i] / exp) % 10]--; } - private static void radixsort(int[] arr, int n) { + for (i = 0; i < n; i++) arr[i] = output[i]; + } - int m = getMax(arr, n); + private static void radixsort(int[] arr, int n) { + int m = getMax(arr, n); - for (int exp = 1; m / exp > 0; exp *= 10) - countSort(arr, n, exp); - } + for (int exp = 1; m / exp > 0; exp *= 10) countSort(arr, n, exp); + } + static void print(int[] arr, int n) { + for (int i = 0; i < n; i++) System.out.print(arr[i] + " "); + } - static void print(int[] arr, int n) { - for (int i = 0; i < n; i++) - System.out.print(arr[i] + " "); - } - - - public static void main(String[] args) { - int[] arr = {170, 45, 75, 90, 802, 24, 2, 66}; - int n = arr.length; - radixsort(arr, n); - print(arr, n); - } + public static void main(String[] args) { + int[] arr = {170, 45, 75, 90, 802, 24, 2, 66}; + int n = arr.length; + radixsort(arr, n); + print(arr, n); + } } // Written by James Mc Dermott(theycallmemac) diff --git a/Sorts/SelectionSort.java b/Sorts/SelectionSort.java index 31b16c5bb171..5b850dd33723 100644 --- a/Sorts/SelectionSort.java +++ b/Sorts/SelectionSort.java @@ -5,67 +5,64 @@ * @author Podshivalov Nikita (https://github.com/nikitap492) * @see SortAlgorithm */ - public class SelectionSort implements SortAlgorithm { - /** - * This method swaps the two elements in the array - * @param - * @param arr, i, j The array for the swap and - the indexes of the to-swap elements - */ - - public void swap(T[] arr, int i, int j) { - T temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - } - - /** - * This method implements the Generic Selection Sort - * - * @param arr The array to be sorted - * Sorts the array in increasing order - **/ - @Override - public > T[] sort(T[] arr) { - int n = arr.length; - for (int i = 0; i < n - 1; i++) { - // Initial index of min - int min = i; + /** + * This method swaps the two elements in the array + * + * @param + * @param arr, i, j The array for the swap and the indexes of the to-swap elements + */ + public void swap(T[] arr, int i, int j) { + T temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } - for (int j = i + 1; j < n; j++) { - if (arr[min].compareTo(arr[j]) < 0) { - min = j; - } - } + /** + * This method implements the Generic Selection Sort + * + * @param arr The array to be sorted Sorts the array in increasing order + */ + @Override + public > T[] sort(T[] arr) { + int n = arr.length; + for (int i = 0; i < n - 1; i++) { + // Initial index of min + int min = i; - // Swapping if index of min is changed - if (min != i) { - swap(arr, i, min); - } + for (int j = i + 1; j < n; j++) { + if (arr[min].compareTo(arr[j]) < 0) { + min = j; } + } - return arr; + // Swapping if index of min is changed + if (min != i) { + swap(arr, i, min); + } } - // Driver Program - public static void main(String[] args) { + return arr; + } - Integer[] arr = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + // Driver Program + public static void main(String[] args) { - SelectionSort selectionSort = new SelectionSort(); + Integer[] arr = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - Integer[] sorted = selectionSort.sort(arr); + SelectionSort selectionSort = new SelectionSort(); - // Output => 1 4 6 9 12 23 54 78 231 - SortUtils.print(sorted); + Integer[] sorted = selectionSort.sort(arr); - // String Input - String[] strings = {"c", "a", "e", "b", "d"}; - String[] sortedStrings = selectionSort.sort(strings); + // Output => 1 4 6 9 12 23 54 78 231 + SortUtils.print(sorted); - //Output => a b c d e - SortUtils.print(sortedStrings); - } + // String Input + String[] strings = {"c", "a", "e", "b", "d"}; + String[] sortedStrings = selectionSort.sort(strings); + + // Output => a b c d e + SortUtils.print(sortedStrings); + } } diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java index b29119a0c3af..79ae6e2df5fa 100644 --- a/Sorts/ShellSort.java +++ b/Sorts/ShellSort.java @@ -4,39 +4,39 @@ public class ShellSort implements SortAlgorithm { - /** - * This method implements Generic Shell Sort. - * - * @param array the array to be sorted - */ - @Override - public > T[] sort(T[] array) { - int length = array.length; - int gap = 1; + /** + * This method implements Generic Shell Sort. + * + * @param array the array to be sorted + */ + @Override + public > T[] sort(T[] array) { + int length = array.length; + int gap = 1; - /* Calculate gap for optimization purpose */ - while (gap < length / 3) { - gap = 3 * gap + 1; - } + /* Calculate gap for optimization purpose */ + while (gap < length / 3) { + gap = 3 * gap + 1; + } - for (; gap > 0; gap /= 3) { - for (int i = gap; i < length; i++) { - int j; - T temp = array[i]; - for (j = i; j >= gap && less(temp, array[j - gap]); j -= gap) { - array[j] = array[j - gap]; - } - array[j] = temp; - } + for (; gap > 0; gap /= 3) { + for (int i = gap; i < length; i++) { + int j; + T temp = array[i]; + for (j = i; j >= gap && less(temp, array[j - gap]); j -= gap) { + array[j] = array[j - gap]; } - return array; + array[j] = temp; + } } + return array; + } - /* Driver Code */ - public static void main(String[] args) { - Integer[] toSort = {4, 23, 6, 78, 1, 54, 231, 9, 12}; + /* Driver Code */ + public static void main(String[] args) { + Integer[] toSort = {4, 23, 6, 78, 1, 54, 231, 9, 12}; - ShellSort sort = new ShellSort(); - print(sort.sort(toSort)); - } + ShellSort sort = new ShellSort(); + print(sort.sort(toSort)); + } } diff --git a/Sorts/SortAlgorithm.java b/Sorts/SortAlgorithm.java index d4d0309da27d..d686cea95911 100644 --- a/Sorts/SortAlgorithm.java +++ b/Sorts/SortAlgorithm.java @@ -7,26 +7,25 @@ * The common interface of most sorting algorithms * * @author Podshivalov Nikita (https://github.com/nikitap492) - **/ + */ public interface SortAlgorithm { - /** - * Main method arrays sorting algorithms - * - * @param unsorted - an array should be sorted - * @return a sorted array - */ - > T[] sort(T[] unsorted); - - /** - * Auxiliary method for algorithms what wanted to work with lists from JCF - * - * @param unsorted - a list should be sorted - * @return a sorted list - */ - @SuppressWarnings("unchecked") - default > List sort(List unsorted) { - return Arrays.asList(sort(unsorted.toArray((T[]) new Comparable[unsorted.size()]))); - } + /** + * Main method arrays sorting algorithms + * + * @param unsorted - an array should be sorted + * @return a sorted array + */ + > T[] sort(T[] unsorted); + /** + * Auxiliary method for algorithms what wanted to work with lists from JCF + * + * @param unsorted - a list should be sorted + * @return a sorted list + */ + @SuppressWarnings("unchecked") + default > List sort(List unsorted) { + return Arrays.asList(sort(unsorted.toArray((T[]) new Comparable[unsorted.size()]))); + } } diff --git a/Sorts/SortUtils.java b/Sorts/SortUtils.java index 334e3c1c1ad5..da8be334ebd2 100644 --- a/Sorts/SortUtils.java +++ b/Sorts/SortUtils.java @@ -7,83 +7,75 @@ * The class contains util methods * * @author Podshivalov Nikita (https://github.com/nikitap492) - **/ + */ final class SortUtils { - /** - * Helper method for swapping places in array - * - * @param array The array which elements we want to swap - * @param idx index of the first element - * @param idy index of the second element - */ - static boolean swap(T[] array, int idx, int idy) { - T swap = array[idx]; - array[idx] = array[idy]; - array[idy] = swap; - return true; - } - - - /** - * This method checks if first element is less than the other element - * - * @param v first element - * @param w second element - * @return true if the first element is less than the second element - */ - static > boolean less(T v, T w) { - return v.compareTo(w) < 0; - } - - - /** - * This method checks if first element is greater than the other element - * - * @param v first element - * @param w second element - * @return true if the first element is greater than the second element - */ - static > boolean greater(T v, T w) { - return v.compareTo(w) > 0; - } + /** + * Helper method for swapping places in array + * + * @param array The array which elements we want to swap + * @param idx index of the first element + * @param idy index of the second element + */ + static boolean swap(T[] array, int idx, int idy) { + T swap = array[idx]; + array[idx] = array[idy]; + array[idy] = swap; + return true; + } + /** + * This method checks if first element is less than the other element + * + * @param v first element + * @param w second element + * @return true if the first element is less than the second element + */ + static > boolean less(T v, T w) { + return v.compareTo(w) < 0; + } - /** - * Prints a list - * - * @param toPrint - a list which should be printed - */ - static void print(List toPrint) { - toPrint.stream() - .map(Object::toString) - .map(str -> str + " ") - .forEach(System.out::print); + /** + * This method checks if first element is greater than the other element + * + * @param v first element + * @param w second element + * @return true if the first element is greater than the second element + */ + static > boolean greater(T v, T w) { + return v.compareTo(w) > 0; + } - System.out.println(); - } + /** + * Prints a list + * + * @param toPrint - a list which should be printed + */ + static void print(List toPrint) { + toPrint.stream().map(Object::toString).map(str -> str + " ").forEach(System.out::print); + System.out.println(); + } - /** - * Prints an array - * - * @param toPrint - an array which should be printed - */ - static void print(Object[] toPrint) { - System.out.println(Arrays.toString(toPrint)); - } - + /** + * Prints an array + * + * @param toPrint - an array which should be printed + */ + static void print(Object[] toPrint) { + System.out.println(Arrays.toString(toPrint)); + } - /** - * Swaps all position from {@param left} to @{@param right} for {@param array} - * - * @param array is an array - * @param left is a left flip border of the array - * @param right is a right flip border of the array - */ - static > void flip(T[] array, int left, int right) { - while (left <= right) { - swap(array, left++, right--); - } + /** + * Swaps all position from {@param left} to @{@param right} for {@param array} + * + * @param array is an array + * @param left is a left flip border of the array + * @param right is a right flip border of the array + */ + static > void flip(T[] array, int left, int right) { + while (left <= right) { + swap(array, left++, right--); } + } } diff --git a/ciphers/AES.java b/ciphers/AES.java index 1bef34f0d4f3..433ae15bf9ff 100644 --- a/ciphers/AES.java +++ b/ciphers/AES.java @@ -4,598 +4,623 @@ import java.util.Scanner; /** - * This class is build to demonstrate the application of the AES-algorithm on a - * single 128-Bit block of data. - * + * This class is build to demonstrate the application of the AES-algorithm on a single 128-Bit block + * of data. */ public class AES { - /** - * Precalculated values for x to the power of 2 in Rijndaels galois field. Used - * as 'RCON' during the key expansion. - */ - private static final int[] RCON = { 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, - 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, - 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, - 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, - 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, - 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, - 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, - 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, - 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, - 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, - 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, - 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, - 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, - 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d }; - - /** - * Rijndael S-box Substitution table used for encryption in the subBytes step, - * as well as the key expansion. - */ - private static final int[] SBOX = { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, - 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, - 0xC0, 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 0x04, - 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, - 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, 0x20, - 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, - 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, - 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, - 0x3D, 0x64, 0x5D, 0x19, 0x73, 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, - 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, - 0x79, 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, 0xBA, - 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, - 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, 0x69, - 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, - 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 }; - - /** - * Inverse Rijndael S-box Substitution table used for decryption in the - * subBytesDec step. - */ - private static final int[] INVERSE_SBOX = { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, - 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, - 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, - 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, - 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, - 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, - 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, - 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, - 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, - 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, - 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, - 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, 0x60, 0x51, - 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, - 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, - 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D }; - - /** - * Precalculated lookup table for galois field multiplication by 2 used in the - * MixColums step during encryption. - */ - private static final int[] MULT2 = { 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, - 0x1a, 0x1c, 0x1e, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, - 0x3e, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, - 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80, 0x82, 0x84, - 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, - 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, - 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, - 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, 0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, - 0x0d, 0x03, 0x01, 0x07, 0x05, 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, - 0x21, 0x27, 0x25, 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, - 0x45, 0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, 0x9b, - 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, 0xbb, 0xb9, 0xbf, - 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, 0xdb, 0xd9, 0xdf, 0xdd, 0xd3, - 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, - 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5 }; - - /** - * Precalculated lookup table for galois field multiplication by 3 used in the - * MixColums step during encryption. - */ - private static final int[] MULT3 = { 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, - 0x17, 0x12, 0x11, 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, - 0x21, 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, 0x50, - 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, 0xc0, 0xc3, 0xc6, - 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, - 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, - 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, - 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, 0x9b, 0x98, 0x9d, 0x9e, 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, - 0x86, 0x8f, 0x8c, 0x89, 0x8a, 0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6, 0xbf, - 0xbc, 0xb9, 0xba, 0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2, 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, - 0xea, 0xcb, 0xc8, 0xcd, 0xce, 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda, 0x5b, - 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a, 0x6b, 0x68, 0x6d, - 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, 0x3b, 0x38, 0x3d, 0x3e, 0x37, - 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a, 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, - 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a }; - - /** - * Precalculated lookup table for galois field multiplication by 9 used in the - * MixColums step during decryption. - */ - private static final int[] MULT9 = { 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, - 0x65, 0x7e, 0x77, 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, - 0xe7, 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, 0xab, - 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, 0x76, 0x7f, 0x64, - 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, 0xe6, 0xef, 0xf4, 0xfd, 0xc2, - 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, - 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, - 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, - 0xbf, 0x80, 0x89, 0x92, 0x9b, 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, - 0x19, 0x02, 0x0b, 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, - 0xa0, 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, 0x9a, - 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, 0x0a, 0x03, 0x18, - 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, 0xa1, 0xa8, 0xb3, 0xba, 0x85, - 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, - 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46 }; - - /** - * Precalculated lookup table for galois field multiplication by 11 used in the - * MixColums step during decryption. - */ - private static final int[] MULT11 = { 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, - 0x7f, 0x62, 0x69, 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, - 0xd9, 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, 0xcb, - 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, 0xf6, 0xfd, 0xe0, - 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, 0x46, 0x4d, 0x50, 0x5b, 0x6a, - 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, - 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, - 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, - 0xb2, 0x83, 0x88, 0x95, 0x9e, 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, - 0x38, 0x25, 0x2e, 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, - 0xe5, 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, 0x01, - 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, 0xb1, 0xba, 0xa7, - 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, 0x7a, 0x71, 0x6c, 0x67, 0x56, - 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, - 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3 }; - - /** - * Precalculated lookup table for galois field multiplication by 13 used in the - * MixColums step during decryption. - */ - private static final int[] MULT13 = { 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, - 0x51, 0x46, 0x4b, 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, - 0x9b, 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, 0x6b, - 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, 0x6d, 0x60, 0x77, - 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, 0xbd, 0xb0, 0xa7, 0xaa, 0x89, - 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, - 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, - 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, - 0xa5, 0x86, 0x8b, 0x9c, 0x91, 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, - 0x5b, 0x4c, 0x41, 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, - 0x2a, 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, 0xb7, - 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, 0x67, 0x6a, 0x7d, - 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, 0x0c, 0x01, 0x16, 0x1b, 0x38, - 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, - 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97 }; - - /** - * Precalculated lookup table for galois field multiplication by 14 used in the - * MixColums step during decryption. - */ - private static final int[] MULT14 = { 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, - 0x46, 0x54, 0x5a, 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, - 0xba, 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, 0x3b, - 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, 0xad, 0xa3, 0xb1, - 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, 0x4d, 0x43, 0x51, 0x5f, 0x75, - 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, - 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, - 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, - 0x23, 0x09, 0x07, 0x15, 0x1b, 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, - 0xe7, 0xf5, 0xfb, 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, - 0xc0, 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, 0xec, - 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, 0x0c, 0x02, 0x10, - 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, 0x37, 0x39, 0x2b, 0x25, 0x0f, - 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, - 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d }; - - /** - * Subroutine of the Rijndael key expansion. - * - * @param t - * @param rconCounter - * @return - */ - public static BigInteger scheduleCore(BigInteger t, int rconCounter) { - String rBytes = t.toString(16); - - // Add zero padding - while (rBytes.length() < 8) { - rBytes = "0" + rBytes; - } - - // rotate the first 16 bits to the back - String rotatingBytes = rBytes.substring(0, 2); - String fixedBytes = rBytes.substring(2); - - rBytes = fixedBytes + rotatingBytes; - - // apply S-Box to all 8-Bit Substrings - for (int i = 0; i < 4; i++) { - String currentByteBits = rBytes.substring(i * 2, (i + 1) * 2); - - int currentByte = Integer.parseInt(currentByteBits, 16); - currentByte = SBOX[currentByte]; - - // add the current RCON value to the first byte - if (i == 0) { - currentByte = currentByte ^ RCON[rconCounter]; - } - - currentByteBits = Integer.toHexString(currentByte); - - // Add zero padding - - while (currentByteBits.length() < 2) { - currentByteBits = '0' + currentByteBits; - } - - // replace bytes in original string - rBytes = rBytes.substring(0, i * 2) + currentByteBits + rBytes.substring((i + 1) * 2); - } - - // t = new BigInteger(rBytes, 16); - // return t; - return new BigInteger(rBytes, 16); - } - - /** - * - * Returns an array of 10 + 1 round keys that are calculated by using Rijndael - * key schedule - * - * @param initialKey - * @return array of 10 + 1 round keys - */ - public static BigInteger[] keyExpansion(BigInteger initialKey) { - BigInteger[] roundKeys = { initialKey, new BigInteger("0"), new BigInteger("0"), new BigInteger("0"), - new BigInteger("0"), new BigInteger("0"), new BigInteger("0"), new BigInteger("0"), new BigInteger("0"), - new BigInteger("0"), new BigInteger("0"), }; - - // initialize rcon iteration - int rconCounter = 1; - - for (int i = 1; i < 11; i++) { - - // get the previous 32 bits the key - BigInteger t = roundKeys[i - 1].remainder(new BigInteger("100000000", 16)); - - // split previous key into 8-bit segments - BigInteger[] prevKey = { roundKeys[i - 1].remainder(new BigInteger("100000000", 16)), - roundKeys[i - 1].remainder(new BigInteger("10000000000000000", 16)) - .divide(new BigInteger("100000000", 16)), - roundKeys[i - 1].remainder(new BigInteger("1000000000000000000000000", 16)) - .divide(new BigInteger("10000000000000000", 16)), - roundKeys[i - 1].divide(new BigInteger("1000000000000000000000000", 16)), }; - - // run schedule core - t = scheduleCore(t, rconCounter); - rconCounter += 1; - - // Calculate partial round key - BigInteger t0 = t.xor(prevKey[3]); - BigInteger t1 = t0.xor(prevKey[2]); - BigInteger t2 = t1.xor(prevKey[1]); - BigInteger t3 = t2.xor(prevKey[0]); - - // Join round key segments - t2 = t2.multiply(new BigInteger("100000000", 16)); - t1 = t1.multiply(new BigInteger("10000000000000000", 16)); - t0 = t0.multiply(new BigInteger("1000000000000000000000000", 16)); - roundKeys[i] = t0.add(t1).add(t2).add(t3); - - } - return roundKeys; - } - - /** - * representation of the input 128-bit block as an array of 8-bit integers. - * - * @param block - * of 128-bit integers - * @return array of 8-bit integers - */ - public static int[] splitBlockIntoCells(BigInteger block) { - - int[] cells = new int[16]; - String blockBits = block.toString(2); - - // Append leading 0 for full "128-bit" string - while (blockBits.length() < 128) { - blockBits = '0' + blockBits; - } - - // split 128 to 8 bit cells - for (int i = 0; i < cells.length; i++) { - String cellBits = blockBits.substring(8 * i, 8 * (i + 1)); - cells[i] = Integer.parseInt(cellBits, 2); - } - - return cells; - } - - /** - * Returns the 128-bit BigInteger representation of the input of an array of - * 8-bit integers. - * - * @param cells - * that we need to merge - * @return block of merged cells - */ - public static BigInteger mergeCellsIntoBlock(int[] cells) { - - String blockBits = ""; - for (int i = 0; i < 16; i++) { - String cellBits = Integer.toBinaryString(cells[i]); - - // Append leading 0 for full "8-bit" strings - while (cellBits.length() < 8) { - cellBits = '0' + cellBits; - } - - blockBits += cellBits; - } - - return new BigInteger(blockBits, 2); - } - - /** - * - * @param ciphertext - * @param key - * @return ciphertext XOR key - */ - public static BigInteger addRoundKey(BigInteger ciphertext, BigInteger key) { - return ciphertext.xor(key); - } - - /** - * substitutes 8-Bit long substrings of the input using the S-Box and returns - * the result. - * - * @param ciphertext - * @return subtraction Output - */ - public static BigInteger subBytes(BigInteger ciphertext) { - - int[] cells = splitBlockIntoCells(ciphertext); - - for (int i = 0; i < 16; i++) { - cells[i] = SBOX[cells[i]]; - } - - return mergeCellsIntoBlock(cells); - } - - /** - * substitutes 8-Bit long substrings of the input using the inverse S-Box for - * decryption and returns the result. - * - * @param ciphertext - * @return subtraction Output - */ - public static BigInteger subBytesDec(BigInteger ciphertext) { - - int[] cells = splitBlockIntoCells(ciphertext); - - for (int i = 0; i < 16; i++) { - cells[i] = INVERSE_SBOX[cells[i]]; - } - - return mergeCellsIntoBlock(cells); - } - - /** - * Cell permutation step. Shifts cells within the rows of the input and returns - * the result. - * - * @param ciphertext - */ - public static BigInteger shiftRows(BigInteger ciphertext) { - int[] cells = splitBlockIntoCells(ciphertext); - int[] output = new int[16]; - - // do nothing in the first row - output[0] = cells[0]; - output[4] = cells[4]; - output[8] = cells[8]; - output[12] = cells[12]; - - // shift the second row backwards by one cell - output[1] = cells[5]; - output[5] = cells[9]; - output[9] = cells[13]; - output[13] = cells[1]; - - // shift the third row backwards by two cell - output[2] = cells[10]; - output[6] = cells[14]; - output[10] = cells[2]; - output[14] = cells[6]; - - // shift the forth row backwards by tree cell - output[3] = cells[15]; - output[7] = cells[3]; - output[11] = cells[7]; - output[15] = cells[11]; - - return mergeCellsIntoBlock(output); - } - - /** - * Cell permutation step for decryption . Shifts cells within the rows of the - * input and returns the result. - * - * @param ciphertext - */ - public static BigInteger shiftRowsDec(BigInteger ciphertext) { - int[] cells = splitBlockIntoCells(ciphertext); - int[] output = new int[16]; - - // do nothing in the first row - output[0] = cells[0]; - output[4] = cells[4]; - output[8] = cells[8]; - output[12] = cells[12]; - - // shift the second row forwards by one cell - output[1] = cells[13]; - output[5] = cells[1]; - output[9] = cells[5]; - output[13] = cells[9]; - - // shift the third row forwards by two cell - output[2] = cells[10]; - output[6] = cells[14]; - output[10] = cells[2]; - output[14] = cells[6]; - - // shift the forth row forwards by tree cell - output[3] = cells[7]; - output[7] = cells[11]; - output[11] = cells[15]; - output[15] = cells[3]; - - return mergeCellsIntoBlock(output); - } - - /** - * Applies the Rijndael MixColumns to the input and returns the result. - * - * @param ciphertext - */ - public static BigInteger mixColumns(BigInteger ciphertext) { - - int[] cells = splitBlockIntoCells(ciphertext); - int[] outputCells = new int[16]; - - for (int i = 0; i < 4; i++) { - int[] row = { cells[i * 4], cells[i * 4 + 1], cells[i * 4 + 2], cells[i * 4 + 3] }; - - outputCells[i * 4] = MULT2[row[0]] ^ MULT3[row[1]] ^ row[2] ^ row[3]; - outputCells[i * 4 + 1] = row[0] ^ MULT2[row[1]] ^ MULT3[row[2]] ^ row[3]; - outputCells[i * 4 + 2] = row[0] ^ row[1] ^ MULT2[row[2]] ^ MULT3[row[3]]; - outputCells[i * 4 + 3] = MULT3[row[0]] ^ row[1] ^ row[2] ^ MULT2[row[3]]; - } - return mergeCellsIntoBlock(outputCells); - } - - /** - * Applies the inverse Rijndael MixColumns for decryption to the input and - * returns the result. - * - * @param ciphertext - */ - public static BigInteger mixColumnsDec(BigInteger ciphertext) { - - int[] cells = splitBlockIntoCells(ciphertext); - int[] outputCells = new int[16]; - - for (int i = 0; i < 4; i++) { - int[] row = { cells[i * 4], cells[i * 4 + 1], cells[i * 4 + 2], cells[i * 4 + 3] }; - - outputCells[i * 4] = MULT14[row[0]] ^ MULT11[row[1]] ^ MULT13[row[2]] ^ MULT9[row[3]]; - outputCells[i * 4 + 1] = MULT9[row[0]] ^ MULT14[row[1]] ^ MULT11[row[2]] ^ MULT13[row[3]]; - outputCells[i * 4 + 2] = MULT13[row[0]] ^ MULT9[row[1]] ^ MULT14[row[2]] ^ MULT11[row[3]]; - outputCells[i * 4 + 3] = MULT11[row[0]] ^ MULT13[row[1]] ^ MULT9[row[2]] ^ MULT14[row[3]]; - } - return mergeCellsIntoBlock(outputCells); - } - - /** - * Encrypts the plaintext with the key and returns the result - * - * @param plainText - * which we want to encrypt - * @param key - * the key for encrypt - * @return EncryptedText - */ - public static BigInteger encrypt(BigInteger plainText, BigInteger key) { - BigInteger[] roundKeys = keyExpansion(key); - - // Initial round - plainText = addRoundKey(plainText, roundKeys[0]); - - // Main rounds - for (int i = 1; i < 10; i++) { - plainText = subBytes(plainText); - plainText = shiftRows(plainText); - plainText = mixColumns(plainText); - plainText = addRoundKey(plainText, roundKeys[i]); - } - - // Final round - plainText = subBytes(plainText); - plainText = shiftRows(plainText); - plainText = addRoundKey(plainText, roundKeys[10]); - - return plainText; - } - - /** - * Decrypts the ciphertext with the key and returns the result - * - * @param cipherText - * The Encrypted text which we want to decrypt - * @param key - * @return decryptedText - */ - public static BigInteger decrypt(BigInteger cipherText, BigInteger key) { - - BigInteger[] roundKeys = keyExpansion(key); - - // Invert final round - cipherText = addRoundKey(cipherText, roundKeys[10]); - cipherText = shiftRowsDec(cipherText); - cipherText = subBytesDec(cipherText); - - // Invert main rounds - for (int i = 9; i > 0; i--) { - cipherText = addRoundKey(cipherText, roundKeys[i]); - cipherText = mixColumnsDec(cipherText); - cipherText = shiftRowsDec(cipherText); - cipherText = subBytesDec(cipherText); - } - - // Invert initial round - cipherText = addRoundKey(cipherText, roundKeys[0]); - - return cipherText; - } - - public static void main(String[] args) { - - try (Scanner input = new Scanner(System.in)) { - System.out.println("Enter (e) letter for encrpyt or (d) letter for decrypt :"); - char choice = input.nextLine().charAt(0); - String in; - switch (choice) { - case 'E': - case 'e': - System.out.println("Choose a plaintext block (128-Bit Integer in base 16):"); - in = input.nextLine(); - BigInteger plaintext = new BigInteger(in, 16); - System.out.println("Choose a Key (128-Bit Integer in base 16):"); - in = input.nextLine(); - BigInteger encryptionKey = new BigInteger(in, 16); - System.out.println("The encrypted message is: \n" + encrypt(plaintext, encryptionKey).toString(16)); - break; - case 'D': - case 'd': - System.out.println("Enter your ciphertext block (128-Bit Integer in base 16):"); - in = input.nextLine(); - BigInteger ciphertext = new BigInteger(in, 16); - System.out.println("Choose a Key (128-Bit Integer in base 16):"); - in = input.nextLine(); - BigInteger decryptionKey = new BigInteger(in, 16); - System.out.println("The deciphered message is:\n" + decrypt(ciphertext, decryptionKey).toString(16)); - break; - default: - System.out.println("** End **"); - } - } - - } + /** + * Precalculated values for x to the power of 2 in Rijndaels galois field. Used as 'RCON' during + * the key expansion. + */ + private static final int[] RCON = { + 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, + 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, + 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, + 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, + 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, + 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, + 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, + 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, + 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, + 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, + 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, + 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, + 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, + 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, + 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, + 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d + }; + + /** + * Rijndael S-box Substitution table used for encryption in the subBytes step, as well as the key + * expansion. + */ + private static final int[] SBOX = { + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, + 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, + 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, + 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, + 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, + 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, + 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, + 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, + 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, + 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, + 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 + }; + + /** Inverse Rijndael S-box Substitution table used for decryption in the subBytesDec step. */ + private static final int[] INVERSE_SBOX = { + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, + 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, + 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, + 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, + 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, + 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, + 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, + 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, + 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, + 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, + 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, + 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, + 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, + 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, + 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D + }; + + /** + * Precalculated lookup table for galois field multiplication by 2 used in the MixColums step + * during encryption. + */ + private static final int[] MULT2 = { + 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, + 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, + 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, + 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, + 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, + 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, + 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, + 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, + 0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05, + 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25, + 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, + 0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, + 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, + 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, + 0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, + 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5 + }; + + /** + * Precalculated lookup table for galois field multiplication by 3 used in the MixColums step + * during encryption. + */ + private static final int[] MULT3 = { + 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, + 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, + 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, + 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, + 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, + 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, + 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, + 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, + 0x9b, 0x98, 0x9d, 0x9e, 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a, + 0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6, 0xbf, 0xbc, 0xb9, 0xba, + 0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2, 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea, + 0xcb, 0xc8, 0xcd, 0xce, 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda, + 0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a, + 0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, + 0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a, + 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a + }; + + /** + * Precalculated lookup table for galois field multiplication by 9 used in the MixColums step + * during decryption. + */ + private static final int[] MULT9 = { + 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77, + 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7, + 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c, + 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc, + 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01, + 0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91, + 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a, + 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa, + 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b, + 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b, + 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0, + 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30, + 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed, + 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d, + 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6, + 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46 + }; + + /** + * Precalculated lookup table for galois field multiplication by 11 used in the MixColums step + * during decryption. + */ + private static final int[] MULT11 = { + 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69, + 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9, + 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12, + 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2, + 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f, + 0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f, + 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4, + 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54, + 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e, + 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e, + 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5, + 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55, + 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68, + 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8, + 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13, + 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3 + }; + + /** + * Precalculated lookup table for galois field multiplication by 13 used in the MixColums step + * during decryption. + */ + private static final int[] MULT13 = { + 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b, + 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b, + 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0, + 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20, + 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26, + 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6, + 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d, + 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d, + 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91, + 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41, + 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a, + 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa, + 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc, + 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c, + 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47, + 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97 + }; + + /** + * Precalculated lookup table for galois field multiplication by 14 used in the MixColums step + * during decryption. + */ + private static final int[] MULT14 = { + 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a, + 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba, + 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81, + 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61, + 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7, + 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17, + 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c, + 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc, + 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b, + 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb, + 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0, + 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20, + 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6, + 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56, + 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d, + 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d + }; + + /** + * Subroutine of the Rijndael key expansion. + * + * @param t + * @param rconCounter + * @return + */ + public static BigInteger scheduleCore(BigInteger t, int rconCounter) { + String rBytes = t.toString(16); + + // Add zero padding + while (rBytes.length() < 8) { + rBytes = "0" + rBytes; + } + + // rotate the first 16 bits to the back + String rotatingBytes = rBytes.substring(0, 2); + String fixedBytes = rBytes.substring(2); + + rBytes = fixedBytes + rotatingBytes; + + // apply S-Box to all 8-Bit Substrings + for (int i = 0; i < 4; i++) { + String currentByteBits = rBytes.substring(i * 2, (i + 1) * 2); + + int currentByte = Integer.parseInt(currentByteBits, 16); + currentByte = SBOX[currentByte]; + + // add the current RCON value to the first byte + if (i == 0) { + currentByte = currentByte ^ RCON[rconCounter]; + } + + currentByteBits = Integer.toHexString(currentByte); + + // Add zero padding + + while (currentByteBits.length() < 2) { + currentByteBits = '0' + currentByteBits; + } + + // replace bytes in original string + rBytes = rBytes.substring(0, i * 2) + currentByteBits + rBytes.substring((i + 1) * 2); + } + + // t = new BigInteger(rBytes, 16); + // return t; + return new BigInteger(rBytes, 16); + } + + /** + * Returns an array of 10 + 1 round keys that are calculated by using Rijndael key schedule + * + * @param initialKey + * @return array of 10 + 1 round keys + */ + public static BigInteger[] keyExpansion(BigInteger initialKey) { + BigInteger[] roundKeys = { + initialKey, + new BigInteger("0"), + new BigInteger("0"), + new BigInteger("0"), + new BigInteger("0"), + new BigInteger("0"), + new BigInteger("0"), + new BigInteger("0"), + new BigInteger("0"), + new BigInteger("0"), + new BigInteger("0"), + }; + + // initialize rcon iteration + int rconCounter = 1; + + for (int i = 1; i < 11; i++) { + + // get the previous 32 bits the key + BigInteger t = roundKeys[i - 1].remainder(new BigInteger("100000000", 16)); + + // split previous key into 8-bit segments + BigInteger[] prevKey = { + roundKeys[i - 1].remainder(new BigInteger("100000000", 16)), + roundKeys[i - 1] + .remainder(new BigInteger("10000000000000000", 16)) + .divide(new BigInteger("100000000", 16)), + roundKeys[i - 1] + .remainder(new BigInteger("1000000000000000000000000", 16)) + .divide(new BigInteger("10000000000000000", 16)), + roundKeys[i - 1].divide(new BigInteger("1000000000000000000000000", 16)), + }; + + // run schedule core + t = scheduleCore(t, rconCounter); + rconCounter += 1; + + // Calculate partial round key + BigInteger t0 = t.xor(prevKey[3]); + BigInteger t1 = t0.xor(prevKey[2]); + BigInteger t2 = t1.xor(prevKey[1]); + BigInteger t3 = t2.xor(prevKey[0]); + + // Join round key segments + t2 = t2.multiply(new BigInteger("100000000", 16)); + t1 = t1.multiply(new BigInteger("10000000000000000", 16)); + t0 = t0.multiply(new BigInteger("1000000000000000000000000", 16)); + roundKeys[i] = t0.add(t1).add(t2).add(t3); + } + return roundKeys; + } + + /** + * representation of the input 128-bit block as an array of 8-bit integers. + * + * @param block of 128-bit integers + * @return array of 8-bit integers + */ + public static int[] splitBlockIntoCells(BigInteger block) { + + int[] cells = new int[16]; + String blockBits = block.toString(2); + + // Append leading 0 for full "128-bit" string + while (blockBits.length() < 128) { + blockBits = '0' + blockBits; + } + + // split 128 to 8 bit cells + for (int i = 0; i < cells.length; i++) { + String cellBits = blockBits.substring(8 * i, 8 * (i + 1)); + cells[i] = Integer.parseInt(cellBits, 2); + } + + return cells; + } + + /** + * Returns the 128-bit BigInteger representation of the input of an array of 8-bit integers. + * + * @param cells that we need to merge + * @return block of merged cells + */ + public static BigInteger mergeCellsIntoBlock(int[] cells) { + + String blockBits = ""; + for (int i = 0; i < 16; i++) { + String cellBits = Integer.toBinaryString(cells[i]); + + // Append leading 0 for full "8-bit" strings + while (cellBits.length() < 8) { + cellBits = '0' + cellBits; + } + + blockBits += cellBits; + } + + return new BigInteger(blockBits, 2); + } + + /** + * @param ciphertext + * @param key + * @return ciphertext XOR key + */ + public static BigInteger addRoundKey(BigInteger ciphertext, BigInteger key) { + return ciphertext.xor(key); + } + + /** + * substitutes 8-Bit long substrings of the input using the S-Box and returns the result. + * + * @param ciphertext + * @return subtraction Output + */ + public static BigInteger subBytes(BigInteger ciphertext) { + + int[] cells = splitBlockIntoCells(ciphertext); + + for (int i = 0; i < 16; i++) { + cells[i] = SBOX[cells[i]]; + } + + return mergeCellsIntoBlock(cells); + } + + /** + * substitutes 8-Bit long substrings of the input using the inverse S-Box for decryption and + * returns the result. + * + * @param ciphertext + * @return subtraction Output + */ + public static BigInteger subBytesDec(BigInteger ciphertext) { + + int[] cells = splitBlockIntoCells(ciphertext); + + for (int i = 0; i < 16; i++) { + cells[i] = INVERSE_SBOX[cells[i]]; + } + + return mergeCellsIntoBlock(cells); + } + + /** + * Cell permutation step. Shifts cells within the rows of the input and returns the result. + * + * @param ciphertext + */ + public static BigInteger shiftRows(BigInteger ciphertext) { + int[] cells = splitBlockIntoCells(ciphertext); + int[] output = new int[16]; + + // do nothing in the first row + output[0] = cells[0]; + output[4] = cells[4]; + output[8] = cells[8]; + output[12] = cells[12]; + + // shift the second row backwards by one cell + output[1] = cells[5]; + output[5] = cells[9]; + output[9] = cells[13]; + output[13] = cells[1]; + + // shift the third row backwards by two cell + output[2] = cells[10]; + output[6] = cells[14]; + output[10] = cells[2]; + output[14] = cells[6]; + + // shift the forth row backwards by tree cell + output[3] = cells[15]; + output[7] = cells[3]; + output[11] = cells[7]; + output[15] = cells[11]; + + return mergeCellsIntoBlock(output); + } + + /** + * Cell permutation step for decryption . Shifts cells within the rows of the input and returns + * the result. + * + * @param ciphertext + */ + public static BigInteger shiftRowsDec(BigInteger ciphertext) { + int[] cells = splitBlockIntoCells(ciphertext); + int[] output = new int[16]; + + // do nothing in the first row + output[0] = cells[0]; + output[4] = cells[4]; + output[8] = cells[8]; + output[12] = cells[12]; + + // shift the second row forwards by one cell + output[1] = cells[13]; + output[5] = cells[1]; + output[9] = cells[5]; + output[13] = cells[9]; + + // shift the third row forwards by two cell + output[2] = cells[10]; + output[6] = cells[14]; + output[10] = cells[2]; + output[14] = cells[6]; + + // shift the forth row forwards by tree cell + output[3] = cells[7]; + output[7] = cells[11]; + output[11] = cells[15]; + output[15] = cells[3]; + + return mergeCellsIntoBlock(output); + } + + /** + * Applies the Rijndael MixColumns to the input and returns the result. + * + * @param ciphertext + */ + public static BigInteger mixColumns(BigInteger ciphertext) { + + int[] cells = splitBlockIntoCells(ciphertext); + int[] outputCells = new int[16]; + + for (int i = 0; i < 4; i++) { + int[] row = {cells[i * 4], cells[i * 4 + 1], cells[i * 4 + 2], cells[i * 4 + 3]}; + + outputCells[i * 4] = MULT2[row[0]] ^ MULT3[row[1]] ^ row[2] ^ row[3]; + outputCells[i * 4 + 1] = row[0] ^ MULT2[row[1]] ^ MULT3[row[2]] ^ row[3]; + outputCells[i * 4 + 2] = row[0] ^ row[1] ^ MULT2[row[2]] ^ MULT3[row[3]]; + outputCells[i * 4 + 3] = MULT3[row[0]] ^ row[1] ^ row[2] ^ MULT2[row[3]]; + } + return mergeCellsIntoBlock(outputCells); + } + + /** + * Applies the inverse Rijndael MixColumns for decryption to the input and returns the result. + * + * @param ciphertext + */ + public static BigInteger mixColumnsDec(BigInteger ciphertext) { + + int[] cells = splitBlockIntoCells(ciphertext); + int[] outputCells = new int[16]; + + for (int i = 0; i < 4; i++) { + int[] row = {cells[i * 4], cells[i * 4 + 1], cells[i * 4 + 2], cells[i * 4 + 3]}; + + outputCells[i * 4] = MULT14[row[0]] ^ MULT11[row[1]] ^ MULT13[row[2]] ^ MULT9[row[3]]; + outputCells[i * 4 + 1] = MULT9[row[0]] ^ MULT14[row[1]] ^ MULT11[row[2]] ^ MULT13[row[3]]; + outputCells[i * 4 + 2] = MULT13[row[0]] ^ MULT9[row[1]] ^ MULT14[row[2]] ^ MULT11[row[3]]; + outputCells[i * 4 + 3] = MULT11[row[0]] ^ MULT13[row[1]] ^ MULT9[row[2]] ^ MULT14[row[3]]; + } + return mergeCellsIntoBlock(outputCells); + } + + /** + * Encrypts the plaintext with the key and returns the result + * + * @param plainText which we want to encrypt + * @param key the key for encrypt + * @return EncryptedText + */ + public static BigInteger encrypt(BigInteger plainText, BigInteger key) { + BigInteger[] roundKeys = keyExpansion(key); + + // Initial round + plainText = addRoundKey(plainText, roundKeys[0]); + + // Main rounds + for (int i = 1; i < 10; i++) { + plainText = subBytes(plainText); + plainText = shiftRows(plainText); + plainText = mixColumns(plainText); + plainText = addRoundKey(plainText, roundKeys[i]); + } + + // Final round + plainText = subBytes(plainText); + plainText = shiftRows(plainText); + plainText = addRoundKey(plainText, roundKeys[10]); + + return plainText; + } + + /** + * Decrypts the ciphertext with the key and returns the result + * + * @param cipherText The Encrypted text which we want to decrypt + * @param key + * @return decryptedText + */ + public static BigInteger decrypt(BigInteger cipherText, BigInteger key) { + + BigInteger[] roundKeys = keyExpansion(key); + + // Invert final round + cipherText = addRoundKey(cipherText, roundKeys[10]); + cipherText = shiftRowsDec(cipherText); + cipherText = subBytesDec(cipherText); + + // Invert main rounds + for (int i = 9; i > 0; i--) { + cipherText = addRoundKey(cipherText, roundKeys[i]); + cipherText = mixColumnsDec(cipherText); + cipherText = shiftRowsDec(cipherText); + cipherText = subBytesDec(cipherText); + } + + // Invert initial round + cipherText = addRoundKey(cipherText, roundKeys[0]); + + return cipherText; + } + + public static void main(String[] args) { + + try (Scanner input = new Scanner(System.in)) { + System.out.println("Enter (e) letter for encrpyt or (d) letter for decrypt :"); + char choice = input.nextLine().charAt(0); + String in; + switch (choice) { + case 'E': + case 'e': + System.out.println("Choose a plaintext block (128-Bit Integer in base 16):"); + in = input.nextLine(); + BigInteger plaintext = new BigInteger(in, 16); + System.out.println("Choose a Key (128-Bit Integer in base 16):"); + in = input.nextLine(); + BigInteger encryptionKey = new BigInteger(in, 16); + System.out.println( + "The encrypted message is: \n" + encrypt(plaintext, encryptionKey).toString(16)); + break; + case 'D': + case 'd': + System.out.println("Enter your ciphertext block (128-Bit Integer in base 16):"); + in = input.nextLine(); + BigInteger ciphertext = new BigInteger(in, 16); + System.out.println("Choose a Key (128-Bit Integer in base 16):"); + in = input.nextLine(); + BigInteger decryptionKey = new BigInteger(in, 16); + System.out.println( + "The deciphered message is:\n" + decrypt(ciphertext, decryptionKey).toString(16)); + break; + default: + System.out.println("** End **"); + } + } + } } diff --git a/ciphers/AESEncryption.java b/ciphers/AESEncryption.java index 884109f9bdb7..12e5824de7d1 100644 --- a/ciphers/AESEncryption.java +++ b/ciphers/AESEncryption.java @@ -10,116 +10,101 @@ import javax.crypto.SecretKey; /** - * This example program shows how AES encryption and decryption can be done in - * Java. Please note that secret key and encrypted text is unreadable binary and - * hence in the following program we display it in hexadecimal format of the - * underlying bytes. - * + * This example program shows how AES encryption and decryption can be done in Java. Please note + * that secret key and encrypted text is unreadable binary and hence in the following program we + * display it in hexadecimal format of the underlying bytes. */ public class AESEncryption { + private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); + /** + * 1. Generate a plain text for encryption 2. Get a secret key (printed in hexadecimal form). In + * actual use this must by encrypted and kept safe. The same key is required for decryption. + */ + public static void main(String[] args) throws Exception { + String plainText = "Hello World"; + SecretKey secKey = getSecretEncryptionKey(); + byte[] cipherText = encryptText(plainText, secKey); + String decryptedText = decryptText(cipherText, secKey); - private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray(); - /** - * 1. Generate a plain text for encryption 2. Get a secret key (printed in - * hexadecimal form). In actual use this must by encrypted and kept safe. The - * same key is required for decryption. - * - */ - public static void main(String[] args) throws Exception { - String plainText = "Hello World"; - SecretKey secKey = getSecretEncryptionKey(); - byte[] cipherText = encryptText(plainText, secKey); - String decryptedText = decryptText(cipherText, secKey); + System.out.println("Original Text:" + plainText); + System.out.println("AES Key (Hex Form):" + bytesToHex(secKey.getEncoded())); + System.out.println("Encrypted Text (Hex Form):" + bytesToHex(cipherText)); + System.out.println("Descrypted Text:" + decryptedText); + } - System.out.println("Original Text:" + plainText); - System.out.println("AES Key (Hex Form):" + bytesToHex(secKey.getEncoded())); - System.out.println("Encrypted Text (Hex Form):" + bytesToHex(cipherText)); - System.out.println("Descrypted Text:" + decryptedText); + /** + * gets the AES encryption key. In your actual programs, this should be safely stored. + * + * @return secKey (Secret key that we encrypt using it) + * @throws NoSuchAlgorithmException (from KeyGenrator) + */ + public static SecretKey getSecretEncryptionKey() throws NoSuchAlgorithmException { + KeyGenerator aesKeyGenerator = KeyGenerator.getInstance("AES"); + aesKeyGenerator.init(128); // The AES key size in number of bits + SecretKey secKey = aesKeyGenerator.generateKey(); + return secKey; + } - } + /** + * Encrypts plainText in AES using the secret key + * + * @param plainText + * @param secKey + * @return byteCipherText (The encrypted text) + * @throws NoSuchPaddingException (from Cipher) + * @throws NoSuchAlgorithmException (from Cipher) + * @throws InvalidKeyException (from Cipher) + * @throws BadPaddingException (from Cipher) + * @throws IllegalBlockSizeException (from Cipher) + */ + public static byte[] encryptText(String plainText, SecretKey secKey) + throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, + IllegalBlockSizeException, BadPaddingException { + // AES defaults to AES/ECB/PKCS5Padding in Java 7 + Cipher aesCipher = Cipher.getInstance("AES"); + aesCipher.init(Cipher.ENCRYPT_MODE, secKey); + byte[] byteCipherText = aesCipher.doFinal(plainText.getBytes()); + return byteCipherText; + } - /** - * gets the AES encryption key. In your actual programs, this should be safely - * stored. - * - * @return secKey (Secret key that we encrypt using it) - * @throws NoSuchAlgorithmException - * (from KeyGenrator) - * - */ - public static SecretKey getSecretEncryptionKey() throws NoSuchAlgorithmException { - KeyGenerator aesKeyGenerator = KeyGenerator.getInstance("AES"); - aesKeyGenerator.init(128); // The AES key size in number of bits - SecretKey secKey = aesKeyGenerator.generateKey(); - return secKey; - } + /** + * Decrypts encrypted byte array using the key used for encryption. + * + * @param byteCipherText + * @param secKey + * @return plainText + * @throws NoSuchPaddingException + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + * @throws BadPaddingException + * @throws IllegalBlockSizeException + */ + public static String decryptText(byte[] byteCipherText, SecretKey secKey) + throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, + IllegalBlockSizeException, BadPaddingException { + // AES defaults to AES/ECB/PKCS5Padding in Java 7 + Cipher aesCipher = Cipher.getInstance("AES"); + aesCipher.init(Cipher.DECRYPT_MODE, secKey); + byte[] bytePlainText = aesCipher.doFinal(byteCipherText); + return new String(bytePlainText); + } - /** - * Encrypts plainText in AES using the secret key - * - * @param plainText - * @param secKey - * @return byteCipherText (The encrypted text) - * @throws NoSuchPaddingException - * (from Cipher) - * @throws NoSuchAlgorithmException - * (from Cipher) - * @throws InvalidKeyException - * (from Cipher) - * @throws BadPaddingException - * (from Cipher) - * @throws IllegalBlockSizeException - * (from Cipher) - */ - public static byte[] encryptText(String plainText, SecretKey secKey) throws NoSuchAlgorithmException, - NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { - // AES defaults to AES/ECB/PKCS5Padding in Java 7 - Cipher aesCipher = Cipher.getInstance("AES"); - aesCipher.init(Cipher.ENCRYPT_MODE, secKey); - byte[] byteCipherText = aesCipher.doFinal(plainText.getBytes()); - return byteCipherText; - } - - /** - * Decrypts encrypted byte array using the key used for encryption. - * - * @param byteCipherText - * @param secKey - * @return plainText - * @throws NoSuchPaddingException - * @throws NoSuchAlgorithmException - * @throws InvalidKeyException - * @throws BadPaddingException - * @throws IllegalBlockSizeException - */ - public static String decryptText(byte[] byteCipherText, SecretKey secKey) throws NoSuchAlgorithmException, - NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { - // AES defaults to AES/ECB/PKCS5Padding in Java 7 - Cipher aesCipher = Cipher.getInstance("AES"); - aesCipher.init(Cipher.DECRYPT_MODE, secKey); - byte[] bytePlainText = aesCipher.doFinal(byteCipherText); - return new String(bytePlainText); - } - - /** - * Convert a binary byte array into readable hex form - * Old library is deprecated on OpenJdk 11 and - * this is faster regarding other solution is using StringBuilder - * Credit - * {@link - * https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java/9855338#9855338} - * @param hash - * (in binary) - * @return hexHash - */ - public static String bytesToHex(byte[] bytes) { - char[] hexChars = new char[bytes.length * 2]; - for (int j = 0; j < bytes.length; j++) { - int v = bytes[j] & 0xFF; - hexChars[j * 2] = HEX_ARRAY[v >>> 4]; - hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; - } - return new String(hexChars); - } + /** + * Convert a binary byte array into readable hex form Old library is deprecated on OpenJdk 11 and + * this is faster regarding other solution is using StringBuilder Credit {@link + * https://stackoverflow.com/questions/9655181/how-to-convert-a-byte-array-to-a-hex-string-in-java/9855338#9855338} + * + * @param hash (in binary) + * @return hexHash + */ + public static String bytesToHex(byte[] bytes) { + char[] hexChars = new char[bytes.length * 2]; + for (int j = 0; j < bytes.length; j++) { + int v = bytes[j] & 0xFF; + hexChars[j * 2] = HEX_ARRAY[v >>> 4]; + hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F]; + } + return new String(hexChars); + } } diff --git a/ciphers/Caesar.java b/ciphers/Caesar.java index d9028613bce8..ff7f4482be1e 100644 --- a/ciphers/Caesar.java +++ b/ciphers/Caesar.java @@ -3,128 +3,119 @@ import java.util.Scanner; /** - * - * A Java implementation of Caesar Cipher. /It is a type of substitution cipher - * in which each letter in the plaintext is replaced by a letter some fixed - * number of positions down the alphabet. / + * A Java implementation of Caesar Cipher. /It is a type of substitution cipher in which each letter + * in the plaintext is replaced by a letter some fixed number of positions down the alphabet. / * * @author FAHRI YARDIMCI * @author khalil2535 */ public class Caesar { - /** - * Encrypt text by shifting every Latin char by add number shift for ASCII - * Example : A + 1 -> B - * - * @param message - * @param shift - * @return Encrypted message - */ - public static String encode(String message, int shift) { - String encoded = ""; + /** + * Encrypt text by shifting every Latin char by add number shift for ASCII Example : A + 1 -> B + * + * @param message + * @param shift + * @return Encrypted message + */ + public static String encode(String message, int shift) { + String encoded = ""; - - shift %= 26; - + shift %= 26; - final int length = message.length(); - for (int i = 0; i < length; i++) { + final int length = message.length(); + for (int i = 0; i < length; i++) { -// int current = message.charAt(i); //using char to shift characters because ascii is in-order latin alphabet - char current = message.charAt(i); // Java law : char + int = char + // int current = message.charAt(i); //using char to shift characters because ascii + // is in-order latin alphabet + char current = message.charAt(i); // Java law : char + int = char - if (IsCapitalLatinLetter(current)) { + if (IsCapitalLatinLetter(current)) { - current += shift; - encoded += (char) (current > 'Z' ? current - 26 : current); // 26 = number of latin letters + current += shift; + encoded += (char) (current > 'Z' ? current - 26 : current); // 26 = number of latin letters - } else if (IsSmallLatinLetter(current)) { + } else if (IsSmallLatinLetter(current)) { - current += shift; - encoded += (char) (current > 'z' ? current - 26 : current); // 26 = number of latin letters + current += shift; + encoded += (char) (current > 'z' ? current - 26 : current); // 26 = number of latin letters - } else { - encoded += current; - } - } - return encoded; + } else { + encoded += current; + } } + return encoded; + } - /** - * Decrypt message by shifting back every Latin char to previous the ASCII - * Example : B - 1 -> A - * - * @param encryptedMessage - * @param shift - * @return message - */ - public static String decode(String encryptedMessage, int shift) { - String decoded = ""; - - - shift %= 26; - - - final int length = encryptedMessage.length(); - for (int i = 0; i < length; i++) { - char current = encryptedMessage.charAt(i); - if (IsCapitalLatinLetter(current)) { - - current -= shift; - decoded += (char) (current < 'A' ? current + 26 : current);// 26 = number of latin letters - - } else if (IsSmallLatinLetter(current)) { - - current -= shift; - decoded += (char) (current < 'a' ? current + 26 : current);// 26 = number of latin letters - - } else { - decoded += current; - } - } - return decoded; - } + /** + * Decrypt message by shifting back every Latin char to previous the ASCII Example : B - 1 -> A + * + * @param encryptedMessage + * @param shift + * @return message + */ + public static String decode(String encryptedMessage, int shift) { + String decoded = ""; - /** - * - * @param c - * @return true if character is capital Latin letter or false for others - */ - private static boolean IsCapitalLatinLetter(char c) { - return c >= 'A' && c <= 'Z'; - } + shift %= 26; - /** - * - * @param c - * @return true if character is small Latin letter or false for others - */ - private static boolean IsSmallLatinLetter(char c) { - return c >= 'a' && c <= 'z'; - } + final int length = encryptedMessage.length(); + for (int i = 0; i < length; i++) { + char current = encryptedMessage.charAt(i); + if (IsCapitalLatinLetter(current)) { - public static void main(String[] args) { - Scanner input = new Scanner(System.in); - System.out.println("Please enter the message (Latin Alphabet)"); - String message = input.nextLine(); - System.out.println(message); - System.out.println("Please enter the shift number"); - int shift = input.nextInt() % 26; - System.out.println("(E)ncode or (D)ecode ?"); - char choice = input.next().charAt(0); - switch (choice) { - case 'E': - case 'e': - System.out.println("ENCODED MESSAGE IS \n" + encode(message, shift)); //send our function to handle - break; - case 'D': - case 'd': - System.out.println("DECODED MESSAGE IS \n" + decode(message, shift)); - default: - System.out.println("default case"); - } - input.close(); - } + current -= shift; + decoded += (char) (current < 'A' ? current + 26 : current); // 26 = number of latin letters + } else if (IsSmallLatinLetter(current)) { + + current -= shift; + decoded += (char) (current < 'a' ? current + 26 : current); // 26 = number of latin letters + + } else { + decoded += current; + } + } + return decoded; + } + + /** + * @param c + * @return true if character is capital Latin letter or false for others + */ + private static boolean IsCapitalLatinLetter(char c) { + return c >= 'A' && c <= 'Z'; + } + + /** + * @param c + * @return true if character is small Latin letter or false for others + */ + private static boolean IsSmallLatinLetter(char c) { + return c >= 'a' && c <= 'z'; + } + + public static void main(String[] args) { + Scanner input = new Scanner(System.in); + System.out.println("Please enter the message (Latin Alphabet)"); + String message = input.nextLine(); + System.out.println(message); + System.out.println("Please enter the shift number"); + int shift = input.nextInt() % 26; + System.out.println("(E)ncode or (D)ecode ?"); + char choice = input.next().charAt(0); + switch (choice) { + case 'E': + case 'e': + System.out.println( + "ENCODED MESSAGE IS \n" + encode(message, shift)); // send our function to handle + break; + case 'D': + case 'd': + System.out.println("DECODED MESSAGE IS \n" + decode(message, shift)); + default: + System.out.println("default case"); + } + input.close(); + } } diff --git a/ciphers/ColumnarTranspositionCipher.java b/ciphers/ColumnarTranspositionCipher.java index 60af4ff5429c..9947d781c257 100644 --- a/ciphers/ColumnarTranspositionCipher.java +++ b/ciphers/ColumnarTranspositionCipher.java @@ -7,218 +7,204 @@ */ public class ColumnarTranspositionCipher { - private static String keyword; - private static Object[][] table; - private static String abecedarium; - public static final String ABECEDARIUM = "abcdefghijklmnopqrstuvwxyzABCDEFG" - + "HIJKLMNOPQRSTUVWXYZ0123456789,.;:-@"; - private static final String ENCRYPTION_FIELD = "≈"; - private static final char ENCRYPTION_FIELD_CHAR = '≈'; + private static String keyword; + private static Object[][] table; + private static String abecedarium; + public static final String ABECEDARIUM = + "abcdefghijklmnopqrstuvwxyzABCDEFG" + "HIJKLMNOPQRSTUVWXYZ0123456789,.;:-@"; + private static final String ENCRYPTION_FIELD = "≈"; + private static final char ENCRYPTION_FIELD_CHAR = '≈'; - /** - * Encrypts a certain String with the Columnar Transposition Cipher Rule - * - * @param word Word being encrypted - * @param keyword String with keyword being used - * @return a String with the word encrypted by the Columnar Transposition - * Cipher Rule - */ - public static String encrpyter(String word, String keyword) { - ColumnarTranspositionCipher.keyword = keyword; - abecedariumBuilder(500); - table = tableBuilder(word); - Object[][] sortedTable = sortTable(table); - String wordEncrypted = ""; - for (int i = 0; i < sortedTable[i].length; i++) { - for (int j = 1; j < sortedTable.length; j++) { - wordEncrypted += sortedTable[j][i]; - } - } - return wordEncrypted; + /** + * Encrypts a certain String with the Columnar Transposition Cipher Rule + * + * @param word Word being encrypted + * @param keyword String with keyword being used + * @return a String with the word encrypted by the Columnar Transposition Cipher Rule + */ + public static String encrpyter(String word, String keyword) { + ColumnarTranspositionCipher.keyword = keyword; + abecedariumBuilder(500); + table = tableBuilder(word); + Object[][] sortedTable = sortTable(table); + String wordEncrypted = ""; + for (int i = 0; i < sortedTable[i].length; i++) { + for (int j = 1; j < sortedTable.length; j++) { + wordEncrypted += sortedTable[j][i]; + } } + return wordEncrypted; + } - /** - * Encrypts a certain String with the Columnar Transposition Cipher Rule - * - * @param word Word being encrypted - * @param keyword String with keyword being used - * @param abecedarium String with the abecedarium being used. null for - * default one - * @return a String with the word encrypted by the Columnar Transposition - * Cipher Rule - */ - public static String encrpyter(String word, String keyword, - String abecedarium) { - ColumnarTranspositionCipher.keyword = keyword; - if (abecedarium != null) { - ColumnarTranspositionCipher.abecedarium = abecedarium; - } else { - ColumnarTranspositionCipher.abecedarium = ABECEDARIUM; - } - table = tableBuilder(word); - Object[][] sortedTable = sortTable(table); - String wordEncrypted = ""; - for (int i = 0; i < sortedTable[0].length; i++) { - for (int j = 1; j < sortedTable.length; j++) { - wordEncrypted += sortedTable[j][i]; - } - } - return wordEncrypted; + /** + * Encrypts a certain String with the Columnar Transposition Cipher Rule + * + * @param word Word being encrypted + * @param keyword String with keyword being used + * @param abecedarium String with the abecedarium being used. null for default one + * @return a String with the word encrypted by the Columnar Transposition Cipher Rule + */ + public static String encrpyter(String word, String keyword, String abecedarium) { + ColumnarTranspositionCipher.keyword = keyword; + if (abecedarium != null) { + ColumnarTranspositionCipher.abecedarium = abecedarium; + } else { + ColumnarTranspositionCipher.abecedarium = ABECEDARIUM; } - - /** - * Decrypts a certain encrypted String with the Columnar Transposition - * Cipher Rule - * - * @return a String decrypted with the word encrypted by the Columnar - * Transposition Cipher Rule - */ - public static String decrypter() { - String wordDecrypted = ""; - for (int i = 1; i < table.length; i++) { - for (Object item : table[i]) { - wordDecrypted += item; - } - } - return wordDecrypted.replaceAll(ENCRYPTION_FIELD, ""); + table = tableBuilder(word); + Object[][] sortedTable = sortTable(table); + String wordEncrypted = ""; + for (int i = 0; i < sortedTable[0].length; i++) { + for (int j = 1; j < sortedTable.length; j++) { + wordEncrypted += sortedTable[j][i]; + } } + return wordEncrypted; + } - /** - * Builds a table with the word to be encrypted in rows by the Columnar - * Transposition Cipher Rule - * - * @return An Object[][] with the word to be encrypted filled in rows and - * columns - */ - private static Object[][] tableBuilder(String word) { - Object[][] table = new Object[numberOfRows(word) + 1][keyword.length()]; - char[] wordInChards = word.toCharArray(); - //Fils in the respective numbers - table[0] = findElements(); - int charElement = 0; - for (int i = 1; i < table.length; i++) { - for (int j = 0; j < table[i].length; j++) { - if (charElement < wordInChards.length) { - table[i][j] = wordInChards[charElement]; - charElement++; - } else { - table[i][j] = ENCRYPTION_FIELD_CHAR; - } - } - } - return table; + /** + * Decrypts a certain encrypted String with the Columnar Transposition Cipher Rule + * + * @return a String decrypted with the word encrypted by the Columnar Transposition Cipher Rule + */ + public static String decrypter() { + String wordDecrypted = ""; + for (int i = 1; i < table.length; i++) { + for (Object item : table[i]) { + wordDecrypted += item; + } } + return wordDecrypted.replaceAll(ENCRYPTION_FIELD, ""); + } - /** - * Determines the number of rows the table should have regarding the - * Columnar Transposition Cipher Rule - * - * @return an int with the number of rows that the table should have in - * order to respect the Columnar Transposition Cipher Rule. - */ - private static int numberOfRows(String word) { - if (word.length() / keyword.length() > word.length() / keyword.length()) { - return (word.length() / keyword.length()) + 1; + /** + * Builds a table with the word to be encrypted in rows by the Columnar Transposition Cipher Rule + * + * @return An Object[][] with the word to be encrypted filled in rows and columns + */ + private static Object[][] tableBuilder(String word) { + Object[][] table = new Object[numberOfRows(word) + 1][keyword.length()]; + char[] wordInChards = word.toCharArray(); + // Fils in the respective numbers + table[0] = findElements(); + int charElement = 0; + for (int i = 1; i < table.length; i++) { + for (int j = 0; j < table[i].length; j++) { + if (charElement < wordInChards.length) { + table[i][j] = wordInChards[charElement]; + charElement++; } else { - return word.length() / keyword.length(); + table[i][j] = ENCRYPTION_FIELD_CHAR; } + } } + return table; + } - /** - * - * @return charValues - */ - private static Object[] findElements() { - Object[] charValues = new Object[keyword.length()]; - for (int i = 0; i < charValues.length; i++) { - int charValueIndex = abecedarium.indexOf(keyword.charAt(i)); - charValues[i] = charValueIndex > -1 ? charValueIndex : null; - } - return charValues; + /** + * Determines the number of rows the table should have regarding the Columnar Transposition Cipher + * Rule + * + * @return an int with the number of rows that the table should have in order to respect the + * Columnar Transposition Cipher Rule. + */ + private static int numberOfRows(String word) { + if (word.length() / keyword.length() > word.length() / keyword.length()) { + return (word.length() / keyword.length()) + 1; + } else { + return word.length() / keyword.length(); } + } - /** - * - * @param table - * @return tableSorted - */ - private static Object[][] sortTable(Object[][] table) { - Object[][] tableSorted = new Object[table.length][table[0].length]; - for (int i = 0; i < tableSorted.length; i++) { - System.arraycopy(table[i], 0, tableSorted[i], 0, tableSorted[i].length); - } - for (int i = 0; i < tableSorted[0].length; i++) { - for (int j = i + 1; j < tableSorted[0].length; j++) { - if ((int) tableSorted[0][i] > (int) table[0][j]) { - Object[] column = getColumn(tableSorted, tableSorted.length, i); - switchColumns(tableSorted, j, i, column); - } - } - } - return tableSorted; + /** @return charValues */ + private static Object[] findElements() { + Object[] charValues = new Object[keyword.length()]; + for (int i = 0; i < charValues.length; i++) { + int charValueIndex = abecedarium.indexOf(keyword.charAt(i)); + charValues[i] = charValueIndex > -1 ? charValueIndex : null; } + return charValues; + } - /** - * - * @param table - * @param rows - * @param column - * @return columnArray - */ - private static Object[] getColumn(Object[][] table, int rows, int column) { - Object[] columnArray = new Object[rows]; - for (int i = 0; i < rows; i++) { - columnArray[i] = table[i][column]; + /** + * @param table + * @return tableSorted + */ + private static Object[][] sortTable(Object[][] table) { + Object[][] tableSorted = new Object[table.length][table[0].length]; + for (int i = 0; i < tableSorted.length; i++) { + System.arraycopy(table[i], 0, tableSorted[i], 0, tableSorted[i].length); + } + for (int i = 0; i < tableSorted[0].length; i++) { + for (int j = i + 1; j < tableSorted[0].length; j++) { + if ((int) tableSorted[0][i] > (int) table[0][j]) { + Object[] column = getColumn(tableSorted, tableSorted.length, i); + switchColumns(tableSorted, j, i, column); } - return columnArray; + } } + return tableSorted; + } - /** - * - * @param table - * @param firstColumnIndex - * @param secondColumnIndex - * @param columnToSwitch - */ - private static void switchColumns(Object[][] table, int firstColumnIndex, - int secondColumnIndex, Object[] columnToSwitch) { - for (int i = 0; i < table.length; i++) { - table[i][secondColumnIndex] = table[i][firstColumnIndex]; - table[i][firstColumnIndex] = columnToSwitch[i]; - } + /** + * @param table + * @param rows + * @param column + * @return columnArray + */ + private static Object[] getColumn(Object[][] table, int rows, int column) { + Object[] columnArray = new Object[rows]; + for (int i = 0; i < rows; i++) { + columnArray[i] = table[i][column]; } + return columnArray; + } - /** - * Creates an abecedarium with a specified ascii inded - * - * @param value Number of characters being used based on the ASCII Table - */ - private static void abecedariumBuilder(int value) { - abecedarium = ""; - for (int i = 0; i < value; i++) { - abecedarium += (char) i; - } + /** + * @param table + * @param firstColumnIndex + * @param secondColumnIndex + * @param columnToSwitch + */ + private static void switchColumns( + Object[][] table, int firstColumnIndex, int secondColumnIndex, Object[] columnToSwitch) { + for (int i = 0; i < table.length; i++) { + table[i][secondColumnIndex] = table[i][firstColumnIndex]; + table[i][firstColumnIndex] = columnToSwitch[i]; } + } - private static void showTable() { - for (Object[] table1 : table) { - for (Object item : table1) { - System.out.print(item + " "); - } - System.out.println(); - } + /** + * Creates an abecedarium with a specified ascii inded + * + * @param value Number of characters being used based on the ASCII Table + */ + private static void abecedariumBuilder(int value) { + abecedarium = ""; + for (int i = 0; i < value; i++) { + abecedarium += (char) i; } + } - public static void main(String[] args) { - String keywordForExample = "asd215"; - String wordBeingEncrypted = "This is a test of the Columnar Transposition Cipher"; - System.out.println("### Example of Columnar Transposition Cipher ###\n"); - System.out.println("Word being encryped ->>> " + wordBeingEncrypted); - System.out.println("Word encrypted ->>> " + ColumnarTranspositionCipher - .encrpyter(wordBeingEncrypted, keywordForExample)); - System.out.println("Word decryped ->>> " + ColumnarTranspositionCipher - .decrypter()); - System.out.println("\n### Encrypted Table ###"); - showTable(); + private static void showTable() { + for (Object[] table1 : table) { + for (Object item : table1) { + System.out.print(item + " "); + } + System.out.println(); } + } + + public static void main(String[] args) { + String keywordForExample = "asd215"; + String wordBeingEncrypted = "This is a test of the Columnar Transposition Cipher"; + System.out.println("### Example of Columnar Transposition Cipher ###\n"); + System.out.println("Word being encryped ->>> " + wordBeingEncrypted); + System.out.println( + "Word encrypted ->>> " + + ColumnarTranspositionCipher.encrpyter(wordBeingEncrypted, keywordForExample)); + System.out.println("Word decryped ->>> " + ColumnarTranspositionCipher.decrypter()); + System.out.println("\n### Encrypted Table ###"); + showTable(); + } } diff --git a/ciphers/RSA.java b/ciphers/RSA.java index 751475168a4f..0778f48ccf4b 100644 --- a/ciphers/RSA.java +++ b/ciphers/RSA.java @@ -4,88 +4,78 @@ import java.security.SecureRandom; import javax.swing.JOptionPane; -/** - * @author Nguyen Duy Tiep on 23-Oct-17. - */ +/** @author Nguyen Duy Tiep on 23-Oct-17. */ public final class RSA { - public static void main(String[] args) { - - RSA rsa = new RSA(1024); - String text1 = JOptionPane.showInputDialog("Enter a message to encrypt :"); - - String ciphertext = rsa.encrypt(text1); - JOptionPane.showMessageDialog(null, "Your encrypted message : " + ciphertext); - - JOptionPane.showMessageDialog(null, "Your message after decrypt : " + rsa.decrypt(ciphertext)); - } - - private BigInteger modulus, privateKey, publicKey; - - /** - * - * @param bits - */ - public RSA(int bits) { - generateKeys(bits); - } - - /** - * - * @param message - * @return encrypted message - */ - public synchronized String encrypt(String message) { - return (new BigInteger(message.getBytes())).modPow(publicKey, modulus).toString(); - } - - /** - * - * @param message - * @return encrypted message as big integer - */ - public synchronized BigInteger encrypt(BigInteger message) { - return message.modPow(publicKey, modulus); - } - - /** - * - * @param encryptedMessage - * @return plain message - */ - public synchronized String decrypt(String encryptedMessage) { - return new String((new BigInteger(encryptedMessage)).modPow(privateKey, modulus).toByteArray()); - } - - /** - * - * @param encryptedMessage - * @return plain message as big integer - */ - public synchronized BigInteger decrypt(BigInteger encryptedMessage) { - return encryptedMessage.modPow(privateKey, modulus); - } - - /** - * Generate a new public and private key set. - * - * @param bits - */ - public synchronized void generateKeys(int bits) { - SecureRandom r = new SecureRandom(); - BigInteger p = new BigInteger(bits / 2, 100, r); - BigInteger q = new BigInteger(bits / 2, 100, r); - modulus = p.multiply(q); - - BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE)); - - publicKey = new BigInteger("3"); - - while (m.gcd(publicKey).intValue() > 1) { - publicKey = publicKey.add(new BigInteger("2")); - } - - privateKey = publicKey.modInverse(m); + public static void main(String[] args) { + + RSA rsa = new RSA(1024); + String text1 = JOptionPane.showInputDialog("Enter a message to encrypt :"); + + String ciphertext = rsa.encrypt(text1); + JOptionPane.showMessageDialog(null, "Your encrypted message : " + ciphertext); + + JOptionPane.showMessageDialog(null, "Your message after decrypt : " + rsa.decrypt(ciphertext)); + } + + private BigInteger modulus, privateKey, publicKey; + + /** @param bits */ + public RSA(int bits) { + generateKeys(bits); + } + + /** + * @param message + * @return encrypted message + */ + public synchronized String encrypt(String message) { + return (new BigInteger(message.getBytes())).modPow(publicKey, modulus).toString(); + } + + /** + * @param message + * @return encrypted message as big integer + */ + public synchronized BigInteger encrypt(BigInteger message) { + return message.modPow(publicKey, modulus); + } + + /** + * @param encryptedMessage + * @return plain message + */ + public synchronized String decrypt(String encryptedMessage) { + return new String((new BigInteger(encryptedMessage)).modPow(privateKey, modulus).toByteArray()); + } + + /** + * @param encryptedMessage + * @return plain message as big integer + */ + public synchronized BigInteger decrypt(BigInteger encryptedMessage) { + return encryptedMessage.modPow(privateKey, modulus); + } + + /** + * Generate a new public and private key set. + * + * @param bits + */ + public synchronized void generateKeys(int bits) { + SecureRandom r = new SecureRandom(); + BigInteger p = new BigInteger(bits / 2, 100, r); + BigInteger q = new BigInteger(bits / 2, 100, r); + modulus = p.multiply(q); + + BigInteger m = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE)); + + publicKey = new BigInteger("3"); + + while (m.gcd(publicKey).intValue() > 1) { + publicKey = publicKey.add(new BigInteger("2")); } + privateKey = publicKey.modInverse(m); + } } diff --git a/ciphers/SimpleSubstitutionCipher.java b/ciphers/SimpleSubstitutionCipher.java index d9bae4f072c8..1279c4949456 100644 --- a/ciphers/SimpleSubstitutionCipher.java +++ b/ciphers/SimpleSubstitutionCipher.java @@ -3,95 +3,85 @@ import java.util.*; /** + * The simple substitution cipher is a cipher that has been in use for many hundreds of years (an + * excellent history is given in Simon Singhs 'the Code Book'). It basically consists of + * substituting every plaintext character for a different ciphertext character. It differs from the + * Caesar cipher in that the cipher alphabet is not simply the alphabet shifted, it is completely + * jumbled. * - * The simple substitution cipher is a cipher that has been in use for many hundreds of years - * (an excellent history is given in Simon Singhs 'the Code Book'). - * It basically consists of substituting every plaintext character for a different ciphertext character. - * It differs from the Caesar cipher in that the cipher alphabet is not simply the alphabet shifted, - * it is completely jumbled. - * * @author Hassan Elseoudy */ - public class SimpleSubstitutionCipher { - /** - * Encrypt text by replacing each element with its opposite character. - * - * @param message - * @param cipherSmall - * @return Encrypted message - */ - public static String encode(String message, String cipherSmall) { - String encoded = ""; - - // This map is used to encode - Map cipherMap = new HashMap(); - - char beginSmallLetter = 'a'; - char beginCapitalLetter = 'A'; - - cipherSmall = cipherSmall.toLowerCase(); - String cipherCapital = cipherSmall.toUpperCase(); - - // To handle Small and Capital letters - for(int i = 0; i < cipherSmall.length(); i++){ - cipherMap.put(beginSmallLetter++,cipherSmall.charAt(i)); - cipherMap.put(beginCapitalLetter++,cipherCapital.charAt(i)); - } - - for(int i = 0; i < message.length(); i++){ - if(Character.isAlphabetic(message.charAt(i))) - encoded += cipherMap.get(message.charAt(i)); - else - encoded += message.charAt(i); - } - - return encoded; + /** + * Encrypt text by replacing each element with its opposite character. + * + * @param message + * @param cipherSmall + * @return Encrypted message + */ + public static String encode(String message, String cipherSmall) { + String encoded = ""; + + // This map is used to encode + Map cipherMap = new HashMap(); + + char beginSmallLetter = 'a'; + char beginCapitalLetter = 'A'; + + cipherSmall = cipherSmall.toLowerCase(); + String cipherCapital = cipherSmall.toUpperCase(); + + // To handle Small and Capital letters + for (int i = 0; i < cipherSmall.length(); i++) { + cipherMap.put(beginSmallLetter++, cipherSmall.charAt(i)); + cipherMap.put(beginCapitalLetter++, cipherCapital.charAt(i)); } - /** - * Decrypt message by replacing each element with its opposite character in cipher. - * - * @param encryptedMessage - * @param cipherSmall - * @return message - */ - public static String decode(String encryptedMessage, String cipherSmall) { - String decoded = ""; - + for (int i = 0; i < message.length(); i++) { + if (Character.isAlphabetic(message.charAt(i))) encoded += cipherMap.get(message.charAt(i)); + else encoded += message.charAt(i); + } - Map cipherMap = new HashMap(); + return encoded; + } - char beginSmallLetter = 'a'; - char beginCapitalLetter = 'A'; + /** + * Decrypt message by replacing each element with its opposite character in cipher. + * + * @param encryptedMessage + * @param cipherSmall + * @return message + */ + public static String decode(String encryptedMessage, String cipherSmall) { + String decoded = ""; - cipherSmall = cipherSmall.toLowerCase(); - String cipherCapital = cipherSmall.toUpperCase(); + Map cipherMap = new HashMap(); - for(int i = 0; i < cipherSmall.length(); i++){ - cipherMap.put(cipherSmall.charAt(i),beginSmallLetter++); - cipherMap.put(cipherCapital.charAt(i),beginCapitalLetter++); - } + char beginSmallLetter = 'a'; + char beginCapitalLetter = 'A'; - for(int i = 0; i < encryptedMessage.length(); i++){ - if(Character.isAlphabetic(encryptedMessage.charAt(i))) - decoded += cipherMap.get(encryptedMessage.charAt(i)); - else - decoded += encryptedMessage.charAt(i); - } + cipherSmall = cipherSmall.toLowerCase(); + String cipherCapital = cipherSmall.toUpperCase(); - return decoded; + for (int i = 0; i < cipherSmall.length(); i++) { + cipherMap.put(cipherSmall.charAt(i), beginSmallLetter++); + cipherMap.put(cipherCapital.charAt(i), beginCapitalLetter++); } - /** - * - * TODO remove main and make JUnit Testing - */ - public static void main(String[] args) { - String a = encode("defend the east wall of the castle","phqgiumeaylnofdxjkrcvstzwb"); - String b = decode(a,"phqgiumeaylnofdxjkrcvstzwb"); - System.out.println(b); + for (int i = 0; i < encryptedMessage.length(); i++) { + if (Character.isAlphabetic(encryptedMessage.charAt(i))) + decoded += cipherMap.get(encryptedMessage.charAt(i)); + else decoded += encryptedMessage.charAt(i); } + return decoded; + } + + /** TODO remove main and make JUnit Testing */ + public static void main(String[] args) { + String a = encode("defend the east wall of the castle", "phqgiumeaylnofdxjkrcvstzwb"); + String b = decode(a, "phqgiumeaylnofdxjkrcvstzwb"); + System.out.println(b); + } } diff --git a/ciphers/Vigenere.java b/ciphers/Vigenere.java index 48c54288dcf8..05d2952c313d 100644 --- a/ciphers/Vigenere.java +++ b/ciphers/Vigenere.java @@ -2,66 +2,60 @@ /** * A Java implementation of Vigenere Cipher. - * @author straiffix + * + * @author straiffix */ +public class Vigenere { + public static String encrypt(final String message, final String key) { -public class Vigenere { + String result = ""; - public static String encrypt(final String message, final String key) - { + for (int i = 0, j = 0; i < message.length(); i++) { + char c = message.charAt(i); + if (Character.isLetter(c)) { + if (Character.isUpperCase(c)) { + result += (char) ((c + key.toUpperCase().charAt(j) - 2 * 'A') % 26 + 'A'); - String result = ""; - - for (int i = 0, j = 0; i < message.length(); i++) { - char c = message.charAt(i); - if (Character.isLetter(c)){ - if(Character.isUpperCase(c)) { - result += (char) ((c + key.toUpperCase().charAt(j) - 2 * 'A') % 26 + 'A'); - - } else { - result += (char) ((c + key.toLowerCase().charAt(j) - 2 * 'a') % 26 + 'a'); - - } - } else { - result+=c; - } - j = ++j % key.length(); + } else { + result += (char) ((c + key.toLowerCase().charAt(j) - 2 * 'a') % 26 + 'a'); } - return result; + } else { + result += c; + } + j = ++j % key.length(); } + return result; + } - public static String decrypt( final String message, final String key) - { - String result =""; - - for(int i = 0, j = 0; i < message.length(); i++){ - - char c = message.charAt(i); - if (Character.isLetter(c)){ - if(Character.isUpperCase(c)) { - result += ((char)('Z'-(25-(c-key.toUpperCase().charAt(j)))%26)); - - } else { - result += ((char)('z'-(25-(c-key.toLowerCase().charAt(j)))%26)); + public static String decrypt(final String message, final String key) { + String result = ""; - } - } else { - result+=c; - } + for (int i = 0, j = 0; i < message.length(); i++) { - j = ++j % key.length(); + char c = message.charAt(i); + if (Character.isLetter(c)) { + if (Character.isUpperCase(c)) { + result += ((char) ('Z' - (25 - (c - key.toUpperCase().charAt(j))) % 26)); + } else { + result += ((char) ('z' - (25 - (c - key.toLowerCase().charAt(j))) % 26)); } - return result; - } - public static void main (String [] args){ - String text="Hello World!"; - String key="itsakey"; - System.out.println(text); - String ciphertext=encrypt(text, key); - System.out.println(ciphertext); - System.out.println(decrypt(ciphertext, key)); + } else { + result += c; + } + j = ++j % key.length(); } + return result; + } + + public static void main(String[] args) { + String text = "Hello World!"; + String key = "itsakey"; + System.out.println(text); + String ciphertext = encrypt(text, key); + System.out.println(ciphertext); + System.out.println(decrypt(ciphertext, key)); + } } diff --git a/divideconquer/ClosestPair.java b/divideconquer/ClosestPair.java index 3d717417a80c..1eeced4ee8db 100644 --- a/divideconquer/ClosestPair.java +++ b/divideconquer/ClosestPair.java @@ -1,378 +1,338 @@ package divideconquer; /** - * For a set of points in a coordinates system (10000 maximum), - * ClosestPair class calculates the two closest points. + * For a set of points in a coordinates system (10000 maximum), ClosestPair class calculates the two + * closest points. * * @author: anonymous * @author: Marisa Afuera */ - public final class ClosestPair { + /** Number of points */ + int numberPoints = 0; + /** Input data, maximum 10000. */ + private Location[] array; + /** Minimum point coordinate. */ + Location point1 = null; + /** Minimum point coordinate. */ + Location point2 = null; + /** Minimum point length. */ + private static double minNum = Double.MAX_VALUE; - /** - * Number of points - */ - int numberPoints = 0; - /** - * Input data, maximum 10000. - */ - private Location[] array; - /** - * Minimum point coordinate. - */ - Location point1 = null; - /** - * Minimum point coordinate. - */ - Location point2 = null; - /** - * Minimum point length. - */ - private static double minNum = Double.MAX_VALUE; - - public static void setMinNum(double minNum) { - ClosestPair.minNum = minNum; - } - - public static void setSecondCount(int secondCount) { - ClosestPair.secondCount = secondCount; - } - - /** - * secondCount - */ - private static int secondCount = 0; - - /** - * Constructor. - */ - ClosestPair(int points) { - numberPoints = points; - array = new Location[numberPoints]; - } - - /** - * Location class is an auxiliary type to keep points coordinates. - */ - - public static class Location { + public static void setMinNum(double minNum) { + ClosestPair.minNum = minNum; + } - double x = 0; - double y = 0; + public static void setSecondCount(int secondCount) { + ClosestPair.secondCount = secondCount; + } - /** - * @param xpar (IN Parameter) x coordinate
- * @param ypar (IN Parameter) y coordinate
- */ + /** secondCount */ + private static int secondCount = 0; - Location(final double xpar, final double ypar) { //Save x, y coordinates - this.x = xpar; - this.y = ypar; - } + /** Constructor. */ + ClosestPair(int points) { + numberPoints = points; + array = new Location[numberPoints]; + } - } - - public Location[] createLocation(int numberValues) { - return new Location[numberValues]; - - } - - public Location buildLocation(double x, double y) { - return new Location(x, y); - } + /** Location class is an auxiliary type to keep points coordinates. */ + public static class Location { + double x = 0; + double y = 0; /** - * xPartition function: arrange x-axis. - * - * @param a (IN Parameter) array of points
- * @param first (IN Parameter) first point
- * @param last (IN Parameter) last point
- * @return pivot index + * @param xpar (IN Parameter) x coordinate
+ * @param ypar (IN Parameter) y coordinate
*/ - - public int xPartition( - final Location[] a, final int first, final int last) { - - Location pivot = a[last]; // pivot - int i = first - 1; - Location temp; // Temporarily store value for position transformation - for (int j = first; j <= last - 1; j++) { - if (a[j].x <= pivot.x) { // Less than or less than pivot - i++; - temp = a[i]; // array[i] <-> array[j] - a[i] = a[j]; - a[j] = temp; - } - } + Location(final double xpar, final double ypar) { // Save x, y coordinates + this.x = xpar; + this.y = ypar; + } + } + + public Location[] createLocation(int numberValues) { + return new Location[numberValues]; + } + + public Location buildLocation(double x, double y) { + return new Location(x, y); + } + + /** + * xPartition function: arrange x-axis. + * + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ * @return pivot index + */ + public int xPartition(final Location[] a, final int first, final int last) { + + Location pivot = a[last]; // pivot + int i = first - 1; + Location temp; // Temporarily store value for position transformation + for (int j = first; j <= last - 1; j++) { + if (a[j].x <= pivot.x) { // Less than or less than pivot i++; - temp = a[i]; // array[pivot] <-> array[i] - a[i] = a[last]; - a[last] = temp; - return i; // pivot index + temp = a[i]; // array[i] <-> array[j] + a[i] = a[j]; + a[j] = temp; + } } - - /** - * yPartition function: arrange y-axis. - * - * @param a (IN Parameter) array of points
- * @param first (IN Parameter) first point
- * @param last (IN Parameter) last point
- * @return pivot index - */ - - public int yPartition( - final Location[] a, final int first, final int last) { - - Location pivot = a[last]; // pivot - int i = first - 1; - Location temp; // Temporarily store value for position transformation - for (int j = first; j <= last - 1; j++) { - if (a[j].y <= pivot.y) { // Less than or less than pivot - i++; - temp = a[i]; // array[i] <-> array[j] - a[i] = a[j]; - a[j] = temp; - } - } + i++; + temp = a[i]; // array[pivot] <-> array[i] + a[i] = a[last]; + a[last] = temp; + return i; // pivot index + } + + /** + * yPartition function: arrange y-axis. + * + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ * @return pivot index + */ + public int yPartition(final Location[] a, final int first, final int last) { + + Location pivot = a[last]; // pivot + int i = first - 1; + Location temp; // Temporarily store value for position transformation + for (int j = first; j <= last - 1; j++) { + if (a[j].y <= pivot.y) { // Less than or less than pivot i++; - temp = a[i]; // array[pivot] <-> array[i] - a[i] = a[last]; - a[last] = temp; - return i; // pivot index + temp = a[i]; // array[i] <-> array[j] + a[i] = a[j]; + a[j] = temp; + } } - - /** - * xQuickSort function: //x-axis Quick Sorting. - * - * @param a (IN Parameter) array of points
- * @param first (IN Parameter) first point
- * @param last (IN Parameter) last point
- */ - - public void xQuickSort( - final Location[] a, final int first, final int last) { - - if (first < last) { - int q = xPartition(a, first, last); // pivot - xQuickSort(a, first, q - 1); // Left - xQuickSort(a, q + 1, last); // Right - } + i++; + temp = a[i]; // array[pivot] <-> array[i] + a[i] = a[last]; + a[last] = temp; + return i; // pivot index + } + + /** + * xQuickSort function: //x-axis Quick Sorting. + * + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ */ + public void xQuickSort(final Location[] a, final int first, final int last) { + + if (first < last) { + int q = xPartition(a, first, last); // pivot + xQuickSort(a, first, q - 1); // Left + xQuickSort(a, q + 1, last); // Right } - - /** - * yQuickSort function: //y-axis Quick Sorting. - * - * @param a (IN Parameter) array of points
- * @param first (IN Parameter) first point
- * @param last (IN Parameter) last point
- */ - - public void yQuickSort( - final Location[] a, final int first, final int last) { - - if (first < last) { - int q = yPartition(a, first, last); // pivot - yQuickSort(a, first, q - 1); // Left - yQuickSort(a, q + 1, last); // Right - } + } + + /** + * yQuickSort function: //y-axis Quick Sorting. + * + * @param a (IN Parameter) array of points
+ * @param first (IN Parameter) first point
+ * @param last (IN Parameter) last point
+ */ + public void yQuickSort(final Location[] a, final int first, final int last) { + + if (first < last) { + int q = yPartition(a, first, last); // pivot + yQuickSort(a, first, q - 1); // Left + yQuickSort(a, q + 1, last); // Right } - - /** - * closestPair function: find closest pair. - * - * @param a (IN Parameter) array stored before divide
- * @param indexNum (IN Parameter) number coordinates divideArray
- * @return minimum distance
- */ - - public double closestPair(final Location[] a, final int indexNum) { - - Location[] divideArray = new Location[indexNum]; - System.arraycopy(a, 0, divideArray, 0, indexNum); // Copy previous array - int divideX = indexNum / 2; // Intermediate value for divide - Location[] leftArray = new Location[divideX]; //divide - left array - //divide-right array - Location[] rightArray = new Location[indexNum - divideX]; - if (indexNum <= 3) { // If the number of coordinates is 3 or less - return bruteForce(divideArray); - } - //divide-left array - System.arraycopy(divideArray, 0, leftArray, 0, divideX); - //divide-right array - System.arraycopy( - divideArray, divideX, rightArray, 0, indexNum - divideX); - - double minLeftArea = 0; //Minimum length of left array - double minRightArea = 0; //Minimum length of right array - double minValue = 0; //Minimum lengt - - minLeftArea = closestPair(leftArray, divideX); // recursive closestPair - minRightArea = closestPair(rightArray, indexNum - divideX); - // window size (= minimum length) - minValue = Math.min(minLeftArea, minRightArea); - - // Create window. Set the size for creating a window - // and creating a new array for the coordinates in the window - for (int i = 0; i < indexNum; i++) { - double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); - if (xGap < minValue) { - ClosestPair.setSecondCount(secondCount + 1); // size of the array - } else { - if (divideArray[i].x > divideArray[divideX].x) { - break; - } - } - } - // new array for coordinates in window - Location[] firstWindow = new Location[secondCount]; - int k = 0; - for (int i = 0; i < indexNum; i++) { - double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); - if (xGap < minValue) { // if it's inside a window - firstWindow[k] = divideArray[i]; // put in an array - k++; - } else { - if (divideArray[i].x > divideArray[divideX].x) { - break; - } - } + } + + /** + * closestPair function: find closest pair. + * + * @param a (IN Parameter) array stored before divide
+ * @param indexNum (IN Parameter) number coordinates divideArray
+ * @return minimum distance
+ */ + public double closestPair(final Location[] a, final int indexNum) { + + Location[] divideArray = new Location[indexNum]; + System.arraycopy(a, 0, divideArray, 0, indexNum); // Copy previous array + int divideX = indexNum / 2; // Intermediate value for divide + Location[] leftArray = new Location[divideX]; // divide - left array + // divide-right array + Location[] rightArray = new Location[indexNum - divideX]; + if (indexNum <= 3) { // If the number of coordinates is 3 or less + return bruteForce(divideArray); + } + // divide-left array + System.arraycopy(divideArray, 0, leftArray, 0, divideX); + // divide-right array + System.arraycopy(divideArray, divideX, rightArray, 0, indexNum - divideX); + + double minLeftArea = 0; // Minimum length of left array + double minRightArea = 0; // Minimum length of right array + double minValue = 0; // Minimum lengt + + minLeftArea = closestPair(leftArray, divideX); // recursive closestPair + minRightArea = closestPair(rightArray, indexNum - divideX); + // window size (= minimum length) + minValue = Math.min(minLeftArea, minRightArea); + + // Create window. Set the size for creating a window + // and creating a new array for the coordinates in the window + for (int i = 0; i < indexNum; i++) { + double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); + if (xGap < minValue) { + ClosestPair.setSecondCount(secondCount + 1); // size of the array + } else { + if (divideArray[i].x > divideArray[divideX].x) { + break; } - yQuickSort(firstWindow, 0, secondCount - 1); // Sort by y coordinates - /* Coordinates in Window */ - double length = 0; - // size comparison within window - for (int i = 0; i < secondCount - 1; i++) { - for (int j = (i + 1); j < secondCount; j++) { - double xGap = Math.abs(firstWindow[i].x - firstWindow[j].x); - double yGap = Math.abs(firstWindow[i].y - firstWindow[j].y); - if (yGap < minValue) { - length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); - // If measured distance is less than current min distance - if (length < minValue) { - // Change minimum distance to current distance - minValue = length; - // Conditional for registering final coordinate - if (length < minNum) { - ClosestPair.setMinNum(length); - point1 = firstWindow[i]; - point2 = firstWindow[j]; - } - } - } else { - break; - } - } + } + } + // new array for coordinates in window + Location[] firstWindow = new Location[secondCount]; + int k = 0; + for (int i = 0; i < indexNum; i++) { + double xGap = Math.abs(divideArray[divideX].x - divideArray[i].x); + if (xGap < minValue) { // if it's inside a window + firstWindow[k] = divideArray[i]; // put in an array + k++; + } else { + if (divideArray[i].x > divideArray[divideX].x) { + break; } - ClosestPair.setSecondCount(0); - return minValue; + } } - - /** - * bruteForce function: When the number of coordinates is less than 3. - * - * @param arrayParam (IN Parameter) array stored before divide
- * @return
- */ - - public double bruteForce(final Location[] arrayParam) { - - double minValue = Double.MAX_VALUE; // minimum distance - double length = 0; - double xGap = 0; // Difference between x coordinates - double yGap = 0; // Difference between y coordinates - double result = 0; - - if (arrayParam.length == 2) { - // Difference between x coordinates - xGap = (arrayParam[0].x - arrayParam[1].x); - // Difference between y coordinates - yGap = (arrayParam[0].y - arrayParam[1].y); - // distance between coordinates - length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); - // Conditional statement for registering final coordinate + yQuickSort(firstWindow, 0, secondCount - 1); // Sort by y coordinates + /* Coordinates in Window */ + double length = 0; + // size comparison within window + for (int i = 0; i < secondCount - 1; i++) { + for (int j = (i + 1); j < secondCount; j++) { + double xGap = Math.abs(firstWindow[i].x - firstWindow[j].x); + double yGap = Math.abs(firstWindow[i].y - firstWindow[j].y); + if (yGap < minValue) { + length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // If measured distance is less than current min distance + if (length < minValue) { + // Change minimum distance to current distance + minValue = length; + // Conditional for registering final coordinate if (length < minNum) { - ClosestPair.setMinNum(length); - + ClosestPair.setMinNum(length); + point1 = firstWindow[i]; + point2 = firstWindow[j]; } - point1 = arrayParam[0]; - point2 = arrayParam[1]; - result = length; + } + } else { + break; } - if (arrayParam.length == 3) { - for (int i = 0; i < arrayParam.length - 1; i++) { - for (int j = (i + 1); j < arrayParam.length; j++) { - // Difference between x coordinates - xGap = (arrayParam[i].x - arrayParam[j].x); - // Difference between y coordinates - yGap = (arrayParam[i].y - arrayParam[j].y); - // distance between coordinates - length = - Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); - // If measured distance is less than current min distance - if (length < minValue) { - // Change minimum distance to current distance - minValue = length; - if (length < minNum) { - // Registering final coordinate - ClosestPair.setMinNum(length); - point1 = arrayParam[i]; - point2 = arrayParam[j]; - } - } - } + } + } + ClosestPair.setSecondCount(0); + return minValue; + } + + /** + * bruteForce function: When the number of coordinates is less than 3. + * + * @param arrayParam (IN Parameter) array stored before divide
+ * @return
+ */ + public double bruteForce(final Location[] arrayParam) { + + double minValue = Double.MAX_VALUE; // minimum distance + double length = 0; + double xGap = 0; // Difference between x coordinates + double yGap = 0; // Difference between y coordinates + double result = 0; + + if (arrayParam.length == 2) { + // Difference between x coordinates + xGap = (arrayParam[0].x - arrayParam[1].x); + // Difference between y coordinates + yGap = (arrayParam[0].y - arrayParam[1].y); + // distance between coordinates + length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // Conditional statement for registering final coordinate + if (length < minNum) { + ClosestPair.setMinNum(length); + } + point1 = arrayParam[0]; + point2 = arrayParam[1]; + result = length; + } + if (arrayParam.length == 3) { + for (int i = 0; i < arrayParam.length - 1; i++) { + for (int j = (i + 1); j < arrayParam.length; j++) { + // Difference between x coordinates + xGap = (arrayParam[i].x - arrayParam[j].x); + // Difference between y coordinates + yGap = (arrayParam[i].y - arrayParam[j].y); + // distance between coordinates + length = Math.sqrt(Math.pow(xGap, 2) + Math.pow(yGap, 2)); + // If measured distance is less than current min distance + if (length < minValue) { + // Change minimum distance to current distance + minValue = length; + if (length < minNum) { + // Registering final coordinate + ClosestPair.setMinNum(length); + point1 = arrayParam[i]; + point2 = arrayParam[j]; } - result = minValue; - + } } - return result; // If only one point returns 0. + } + result = minValue; + } + return result; // If only one point returns 0. + } + + /** + * main function: execute class. + * + * @param args (IN Parameter)
+ * @throws IOException If an input or output exception occurred + */ + public static void main(final String[] args) { + + // Input data consists of one x-coordinate and one y-coordinate + + ClosestPair cp = new ClosestPair(12); + cp.array[0] = cp.buildLocation(2, 3); + cp.array[1] = cp.buildLocation(2, 16); + cp.array[2] = cp.buildLocation(3, 9); + cp.array[3] = cp.buildLocation(6, 3); + cp.array[4] = cp.buildLocation(7, 7); + cp.array[5] = cp.buildLocation(19, 4); + cp.array[6] = cp.buildLocation(10, 11); + cp.array[7] = cp.buildLocation(15, 2); + cp.array[8] = cp.buildLocation(15, 19); + cp.array[9] = cp.buildLocation(16, 11); + cp.array[10] = cp.buildLocation(17, 13); + cp.array[11] = cp.buildLocation(9, 12); + + System.out.println("Input data"); + System.out.println("Number of points: " + cp.array.length); + for (int i = 0; i < cp.array.length; i++) { + System.out.println("x: " + cp.array[i].x + ", y: " + cp.array[i].y); } - /** - * main function: execute class. - * - * @param args (IN Parameter)
- * @throws IOException If an input or output - * exception occurred - */ - - public static void main(final String[] args) { - - //Input data consists of one x-coordinate and one y-coordinate - - ClosestPair cp = new ClosestPair(12); - cp.array[0] = cp.buildLocation(2, 3); - cp.array[1] = cp.buildLocation(2, 16); - cp.array[2] = cp.buildLocation(3, 9); - cp.array[3] = cp.buildLocation(6, 3); - cp.array[4] = cp.buildLocation(7, 7); - cp.array[5] = cp.buildLocation(19, 4); - cp.array[6] = cp.buildLocation(10, 11); - cp.array[7] = cp.buildLocation(15, 2); - cp.array[8] = cp.buildLocation(15, 19); - cp.array[9] = cp.buildLocation(16, 11); - cp.array[10] = cp.buildLocation(17, 13); - cp.array[11] = cp.buildLocation(9, 12); - - System.out.println("Input data"); - System.out.println("Number of points: " + cp.array.length); - for (int i = 0; i < cp.array.length; i++) { - System.out.println("x: " + cp.array[i].x + ", y: " + cp.array[i].y); - } - - cp.xQuickSort(cp.array, 0, cp.array.length - 1); // Sorting by x value - - double result; // minimum distance + cp.xQuickSort(cp.array, 0, cp.array.length - 1); // Sorting by x value - result = cp.closestPair(cp.array, cp.array.length); - // ClosestPair start - // minimum distance coordinates and distance output - System.out.println("Output Data"); - System.out.println("(" + cp.point1.x + ", " + cp.point1.y + ")"); - System.out.println("(" + cp.point2.x + ", " + cp.point2.y + ")"); - System.out.println("Minimum Distance : " + result); + double result; // minimum distance - } + result = cp.closestPair(cp.array, cp.array.length); + // ClosestPair start + // minimum distance coordinates and distance output + System.out.println("Output Data"); + System.out.println("(" + cp.point1.x + ", " + cp.point1.y + ")"); + System.out.println("(" + cp.point2.x + ", " + cp.point2.y + ")"); + System.out.println("Minimum Distance : " + result); + } } diff --git a/divideconquer/SkylineAlgorithm.java b/divideconquer/SkylineAlgorithm.java index 081cc7800bc3..e5f280f07953 100644 --- a/divideconquer/SkylineAlgorithm.java +++ b/divideconquer/SkylineAlgorithm.java @@ -5,182 +5,165 @@ /** * @author dimgrichr - *

- * Space complexity: O(n) - * Time complexity: O(nlogn), because it is a divide and conquer algorithm + *

Space complexity: O(n) Time complexity: O(nlogn), because it is a divide and conquer + * algorithm */ public class SkylineAlgorithm { - private ArrayList points; - - /** - * Main constructor of the application. - * ArrayList points gets created, which represents the sum of all edges. - */ - public SkylineAlgorithm() { - points = new ArrayList<>(); + private ArrayList points; + + /** + * Main constructor of the application. ArrayList points gets created, which represents the sum of + * all edges. + */ + public SkylineAlgorithm() { + points = new ArrayList<>(); + } + + /** @return points, the ArrayList that includes all points. */ + public ArrayList getPoints() { + return points; + } + + /** + * The main divide and conquer, and also recursive algorithm. It gets an ArrayList full of points + * as an argument. If the size of that ArrayList is 1 or 2, the ArrayList is returned as it is, or + * with one less point (if the initial size is 2 and one of it's points, is dominated by the other + * one). On the other hand, if the ArrayList's size is bigger than 2, the function is called + * again, twice, with arguments the corresponding half of the initial ArrayList each time. Once + * the flashback has ended, the function produceFinalSkyLine gets called, in order to produce the + * final skyline, and return it. + * + * @param list, the initial list of points + * @return leftSkyLine, the combination of first half's and second half's skyline + * @see Point + */ + public ArrayList produceSubSkyLines(ArrayList list) { + + // part where function exits flashback + int size = list.size(); + if (size == 1) { + return list; + } else if (size == 2) { + if (list.get(0).dominates(list.get(1))) { + list.remove(1); + } else { + if (list.get(1).dominates(list.get(0))) { + list.remove(0); + } + } + return list; } - - /** - * @return points, the ArrayList that includes all points. - */ - public ArrayList getPoints() { - return points; + // recursive part of the function + ArrayList leftHalf = new ArrayList<>(); + ArrayList rightHalf = new ArrayList<>(); + for (int i = 0; i < list.size(); i++) { + if (i < list.size() / 2) { + leftHalf.add(list.get(i)); + } else { + rightHalf.add(list.get(i)); + } + } + ArrayList leftSubSkyLine = produceSubSkyLines(leftHalf); + ArrayList rightSubSkyLine = produceSubSkyLines(rightHalf); + + // skyline is produced + return produceFinalSkyLine(leftSubSkyLine, rightSubSkyLine); + } + + /** + * The first half's skyline gets cleared from some points that are not part of the final skyline + * (Points with same x-value and different y=values. The point with the smallest y-value is kept). + * Then, the minimum y-value of the points of first half's skyline is found. That helps us to + * clear the second half's skyline, because, the points of second half's skyline that have greater + * y-value of the minimum y-value that we found before, are dominated, so they are not part of the + * final skyline. Finally, the "cleaned" first half's and second half's skylines, are combined, + * producing the final skyline, which is returned. + * + * @param left the skyline of the left part of points + * @param right the skyline of the right part of points + * @return left the final skyline + */ + public ArrayList produceFinalSkyLine(ArrayList left, ArrayList right) { + + // dominated points of ArrayList left are removed + for (int i = 0; i < left.size() - 1; i++) { + if (left.get(i).x == left.get(i + 1).x && left.get(i).y > left.get(i + 1).y) { + left.remove(i); + i--; + } } - - /** - * The main divide and conquer, and also recursive algorithm. - * It gets an ArrayList full of points as an argument. - * If the size of that ArrayList is 1 or 2, - * the ArrayList is returned as it is, or with one less point - * (if the initial size is 2 and one of it's points, is dominated by the other one). - * On the other hand, if the ArrayList's size is bigger than 2, - * the function is called again, twice, - * with arguments the corresponding half of the initial ArrayList each time. - * Once the flashback has ended, the function produceFinalSkyLine gets called, - * in order to produce the final skyline, and return it. - * - * @param list, the initial list of points - * @return leftSkyLine, the combination of first half's and second half's skyline - * @see Point - */ - public ArrayList produceSubSkyLines(ArrayList list) { - - // part where function exits flashback - int size = list.size(); - if (size == 1) { - return list; - } else if (size == 2) { - if (list.get(0).dominates(list.get(1))) { - list.remove(1); - } else { - if (list.get(1).dominates(list.get(0))) { - list.remove(0); - } - } - return list; - } - - // recursive part of the function - ArrayList leftHalf = new ArrayList<>(); - ArrayList rightHalf = new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - if (i < list.size() / 2) { - leftHalf.add(list.get(i)); - } else { - rightHalf.add(list.get(i)); - } + // minimum y-value is found + int min = left.get(0).y; + for (int i = 1; i < left.size(); i++) { + if (min > left.get(i).y) { + min = left.get(i).y; + if (min == 1) { + i = left.size(); } - ArrayList leftSubSkyLine = produceSubSkyLines(leftHalf); - ArrayList rightSubSkyLine = produceSubSkyLines(rightHalf); + } + } - // skyline is produced - return produceFinalSkyLine(leftSubSkyLine, rightSubSkyLine); + // dominated points of ArrayList right are removed + for (int i = 0; i < right.size(); i++) { + if (right.get(i).y >= min) { + right.remove(i); + i--; + } } + // final skyline found and returned + left.addAll(right); + return left; + } + + public static class Point { + private int x; + private int y; /** - * The first half's skyline gets cleared - * from some points that are not part of the final skyline - * (Points with same x-value and different y=values. The point with the smallest y-value is kept). - * Then, the minimum y-value of the points of first half's skyline is found. - * That helps us to clear the second half's skyline, because, the points - * of second half's skyline that have greater y-value of the minimum y-value that we found before, - * are dominated, so they are not part of the final skyline. - * Finally, the "cleaned" first half's and second half's skylines, are combined, - * producing the final skyline, which is returned. + * The main constructor of Point Class, used to represent the 2 Dimension points. * - * @param left the skyline of the left part of points - * @param right the skyline of the right part of points - * @return left the final skyline + * @param x the point's x-value. + * @param y the point's y-value. */ - public ArrayList produceFinalSkyLine(ArrayList left, ArrayList right) { - - // dominated points of ArrayList left are removed - for (int i = 0; i < left.size() - 1; i++) { - if (left.get(i).x == left.get(i + 1).x && left.get(i).y > left.get(i + 1).y) { - left.remove(i); - i--; - } - } - - // minimum y-value is found - int min = left.get(0).y; - for (int i = 1; i < left.size(); i++) { - if (min > left.get(i).y) { - min = left.get(i).y; - if (min == 1) { - i = left.size(); - } - } - } - - // dominated points of ArrayList right are removed - for (int i = 0; i < right.size(); i++) { - if (right.get(i).y >= min) { - right.remove(i); - i--; - } - } - - // final skyline found and returned - left.addAll(right); - return left; + public Point(int x, int y) { + this.x = x; + this.y = y; } + /** @return x, the x-value */ + public int getX() { + return x; + } - public static class Point { - private int x; - private int y; - - /** - * The main constructor of Point Class, used to represent the 2 Dimension points. - * - * @param x the point's x-value. - * @param y the point's y-value. - */ - public Point(int x, int y) { - this.x = x; - this.y = y; - } - - /** - * @return x, the x-value - */ - public int getX() { - return x; - } - - /** - * @return y, the y-value - */ - public int getY() { - return y; - } - - /** - * Based on the skyline theory, - * it checks if the point that calls the function dominates the argument point. - * - * @param p1 the point that is compared - * @return true if the point wich calls the function dominates p1 - * false otherwise. - */ - public boolean dominates(Point p1) { - // checks if p1 is dominated - return (this.x < p1.x && this.y <= p1.y) || (this.x <= p1.x && this.y < p1.y); - } + /** @return y, the y-value */ + public int getY() { + return y; } /** - * It is used to compare the 2 Dimension points, - * based on their x-values, in order get sorted later. + * Based on the skyline theory, it checks if the point that calls the function dominates the + * argument point. + * + * @param p1 the point that is compared + * @return true if the point wich calls the function dominates p1 false otherwise. */ - class XComparator implements Comparator { - @Override - public int compare(Point a, Point b) { - return Integer.compare(a.x, b.x); - } + public boolean dominates(Point p1) { + // checks if p1 is dominated + return (this.x < p1.x && this.y <= p1.y) || (this.x <= p1.x && this.y < p1.y); + } + } + + /** + * It is used to compare the 2 Dimension points, based on their x-values, in order get sorted + * later. + */ + class XComparator implements Comparator { + @Override + public int compare(Point a, Point b) { + return Integer.compare(a.x, b.x); } + } } diff --git a/strings/Alphabetical.java b/strings/Alphabetical.java index babf542bf01f..67620eae5367 100644 --- a/strings/Alphabetical.java +++ b/strings/Alphabetical.java @@ -1,35 +1,33 @@ package strings; /** - *

- * Alphabetical order is a system whereby character strings are placed in order - * based on the position of the characters in the conventional ordering of an alphabet. - *

- * Wikipedia: https://en.wikipedia.org/wiki/Alphabetical_order + * Alphabetical order is a system whereby character strings are placed in order based on the + * position of the characters in the conventional ordering of an alphabet. Wikipedia: + * https://en.wikipedia.org/wiki/Alphabetical_order */ class Alphabetical { - public static void main(String[] args) { - assert !isAlphabetical("123abc"); - assert isAlphabetical("aBC"); - assert isAlphabetical("abc"); - assert !isAlphabetical("xyzabc"); - assert isAlphabetical("abcxyz"); - } + public static void main(String[] args) { + assert !isAlphabetical("123abc"); + assert isAlphabetical("aBC"); + assert isAlphabetical("abc"); + assert !isAlphabetical("xyzabc"); + assert isAlphabetical("abcxyz"); + } - /** - * Check if a string is alphabetical order or not - * - * @param s a string - * @return {@code true} if given string is alphabetical order, otherwise {@code false} - */ - public static boolean isAlphabetical(String s) { - s = s.toLowerCase(); - for (int i = 0; i < s.length() - 1; ++i) { - if (!Character.isLetter(s.charAt(i)) || !(s.charAt(i) <= s.charAt(i + 1))) { - return false; - } - } - return true; + /** + * Check if a string is alphabetical order or not + * + * @param s a string + * @return {@code true} if given string is alphabetical order, otherwise {@code false} + */ + public static boolean isAlphabetical(String s) { + s = s.toLowerCase(); + for (int i = 0; i < s.length() - 1; ++i) { + if (!Character.isLetter(s.charAt(i)) || !(s.charAt(i) <= s.charAt(i + 1))) { + return false; + } } -} \ No newline at end of file + return true; + } +} diff --git a/strings/CharactersSame.java b/strings/CharactersSame.java index d88c03209d88..26ccbd4f0c24 100644 --- a/strings/CharactersSame.java +++ b/strings/CharactersSame.java @@ -2,28 +2,26 @@ public class CharactersSame { - /** - * Driver Code - */ - public static void main(String[] args) { - assert isAllCharactersSame(""); - assert !isAllCharactersSame("aab"); - assert isAllCharactersSame("aaa"); - assert isAllCharactersSame("11111"); - } + /** Driver Code */ + public static void main(String[] args) { + assert isAllCharactersSame(""); + assert !isAllCharactersSame("aab"); + assert isAllCharactersSame("aaa"); + assert isAllCharactersSame("11111"); + } - /** - * check if all the characters of a string are same - * - * @param s the string to check - * @return {@code true} if all characters of a string are same, otherwise {@code false} - */ - public static boolean isAllCharactersSame(String s) { - for (int i = 1, length = s.length(); i < length; ++i) { - if (s.charAt(i) != s.charAt(0)) { - return false; - } - } - return true; + /** + * check if all the characters of a string are same + * + * @param s the string to check + * @return {@code true} if all characters of a string are same, otherwise {@code false} + */ + public static boolean isAllCharactersSame(String s) { + for (int i = 1, length = s.length(); i < length; ++i) { + if (s.charAt(i) != s.charAt(0)) { + return false; + } } + return true; + } } diff --git a/strings/CheckAnagrams.java b/strings/CheckAnagrams.java index 46642e01e4b7..20ab715acede 100644 --- a/strings/CheckAnagrams.java +++ b/strings/CheckAnagrams.java @@ -3,30 +3,30 @@ import java.util.Arrays; /** - * Two strings are anagrams if they are made of the same letters - * arranged differently (ignoring the case). + * Two strings are anagrams if they are made of the same letters arranged differently (ignoring the + * case). */ public class CheckAnagrams { - public static void main(String[] args) { - assert isAnagrams("Silent", "Listen"); - assert isAnagrams("This is a string", "Is this a string"); - assert !isAnagrams("There", "Their"); - } + public static void main(String[] args) { + assert isAnagrams("Silent", "Listen"); + assert isAnagrams("This is a string", "Is this a string"); + assert !isAnagrams("There", "Their"); + } - /** - * Check if two strings are anagrams or not - * - * @param s1 the first string - * @param s2 the second string - * @return {@code true} if two string are anagrams, otherwise {@code false} - */ - public static boolean isAnagrams(String s1, String s2) { - s1 = s1.toLowerCase(); - s2 = s2.toLowerCase(); - char[] values1 = s1.toCharArray(); - char[] values2 = s2.toCharArray(); - Arrays.sort(values1); - Arrays.sort(values2); - return new String(values1).equals(new String(values2)); - } + /** + * Check if two strings are anagrams or not + * + * @param s1 the first string + * @param s2 the second string + * @return {@code true} if two string are anagrams, otherwise {@code false} + */ + public static boolean isAnagrams(String s1, String s2) { + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + char[] values1 = s1.toCharArray(); + char[] values2 = s2.toCharArray(); + Arrays.sort(values1); + Arrays.sort(values2); + return new String(values1).equals(new String(values2)); + } } diff --git a/strings/Lower.java b/strings/Lower.java index 15cc027eb785..4746e787cd2e 100644 --- a/strings/Lower.java +++ b/strings/Lower.java @@ -2,29 +2,27 @@ public class Lower { - /** - * Driver Code - */ - public static void main(String[] args) { - String[] strings = {"ABC", "ABC123", "abcABC", "abc123ABC"}; - for (String s : strings) { - assert toLowerCase(s).equals(s.toLowerCase()); - } + /** Driver Code */ + public static void main(String[] args) { + String[] strings = {"ABC", "ABC123", "abcABC", "abc123ABC"}; + for (String s : strings) { + assert toLowerCase(s).equals(s.toLowerCase()); } + } - /** - * Converts all of the characters in this {@code String} to lower case - * - * @param s the string to convert - * @return the {@code String}, converted to lowercase. - */ - public static String toLowerCase(String s) { - char[] values = s.toCharArray(); - for (int i = 0; i < values.length; ++i) { - if (Character.isLetter(values[i]) && Character.isUpperCase(values[i])) { - values[i] = Character.toLowerCase(values[i]); - } - } - return new String(values); + /** + * Converts all of the characters in this {@code String} to lower case + * + * @param s the string to convert + * @return the {@code String}, converted to lowercase. + */ + public static String toLowerCase(String s) { + char[] values = s.toCharArray(); + for (int i = 0; i < values.length; ++i) { + if (Character.isLetter(values[i]) && Character.isUpperCase(values[i])) { + values[i] = Character.toLowerCase(values[i]); + } } + return new String(values); + } } diff --git a/strings/Palindrome.java b/strings/Palindrome.java index 8f95a83a0787..9f77b4c38d04 100644 --- a/strings/Palindrome.java +++ b/strings/Palindrome.java @@ -1,68 +1,64 @@ package strings; -/** - * Wikipedia: https://en.wikipedia.org/wiki/Palindrome - */ +/** Wikipedia: https://en.wikipedia.org/wiki/Palindrome */ class Palindrome { - /** - * Driver Code - */ - public static void main(String[] args) { - String[] palindromes = {null, "", "aba", "123321"}; - for (String s : palindromes) { - assert isPalindrome(s) && isPalindromeRecursion(s) && isPalindrome1(s); - } - - String[] notPalindromes = {"abb", "abc", "abc123"}; - for (String s : notPalindromes) { - assert !isPalindrome(s) && !isPalindromeRecursion(s) && !isPalindrome1(s); - } + /** Driver Code */ + public static void main(String[] args) { + String[] palindromes = {null, "", "aba", "123321"}; + for (String s : palindromes) { + assert isPalindrome(s) && isPalindromeRecursion(s) && isPalindrome1(s); } - /** - * Check if a string is palindrome string or not - * - * @param s a string to check - * @return {@code true} if given string is palindrome, otherwise {@code false} - */ - public static boolean isPalindrome(String s) { - return (s == null || s.length() <= 1) || s.equals(new StringBuilder(s).reverse().toString()); + String[] notPalindromes = {"abb", "abc", "abc123"}; + for (String s : notPalindromes) { + assert !isPalindrome(s) && !isPalindromeRecursion(s) && !isPalindrome1(s); } + } - /** - * Check if a string is palindrome string or not using recursion - * - * @param s a string to check - * @return {@code true} if given string is palindrome, otherwise {@code false} - */ - public static boolean isPalindromeRecursion(String s) { - if (s == null || s.length() <= 1) { - return true; - } + /** + * Check if a string is palindrome string or not + * + * @param s a string to check + * @return {@code true} if given string is palindrome, otherwise {@code false} + */ + public static boolean isPalindrome(String s) { + return (s == null || s.length() <= 1) || s.equals(new StringBuilder(s).reverse().toString()); + } - if (s.charAt(0) != s.charAt(s.length() - 1)) { - return false; - } + /** + * Check if a string is palindrome string or not using recursion + * + * @param s a string to check + * @return {@code true} if given string is palindrome, otherwise {@code false} + */ + public static boolean isPalindromeRecursion(String s) { + if (s == null || s.length() <= 1) { + return true; + } - return isPalindrome(s.substring(1, s.length() - 1)); + if (s.charAt(0) != s.charAt(s.length() - 1)) { + return false; } - /** - * Check if a string is palindrome string or not another way - * - * @param s a string to check - * @return {@code true} if given string is palindrome, otherwise {@code false} - */ - public static boolean isPalindrome1(String s) { - if (s == null || s.length() <= 1) { - return true; - } - for (int i = 0, j = s.length() - 1; i < j; ++i, --j) { - if (s.charAt(i) != s.charAt(j)) { - return false; - } - } - return true; + return isPalindrome(s.substring(1, s.length() - 1)); + } + + /** + * Check if a string is palindrome string or not another way + * + * @param s a string to check + * @return {@code true} if given string is palindrome, otherwise {@code false} + */ + public static boolean isPalindrome1(String s) { + if (s == null || s.length() <= 1) { + return true; + } + for (int i = 0, j = s.length() - 1; i < j; ++i, --j) { + if (s.charAt(i) != s.charAt(j)) { + return false; + } } + return true; + } } diff --git a/strings/Pangram.java b/strings/Pangram.java index a18cb12c783e..27fce85a10cf 100644 --- a/strings/Pangram.java +++ b/strings/Pangram.java @@ -1,39 +1,35 @@ package strings; -/** - * Wikipedia: https://en.wikipedia.org/wiki/Pangram - */ +/** Wikipedia: https://en.wikipedia.org/wiki/Pangram */ public class Pangram { - /** - * Driver Code - */ - public static void main(String[] args) { - assert isPangram("The quick brown fox jumps over the lazy dog"); - assert !isPangram("The quick brown fox jumps over the azy dog"); /* not exists l character */ - } + /** Driver Code */ + public static void main(String[] args) { + assert isPangram("The quick brown fox jumps over the lazy dog"); + assert !isPangram("The quick brown fox jumps over the azy dog"); /* not exists l character */ + } - /** - * Check if a string is a pangram string or not - * - * @param s string to check - * @return {@code true} if given string is pangram, otherwise {@code false} - */ - public static boolean isPangram(String s) { - boolean[] marked = new boolean[26]; /* by default all letters don't exists */ - char[] values = s.toCharArray(); - for (char value : values) { - if (Character.isLetter(value)) { - int index = Character.isUpperCase(value) ? value - 'A' : value - 'a'; - marked[index] = true; /* mark current character exists */ - } - } + /** + * Check if a string is a pangram string or not + * + * @param s string to check + * @return {@code true} if given string is pangram, otherwise {@code false} + */ + public static boolean isPangram(String s) { + boolean[] marked = new boolean[26]; /* by default all letters don't exists */ + char[] values = s.toCharArray(); + for (char value : values) { + if (Character.isLetter(value)) { + int index = Character.isUpperCase(value) ? value - 'A' : value - 'a'; + marked[index] = true; /* mark current character exists */ + } + } - for (boolean b : marked) { - if (!b) { - return false; - } - } - return true; + for (boolean b : marked) { + if (!b) { + return false; + } } + return true; + } } diff --git a/strings/ReverseString.java b/strings/ReverseString.java index 71191731fe37..bcbe6925029d 100644 --- a/strings/ReverseString.java +++ b/strings/ReverseString.java @@ -1,44 +1,41 @@ package strings; -/** - * Reverse String using different version - */ +/** Reverse String using different version */ public class ReverseString { - public static void main(String[] args) { - assert reverse("abc123").equals("321cba"); - assert reverse2("abc123").equals("321cba"); - } + public static void main(String[] args) { + assert reverse("abc123").equals("321cba"); + assert reverse2("abc123").equals("321cba"); + } - /** - * easiest way to reverses the string str and returns it - * - * @param str string to be reversed - * @return reversed string - */ - public static String reverse(String str) { - return new StringBuilder(str).reverse().toString(); - } + /** + * easiest way to reverses the string str and returns it + * + * @param str string to be reversed + * @return reversed string + */ + public static String reverse(String str) { + return new StringBuilder(str).reverse().toString(); + } - /** - * second way to reverses the string str and returns it - * - * @param str string to be reversed - * @return reversed string - */ - public static String reverse2(String str) { + /** + * second way to reverses the string str and returns it + * + * @param str string to be reversed + * @return reversed string + */ + public static String reverse2(String str) { - if (str == null || str.isEmpty()) { - return str; - } - - char[] value = str.toCharArray(); - for (int i = 0, j = str.length() - 1; i < j; i++, j--) { - char temp = value[i]; - value[i] = value[j]; - value[j] = temp; - } - return new String(value); + if (str == null || str.isEmpty()) { + return str; } -} \ No newline at end of file + char[] value = str.toCharArray(); + for (int i = 0, j = str.length() - 1; i < j; i++, j--) { + char temp = value[i]; + value[i] = value[j]; + value[j] = temp; + } + return new String(value); + } +} diff --git a/strings/Rotation.java b/strings/Rotation.java index e1f0046f15f4..e855626b3de8 100644 --- a/strings/Rotation.java +++ b/strings/Rotation.java @@ -1,64 +1,58 @@ package strings; - /** - * Given a string, moving several characters - * in front of the string to the end of the string. - * For example, move the two characters'a' and 'b' in - * front of the string "abcdef" to the end of the string, - * so that the original string becomes the string "cdefab" + * Given a string, moving several characters in front of the string to the end of the string. For + * example, move the two characters'a' and 'b' in front of the string "abcdef" to the end of the + * string, so that the original string becomes the string "cdefab" */ public class Rotation { - public static void main(String[] args) { - assert rotation("abcdef", 2).equals("cdefab"); + public static void main(String[] args) { + assert rotation("abcdef", 2).equals("cdefab"); - char[] values = "abcdef".toCharArray(); - rotation(values, 2); - assert new String(values).equals("cdefab"); - } + char[] values = "abcdef".toCharArray(); + rotation(values, 2); + assert new String(values).equals("cdefab"); + } - /** - * Move {@code n} characters in front of given string to the end of string - * time complexity: O(n) - * space complexity: O(n) - * - * @param s given string - * @param n the total characters to be moved - * @return string after rotation - */ - public static String rotation(String s, int n) { - return s.substring(n) + s.substring(0, n); - } + /** + * Move {@code n} characters in front of given string to the end of string time complexity: O(n) + * space complexity: O(n) + * + * @param s given string + * @param n the total characters to be moved + * @return string after rotation + */ + public static String rotation(String s, int n) { + return s.substring(n) + s.substring(0, n); + } - /** - * Move {@code n} characters in front of given character array to the end of array - * time complexity: O(n) - * space complexity: O(1) - * - * @param values given character array - * @param n the total characters to be moved - */ - public static void rotation(char[] values, int n) { - reverse(values, 0, n - 1); - reverse(values, n, values.length - 1); - reverse(values, 0, values.length - 1); - } + /** + * Move {@code n} characters in front of given character array to the end of array time + * complexity: O(n) space complexity: O(1) + * + * @param values given character array + * @param n the total characters to be moved + */ + public static void rotation(char[] values, int n) { + reverse(values, 0, n - 1); + reverse(values, n, values.length - 1); + reverse(values, 0, values.length - 1); + } - /** - * Reverse character array - * - * @param values character array - * @param from begin index of given array - * @param to end index of given array - */ - public static void reverse(char[] values, int from, int to) { - while (from < to) { - char temp = values[from]; - values[from] = values[to]; - values[to] = temp; - from++; - to--; - } + /** + * Reverse character array + * + * @param values character array + * @param from begin index of given array + * @param to end index of given array + */ + public static void reverse(char[] values, int from, int to) { + while (from < to) { + char temp = values[from]; + values[from] = values[to]; + values[to] = temp; + from++; + to--; } - + } } diff --git a/strings/Upper.java b/strings/Upper.java index ef5a616d05f2..22becbf448aa 100644 --- a/strings/Upper.java +++ b/strings/Upper.java @@ -2,29 +2,27 @@ public class Upper { - /** - * Driver Code - */ - public static void main(String[] args) { - String[] strings = {"ABC", "ABC123", "abcABC", "abc123ABC"}; - for (String s : strings) { - assert toUpperCase(s).equals(s.toUpperCase()); - } + /** Driver Code */ + public static void main(String[] args) { + String[] strings = {"ABC", "ABC123", "abcABC", "abc123ABC"}; + for (String s : strings) { + assert toUpperCase(s).equals(s.toUpperCase()); } + } - /** - * Converts all of the characters in this {@code String} to upper case - * - * @param s the string to convert - * @return the {@code String}, converted to uppercase. - */ - public static String toUpperCase(String s) { - char[] values = s.toCharArray(); - for (int i = 0; i < values.length; ++i) { - if (Character.isLetter(values[i]) && Character.isLowerCase(values[i])) { - values[i] = Character.toUpperCase(values[i]); - } - } - return new String(values); + /** + * Converts all of the characters in this {@code String} to upper case + * + * @param s the string to convert + * @return the {@code String}, converted to uppercase. + */ + public static String toUpperCase(String s) { + char[] values = s.toCharArray(); + for (int i = 0; i < values.length; ++i) { + if (Character.isLetter(values[i]) && Character.isLowerCase(values[i])) { + values[i] = Character.toUpperCase(values[i]); + } } + return new String(values); + } } From 0db62bb450e6ed52bdb62986f024f7a88f227ae5 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sat, 24 Oct 2020 10:31:42 +0000 Subject: [PATCH 481/521] Formatted with Google Java Formatter --- Conversions/HexToOct.java | 2 +- DataStructures/Graphs/BellmanFord.java | 6 +++--- DataStructures/Graphs/FloydWarshall.java | 2 +- DataStructures/Heaps/HeapElement.java | 1 - DataStructures/Lists/SinglyLinkedList.java | 4 ++-- Others/BestFit.java | 2 +- Others/GuassLegendre.java | 1 - Others/ReturnSubsequence.java | 6 +++--- Searches/JumpSearch.java | 2 +- 9 files changed, 12 insertions(+), 14 deletions(-) diff --git a/Conversions/HexToOct.java b/Conversions/HexToOct.java index c64f549a6fa5..636548fb0042 100644 --- a/Conversions/HexToOct.java +++ b/Conversions/HexToOct.java @@ -63,7 +63,7 @@ public static void main(String args[]) { decnum = hex2decimal( hexadecnum); // Pass the string to the hex2decimal function and get the decimal form in - // variable decnum + // variable decnum // convert decimal to octal octalnum = decimal2octal(decnum); diff --git a/DataStructures/Graphs/BellmanFord.java b/DataStructures/Graphs/BellmanFord.java index 841277a3a1bf..b817b6dcd5c8 100644 --- a/DataStructures/Graphs/BellmanFord.java +++ b/DataStructures/Graphs/BellmanFord.java @@ -48,7 +48,7 @@ public static void main(String args[]) { public void go() // Interactive run for understanding the class first time. Assumes source vertex is 0 and - // shows distaance to all vertices + // shows distaance to all vertices { Scanner sc = new Scanner(System.in); // Grab scanner object for user input int i, v, e, u, ve, w, j, neg = 0; @@ -66,7 +66,7 @@ public static void main(String args[]) { int dist[] = new int [v]; // Distance array for holding the finalized shortest path distance between source - // and all vertices + // and all vertices int p[] = new int[v]; // Parent array for holding the paths for (i = 0; i < v; i++) dist[i] = Integer.MAX_VALUE; // Initializing distance values dist[0] = 0; @@ -115,7 +115,7 @@ public void show( double dist[] = new double [v]; // Distance array for holding the finalized shortest path distance between source - // and all vertices + // and all vertices int p[] = new int[v]; // Parent array for holding the paths for (i = 0; i < v; i++) dist[i] = Integer.MAX_VALUE; // Initializing distance values dist[source] = 0; diff --git a/DataStructures/Graphs/FloydWarshall.java b/DataStructures/Graphs/FloydWarshall.java index 84cc3eddf6be..017d0cd4a56d 100644 --- a/DataStructures/Graphs/FloydWarshall.java +++ b/DataStructures/Graphs/FloydWarshall.java @@ -13,7 +13,7 @@ public FloydWarshall(int numberofvertices) { new int[numberofvertices + 1] [numberofvertices + 1]; // stores the value of distance from all the possible path form the source - // vertex to destination vertex + // vertex to destination vertex Arrays.fill(DistanceMatrix, 0); this.numberofvertices = numberofvertices; } diff --git a/DataStructures/Heaps/HeapElement.java b/DataStructures/Heaps/HeapElement.java index 5db98783eb7f..e15763bff820 100644 --- a/DataStructures/Heaps/HeapElement.java +++ b/DataStructures/Heaps/HeapElement.java @@ -1,6 +1,5 @@ package DataStructures.Heaps; - /** * Class for heap elements.
* diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index d6b0beba76a6..a1ce500d13e3 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -61,12 +61,12 @@ public void insertNth(int data, int position) { checkBounds(position, 0, size); Node newNode = new Node(data); if (head == null) { - /* the list is empty */ + /* the list is empty */ head = newNode; size++; return; } else if (position == 0) { - /* insert at the head of the list */ + /* insert at the head of the list */ newNode.next = head; head = newNode; size++; diff --git a/Others/BestFit.java b/Others/BestFit.java index bfe775be8475..8eec9f615159 100644 --- a/Others/BestFit.java +++ b/Others/BestFit.java @@ -38,7 +38,7 @@ private static int findBestFit(int[] blockSizes, int processSize) { int minDiff = findMaxElement(blockSizes); int index = NO_ALLOCATION; // If there is no block that can fit the process, return NO_ALLOCATION as the - // result. + // result. for (int i = 0; i < blockSizes.length; i++) { // Find the most fitting memory block for the given process. diff --git a/Others/GuassLegendre.java b/Others/GuassLegendre.java index a1df3e22b346..4b30bdc3fa03 100644 --- a/Others/GuassLegendre.java +++ b/Others/GuassLegendre.java @@ -1,6 +1,5 @@ package Others; - /** * Guass Legendre Algorithm ref https://en.wikipedia.org/wiki/Gauss–Legendre_algorithm * diff --git a/Others/ReturnSubsequence.java b/Others/ReturnSubsequence.java index 67a986867e40..bb080f554345 100644 --- a/Others/ReturnSubsequence.java +++ b/Others/ReturnSubsequence.java @@ -23,7 +23,7 @@ public static void main(String[] args) { private static String[] returnSubsequence(String givenString) { if (givenString.length() == 0) // If string is empty we will create an array of size=1 and insert "" (Empty string) - // in it + // in it { String[] ans = new String[1]; ans[0] = ""; @@ -33,7 +33,7 @@ private static String[] returnSubsequence(String givenString) { returnSubsequence( givenString.substring( 1)); // recursive call to get subsequences of substring starting from index - // position=1 + // position=1 String[] ans = new String @@ -47,7 +47,7 @@ private static String[] returnSubsequence(String givenString) { givenString.charAt(0) + SmallAns[ k]; // Insert character at index=0 of the given substring in front of every string - // in SmallAns + // in SmallAns } return ans; } diff --git a/Searches/JumpSearch.java b/Searches/JumpSearch.java index 87eafe25cbf1..2770bbf86310 100644 --- a/Searches/JumpSearch.java +++ b/Searches/JumpSearch.java @@ -31,7 +31,7 @@ public > int find(T[] array, T key) { for (int i = limit - blockSize; i <= limit; i++) { if (array[i] == key) { - /* execute linear search */ + /* execute linear search */ return i; } } From 176675ac69ae23f45a174ab1001beeace9f3b8bc Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Sat, 24 Oct 2020 19:05:10 +0800 Subject: [PATCH 482/521] fixed travis status link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4f6d64541114..d35fd2f7e359 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # The Algorithms - Java -[![Build Status](https://img.shields.io/travis/TheAlgorithms/Java.svg?label=Travis%20CI&logo=travis&style=flat-square)](https://travis-ci.com/TheAlgorithms/Java)  +[![Build Status](https://api.travis-ci.com/TheAlgorithms/Java.svg?branch=master)](https://travis-ci.com/TheAlgorithms/Java)  [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/TheAlgorithms/100) [![Gitter chat](https://img.shields.io/badge/Chat-Gitter-ff69b4.svg?label=Chat&logo=gitter&style=flat-square)](https://gitter.im/TheAlgorithms)  From 89ca5d42229d14f955a2e31106a9600504c16158 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 25 Oct 2020 02:05:31 +0800 Subject: [PATCH 483/521] fixed action --- .github/workflows/build.yml | 6 +++++- .github/workflows/checkstyle.yml | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cbfc697f3a65..0ef612678c25 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,10 @@ name: Build Project -on: [push, pull_request] +on: + pull_request: + push: + branches: + - master jobs: build: diff --git a/.github/workflows/checkstyle.yml b/.github/workflows/checkstyle.yml index 1f9393690d2a..052112e29332 100644 --- a/.github/workflows/checkstyle.yml +++ b/.github/workflows/checkstyle.yml @@ -1,7 +1,10 @@ name: Code Formatter -on: [push] - +on: + pull_request: + push: + branches: + - master jobs: format: runs-on: ubuntu-latest From 6faa2e31f2e5866f637b338b41001b90c8218605 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 27 Oct 2020 11:07:01 +0800 Subject: [PATCH 484/521] infix to postfix --- DataStructures/Stacks/InfixToPostfix.java | 55 +++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 DataStructures/Stacks/InfixToPostfix.java diff --git a/DataStructures/Stacks/InfixToPostfix.java b/DataStructures/Stacks/InfixToPostfix.java new file mode 100644 index 000000000000..01fd16210b18 --- /dev/null +++ b/DataStructures/Stacks/InfixToPostfix.java @@ -0,0 +1,55 @@ +package DataStructures.Stacks; + +import java.util.Stack; + +public class InfixToPostfix { + public static void main(String[] args) throws Exception { + assert "32+".equals(infix2PostFix("3+2")); + assert "123++".equals(infix2PostFix("1+(2+3)")); + assert "34+5*6-".equals(infix2PostFix("(3+4)*5-6")); + } + + public static String infix2PostFix(String infixExpression) throws Exception { + if (!BalancedBrackets.isBalanced(infixExpression)) { + throw new Exception("invalid expression"); + } + StringBuilder output = new StringBuilder(); + Stack stack = new Stack<>(); + for (char element : infixExpression.toCharArray()) { + if (Character.isLetterOrDigit(element)) { + output.append(element); + } else if (element == '(') { + stack.push(element); + } else if (element == ')') { + while (!stack.isEmpty() && stack.peek() != '(') { + output.append(stack.pop()); + } + stack.pop(); + } else { + while (!stack.isEmpty() && precedence(element) <= precedence(stack.peek())) { + output.append(stack.pop()); + } + stack.push(element); + } + } + while (!stack.isEmpty()) { + output.append(stack.pop()); + } + return output.toString(); + } + + private static int precedence(char operator) { + switch (operator) { + case '+': + case '-': + return 0; + case '*': + case '/': + return 1; + case '^': + return 2; + default: + return -1; + } + } +} \ No newline at end of file From f2da5999bd26f569754daabe9b6b943bf852c891 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 27 Oct 2020 11:16:02 +0800 Subject: [PATCH 485/521] add git diff command --- .github/workflows/checkstyle.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/checkstyle.yml b/.github/workflows/checkstyle.yml index 052112e29332..7fce2a20fceb 100644 --- a/.github/workflows/checkstyle.yml +++ b/.github/workflows/checkstyle.yml @@ -20,6 +20,7 @@ jobs: - name: Commit Format changes if: failure() run: | + git diff git config --global user.name github-actions git config --global user.email '${GITHUB_ACTOR}@users.noreply.github.com' git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY From 7137ac016468f6b20534c5e3953a6a12008a7470 Mon Sep 17 00:00:00 2001 From: shellhub Date: Tue, 27 Oct 2020 11:23:46 +0800 Subject: [PATCH 486/521] Format with google formatter --- DataStructures/Stacks/InfixToPostfix.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Stacks/InfixToPostfix.java b/DataStructures/Stacks/InfixToPostfix.java index 01fd16210b18..862c0150d136 100644 --- a/DataStructures/Stacks/InfixToPostfix.java +++ b/DataStructures/Stacks/InfixToPostfix.java @@ -52,4 +52,4 @@ private static int precedence(char operator) { return -1; } } -} \ No newline at end of file +} From 6015137bf7f96aa864ca793144d3e10b3b9b2db4 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 27 Oct 2020 03:24:22 +0000 Subject: [PATCH 487/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 2ac0c93b082f..bff318be1848 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -75,6 +75,7 @@ * Stacks * [BalancedBrackets](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/BalancedBrackets.java) * [DecimalToAnyUsingStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/DecimalToAnyUsingStack.java) + * [InfixToPostfix](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/InfixToPostfix.java) * [NodeStack](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/NodeStack.java) * [StackArray](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArray.java) * [StackArrayList](https://github.com/TheAlgorithms/Java/blob/master/DataStructures/Stacks/StackArrayList.java) From 9c8ad9c695503a770d883c32f1b89736e57ee291 Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Mon, 2 Nov 2020 14:23:33 +0800 Subject: [PATCH 488/521] Update action (#2001) * fixed checkstyle * Formatted with Google Java Formatter Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> --- .github/workflows/checkstyle.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/checkstyle.yml b/.github/workflows/checkstyle.yml index 7fce2a20fceb..4a2e972be21c 100644 --- a/.github/workflows/checkstyle.yml +++ b/.github/workflows/checkstyle.yml @@ -1,15 +1,11 @@ name: Code Formatter -on: - pull_request: - push: - branches: - - master +on: [push] jobs: format: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@master - uses: actions/setup-python@v2 - name: Set up JDK 12 uses: actions/setup-java@v1 @@ -24,5 +20,5 @@ jobs: git config --global user.name github-actions git config --global user.email '${GITHUB_ACTOR}@users.noreply.github.com' git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY - git commit -am "Formatted with Google Java Formatter" - git push --force origin HEAD:$GITHUB_REF \ No newline at end of file + git commit -am "Formatted with Google Java Formatter" || true + git push --force origin HEAD:$GITHUB_REF || true From 1b828269dc6dbde8009b0177d15ba8433c6a16b2 Mon Sep 17 00:00:00 2001 From: Lakhan Nad Date: Mon, 16 Nov 2020 07:10:16 +0530 Subject: [PATCH 489/521] Added Binary Exponentiation Fixes:#1943 (#1945) * Added Binary Exponentiation Fixes:#1943 * tests added in Binary Exponentation #1945 * Assertion Added --- Maths/BinaryPow.java | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Maths/BinaryPow.java diff --git a/Maths/BinaryPow.java b/Maths/BinaryPow.java new file mode 100644 index 000000000000..d3224c8bcf41 --- /dev/null +++ b/Maths/BinaryPow.java @@ -0,0 +1,46 @@ +package Maths; + +public class BinaryPow { + /** + * Calculate a^p using binary exponentiation + * [Binary-Exponentiation](https://cp-algorithms.com/algebra/binary-exp.html) + * + * @param a the base for exponentiation + * @param p the exponent - must be greater than 0 + * @return a^p + */ + public static int binPow(int a, int p) { + int res = 1; + while (p > 0) { + if ((p & 1) == 1) { + res = res * a; + } + a = a * a; + p >>>= 1; + } + return res; + } + + /** + * Function for testing binary exponentiation + * @param a the base + * @param p the exponent + */ + public static void test(int a, int p) { + int res = binPow(a, p); + assert res == (int) Math.pow(a, p) : "Incorrect Implementation"; + System.out.println(a + "^" + p + ": " + res); + } + + /** Main Function to call tests + * + * @param args System Line Arguments + */ + public static void main(String[] args) { + // prints 2^15: 32768 + test(2, 15); + + // prints 3^9: 19683 + test(3,9); + } +} From 6ebb15932767fbb18447adfdfc841b84be895378 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 16 Nov 2020 01:40:56 +0000 Subject: [PATCH 490/521] Formatted with Google Java Formatter --- Maths/BinaryPow.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Maths/BinaryPow.java b/Maths/BinaryPow.java index d3224c8bcf41..b9d5b68fa7d4 100644 --- a/Maths/BinaryPow.java +++ b/Maths/BinaryPow.java @@ -21,26 +21,28 @@ public static int binPow(int a, int p) { return res; } - /** + /** * Function for testing binary exponentiation - * @param a the base + * + * @param a the base * @param p the exponent */ - public static void test(int a, int p) { + public static void test(int a, int p) { int res = binPow(a, p); assert res == (int) Math.pow(a, p) : "Incorrect Implementation"; System.out.println(a + "^" + p + ": " + res); } - /** Main Function to call tests - * + /** + * Main Function to call tests + * * @param args System Line Arguments */ public static void main(String[] args) { // prints 2^15: 32768 - test(2, 15); + test(2, 15); // prints 3^9: 19683 - test(3,9); + test(3, 9); } } From c232330b84c22dea2783943ef3de451f68c893fe Mon Sep 17 00:00:00 2001 From: Ayaan Khan Date: Mon, 16 Nov 2020 16:31:59 +0530 Subject: [PATCH 491/521] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 29 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000000..e63d7f9453e7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,29 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Device Specification** + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000000..bbcbbe7d6155 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From b75bfe316ec30332eaff1299ae1e68cfd502e1bc Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 16 Nov 2020 11:02:36 +0000 Subject: [PATCH 492/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index bff318be1848..1a26dd8739ac 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -126,6 +126,7 @@ * [Area](https://github.com/TheAlgorithms/Java/blob/master/Maths/Area.java) * [Armstrong](https://github.com/TheAlgorithms/Java/blob/master/Maths/Armstrong.java) * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) + * [BinaryPow](https://github.com/TheAlgorithms/Java/blob/master/Maths/BinaryPow.java) * [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) * [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) From 486ebc26357ffb5a9a761c8acd050d78fdb18f2a Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Wed, 18 Nov 2020 08:38:51 +0800 Subject: [PATCH 493/521] Update shell sort documentation (#2033) --- Sorts/ShellSort.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Sorts/ShellSort.java b/Sorts/ShellSort.java index 79ae6e2df5fa..eaf51e448d3e 100644 --- a/Sorts/ShellSort.java +++ b/Sorts/ShellSort.java @@ -5,9 +5,11 @@ public class ShellSort implements SortAlgorithm { /** - * This method implements Generic Shell Sort. + * Implements generic shell sort. * - * @param array the array to be sorted + * @param array the array to be sorted. + * @param the type of elements in the array. + * @return the sorted array. */ @Override public > T[] sort(T[] array) { @@ -37,6 +39,10 @@ public static void main(String[] args) { Integer[] toSort = {4, 23, 6, 78, 1, 54, 231, 9, 12}; ShellSort sort = new ShellSort(); - print(sort.sort(toSort)); + sort.sort(toSort); + for (int i = 0; i < toSort.length - 1; ++i) { + assert toSort[i] <= toSort[i + 1]; + } + print(toSort); } } From 23c12f71412010b59dd5f0a80539f88cd8876e25 Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Wed, 18 Nov 2020 09:25:05 +0800 Subject: [PATCH 494/521] Fixed checkstyle and docs (#2035) * Update bubble sort algorithm * fixed checkstyle * Formatted with Google Java Formatter Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> --- .github/workflows/checkstyle.yml | 2 +- Sorts/BubbleSort.java | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/checkstyle.yml b/.github/workflows/checkstyle.yml index 4a2e972be21c..8424300048a0 100644 --- a/.github/workflows/checkstyle.yml +++ b/.github/workflows/checkstyle.yml @@ -1,6 +1,6 @@ name: Code Formatter -on: [push] +on: [push, pull_request] jobs: format: runs-on: ubuntu-latest diff --git a/Sorts/BubbleSort.java b/Sorts/BubbleSort.java index 80385d24280f..9ca94954d641 100644 --- a/Sorts/BubbleSort.java +++ b/Sorts/BubbleSort.java @@ -8,10 +8,13 @@ * @see SortAlgorithm */ class BubbleSort implements SortAlgorithm { + /** - * This method implements the Generic Bubble Sort + * Implements generic bubble sort algorithm. * - * @param array The array to be sorted Sorts the array in ascending order + * @param array the array to be sorted. + * @param the type of elements in the array. + * @return the sorted array. */ @Override public > T[] sort(T[] array) { @@ -30,20 +33,23 @@ public > T[] sort(T[] array) { return array; } - // Driver Program + /** Driver Code */ public static void main(String[] args) { - // Integer Input Integer[] integers = {4, 23, 6, 78, 1, 54, 231, 9, 12}; BubbleSort bubbleSort = new BubbleSort(); bubbleSort.sort(integers); - // Output => 1, 4, 6, 9, 12, 23, 54, 78, 231 - print(integers); + for (int i = 0; i < integers.length - 1; ++i) { + assert integers[i] <= integers[i + 1]; + } + print(integers); /* output: [1, 4, 6, 9, 12, 23, 54, 78, 231] */ - // String Input String[] strings = {"c", "a", "e", "b", "d"}; - // Output => a, b, c, d, e - print(bubbleSort.sort(strings)); + bubbleSort.sort(strings); + for (int i = 0; i < strings.length - 1; i++) { + assert strings[i].compareTo(strings[i + 1]) <= 0; + } + print(bubbleSort.sort(strings)); /* output: [a, b, c, d, e] */ } } From 52ab5fbc3e74b39108272e72817157711a23ebb8 Mon Sep 17 00:00:00 2001 From: Vasu Tomar Date: Sun, 22 Nov 2020 23:36:44 +0530 Subject: [PATCH 495/521] Restricted tower of hanoi implementation with GUI (#561) --- Others/RestrictedTowerOfHanoi/Main/Hanoi.java | 239 ++++++++++++++++++ .../Resources/rsz_exit.png | Bin 0 -> 2460 bytes .../Resources/rsz_loop.png | Bin 0 -> 2939 bytes .../Resources/rsz_move.png | Bin 0 -> 1017 bytes .../Resources/rsz_replay.jpg | Bin 0 -> 1884 bytes .../Screenshot from 2018-10-09 11-18-41.png | Bin 0 -> 138767 bytes .../Screenshot from 2018-10-09 11-18-47.png | Bin 0 -> 138743 bytes 7 files changed, 239 insertions(+) create mode 100644 Others/RestrictedTowerOfHanoi/Main/Hanoi.java create mode 100644 Others/RestrictedTowerOfHanoi/Resources/rsz_exit.png create mode 100644 Others/RestrictedTowerOfHanoi/Resources/rsz_loop.png create mode 100644 Others/RestrictedTowerOfHanoi/Resources/rsz_move.png create mode 100644 Others/RestrictedTowerOfHanoi/Resources/rsz_replay.jpg create mode 100644 Others/RestrictedTowerOfHanoi/Screenshots/Screenshot from 2018-10-09 11-18-41.png create mode 100644 Others/RestrictedTowerOfHanoi/Screenshots/Screenshot from 2018-10-09 11-18-47.png diff --git a/Others/RestrictedTowerOfHanoi/Main/Hanoi.java b/Others/RestrictedTowerOfHanoi/Main/Hanoi.java new file mode 100644 index 000000000000..5ad35abf0a14 --- /dev/null +++ b/Others/RestrictedTowerOfHanoi/Main/Hanoi.java @@ -0,0 +1,239 @@ +import java.util.*; +import javax.swing.*; +import javax.swing.Timer; +import java.awt.*; +import java.awt.event.*; + +public class Hanoi extends JFrame{ + + public static int ONE_SECOND = 1000; + + int number_of_disks=0; + int game_counter = 0; + int i=0; + + /* GUI COMPONENTS */ + public JButton move_button = new JButton(); + public JButton exit_button = new JButton(); + public JButton replay_button = new JButton(); + public JButton auto_button = new JButton(); + + + /* BACKEND COMPONENTS */ + public ArrayList movements = new ArrayList(); + public StringBuilder stringBuilder = new StringBuilder(); + + public ArrayList Stack1 = new ArrayList(); + public ArrayList Stack2 = new ArrayList(); + public ArrayList Stack3 = new ArrayList(); + + public void updateStacks() { + if(game_counter!=movements.size()) { + String temp = movements.get(game_counter); + System.out.println(temp); + if(temp.charAt(1)=='A') { + if(temp.charAt(2)=='B') { + int x = Stack1.get(Stack1.size()-1); + Stack1.remove(Stack1.size()-1); + Stack2.add(x); + } + } + if(temp.charAt(1)=='C') { + if(temp.charAt(2)=='B') { + int x = Stack3.get(Stack3.size()-1); + Stack3.remove(Stack3.size()-1); + Stack2.add(x); + } + } + + if(temp.charAt(1)=='B') { + if(temp.charAt(2)=='C') { + int x = Stack2.get(Stack2.size()-1); + Stack2.remove(Stack2.size()-1); + Stack3.add(x); + } + else if(temp.charAt(2)=='A') { + int x = Stack2.get(Stack2.size()-1); + Stack2.remove(Stack2.size()-1); + Stack1.add(x); + } + } + revalidate(); + repaint(); + game_counter++; + } + } + + public void paint(Graphics canvas) { + super.paint(canvas); + + //Drawing pedestels + for(int i=0;i<3;i++) { + canvas.drawRect(30+i*230,670,200,20); + canvas.setColor(new Color(76,174,227)); //Blue Accent + canvas.fillRect(30+i*230,670,200,20); + + canvas.fillRect(130+i*230-2,670-170,4,170); + canvas.setColor(new Color(150,0,0)); //Arseny + canvas.fillRect(130+i*230-2,670-170,4,170); + } + + //Disks in stack1 + for(int i=1;i<=Stack1.size();i++) { + canvas.drawRect(130-Stack1.get(i-1)*10,670-i*12,Stack1.get(i-1)*20,10); + canvas.setColor(new Color(64,26,0)); //Brown Wolfers + canvas.fillRect(130-Stack1.get(i-1)*10,670-i*12,Stack1.get(i-1)*20,10); + } + + //Disks in stack2 + for(int i=1;i<=Stack2.size();i++) { + canvas.drawRect(360-Stack2.get(i-1)*10,670-i*12,Stack2.get(i-1)*20,10); + canvas.setColor(new Color(64,26,0)); //Brown Wolfers + canvas.fillRect(360-Stack2.get(i-1)*10,670-i*12,Stack2.get(i-1)*20,10); + } + + //Disks in stack3 + for(int i=1;i<=Stack3.size();i++) { + canvas.drawRect(590-Stack3.get(i-1)*10,670-i*12,Stack3.get(i-1)*20,10); + canvas.setColor(new Color(64,26,0)); //Brown Wolfers + canvas.fillRect(590-Stack3.get(i-1)*10,670-i*12,Stack3.get(i-1)*20,10); + } + } + + // Function to initialize the widget properties and the frame. + public void initialize() { + + move_button.setIcon(new ImageIcon("../Resources/rsz_move.png")); + move_button.setBounds(130,0,50,50); + + auto_button.setIcon(new ImageIcon("../Resources/rsz_loop.png")); + auto_button.setBounds(260,0,50,50); + + replay_button.setIcon(new ImageIcon("../Resources/rsz_replay.jpg")); + replay_button.setBounds(390,0,50,50); + + exit_button.setIcon(new ImageIcon("../Resources/rsz_exit.png")); + exit_button.setBounds(520,0,50,50); + + add(move_button); + add(exit_button); + add(replay_button); + add(auto_button); + + setLayout(null); + setSize(720,720); + setVisible(true); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + // Main cnstructor. + Hanoi() { + super("restricted tower of hanoi"); + initialize(); + + //MOVE BUTTON ACTION LISTENER + move_button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + updateStacks(); + } + }); + + //EXIT BUTTON ACTION LISTENER + exit_button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + System.exit(0); + } + }); + + //REPLAY BUTTON ACTION LISTENER + replay_button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + startGame(); + repaint(); + } + }); + + //AUTOMATIC PLAY BUTTON ACTION LISTENER + auto_button.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + timer.start(); + if(game_counter == movements.size()) { + timer.stop(); + } + } + }); + } + + Timer timer = new Timer(ONE_SECOND,new ActionListener() { + public void actionPerformed(ActionEvent e) { + updateStacks(); + } + }); + + public void startGame() { + + System.out.println("New Game Started"); + timer.stop(); + + Stack1 = new ArrayList(); + Stack2 = new ArrayList(); + Stack3 = new ArrayList(); + + movements = new ArrayList(); + game_counter = 0; + + for(int i=0;i004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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�lFm`~NzZQ<$&PNh% zWIdmSiW}_WP;DzJ7?o=Vc(u~x)+VPvD){LE1zV(cTR86%7~bu0K3@?28#T_HZbO|N z<^LALz}3YupcEflKp_v=3TfrFLa<%nN-~q1cW(HVPu_Xh8>1UB$fDmzM%>D)Up2&L zIJe?aUzRdcr!vRXe0?mXUS@w-ra5NW;^)(b$)r}1UwWn@ZBmUNTQ?RrC?U+SdKEQe zF(j7Nh2Nk%WK%KCvA0KEUDK*a^CumdWJI+(Y1*YaI5+?@jd(a)`^Sk~N%zOgKb?w% zAMda2CW$=cb__L%oSmJQr<7(coo9)OGKmq7Tp`~4bGojS?(XhDH`g@*g@_N<0A?s( zQ?(&Pf&E!ueH>JbbvW;hXvmDxKb)h|e+`z%O_)5KCLpjnTDKq`{)Sh-(F)%BB>Hf! z37k(1|7DAegB2^F_;|$Wc9FA;oq2S1N}*&sEmSr0~A zBQ@9(|B;dnNLR%K*+4gZTO-fg9j8s<%#S2$xw3E z=jel7D_pks>~!;jbFL!w%}m9^MW35&9^J9u3QUR;Odq(WU9VVc4zeN32<}(Mddh8#&Fd*}z|G`c-SNE&P9ZX<$ zNf+{=iIwa1obL*|bNrA#_Z9{>D0TF?ZKCwtxZ$}~$-)^!vi<6(`^qKT`>(%mlQ~>M zR9pGn*<{}`m|hG`*ZmecLuY#fGq_r|VeGyZ`R08m)xo^k-NYP5X-^M+IDqGOCj==*eH{9j(KyKkgpB<4(U8jqWyq0-;Amx>F4O9eDa;C-x`yPl2(AHxiwh$%);uc4ZK6ouqkJ4{#As@baDm5sw=}PnOJO` zQi>DhmL@JgCSJK@bxtTgTN42Y3!$5aVlbF}?)0uVnd5BH;T;isuJ4OZ104@D<=?g3 zP7O6%YROYC6Aj)Aivm5&@9oI@Z^R(Ti!?TG>G`Esv$_o?o(=p+X*YnYS5Em5D^EX9 zOJ>&hBbo7d31#@AP`7eIUwb}r7sSTxUi~z~ktVSguL!bTF*k>7hg5zL=h|1lm6+O| zAUGbMm3L9m}fj`Iz%J7|3wuy zdi8!Tva|H3KKAhHIZPlv-)Kj9-^qX zNain9OSPN*DlF@NW2F*cWH*Ni;hQ=9GTc26i8qQ_?g-aZHlV- zkhZNQCyPADX{(+0a(D@^8Il^WzwNgY(rp$YTc-QofEW;N-%D^&wawjr8d%g8rU znEJRCx|*WM%#$ULezUBkF!twyu4o^`i`@pD8h%uFv(amA!=Lj%uD4!{L383%oPrHjAShH`et^0m(1qKc zEP&!CK{?cDi4O>eM0c}1*&YGl

%)4EDZI_=#f3*sG0kV)-1N*?hp67X?!^+U-Xn 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 literal 0 HcmV?d00001 diff --git a/Others/RestrictedTowerOfHanoi/Screenshots/Screenshot from 2018-10-09 11-18-47.png b/Others/RestrictedTowerOfHanoi/Screenshots/Screenshot from 2018-10-09 11-18-47.png new file mode 100644 index 0000000000000000000000000000000000000000..ead93d67e11a76f9ba963237594d7ed282a61f13 GIT binary patch literal 138743 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�lFm`~NzZQ<$&PNh% zWIdmSiW}_WP;DzJ7?o=Vc(u~x)+VPvD){LE1zV(cTR86%7~bu0K3@?28#T_HZbO|N z<^LALz}3YupcEflKp_v=3TfrFLa<%nN-~q1cW(HVPu_Xh8>1UB$fDmzM%>D)Up2&L zIJe?aUzRdcr!vRXe0?mXUS@w-ra5NW;^)(b$)r}1UwWn@ZBmUNTQ?RrC?U+SdKEQe zF(j7Nh2Nk%WK%KCvA0KEUDK*a^CumdWJI+(Y1*YaI5+?@jd(a)`^Sk~N%zOgKb?w% zAMda2CW$=cb__L%oSmJQr<7(coo9)OGKmq7Tp`~4bGojS?(XhDH`g@*g@_N<0A?s( zQ?(&Pf&E!ueH>JbbvW;hXvmDxKb)h|e+`z%O_)5KCLpjnTDKq`{)Sh-(F)%BB>Hf! z37k(1|7DAegB2^F_;|$Wc9FA;oq2S1N}*&sEmSr0~A zBQ@9(|B;dnNLR%K*+4gZTO-fg9j8s<%#S2$xw3E z=jel7D_pks>~!;jbFL!w%}m9^MW35&9^J9u3QUR;Odq(WU9VVc4zeN32<}(Mddh8#&Fd*}z|G`c-SNE&P9ZX<$ zNf+{=iIwa1obL*|bNrA#_Z9{>D0TF?ZKCwtxZ$}~$-)^!vi<6(`^qKT`>(%mlQ~>M zR9pGn*<{}`m|hG`*ZmecLuY#fGq_r|VeGyZ`R08m)xo^k-NYP5X-^M+IDqGOCj==*eH{9j(KyKkgpB<4(U8jqWyq0-;Amx>F4O9eDa;C-x`yPl2(AHxiwh$%);uc4ZK6ouqkJ4{#As@baDm5sw=}PnOJO` zQi>DhmL@JgCSJK@bxtTgTN42Y3!$5aVlbF}?)0uVnd5BH;T;isuJ4OZ104@D<=?g3 zP7O6%YROYC6Aj)Aivm5&@9oI@Z^R(Ti!?TG>G`Esv$_o?o(=p+X*YnYS5Em5D^EX9 zOJ>&hBbo7d31#@AP`7eIUwb}r7sSTxUi~z~ktVSguL!bTF*k>7hg5zL=h|1lm6+O| zAUGbMm3L9m}fj`Iz%J7|3wuy zdi8!Tva|H3KKAhHIZPlv-)Kj9-^qX zNain9OSPN*DlF@NW2F*cWH*Ni;hQ=9GTc26i8qQ_?g-aZHlV- zkhZNQCyPADX{(+0a(D@^8Il^WzwNgY(rp$YTc-QofEW;N-%D^&wawjr8d%g8rU znEJRCx|*WM%#$ULezUBkF!twyu4o^`i`@pD8h%uFv(amA!=Lj%uD4!{L383%oPrHjAShH`et^0m(1qKc zEP&!CK{?cDi4O>eM0c}1*&YGl

%)4EDZI_=#f3*sG0kV)-1N*?hp67X?!^+U-Xn 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 z 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 Ufqr$lf&c&j07*qoM6N<$g5o190ssI2 literal 0 HcmV?d00001 From d63f470e7a9dd7905bac9285627ae387ce967ed7 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 22 Nov 2020 18:07:16 +0000 Subject: [PATCH 496/521] Formatted with Google Java Formatter --- Others/RestrictedTowerOfHanoi/Main/Hanoi.java | 417 +++++++++--------- 1 file changed, 211 insertions(+), 206 deletions(-) diff --git a/Others/RestrictedTowerOfHanoi/Main/Hanoi.java b/Others/RestrictedTowerOfHanoi/Main/Hanoi.java index 5ad35abf0a14..585649276c21 100644 --- a/Others/RestrictedTowerOfHanoi/Main/Hanoi.java +++ b/Others/RestrictedTowerOfHanoi/Main/Hanoi.java @@ -1,239 +1,244 @@ +import java.awt.*; +import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.Timer; -import java.awt.*; -import java.awt.event.*; - -public class Hanoi extends JFrame{ - - public static int ONE_SECOND = 1000; - int number_of_disks=0; - int game_counter = 0; - int i=0; - - /* GUI COMPONENTS */ - public JButton move_button = new JButton(); - public JButton exit_button = new JButton(); - public JButton replay_button = new JButton(); - public JButton auto_button = new JButton(); - - - /* BACKEND COMPONENTS */ - public ArrayList movements = new ArrayList(); - public StringBuilder stringBuilder = new StringBuilder(); - - public ArrayList Stack1 = new ArrayList(); - public ArrayList Stack2 = new ArrayList(); - public ArrayList Stack3 = new ArrayList(); - - public void updateStacks() { - if(game_counter!=movements.size()) { - String temp = movements.get(game_counter); - System.out.println(temp); - if(temp.charAt(1)=='A') { - if(temp.charAt(2)=='B') { - int x = Stack1.get(Stack1.size()-1); - Stack1.remove(Stack1.size()-1); - Stack2.add(x); - } - } - if(temp.charAt(1)=='C') { - if(temp.charAt(2)=='B') { - int x = Stack3.get(Stack3.size()-1); - Stack3.remove(Stack3.size()-1); - Stack2.add(x); - } - } - - if(temp.charAt(1)=='B') { - if(temp.charAt(2)=='C') { - int x = Stack2.get(Stack2.size()-1); - Stack2.remove(Stack2.size()-1); - Stack3.add(x); - } - else if(temp.charAt(2)=='A') { - int x = Stack2.get(Stack2.size()-1); - Stack2.remove(Stack2.size()-1); - Stack1.add(x); - } - } - revalidate(); - repaint(); - game_counter++; +public class Hanoi extends JFrame { + + public static int ONE_SECOND = 1000; + + int number_of_disks = 0; + int game_counter = 0; + int i = 0; + + /* GUI COMPONENTS */ + public JButton move_button = new JButton(); + public JButton exit_button = new JButton(); + public JButton replay_button = new JButton(); + public JButton auto_button = new JButton(); + + /* BACKEND COMPONENTS */ + public ArrayList movements = new ArrayList(); + public StringBuilder stringBuilder = new StringBuilder(); + + public ArrayList Stack1 = new ArrayList(); + public ArrayList Stack2 = new ArrayList(); + public ArrayList Stack3 = new ArrayList(); + + public void updateStacks() { + if (game_counter != movements.size()) { + String temp = movements.get(game_counter); + System.out.println(temp); + if (temp.charAt(1) == 'A') { + if (temp.charAt(2) == 'B') { + int x = Stack1.get(Stack1.size() - 1); + Stack1.remove(Stack1.size() - 1); + Stack2.add(x); } - } - - public void paint(Graphics canvas) { - super.paint(canvas); - - //Drawing pedestels - for(int i=0;i<3;i++) { - canvas.drawRect(30+i*230,670,200,20); - canvas.setColor(new Color(76,174,227)); //Blue Accent - canvas.fillRect(30+i*230,670,200,20); - - canvas.fillRect(130+i*230-2,670-170,4,170); - canvas.setColor(new Color(150,0,0)); //Arseny - canvas.fillRect(130+i*230-2,670-170,4,170); + } + if (temp.charAt(1) == 'C') { + if (temp.charAt(2) == 'B') { + int x = Stack3.get(Stack3.size() - 1); + Stack3.remove(Stack3.size() - 1); + Stack2.add(x); } - - //Disks in stack1 - for(int i=1;i<=Stack1.size();i++) { - canvas.drawRect(130-Stack1.get(i-1)*10,670-i*12,Stack1.get(i-1)*20,10); - canvas.setColor(new Color(64,26,0)); //Brown Wolfers - canvas.fillRect(130-Stack1.get(i-1)*10,670-i*12,Stack1.get(i-1)*20,10); - } - - //Disks in stack2 - for(int i=1;i<=Stack2.size();i++) { - canvas.drawRect(360-Stack2.get(i-1)*10,670-i*12,Stack2.get(i-1)*20,10); - canvas.setColor(new Color(64,26,0)); //Brown Wolfers - canvas.fillRect(360-Stack2.get(i-1)*10,670-i*12,Stack2.get(i-1)*20,10); - } - - //Disks in stack3 - for(int i=1;i<=Stack3.size();i++) { - canvas.drawRect(590-Stack3.get(i-1)*10,670-i*12,Stack3.get(i-1)*20,10); - canvas.setColor(new Color(64,26,0)); //Brown Wolfers - canvas.fillRect(590-Stack3.get(i-1)*10,670-i*12,Stack3.get(i-1)*20,10); + } + + if (temp.charAt(1) == 'B') { + if (temp.charAt(2) == 'C') { + int x = Stack2.get(Stack2.size() - 1); + Stack2.remove(Stack2.size() - 1); + Stack3.add(x); + } else if (temp.charAt(2) == 'A') { + int x = Stack2.get(Stack2.size() - 1); + Stack2.remove(Stack2.size() - 1); + Stack1.add(x); } + } + revalidate(); + repaint(); + game_counter++; } + } - // Function to initialize the widget properties and the frame. - public void initialize() { + public void paint(Graphics canvas) { + super.paint(canvas); - move_button.setIcon(new ImageIcon("../Resources/rsz_move.png")); - move_button.setBounds(130,0,50,50); + // Drawing pedestels + for (int i = 0; i < 3; i++) { + canvas.drawRect(30 + i * 230, 670, 200, 20); + canvas.setColor(new Color(76, 174, 227)); // Blue Accent + canvas.fillRect(30 + i * 230, 670, 200, 20); - auto_button.setIcon(new ImageIcon("../Resources/rsz_loop.png")); - auto_button.setBounds(260,0,50,50); - - replay_button.setIcon(new ImageIcon("../Resources/rsz_replay.jpg")); - replay_button.setBounds(390,0,50,50); + canvas.fillRect(130 + i * 230 - 2, 670 - 170, 4, 170); + canvas.setColor(new Color(150, 0, 0)); // Arseny + canvas.fillRect(130 + i * 230 - 2, 670 - 170, 4, 170); + } - exit_button.setIcon(new ImageIcon("../Resources/rsz_exit.png")); - exit_button.setBounds(520,0,50,50); + // Disks in stack1 + for (int i = 1; i <= Stack1.size(); i++) { + canvas.drawRect(130 - Stack1.get(i - 1) * 10, 670 - i * 12, Stack1.get(i - 1) * 20, 10); + canvas.setColor(new Color(64, 26, 0)); // Brown Wolfers + canvas.fillRect(130 - Stack1.get(i - 1) * 10, 670 - i * 12, Stack1.get(i - 1) * 20, 10); + } - add(move_button); - add(exit_button); - add(replay_button); - add(auto_button); + // Disks in stack2 + for (int i = 1; i <= Stack2.size(); i++) { + canvas.drawRect(360 - Stack2.get(i - 1) * 10, 670 - i * 12, Stack2.get(i - 1) * 20, 10); + canvas.setColor(new Color(64, 26, 0)); // Brown Wolfers + canvas.fillRect(360 - Stack2.get(i - 1) * 10, 670 - i * 12, Stack2.get(i - 1) * 20, 10); + } - setLayout(null); - setSize(720,720); - setVisible(true); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + // Disks in stack3 + for (int i = 1; i <= Stack3.size(); i++) { + canvas.drawRect(590 - Stack3.get(i - 1) * 10, 670 - i * 12, Stack3.get(i - 1) * 20, 10); + canvas.setColor(new Color(64, 26, 0)); // Brown Wolfers + canvas.fillRect(590 - Stack3.get(i - 1) * 10, 670 - i * 12, Stack3.get(i - 1) * 20, 10); } - // Main cnstructor. - Hanoi() { - super("restricted tower of hanoi"); - initialize(); - - //MOVE BUTTON ACTION LISTENER - move_button.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - updateStacks(); - } + } + + // Function to initialize the widget properties and the frame. + public void initialize() { + + move_button.setIcon(new ImageIcon("../Resources/rsz_move.png")); + move_button.setBounds(130, 0, 50, 50); + + auto_button.setIcon(new ImageIcon("../Resources/rsz_loop.png")); + auto_button.setBounds(260, 0, 50, 50); + + replay_button.setIcon(new ImageIcon("../Resources/rsz_replay.jpg")); + replay_button.setBounds(390, 0, 50, 50); + + exit_button.setIcon(new ImageIcon("../Resources/rsz_exit.png")); + exit_button.setBounds(520, 0, 50, 50); + + add(move_button); + add(exit_button); + add(replay_button); + add(auto_button); + + setLayout(null); + setSize(720, 720); + setVisible(true); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + // Main cnstructor. + Hanoi() { + super("restricted tower of hanoi"); + initialize(); + + // MOVE BUTTON ACTION LISTENER + move_button.addActionListener( + new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + updateStacks(); + } }); - //EXIT BUTTON ACTION LISTENER - exit_button.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - System.exit(0); - } + // EXIT BUTTON ACTION LISTENER + exit_button.addActionListener( + new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + System.exit(0); + } }); - //REPLAY BUTTON ACTION LISTENER - replay_button.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - startGame(); - repaint(); - } + // REPLAY BUTTON ACTION LISTENER + replay_button.addActionListener( + new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + startGame(); + repaint(); + } }); - //AUTOMATIC PLAY BUTTON ACTION LISTENER - auto_button.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - timer.start(); - if(game_counter == movements.size()) { - timer.stop(); - } + // AUTOMATIC PLAY BUTTON ACTION LISTENER + auto_button.addActionListener( + new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + timer.start(); + if (game_counter == movements.size()) { + timer.stop(); } + } }); - } - - Timer timer = new Timer(ONE_SECOND,new ActionListener() { - public void actionPerformed(ActionEvent e) { - updateStacks(); - } - }); + } - public void startGame() { + Timer timer = + new Timer( + ONE_SECOND, + new ActionListener() { + public void actionPerformed(ActionEvent e) { + updateStacks(); + } + }); - System.out.println("New Game Started"); - timer.stop(); - - Stack1 = new ArrayList(); - Stack2 = new ArrayList(); - Stack3 = new ArrayList(); + public void startGame() { - movements = new ArrayList(); - game_counter = 0; + System.out.println("New Game Started"); + timer.stop(); - for(int i=0;i(); + Stack2 = new ArrayList(); + Stack3 = new ArrayList(); - towerOfHanoi(number_of_disks,'A','C','B'); - } + movements = new ArrayList(); + game_counter = 0; - public static void main(String args[]) { - Hanoi tower = new Hanoi(); - int number = Integer.parseInt(args[0]); - tower.number_of_disks = number; - tower.startGame(); - /*for(int i=0;i Date: Thu, 26 Nov 2020 03:03:06 +0100 Subject: [PATCH 497/521] Travis CI: Fix build validation issues, add Xlint options (#2047) * Travis CI: Fix build validation issues, add Xlint options * updating DIRECTORY.md Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> --- .travis.yml | 7 ++++--- DIRECTORY.md | 3 +++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d493a510925d..641567baf5fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,10 @@ +os: linux +dist: focal language: java script: - find . -type f -name "*.java" > sources.txt - - javac @sources.txt - + - javac -Xlint:deprecation -Xlint:unchecked @sources.txt notifications: webhooks: https://www.travisbuddy.com/ on_success: never - on_failure: always \ No newline at end of file + on_failure: always diff --git a/DIRECTORY.md b/DIRECTORY.md index 1a26dd8739ac..694c8cf64ebe 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -190,6 +190,9 @@ * [QueueUsingTwoStacks](https://github.com/TheAlgorithms/Java/blob/master/Others/QueueUsingTwoStacks.java) * [RabinKarp](https://github.com/TheAlgorithms/Java/blob/master/Others/RabinKarp.java) * [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/Others/RemoveDuplicateFromString.java) + * RestrictedTowerOfHanoi + * Main + * [Hanoi](https://github.com/TheAlgorithms/Java/blob/master/Others/RestrictedTowerOfHanoi/Main/Hanoi.java) * [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/Others/ReturnSubsequence.java) * [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/Others/ReverseStackUsingRecursion.java) * [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/Others/RootPrecision.java) From 95484f8c89bac85151a91db59903f6e78556cb60 Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Tue, 1 Dec 2020 09:33:06 +0800 Subject: [PATCH 498/521] update SinglyLinkedList (#2058) --- DataStructures/Lists/SinglyLinkedList.java | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/DataStructures/Lists/SinglyLinkedList.java b/DataStructures/Lists/SinglyLinkedList.java index a1ce500d13e3..7e7b6166948f 100644 --- a/DataStructures/Lists/SinglyLinkedList.java +++ b/DataStructures/Lists/SinglyLinkedList.java @@ -1,14 +1,8 @@ package DataStructures.Lists; -/** - * This class implements a SinglyLinked List. This is done using SinglyLinkedList class and a - * LinkForLinkedList Class. - * - *

A linked list is similar to an array, it hold values. However, links in a linked list do not - * have indexes. With a linked list you do not need to predetermine it's size as it grows and - * shrinks as it is edited. This is an example of a singly linked list. Elements can only be - * added/removed at the head/front of the list. - */ +import java.util.StringJoiner; + +/** https://en.wikipedia.org/wiki/Linked_list */ public class SinglyLinkedList { /** Head refer to the front of the list */ private Node head; @@ -213,16 +207,13 @@ public int getNth(int index) { @Override public String toString() { - if (size == 0) { - return ""; - } - StringBuilder builder = new StringBuilder(); + StringJoiner joiner = new StringJoiner("->"); Node cur = head; while (cur != null) { - builder.append(cur.value).append("->"); + joiner.add(cur.value + ""); cur = cur.next; } - return builder.replace(builder.length() - 2, builder.length(), "").toString(); + return joiner.toString(); } /** Driver Code */ From 74b7426ae6d616093844ab25ccde71c347820580 Mon Sep 17 00:00:00 2001 From: Mickonama <56245164+Mickonama@users.noreply.github.com> Date: Sun, 27 Dec 2020 15:00:03 +0200 Subject: [PATCH 499/521] Solution to Euler Project Problem03 (#2069) * Solution to Euler Project Problem03 * Solution to Euler Project Problem03 format fix * format code * update prime function Co-authored-by: mickonama Co-authored-by: shellhub --- ProjectEuler/Problem03.java | 62 +++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 ProjectEuler/Problem03.java diff --git a/ProjectEuler/Problem03.java b/ProjectEuler/Problem03.java new file mode 100644 index 000000000000..31d6fdc4d0f4 --- /dev/null +++ b/ProjectEuler/Problem03.java @@ -0,0 +1,62 @@ +package ProjectEuler; + +/** + * The prime factors of 13195 are 5, 7, 13 and 29. + * + *

What is the largest prime factor of the number 600851475143 ? + * + *

Link: https://projecteuler.net/problem=3 + */ +public class Problem03 { + + /** + * Checks if a number is prime or not + * + * @param n the number + * @return {@code true} if {@code n} is prime + */ + public static boolean isPrime(int n) { + if (n == 2) { + return true; + } + if (n < 2 || n % 2 == 0) { + return false; + } + for (int i = 3, limit = (int) Math.sqrt(n); i <= limit; i += 2) { + if (n % i == 0) { + return false; + } + } + return true; + } + + /** + * Calculate all the prime factors of a number and return the largest + * + * @param n integer number + * @return the maximum prime factor of the given number + */ + static long maxPrimeFactor(long n) { + for (int i = 2; i < n / 2; i++) { + if (isPrime(i)) + while (n % i == 0) { + n /= i; + } + } + return n; + } + + public static void main(String[] args) { + int[][] testNumbers = { + {87, 29}, + {10, 5}, + {21, 7}, + {657, 73}, + {777, 37} + }; + for (int[] num : testNumbers) { + assert Problem03.maxPrimeFactor(num[0]) == num[1]; + } + assert Problem03.maxPrimeFactor(600851475143L) == 6857; + } +} From 331db363213451d1d0fac3d3571616afd79129b5 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 27 Dec 2020 13:00:21 +0000 Subject: [PATCH 500/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 694c8cf64ebe..98338a1fe163 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -210,6 +210,7 @@ ## ProjectEuler * [Problem01](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem01.java) * [Problem02](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem02.java) + * [Problem03](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem03.java) * [Problem04](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem04.java) * [Problem06](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem06.java) * [Problem07](https://github.com/TheAlgorithms/Java/blob/master/ProjectEuler/Problem07.java) From 568b0b23a6c61aac0bc3b15ec72442f8b9559a45 Mon Sep 17 00:00:00 2001 From: EATONJIANGHAHAHA Date: Mon, 4 Jan 2021 23:16:44 +0800 Subject: [PATCH 501/521] add MinimumPathSum DynamicProgramming (#2068) * add MinimumPathSum DynamicProgramming * add tests and link for the algorithm * remove junit dependency * format with google code format Co-authored-by: eatonjiang --- DynamicProgramming/MinimumPathSum.java | 81 ++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 DynamicProgramming/MinimumPathSum.java diff --git a/DynamicProgramming/MinimumPathSum.java b/DynamicProgramming/MinimumPathSum.java new file mode 100644 index 000000000000..cc0fcaa4ed98 --- /dev/null +++ b/DynamicProgramming/MinimumPathSum.java @@ -0,0 +1,81 @@ +package DynamicProgramming; + +/* +Given the following grid with length m and width n: +\---\---\---\ (n) +\ 1 \ 3 \ 1 \ +\---\---\---\ +\ 1 \ 5 \ 1 \ +\---\---\---\ +\ 4 \ 2 \ 1 \ +\---\---\---\ +(m) +Find the path where its sum is the smallest. + +All numbers given are positive. +The Time Complexity of your algorithm should be smaller than or equal to O(mn). +The Space Complexity of your algorithm should be smaller than or equal to O(mn). +You can only move from the top left corner to the down right corner. +You can only move one step down or right. + +EXAMPLE: +INPUT: grid = [[1,3,1],[1,5,1],[4,2,1]] +OUTPUT: 7 +EXPLANATIONS: 1 + 3 + 1 + 1 + 1 = 7 + +For more information see https://www.geeksforgeeks.org/maximum-path-sum-matrix/ +*/ +public class MinimumPathSum { + + public void testRegular() { + int[][] grid = { + {1, 3, 1}, + {1, 5, 1}, + {4, 2, 1} + }; + System.out.println(minimumPathSum(grid)); + } + + public void testLessColumns() { + int[][] grid = { + {1, 2}, + {5, 6}, + {1, 1} + }; + System.out.println(minimumPathSum(grid)); + } + + public void testLessRows() { + int[][] grid = { + {2, 3, 3}, + {7, 2, 1} + }; + System.out.println(minimumPathSum(grid)); + } + + public void testOneRowOneColumn() { + int[][] grid = {{2}}; + System.out.println(minimumPathSum(grid)); + } + + public static int minimumPathSum(int[][] grid) { + int m = grid.length, n = grid[0].length; + if (n == 0) { + return 0; + } + int[][] dp = new int[m][n]; + dp[0][0] = grid[0][0]; + for (int i = 0; i < n - 1; i++) { + dp[0][i + 1] = dp[0][i] + grid[0][i + 1]; + } + for (int i = 0; i < m - 1; i++) { + dp[i + 1][0] = dp[i][0] + grid[i + 1][0]; + } + for (int i = 1; i < m; i++) { + for (int j = 1; j < n; j++) { + dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]; + } + } + return dp[m - 1][n - 1]; + } +} From 0b88a0abd04905e93fb01e0d786c73b4f8cf13b0 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 4 Jan 2021 15:17:21 +0000 Subject: [PATCH 502/521] updating DIRECTORY.md --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 98338a1fe163..631b2e2c3eac 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -113,6 +113,7 @@ * [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestPalindromicSubsequence.java) * [LongestValidParentheses](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/LongestValidParentheses.java) * [MatrixChainMultiplication](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MatrixChainMultiplication.java) + * [MinimumPathSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumPathSum.java) * [MinimumSumPartition](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/MinimumSumPartition.java) * [RodCutting](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/RodCutting.java) * [SubsetSum](https://github.com/TheAlgorithms/Java/blob/master/DynamicProgramming/SubsetSum.java) From ecefcf3be3b80e1f86e94ad034c57b2a0cc28ac1 Mon Sep 17 00:00:00 2001 From: Azad Nautiyal Date: Mon, 4 Jan 2021 20:50:00 +0530 Subject: [PATCH 503/521] Added new File WordBoggle.java in Java/Misc (#2007) * Added New Java file in Java/Misc * Update largestRange.java * Update largestRange.java * Update largestRange.java * Update largestRange.java * Revert "Largest range" * Added WordBoggle.java * Update WordBoggle.java * Added RangeInSortedArray.java in Java/Misc --- Misc/RangeInSortedArray.java | 82 ++++++++++++++++++++++ Misc/WordBoggle.java | 130 +++++++++++++++++++++++++++++++++++ 2 files changed, 212 insertions(+) create mode 100644 Misc/RangeInSortedArray.java create mode 100644 Misc/WordBoggle.java diff --git a/Misc/RangeInSortedArray.java b/Misc/RangeInSortedArray.java new file mode 100644 index 000000000000..65056444ff03 --- /dev/null +++ b/Misc/RangeInSortedArray.java @@ -0,0 +1,82 @@ +package Misc; + +import java.util.*; + +public class RangeInSortedArray { + + public static void main(String[] args) { + // Testcases + assert Arrays.equals(sortedRange(new int[] {1, 2, 3, 3, 3, 4, 5}, 3), new int[] {2, 4}); + assert Arrays.equals(sortedRange(new int[] {1, 2, 3, 3, 3, 4, 5}, 4), new int[] {5, 5}); + assert Arrays.equals(sortedRange(new int[] {0, 1, 2}, 3), new int[] {-1, -1}); + } + + // Get the 1st and last occurrence index of a number 'key' in a non-decreasing array 'nums' + // Gives [-1, -1] in case element doesn't exist in array + public static int[] sortedRange(int[] nums, int key) { + int[] range = new int[] {-1, -1}; + alteredBinSearchIter(nums, key, 0, nums.length - 1, range, true); + alteredBinSearchIter(nums, key, 0, nums.length - 1, range, false); + return range; + } + + // Recursive altered binary search which searches for leftmost as well as rightmost occurrence of + // 'key' + public static void alteredBinSearch( + int[] nums, int key, int left, int right, int[] range, boolean goLeft) { + if (left > right) return; + int mid = (left + right) / 2; + if (nums[mid] > key) alteredBinSearch(nums, key, left, mid - 1, range, goLeft); + else if (nums[mid] < key) alteredBinSearch(nums, key, mid + 1, right, range, goLeft); + else { + if (goLeft) { + if (mid == 0 || nums[mid - 1] != key) range[0] = mid; + else alteredBinSearch(nums, key, left, mid - 1, range, goLeft); + } else { + if (mid == nums.length - 1 || nums[mid + 1] != key) range[1] = mid; + else alteredBinSearch(nums, key, mid + 1, right, range, goLeft); + } + } + } + + // Iterative altered binary search which searches for leftmost as well as rightmost occurrence of + // 'key' + public static void alteredBinSearchIter( + int[] nums, int key, int left, int right, int[] range, boolean goLeft) { + while (left <= right) { + int mid = (left + right) / 2; + if (nums[mid] > key) right = mid - 1; + else if (nums[mid] < key) left = mid + 1; + else { + if (goLeft) { + if (mid == 0 || nums[mid - 1] != key) { + range[0] = mid; + return; + } else right = mid - 1; + } else { + if (mid == nums.length - 1 || nums[mid + 1] != key) { + range[1] = mid; + return; + } else left = mid + 1; + } + } + } + } + + public static int getCountLessThan(int[] nums, int key) { + return getLessThan(nums, key, 0, nums.length - 1); + } + + public static int getLessThan(int[] nums, int key, int left, int right) { + int count = 0; + while (left <= right) { + int mid = (left + right) / 2; + if (nums[mid] > key) right = mid - 1; + else if (nums[mid] <= key) { + count = mid + 1; // Atleast mid+1 elements exist which are <= key + left = mid + 1; + } + } + return count; + } +} \ No newline at end of file diff --git a/Misc/WordBoggle.java b/Misc/WordBoggle.java new file mode 100644 index 000000000000..130784ac7ff4 --- /dev/null +++ b/Misc/WordBoggle.java @@ -0,0 +1,130 @@ +import java.util.*; + +public class WordBoggle { + + /** + * O(nm * 8^s + ws) time where n=width of boggle board, m=height of boggle board, s=length of + * longest word in string array, w= length of string array, 8 is due to 8 explorable neighbours + * O(nm + ws) space. + */ + public static List boggleBoard(char[][] board, String[] words) { + Trie trie = new Trie(); + for (String word : words) trie.add(word); + Set finalWords = new HashSet<>(); + boolean[][] visited = new boolean[board.length][board.length]; + for (int i = 0; i < board.length; i++) + for (int j = 0; j < board[i].length; j++) + explore(i, j, board, trie.root, visited, finalWords); + return new ArrayList<>(finalWords); + } + + public static void main(String[] args) { + // Testcase + List ans = + new ArrayList<>( + Arrays.asList("a", "boggle", "this", "NOTRE_PEATED", "is", "simple", "board")); + assert (boggleBoard( + new char[][] { + {'t', 'h', 'i', 's', 'i', 's', 'a'}, + {'s', 'i', 'm', 'p', 'l', 'e', 'x'}, + {'b', 'x', 'x', 'x', 'x', 'e', 'b'}, + {'x', 'o', 'g', 'g', 'l', 'x', 'o'}, + {'x', 'x', 'x', 'D', 'T', 'r', 'a'}, + {'R', 'E', 'P', 'E', 'A', 'd', 'x'}, + {'x', 'x', 'x', 'x', 'x', 'x', 'x'}, + {'N', 'O', 'T', 'R', 'E', '_', 'P'}, + {'x', 'x', 'D', 'E', 'T', 'A', 'E'}, + }, + new String[] { + "this", + "is", + "not", + "a", + "simple", + "test", + "boggle", + "board", + "REPEATED", + "NOTRE_PEATED", + }) + .equals(ans)); + } + + public static void explore( + int i, + int j, + char[][] board, + TrieNode trieNode, + boolean[][] visited, + Set finalWords) { + if (visited[i][j]) return; + + char letter = board[i][j]; + if (!trieNode.children.containsKey(letter)) { + return; + } + visited[i][j] = true; + trieNode = trieNode.children.get(letter); + if (trieNode.children.containsKey('*')) finalWords.add(trieNode.word); + + List neighbors = getNeighbors(i, j, board); + for (Integer[] neighbor : neighbors) + explore(neighbor[0], neighbor[1], board, trieNode, visited, finalWords); + + visited[i][j] = false; + } + + public static List getNeighbors(int i, int j, char[][] board) { + List neighbors = new ArrayList<>(); + if (i > 0 && j > 0) neighbors.add(new Integer[] {i - 1, j - 1}); + + if (i > 0 && j < board[0].length - 1) neighbors.add(new Integer[] {i - 1, j + 1}); + + if (i < board.length - 1 && j < board[0].length - 1) + neighbors.add(new Integer[] {i + 1, j + 1}); + + if (i < board.length - 1 && j > 0) neighbors.add(new Integer[] {i + 1, j - 1}); + + if (i > 0) neighbors.add(new Integer[] {i - 1, j}); + + if (i < board.length - 1) neighbors.add(new Integer[] {i + 1, j}); + + if (j > 0) neighbors.add(new Integer[] {i, j - 1}); + + if (j < board[0].length - 1) neighbors.add(new Integer[] {i, j + 1}); + + return neighbors; + } +} + +// Trie used to optimize string search +class TrieNode { + + Map children = new HashMap<>(); + String word = ""; +} + +class Trie { + + TrieNode root; + char endSymbol; + + public Trie() { + this.root = new TrieNode(); + this.endSymbol = '*'; + } + + public void add(String str) { + TrieNode node = this.root; + for (int i = 0; i < str.length(); i++) { + char letter = str.charAt(i); + if (!node.children.containsKey(letter)) { + TrieNode newNode = new TrieNode(); + node.children.put(letter, newNode); + } + node = node.children.get(letter); + } + node.children.put(this.endSymbol, null); + node.word = str; + } +} From 936861cafd7594e439067c9bc06b3b515be42f38 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Mon, 4 Jan 2021 15:20:36 +0000 Subject: [PATCH 504/521] Formatted with Google Java Formatter --- Misc/RangeInSortedArray.java | 134 +++++++++++------------ Misc/WordBoggle.java | 206 +++++++++++++++++------------------ 2 files changed, 170 insertions(+), 170 deletions(-) diff --git a/Misc/RangeInSortedArray.java b/Misc/RangeInSortedArray.java index 65056444ff03..5e0563bc21e4 100644 --- a/Misc/RangeInSortedArray.java +++ b/Misc/RangeInSortedArray.java @@ -4,79 +4,79 @@ public class RangeInSortedArray { - public static void main(String[] args) { - // Testcases - assert Arrays.equals(sortedRange(new int[] {1, 2, 3, 3, 3, 4, 5}, 3), new int[] {2, 4}); - assert Arrays.equals(sortedRange(new int[] {1, 2, 3, 3, 3, 4, 5}, 4), new int[] {5, 5}); - assert Arrays.equals(sortedRange(new int[] {0, 1, 2}, 3), new int[] {-1, -1}); - } + public static void main(String[] args) { + // Testcases + assert Arrays.equals(sortedRange(new int[] {1, 2, 3, 3, 3, 4, 5}, 3), new int[] {2, 4}); + assert Arrays.equals(sortedRange(new int[] {1, 2, 3, 3, 3, 4, 5}, 4), new int[] {5, 5}); + assert Arrays.equals(sortedRange(new int[] {0, 1, 2}, 3), new int[] {-1, -1}); + } - // Get the 1st and last occurrence index of a number 'key' in a non-decreasing array 'nums' - // Gives [-1, -1] in case element doesn't exist in array - public static int[] sortedRange(int[] nums, int key) { - int[] range = new int[] {-1, -1}; - alteredBinSearchIter(nums, key, 0, nums.length - 1, range, true); - alteredBinSearchIter(nums, key, 0, nums.length - 1, range, false); - return range; - } + // Get the 1st and last occurrence index of a number 'key' in a non-decreasing array 'nums' + // Gives [-1, -1] in case element doesn't exist in array + public static int[] sortedRange(int[] nums, int key) { + int[] range = new int[] {-1, -1}; + alteredBinSearchIter(nums, key, 0, nums.length - 1, range, true); + alteredBinSearchIter(nums, key, 0, nums.length - 1, range, false); + return range; + } - // Recursive altered binary search which searches for leftmost as well as rightmost occurrence of - // 'key' - public static void alteredBinSearch( - int[] nums, int key, int left, int right, int[] range, boolean goLeft) { - if (left > right) return; - int mid = (left + right) / 2; - if (nums[mid] > key) alteredBinSearch(nums, key, left, mid - 1, range, goLeft); - else if (nums[mid] < key) alteredBinSearch(nums, key, mid + 1, right, range, goLeft); - else { - if (goLeft) { - if (mid == 0 || nums[mid - 1] != key) range[0] = mid; - else alteredBinSearch(nums, key, left, mid - 1, range, goLeft); - } else { - if (mid == nums.length - 1 || nums[mid + 1] != key) range[1] = mid; - else alteredBinSearch(nums, key, mid + 1, right, range, goLeft); - } - } + // Recursive altered binary search which searches for leftmost as well as rightmost occurrence of + // 'key' + public static void alteredBinSearch( + int[] nums, int key, int left, int right, int[] range, boolean goLeft) { + if (left > right) return; + int mid = (left + right) / 2; + if (nums[mid] > key) alteredBinSearch(nums, key, left, mid - 1, range, goLeft); + else if (nums[mid] < key) alteredBinSearch(nums, key, mid + 1, right, range, goLeft); + else { + if (goLeft) { + if (mid == 0 || nums[mid - 1] != key) range[0] = mid; + else alteredBinSearch(nums, key, left, mid - 1, range, goLeft); + } else { + if (mid == nums.length - 1 || nums[mid + 1] != key) range[1] = mid; + else alteredBinSearch(nums, key, mid + 1, right, range, goLeft); + } } + } - // Iterative altered binary search which searches for leftmost as well as rightmost occurrence of - // 'key' - public static void alteredBinSearchIter( - int[] nums, int key, int left, int right, int[] range, boolean goLeft) { - while (left <= right) { - int mid = (left + right) / 2; - if (nums[mid] > key) right = mid - 1; - else if (nums[mid] < key) left = mid + 1; - else { - if (goLeft) { - if (mid == 0 || nums[mid - 1] != key) { - range[0] = mid; - return; - } else right = mid - 1; - } else { - if (mid == nums.length - 1 || nums[mid + 1] != key) { - range[1] = mid; - return; - } else left = mid + 1; - } - } + // Iterative altered binary search which searches for leftmost as well as rightmost occurrence of + // 'key' + public static void alteredBinSearchIter( + int[] nums, int key, int left, int right, int[] range, boolean goLeft) { + while (left <= right) { + int mid = (left + right) / 2; + if (nums[mid] > key) right = mid - 1; + else if (nums[mid] < key) left = mid + 1; + else { + if (goLeft) { + if (mid == 0 || nums[mid - 1] != key) { + range[0] = mid; + return; + } else right = mid - 1; + } else { + if (mid == nums.length - 1 || nums[mid + 1] != key) { + range[1] = mid; + return; + } else left = mid + 1; } + } } + } - public static int getCountLessThan(int[] nums, int key) { - return getLessThan(nums, key, 0, nums.length - 1); - } + public static int getCountLessThan(int[] nums, int key) { + return getLessThan(nums, key, 0, nums.length - 1); + } - public static int getLessThan(int[] nums, int key, int left, int right) { - int count = 0; - while (left <= right) { - int mid = (left + right) / 2; - if (nums[mid] > key) right = mid - 1; - else if (nums[mid] <= key) { - count = mid + 1; // Atleast mid+1 elements exist which are <= key - left = mid + 1; - } - } - return count; + public static int getLessThan(int[] nums, int key, int left, int right) { + int count = 0; + while (left <= right) { + int mid = (left + right) / 2; + if (nums[mid] > key) right = mid - 1; + else if (nums[mid] <= key) { + count = mid + 1; // Atleast mid+1 elements exist which are <= key + left = mid + 1; + } } -} \ No newline at end of file + return count; + } +} diff --git a/Misc/WordBoggle.java b/Misc/WordBoggle.java index 130784ac7ff4..e7f92642332b 100644 --- a/Misc/WordBoggle.java +++ b/Misc/WordBoggle.java @@ -2,129 +2,129 @@ public class WordBoggle { - /** - * O(nm * 8^s + ws) time where n=width of boggle board, m=height of boggle board, s=length of - * longest word in string array, w= length of string array, 8 is due to 8 explorable neighbours - * O(nm + ws) space. - */ - public static List boggleBoard(char[][] board, String[] words) { - Trie trie = new Trie(); - for (String word : words) trie.add(word); - Set finalWords = new HashSet<>(); - boolean[][] visited = new boolean[board.length][board.length]; - for (int i = 0; i < board.length; i++) - for (int j = 0; j < board[i].length; j++) - explore(i, j, board, trie.root, visited, finalWords); - return new ArrayList<>(finalWords); + /** + * O(nm * 8^s + ws) time where n=width of boggle board, m=height of boggle board, s=length of + * longest word in string array, w= length of string array, 8 is due to 8 explorable neighbours + * O(nm + ws) space. + */ + public static List boggleBoard(char[][] board, String[] words) { + Trie trie = new Trie(); + for (String word : words) trie.add(word); + Set finalWords = new HashSet<>(); + boolean[][] visited = new boolean[board.length][board.length]; + for (int i = 0; i < board.length; i++) + for (int j = 0; j < board[i].length; j++) + explore(i, j, board, trie.root, visited, finalWords); + return new ArrayList<>(finalWords); + } + + public static void main(String[] args) { + // Testcase + List ans = + new ArrayList<>( + Arrays.asList("a", "boggle", "this", "NOTRE_PEATED", "is", "simple", "board")); + assert (boggleBoard( + new char[][] { + {'t', 'h', 'i', 's', 'i', 's', 'a'}, + {'s', 'i', 'm', 'p', 'l', 'e', 'x'}, + {'b', 'x', 'x', 'x', 'x', 'e', 'b'}, + {'x', 'o', 'g', 'g', 'l', 'x', 'o'}, + {'x', 'x', 'x', 'D', 'T', 'r', 'a'}, + {'R', 'E', 'P', 'E', 'A', 'd', 'x'}, + {'x', 'x', 'x', 'x', 'x', 'x', 'x'}, + {'N', 'O', 'T', 'R', 'E', '_', 'P'}, + {'x', 'x', 'D', 'E', 'T', 'A', 'E'}, + }, + new String[] { + "this", + "is", + "not", + "a", + "simple", + "test", + "boggle", + "board", + "REPEATED", + "NOTRE_PEATED", + }) + .equals(ans)); + } + + public static void explore( + int i, + int j, + char[][] board, + TrieNode trieNode, + boolean[][] visited, + Set finalWords) { + if (visited[i][j]) return; + + char letter = board[i][j]; + if (!trieNode.children.containsKey(letter)) { + return; } + visited[i][j] = true; + trieNode = trieNode.children.get(letter); + if (trieNode.children.containsKey('*')) finalWords.add(trieNode.word); - public static void main(String[] args) { - // Testcase - List ans = - new ArrayList<>( - Arrays.asList("a", "boggle", "this", "NOTRE_PEATED", "is", "simple", "board")); - assert (boggleBoard( - new char[][] { - {'t', 'h', 'i', 's', 'i', 's', 'a'}, - {'s', 'i', 'm', 'p', 'l', 'e', 'x'}, - {'b', 'x', 'x', 'x', 'x', 'e', 'b'}, - {'x', 'o', 'g', 'g', 'l', 'x', 'o'}, - {'x', 'x', 'x', 'D', 'T', 'r', 'a'}, - {'R', 'E', 'P', 'E', 'A', 'd', 'x'}, - {'x', 'x', 'x', 'x', 'x', 'x', 'x'}, - {'N', 'O', 'T', 'R', 'E', '_', 'P'}, - {'x', 'x', 'D', 'E', 'T', 'A', 'E'}, - }, - new String[] { - "this", - "is", - "not", - "a", - "simple", - "test", - "boggle", - "board", - "REPEATED", - "NOTRE_PEATED", - }) - .equals(ans)); - } + List neighbors = getNeighbors(i, j, board); + for (Integer[] neighbor : neighbors) + explore(neighbor[0], neighbor[1], board, trieNode, visited, finalWords); - public static void explore( - int i, - int j, - char[][] board, - TrieNode trieNode, - boolean[][] visited, - Set finalWords) { - if (visited[i][j]) return; - - char letter = board[i][j]; - if (!trieNode.children.containsKey(letter)) { - return; - } - visited[i][j] = true; - trieNode = trieNode.children.get(letter); - if (trieNode.children.containsKey('*')) finalWords.add(trieNode.word); - - List neighbors = getNeighbors(i, j, board); - for (Integer[] neighbor : neighbors) - explore(neighbor[0], neighbor[1], board, trieNode, visited, finalWords); - - visited[i][j] = false; - } + visited[i][j] = false; + } - public static List getNeighbors(int i, int j, char[][] board) { - List neighbors = new ArrayList<>(); - if (i > 0 && j > 0) neighbors.add(new Integer[] {i - 1, j - 1}); + public static List getNeighbors(int i, int j, char[][] board) { + List neighbors = new ArrayList<>(); + if (i > 0 && j > 0) neighbors.add(new Integer[] {i - 1, j - 1}); - if (i > 0 && j < board[0].length - 1) neighbors.add(new Integer[] {i - 1, j + 1}); + if (i > 0 && j < board[0].length - 1) neighbors.add(new Integer[] {i - 1, j + 1}); - if (i < board.length - 1 && j < board[0].length - 1) - neighbors.add(new Integer[] {i + 1, j + 1}); + if (i < board.length - 1 && j < board[0].length - 1) + neighbors.add(new Integer[] {i + 1, j + 1}); - if (i < board.length - 1 && j > 0) neighbors.add(new Integer[] {i + 1, j - 1}); + if (i < board.length - 1 && j > 0) neighbors.add(new Integer[] {i + 1, j - 1}); - if (i > 0) neighbors.add(new Integer[] {i - 1, j}); + if (i > 0) neighbors.add(new Integer[] {i - 1, j}); - if (i < board.length - 1) neighbors.add(new Integer[] {i + 1, j}); + if (i < board.length - 1) neighbors.add(new Integer[] {i + 1, j}); - if (j > 0) neighbors.add(new Integer[] {i, j - 1}); + if (j > 0) neighbors.add(new Integer[] {i, j - 1}); - if (j < board[0].length - 1) neighbors.add(new Integer[] {i, j + 1}); + if (j < board[0].length - 1) neighbors.add(new Integer[] {i, j + 1}); - return neighbors; - } + return neighbors; + } } // Trie used to optimize string search class TrieNode { - Map children = new HashMap<>(); - String word = ""; + Map children = new HashMap<>(); + String word = ""; } class Trie { - TrieNode root; - char endSymbol; - - public Trie() { - this.root = new TrieNode(); - this.endSymbol = '*'; - } - - public void add(String str) { - TrieNode node = this.root; - for (int i = 0; i < str.length(); i++) { - char letter = str.charAt(i); - if (!node.children.containsKey(letter)) { - TrieNode newNode = new TrieNode(); - node.children.put(letter, newNode); - } - node = node.children.get(letter); - } - node.children.put(this.endSymbol, null); - node.word = str; + TrieNode root; + char endSymbol; + + public Trie() { + this.root = new TrieNode(); + this.endSymbol = '*'; + } + + public void add(String str) { + TrieNode node = this.root; + for (int i = 0; i < str.length(); i++) { + char letter = str.charAt(i); + if (!node.children.containsKey(letter)) { + TrieNode newNode = new TrieNode(); + node.children.put(letter, newNode); + } + node = node.children.get(letter); } + node.children.put(this.endSymbol, null); + node.word = str; + } } From be8432c38eb272974b539d83a990f346960fa979 Mon Sep 17 00:00:00 2001 From: Sameer Ahmed Khan <68906588+sameerahmedk@users.noreply.github.com> Date: Wed, 3 Feb 2021 14:02:25 +0500 Subject: [PATCH 505/521] Fixes: #2057 (#2086) Fixed typo --- DataStructures/Graphs/BellmanFord.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Graphs/BellmanFord.java b/DataStructures/Graphs/BellmanFord.java index b817b6dcd5c8..7c848b6823ed 100644 --- a/DataStructures/Graphs/BellmanFord.java +++ b/DataStructures/Graphs/BellmanFord.java @@ -150,7 +150,7 @@ public void show( * @param y End vertex * @param z Weight */ - public void addEdge(int x, int y, int z) // Adds unidirectionl Edge + public void addEdge(int x, int y, int z) // Adds unidirectional edge { edges[index++] = new Edge(x, y, z); } From b8c1177bc89ea7d1376403c73f81f274c3a23173 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Wed, 3 Feb 2021 09:03:01 +0000 Subject: [PATCH 506/521] updating DIRECTORY.md --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 631b2e2c3eac..ce1488681675 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -167,6 +167,8 @@ ## Misc * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) + * [RangeInSortedArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/RangeInSortedArray.java) + * [WordBoggle](https://github.com/TheAlgorithms/Java/blob/master/Misc/WordBoggle.java) ## Others * [BestFit](https://github.com/TheAlgorithms/Java/blob/master/Others/BestFit.java) From d1e75019a7b0419ec4cf17444e457690afb131de Mon Sep 17 00:00:00 2001 From: Sameer Ahmed Khan <68906588+sameerahmedk@users.noreply.github.com> Date: Wed, 3 Feb 2021 16:21:02 +0500 Subject: [PATCH 507/521] FIXES: #2056 (#2085) Fixed typo --- DataStructures/Graphs/BellmanFord.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Graphs/BellmanFord.java b/DataStructures/Graphs/BellmanFord.java index 7c848b6823ed..1399e4f3724f 100644 --- a/DataStructures/Graphs/BellmanFord.java +++ b/DataStructures/Graphs/BellmanFord.java @@ -87,7 +87,7 @@ public static void main(String args[]) { System.out.println("Negative cycle"); break; } - if (neg == 0) // Go ahead and show results of computaion + if (neg == 0) // Go ahead and show results of computation { System.out.println("Distances are: "); for (i = 0; i < v; i++) System.out.println(i + " " + dist[i]); From 912be910c8eb1581ec25386c697bb5a2e956b618 Mon Sep 17 00:00:00 2001 From: Sameer Ahmed Khan <68906588+sameerahmedk@users.noreply.github.com> Date: Wed, 3 Feb 2021 16:23:10 +0500 Subject: [PATCH 508/521] Fixed Spelling error. See issue #2055 (#2083) Corrected 'distance' spelling in line 51. --- DataStructures/Graphs/BellmanFord.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataStructures/Graphs/BellmanFord.java b/DataStructures/Graphs/BellmanFord.java index 1399e4f3724f..bd431a5f86fc 100644 --- a/DataStructures/Graphs/BellmanFord.java +++ b/DataStructures/Graphs/BellmanFord.java @@ -48,7 +48,7 @@ public static void main(String args[]) { public void go() // Interactive run for understanding the class first time. Assumes source vertex is 0 and - // shows distaance to all vertices + // shows distance to all vertices { Scanner sc = new Scanner(System.in); // Grab scanner object for user input int i, v, e, u, ve, w, j, neg = 0; From 93d1a5c12b8d8212934660092334b5cdf696d0a7 Mon Sep 17 00:00:00 2001 From: Anup Kumar Panwar <1anuppanwar@gmail.com> Date: Thu, 11 Feb 2021 21:24:20 +0530 Subject: [PATCH 509/521] Create stale.yml --- .github/stale.yml | 63 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 .github/stale.yml diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 000000000000..36ca56266b26 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,63 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 30 + +# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 7 + +# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) +onlyLabels: [] + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: + - "Status: on hold" + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: false + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: false + +# Set to true to ignore issues with an assignee (defaults to false) +exemptAssignees: false + +# Label to use when marking as stale +staleLabel: stale + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 5 + +# Comment to post when removing the stale label. +# unmarkComment: > +# Your comment here. + +# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': +pulls: + # Comment to post when marking as stale. Set to `false` to disable + markComment: > + This pull request has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. + + # Comment to post when closing a stale Pull Request. + closeComment: > + Please reopen this pull request once you commit the changes requested + or make improvements on the code. If this is not the case and you need + some help, feel free to seek help from our [Gitter](https://gitter.im/TheAlgorithms) + or ping one of the reviewers. Thank you for your contributions! + +issues: + # Comment to post when marking as stale. Set to `false` to disable + markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. + + # Comment to post when closing a stale Issue. + closeComment: > + Please reopen this issue once you add more information and updates here. + If this is not the case and you need some help, feel free to seek help + from our [Gitter](https://gitter.im/TheAlgorithms) or ping one of the + reviewers. Thank you for your contributions! From a475463146593f657848d99201c04ae191b1dc28 Mon Sep 17 00:00:00 2001 From: ITAY VENTURA <39849952+Itayventura@users.noreply.github.com> Date: Sun, 21 Feb 2021 03:02:07 +0200 Subject: [PATCH 510/521] reducing complexity to linear complixity (#2087) * reducing complexity to linear complixity * reducing complexity to linear * update CheckAnagrams algo Co-authored-by: Yang Libin --- strings/CheckAnagrams.java | 64 +++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/strings/CheckAnagrams.java b/strings/CheckAnagrams.java index 20ab715acede..d1bd88662c5d 100644 --- a/strings/CheckAnagrams.java +++ b/strings/CheckAnagrams.java @@ -1,32 +1,52 @@ package strings; -import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; /** * Two strings are anagrams if they are made of the same letters arranged differently (ignoring the * case). */ public class CheckAnagrams { - public static void main(String[] args) { - assert isAnagrams("Silent", "Listen"); - assert isAnagrams("This is a string", "Is this a string"); - assert !isAnagrams("There", "Their"); - } + public static void main(String[] args) { + assert isAnagrams("Silent", "Listen"); + assert isAnagrams("This is a string", "Is this a string"); + assert !isAnagrams("There", "Their"); + } - /** - * Check if two strings are anagrams or not - * - * @param s1 the first string - * @param s2 the second string - * @return {@code true} if two string are anagrams, otherwise {@code false} - */ - public static boolean isAnagrams(String s1, String s2) { - s1 = s1.toLowerCase(); - s2 = s2.toLowerCase(); - char[] values1 = s1.toCharArray(); - char[] values2 = s2.toCharArray(); - Arrays.sort(values1); - Arrays.sort(values2); - return new String(values1).equals(new String(values2)); - } + /** + * Check if two strings are anagrams or not + * + * @param s1 the first string + * @param s2 the second string + * @return {@code true} if two string are anagrams, otherwise {@code false} + */ + public static boolean isAnagrams(String s1, String s2) { + int l1 = s1.length(); + int l2 = s2.length(); + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + Map charAppearances = new HashMap<>(); + + for (int i = 0; i < l1; i++) { + char c = s1.charAt(i); + int numOfAppearances = charAppearances.getOrDefault(c, 0); + charAppearances.put(c, numOfAppearances + 1); + } + + for (int i = 0; i < l2; i++) { + char c = s2.charAt(i); + if (!charAppearances.containsKey(c)) { + return false; + } + charAppearances.put(c, charAppearances.get(c) - 1); + } + + for (int cnt : charAppearances.values()) { + if (cnt != 0) { + return false; + } + } + return true; + } } From ee64ac808432ee4df0b8cf19d77f29acaa989c26 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Sun, 21 Feb 2021 01:02:32 +0000 Subject: [PATCH 511/521] Formatted with Google Java Formatter --- strings/CheckAnagrams.java | 72 +++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/strings/CheckAnagrams.java b/strings/CheckAnagrams.java index d1bd88662c5d..95e68e1003e4 100644 --- a/strings/CheckAnagrams.java +++ b/strings/CheckAnagrams.java @@ -8,45 +8,45 @@ * case). */ public class CheckAnagrams { - public static void main(String[] args) { - assert isAnagrams("Silent", "Listen"); - assert isAnagrams("This is a string", "Is this a string"); - assert !isAnagrams("There", "Their"); - } + public static void main(String[] args) { + assert isAnagrams("Silent", "Listen"); + assert isAnagrams("This is a string", "Is this a string"); + assert !isAnagrams("There", "Their"); + } - /** - * Check if two strings are anagrams or not - * - * @param s1 the first string - * @param s2 the second string - * @return {@code true} if two string are anagrams, otherwise {@code false} - */ - public static boolean isAnagrams(String s1, String s2) { - int l1 = s1.length(); - int l2 = s2.length(); - s1 = s1.toLowerCase(); - s2 = s2.toLowerCase(); - Map charAppearances = new HashMap<>(); + /** + * Check if two strings are anagrams or not + * + * @param s1 the first string + * @param s2 the second string + * @return {@code true} if two string are anagrams, otherwise {@code false} + */ + public static boolean isAnagrams(String s1, String s2) { + int l1 = s1.length(); + int l2 = s2.length(); + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + Map charAppearances = new HashMap<>(); - for (int i = 0; i < l1; i++) { - char c = s1.charAt(i); - int numOfAppearances = charAppearances.getOrDefault(c, 0); - charAppearances.put(c, numOfAppearances + 1); - } + for (int i = 0; i < l1; i++) { + char c = s1.charAt(i); + int numOfAppearances = charAppearances.getOrDefault(c, 0); + charAppearances.put(c, numOfAppearances + 1); + } - for (int i = 0; i < l2; i++) { - char c = s2.charAt(i); - if (!charAppearances.containsKey(c)) { - return false; - } - charAppearances.put(c, charAppearances.get(c) - 1); - } + for (int i = 0; i < l2; i++) { + char c = s2.charAt(i); + if (!charAppearances.containsKey(c)) { + return false; + } + charAppearances.put(c, charAppearances.get(c) - 1); + } - for (int cnt : charAppearances.values()) { - if (cnt != 0) { - return false; - } - } - return true; + for (int cnt : charAppearances.values()) { + if (cnt != 0) { + return false; + } } + return true; + } } From 00b327a2fbf5956f4a0fbf946ea4706324169512 Mon Sep 17 00:00:00 2001 From: Luke Weller <33352024+myselfweller@users.noreply.github.com> Date: Thu, 25 Feb 2021 16:59:19 +0000 Subject: [PATCH 512/521] fix spelling errors on CONTRIBUTING.md (#2112) * Update CONTRIBUTING.md * Revert "Update CONTRIBUTING.md" This reverts commit ef0be5d77ebe74bf2dc47fa07bfe5fb92ac2d014. * Update CONTRIBUTING.md --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2bcbf507c7b1..072372d2bd30 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,11 +8,11 @@ - Please avoid opening issues asking to be "assigned†to a particular algorithm. This merely creates unnecessary noise for maintainers. Instead, please submit your implementation in a pull request and it will be evaluated by project maintainers. -- If you are unable to find an open issue refering to the same problem, depending on the type of issue follow the appropriate steps: +- If you are unable to find an open issue referring to the same problem, depending on the type of issue follow the appropriate steps: #### **Do you want to contribute to the documentation?** -- Please read the documentation in here [Contributing to the Documentation]() ,[open a new one issue](https://github.com/TheAlgorithms/Java/issues/new), make changes and then create a pull request, it will be put under review and accepted if it is approprite. +- Please read the documentation in here [Contributing to the Documentation]() ,[open a new one issue](https://github.com/TheAlgorithms/Java/issues/new), make changes and then create a pull request, it will be put under review and accepted if it is appropriate. #### **Do you want to add a new feature?** @@ -20,7 +20,7 @@ #### **Do you want to fix a bug?** -- [Open a new one issue](https://github.com/TheAlgorithms/Java/issues/new).Be sure to include a **title and a clear description** and a **test case** demonstrating the expected behaviour that is not occuring. +- [Open a new one issue](https://github.com/TheAlgorithms/Java/issues/new).Be sure to include a **title and a clear description** and a **test case** demonstrating the expected behaviour that is not occurring. #### **Do you have questions about the source code?** From 4607f0b99dad039860cd714b2e43a9a23c27e69c Mon Sep 17 00:00:00 2001 From: Stepfen Shawn Date: Thu, 25 Feb 2021 16:15:52 -0600 Subject: [PATCH 513/521] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 3b7951527ab3..f6bcf04e7773 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2020 The Algorithms +Copyright (c) 2021 The Algorithms Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From f077c8d19e8979d5a3eb54717f4a457ceab53678 Mon Sep 17 00:00:00 2001 From: Ayaan Khan Date: Fri, 26 Feb 2021 22:47:04 +0530 Subject: [PATCH 514/521] added reviewers and maintainers guidelines (#2115) --- REVIEWER.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 REVIEWER.md diff --git a/REVIEWER.md b/REVIEWER.md new file mode 100644 index 000000000000..607b51e3c269 --- /dev/null +++ b/REVIEWER.md @@ -0,0 +1,13 @@ +# Guidelines for reviewers and maintainers + +Following are some guidelines for contributors who are providing reviews to the pull-requests. + +1. On any given pull-request, there only one reviewer should be active at a time. Once the reviewer is done, others may add short comments or any further reviews as needed. Again, one at a time. +2. Assigning reviewers should be avoided unless the pull-request is for a particular task the reviewer is more proficient in. +3. Any contributor who has had their code merged into the repo can provide with reviews as they have gone through the repo standards at least once before. The reviewer will be on a first-come-first serve basis. +4. Most repositories have a check-list in the description for pull-requests. Many times, the contributors are not following them and simply remove the checklist or checkthem without taking the time to review the checklist items. These contributors are almost always copying the code from somewhere. These should be pointed out politely and reviews should be blocked until the contributor updates the basic code structure per the checklist and the repo standards. +5. The reviewers should label every pull-request appropriately - including "invalid" as the case may be. +6. Some pull-requests have existing duplicate code or duplicate pull-requests or sometimes, a novice might create a new pull-request for every new commit. This is a daunting task but one of the responsibility of a reviewer. +7. Discourage creating branches on the repo but rather fork the repo to the respective userspace and contribute from that fork. +8. Some repos - C & C++ - have collaboration with GitPod wherein the code and the contribution can be executed and tested online with relative simplicity. It also contains tools necessary to perform debug and CI checks without installing any tools. Encourage contributors to utilize the feature. Reviewers can test the contributed algorithms online without worrying about forks and branches. +9. There should not be any hurry to merge pull-requests. Since the repos are educational, better to get the contributions right even if it takes a bit longer to review. Encourage patience and develop debugging skills of contributors. \ No newline at end of file From 4264e0f04576767f7aace2f0ee06a2d2681e2bab Mon Sep 17 00:00:00 2001 From: JohnKara Date: Fri, 26 Feb 2021 21:21:48 +0200 Subject: [PATCH 515/521] Added Linear Convolution, FFT, Bluestein's FFT and Circular and Linear Convolution using FFT --- Maths/CircularConvolutionFFT.java | 58 ++++++ Maths/Convolution.java | 47 +++++ Maths/ConvolutionFFT.java | 61 +++++++ Maths/FFT.java | 281 ++++++++++++++++++++++++++++++ Maths/FFTBluestein.java | 69 ++++++++ 5 files changed, 516 insertions(+) create mode 100644 Maths/CircularConvolutionFFT.java create mode 100644 Maths/Convolution.java create mode 100644 Maths/ConvolutionFFT.java create mode 100644 Maths/FFT.java create mode 100644 Maths/FFTBluestein.java diff --git a/Maths/CircularConvolutionFFT.java b/Maths/CircularConvolutionFFT.java new file mode 100644 index 000000000000..9182de9e8290 --- /dev/null +++ b/Maths/CircularConvolutionFFT.java @@ -0,0 +1,58 @@ +package com.maths; + +import java.util.ArrayList; + +/** + * Class for circular convolution of two discrete signals using the convolution theorem. + * + * @author Ioannis Karavitsis + * @version 1.0 + * */ +public class CircularConvolutionFFT +{ + /** + * This method pads the signal with zeros until it reaches the new size. + * + * @param x The signal to be padded. + * @param newSize The new size of the signal. + * */ + private static void padding(ArrayList x, int newSize) + { + if(x.size() < newSize) + { + int diff = newSize - x.size(); + for(int i = 0; i < diff; i++) + x.add(new FFT.Complex()); + } + } + + /** + * Discrete circular convolution function. It uses the convolution theorem for discrete signals: convolved = IDFT(DFT(a)*DFT(b)). + * Then we use the FFT algorithm for faster calculations of the two DFTs and the final IDFT. + * + * More info: + * https://en.wikipedia.org/wiki/Convolution_theorem + * + * @param a The first signal. + * @param b The other signal. + * @return The convolved signal. + * */ + public static ArrayList fftCircularConvolution(ArrayList a, ArrayList b) + { + int convolvedSize = Math.max(a.size(), b.size()); //The two signals must have the same size equal to the bigger one + padding(a, convolvedSize); //Zero padding the smaller signal + padding(b, convolvedSize); + + /* Find the FFTs of both signal. Here we use the Bluestein algorithm because we want the FFT to have the same length with the signal and not bigger */ + FFTBluestein.fftBluestein(a, false); + FFTBluestein.fftBluestein(b, false); + ArrayList convolved = new ArrayList<>(); + + for(int i = 0; i < a.size(); i++) + convolved.add(a.get(i).multiply(b.get(i))); //FFT(a)*FFT(b) + + FFTBluestein.fftBluestein(convolved, true); //IFFT + + return convolved; + } +} diff --git a/Maths/Convolution.java b/Maths/Convolution.java new file mode 100644 index 000000000000..575c12149619 --- /dev/null +++ b/Maths/Convolution.java @@ -0,0 +1,47 @@ +package com.maths; + +/** + * Class for linear convolution of two discrete signals + * + * @author Ioannis Karavitsis + * @version 1.0 + * */ +public class Convolution +{ + /** + * Discrete linear convolution function. Both input signals and the output signal must start from 0. + * If you have a signal that has values before 0 then shift it to start from 0. + * + * @param A The first discrete signal + * @param B The second discrete signal + * @return The convolved signal + * */ + public static double[] convolution(double[] A, double[] B) + { + double[] convolved = new double[A.length + B.length - 1]; + + /* + The discrete convolution of two signals A and B is defined as: + + A.length + C[i] = Σ (A[k]*B[i-k]) + k=0 + + It's obvious that: 0 <= k <= A.length , 0 <= i <= A.length + B.length - 2 and 0 <= i-k <= B.length - 1 + From the last inequality we get that: i - B.length + 1 <= k <= i and thus we get the conditions below. + */ + for(int i = 0; i < convolved.length; i++) + { + convolved[i] = 0; + int k = Math.max(i - B.length + 1, 0); + + while(k < i + 1 && k < A.length) + { + convolved[i] += A[k] * B[i - k]; + k++; + } + } + + return convolved; + } +} \ No newline at end of file diff --git a/Maths/ConvolutionFFT.java b/Maths/ConvolutionFFT.java new file mode 100644 index 000000000000..3897be6ca3f3 --- /dev/null +++ b/Maths/ConvolutionFFT.java @@ -0,0 +1,61 @@ +package com.maths; + +import java.util.ArrayList; + +/** + * Class for linear convolution of two discrete signals using the convolution theorem. + * + * @author Ioannis Karavitsis + * @version 1.0 + * */ +public class ConvolutionFFT +{ + /** + * This method pads the signal with zeros until it reaches the new size. + * + * @param x The signal to be padded. + * @param newSize The new size of the signal. + * */ + private static void padding(ArrayList x, int newSize) + { + if(x.size() < newSize) + { + int diff = newSize - x.size(); + for(int i = 0; i < diff; i++) + x.add(new FFT.Complex()); + } + } + + /** + * Discrete linear convolution function. It uses the convolution theorem for discrete signals convolved: = IDFT(DFT(a)*DFT(b)). + * This is true for circular convolution. In order to get the linear convolution of the two signals we first pad the two signals to have the same size equal to the convolved signal (a.size() + b.size() - 1). + * Then we use the FFT algorithm for faster calculations of the two DFTs and the final IDFT. + * + * More info: + * https://en.wikipedia.org/wiki/Convolution_theorem + * https://ccrma.stanford.edu/~jos/ReviewFourier/FFT_Convolution.html + * + * @param a The first signal. + * @param b The other signal. + * @return The convolved signal. + * */ + public static ArrayList convolutionFFT(ArrayList a, ArrayList b) + { + int convolvedSize = a.size() + b.size() - 1; //The size of the convolved signal + padding(a, convolvedSize); //Zero padding both signals + padding(b, convolvedSize); + + /* Find the FFTs of both signals (Note that the size of the FFTs will be bigger than the convolvedSize because of the extra zero padding in FFT algorithm) */ + FFT.fft(a, false); + FFT.fft(b, false); + ArrayList convolved = new ArrayList<>(); + + for(int i = 0; i < a.size(); i++) + convolved.add(a.get(i).multiply(b.get(i))); //FFT(a)*FFT(b) + + FFT.fft(convolved, true); //IFFT + convolved.subList(convolvedSize, convolved.size()).clear(); //Remove the remaining zeros after the convolvedSize. These extra zeros came from paddingPowerOfTwo() method inside the fft() method. + + return convolved; + } +} diff --git a/Maths/FFT.java b/Maths/FFT.java new file mode 100644 index 000000000000..6a8f1217d7a2 --- /dev/null +++ b/Maths/FFT.java @@ -0,0 +1,281 @@ +package com.maths; + +import java.util.ArrayList; +import java.util.Collections; + +/** + * Class for calculating the Fast Fourier Transform (FFT) of a discrete signal using the Cooley-Tukey algorithm. + * + * @author Ioannis Karavitsis + * @version 1.0 + * */ +public class FFT +{ + /** + * This class represents a complex number and has methods for basic operations. + * + * More info: + * https://introcs.cs.princeton.edu/java/32class/Complex.java.html + * */ + static class Complex + { + private double real, img; + + /** + * Default Constructor. + * Creates the complex number 0. + * */ + public Complex() + { + real = 0; + img = 0; + } + + /** + * Constructor. Creates a complex number. + * + * @param r The real part of the number. + * @param i The imaginary part of the number. + * */ + public Complex(double r, double i) + { + real = r; + img = i; + } + + /** + * Returns the real part of the complex number. + * + * @return The real part of the complex number. + * */ + public double getReal() + { + return real; + } + + /** + * Returns the imaginary part of the complex number. + * + * @return The imaginary part of the complex number. + * */ + public double getImaginary() + { + return img; + } + + /** + * Adds this complex number to another. + * + * @param z The number to be added. + * @return The sum. + * */ + public Complex add(Complex z) + { + Complex temp = new Complex(); + temp.real = this.real + z.real; + temp.img = this.img + z.img; + return temp; + } + + /** + * Subtracts a number from this complex number. + * + * @param z The number to be subtracted. + * @return The difference. + * */ + public Complex subtract(Complex z) + { + Complex temp = new Complex(); + temp.real = this.real - z.real; + temp.img = this.img - z.img; + return temp; + } + + /** + * Multiplies this complex number by another. + * + * @param z The number to be multiplied. + * @return The product. + * */ + public Complex multiply(Complex z) + { + Complex temp = new Complex(); + temp.real = this.real*z.real - this.img*z.img; + temp.img = this.real*z.img + this.img*z.real; + return temp; + } + + /** + * Multiplies this complex number by a scalar. + * + * @param n The real number to be multiplied. + * @return The product. + * */ + public Complex multiply(double n) + { + Complex temp = new Complex(); + temp.real = this.real * n; + temp.img = this.img * n; + return temp; + } + + /** + * Finds the conjugate of this complex number. + * + * @return The conjugate. + * */ + public Complex conjugate() + { + Complex temp = new Complex(); + temp.real = this.real; + temp.img = -this.img; + return temp; + } + + /** + * Finds the magnitude of the complex number. + * + * @return The magnitude. + * */ + public double abs() + { + return Math.hypot(this.real, this.img); + } + + /** + * Divides this complex number by another. + * + * @param z The divisor. + * @return The quotient. + * */ + public Complex divide(Complex z) + { + Complex temp = new Complex(); + temp.real = (this.real*z.real + this.img*z.img) / (z.abs()*z.abs()); + temp.img = (this.img*z.real - this.real*z.img) / (z.abs()*z.abs()); + return temp; + } + + /** + * Divides this complex number by a scalar. + * + * @param n The divisor which is a real number. + * @return The quotient. + * */ + public Complex divide(double n) + { + Complex temp = new Complex(); + temp.real = this.real / n; + temp.img = this.img / n; + return temp; + } + } + + /** + * Iterative In-Place Radix-2 Cooley-Tukey Fast Fourier Transform Algorithm with Bit-Reversal. + * The size of the input signal must be a power of 2. If it isn't then it is padded with zeros and the output FFT will be bigger than the input signal. + * + * More info: + * https://www.algorithm-archive.org/contents/cooley_tukey/cooley_tukey.html + * https://www.geeksforgeeks.org/iterative-fast-fourier-transformation-polynomial-multiplication/ + * https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm + * https://cp-algorithms.com/algebra/fft.html + * + * @param x The discrete signal which is then converted to the FFT or the IFFT of signal x. + * @param inverse True if you want to find the inverse FFT. + * */ + public static void fft(ArrayList x, boolean inverse) + { + /* Pad the signal with zeros if necessary */ + paddingPowerOfTwo(x); + int N = x.size(); + + /* Find the log2(N) */ + int log2N = 0; + while((1 << log2N) < N) + log2N++; + + /* Swap the values of the signal with bit-reversal method */ + int reverse; + for(int i = 0; i < N; i++) + { + reverse = reverseBits(i, log2N); + if(i < reverse) + Collections.swap(x, i, reverse); + } + + int direction = inverse ? -1 : 1; + + /* Main loop of the algorithm */ + for(int len = 2; len <= N; len *= 2) + { + double angle = -2 * Math.PI / len * direction; + Complex wlen = new Complex(Math.cos(angle), Math.sin(angle)); + for(int i = 0; i < N; i += len) + { + Complex w = new Complex(1, 0); + for(int j = 0; j < len / 2; j++) + { + Complex u = x.get(i + j); + Complex v = w.multiply(x.get(i + j + len/2)); + x.set(i + j, u.add(v)); + x.set(i + j + len/2, u.subtract(v)); + w = w.multiply(wlen); + } + } + } + + /* Divide by N if we want the inverse FFT */ + if(inverse) + { + for (int i = 0; i < x.size(); i++) + { + Complex z = x.get(i); + x.set(i, z.divide(N)); + } + } + } + + /** + * This function reverses the bits of a number. + * It is used in Cooley-Tukey FFT algorithm. + * + * E.g. + * num = 13 = 00001101 in binary + * log2N = 8 + * Then reversed = 176 = 10110000 in binary + * + * More info: + * https://cp-algorithms.com/algebra/fft.html + * https://www.geeksforgeeks.org/write-an-efficient-c-program-to-reverse-bits-of-a-number/ + * + * @param num The integer you want to reverse its bits. + * @param log2N The number of bits you want to reverse. + * @return The reversed number + * */ + private static int reverseBits(int num, int log2N) + { + int reversed = 0; + for(int i = 0; i < log2N; i++) + { + if((num & (1 << i)) != 0) + reversed |= 1 << (log2N - 1 - i); + } + return reversed; + } + + /** + * This method pads an ArrayList with zeros in order to have a size equal to the next power of two of the previous size. + * + * @param x The ArrayList to be padded. + * */ + private static void paddingPowerOfTwo(ArrayList x) + { + int n = 1; + int oldSize = x.size(); + while(n < oldSize) + n *= 2; + for(int i = 0; i < n - oldSize; i++) + x.add(new Complex()); + } +} diff --git a/Maths/FFTBluestein.java b/Maths/FFTBluestein.java new file mode 100644 index 000000000000..644295cb69cc --- /dev/null +++ b/Maths/FFTBluestein.java @@ -0,0 +1,69 @@ +package com.maths; + +import java.util.ArrayList; + +/** + * Class for calculating the Fast Fourier Transform (FFT) of a discrete signal using the Bluestein's algorithm. + * + * @author Ioannis Karavitsis + * @version 1.0 + * */ +public class FFTBluestein +{ + /** + * Bluestein's FFT Algorithm. + * + * More info: + * https://en.wikipedia.org/wiki/Chirp_Z-transform#Bluestein.27s_algorithm + * http://tka4.org/materials/lib/Articles-Books/Numerical%20Algorithms/Hartley_Trasform/Bluestein%27s%20FFT%20algorithm%20-%20Wikipedia,%20the%20free%20encyclopedia.htm + * + * @param x The discrete signal which is then converted to the FFT or the IFFT of signal x. + * @param inverse True if you want to find the inverse FFT. + * */ + public static void fftBluestein(ArrayList x, boolean inverse) + { + int N = x.size(); + int bnSize = 2*N - 1; + int direction = inverse ? -1 : 1; + ArrayList an = new ArrayList<>(); + ArrayList bn = new ArrayList<>(); + + /* Initialization of the b(n) sequence (see Wikipedia's article above for the symbols used)*/ + for(int i = 0; i < bnSize; i++) + bn.add(new FFT.Complex()); + + for(int i = 0; i < N; i++) + { + double angle = (i - N + 1) * (i - N + 1) * Math.PI / N * direction; + bn.set(i, new FFT.Complex(Math.cos(angle), Math.sin(angle))); + bn.set(bnSize - i - 1, new FFT.Complex(Math.cos(angle), Math.sin(angle))); + } + + /* Initialization of the a(n) sequence */ + for(int i = 0; i < N; i++) + { + double angle = -i * i * Math.PI / N * direction; + an.add(x.get(i).multiply(new FFT.Complex(Math.cos(angle), Math.sin(angle)))); + } + + ArrayList convolution = ConvolutionFFT.convolutionFFT(an, bn); + + /* The final multiplication of the convolution with the b*(k) factor */ + for(int i = 0; i < N; i++) + { + double angle = -1 * i * i * Math.PI / N * direction; + FFT.Complex bk = new FFT.Complex(Math.cos(angle), Math.sin(angle)); + x.set(i, bk.multiply(convolution.get(i + N - 1))); + } + + /* Divide by N if we want the inverse FFT */ + if(inverse) + { + for (int i = 0; i < N; i++) + { + FFT.Complex z = x.get(i); + x.set(i, z.divide(N)); + } + } + } +} From ca2e20707f3549dae1133f25a8d02adcbb11cbf4 Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Fri, 26 Feb 2021 19:22:37 +0000 Subject: [PATCH 516/521] Formatted with Google Java Formatter --- Maths/CircularConvolutionFFT.java | 81 +++--- Maths/Convolution.java | 66 ++--- Maths/ConvolutionFFT.java | 89 +++--- Maths/FFT.java | 462 ++++++++++++++---------------- Maths/FFTBluestein.java | 102 +++---- 5 files changed, 374 insertions(+), 426 deletions(-) diff --git a/Maths/CircularConvolutionFFT.java b/Maths/CircularConvolutionFFT.java index 9182de9e8290..6c7c2c7e1277 100644 --- a/Maths/CircularConvolutionFFT.java +++ b/Maths/CircularConvolutionFFT.java @@ -7,52 +7,49 @@ * * @author Ioannis Karavitsis * @version 1.0 - * */ -public class CircularConvolutionFFT -{ - /** - * This method pads the signal with zeros until it reaches the new size. - * - * @param x The signal to be padded. - * @param newSize The new size of the signal. - * */ - private static void padding(ArrayList x, int newSize) - { - if(x.size() < newSize) - { - int diff = newSize - x.size(); - for(int i = 0; i < diff; i++) - x.add(new FFT.Complex()); - } + */ +public class CircularConvolutionFFT { + /** + * This method pads the signal with zeros until it reaches the new size. + * + * @param x The signal to be padded. + * @param newSize The new size of the signal. + */ + private static void padding(ArrayList x, int newSize) { + if (x.size() < newSize) { + int diff = newSize - x.size(); + for (int i = 0; i < diff; i++) x.add(new FFT.Complex()); } + } - /** - * Discrete circular convolution function. It uses the convolution theorem for discrete signals: convolved = IDFT(DFT(a)*DFT(b)). - * Then we use the FFT algorithm for faster calculations of the two DFTs and the final IDFT. - * - * More info: - * https://en.wikipedia.org/wiki/Convolution_theorem - * - * @param a The first signal. - * @param b The other signal. - * @return The convolved signal. - * */ - public static ArrayList fftCircularConvolution(ArrayList a, ArrayList b) - { - int convolvedSize = Math.max(a.size(), b.size()); //The two signals must have the same size equal to the bigger one - padding(a, convolvedSize); //Zero padding the smaller signal - padding(b, convolvedSize); + /** + * Discrete circular convolution function. It uses the convolution theorem for discrete signals: + * convolved = IDFT(DFT(a)*DFT(b)). Then we use the FFT algorithm for faster calculations of the + * two DFTs and the final IDFT. + * + *

More info: https://en.wikipedia.org/wiki/Convolution_theorem + * + * @param a The first signal. + * @param b The other signal. + * @return The convolved signal. + */ + public static ArrayList fftCircularConvolution( + ArrayList a, ArrayList b) { + int convolvedSize = + Math.max( + a.size(), b.size()); // The two signals must have the same size equal to the bigger one + padding(a, convolvedSize); // Zero padding the smaller signal + padding(b, convolvedSize); - /* Find the FFTs of both signal. Here we use the Bluestein algorithm because we want the FFT to have the same length with the signal and not bigger */ - FFTBluestein.fftBluestein(a, false); - FFTBluestein.fftBluestein(b, false); - ArrayList convolved = new ArrayList<>(); + /* Find the FFTs of both signal. Here we use the Bluestein algorithm because we want the FFT to have the same length with the signal and not bigger */ + FFTBluestein.fftBluestein(a, false); + FFTBluestein.fftBluestein(b, false); + ArrayList convolved = new ArrayList<>(); - for(int i = 0; i < a.size(); i++) - convolved.add(a.get(i).multiply(b.get(i))); //FFT(a)*FFT(b) + for (int i = 0; i < a.size(); i++) convolved.add(a.get(i).multiply(b.get(i))); // FFT(a)*FFT(b) - FFTBluestein.fftBluestein(convolved, true); //IFFT + FFTBluestein.fftBluestein(convolved, true); // IFFT - return convolved; - } + return convolved; + } } diff --git a/Maths/Convolution.java b/Maths/Convolution.java index 575c12149619..42757dbb5338 100644 --- a/Maths/Convolution.java +++ b/Maths/Convolution.java @@ -5,43 +5,39 @@ * * @author Ioannis Karavitsis * @version 1.0 - * */ -public class Convolution -{ - /** - * Discrete linear convolution function. Both input signals and the output signal must start from 0. - * If you have a signal that has values before 0 then shift it to start from 0. - * - * @param A The first discrete signal - * @param B The second discrete signal - * @return The convolved signal - * */ - public static double[] convolution(double[] A, double[] B) - { - double[] convolved = new double[A.length + B.length - 1]; + */ +public class Convolution { + /** + * Discrete linear convolution function. Both input signals and the output signal must start from + * 0. If you have a signal that has values before 0 then shift it to start from 0. + * + * @param A The first discrete signal + * @param B The second discrete signal + * @return The convolved signal + */ + public static double[] convolution(double[] A, double[] B) { + double[] convolved = new double[A.length + B.length - 1]; - /* - The discrete convolution of two signals A and B is defined as: + /* + The discrete convolution of two signals A and B is defined as: - A.length - C[i] = Σ (A[k]*B[i-k]) - k=0 + A.length + C[i] = Σ (A[k]*B[i-k]) + k=0 - It's obvious that: 0 <= k <= A.length , 0 <= i <= A.length + B.length - 2 and 0 <= i-k <= B.length - 1 - From the last inequality we get that: i - B.length + 1 <= k <= i and thus we get the conditions below. - */ - for(int i = 0; i < convolved.length; i++) - { - convolved[i] = 0; - int k = Math.max(i - B.length + 1, 0); + It's obvious that: 0 <= k <= A.length , 0 <= i <= A.length + B.length - 2 and 0 <= i-k <= B.length - 1 + From the last inequality we get that: i - B.length + 1 <= k <= i and thus we get the conditions below. + */ + for (int i = 0; i < convolved.length; i++) { + convolved[i] = 0; + int k = Math.max(i - B.length + 1, 0); - while(k < i + 1 && k < A.length) - { - convolved[i] += A[k] * B[i - k]; - k++; - } - } - - return convolved; + while (k < i + 1 && k < A.length) { + convolved[i] += A[k] * B[i - k]; + k++; + } } -} \ No newline at end of file + + return convolved; + } +} diff --git a/Maths/ConvolutionFFT.java b/Maths/ConvolutionFFT.java index 3897be6ca3f3..49032ae83578 100644 --- a/Maths/ConvolutionFFT.java +++ b/Maths/ConvolutionFFT.java @@ -7,55 +7,54 @@ * * @author Ioannis Karavitsis * @version 1.0 - * */ -public class ConvolutionFFT -{ - /** - * This method pads the signal with zeros until it reaches the new size. - * - * @param x The signal to be padded. - * @param newSize The new size of the signal. - * */ - private static void padding(ArrayList x, int newSize) - { - if(x.size() < newSize) - { - int diff = newSize - x.size(); - for(int i = 0; i < diff; i++) - x.add(new FFT.Complex()); - } + */ +public class ConvolutionFFT { + /** + * This method pads the signal with zeros until it reaches the new size. + * + * @param x The signal to be padded. + * @param newSize The new size of the signal. + */ + private static void padding(ArrayList x, int newSize) { + if (x.size() < newSize) { + int diff = newSize - x.size(); + for (int i = 0; i < diff; i++) x.add(new FFT.Complex()); } + } - /** - * Discrete linear convolution function. It uses the convolution theorem for discrete signals convolved: = IDFT(DFT(a)*DFT(b)). - * This is true for circular convolution. In order to get the linear convolution of the two signals we first pad the two signals to have the same size equal to the convolved signal (a.size() + b.size() - 1). - * Then we use the FFT algorithm for faster calculations of the two DFTs and the final IDFT. - * - * More info: - * https://en.wikipedia.org/wiki/Convolution_theorem - * https://ccrma.stanford.edu/~jos/ReviewFourier/FFT_Convolution.html - * - * @param a The first signal. - * @param b The other signal. - * @return The convolved signal. - * */ - public static ArrayList convolutionFFT(ArrayList a, ArrayList b) - { - int convolvedSize = a.size() + b.size() - 1; //The size of the convolved signal - padding(a, convolvedSize); //Zero padding both signals - padding(b, convolvedSize); + /** + * Discrete linear convolution function. It uses the convolution theorem for discrete signals + * convolved: = IDFT(DFT(a)*DFT(b)). This is true for circular convolution. In order to get the + * linear convolution of the two signals we first pad the two signals to have the same size equal + * to the convolved signal (a.size() + b.size() - 1). Then we use the FFT algorithm for faster + * calculations of the two DFTs and the final IDFT. + * + *

More info: https://en.wikipedia.org/wiki/Convolution_theorem + * https://ccrma.stanford.edu/~jos/ReviewFourier/FFT_Convolution.html + * + * @param a The first signal. + * @param b The other signal. + * @return The convolved signal. + */ + public static ArrayList convolutionFFT( + ArrayList a, ArrayList b) { + int convolvedSize = a.size() + b.size() - 1; // The size of the convolved signal + padding(a, convolvedSize); // Zero padding both signals + padding(b, convolvedSize); - /* Find the FFTs of both signals (Note that the size of the FFTs will be bigger than the convolvedSize because of the extra zero padding in FFT algorithm) */ - FFT.fft(a, false); - FFT.fft(b, false); - ArrayList convolved = new ArrayList<>(); + /* Find the FFTs of both signals (Note that the size of the FFTs will be bigger than the convolvedSize because of the extra zero padding in FFT algorithm) */ + FFT.fft(a, false); + FFT.fft(b, false); + ArrayList convolved = new ArrayList<>(); - for(int i = 0; i < a.size(); i++) - convolved.add(a.get(i).multiply(b.get(i))); //FFT(a)*FFT(b) + for (int i = 0; i < a.size(); i++) convolved.add(a.get(i).multiply(b.get(i))); // FFT(a)*FFT(b) - FFT.fft(convolved, true); //IFFT - convolved.subList(convolvedSize, convolved.size()).clear(); //Remove the remaining zeros after the convolvedSize. These extra zeros came from paddingPowerOfTwo() method inside the fft() method. + FFT.fft(convolved, true); // IFFT + convolved + .subList(convolvedSize, convolved.size()) + .clear(); // Remove the remaining zeros after the convolvedSize. These extra zeros came from + // paddingPowerOfTwo() method inside the fft() method. - return convolved; - } + return convolved; + } } diff --git a/Maths/FFT.java b/Maths/FFT.java index 6a8f1217d7a2..bdf8444e73ee 100644 --- a/Maths/FFT.java +++ b/Maths/FFT.java @@ -4,278 +4,242 @@ import java.util.Collections; /** - * Class for calculating the Fast Fourier Transform (FFT) of a discrete signal using the Cooley-Tukey algorithm. + * Class for calculating the Fast Fourier Transform (FFT) of a discrete signal using the + * Cooley-Tukey algorithm. * * @author Ioannis Karavitsis * @version 1.0 - * */ -public class FFT -{ + */ +public class FFT { + /** + * This class represents a complex number and has methods for basic operations. + * + *

More info: https://introcs.cs.princeton.edu/java/32class/Complex.java.html + */ + static class Complex { + private double real, img; + + /** Default Constructor. Creates the complex number 0. */ + public Complex() { + real = 0; + img = 0; + } + /** - * This class represents a complex number and has methods for basic operations. + * Constructor. Creates a complex number. * - * More info: - * https://introcs.cs.princeton.edu/java/32class/Complex.java.html - * */ - static class Complex - { - private double real, img; - - /** - * Default Constructor. - * Creates the complex number 0. - * */ - public Complex() - { - real = 0; - img = 0; - } - - /** - * Constructor. Creates a complex number. - * - * @param r The real part of the number. - * @param i The imaginary part of the number. - * */ - public Complex(double r, double i) - { - real = r; - img = i; - } - - /** - * Returns the real part of the complex number. - * - * @return The real part of the complex number. - * */ - public double getReal() - { - return real; - } - - /** - * Returns the imaginary part of the complex number. - * - * @return The imaginary part of the complex number. - * */ - public double getImaginary() - { - return img; - } - - /** - * Adds this complex number to another. - * - * @param z The number to be added. - * @return The sum. - * */ - public Complex add(Complex z) - { - Complex temp = new Complex(); - temp.real = this.real + z.real; - temp.img = this.img + z.img; - return temp; - } - - /** - * Subtracts a number from this complex number. - * - * @param z The number to be subtracted. - * @return The difference. - * */ - public Complex subtract(Complex z) - { - Complex temp = new Complex(); - temp.real = this.real - z.real; - temp.img = this.img - z.img; - return temp; - } - - /** - * Multiplies this complex number by another. - * - * @param z The number to be multiplied. - * @return The product. - * */ - public Complex multiply(Complex z) - { - Complex temp = new Complex(); - temp.real = this.real*z.real - this.img*z.img; - temp.img = this.real*z.img + this.img*z.real; - return temp; - } - - /** - * Multiplies this complex number by a scalar. - * - * @param n The real number to be multiplied. - * @return The product. - * */ - public Complex multiply(double n) - { - Complex temp = new Complex(); - temp.real = this.real * n; - temp.img = this.img * n; - return temp; - } - - /** - * Finds the conjugate of this complex number. - * - * @return The conjugate. - * */ - public Complex conjugate() - { - Complex temp = new Complex(); - temp.real = this.real; - temp.img = -this.img; - return temp; - } - - /** - * Finds the magnitude of the complex number. - * - * @return The magnitude. - * */ - public double abs() - { - return Math.hypot(this.real, this.img); - } - - /** - * Divides this complex number by another. - * - * @param z The divisor. - * @return The quotient. - * */ - public Complex divide(Complex z) - { - Complex temp = new Complex(); - temp.real = (this.real*z.real + this.img*z.img) / (z.abs()*z.abs()); - temp.img = (this.img*z.real - this.real*z.img) / (z.abs()*z.abs()); - return temp; - } - - /** - * Divides this complex number by a scalar. - * - * @param n The divisor which is a real number. - * @return The quotient. - * */ - public Complex divide(double n) - { - Complex temp = new Complex(); - temp.real = this.real / n; - temp.img = this.img / n; - return temp; - } + * @param r The real part of the number. + * @param i The imaginary part of the number. + */ + public Complex(double r, double i) { + real = r; + img = i; } /** - * Iterative In-Place Radix-2 Cooley-Tukey Fast Fourier Transform Algorithm with Bit-Reversal. - * The size of the input signal must be a power of 2. If it isn't then it is padded with zeros and the output FFT will be bigger than the input signal. + * Returns the real part of the complex number. * - * More info: - * https://www.algorithm-archive.org/contents/cooley_tukey/cooley_tukey.html - * https://www.geeksforgeeks.org/iterative-fast-fourier-transformation-polynomial-multiplication/ - * https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm - * https://cp-algorithms.com/algebra/fft.html - * - * @param x The discrete signal which is then converted to the FFT or the IFFT of signal x. - * @param inverse True if you want to find the inverse FFT. - * */ - public static void fft(ArrayList x, boolean inverse) - { - /* Pad the signal with zeros if necessary */ - paddingPowerOfTwo(x); - int N = x.size(); + * @return The real part of the complex number. + */ + public double getReal() { + return real; + } - /* Find the log2(N) */ - int log2N = 0; - while((1 << log2N) < N) - log2N++; + /** + * Returns the imaginary part of the complex number. + * + * @return The imaginary part of the complex number. + */ + public double getImaginary() { + return img; + } - /* Swap the values of the signal with bit-reversal method */ - int reverse; - for(int i = 0; i < N; i++) - { - reverse = reverseBits(i, log2N); - if(i < reverse) - Collections.swap(x, i, reverse); - } + /** + * Adds this complex number to another. + * + * @param z The number to be added. + * @return The sum. + */ + public Complex add(Complex z) { + Complex temp = new Complex(); + temp.real = this.real + z.real; + temp.img = this.img + z.img; + return temp; + } - int direction = inverse ? -1 : 1; + /** + * Subtracts a number from this complex number. + * + * @param z The number to be subtracted. + * @return The difference. + */ + public Complex subtract(Complex z) { + Complex temp = new Complex(); + temp.real = this.real - z.real; + temp.img = this.img - z.img; + return temp; + } - /* Main loop of the algorithm */ - for(int len = 2; len <= N; len *= 2) - { - double angle = -2 * Math.PI / len * direction; - Complex wlen = new Complex(Math.cos(angle), Math.sin(angle)); - for(int i = 0; i < N; i += len) - { - Complex w = new Complex(1, 0); - for(int j = 0; j < len / 2; j++) - { - Complex u = x.get(i + j); - Complex v = w.multiply(x.get(i + j + len/2)); - x.set(i + j, u.add(v)); - x.set(i + j + len/2, u.subtract(v)); - w = w.multiply(wlen); - } - } - } + /** + * Multiplies this complex number by another. + * + * @param z The number to be multiplied. + * @return The product. + */ + public Complex multiply(Complex z) { + Complex temp = new Complex(); + temp.real = this.real * z.real - this.img * z.img; + temp.img = this.real * z.img + this.img * z.real; + return temp; + } - /* Divide by N if we want the inverse FFT */ - if(inverse) - { - for (int i = 0; i < x.size(); i++) - { - Complex z = x.get(i); - x.set(i, z.divide(N)); - } - } + /** + * Multiplies this complex number by a scalar. + * + * @param n The real number to be multiplied. + * @return The product. + */ + public Complex multiply(double n) { + Complex temp = new Complex(); + temp.real = this.real * n; + temp.img = this.img * n; + return temp; } /** - * This function reverses the bits of a number. - * It is used in Cooley-Tukey FFT algorithm. + * Finds the conjugate of this complex number. * - * E.g. - * num = 13 = 00001101 in binary - * log2N = 8 - * Then reversed = 176 = 10110000 in binary + * @return The conjugate. + */ + public Complex conjugate() { + Complex temp = new Complex(); + temp.real = this.real; + temp.img = -this.img; + return temp; + } + + /** + * Finds the magnitude of the complex number. * - * More info: - * https://cp-algorithms.com/algebra/fft.html - * https://www.geeksforgeeks.org/write-an-efficient-c-program-to-reverse-bits-of-a-number/ + * @return The magnitude. + */ + public double abs() { + return Math.hypot(this.real, this.img); + } + + /** + * Divides this complex number by another. * - * @param num The integer you want to reverse its bits. - * @param log2N The number of bits you want to reverse. - * @return The reversed number - * */ - private static int reverseBits(int num, int log2N) - { - int reversed = 0; - for(int i = 0; i < log2N; i++) - { - if((num & (1 << i)) != 0) - reversed |= 1 << (log2N - 1 - i); - } - return reversed; + * @param z The divisor. + * @return The quotient. + */ + public Complex divide(Complex z) { + Complex temp = new Complex(); + temp.real = (this.real * z.real + this.img * z.img) / (z.abs() * z.abs()); + temp.img = (this.img * z.real - this.real * z.img) / (z.abs() * z.abs()); + return temp; } /** - * This method pads an ArrayList with zeros in order to have a size equal to the next power of two of the previous size. + * Divides this complex number by a scalar. * - * @param x The ArrayList to be padded. - * */ - private static void paddingPowerOfTwo(ArrayList x) - { - int n = 1; - int oldSize = x.size(); - while(n < oldSize) - n *= 2; - for(int i = 0; i < n - oldSize; i++) - x.add(new Complex()); + * @param n The divisor which is a real number. + * @return The quotient. + */ + public Complex divide(double n) { + Complex temp = new Complex(); + temp.real = this.real / n; + temp.img = this.img / n; + return temp; + } + } + + /** + * Iterative In-Place Radix-2 Cooley-Tukey Fast Fourier Transform Algorithm with Bit-Reversal. The + * size of the input signal must be a power of 2. If it isn't then it is padded with zeros and the + * output FFT will be bigger than the input signal. + * + *

More info: https://www.algorithm-archive.org/contents/cooley_tukey/cooley_tukey.html + * https://www.geeksforgeeks.org/iterative-fast-fourier-transformation-polynomial-multiplication/ + * https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm + * https://cp-algorithms.com/algebra/fft.html + * + * @param x The discrete signal which is then converted to the FFT or the IFFT of signal x. + * @param inverse True if you want to find the inverse FFT. + */ + public static void fft(ArrayList x, boolean inverse) { + /* Pad the signal with zeros if necessary */ + paddingPowerOfTwo(x); + int N = x.size(); + + /* Find the log2(N) */ + int log2N = 0; + while ((1 << log2N) < N) log2N++; + + /* Swap the values of the signal with bit-reversal method */ + int reverse; + for (int i = 0; i < N; i++) { + reverse = reverseBits(i, log2N); + if (i < reverse) Collections.swap(x, i, reverse); + } + + int direction = inverse ? -1 : 1; + + /* Main loop of the algorithm */ + for (int len = 2; len <= N; len *= 2) { + double angle = -2 * Math.PI / len * direction; + Complex wlen = new Complex(Math.cos(angle), Math.sin(angle)); + for (int i = 0; i < N; i += len) { + Complex w = new Complex(1, 0); + for (int j = 0; j < len / 2; j++) { + Complex u = x.get(i + j); + Complex v = w.multiply(x.get(i + j + len / 2)); + x.set(i + j, u.add(v)); + x.set(i + j + len / 2, u.subtract(v)); + w = w.multiply(wlen); + } + } + } + + /* Divide by N if we want the inverse FFT */ + if (inverse) { + for (int i = 0; i < x.size(); i++) { + Complex z = x.get(i); + x.set(i, z.divide(N)); + } + } + } + + /** + * This function reverses the bits of a number. It is used in Cooley-Tukey FFT algorithm. + * + *

E.g. num = 13 = 00001101 in binary log2N = 8 Then reversed = 176 = 10110000 in binary + * + *

More info: https://cp-algorithms.com/algebra/fft.html + * https://www.geeksforgeeks.org/write-an-efficient-c-program-to-reverse-bits-of-a-number/ + * + * @param num The integer you want to reverse its bits. + * @param log2N The number of bits you want to reverse. + * @return The reversed number + */ + private static int reverseBits(int num, int log2N) { + int reversed = 0; + for (int i = 0; i < log2N; i++) { + if ((num & (1 << i)) != 0) reversed |= 1 << (log2N - 1 - i); } + return reversed; + } + + /** + * This method pads an ArrayList with zeros in order to have a size equal to the next power of two + * of the previous size. + * + * @param x The ArrayList to be padded. + */ + private static void paddingPowerOfTwo(ArrayList x) { + int n = 1; + int oldSize = x.size(); + while (n < oldSize) n *= 2; + for (int i = 0; i < n - oldSize; i++) x.add(new Complex()); + } } diff --git a/Maths/FFTBluestein.java b/Maths/FFTBluestein.java index 644295cb69cc..4a571916db9a 100644 --- a/Maths/FFTBluestein.java +++ b/Maths/FFTBluestein.java @@ -3,67 +3,59 @@ import java.util.ArrayList; /** - * Class for calculating the Fast Fourier Transform (FFT) of a discrete signal using the Bluestein's algorithm. + * Class for calculating the Fast Fourier Transform (FFT) of a discrete signal using the Bluestein's + * algorithm. * * @author Ioannis Karavitsis * @version 1.0 - * */ -public class FFTBluestein -{ - /** - * Bluestein's FFT Algorithm. - * - * More info: - * https://en.wikipedia.org/wiki/Chirp_Z-transform#Bluestein.27s_algorithm - * http://tka4.org/materials/lib/Articles-Books/Numerical%20Algorithms/Hartley_Trasform/Bluestein%27s%20FFT%20algorithm%20-%20Wikipedia,%20the%20free%20encyclopedia.htm - * - * @param x The discrete signal which is then converted to the FFT or the IFFT of signal x. - * @param inverse True if you want to find the inverse FFT. - * */ - public static void fftBluestein(ArrayList x, boolean inverse) - { - int N = x.size(); - int bnSize = 2*N - 1; - int direction = inverse ? -1 : 1; - ArrayList an = new ArrayList<>(); - ArrayList bn = new ArrayList<>(); - - /* Initialization of the b(n) sequence (see Wikipedia's article above for the symbols used)*/ - for(int i = 0; i < bnSize; i++) - bn.add(new FFT.Complex()); - - for(int i = 0; i < N; i++) - { - double angle = (i - N + 1) * (i - N + 1) * Math.PI / N * direction; - bn.set(i, new FFT.Complex(Math.cos(angle), Math.sin(angle))); - bn.set(bnSize - i - 1, new FFT.Complex(Math.cos(angle), Math.sin(angle))); - } + */ +public class FFTBluestein { + /** + * Bluestein's FFT Algorithm. + * + *

More info: https://en.wikipedia.org/wiki/Chirp_Z-transform#Bluestein.27s_algorithm + * http://tka4.org/materials/lib/Articles-Books/Numerical%20Algorithms/Hartley_Trasform/Bluestein%27s%20FFT%20algorithm%20-%20Wikipedia,%20the%20free%20encyclopedia.htm + * + * @param x The discrete signal which is then converted to the FFT or the IFFT of signal x. + * @param inverse True if you want to find the inverse FFT. + */ + public static void fftBluestein(ArrayList x, boolean inverse) { + int N = x.size(); + int bnSize = 2 * N - 1; + int direction = inverse ? -1 : 1; + ArrayList an = new ArrayList<>(); + ArrayList bn = new ArrayList<>(); + + /* Initialization of the b(n) sequence (see Wikipedia's article above for the symbols used)*/ + for (int i = 0; i < bnSize; i++) bn.add(new FFT.Complex()); + + for (int i = 0; i < N; i++) { + double angle = (i - N + 1) * (i - N + 1) * Math.PI / N * direction; + bn.set(i, new FFT.Complex(Math.cos(angle), Math.sin(angle))); + bn.set(bnSize - i - 1, new FFT.Complex(Math.cos(angle), Math.sin(angle))); + } - /* Initialization of the a(n) sequence */ - for(int i = 0; i < N; i++) - { - double angle = -i * i * Math.PI / N * direction; - an.add(x.get(i).multiply(new FFT.Complex(Math.cos(angle), Math.sin(angle)))); - } + /* Initialization of the a(n) sequence */ + for (int i = 0; i < N; i++) { + double angle = -i * i * Math.PI / N * direction; + an.add(x.get(i).multiply(new FFT.Complex(Math.cos(angle), Math.sin(angle)))); + } - ArrayList convolution = ConvolutionFFT.convolutionFFT(an, bn); + ArrayList convolution = ConvolutionFFT.convolutionFFT(an, bn); - /* The final multiplication of the convolution with the b*(k) factor */ - for(int i = 0; i < N; i++) - { - double angle = -1 * i * i * Math.PI / N * direction; - FFT.Complex bk = new FFT.Complex(Math.cos(angle), Math.sin(angle)); - x.set(i, bk.multiply(convolution.get(i + N - 1))); - } + /* The final multiplication of the convolution with the b*(k) factor */ + for (int i = 0; i < N; i++) { + double angle = -1 * i * i * Math.PI / N * direction; + FFT.Complex bk = new FFT.Complex(Math.cos(angle), Math.sin(angle)); + x.set(i, bk.multiply(convolution.get(i + N - 1))); + } - /* Divide by N if we want the inverse FFT */ - if(inverse) - { - for (int i = 0; i < N; i++) - { - FFT.Complex z = x.get(i); - x.set(i, z.divide(N)); - } - } + /* Divide by N if we want the inverse FFT */ + if (inverse) { + for (int i = 0; i < N; i++) { + FFT.Complex z = x.get(i); + x.set(i, z.divide(N)); + } } + } } From b4d104db2360bd53d09bf67f0271788e78176cb8 Mon Sep 17 00:00:00 2001 From: Seth Date: Sat, 27 Feb 2021 17:46:25 +0100 Subject: [PATCH 517/521] Added algorithm for color contrast ratio. (#1794) * Added algorithm for color contrast ratio. * Added comment and example usage in main. * Fixed calling method in main without creating object. * Formatted with Google Java Formatter * Add imports for ColorContrastRatio.java * updating DIRECTORY.md * Updated to follow repo conventions. Undid formatting of documents. * Follow repository conventions. * Formatted with Google Java Formatter * Added test method with assetions. * Formatted with Google Java Formatter * Update Misc/ColorContrastRatio.java Co-authored-by: Ayaan Khan * updating DIRECTORY.md * Correct javadocs and parameter names. * Formatted with Google Java Formatter Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Ayaan Khan --- DIRECTORY.md | 6 ++ Maths/ConvolutionFFT.java | 2 +- Misc/ColorContrastRatio.java | 104 +++++++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 Misc/ColorContrastRatio.java diff --git a/DIRECTORY.md b/DIRECTORY.md index ce1488681675..457a5d912792 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -129,9 +129,14 @@ * [Average](https://github.com/TheAlgorithms/Java/blob/master/Maths/Average.java) * [BinaryPow](https://github.com/TheAlgorithms/Java/blob/master/Maths/BinaryPow.java) * [Ceil](https://github.com/TheAlgorithms/Java/blob/master/Maths/Ceil.java) + * [CircularConvolutionFFT](https://github.com/TheAlgorithms/Java/blob/master/Maths/CircularConvolutionFFT.java) * [Combinations](https://github.com/TheAlgorithms/Java/blob/master/Maths/Combinations.java) + * [Convolution](https://github.com/TheAlgorithms/Java/blob/master/Maths/Convolution.java) + * [ConvolutionFFT](https://github.com/TheAlgorithms/Java/blob/master/Maths/ConvolutionFFT.java) * [Factorial](https://github.com/TheAlgorithms/Java/blob/master/Maths/Factorial.java) * [FactorialRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FactorialRecursion.java) + * [FFT](https://github.com/TheAlgorithms/Java/blob/master/Maths/FFT.java) + * [FFTBluestein](https://github.com/TheAlgorithms/Java/blob/master/Maths/FFTBluestein.java) * [FibonacciNumber](https://github.com/TheAlgorithms/Java/blob/master/Maths/FibonacciNumber.java) * [FindMax](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMax.java) * [FindMaxRecursion](https://github.com/TheAlgorithms/Java/blob/master/Maths/FindMaxRecursion.java) @@ -165,6 +170,7 @@ * [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/MinimizingLateness/MinimizingLateness.java) ## Misc + * [ColorContrastRatio](https://github.com/TheAlgorithms/Java/blob/master/Misc/ColorContrastRatio.java) * [MedianOfRunningArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/MedianOfRunningArray.java) * [PalindromePrime](https://github.com/TheAlgorithms/Java/blob/master/Misc/PalindromePrime.java) * [RangeInSortedArray](https://github.com/TheAlgorithms/Java/blob/master/Misc/RangeInSortedArray.java) diff --git a/Maths/ConvolutionFFT.java b/Maths/ConvolutionFFT.java index 49032ae83578..f1d595087142 100644 --- a/Maths/ConvolutionFFT.java +++ b/Maths/ConvolutionFFT.java @@ -53,7 +53,7 @@ public static ArrayList convolutionFFT( convolved .subList(convolvedSize, convolved.size()) .clear(); // Remove the remaining zeros after the convolvedSize. These extra zeros came from - // paddingPowerOfTwo() method inside the fft() method. + // paddingPowerOfTwo() method inside the fft() method. return convolved; } diff --git a/Misc/ColorContrastRatio.java b/Misc/ColorContrastRatio.java new file mode 100644 index 000000000000..b3dcf12267cb --- /dev/null +++ b/Misc/ColorContrastRatio.java @@ -0,0 +1,104 @@ +package Misc; + +import java.awt.Color; + +/** + * @brief A Java implementation of the offcial W3 documented procedure to calculate contrast ratio + * between colors on the web. This is used to calculate the readability of a foreground color on + * top of a background color. + * @since 2020-10-15 + * @see [Color Contrast Ratio](https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-procedure) + * @author [Seth Falco](https://github.com/SethFalco) + */ +public class ColorContrastRatio { + + /** + * @brief Calculates the contrast ratio between two given colors. + * @param a Any color, used to get the red, green, and blue values. + * @param b Another color, which will be compared against the first color. + * @return The contrast ratio between the two colors. + */ + public double getContrastRatio(Color a, Color b) { + final double aColorLuminance = getRelativeLuminance(a); + final double bColorLuminance = getRelativeLuminance(b); + + if (aColorLuminance > bColorLuminance) + return (aColorLuminance + 0.05) / (bColorLuminance + 0.05); + + return (bColorLuminance + 0.05) / (aColorLuminance + 0.05); + } + + /** + * @brief Calculates the relative luminance of a given color. + * @param color Any color, used to get the red, green, and blue values. + * @return The relative luminance of the color. + * @see [More info on relative + * luminance.](https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef) + */ + public double getRelativeLuminance(Color color) { + final double red = getColor(color.getRed()); + final double green = getColor(color.getGreen()); + final double blue = getColor(color.getBlue()); + + return 0.2126 * red + 0.7152 * green + 0.0722 * blue; + } + + /** + * @brief Calculates the final value for a color to be used in the relative luminance formula as + * described in step 1. + * @param color8Bit 8-bit representation of a color component value. + * @return Value for the provided color component to be used in the relative luminance formula. + */ + public double getColor(int color8Bit) { + final double sRgb = getColorSRgb(color8Bit); + return (sRgb <= 0.03928) ? sRgb / 12.92 : Math.pow((sRgb + 0.055) / 1.055, 2.4); + } + + /** + * @brief Calculates the Color sRGB value as denoted in step 1 of the procedure document. + * @param color8Bit 8-bit representation of a color component value. + * @return A percentile value of the color component. + */ + private double getColorSRgb(double color8Bit) { + return color8Bit / 255.0; + } + + /** + * You can check this example against another open-source implementation available on GitHub. + * + * @see [Online Contrast + * Ratio](https://contrast-ratio.com/#rgb%28226%2C%20229%2C%20248-on-rgb%2823%2C%20103%2C%20154%29) + * @see [GitHub Repository for Online Contrast Ratio](https://github.com/LeaVerou/contrast-ratio) + */ + private static void test() { + final ColorContrastRatio algImpl = new ColorContrastRatio(); + + final Color black = Color.BLACK; + final double blackLuminance = algImpl.getRelativeLuminance(black); + assert blackLuminance == 0 : "Test 1 Failed - Incorrect relative luminance."; + + final Color white = Color.WHITE; + final double whiteLuminance = algImpl.getRelativeLuminance(white); + assert whiteLuminance == 1 : "Test 2 Failed - Incorrect relative luminance."; + + final double highestColorRatio = algImpl.getContrastRatio(black, white); + assert highestColorRatio == 21 : "Test 3 Failed - Incorrect contrast ratio."; + + final Color foreground = new Color(23, 103, 154); + final double foregroundLuminance = algImpl.getRelativeLuminance(foreground); + assert foregroundLuminance == 0.12215748057375966 + : "Test 4 Failed - Incorrect relative luminance."; + + final Color background = new Color(226, 229, 248); + final double backgroundLuminance = algImpl.getRelativeLuminance(background); + assert backgroundLuminance == 0.7898468477881603 + : "Test 5 Failed - Incorrect relative luminance."; + + final double contrastRatio = algImpl.getContrastRatio(foreground, background); + assert contrastRatio == 4.878363954846178 : "Test 6 Failed - Incorrect contrast ratio."; + } + + public static void main(String args[]) { + test(); + } +} From 6ee92f028e185bed3882b0b42e5dcbbd6a204e00 Mon Sep 17 00:00:00 2001 From: mattisapro <77400790+mattisapro@users.noreply.github.com> Date: Tue, 2 Mar 2021 03:16:31 -0600 Subject: [PATCH 518/521] Fully automate dev setup with Gitpod (#2094) This commit implements a fully-automated development setup using Gitpod.io, an online IDE for GitLab, GitHub, and Bitbucket that enables Dev-Environments-As-Code. This makes it easy for anyone to get a ready-to-code workspace for any branch, issue or pull request almost instantly with a single click. --- .gitpod.Dockerfile | 7 +++++++ .gitpod.yml | 6 ++++++ README.md | 2 ++ 3 files changed, 15 insertions(+) create mode 100644 .gitpod.Dockerfile create mode 100644 .gitpod.yml diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile new file mode 100644 index 000000000000..f8e49f267475 --- /dev/null +++ b/.gitpod.Dockerfile @@ -0,0 +1,7 @@ +FROM gitpod/workspace-full + +# Install custom tools, runtimes, etc. +# For example "bastet", a command-line tetris clone: +# RUN brew install bastet +# +# More information: https://www.gitpod.io/docs/config-docker/ diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 000000000000..479ecfd1f5e7 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,6 @@ +image: + file: .gitpod.Dockerfile + +tasks: + - init: 'echo "TODO: Replace with init/build command"' + command: (e.g. 'npm start', 'yarn watch'...) diff --git a/README.md b/README.md index d35fd2f7e359..bfffd60ca448 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/TheAlgorithms/Java) + # The Algorithms - Java [![Build Status](https://api.travis-ci.com/TheAlgorithms/Java.svg?branch=master)](https://travis-ci.com/TheAlgorithms/Java)  [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/TheAlgorithms/100) From 40318a0e95e253d598bd913023abb93c25f355ab Mon Sep 17 00:00:00 2001 From: Yang Libin Date: Tue, 2 Mar 2021 17:25:05 +0800 Subject: [PATCH 519/521] chore: upgrade prettier version --- .github/workflows/prettier.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index f1ee3157b4ab..355959272cee 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -18,9 +18,9 @@ jobs: ref: ${{ github.head_ref }} - name: Prettify code - uses: creyD/prettier_action@v3.0 + uses: creyD/prettier_action@v3.3 with: prettier_options: --write **/*.{java} - commit_message: 'feat: prettify code' + commit_message: 'style: prettify code' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 9e335dbf63d8764e1fc1101d830455590cd211ca Mon Sep 17 00:00:00 2001 From: Andreas Manos Date: Sat, 6 Mar 2021 18:53:05 +0100 Subject: [PATCH 520/521] create and implemented Tim Sort Algorithm --- Sorts/TimSort.java | 175 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 Sorts/TimSort.java diff --git a/Sorts/TimSort.java b/Sorts/TimSort.java new file mode 100644 index 000000000000..4a09f027a3f0 --- /dev/null +++ b/Sorts/TimSort.java @@ -0,0 +1,175 @@ +package Sorts; + +import java.util.Arrays; +import java.util.List; +import static Sorts.SortUtils.less; +import static Sorts.SortUtils.print; + +/** + * This method implements the Generic Merge Sort + * + * @author Andreas Manos (https://github.com/Antwhite420) + */ +public class TimSort { + + public static void main(String[] args) { + + Integer[] arr = {4, 23, 6, 781, 1, 54, -231, 9, 12}; // Integer Input for sorting array + List ints = Arrays.asList(arr); // Integer Input for sorting list + + TimSortAlgo timSort = new TimSortAlgo(); + + timSort.sort(arr); + timSort.sort(ints); + + System.out.println("Printing integer array: "); + print(arr); // prints out: [-231, 1, 4, 6, 9, 12, 23, 54, 781] + System.out.println("Printing integer list: "); + print(ints); // prints out: -231 1 4 6 9 12 23 54 781 + + + String[] stringArray = {"Tommy", "Alex", "Sara", "Bob", "Daniel"}; // String Input for sorting list + + List strings = Arrays.asList(stringArray); // String Input for sorting list + + timSort.sort(stringArray); + timSort.sort(strings); + + System.out.println("Printing String array: "); + print(stringArray); // prints out: [Alex, Bob, Daniel, Sara, Tommy] + System.out.println("Printing String list: "); + print(strings); // prints out: Alex Bob Daniel Sara Tommy + + } + + /** + * A private inner class that implements the SortAlgorithm interface + * @see SortAlgorithm + */ + private static class TimSortAlgo implements SortAlgorithm { + + private final int RUN = 32; + + /** + * sort method sorts the given array + * + * @param unsorted - an array should be sorted + * @return the sorted array + */ + @Override + public > T[] sort(T[] unsorted) { + for (int i = 0; i < unsorted.length; i += RUN) { + insertionSort(unsorted, i, Math.min((i + 31), (unsorted.length - 1))); + } + + for (int size = RUN; size < unsorted.length; size *= 2) { + + for (int left = 0; left < unsorted.length; left += 2 * size) { + + int mid = left + size - 1; + int right = Math.min((left + 2 * size - 1), (unsorted.length - 1)); + merge(unsorted, left, mid, right); + } + } + return unsorted; + } + + /** + * sort method sorts the given list + * + * @param unsorted - a list should be sorted + * @return return the sorted list + */ + @Override + public > List sort(List unsorted) { + for (int i = 0; i < unsorted.size(); i += RUN) { + // The list is converted to array before is sorted + insertionSort(unsorted.toArray((T[]) new Comparable[unsorted.size()]), i, Math.min((i + 31), (unsorted.size() - 1))); + } + + for (int size = RUN; size < unsorted.size(); size *= 2) { + + for (int left = 0; left < unsorted.size(); left += 2 * size) { + + int mid = left + size - 1; + int right = Math.min((left + 2 * size - 1), (unsorted.size() - 1)); + // The list is converted to array before is merged + merge(unsorted.toArray((T[]) new Comparable[unsorted.size()]), left, mid, right); + } + } + return unsorted; + } + + /** + * insertionSort method sorts the array from left index to right index + * + * @param arr the original array + * @param left the first element of the array + * @param right the middle element of the array + */ + public > void insertionSort(T[] arr, int left, int right) { + for (int i = left + 1; i <= right; i++) { + T temp = arr[i]; + int j = i - 1; + while (j >= 0 && less(temp,arr[j])) { + arr[j + 1] = arr[j]; + j--; + } + arr[j + 1] = temp; + } + } + + // + + /** + * merge method merges the sorted RUNS in ascending order + * + * @param arr the original array + * @param l the first element of the array + * @param m the middle element of the array + * @param r the last element of the array + */ + public > void merge(T[] arr, int l, + int m, int r) { + + // The array is splitted into two arrays left and right + int len1 = m - l + 1, len2 = r - m; + T[] left = (T[]) new Comparable[len1]; + T[] right = (T[]) new Comparable[len2]; + + // Passing the elements from the original array to the sub arrays + if (len1 >= 0) System.arraycopy(arr, l, left, 0, len1); + if (len2 >= 0) System.arraycopy(arr,m+1,right,0,len2); + + int i = 0; + int j = 0; + int k = l; + + // Passing the elements to the original array after comparing them + while (i < len1 && j < len2) { + if (less(left[i],right[j]) || left[i].compareTo(right[j]) == 0) { + arr[k] = left[i]; + i++; + } else { + arr[k] = right[j]; + j++; + } + k++; + } + + // Passing the remaining elements of left array, if any + while (i < len1) { + arr[k] = left[i]; + k++; + i++; + } + + // Passing the remaining element of right array, if any + while (j < len2) { + arr[k] = right[j]; + k++; + j++; + } + } + } +} From d20c018c6cf5d8695310c7e9f6dcdc5be549ee92 Mon Sep 17 00:00:00 2001 From: Andreas Manos Date: Sat, 6 Mar 2021 19:02:51 +0100 Subject: [PATCH 521/521] adding wikipedia link in Tim Sort Algorithm --- Sorts/TimSort.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sorts/TimSort.java b/Sorts/TimSort.java index 4a09f027a3f0..9787e86adc2c 100644 --- a/Sorts/TimSort.java +++ b/Sorts/TimSort.java @@ -7,7 +7,7 @@ /** * This method implements the Generic Merge Sort - * + * Visit Wikipedia (https://en.wikipedia.org/wiki/Timsort) for more information on the topic * @author Andreas Manos (https://github.com/Antwhite420) */ public class TimSort {