aboutsummaryrefslogtreecommitdiff
path: root/challenge-147/mohammad-anwar/java/theweeklychallenge/TruncatablePrime.java
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2022-01-17 09:00:14 +0000
committerdrbaggy <js5@sanger.ac.uk>2022-01-17 09:00:14 +0000
commit990d5177887cda20c8a4804b91afe5e9bcaaf201 (patch)
tree8c2ae1ac10ff43e872f3cab2611255c76841f4c3 /challenge-147/mohammad-anwar/java/theweeklychallenge/TruncatablePrime.java
parentdd99d53e09a332c4ff5153b8bb54c9506a03860d (diff)
parentee9f8c8288170dc442f8199fc1d2f7e45ac4377c (diff)
downloadperlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.tar.gz
perlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.tar.bz2
perlweeklychallenge-club-990d5177887cda20c8a4804b91afe5e9bcaaf201.zip
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-147/mohammad-anwar/java/theweeklychallenge/TruncatablePrime.java')
-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;
+ }
+}