aboutsummaryrefslogtreecommitdiff
path: root/challenge-012
diff options
context:
space:
mode:
authorrir <rirans@comcast.net>2024-03-16 20:07:25 -0400
committerGitHub <noreply@github.com>2024-03-16 20:07:25 -0400
commitff5e8ece15a2384fbfb530710f10aa485017d4a5 (patch)
tree6fe268d9ceb2b25a2951ea984c077450feb2efae /challenge-012
parent60f1003122fbada697317d943c238593f86db579 (diff)
parent62e7fc3bb85a74125663f4fbd0a5911f6f30c81f (diff)
downloadperlweeklychallenge-club-ff5e8ece15a2384fbfb530710f10aa485017d4a5.tar.gz
perlweeklychallenge-club-ff5e8ece15a2384fbfb530710f10aa485017d4a5.tar.bz2
perlweeklychallenge-club-ff5e8ece15a2384fbfb530710f10aa485017d4a5.zip
Merge branch 'manwar:master' into work
Diffstat (limited to 'challenge-012')
-rw-r--r--challenge-012/zapwai/README1
-rw-r--r--challenge-012/zapwai/c/ch-1.c61
-rw-r--r--challenge-012/zapwai/c/ch-2.c34
-rw-r--r--challenge-012/zapwai/javascript/ch-1.js49
-rw-r--r--challenge-012/zapwai/javascript/ch-2.js23
-rw-r--r--challenge-012/zapwai/perl/ch-1.pl58
-rw-r--r--challenge-012/zapwai/perl/ch-2.pl26
-rw-r--r--challenge-012/zapwai/python/ch-1.py37
-rw-r--r--challenge-012/zapwai/python/ch-2.py19
-rw-r--r--challenge-012/zapwai/rust/ch-1.rs53
-rw-r--r--challenge-012/zapwai/rust/ch-2.rs25
11 files changed, 386 insertions, 0 deletions
diff --git a/challenge-012/zapwai/README b/challenge-012/zapwai/README
new file mode 100644
index 0000000000..037b3777ef
--- /dev/null
+++ b/challenge-012/zapwai/README
@@ -0,0 +1 @@
+Solutions by David Ferrone.
diff --git a/challenge-012/zapwai/c/ch-1.c b/challenge-012/zapwai/c/ch-1.c
new file mode 100644
index 0000000000..075a4490a4
--- /dev/null
+++ b/challenge-012/zapwai/c/ch-1.c
@@ -0,0 +1,61 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#define MAX_PRIME_VALUE 15000
+
+int* fill_primes(int* primes_length) {
+ int* primes = malloc(MAX_PRIME_VALUE * sizeof(int));
+ primes[0] = 2;
+ for (int i = 3; i < MAX_PRIME_VALUE; i++) {
+ int cnt = 0;
+ for (int j = 0; j < *primes_length; j++)
+ if (i % primes[j] == 0)
+ cnt++;
+ if (cnt == 0) {
+ primes[*primes_length] = i;
+ (*primes_length)++;
+ }
+ }
+ return primes;
+}
+
+bool is_prime(int num, int* primes, int primes_length) {
+ for (int i = 0; i < primes_length; i++) {
+ if (primes[i] < num) {
+ if (num % primes[i] == 0) {
+ return false;
+ }
+ }
+ else {
+ break;
+ }
+ }
+ return true;
+}
+
+int primorial(int n, int* primes) {
+ int p = 1;
+ while (n > 0) {
+ n--;
+ p *= primes[n];
+ }
+ return p;
+}
+
+int euclid(int n, int* primes) {
+ return 1 + primorial(n, primes);
+}
+
+int main() {
+ int primes_length = 1;
+ int* primes = fill_primes(&primes_length);
+ for (int i = 0; i < 8; i++) {
+ int x = euclid(i, primes);
+ if (!is_prime(x, primes, primes_length)) {
+ printf("%d\n", x);
+ break;
+ }
+ }
+
+ free(primes);
+}
diff --git a/challenge-012/zapwai/c/ch-2.c b/challenge-012/zapwai/c/ch-2.c
new file mode 100644
index 0000000000..752f7220fc
--- /dev/null
+++ b/challenge-012/zapwai/c/ch-2.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+void proc(char* input) {
+ char* cp = strdup(input);
+ char* line = strtok(cp, "\n");
+ char prefix[100] = {};
+ strcpy(prefix, line);
+ int cnt = 0;
+ do {
+ cnt = 0;
+ do {
+ int slen = strlen(prefix);
+ prefix[slen - 1] = '\0';
+ } while (prefix[strlen(prefix) - 1] != '/');
+ while (line != NULL) {
+ for (int i = 0; i < strlen(prefix); i++)
+ if (prefix[i] != line[i])
+ cnt++;
+ line = strtok(NULL, "\n");
+ }
+ } while (cnt > 0);
+ free(cp);
+ printf("%s\n", prefix);
+}
+
+int main() {
+ char* s = "/a/b/c/d\n"
+ "/a/b/cd\n"
+ "/a/b/cc\n"
+ "/a/b/c/d/e\n";
+ proc(s);
+}
diff --git a/challenge-012/zapwai/javascript/ch-1.js b/challenge-012/zapwai/javascript/ch-1.js
new file mode 100644
index 0000000000..f16531410b
--- /dev/null
+++ b/challenge-012/zapwai/javascript/ch-1.js
@@ -0,0 +1,49 @@
+let primes = [2];
+
+function is_prime(num) {
+ for (let p of primes) {
+ if (p < num) {
+ if (num % p == 0)
+ return false;
+ }
+ else {
+ break;
+ }
+ }
+ return true;
+}
+
+function primorial(n) {
+ let p = 1;
+ while (n > 0) {
+ n--;
+ p *= primes[n];
+ }
+ return p;
+}
+
+function fill_primes(num) {
+ let i = 2;
+ while (primes[primes.length-1] < num) {
+ i++;
+ let cnt = 0;
+ for (let j = 0; j < primes.length; j++) {
+ if (i % primes[j] == 0)
+ cnt++;
+ }
+ if (cnt == 0)
+ primes.push(i);
+ }
+}
+
+function euclid(i) {
+ return 1 + primorial(i);
+}
+
+fill_primes(15000);
+for (let i = 2; i < 8; i++) {
+ if (!(is_prime(euclid(i)))) {
+ console.log(euclid(i));
+ break;
+ }
+}
diff --git a/challenge-012/zapwai/javascript/ch-2.js b/challenge-012/zapwai/javascript/ch-2.js
new file mode 100644
index 0000000000..fecd56d950
--- /dev/null
+++ b/challenge-012/zapwai/javascript/ch-2.js
@@ -0,0 +1,23 @@
+let input = `/a/b/c/d
+/a/b/cd
+/a/b/cc
+/a/b/c/d/e`;
+
+function proc(input) {
+ let line = input.split("\n");
+ let prefix = line[0];
+ let cnt = 1;
+ while (cnt > 0) {
+ cnt = 0;
+ prefix = prefix.slice(0,prefix.lastIndexOf("/"));
+ for (let i = 0; i < line.length; i++) {
+ let pattern = new RegExp("^"+prefix+"/");
+ if (!pattern.test(line[i])) {
+ cnt++;
+ }
+ }
+ }
+ return prefix;
+}
+
+console.log(proc(input))
diff --git a/challenge-012/zapwai/perl/ch-1.pl b/challenge-012/zapwai/perl/ch-1.pl
new file mode 100644
index 0000000000..e079a13127
--- /dev/null
+++ b/challenge-012/zapwai/perl/ch-1.pl
@@ -0,0 +1,58 @@
+use v5.38;
+my @primes = (2);
+
+sub is_prime($num) {
+ for my $p (@primes) {
+ if ($p < $num) {
+ return 0 if ($num % $p == 0);
+ }
+ else {
+ last;
+ }
+ }
+ 1
+}
+
+sub fill_more_primes($lim) {
+ my $i = $primes[$#primes];
+ while ($primes[$#primes] < $lim) {
+ $i++;
+ my $cnt = scalar grep { $i % $_ == 0 } @primes;
+ push @primes, $i if ($cnt == 0);
+ }
+}
+
+sub fill_primes_bycnt($num) {
+ my $i = 2;
+ while (@primes < $num) {
+ $i++;
+ my $cnt = scalar grep { $i % $_ == 0 } @primes;
+ push @primes, $i if ($cnt == 0);
+ }
+}
+
+sub primorial($n) {
+ my $p = 1;
+ while ($n > 0) {
+ $n--;
+ $p *= $primes[$n];
+ }
+ $p
+}
+
+sub proc($n) {
+ fill_primes_bycnt($n);
+ my @primorials = map primorial($_), (1 .. $n);
+ fill_more_primes(sqrt $primorials[$#primorials]);
+ say "Euclid numbers:";
+ foreach my $prim (@primorials) {
+ if (!is_prime($prim+1)) {
+ say $prim+1," <- not prime!";
+ last;
+ }
+ say $prim+1;
+ }
+}
+
+proc(7);
+
diff --git a/challenge-012/zapwai/perl/ch-2.pl b/challenge-012/zapwai/perl/ch-2.pl
new file mode 100644
index 0000000000..ab87ba1937
--- /dev/null
+++ b/challenge-012/zapwai/perl/ch-2.pl
@@ -0,0 +1,26 @@
+use v5.38;
+
+my $input = <<"ENDL";
+/a/b/c/d
+/a/b/cd
+/a/b/cc
+/a/b/c/d/e
+ENDL
+
+sub proc($input) {
+ my @line = split("\n", $input);
+ my $prefix = $line[0];
+ my $cnt = 0;
+ do {
+ $cnt = 0;
+ $prefix = substr $prefix, 0, rindex($prefix, "/");
+ for my $i (0 .. $#line) {
+ if ($line[$i] !~ /^$prefix\//) {
+ $cnt++;
+ }
+ }
+ } while($cnt > 0);
+ return $prefix;
+}
+
+say proc($input);
diff --git a/challenge-012/zapwai/python/ch-1.py b/challenge-012/zapwai/python/ch-1.py
new file mode 100644
index 0000000000..c085e70142
--- /dev/null
+++ b/challenge-012/zapwai/python/ch-1.py
@@ -0,0 +1,37 @@
+
+def fill_primes(num):
+ i = 2
+ while primes[len(primes) - 1] < num:
+ i += 1
+ cnt = 0
+ for p in primes:
+ if i % p == 0:
+ cnt += 1
+ if cnt == 0:
+ primes.append(i)
+
+def is_prime(num):
+ for p in primes:
+ if p < num:
+ if num % p == 0:
+ return False
+ else:
+ break
+ return True
+
+def primorial(n):
+ p = 1
+ while n > 0:
+ n -= 1
+ p *= primes[n]
+ return p
+
+def euclid(n):
+ return 1 + primorial(n)
+
+primes = [2]
+fill_primes(15000)
+for i in range(8):
+ if not is_prime(euclid(i)):
+ print(euclid(i))
+ break
diff --git a/challenge-012/zapwai/python/ch-2.py b/challenge-012/zapwai/python/ch-2.py
new file mode 100644
index 0000000000..14580e9a23
--- /dev/null
+++ b/challenge-012/zapwai/python/ch-2.py
@@ -0,0 +1,19 @@
+import re
+input = """/a/b/c/d
+/a/b/cd
+/a/b/cc
+/a/b/c/d/e"""
+
+def proc(input):
+ line = input.split()
+ prefix = line[0]
+ cnt = 1
+ while cnt > 0:
+ cnt = 0
+ prefix = prefix[0:prefix.rindex("/")]
+ for i in range(len(line)):
+ if not re.search("^"+prefix+"\/", line[i]):
+ cnt += 1
+ return prefix
+
+print(proc(input))
diff --git a/challenge-012/zapwai/rust/ch-1.rs b/challenge-012/zapwai/rust/ch-1.rs
new file mode 100644
index 0000000000..f46af23304
--- /dev/null
+++ b/challenge-012/zapwai/rust/ch-1.rs
@@ -0,0 +1,53 @@
+fn fill_primes(num :i32, primes :&mut Vec<i32> ) {
+ let mut i = 2;
+ while primes[primes.len() - 1] < num {
+ i += 1;
+ let mut cnt = 0;
+ for p in &mut *primes {
+ if i % *p == 0 {
+ cnt += 1;
+ }
+ }
+ if cnt == 0 {
+ primes.push(i);
+ }
+ }
+}
+
+fn is_prime(num :i32, primes :&Vec<i32>) -> bool {
+ for p in primes {
+ if p < &num {
+ if num % p == 0 {
+ return false;
+ }
+ } else {
+ break;
+ }
+ }
+ return true;
+}
+
+fn primorial(n :i32, primes :&Vec<i32>) -> i32 {
+ let mut p = 1;
+ let mut i = n as usize;
+ while i > 0 {
+ i -= 1;
+ p *= primes[i];
+ }
+ return p;
+}
+
+fn euclid(n :i32, primes : &Vec<i32>) -> i32 {
+ return 1 + primorial(n, primes);
+}
+
+fn main() {
+ let mut primes = vec![2];
+ fill_primes(15000, &mut primes);
+ for i in 0 .. 8 {
+ if !is_prime(euclid(i, &primes), &primes) {
+ println!("{}", euclid(i, &primes));
+ break;
+ }
+ }
+}
diff --git a/challenge-012/zapwai/rust/ch-2.rs b/challenge-012/zapwai/rust/ch-2.rs
new file mode 100644
index 0000000000..093ecc99e5
--- /dev/null
+++ b/challenge-012/zapwai/rust/ch-2.rs
@@ -0,0 +1,25 @@
+use regex::Regex;
+fn main() {
+ let inp = "/a/b/c/d
+/a/b/cd
+/a/b/cc
+/a/b/c/d/e";
+ let mut alines = inp.split('\n');
+ let mut prefix = alines.next().unwrap();
+ let mut cnt = 1;
+ while cnt > 0 {
+ cnt = 0;
+ let lind = prefix.rfind('/').unwrap_or(0);
+ prefix = &prefix[0..lind];
+ let a = format!(r"^{}/", prefix);
+ let re = Regex::new(&a).unwrap();
+ let lines = inp.split('\n');
+ for line in lines {
+ if !re.is_match(line) {
+ cnt += 1;
+ }
+ }
+ }
+ println!("{prefix}");
+}
+