diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-01-22 09:44:01 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-22 09:44:01 +0000 |
| commit | cf1c6f4dc1d22d9cf4b40df561d9c8231169b858 (patch) | |
| tree | b68ef9e223644ba3a35653bca2e2b086b84413bc | |
| parent | 24d59f1e00bccc06340c6a6fcbf7862221530080 (diff) | |
| parent | 134096a0a3865ae0a96fadfcd602f0ed780f5f22 (diff) | |
| download | perlweeklychallenge-club-cf1c6f4dc1d22d9cf4b40df561d9c8231169b858.tar.gz perlweeklychallenge-club-cf1c6f4dc1d22d9cf4b40df561d9c8231169b858.tar.bz2 perlweeklychallenge-club-cf1c6f4dc1d22d9cf4b40df561d9c8231169b858.zip | |
Merge pull request #11479 from deadmarshal/TWC305
TWC305
| -rw-r--r-- | challenge-305/deadmarshal/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-305/deadmarshal/java/Ch1.java | 30 | ||||
| -rw-r--r-- | challenge-305/deadmarshal/java/Ch2.java | 36 | ||||
| -rw-r--r-- | challenge-305/deadmarshal/modula-3/Ch1/src/Ch1.m3 | 56 | ||||
| -rw-r--r-- | challenge-305/deadmarshal/modula-3/Ch1/src/m3makefile | 6 | ||||
| -rw-r--r-- | challenge-305/deadmarshal/modula-3/Ch2/src/Ch2.m3 | 49 | ||||
| -rw-r--r-- | challenge-305/deadmarshal/modula-3/Ch2/src/m3makefile | 4 | ||||
| -rw-r--r-- | challenge-305/deadmarshal/perl/ch-1.pl | 17 | ||||
| -rw-r--r-- | challenge-305/deadmarshal/perl/ch-2.pl | 17 |
9 files changed, 216 insertions, 0 deletions
diff --git a/challenge-305/deadmarshal/blog.txt b/challenge-305/deadmarshal/blog.txt new file mode 100644 index 0000000000..03e9b594b1 --- /dev/null +++ b/challenge-305/deadmarshal/blog.txt @@ -0,0 +1 @@ +https://deadmarshal.blogspot.com/2025/01/twc305.html diff --git a/challenge-305/deadmarshal/java/Ch1.java b/challenge-305/deadmarshal/java/Ch1.java new file mode 100644 index 0000000000..31a92f703c --- /dev/null +++ b/challenge-305/deadmarshal/java/Ch1.java @@ -0,0 +1,30 @@ +import java.util.ArrayList; +import java.util.List; + +public class Ch1 { + public static void main(String[] args) { + System.out.println(binary_prefix(new int[]{1, 0, 1})); + System.out.println(binary_prefix(new int[]{1, 1, 0})); + System.out.println(binary_prefix( + new int[]{1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1})); + } + + private static boolean is_prime(int n) { + if (n <= 1) return false; + if ((n == 2) || (n == 3)) return true; + if ((n % 2 == 0) || (n % 3 == 0)) return false; + for (int i = 5; i < Math.sqrt(n); i += 6) + if ((n % i == 0) || (n % (i + 2) == 0)) return false; + return true; + } + + private static List<Boolean> binary_prefix(int[] arr) { + StringBuilder sb = new StringBuilder(); + List<Boolean> ret = new ArrayList<>(); + for (int i = 0; i < arr.length; ++i) { + sb.append(arr[i]); + ret.add(is_prime(Integer.parseInt(sb.toString(), 2))); + } + return ret; + } +} diff --git a/challenge-305/deadmarshal/java/Ch2.java b/challenge-305/deadmarshal/java/Ch2.java new file mode 100644 index 0000000000..5268988edd --- /dev/null +++ b/challenge-305/deadmarshal/java/Ch2.java @@ -0,0 +1,36 @@ +import java.util.Arrays; +import java.util.Comparator; + +public class Ch2 { + public static void main(String[] args) { + String[] arr1 = new String[]{"perl", "python", "raku"}; + String[] arr2 = new String[]{"the", "weekly", "challenge"}; + char[] c1 = + new char[]{'h', 'l', 'a', 'b', 'y', 'd', 'e', 'f', 'g', 'i', 'r', 'k', + 'm', 'n', 'o', 'p', 'q', 'j', 's', 't', 'u', 'v', 'w', 'x', 'c', 'z'}; + char[] c2 = + new char[]{'c', 'o', 'r', 'l', 'd', 'a', 'b', 't', 'e', 'f', 'g', 'h', + 'i', 'j', 'k', 'm', 'n', 'p', 'q', 's', 'w', 'u', 'v', 'x', 'y', 'z'}; + alien_dictionary(arr1, c1); + alien_dictionary(arr2, c2); + System.out.println(Arrays.toString(arr1)); + System.out.println(Arrays.toString(arr2)); + } + + private static void alien_dictionary(String[] words, char[] alien_chars) { + String alienstr = String.valueOf(alien_chars); + Arrays.sort(words, new Comparator<String>() { + @Override + public int compare(String o1, String o2) { + return translate(o1, alienstr).compareTo(translate(o2, alienstr)); + } + }); + } + + private static String translate(String str, String alien) { + char[] ret = new char[str.length()]; + for (int i = 0; i < str.length(); ++i) + ret[i] = alien.charAt(str.charAt(i) - 'a'); + return String.valueOf(ret); + } +} diff --git a/challenge-305/deadmarshal/modula-3/Ch1/src/Ch1.m3 b/challenge-305/deadmarshal/modula-3/Ch1/src/Ch1.m3 new file mode 100644 index 0000000000..a8b002c688 --- /dev/null +++ b/challenge-305/deadmarshal/modula-3/Ch1/src/Ch1.m3 @@ -0,0 +1,56 @@ +MODULE Ch1 EXPORTS Main; + +IMPORT SIO,Math,Fmt,Scan,BoolSeq; +IMPORT FloatMode,Lex,StableError; + +VAR + A1 := ARRAY[0..2] OF INTEGER{1,0,1}; + A2 := ARRAY[0..2] OF INTEGER{1,1,0}; + A3 := ARRAY[0..19] OF INTEGER{1,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1}; + +PROCEDURE IsPrime(READONLY N:INTEGER):BOOLEAN = + BEGIN + IF N <= 1 THEN RETURN FALSE END; + IF N = 2 OR N = 3 THEN RETURN TRUE END; + IF N MOD 2 = 0 OR N MOD 3 = 0 THEN RETURN FALSE END; + FOR I := 5 TO FLOOR(Math.sqrt(FLOAT(N,LONGREAL))) BY 6 DO + IF N MOD I = 0 OR N MOD (I+2) = 0 THEN RETURN FALSE END + END; + RETURN TRUE + END IsPrime; + +PROCEDURE BinaryPrefix(VAR A:ARRAY OF INTEGER):BoolSeq.T + RAISES{FloatMode.Trap,Lex.Error} = + VAR + Bin:TEXT := ""; + Ret := NEW(BoolSeq.T).init(); + BEGIN + FOR I := FIRST(A) TO LAST(A) DO + Bin := Bin & Fmt.Int(A[I]); + Ret.addhi(IsPrime(Scan.Int(Bin,2))) + END; + RETURN Ret + END BinaryPrefix; + +PROCEDURE PrintSeq(READONLY S:BoolSeq.T) = + BEGIN + FOR I := 0 TO S.size()-1 DO + SIO.PutBool(S.get(I)); + SIO.PutChar(' ') + END; + SIO.Nl() + END PrintSeq; + +BEGIN + TRY + PrintSeq(BinaryPrefix(A1)); + PrintSeq(BinaryPrefix(A2)); + PrintSeq(BinaryPrefix(A3)) + EXCEPT + FloatMode.Trap => StableError.Halt("FloatMode.Trap exception occurred!") + | Lex.Error => StableError.Halt("Lex.Error exception occurred!") + ELSE + StableError.Halt("Some other exception occurred!") + END; +END Ch1. + diff --git a/challenge-305/deadmarshal/modula-3/Ch1/src/m3makefile b/challenge-305/deadmarshal/modula-3/Ch1/src/m3makefile new file mode 100644 index 0000000000..31334692ec --- /dev/null +++ b/challenge-305/deadmarshal/modula-3/Ch1/src/m3makefile @@ -0,0 +1,6 @@ +import("libm3") +import("libsio") +import("stable") +sequence("Bool","Boolean") +implementation("Ch1") +program("Ch1") diff --git a/challenge-305/deadmarshal/modula-3/Ch2/src/Ch2.m3 b/challenge-305/deadmarshal/modula-3/Ch2/src/Ch2.m3 new file mode 100644 index 0000000000..594e22c606 --- /dev/null +++ b/challenge-305/deadmarshal/modula-3/Ch2/src/Ch2.m3 @@ -0,0 +1,49 @@ +MODULE Ch2 EXPORTS Main; + +IMPORT SIO,Text,TextArraySort; + +VAR + A1 := ARRAY[0..2] OF TEXT{"perl","python","raku"}; + A2 := ARRAY[0..2] OF TEXT{"the","weekly","challenge"}; + C1 := ARRAY[0..25] OF CHAR{'h','l','a','b','y','d','e','f','g','i', + 'r','k','m','n','o','p','q','j','s','t', + 'u','v','w','x','c','z'}; + C2 := ARRAY[0..25] OF CHAR{'c','o','r','l','d','a','b','t','e','f', + 'g','h','i','j','k','m','n','p','q','s', + 'w','u','v','x','y','z'}; + +PROCEDURE AlienDictionary(VAR A:ARRAY OF TEXT; + VAR Alien:ARRAY OF CHAR) = + PROCEDURE Translate(READONLY Str:TEXT; + VAR Alien:ARRAY OF CHAR):TEXT = + VAR Ret := NEW(REF ARRAY OF CHAR,Text.Length(Str)); + BEGIN + FOR I := 0 TO Text.Length(Str)-1 DO + Ret[I] := Alien[ORD(Text.GetChar(Str,I)) - ORD('a')] + END; + RETURN Text.FromChars(Ret^) + END Translate; + PROCEDURE Compare(A,B:TEXT):[-1..1] = + BEGIN + RETURN Text.Compare(Translate(A,Alien),Translate(B,Alien)) + END Compare; + BEGIN + TextArraySort.Sort(A,Compare) + END AlienDictionary; + +PROCEDURE PrintArray(VAR A:ARRAY OF TEXT) = + BEGIN + FOR I := FIRST(A) TO LAST(A) DO + SIO.PutText(A[I]); + SIO.PutChar(' ') + END; + SIO.Nl() + END PrintArray; + +BEGIN + AlienDictionary(A1,C1); + AlienDictionary(A2,C2); + PrintArray(A1); + PrintArray(A2) +END Ch2. + diff --git a/challenge-305/deadmarshal/modula-3/Ch2/src/m3makefile b/challenge-305/deadmarshal/modula-3/Ch2/src/m3makefile new file mode 100644 index 0000000000..78802242fe --- /dev/null +++ b/challenge-305/deadmarshal/modula-3/Ch2/src/m3makefile @@ -0,0 +1,4 @@ +import("libm3") +import("libsio") +implementation("Ch2") +program("Ch2") diff --git a/challenge-305/deadmarshal/perl/ch-1.pl b/challenge-305/deadmarshal/perl/ch-1.pl new file mode 100644 index 0000000000..b4f450ed33 --- /dev/null +++ b/challenge-305/deadmarshal/perl/ch-1.pl @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Math::Prime::Util qw(is_prime); +use Data::Show; + +sub binary_prefix{ + my ($arr) = @_; + my ($bin,@res) = (''); + map{$bin .= $_; push @res,is_prime(oct("0b$bin")) ? 1 : 0} @$arr; + @res +} + +print show binary_prefix([1,0,1]); +print show binary_prefix([1,1,0]); +print show binary_prefix([1,1,1,1,0,1,0,0,0,0,1,0,1,0,0,1,0,0,0,1]); + diff --git a/challenge-305/deadmarshal/perl/ch-2.pl b/challenge-305/deadmarshal/perl/ch-2.pl new file mode 100644 index 0000000000..40f167f7e9 --- /dev/null +++ b/challenge-305/deadmarshal/perl/ch-2.pl @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Data::Show; + +sub alien_dictionary{ + my ($words,$alien) = @_; + my $r = join '',@$alien; + sort{eval "\$a =~ tr/a-z/$r/r" cmp + eval "\$b =~ tr/a-z/$r/r"} @$words +} + +print show alien_dictionary(['perl','python','raku'], + [qw/h l a b y d e f g i r k m n o p q j s t u v w x c z/]); +print show alien_dictionary(['the','weekly','challenge'], + [qw/c o r l d a b t e f g h i j k m n p q s w u v x y z/]); + |
