diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-10-31 16:54:36 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-31 16:54:36 +0000 |
| commit | d2ef9440689255b9fe57a455de7e529846fed45c (patch) | |
| tree | b1a229f31c2286ac411a72d54c48e0b20fee9fe5 | |
| parent | 20df36597d5f3d39e39328cabd0dfae7b5b78640 (diff) | |
| parent | 9f16c0d2f1112b95df5092baa8675f4aeced3759 (diff) | |
| download | perlweeklychallenge-club-d2ef9440689255b9fe57a455de7e529846fed45c.tar.gz perlweeklychallenge-club-d2ef9440689255b9fe57a455de7e529846fed45c.tar.bz2 perlweeklychallenge-club-d2ef9440689255b9fe57a455de7e529846fed45c.zip | |
Merge pull request #8982 from deadmarshal/TWC241
TWC241
21 files changed, 605 insertions, 0 deletions
diff --git a/challenge-241/deadmarshal/blog.txt b/challenge-241/deadmarshal/blog.txt new file mode 100644 index 0000000000..6ff104fedb --- /dev/null +++ b/challenge-241/deadmarshal/blog.txt @@ -0,0 +1 @@ +https://deadmarshal.blogspot.com/2023/10/twc241.html diff --git a/challenge-241/deadmarshal/c/ch-1.c b/challenge-241/deadmarshal/c/ch-1.c new file mode 100644 index 0000000000..85f6b3b00d --- /dev/null +++ b/challenge-241/deadmarshal/c/ch-1.c @@ -0,0 +1,30 @@ +#include<stdio.h> + +size_t arithmetic_triplets(int *arr,size_t sz,int diff) +{ + size_t count = 0; + for(size_t i = 0; i < sz; ++i) + { + for(size_t j = i+1; j < sz; ++j) + { + for(size_t k = j+1; k < sz; ++k) + { + if((arr[j] - arr[i] == diff) && (arr[k] - arr[j] == diff)) + count++; + } + } + } + return count; +} + +int main(void) +{ + int arr1[] = {0,1,4,6,7,10}; + int arr2[] = {4,5,6,7,8,9}; + size_t sz1 = sizeof(arr1)/sizeof(*arr1); + size_t sz2 = sizeof(arr2)/sizeof(*arr2); + printf("%d\n", arithmetic_triplets(arr1,sz1,3)); + printf("%d\n", arithmetic_triplets(arr2,sz2,2)); + return 0; +} + diff --git a/challenge-241/deadmarshal/c/ch-2.c b/challenge-241/deadmarshal/c/ch-2.c new file mode 100644 index 0000000000..b7de46a9fc --- /dev/null +++ b/challenge-241/deadmarshal/c/ch-2.c @@ -0,0 +1,41 @@ +#include<stdio.h> +#include<stdlib.h> + +size_t count_factors(int n) +{ + size_t count = 0; + int c = 2; + while(n > 1) + { + if(n % c == 0) + { + n /= c; + count++; + } + else c++; + } + return count; +} + +int compare(const void *a, const void *b) +{ + size_t fa = count_factors(*(int*)a); + size_t fb = count_factors(*(int*)b); + return fa == fb ? a - b : fa - fb; +} + +void prime_order(int *arr,size_t sz) +{ + qsort(arr,sz,sizeof(*arr),compare); +} + +int main(void) +{ + int arr[] = {11,8,27,4}; + size_t sz = sizeof(arr)/sizeof(*arr); + prime_order(arr,sz); + for(size_t i = 0; i < sz; ++i) printf("%d ",arr[i]); + puts(""); + return 0; +} + diff --git a/challenge-241/deadmarshal/cpp/ch-1.cpp b/challenge-241/deadmarshal/cpp/ch-1.cpp new file mode 100644 index 0000000000..54f493de8c --- /dev/null +++ b/challenge-241/deadmarshal/cpp/ch-1.cpp @@ -0,0 +1,30 @@ +#include<iostream> +#include<vector> + +template<typename T> +size_t arithmetic_triplets(const std::vector<T> &vec,T diff) +{ + size_t count{}; + for(size_t i = 0; i < vec.size(); ++i) + { + for(size_t j = i+1; j < vec.size(); ++j) + { + for(size_t k = j+1; k < vec.size(); ++k) + { + if((vec.at(j) - vec.at(i) == diff) && + (vec.at(k) - vec.at(j) == diff)) + count++; + } + } + } + return count; +} + +int main(void) +{ + std::vector<int> vec1{0,1,4,6,7,10},vec2{4,5,6,7,8,9}; + std::cout << arithmetic_triplets<int>(vec1,3) << '\n' + << arithmetic_triplets<int>(vec2,2) << '\n'; + return 0; +} + diff --git a/challenge-241/deadmarshal/cpp/ch-2.cpp b/challenge-241/deadmarshal/cpp/ch-2.cpp new file mode 100644 index 0000000000..b53ab789cb --- /dev/null +++ b/challenge-241/deadmarshal/cpp/ch-2.cpp @@ -0,0 +1,48 @@ +#include<iostream> +#include<vector> +#include<algorithm> + +template<typename T> +size_t count_factors(T n) +{ + size_t count{}; + T c = 2; + while(n > 1) + { + if(n % c == 0) + { + n /= c; + count++; + } + else c++; + } + return count; +} + +template<typename T> +void prime_order(std::vector<T> &vec) +{ + std::sort(vec.begin(),vec.end(),[&](T a, T b){ + size_t fa = count_factors<T>(a); + size_t fb = count_factors<T>(b); + return fa == fb ? a < b : fa < fb; + }); +} + +template<typename T> +std::ostream &operator<<(std::ostream &os, + const std::vector<T>& vec) +{ + for(const auto &e : vec) os << e << ' '; + os << "\n"; + return os; +} + +int main() +{ + std::vector<int> vec{11,8,27,4}; + prime_order<int>(vec); + std::cout << vec; + return 0; +} + diff --git a/challenge-241/deadmarshal/java/Ch1.java b/challenge-241/deadmarshal/java/Ch1.java new file mode 100644 index 0000000000..f4ae47bca6 --- /dev/null +++ b/challenge-241/deadmarshal/java/Ch1.java @@ -0,0 +1,28 @@ +import java.util.ArrayList; +import java.util.List; + +public class Ch1 { + public static void main(String[] args) { + ArrayList<Integer> list1 = + new ArrayList<>(List.of(0,1,4,6,7,10)); + ArrayList<Integer> list2 = + new ArrayList<>(List.of(4,5,6,7,8,9)); + System.out.println(arithmetic_triplets(list1,3)); + System.out.println(arithmetic_triplets(list2,2)); + } + + private static int arithmetic_triplets(List<Integer> list,int diff){ + int count = 0; + for(int i = 0; i < list.size(); ++i) { + for(int j = i+1; j < list.size(); ++j) { + for(int k = j+1; k < list.size(); ++k) { + if((list.get(j) - list.get(i) == diff) && + (list.get(k) - list.get(j) == diff)) + count++; + } + } + } + return count; + } +} + diff --git a/challenge-241/deadmarshal/java/Ch2.java b/challenge-241/deadmarshal/java/Ch2.java new file mode 100644 index 0000000000..e810fe1429 --- /dev/null +++ b/challenge-241/deadmarshal/java/Ch2.java @@ -0,0 +1,35 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Comparator; + +public class Ch2 { + public static void main(String[] args) { + ArrayList<Integer> list = new ArrayList<>(List.of(11,8,27,4)); + prime_order(list); + System.out.println(list); + } + + private static int count_factors(int n) { + int c = 2,count = 0; + while(n > 1) { + if(n % c == 0) { + n /= c; + count++; + } + else c++; + } + return count; + } + + private static void prime_order(List<Integer> list) { + list.sort(new Comparator<Integer>() { + @Override + public int compare(Integer a, Integer b) { + int fa = count_factors(a); + int fb = count_factors(b); + return fa == fb ? Integer.compare(a,b) : + Integer.compare(fa,fb); + }}); + } +} + diff --git a/challenge-241/deadmarshal/lua/ch-1.lua b/challenge-241/deadmarshal/lua/ch-1.lua new file mode 100644 index 0000000000..a63054cda6 --- /dev/null +++ b/challenge-241/deadmarshal/lua/ch-1.lua @@ -0,0 +1,19 @@ +#!/usr/bin/env lua + +local function arithmetic_triplets(t,diff) + local count = 0 + for i=1,#t do + for j=i+1,#t do + for k=j+1,#t do + if t[j] - t[i] == diff and t[k] - t[j] == diff then + count = count + 1 + end + end + end + end + return count +end + +print(arithmetic_triplets({0,1,4,6,7,10},3)) +print(arithmetic_triplets({4,5,6,7,8,9},2)) + diff --git a/challenge-241/deadmarshal/lua/ch-2.lua b/challenge-241/deadmarshal/lua/ch-2.lua new file mode 100644 index 0000000000..53e21976d0 --- /dev/null +++ b/challenge-241/deadmarshal/lua/ch-2.lua @@ -0,0 +1,21 @@ +#!/usr/bin/env lua + +local function count_factors(n) + local c,count = 2,0 + while n > 1 do + if n % c == 0 then n = n // c count = count + 1 else c = c + 1 end + end + return count +end + +local function prime_order(t) + assert(type(t) == 'table','t must be a table!') + table.sort(t,function(a,b) + local fa,fb = count_factors(a),count_factors(b) + return fa == fb and a < b or fa < fb + end) + return table.concat(t,',') +end + +print(prime_order{11,8,27,4}) + diff --git a/challenge-241/deadmarshal/modula3/ch1/src/Ch1.m3 b/challenge-241/deadmarshal/modula3/ch1/src/Ch1.m3 new file mode 100644 index 0000000000..1f7bc4bba0 --- /dev/null +++ b/challenge-241/deadmarshal/modula3/ch1/src/Ch1.m3 @@ -0,0 +1,26 @@ +MODULE Ch1 EXPORTS Main; + +IMPORT IO; + +VAR + A1:ARRAY[0..5] OF INTEGER := ARRAY OF INTEGER{0,1,4,6,7,10}; + A2:ARRAY[0..5] OF INTEGER := ARRAY OF INTEGER{4,5,6,7,8,9}; + +PROCEDURE ArithmeticTriplets(VAR A:ARRAY OF INTEGER;Diff:INTEGER):INTEGER = + VAR Count:INTEGER := 0; + BEGIN + FOR I := FIRST(A) TO LAST(A) DO + FOR J := I+1 TO LAST(A) DO + FOR K := J+1 TO LAST(A) DO + IF (A[J] - A[I] = Diff) AND (A[K] - A[J] = Diff) THEN INC(Count) END + END + END + END; + RETURN Count + END ArithmeticTriplets; + +BEGIN + IO.PutInt(ArithmeticTriplets(A1,3)); IO.Put("\n"); + IO.PutInt(ArithmeticTriplets(A2,2)); IO.Put("\n"); +END Ch1. + diff --git a/challenge-241/deadmarshal/modula3/ch1/src/m3makefile b/challenge-241/deadmarshal/modula3/ch1/src/m3makefile new file mode 100644 index 0000000000..0ee72d695b --- /dev/null +++ b/challenge-241/deadmarshal/modula3/ch1/src/m3makefile @@ -0,0 +1,4 @@ +import("libm3") +implementation("Ch1") +program("ch1") + diff --git a/challenge-241/deadmarshal/modula3/ch2/src/Ch2.m3 b/challenge-241/deadmarshal/modula3/ch2/src/Ch2.m3 new file mode 100644 index 0000000000..73dc495d62 --- /dev/null +++ b/challenge-241/deadmarshal/modula3/ch2/src/Ch2.m3 @@ -0,0 +1,65 @@ +MODULE Ch2 EXPORTS Main; + +IMPORT IO; + +TYPE + TProc = PROCEDURE(A,B:INTEGER):INTEGER; + +VAR + A1:ARRAY[0..3] OF INTEGER := ARRAY OF INTEGER{11,8,27,4}; + +PROCEDURE QuickSort(VAR A:ARRAY OF INTEGER; + Left,Right:INTEGER; + Compare:TProc) = + VAR + I,J,Pivot,Temp:INTEGER; + BEGIN + I := Left; J := Right; + Pivot := A[(Left + Right) DIV 2]; + REPEAT + WHILE Compare(Pivot,A[I]) > 0 DO INC(I) END; + WHILE Compare(Pivot,A[J]) < 0 DO DEC(J) END; + IF I <= J THEN + Temp := A[I]; A[I] := A[J]; A[J] := Temp; + INC(I); DEC(J) + END + UNTIL I > J; + IF Left < J THEN QuickSort(A,Left,J,Compare) END; + IF I < Right THEN QuickSort(A,I,Right,Compare) END; + END QuickSort; + +PROCEDURE CountFactors(N:INTEGER):INTEGER = + VAR C,Count:INTEGER; + BEGIN + Count := 0; C := 2; + WHILE N > 1 DO + IF N MOD C = 0 THEN N := N DIV C; INC(Count) ELSE INC(C) END + END; + RETURN Count + END CountFactors; + +PROCEDURE Compare(A,B:INTEGER):INTEGER = + VAR + Fa,Fb:INTEGER; + BEGIN + Fa := CountFactors(A); + Fb := CountFactors(B); + IF Fa - Fb = 0 THEN RETURN A - B ELSE RETURN Fa - Fb END + END Compare; + +PROCEDURE PrimeOrder(VAR A:ARRAY OF INTEGER) = + BEGIN + QuickSort(A,FIRST(A),LAST(A),Compare) + END PrimeOrder; + +PROCEDURE PrintArray(VAR A:ARRAY OF INTEGER) = + BEGIN + FOR I := FIRST(A) TO LAST(A) DO IO.PutInt(A[I]); IO.PutChar(' ') END; + IO.Put("\n") + END PrintArray; + +BEGIN + PrimeOrder(A1); + PrintArray(A1) +END Ch2. + diff --git a/challenge-241/deadmarshal/modula3/ch2/src/m3makefile b/challenge-241/deadmarshal/modula3/ch2/src/m3makefile new file mode 100644 index 0000000000..5c32bbc4bb --- /dev/null +++ b/challenge-241/deadmarshal/modula3/ch2/src/m3makefile @@ -0,0 +1,4 @@ +import("libm3") +implementation("Ch2") +program("ch2") + diff --git a/challenge-241/deadmarshal/oberon/Ch1.Mod b/challenge-241/deadmarshal/oberon/Ch1.Mod new file mode 100644 index 0000000000..bc50703c13 --- /dev/null +++ b/challenge-241/deadmarshal/oberon/Ch1.Mod @@ -0,0 +1,33 @@ +MODULE Ch1; + + IMPORT Out; + + VAR + A1,A2:ARRAY 6 OF LONGINT; + + PROCEDURE Init; + BEGIN + A1[0] := 0; A1[1] := 1; A1[2] := 4; A1[3] := 6; A1[4] := 7; A1[5] := 10; + A2[0] := 4; A2[1] := 5; A2[2] := 6; A2[3] := 7; A2[4] := 8; A2[5] := 9; + END Init; + + PROCEDURE ArithmeticTriplets(VAR arr:ARRAY OF LONGINT;diff:LONGINT):LONGINT; + VAR i,j,k,count:LONGINT; + BEGIN + count := 0; + FOR i := 0 TO LEN(arr)-1 DO + FOR j := i+1 TO LEN(arr)-1 DO + FOR k := j+1 TO LEN(arr)-1 DO + IF (arr[j] - arr[i] = diff) & (arr[k] - arr[j] = diff) THEN INC(count) END + END + END + END; + RETURN count + END ArithmeticTriplets; + +BEGIN + Init; + Out.Int(ArithmeticTriplets(A1,3),0); Out.Ln; + Out.Int(ArithmeticTriplets(A2,2),0); Out.Ln; +END Ch1. + diff --git a/challenge-241/deadmarshal/oberon/Ch2.Mod b/challenge-241/deadmarshal/oberon/Ch2.Mod new file mode 100644 index 0000000000..34b1e1d03a --- /dev/null +++ b/challenge-241/deadmarshal/oberon/Ch2.Mod @@ -0,0 +1,67 @@ +MODULE Ch2; + + IMPORT Out; + + TYPE + TProc = PROCEDURE(a,b:LONGINT):LONGINT; + + VAR + A1:ARRAY 4 OF LONGINT; + + PROCEDURE Init; + BEGIN + A1[0] := 11; A1[1] := 8; A1[2] := 27; A1[3] := 4; + END Init; + + PROCEDURE QuickSort(VAR arr:ARRAY OF LONGINT;left,right:LONGINT;comp:TProc); + VAR i,j,pivot,temp:LONGINT; + BEGIN + i := left; j := right; + pivot := arr[(left + right) DIV 2]; + REPEAT + WHILE comp(pivot,arr[i]) > 0 DO INC(i) END; + WHILE comp(pivot,arr[j]) < 0 DO DEC(j) END; + IF i <= j THEN + temp := arr[i]; arr[i] := arr[j]; arr[j] := temp; + INC(i); DEC(j); + END; + UNTIL i > j; + IF left < j THEN QuickSort(arr,left,j,comp) END; + IF i < right THEN QuickSort(arr,i,right,comp) END; + END QuickSort; + + PROCEDURE CountFactors(n:LONGINT):LONGINT; + VAR c,count:LONGINT; + BEGIN + count := 0; c := 2; + WHILE n > 1 DO + IF n MOD c = 0 THEN n := n DIV c; INC(count) ELSE INC(c) END + END; + RETURN count + END CountFactors; + + PROCEDURE compare(a,b:LONGINT):LONGINT; + VAR fa,fb:LONGINT; + BEGIN + fa := CountFactors(a); + fb := CountFactors(b); + IF fa - fb = 0 THEN RETURN a - b ELSE RETURN fa - fb END + END compare; + + PROCEDURE PrimeOrder(VAR arr:ARRAY OF LONGINT); + BEGIN + QuickSort(arr,0,LEN(arr)-1,compare); + END PrimeOrder; + + PROCEDURE PrintArray(VAR arr:ARRAY OF LONGINT); + VAR i:LONGINT; + BEGIN + FOR i := 0 TO LEN(arr)-1 DO Out.Int(arr[i],0); Out.Char(' ') END; Out.Ln + END PrintArray; + +BEGIN + Init; + PrimeOrder(A1); + PrintArray(A1); +END Ch2. + diff --git a/challenge-241/deadmarshal/pascal/ch1.pas b/challenge-241/deadmarshal/pascal/ch1.pas new file mode 100644 index 0000000000..d3b3b53761 --- /dev/null +++ b/challenge-241/deadmarshal/pascal/ch1.pas @@ -0,0 +1,28 @@ +program Ch1; + +{$mode objfpc} +uses + SysUtils,Types; + +var + A1,A2:TIntegerDynArray; + +function ArithmeticTriplets(var Arr:TIntegerDynArray; + Diff:Integer):Integer; +var I,J,K:Integer; +begin + Result := 0; + for I := Low(Arr) to High(Arr) do + for J := I+1 to High(Arr) do + for K := J+1 to High(Arr) do + if (Arr[J] - Arr[I] = Diff) and (Arr[K] - Arr[J] = Diff) then + Inc(Result); +end; + +begin + A1 := [0,1,4,6,7,10]; + A2 := [4,5,6,7,8,9]; + WriteLn(ArithmeticTriplets(A1,3)); + WriteLn(ArithmeticTriplets(A2,2)); +end. + diff --git a/challenge-241/deadmarshal/pascal/ch2.pas b/challenge-241/deadmarshal/pascal/ch2.pas new file mode 100644 index 0000000000..9968533862 --- /dev/null +++ b/challenge-241/deadmarshal/pascal/ch2.pas @@ -0,0 +1,70 @@ +program Ch2; + +{$mode objfpc} +uses + SysUtils,Types; + +type + TProc = function(A,B:Integer):Integer; + +var + I:Integer; + A1:TIntegerDynArray; + +procedure QuickSort(var A:TIntegerDynArray; + Left,Right:Integer; + Comp:TProc); +var + I,J:Integer; + Pivot,Temp:Integer; +begin + I := Left; + J := Right; + Pivot := A[(Left + Right) div 2]; + repeat + while Comp(Pivot,A[I]) > 0 do Inc(I); + while Comp(Pivot,A[J]) < 0 do Dec(J); + if I <= J then + begin + Temp := A[I]; + A[I] := A[J]; + A[J] := Temp; + Inc(I); + Dec(J); + end; + until I > J; + if Left < J then QuickSort(A,Left,J,Comp); + if I < Right then QuickSort(A,I,Right,Comp); +end; + +function CountFactors(N:Integer):Integer; +var C:Integer = 2; +begin + Result := 0; + while N > 1 do + begin + if N mod C = 0 then begin N := N div C; Inc(Result) end + else Inc(C) + end; +end; + +function Compare(A,B:Integer):Integer; +var Fa,Fb:Integer; +begin + Fa := CountFactors(A); + Fb := CountFactors(B); + if Fa - Fb = 0 then Result := A - B else Result := Fa - Fb; +end; + +procedure PrimeOrder(var Arr:TIntegerDynArray); +begin + QuickSort(Arr,Low(Arr),High(Arr),@Compare); +end; + +begin + A1 := [11,8,27,4]; + PrimeOrder(A1); + for I := Low(A1) to High(A1) do Write(A1[I],' '); + WriteLn +end. + diff --git a/challenge-241/deadmarshal/perl/ch-1.pl b/challenge-241/deadmarshal/perl/ch-1.pl new file mode 100644 index 0000000000..aae921ba67 --- /dev/null +++ b/challenge-241/deadmarshal/perl/ch-1.pl @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Algorithm::Combinatorics qw(combinations); + +sub arithmetic_triplets{ + my $count = 0; + my $iter = combinations($_[0],3); + while(my $c = $iter->next){ + $count++ if($c->[1] - $c->[0]) == $_[1] == ($c->[2] - $c->[1]); + } + $count +} + +printf "%d\n", arithmetic_triplets([0,1,4,6,7,10],3); +printf "%d\n", arithmetic_triplets([4,5,6,7,8,9],2); + diff --git a/challenge-241/deadmarshal/perl/ch-2.pl b/challenge-241/deadmarshal/perl/ch-2.pl new file mode 100644 index 0000000000..3268747738 --- /dev/null +++ b/challenge-241/deadmarshal/perl/ch-2.pl @@ -0,0 +1,11 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use ntheory qw(factor); + +sub prime_order{ + sort{factor($a) <=> factor($b) || $a <=> $b} @{$_[0]}; +} + +printf "(%s)\n", join ',',prime_order([11,8,27,4]); + diff --git a/challenge-241/deadmarshal/raku/ch-1.raku b/challenge-241/deadmarshal/raku/ch-1.raku new file mode 100644 index 0000000000..2e1fa754c4 --- /dev/null +++ b/challenge-241/deadmarshal/raku/ch-1.raku @@ -0,0 +1,15 @@ +#!/usr/bin/env raku + +sub arithmetic-triplets(@arr,$diff) +{ + my $count = 0; + for @arr.combinations(3) + { + $count++ if $_[1] - $_[0] == $diff == $_[2] - $_[1] + } + $count +} + +say arithmetic-triplets([0,1,4,6,7,10],3); +say arithmetic-triplets([4,5,6,7,8,9],2); + diff --git a/challenge-241/deadmarshal/raku/ch-2.raku b/challenge-241/deadmarshal/raku/ch-2.raku new file mode 100644 index 0000000000..2ce81027eb --- /dev/null +++ b/challenge-241/deadmarshal/raku/ch-2.raku @@ -0,0 +1,12 @@ +#!/usr/bin/env raku +use Prime::Factor; + +sub prime-order(@arr) +{ + @arr.sort: {my $fa = prime-factors($^a).elems; + my $fb = prime-factors($^b).elems; + $fa == $fb ?? $^a <=> $^b !! $fa <=> $fb} +} + +say prime-order([11,8,27,4]); + |
