From 8463875b6aeb3a8e27521ed124902337818f2028 Mon Sep 17 00:00:00 2001 From: ShengyiJia Date: Sun, 19 Jul 2020 21:36:50 -0400 Subject: [PATCH 1/5] Update Main.java --- java/append_primes/Main.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/java/append_primes/Main.java b/java/append_primes/Main.java index 6c0fd65..78cc68e 100644 --- a/java/append_primes/Main.java +++ b/java/append_primes/Main.java @@ -13,8 +13,12 @@ public class Main */ Tree tree = new Tree(Integer.parseInt(args[0]), new ArrayList()); for (int i = 0; i < Integer.parseInt(args[1]); i++) { + /* Optimied the output */ + int temp = tree.longestPath().size(); tree.step(); - Util.printList(tree.longestPath()); + if(tree.longestPath().size() != temp){ + Util.printList(tree.longestPath()); + } } } } From ab83b32c3ffe35b39e2da30bfded9913538f1f8b Mon Sep 17 00:00:00 2001 From: ShengyiJia Date: Mon, 20 Jul 2020 02:31:07 -0400 Subject: [PATCH 2/5] add code for insert digit anywhere not as clean as the python version due to the data structure --- java/insert_digit_anywhere/Main.java | 20 +++++++ java/insert_digit_anywhere/Tree.java | 84 ++++++++++++++++++++++++++++ java/insert_digit_anywhere/Util.java | 69 +++++++++++++++++++++++ 3 files changed, 173 insertions(+) create mode 100644 java/insert_digit_anywhere/Main.java create mode 100644 java/insert_digit_anywhere/Tree.java create mode 100644 java/insert_digit_anywhere/Util.java diff --git a/java/insert_digit_anywhere/Main.java b/java/insert_digit_anywhere/Main.java new file mode 100644 index 0000000..a812e66 --- /dev/null +++ b/java/insert_digit_anywhere/Main.java @@ -0,0 +1,20 @@ +package insert_digit_anywhere; + +import java.util.ArrayList; + +public class Main +{ + public static void main(String[] args) + { + Util.init(); + + /* By changing the args[0] we can modify which prime we want to be the + * first in the row. Same for the number of iteration. + */ + Tree tree = new Tree(Integer.parseInt(args[0]), new ArrayList()); + for (int i = 0; i < Integer.parseInt(args[1]); i++) { + tree.step(); + Util.printList(tree.longestPath()); + } + } +} diff --git a/java/insert_digit_anywhere/Tree.java b/java/insert_digit_anywhere/Tree.java new file mode 100644 index 0000000..928d737 --- /dev/null +++ b/java/insert_digit_anywhere/Tree.java @@ -0,0 +1,84 @@ +package insert_digit_anywhere; + +import java.util.ArrayList; +import java.util.Arrays; + +class Tree +{ + private long value; + private ArrayList children; + + public Tree(long tree_value, ArrayList tree_children) + { + value = tree_value; + children = new ArrayList(); + for (long child : tree_children) { + children.add(new Tree(child, new ArrayList())); + } + } + + public void step() + { + if (children.isEmpty()) { + ArrayList xs = next(value); + for (long val : xs) { + children.add(new Tree(val, new ArrayList())); + } + return; + } + for (Tree child : children) { + child.step(); + } + } + + public ArrayList longestPath() + { + ArrayList retval = new ArrayList(); + if (children.isEmpty()) { + retval.add(value); + return retval; + } + int max_length = 0; + for (Tree child : children) { + ArrayList temp = child.longestPath(); + if (temp.size() > max_length) { + max_length = temp.size(); + retval = temp; + } + } + retval.add(0, value); + return retval; + } + + /* modify this function to change functionality */ + public ArrayList next(long val) + { + /* Super messy but does work + * TODO cleaning/comment + */ + ArrayList new_xs = new ArrayList(); + String[] s = Long.toString(val).split(""); + for(int i = 0; i <= s.length; i++){ + String[] temp = new String[s.length + 1]; + int j; + for(j = 0; j < i; j++){ + temp[j] = s[j]; + } + for(int k = j + 1; k < temp.length; k++){ + temp[k] = s[k - 1]; + } + + for(int num = 0; num <= 9; num++){ + temp[j] = String.valueOf(num); + String str = Arrays.toString(temp) + .replaceAll("[^\\d.]", "") + .replaceAll("^0+(?!$)", ""); + Long test = Long.parseLong(str); + if(Util.isPrime(test) && test != val){ + new_xs.add(test); + } + } + } + return new_xs; + } +} diff --git a/java/insert_digit_anywhere/Util.java b/java/insert_digit_anywhere/Util.java new file mode 100644 index 0000000..f0d11aa --- /dev/null +++ b/java/insert_digit_anywhere/Util.java @@ -0,0 +1,69 @@ +package insert_digit_anywhere; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.stream.IntStream; +import java.util.ArrayList; + +class Util +{ + private static HashMap primes; + private static HashMap squareFree; + + public static void init() + { + primes = new HashMap(); + squareFree = new HashMap(); + } + + public static boolean isPrime(long val) + { + // Add 2 to the HashMap in advance in order to quickly exclude even number later + primes.put(2l, true); + if (primes.containsKey(val)) { + return primes.get(val); + } + if (val < 2) { + primes.put(val, false); + return false; + } + /* I tried to make this process more readable but I'm not sure about the efficiency + * TODO check the efficiency of this new method + */ + boolean temp = (val % 2) != 0 + && + IntStream.rangeClosed(3, (int) Math.sqrt(val)) + .filter(n -> n % 2 != 0) + .noneMatch(n -> (val % n == 0)); + primes.put(val, temp); + return temp; + } + + public static boolean isSquareFree(long val) + { + if (squareFree.containsKey(val)) { + return squareFree.get(val); + } + for (int i = 2; i * i <= val; i++) { + if (isPrime(i)) { + if (val % (i * i) == 0) { + squareFree.put(val, false); + return false; + } + } + } + squareFree.put(val, true); + return true; + } + + // Did some cleaning to this util method + public static void printList(ArrayList ls) + { + Iterator it = ls.iterator(); + System.out.printf("[%s",it.next()); + do{ + System.out.printf(", %s", it.next()); + }while(it.hasNext()); + System.out.print("]\n"); + } +} From 74459e7cce22d0a34d189dd4e49a5142aade4c29 Mon Sep 17 00:00:00 2001 From: ShengyiJia Date: Mon, 20 Jul 2020 02:36:01 -0400 Subject: [PATCH 3/5] now support insert_digit_anywhere_prime --- .../Main.java | 0 .../Tree.java | 0 .../Util.java | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename java/{insert_digit_anywhere => insert_digit_anywhere_prime}/Main.java (100%) rename java/{insert_digit_anywhere => insert_digit_anywhere_prime}/Tree.java (100%) rename java/{insert_digit_anywhere => insert_digit_anywhere_prime}/Util.java (100%) diff --git a/java/insert_digit_anywhere/Main.java b/java/insert_digit_anywhere_prime/Main.java similarity index 100% rename from java/insert_digit_anywhere/Main.java rename to java/insert_digit_anywhere_prime/Main.java diff --git a/java/insert_digit_anywhere/Tree.java b/java/insert_digit_anywhere_prime/Tree.java similarity index 100% rename from java/insert_digit_anywhere/Tree.java rename to java/insert_digit_anywhere_prime/Tree.java diff --git a/java/insert_digit_anywhere/Util.java b/java/insert_digit_anywhere_prime/Util.java similarity index 100% rename from java/insert_digit_anywhere/Util.java rename to java/insert_digit_anywhere_prime/Util.java From 64c36efe571a4440a9b992a1cf2868819f8c7738 Mon Sep 17 00:00:00 2001 From: ShengyiJia Date: Mon, 20 Jul 2020 09:52:47 -0400 Subject: [PATCH 4/5] change the package name --- java/insert_digit_anywhere_prime/Main.java | 2 +- java/insert_digit_anywhere_prime/Tree.java | 2 +- java/insert_digit_anywhere_prime/Util.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/insert_digit_anywhere_prime/Main.java b/java/insert_digit_anywhere_prime/Main.java index a812e66..39dd2f3 100644 --- a/java/insert_digit_anywhere_prime/Main.java +++ b/java/insert_digit_anywhere_prime/Main.java @@ -1,4 +1,4 @@ -package insert_digit_anywhere; +package insert_digit_anywhere_prime; import java.util.ArrayList; diff --git a/java/insert_digit_anywhere_prime/Tree.java b/java/insert_digit_anywhere_prime/Tree.java index 928d737..7026af5 100644 --- a/java/insert_digit_anywhere_prime/Tree.java +++ b/java/insert_digit_anywhere_prime/Tree.java @@ -1,4 +1,4 @@ -package insert_digit_anywhere; +package insert_digit_anywhere_prime; import java.util.ArrayList; import java.util.Arrays; diff --git a/java/insert_digit_anywhere_prime/Util.java b/java/insert_digit_anywhere_prime/Util.java index f0d11aa..9be6b30 100644 --- a/java/insert_digit_anywhere_prime/Util.java +++ b/java/insert_digit_anywhere_prime/Util.java @@ -1,4 +1,4 @@ -package insert_digit_anywhere; +package insert_digit_anywhere_prime; import java.util.HashMap; import java.util.Iterator; From 8be2e17aec183180d41429afb8f80702da16c677 Mon Sep 17 00:00:00 2001 From: ShengyiJia Date: Mon, 20 Jul 2020 09:55:53 -0400 Subject: [PATCH 5/5] rollback --- java/append_primes/Main.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/java/append_primes/Main.java b/java/append_primes/Main.java index 78cc68e..6c0fd65 100644 --- a/java/append_primes/Main.java +++ b/java/append_primes/Main.java @@ -13,12 +13,8 @@ public class Main */ Tree tree = new Tree(Integer.parseInt(args[0]), new ArrayList()); for (int i = 0; i < Integer.parseInt(args[1]); i++) { - /* Optimied the output */ - int temp = tree.longestPath().size(); tree.step(); - if(tree.longestPath().size() != temp){ - Util.printList(tree.longestPath()); - } + Util.printList(tree.longestPath()); } } }