diff options
| author | deadmarshal <adeadmarshal@gmail.com> | 2024-05-17 02:01:27 -0400 |
|---|---|---|
| committer | deadmarshal <adeadmarshal@gmail.com> | 2024-05-17 02:01:27 -0400 |
| commit | 974e4b99fbb075faaf1847a5fb8c29f7f4f37609 (patch) | |
| tree | 1b062949ccaf6df9c443d57608ef018e03db8bb4 | |
| parent | 71c7bc98dd417eea21d8d731b35edb89bdd153f9 (diff) | |
| download | perlweeklychallenge-club-974e4b99fbb075faaf1847a5fb8c29f7f4f37609.tar.gz perlweeklychallenge-club-974e4b99fbb075faaf1847a5fb8c29f7f4f37609.tar.bz2 perlweeklychallenge-club-974e4b99fbb075faaf1847a5fb8c29f7f4f37609.zip | |
TWC269
| -rw-r--r-- | challenge-269/deadmarshal/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/go/ch1.go | 24 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/go/ch2.go | 32 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/java/Ch1.java | 18 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/java/Ch2.java | 35 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/modula-3/ch1/src/Ch1.m3 | 25 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/modula-3/ch1/src/m3makefile | 5 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/modula-3/ch2/src/Ch2.m3 | 50 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/modula-3/ch2/src/m3makefile | 5 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/perl/ch-1.pl | 12 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/perl/ch-2.pl | 19 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/raku/ch-1.raku | 11 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/raku/ch-2.raku | 17 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/ruby/ch1.rb | 10 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/ruby/ch2.rb | 16 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/sml/ch1.sml | 8 | ||||
| -rw-r--r-- | challenge-269/deadmarshal/sml/ch2.sml | 24 |
17 files changed, 312 insertions, 0 deletions
diff --git a/challenge-269/deadmarshal/blog.txt b/challenge-269/deadmarshal/blog.txt new file mode 100644 index 0000000000..f3c076199d --- /dev/null +++ b/challenge-269/deadmarshal/blog.txt @@ -0,0 +1 @@ +https://deadmarshal.blogspot.com/2024/05/twc269.html diff --git a/challenge-269/deadmarshal/go/ch1.go b/challenge-269/deadmarshal/go/ch1.go new file mode 100644 index 0000000000..6db906549a --- /dev/null +++ b/challenge-269/deadmarshal/go/ch1.go @@ -0,0 +1,24 @@ +package main + +import ( + "fmt" +) + +func bitwiseOr(arr []int) bool { + count := 0 + for _, v := range arr { + if v%2 == 0 { + count++ + } + if count > 1 { + return true + } + } + return false +} + +func main() { + fmt.Println(bitwiseOr([]int{1, 2, 3, 4, 5})) + fmt.Println(bitwiseOr([]int{2, 3, 8, 16})) + fmt.Println(bitwiseOr([]int{1, 2, 5, 7, 9})) +} diff --git a/challenge-269/deadmarshal/go/ch2.go b/challenge-269/deadmarshal/go/ch2.go new file mode 100644 index 0000000000..ee574a0d3d --- /dev/null +++ b/challenge-269/deadmarshal/go/ch2.go @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" + "slices" +) + +func distributeElements(arr []int) []int { + ret1 := []int{arr[0]} + arr = slices.Delete(arr, 0, 1) + ret2 := []int{arr[0]} + arr = slices.Delete(arr, 0, 1) + for len(arr) != 0 { + e := arr[0] + arr = slices.Delete(arr,0,1) + if ret1[len(ret1)-1] > ret2[len(ret2)-1] { + ret1 = append(ret1,e) + continue + } + ret2 = append(ret2,e) + } + return slices.Concat(nil,ret1,ret2) +} + +func main() { + arr1 := []int{2, 1, 3, 4, 5} + arr2 := []int{3, 2, 4} + arr3 := []int{5, 4, 3, 8} + fmt.Println(distributeElements(arr1)) + fmt.Println(distributeElements(arr2)) + fmt.Println(distributeElements(arr3)) +} diff --git a/challenge-269/deadmarshal/java/Ch1.java b/challenge-269/deadmarshal/java/Ch1.java new file mode 100644 index 0000000000..732e99ca7e --- /dev/null +++ b/challenge-269/deadmarshal/java/Ch1.java @@ -0,0 +1,18 @@ +import java.util.ArrayList; +import java.util.List; + +public class Ch1 { + public static void main(String[] args) { + List<Integer> list1 = new ArrayList<>(List.of(1, 2, 3, 4, 5)); + List<Integer> list2 = new ArrayList<>(List.of(2, 3, 8, 16)); + List<Integer> list3 = new ArrayList<>(List.of(1, 2, 5, 7, 9)); + System.out.println(bitwise_or(list1)); + System.out.println(bitwise_or(list2)); + System.out.println(bitwise_or(list3)); + } + + private static boolean bitwise_or(List<Integer> list) { + return (list.stream().filter(e -> (e % 2) == 0).count() > 1); + } +} + diff --git a/challenge-269/deadmarshal/java/Ch2.java b/challenge-269/deadmarshal/java/Ch2.java new file mode 100644 index 0000000000..910f357eab --- /dev/null +++ b/challenge-269/deadmarshal/java/Ch2.java @@ -0,0 +1,35 @@ +import java.util.ArrayList; +import java.util.List; + +public class Ch2 { + public static void main(String[] args) { + List<Integer> list1 = new ArrayList<>(List.of(2, 1, 3, 4, 5)); + List<Integer> list2 = new ArrayList<>(List.of(3, 2, 4)); + List<Integer> list3 = new ArrayList<>(List.of(5, 4, 3, 8)); + try { + System.out.println(distribute_elements(list1)); + System.out.println(distribute_elements(list2)); + System.out.println(distribute_elements(list3)); + } catch (NotEnoughElements e) { + System.err.println(e.getMessage()); + } + } + + private static List<Integer> distribute_elements(List<Integer> list) + throws NotEnoughElements { + if (list.size() < 2) throw new NotEnoughElements(); + List<Integer> ret1 = new ArrayList<>(List.of(list.removeFirst())); + List<Integer> ret2 = new ArrayList<>(List.of(list.removeFirst())); + while (!list.isEmpty()) { + int e = list.removeFirst(); + if (ret1.getLast() > ret2.getLast()) ret1.add(e); + else ret2.add(e); + } + ret1.addAll(ret2); + return ret1; + } + + private static class NotEnoughElements extends Exception { + } +} + diff --git a/challenge-269/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-269/deadmarshal/modula-3/ch1/src/Ch1.m3 new file mode 100644 index 0000000000..9127acdeb9 --- /dev/null +++ b/challenge-269/deadmarshal/modula-3/ch1/src/Ch1.m3 @@ -0,0 +1,25 @@ +MODULE Ch1 EXPORTS Main; + +IMPORT SIO; + +VAR + A1:ARRAY[0..4] OF CARDINAL := ARRAY OF CARDINAL{1,2,3,4,5}; + A2:ARRAY[0..3] OF CARDINAL := ARRAY OF CARDINAL{2,3,8,16}; + A3:ARRAY[0..4] OF CARDINAL := ARRAY OF CARDINAL{1,2,5,7,9}; + +PROCEDURE BitwiseOr(VAR A:ARRAY OF CARDINAL):BOOLEAN = + VAR Count:CARDINAL; + BEGIN + FOR I := FIRST(A) TO LAST(A) DO + IF A[I] MOD 2 = 0 THEN INC(Count) END; + IF Count > 1 THEN RETURN TRUE END + END; + RETURN FALSE + END BitwiseOr; + +BEGIN + SIO.PutBool(BitwiseOr(A1)); SIO.Nl(); + SIO.PutBool(BitwiseOr(A2)); SIO.Nl(); + SIO.PutBool(BitwiseOr(A3)); SIO.Nl() +END Ch1. + diff --git a/challenge-269/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-269/deadmarshal/modula-3/ch1/src/m3makefile new file mode 100644 index 0000000000..9f66e4a51f --- /dev/null +++ b/challenge-269/deadmarshal/modula-3/ch1/src/m3makefile @@ -0,0 +1,5 @@ +import("libm3") +import("libsio") +implementation("Ch1") +program("ch1") + diff --git a/challenge-269/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-269/deadmarshal/modula-3/ch2/src/Ch2.m3 new file mode 100644 index 0000000000..b785695583 --- /dev/null +++ b/challenge-269/deadmarshal/modula-3/ch2/src/Ch2.m3 @@ -0,0 +1,50 @@ +MODULE Ch2 EXPORTS Main; + +IMPORT SIO,IntSeq,Stdio; + +EXCEPTION NotEnoughElements; + +VAR + A1:ARRAY[0..4] OF CARDINAL := ARRAY OF CARDINAL{2,1,3,4,5}; + A2:ARRAY[0..2] OF CARDINAL := ARRAY OF CARDINAL{3,2,4}; + A3:ARRAY[0..3] OF CARDINAL := ARRAY OF CARDINAL{5,4,3,8}; + +PROCEDURE DistributeElements(VAR A:ARRAY OF CARDINAL):IntSeq.T + RAISES{NotEnoughElements} = + VAR + I:INTEGER := FIRST(A)+2; + Ret1,Ret2:IntSeq.T := NEW(IntSeq.T).init(); + BEGIN + IF NUMBER(A) < 2 THEN RAISE NotEnoughElements END; + Ret1.addhi(A[FIRST(A)]); + Ret2.addhi(A[FIRST(A)+1]); + WHILE(I # NUMBER(A)) DO + IF Ret1.gethi() > Ret2.gethi() THEN Ret1.addhi(A[I]) + ELSE Ret2.addhi(A[I]) + END; + INC(I) + END; + RETURN IntSeq.Cat(Ret1,Ret2) + END DistributeElements; + +PROCEDURE PrintSequence(READONLY Seq:IntSeq.T) = + BEGIN + FOR I := 0 TO Seq.size()-1 DO + SIO.PutInt(Seq.get(I)); + SIO.PutChar(' ') + END; + SIO.Nl() + END PrintSequence; + +BEGIN + TRY + PrintSequence(DistributeElements(A1)); + PrintSequence(DistributeElements(A2)); + PrintSequence(DistributeElements(A3)); + EXCEPT + NotEnoughElements => + SIO.PutText("Not enough elements in array!\n",Stdio.stderr) + ELSE SIO.PutText("Some other exception occurred!\n",Stdio.stderr) + END; +END Ch2. + diff --git a/challenge-269/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-269/deadmarshal/modula-3/ch2/src/m3makefile new file mode 100644 index 0000000000..798c627ef3 --- /dev/null +++ b/challenge-269/deadmarshal/modula-3/ch2/src/m3makefile @@ -0,0 +1,5 @@ +import("libm3") +import("libsio") +implementation("Ch2") +program("ch2") + diff --git a/challenge-269/deadmarshal/perl/ch-1.pl b/challenge-269/deadmarshal/perl/ch-1.pl new file mode 100644 index 0000000000..32e0142031 --- /dev/null +++ b/challenge-269/deadmarshal/perl/ch-1.pl @@ -0,0 +1,12 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +sub bitwise_or{ + (grep{($_ & 1) == 0} @{$_[0]}) > 1 +} + +printf "%d\n",bitwise_or([1,2,3,4,5]); +printf "%d\n",bitwise_or([2,3,8,16]); +printf "%d\n",bitwise_or([1,2,5,7,9]); + diff --git a/challenge-269/deadmarshal/perl/ch-2.pl b/challenge-269/deadmarshal/perl/ch-2.pl new file mode 100644 index 0000000000..132b2f6dea --- /dev/null +++ b/challenge-269/deadmarshal/perl/ch-2.pl @@ -0,0 +1,19 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Data::Show; + +sub distribute_elements{ + my @ret1 = shift @{$_[0]}; + my @ret2 = shift @{$_[0]}; + while(@{$_[0]}){ + my $e = shift @{$_[0]}; + $ret1[-1] > $ret2[-1] ? push @ret1,$e : push @ret2,$e; + } + @ret1,@ret2 +} + +print show distribute_elements([2,1,3,4,5]); +print show distribute_elements([3,2,4]); +print show distribute_elements([5,4,3,8]); + diff --git a/challenge-269/deadmarshal/raku/ch-1.raku b/challenge-269/deadmarshal/raku/ch-1.raku new file mode 100644 index 0000000000..236357a537 --- /dev/null +++ b/challenge-269/deadmarshal/raku/ch-1.raku @@ -0,0 +1,11 @@ +#!/usr/bin/env raku + +sub bitwise-or(@arr) +{ + (@arr.grep: {$_ +& 1 == 0}) > 1; +} + +say bitwise-or([1,2,3,4,5]); +say bitwise-or([2,3,8,16]); +say bitwise-or([1,2,5,7,9]); + diff --git a/challenge-269/deadmarshal/raku/ch-2.raku b/challenge-269/deadmarshal/raku/ch-2.raku new file mode 100644 index 0000000000..62aa809585 --- /dev/null +++ b/challenge-269/deadmarshal/raku/ch-2.raku @@ -0,0 +1,17 @@ +#!/usr/bin/env raku + +sub distribute-elements(@arr) +{ + my @ret1 = @arr.shift; + my @ret2 = @arr.shift; + while @arr { + my $e = @arr.shift; + @ret1[*-1] > @ret2[*-1] ?? @ret1.push($e) !! @ret2.push($e) + } + (@ret1,@ret2).flat +} + +say distribute-elements([2,1,3,4,5]); +say distribute-elements([3,2,4]); +say distribute-elements([5,4,3,8]); + diff --git a/challenge-269/deadmarshal/ruby/ch1.rb b/challenge-269/deadmarshal/ruby/ch1.rb new file mode 100644 index 0000000000..1ad74be0c2 --- /dev/null +++ b/challenge-269/deadmarshal/ruby/ch1.rb @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + +def bitwise_or(arr) + arr.select{|e| e % 2 == 0}.size > 1 +end + +p bitwise_or([1,2,3,4,5]) +p bitwise_or([2,3,8,16]) +p bitwise_or([1,2,5,7,9]) + diff --git a/challenge-269/deadmarshal/ruby/ch2.rb b/challenge-269/deadmarshal/ruby/ch2.rb new file mode 100644 index 0000000000..cce3602c5f --- /dev/null +++ b/challenge-269/deadmarshal/ruby/ch2.rb @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby + +def distribute_elements(arr) + ret1 = [arr.shift()] + ret2 = [arr.shift()] + while arr.size() > 0 + e = arr.shift() + ret1[-1] > ret2[-1] ? ret1.push(e) : ret2.push(e) + end + ret1 + ret2 +end + +p distribute_elements([2,1,3,4,5]) +p distribute_elements([3,2,4]) +p distribute_elements([5,4,3,8]) + diff --git a/challenge-269/deadmarshal/sml/ch1.sml b/challenge-269/deadmarshal/sml/ch1.sml new file mode 100644 index 0000000000..5058571cce --- /dev/null +++ b/challenge-269/deadmarshal/sml/ch1.sml @@ -0,0 +1,8 @@ +fun bitwise_or lst = + List.length(List.filter(fn e => e mod 2 = 0) lst) > 1 + +val _ = + print(Bool.toString(bitwise_or([1,2,3,4,5])) ^ "\n"); + print(Bool.toString(bitwise_or([2,3,8,16])) ^ "\n"); + print(Bool.toString(bitwise_or([1,2,5,7,9])) ^ "\n"); + diff --git a/challenge-269/deadmarshal/sml/ch2.sml b/challenge-269/deadmarshal/sml/ch2.sml new file mode 100644 index 0000000000..9c7da522bb --- /dev/null +++ b/challenge-269/deadmarshal/sml/ch2.sml @@ -0,0 +1,24 @@ +fun distribute_elements lst = + let fun aux [] acc1 acc2 = acc1 @ acc2 + | aux (x::xs) acc1 acc2 = + if (List.hd(List.rev acc1)) > (List.hd(List.rev acc2)) + then aux xs (acc1 @ [x]) acc2 + else aux xs acc1 (acc2 @ [x]) + in + aux (List.tl (List.tl lst)) [List.hd lst] [List.hd(List.tl lst)] + end + +fun print_list(nil) = () + | print_list(x::xs) = ( + print(Int.toString(x)); + print(" "); + print_list(xs); + print("\n") + ); + +val _ = ( + print_list(distribute_elements([2,1,3,4,5])); + print_list(distribute_elements([3,2,4])); + print_list(distribute_elements([5,4,3,8])) +) + |
