aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-01-14 13:54:51 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-01-14 13:54:51 +0000
commite1c81b37bf462c531c42d7685b582ca669f658b9 (patch)
tree25aac2713e4e68c8206c8da2f0f3dd685d222527
parent0214d1cc03888b4e3dab4db3c67e8ddf2f540280 (diff)
downloadperlweeklychallenge-club-e1c81b37bf462c531c42d7685b582ca669f658b9.tar.gz
perlweeklychallenge-club-e1c81b37bf462c531c42d7685b582ca669f658b9.tar.bz2
perlweeklychallenge-club-e1c81b37bf462c531c42d7685b582ca669f658b9.zip
- Added Java solution to the task "Truncatable Prime" of week 147.
-rw-r--r--challenge-147/mohammad-anwar/java/theweeklychallenge/TruncatablePrime.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/challenge-147/mohammad-anwar/java/theweeklychallenge/TruncatablePrime.java b/challenge-147/mohammad-anwar/java/theweeklychallenge/TruncatablePrime.java
new file mode 100644
index 0000000000..9aa5ed41cb
--- /dev/null
+++ b/challenge-147/mohammad-anwar/java/theweeklychallenge/TruncatablePrime.java
@@ -0,0 +1,90 @@
+package theweeklychallenge;
+
+/*
+
+Week 147:
+
+ https://theweeklychallenge.org/blog/perl-weekly-challenge-147
+
+Task #1: Truncatable Prime
+
+ Write a script to generate first 20 left-truncatable prime numbers in base 10.
+
+*/
+
+import java.lang.Math;
+import java.util.Arrays;
+import java.util.ArrayList;
+import junit.framework.TestCase;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import static junit.framework.Assert.*;
+
+public class TruncatablePrime extends TestCase {
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run(theweeklychallenge.TruncatablePrime.class);
+ }
+
+ public void testTruncatablePrime() {
+ Integer exp[] = {2, 3, 5, 7, 13, 17, 23, 37, 43, 47, 53, 67, 73, 83, 97, 113, 137, 167, 173, 197};
+ Integer got[] = leftTruncatablePrime(20);
+ assertTrue(Arrays.equals(exp, got));
+ }
+
+ public static Integer[] leftTruncatablePrime(int count) {
+ ArrayList<Integer> ltp = new ArrayList<Integer>();
+ int c = 0;
+ int n = 2;
+ while (c < count) {
+ String s = Integer.toString(n);
+
+ if (!Pattern.compile(".*0.*").matcher(s).matches() && isPrime(n)) {
+ Integer[] numbers = leftTruncatableNumbers(n);
+ boolean found = true;
+ if (numbers.length >=2) {
+ for(int i = 0; i<numbers.length; i++) {
+ if (!isPrime(numbers[i])) {
+ found = false;
+ }
+ }
+ }
+ if (found) {
+ ltp.add(n);
+ c++;
+ }
+ }
+ n++;
+ }
+
+ Integer[] ltpArray = new Integer[ltp.size()];
+ return ltp.toArray(ltpArray);
+ }
+
+ public static Integer[] leftTruncatableNumbers(int n) {
+ int i = 0;
+ String s = Integer.toString(n);
+ ArrayList<Integer> numbers = new ArrayList<Integer>();
+ while (i < s.length()) {
+ numbers.add(Integer.valueOf(s.substring(i)));
+ i++;
+ }
+
+ Integer[] numArray = new Integer[numbers.size()];
+ return numbers.toArray(numArray);
+ }
+
+ public static boolean isPrime(int n) {
+ if (n == 1) {
+ return false;
+ }
+
+ for(int i=2; i <= Math.sqrt(n); i++) {
+ if ((n % i) == 0) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}