diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-07-16 11:20:58 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-16 11:20:58 +0100 |
| commit | 226d144da9dad49987e97be579518861b58180bb (patch) | |
| tree | 93339b17eb738e614f2a9abf04a4af1ad45ef80e | |
| parent | 8e829672a532e2e0056e9806c6ebaf7566ceb42f (diff) | |
| parent | 76a1cabdcb450ae50377df0ce0b4fa5998667647 (diff) | |
| download | perlweeklychallenge-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.gpr | 10 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/ada/ch1.adb | 31 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/ada/ch2.adb | 30 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/c/Makefile | 12 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/c/ch-1.c | 34 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/c/ch-2.c | 53 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/d/ch1.d | 32 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/d/ch2.d | 14 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/lua/ch-1.lua | 23 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/lua/ch-2.lua | 24 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/modula-3/ch1/src/Ch1.m3 | 40 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/modula-3/ch1/src/m3makefile | 5 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/modula-3/ch2/src/Ch2.m3 | 29 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/modula-3/ch2/src/m3makefile | 5 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/perl/ch-1.pl | 31 | ||||
| -rw-r--r-- | challenge-173/deadmarshal/perl/ch-2.pl | 15 |
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); |
