diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-05-28 10:40:04 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-28 10:40:04 +0100 |
| commit | 9d9ab993cf4822e4c5210eae0552cec775c48ef5 (patch) | |
| tree | 6b55e2cfa652535ce8246a9874bb87ce01ac5245 | |
| parent | e6ae176ee1951c5871249e0e0c4f1a6f6e5d95af (diff) | |
| parent | a41401173d5365ab6bd76f07bbcd81c3198301a4 (diff) | |
| download | perlweeklychallenge-club-9d9ab993cf4822e4c5210eae0552cec775c48ef5.tar.gz perlweeklychallenge-club-9d9ab993cf4822e4c5210eae0552cec775c48ef5.tar.bz2 perlweeklychallenge-club-9d9ab993cf4822e4c5210eae0552cec775c48ef5.zip | |
Merge pull request #10173 from deadmarshal/TWC271
TWC271
| -rw-r--r-- | challenge-271/deadmarshal/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/lua/ch-1.lua | 23 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/lua/ch-2.lua | 32 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/modula-3/ch1/src/Ch1.m3 | 38 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/modula-3/ch1/src/m3makefile | 5 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/modula-3/ch2/src/Ch2.m3 | 50 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.i3 | 2 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.m3 | 2 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/modula-3/ch2/src/Sorting.ig | 10 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/modula-3/ch2/src/Sorting.mg | 33 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/modula-3/ch2/src/m3makefile | 9 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/perl/ch-1.pl | 15 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/perl/ch-2.pl | 13 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/raku/ch-1.raku | 16 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/raku/ch-2.raku | 15 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/ruby/ch1.rb | 12 | ||||
| -rw-r--r-- | challenge-271/deadmarshal/ruby/ch2.rb | 13 |
17 files changed, 289 insertions, 0 deletions
diff --git a/challenge-271/deadmarshal/blog.txt b/challenge-271/deadmarshal/blog.txt new file mode 100644 index 0000000000..bab013fdfb --- /dev/null +++ b/challenge-271/deadmarshal/blog.txt @@ -0,0 +1 @@ +https://deadmarshal.blogspot.com/2024/05/twc271.html diff --git a/challenge-271/deadmarshal/lua/ch-1.lua b/challenge-271/deadmarshal/lua/ch-1.lua new file mode 100644 index 0000000000..159d148473 --- /dev/null +++ b/challenge-271/deadmarshal/lua/ch-1.lua @@ -0,0 +1,23 @@ +#!/usr/bin/env lua + +local function sum(t) + assert(type(t) == 'table','t must be a table!') + local s = 0 + for i=1,#t do s = s + t[i] end + return s +end + +local function maximum_ones(t) + assert(type(t) == 'table','t must be a table!') + local max = 0 + for i=1,#t do + local s = sum(t[i]) + if s > max then max = s end + end + return max +end + +print(maximum_ones{{0,1},{1,0}}) +print(maximum_ones{{0,0,0},{1,0,1}}) +print(maximum_ones{{0,0},{1,1},{0,0}}) + diff --git a/challenge-271/deadmarshal/lua/ch-2.lua b/challenge-271/deadmarshal/lua/ch-2.lua new file mode 100644 index 0000000000..ee051c1084 --- /dev/null +++ b/challenge-271/deadmarshal/lua/ch-2.lua @@ -0,0 +1,32 @@ +#!/usr/bin/env lua + +local function decimal_to_binary(n) + assert(type(n) == 'number','n must be a number!') + local bin = "" + while n > 0 do + bin = (n % 2) .. bin + n = n // 2 + end + return bin +end + +local function pop_count(n) + assert(type(n) == 'number','n must be a number!') + local bin, count = decimal_to_binary(n),0 + for pos=1,#bin do + if bin:sub(pos,pos) == "1" then count = count + 1 end + end + return count +end + +local function sort_by_one_bits(t) + assert(type(t) == 'table','t must be a table!') + table.sort(t,function(a,b) + local pa,pb = pop_count(a),pop_count(b) + return pa == pb and a < b or pa < pb end) + return t +end + +print(table.unpack(sort_by_one_bits{0,1,2,3,4,5,6,7,8})) +print(table.unpack(sort_by_one_bits{1024,512,256,128,64})) + diff --git a/challenge-271/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-271/deadmarshal/modula-3/ch1/src/Ch1.m3 new file mode 100644 index 0000000000..0a143d0948 --- /dev/null +++ b/challenge-271/deadmarshal/modula-3/ch1/src/Ch1.m3 @@ -0,0 +1,38 @@ +MODULE Ch1 EXPORTS Main; + +IMPORT SIO; + +VAR + A1:ARRAY[0..1],[0..1] OF CARDINAL := ARRAY[0..1],[0..1] OF CARDINAL{ + ARRAY[0..1] OF CARDINAL{0,1}, + ARRAY[0..1] OF CARDINAL{1,0}}; + A2:ARRAY[0..1],[0..2] OF CARDINAL := ARRAY[0..1],[0..2] OF CARDINAL{ + ARRAY[0..2] OF CARDINAL{0,..}, + ARRAY[0..2] OF CARDINAL{1,0,1}}; + A3:ARRAY[0..2],[0..1] OF CARDINAL := ARRAY[0..2],[0..1] OF CARDINAL{ + ARRAY[0..1] OF CARDINAL{0,..}, + ARRAY[0..1] OF CARDINAL{1,1}, + ARRAY[0..1] OF CARDINAL{0,..}}; + +PROCEDURE MaximumOnes(VAR A:ARRAY OF ARRAY OF CARDINAL):CARDINAL = + VAR Max,Count:CARDINAL := 0; + PROCEDURE ArraySum(VAR A:ARRAY OF CARDINAL):CARDINAL = + VAR Sum:CARDINAL := 0; + BEGIN + FOR I := FIRST(A) TO LAST(A) DO INC(Sum,A[I]) END; + RETURN Sum + END ArraySum; + BEGIN + FOR I := FIRST(A) TO LAST(A) DO + Count := ArraySum(A[I]); + IF Count > Max THEN Max := I+1 END + END; + RETURN Max + END MaximumOnes; + +BEGIN + SIO.PutInt(MaximumOnes(A1)); SIO.Nl(); + SIO.PutInt(MaximumOnes(A2)); SIO.Nl(); + SIO.PutInt(MaximumOnes(A3)); SIO.Nl(); +END Ch1. + diff --git a/challenge-271/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-271/deadmarshal/modula-3/ch1/src/m3makefile new file mode 100644 index 0000000000..9f66e4a51f --- /dev/null +++ b/challenge-271/deadmarshal/modula-3/ch1/src/m3makefile @@ -0,0 +1,5 @@ +import("libm3") +import("libsio") +implementation("Ch1") +program("ch1") + diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-271/deadmarshal/modula-3/ch2/src/Ch2.m3 new file mode 100644 index 0000000000..6828b5d647 --- /dev/null +++ b/challenge-271/deadmarshal/modula-3/ch2/src/Ch2.m3 @@ -0,0 +1,50 @@ +MODULE Ch2 EXPORTS Main; + +IMPORT SIO,Fmt,Text,Integer,IntSorting; + +VAR + A1:ARRAY[0..8] OF INTEGER := ARRAY[0..8] OF INTEGER{0,1,2,3,4,5,6,7,8}; + A2:ARRAY[0..4] OF INTEGER := ARRAY[0..4] OF INTEGER{1024,512,256,128,64}; + +PROCEDURE PopCount(READONLY N:INTEGER):INTEGER = + VAR + Temp:TEXT := Fmt.Int(N,2); + Count:INTEGER := 0; + BEGIN + FOR I := 0 TO Text.Length(Temp)-1 DO + IF Text.GetChar(Temp,I) = '1' THEN INC(Count) END + END; + RETURN Count + END PopCount; + +PROCEDURE Compare(READONLY a,b:INTEGER):[-1..1] = + VAR + Pa,Pb:INTEGER; + BEGIN + Pa := PopCount(a); + Pb := PopCount(b); + IF Pa = Pb THEN RETURN Integer.Compare(a,b) END; + RETURN Integer.Compare(Pa,Pb); + END Compare; + +PROCEDURE SortByBits(VAR A:ARRAY OF INTEGER) = + BEGIN + IntSorting.QuickSort(A,FIRST(A),LAST(A),Compare) + END SortByBits; + +PROCEDURE PrintArray(VAR A:ARRAY OF INTEGER) = + BEGIN + FOR I := FIRST(A) TO LAST(A) DO + SIO.PutInt(A[I]); + SIO.PutChar(' ') + END; + SIO.Nl() + END PrintArray; + +BEGIN + SortByBits(A1); + SortByBits(A2); + PrintArray(A1); + PrintArray(A2) +END Ch2. + diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.i3 b/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.i3 new file mode 100644 index 0000000000..4f2c039f64 --- /dev/null +++ b/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.i3 @@ -0,0 +1,2 @@ +INTERFACE IntSorting = Sorting(Integer) END IntSorting. + diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.m3 b/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.m3 new file mode 100644 index 0000000000..1d70cff8ee --- /dev/null +++ b/challenge-271/deadmarshal/modula-3/ch2/src/IntSorting.m3 @@ -0,0 +1,2 @@ +MODULE IntSorting = Sorting(Integer) END IntSorting. + diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.ig b/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.ig new file mode 100644 index 0000000000..a33044f351 --- /dev/null +++ b/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.ig @@ -0,0 +1,10 @@ +GENERIC INTERFACE Sorting(Elem); + +TYPE + CompareProc = PROCEDURE(READONLY a,b:Elem.T):[-1..1]; + +PROCEDURE QuickSort(VAR A:ARRAY OF Elem.T; + READONLY Left,Right:INTEGER; + Proc:CompareProc); + +END Sorting. diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.mg b/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.mg new file mode 100644 index 0000000000..36904491d0 --- /dev/null +++ b/challenge-271/deadmarshal/modula-3/ch2/src/Sorting.mg @@ -0,0 +1,33 @@ +GENERIC MODULE Sorting(Elem); + +PROCEDURE Swap(VAR A,B:Elem.T) = + VAR Temp:Elem.T := A; + BEGIN + A := B; + B := Temp + END Swap; + +PROCEDURE QuickSort(VAR A:ARRAY OF Elem.T; + READONLY Left,Right:INTEGER; + Proc:CompareProc) = + VAR + I,J:INTEGER; + Pivot:Elem.T; + BEGIN + I := Left; J := Right; + Pivot := A[(Left+Right) DIV 2]; + REPEAT + WHILE Proc(Pivot,A[I]) > 0 DO INC(I) END; + WHILE Proc(Pivot,A[J]) < 0 DO DEC(J) END; + IF I <= J THEN + Swap(A[I],A[J]); + INC(I); DEC(J) + END; + UNTIL I > J; + IF Left < J THEN QuickSort(A,Left,J,Proc) END; + IF I < Right THEN QuickSort(A,I,Right,Proc) END + END QuickSort; + +BEGIN +END Sorting. + diff --git a/challenge-271/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-271/deadmarshal/modula-3/ch2/src/m3makefile new file mode 100644 index 0000000000..964269577a --- /dev/null +++ b/challenge-271/deadmarshal/modula-3/ch2/src/m3makefile @@ -0,0 +1,9 @@ +import("libm3") +import("libsio") + +module("IntSorting") +generic_module("Sorting") + +implementation("Ch2") +program("ch2") + diff --git a/challenge-271/deadmarshal/perl/ch-1.pl b/challenge-271/deadmarshal/perl/ch-1.pl new file mode 100644 index 0000000000..6871dc816d --- /dev/null +++ b/challenge-271/deadmarshal/perl/ch-1.pl @@ -0,0 +1,15 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use List::Util qw(sum0); + +sub maximum_ones{ + my $max = 0; + map{my $c = sum0 @{$_[0]->[$_]}; $max = $_+1 if $c > $max} 0..$#{$_[0]}; + $max +} + +printf "%d\n",maximum_ones([[0,1],[1,0]]); +printf "%d\n",maximum_ones([[0,0,0],[1,0,1]]); +printf "%d\n",maximum_ones([[0,0],[1,1],[0,0]]); + diff --git a/challenge-271/deadmarshal/perl/ch-2.pl b/challenge-271/deadmarshal/perl/ch-2.pl new file mode 100644 index 0000000000..00ac2b5976 --- /dev/null +++ b/challenge-271/deadmarshal/perl/ch-2.pl @@ -0,0 +1,13 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use ntheory qw(hammingweight); +use Data::Show; + +sub sort_by_one_bits{ + sort{hammingweight($a) <=> hammingweight($b) || $a <=> $b} @{$_[0]} +} + +print show sort_by_one_bits([0,1,2,3,4,5,6,7,8]); +print show sort_by_one_bits([1024,512,256,128,64]); + diff --git a/challenge-271/deadmarshal/raku/ch-1.raku b/challenge-271/deadmarshal/raku/ch-1.raku new file mode 100644 index 0000000000..338b796f1b --- /dev/null +++ b/challenge-271/deadmarshal/raku/ch-1.raku @@ -0,0 +1,16 @@ +#!/usr/bin/env raku + +sub maximum-ones(@arr) +{ + my $max = 0; + for 0..@arr.end -> $i { + my $c = @arr[$i].sum; + $max = $i+1 if $c > $max + } + $max +} + +say maximum-ones([[0,1],[1,0]]); +say maximum-ones([[0,0,0],[1,0,1]]); +say maximum-ones([[0,0],[1,1],[0,0]]); + diff --git a/challenge-271/deadmarshal/raku/ch-2.raku b/challenge-271/deadmarshal/raku/ch-2.raku new file mode 100644 index 0000000000..c3493f8477 --- /dev/null +++ b/challenge-271/deadmarshal/raku/ch-2.raku @@ -0,0 +1,15 @@ +#!/usr/bin/env raku + +sub population-count(Int $n where * >= 0) +{ + [+] $n.base(2).comb +} + +sub sort-by-one-bits(@arr) +{ + @arr.sort: {population-count($^a) <=> population-count($^b) || $^a <=> $^b} +} + +say sort-by-one-bits([0,1,2,3,4,5,6,7,8]); +say sort-by-one-bits([1024,512,256,128,64]); + diff --git a/challenge-271/deadmarshal/ruby/ch1.rb b/challenge-271/deadmarshal/ruby/ch1.rb new file mode 100644 index 0000000000..5e63fda639 --- /dev/null +++ b/challenge-271/deadmarshal/ruby/ch1.rb @@ -0,0 +1,12 @@ +#!/usr/bin/env ruby + +def maximum_ones(arr) + max = 0 + arr.each_with_index {|e,i| max = i+1 if e.sum > max} + max +end + +p maximum_ones([[0,1],[1,0]]) +p maximum_ones([[0,0,0],[1,0,1]]) +p maximum_ones([[0,0],[1,1],[0,0]]) + diff --git a/challenge-271/deadmarshal/ruby/ch2.rb b/challenge-271/deadmarshal/ruby/ch2.rb new file mode 100644 index 0000000000..ce9b5f0658 --- /dev/null +++ b/challenge-271/deadmarshal/ruby/ch2.rb @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby + +def sort_by_one_bits(arr) + arr.sort do |a,b| + pa = a.digits(2).count(1) + pb = b.digits(2).count(1) + pa == pb ? a <=> b : pa <=> pb + end +end + +p sort_by_one_bits([0,1,2,3,4,5,6,7,8]) +p sort_by_one_bits([1024,512,256,128,64]) + |
