aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-07-16 11:20:58 +0100
committerGitHub <noreply@github.com>2022-07-16 11:20:58 +0100
commit226d144da9dad49987e97be579518861b58180bb (patch)
tree93339b17eb738e614f2a9abf04a4af1ad45ef80e
parent8e829672a532e2e0056e9806c6ebaf7566ceb42f (diff)
parent76a1cabdcb450ae50377df0ce0b4fa5998667647 (diff)
downloadperlweeklychallenge-club-226d144da9dad49987e97be579518861b58180bb.tar.gz
perlweeklychallenge-club-226d144da9dad49987e97be579518861b58180bb.tar.bz2
perlweeklychallenge-club-226d144da9dad49987e97be579518861b58180bb.zip
Merge pull request #6444 from deadmarshal/challenge173
Challenge173
-rw-r--r--challenge-173/deadmarshal/ada/Ch2.gpr10
-rw-r--r--challenge-173/deadmarshal/ada/ch1.adb31
-rw-r--r--challenge-173/deadmarshal/ada/ch2.adb30
-rw-r--r--challenge-173/deadmarshal/c/Makefile12
-rw-r--r--challenge-173/deadmarshal/c/ch-1.c34
-rw-r--r--challenge-173/deadmarshal/c/ch-2.c53
-rw-r--r--challenge-173/deadmarshal/d/ch1.d32
-rw-r--r--challenge-173/deadmarshal/d/ch2.d14
-rw-r--r--challenge-173/deadmarshal/lua/ch-1.lua23
-rw-r--r--challenge-173/deadmarshal/lua/ch-2.lua24
-rw-r--r--challenge-173/deadmarshal/modula-3/ch1/src/Ch1.m340
-rw-r--r--challenge-173/deadmarshal/modula-3/ch1/src/m3makefile5
-rw-r--r--challenge-173/deadmarshal/modula-3/ch2/src/Ch2.m329
-rw-r--r--challenge-173/deadmarshal/modula-3/ch2/src/m3makefile5
-rw-r--r--challenge-173/deadmarshal/perl/ch-1.pl31
-rw-r--r--challenge-173/deadmarshal/perl/ch-2.pl15
16 files changed, 388 insertions, 0 deletions
diff --git a/challenge-173/deadmarshal/ada/Ch2.gpr b/challenge-173/deadmarshal/ada/Ch2.gpr
new file mode 100644
index 0000000000..c5634a7337
--- /dev/null
+++ b/challenge-173/deadmarshal/ada/Ch2.gpr
@@ -0,0 +1,10 @@
+with "gnatcoll";
+with "gnatcoll_gmp";
+
+project Ch2 is
+ for Languages use ("Ada");
+ for Create_Missing_Dirs use "True";
+ for Source_Dirs use (".");
+ for Object_Dir use "build";
+ for Exec_Dir use ".";
+end Ch2;
diff --git a/challenge-173/deadmarshal/ada/ch1.adb b/challenge-173/deadmarshal/ada/ch1.adb
new file mode 100644
index 0000000000..5bcefe1f3e
--- /dev/null
+++ b/challenge-173/deadmarshal/ada/ch1.adb
@@ -0,0 +1,31 @@
+-- Compile with: gnatmake ch1.adb
+with Ada.Text_IO;use Ada.Text_IO;
+
+procedure Ch1 is
+ function is_esthetic_number(N:in out Integer) return Boolean is
+ function Uabs(A,B:Integer) return Integer is
+ begin
+ if a < b then return b - a; else return a - b; end if;
+ end Uabs;
+
+ I,J:Integer;
+ begin
+ if N = 0 then return False; end if;
+ I := N mod 10;
+ N := N / 10;
+ while(N > 0) loop
+ J := N mod 10;
+ if Uabs(I, J) /= 1 then return False; end if;
+ N := N / 10;
+ I := J;
+ end loop;
+ return True;
+ end is_esthetic_number;
+
+ N:Integer;
+begin
+ Put("Enter an integeral number: ");
+ N := Integer'Value(Get_Line);
+ Put_Line(Boolean'Image(is_esthetic_number(N)));
+end Ch1;
+
diff --git a/challenge-173/deadmarshal/ada/ch2.adb b/challenge-173/deadmarshal/ada/ch2.adb
new file mode 100644
index 0000000000..335c694fd8
--- /dev/null
+++ b/challenge-173/deadmarshal/ada/ch2.adb
@@ -0,0 +1,30 @@
+-- Compile with: gprbuild ch2.adb
+with Ada.Text_IO;
+with GNATCOLL.GMP;use GNATCOLL.GMP;
+with GNATCOLL.GMP.Integers;use GNATCOLL.GMP.Integers;
+with GNATCOLL.GMP.Integers.IO;use GNATCOLL.GMP.Integers.IO;
+
+procedure Ch2 is
+ type TArray is array (0..9) of Big_Integer;
+ Arr:TArray;
+ K:Integer := 2;
+begin
+ Set(Arr(0), 2);
+ Set(Arr(1), 3);
+
+ for I in 2..Arr'Last loop
+ Set(Arr(I), 1);
+ end loop;
+
+ for I in 2..9 loop
+ for J in 0..K-1 loop
+ Multiply(Arr(K), Arr(K), Arr(J));
+ end loop;
+ Add(Arr(K), 1);
+ K := K + 1;
+ end loop;
+
+ for I in Arr'Range loop
+ Ada.Text_IO.Put_Line(Image(Arr(I)));
+ end loop;
+end Ch2;
diff --git a/challenge-173/deadmarshal/c/Makefile b/challenge-173/deadmarshal/c/Makefile
new file mode 100644
index 0000000000..2b74c40769
--- /dev/null
+++ b/challenge-173/deadmarshal/c/Makefile
@@ -0,0 +1,12 @@
+CFLAGS=-Wall -Wshadow -pedantic --std=c99
+LIBS=$(shell pkg-config --libs gmp)
+
+all: ch-1 ch-2
+
+ch-1:
+ $(CC) $(CFLAGS) -o ch-1 ch-1.c
+ch-2:
+ $(CC) $(CFLAGS) -o ch-2 ch-2.c $(LIBS)
+
+clean:
+ rm -rf ch-1 ch-2
diff --git a/challenge-173/deadmarshal/c/ch-1.c b/challenge-173/deadmarshal/c/ch-1.c
new file mode 100644
index 0000000000..ac7954fd95
--- /dev/null
+++ b/challenge-173/deadmarshal/c/ch-1.c
@@ -0,0 +1,34 @@
+#include<stdio.h>
+
+int uabs(int a, int b)
+{
+ if(a < b) return b - a;
+ return a - b;
+}
+
+int is_esthetic_number(int n)
+{
+ if(n == 0) return 0;
+ int i = n % 10;
+ n /= 10;
+ while(n)
+ {
+ int j = n % 10;
+ if(uabs(i, j) != 1) return 0;
+ n /= 10;
+ i = j;
+ }
+ return 1;
+}
+
+int main(void)
+{
+ printf("Is %d an esthetic number? %s\n",
+ 5456,
+ is_esthetic_number(5456) ? "true" : "false");
+ printf("Is %d an esthetic number? %s\n",
+ 120,
+ is_esthetic_number(120) ? "true" : "false");
+
+ return 0;
+}
diff --git a/challenge-173/deadmarshal/c/ch-2.c b/challenge-173/deadmarshal/c/ch-2.c
new file mode 100644
index 0000000000..a41ef664df
--- /dev/null
+++ b/challenge-173/deadmarshal/c/ch-2.c
@@ -0,0 +1,53 @@
+#include<gmp.h>
+
+// Sylvester’s sequence
+#define N 10
+
+void array_init(mpz_t *arr, size_t size)
+{
+ for(int i = 0; i < size; ++i)
+ mpz_init(arr[i]);
+}
+
+void array_set(mpz_t *arr, size_t size)
+{
+ mpz_set_ui(arr[0], 2);
+ mpz_set_ui(arr[1], 3);
+ for(int i = 2; i < N; ++i)
+ mpz_set_ui(arr[i], 1);
+}
+
+void array_mul(mpz_t *arr, size_t size)
+{
+ int k = 2;
+ for(int i = 2; i < N; ++i)
+ {
+ for(int j = 0; j < k; ++j)
+ mpz_mul(arr[k], arr[k], arr[j]);
+ mpz_add_ui(arr[k], arr[k], 1);
+ k++;
+ }
+}
+
+void array_print(mpz_t *arr, size_t size)
+{
+ for(int i = 0; i < N; ++i)
+ gmp_printf("%Zd\n", arr[i]);
+}
+
+void array_free(mpz_t *arr, size_t size)
+{
+ for(int i = 0; i < N; ++i)
+ mpz_clear(arr[i]);
+}
+
+int main(void)
+{
+ mpz_t arr[N];
+ array_init(arr, N);
+ array_set(arr, N);
+ array_mul(arr, N);
+ array_print(arr, N);
+ array_free(arr, N);
+ return 0;
+}
diff --git a/challenge-173/deadmarshal/d/ch1.d b/challenge-173/deadmarshal/d/ch1.d
new file mode 100644
index 0000000000..7ed32f3762
--- /dev/null
+++ b/challenge-173/deadmarshal/d/ch1.d
@@ -0,0 +1,32 @@
+import std.stdio;
+
+int uabs(int a, int b)
+{
+ if(a < b) return b - a;
+ return a - b;
+}
+
+bool is_esthetic_number(int n)
+{
+ if(n == 0) return false;
+ int i = n % 10;
+ n /= 10;
+ while(n)
+ {
+ int j = n % 10;
+ if(uabs(i, j) != 1) return false;
+ n /= 10;
+ i = j;
+ }
+ return true;
+}
+
+void main()
+{
+ writefln("Is %d an esthetic number? %s",
+ 5456,
+ is_esthetic_number(5456));
+ writefln("Is %d an esthetic number? %s",
+ 120,
+ is_esthetic_number(120));
+}
diff --git a/challenge-173/deadmarshal/d/ch2.d b/challenge-173/deadmarshal/d/ch2.d
new file mode 100644
index 0000000000..1a2b0b38d4
--- /dev/null
+++ b/challenge-173/deadmarshal/d/ch2.d
@@ -0,0 +1,14 @@
+import std.stdio:writeln;
+import std.bigint;
+import std.algorithm.iteration:reduce;
+
+void main()
+{
+ BigInt[] arr = [2.BigInt,3.BigInt];
+ do{
+ arr ~= reduce!((a, b) => a * b)(1.BigInt,arr) + 1;
+ }while(arr.length != 10);
+
+ foreach(e; arr)
+ writeln(e);
+}
diff --git a/challenge-173/deadmarshal/lua/ch-1.lua b/challenge-173/deadmarshal/lua/ch-1.lua
new file mode 100644
index 0000000000..c25a62fb47
--- /dev/null
+++ b/challenge-173/deadmarshal/lua/ch-1.lua
@@ -0,0 +1,23 @@
+if #arg ~= 1 then
+ io.stderr:write('No args provided!')
+ os.exit(1)
+end
+
+local function is_esthetic_number(n)
+ assert(type(n) == 'number', 'n must be a number!')
+ local function uabs(a, b)
+ if a < b then return b - a else return a - b end
+ end
+ if n == 0 then return false end
+ local i = n % 10
+ n = n // 10
+ while n > 0 do
+ local j = n % 10
+ if uabs(i, j) ~= 1 then return false end
+ n = n // 10
+ i = j
+ end
+ return true
+end
+
+print(is_esthetic_number(tonumber(arg[1])))
diff --git a/challenge-173/deadmarshal/lua/ch-2.lua b/challenge-173/deadmarshal/lua/ch-2.lua
new file mode 100644
index 0000000000..1cca518763
--- /dev/null
+++ b/challenge-173/deadmarshal/lua/ch-2.lua
@@ -0,0 +1,24 @@
+-- https://github.com/edubart/lua-bint
+-- To install this library: luarocks install bint
+local bint = require 'bint'(1024)
+
+local function product(t, last)
+ assert(type(t) == 'table' and
+ type(last) == 'number',
+ 't, last must be table, number, number respectively!')
+ local prod = bint(1)
+ for i=1, last do prod = prod * t[i] end
+ return prod
+end
+
+local function sylvesters_sequence()
+ local t = {2,3}
+ while(#t ~= 10) do
+ t[#t+1] = bint(product(t, #t) + 1)
+ end
+ return t
+end
+
+local t = sylvesters_sequence()
+for i=1, #t do print(t[i]) end
+
diff --git a/challenge-173/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-173/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..e8e1091340
--- /dev/null
+++ b/challenge-173/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,40 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT IO, Scan, Lex, FloatMode, StableError, Params;
+FROM Fmt IMPORT Bool;
+
+VAR
+ Input:INTEGER;
+
+PROCEDURE IsEsthetic(N:INTEGER):BOOLEAN =
+PROCEDURE Uabs(READONLY A,B:INTEGER):INTEGER =
+BEGIN
+ IF A < B THEN RETURN B - A END;
+ RETURN A - B;
+END Uabs;
+VAR
+ I,J:INTEGER;
+BEGIN
+ IF N = 0 THEN RETURN FALSE END;
+ I := N MOD 10;
+ N := N DIV 10;
+ WHILE N > 0 DO
+ J := N MOD 10;
+ IF Uabs(I,J) # 1 THEN RETURN FALSE END;
+ N := N DIV 10;
+ I := J;
+ END;
+ RETURN TRUE;
+END IsEsthetic;
+
+BEGIN
+ IF Params.Count # 2 THEN StableError.Halt("No arg(s) provided!") END;
+ TRY
+ Input := Scan.Int(Params.Get(1));
+ EXCEPT
+ | Lex.Error, FloatMode.Trap =>
+ IO.Put("Malformed arg(s) provided!");
+ END;
+
+ IO.Put(Bool(IsEsthetic(Input)));
+END Ch1.
diff --git a/challenge-173/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-173/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..db449d6bcf
--- /dev/null
+++ b/challenge-173/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,5 @@
+import("libm3")
+import("stable")
+
+implementation("Ch1")
+program("ch1")
diff --git a/challenge-173/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-173/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..c2d726c3f8
--- /dev/null
+++ b/challenge-173/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,29 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT IO;
+FROM BigInteger IMPORT T,Add,Mul,FromInteger;
+FROM BigIntegerFmtLex IMPORT Fmt;
+
+PROCEDURE SylvestersSequence() =
+VAR
+ K:INTEGER := 2;
+ Arr:ARRAY[0..9] OF T;
+BEGIN
+ Arr[0] := FromInteger(2);
+ Arr[1] := FromInteger(3);
+ FOR I := 2 TO LAST(Arr) DO Arr[I] := FromInteger(1) END;
+ FOR I := 2 TO LAST(Arr) DO
+ FOR J := 0 TO K-1 DO
+ Arr[K] := Mul(Arr[K], Arr[J]);
+ END;
+ Arr[K] := Add(Arr[K], FromInteger(1));
+ INC(K);
+ END;
+ FOR I := FIRST(Arr) TO LAST(Arr) DO
+ IO.Put(Fmt(Arr[I]) & "\n");
+ END;
+END SylvestersSequence;
+
+BEGIN
+ SylvestersSequence();
+END Ch2.
diff --git a/challenge-173/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-173/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..9503562257
--- /dev/null
+++ b/challenge-173/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,5 @@
+import("libm3")
+import("arithmetic")
+
+implementation("Ch2")
+program("ch2")
diff --git a/challenge-173/deadmarshal/perl/ch-1.pl b/challenge-173/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..eb6ea8a9c9
--- /dev/null
+++ b/challenge-173/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+die "No args provided!" unless @ARGV == 1 && $ARGV[0] =~ /\d+/;
+
+sub is_esthetic_number{
+ my ($n) = @_;
+ use integer;
+ my $uabs = sub{
+ if($_[0] < $_[1]){
+ return $_[1] - $_[0];
+ }
+ return $_[0] - $_[1];
+ };
+
+ if($n == 0){return 0}
+ my $i = $n % 10;
+ $n /= 10;
+ while($n){
+ my $j = $n % 10;
+ if($uabs->($i, $j) != 1){
+ return 0;
+ }
+ $n /= 10;
+ $i = $j;
+ }
+ return 1;
+}
+
+print is_esthetic_number($ARGV[0]) ? "True" : "False", "\n";
diff --git a/challenge-173/deadmarshal/perl/ch-2.pl b/challenge-173/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..12a479c26e
--- /dev/null
+++ b/challenge-173/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use List::Util qw(product);
+use Math::BigInt lib => 'GMP';
+
+sub sylvesters_sequence{
+ my @arr = (2,3);
+ do{
+ push @arr, Math::BigInt->new(product @arr[0..@arr-1]) + 1;
+ }until(@arr == 10);
+ return @arr;
+}
+
+print "$_\n" foreach(sylvesters_sequence);