aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarrOff <58253563+BarrOff@users.noreply.github.com>2023-02-26 23:51:47 +0100
committerBarrOff <58253563+BarrOff@users.noreply.github.com>2023-02-26 23:51:47 +0100
commitabfa55d38586a8c5b2a9e5a7358bd55052c2bb5a (patch)
tree4496272f28e7a8d59d12f65252124229bf29cd2a
parent20cf23de63b452a5cee63c7b10d842afbf09cfb2 (diff)
downloadperlweeklychallenge-club-abfa55d38586a8c5b2a9e5a7358bd55052c2bb5a.tar.gz
perlweeklychallenge-club-abfa55d38586a8c5b2a9e5a7358bd55052c2bb5a.tar.bz2
perlweeklychallenge-club-abfa55d38586a8c5b2a9e5a7358bd55052c2bb5a.zip
feat: add solutions for challenge 205 from BarrOff
-rw-r--r--challenge-205/barroff/perl/ch-1.pl27
-rw-r--r--challenge-205/barroff/raku/ch-1.raku29
-rw-r--r--challenge-205/barroff/raku/ch-2.raku25
3 files changed, 81 insertions, 0 deletions
diff --git a/challenge-205/barroff/perl/ch-1.pl b/challenge-205/barroff/perl/ch-1.pl
new file mode 100644
index 0000000000..bc016eaa30
--- /dev/null
+++ b/challenge-205/barroff/perl/ch-1.pl
@@ -0,0 +1,27 @@
+#!/usr/bin/env perl
+
+use v5.36;
+use strict;
+use warnings;
+
+use List::MoreUtils qw(uniq);
+
+sub third_highest_sorted (@list) {
+ scalar @list >= 3 ? $list[-3] : $list[-1];
+}
+
+sub third_highest (@list) {
+ my @sorted = sort( uniq(@list) );
+ third_highest_sorted @sorted;
+}
+
+sub MAIN() {
+ use Test::Simple tests => 3;
+ use Test::More import => [qw( is plan )];
+
+ is third_highest( 5, 3, 4 ), 3, 'works for (5, 3, 4)';
+ is third_highest( 5, 6 ), 6, 'works for (5, 6)';
+ is third_highest( 5, 4, 4, 3 ), 3, 'works for (5, 4, 4, 3)';
+}
+
+MAIN();
diff --git a/challenge-205/barroff/raku/ch-1.raku b/challenge-205/barroff/raku/ch-1.raku
new file mode 100644
index 0000000000..7e34636e8c
--- /dev/null
+++ b/challenge-205/barroff/raku/ch-1.raku
@@ -0,0 +1,29 @@
+#!/usr/bin/env raku
+
+use v6.d;
+
+sub third-highest(Int @list where @list.elems > 1 --> Int) {
+ my Int @sorted = @list.unique.sort;
+ @sorted.elems ≥ 3 ?? @sorted[* - 3] !! @sorted[* - 1];
+}
+
+#| Run test cases
+multi sub MAIN('test') {
+ use Test;
+ plan 3;
+
+ is third-highest(Array[Int].new([5, 3, 4])), 3, 'works for (5, 3, 4)';
+ is third-highest(Array[Int].new([5, 6])), 6, 'works for (5, 6)';
+ is third-highest(Array[Int].new([5, 4, 4, 3])), 3, 'works for (5, 4, 4, 3)';
+}
+
+#| Take user provided list like 1 2 2 3
+multi sub MAIN(*@elements where @elements.elems ≥ 1 && all(@elements) ~~ /^<[+-]>?<[0..9]>+$/) {
+ my Int @int_elements = @elements;
+ say third-highest(@int_elements);
+}
+
+#| Run test cases if no argument is supplied
+multi sub MAIN() {
+ MAIN('test');
+}
diff --git a/challenge-205/barroff/raku/ch-2.raku b/challenge-205/barroff/raku/ch-2.raku
new file mode 100644
index 0000000000..dce657b874
--- /dev/null
+++ b/challenge-205/barroff/raku/ch-2.raku
@@ -0,0 +1,25 @@
+#!/usr/bin/env raku
+
+use v6.d;
+
+sub maximum-xor(Int @list where @list.elems > 1 --> Int) {
+ my Int @unique-list = @list.unique;
+ my @pairs = map({ $_[0] +^ $_[1] }, @unique-list.combinations(2));
+ return max(@pairs);
+}
+
+#| Run test cases
+multi sub MAIN('test') {
+ use Test;
+ plan 3;
+
+ is maximum-xor(Array[Int].new([1 , 2, 3, 4, 5, 6, 7])), 7, 'works for (1, 2, 3, 4, 5, 6, 7)';
+ is maximum-xor(Array[Int].new([2 , 4, 1, 3])), 7, 'works for (2, 4, 1, 3)';
+ is maximum-xor(Array[Int].new([10 , 5, 7, 12, 8])), 15, 'works for (10, 5, 7, 12, 8)';
+}
+
+#| Take user provided list like 1 2 2 3
+multi sub MAIN(*@elements where @elements.elems ≥ 1 && all(@elements) ~~ /^<[+-]>?<[0..9]>+$/) {
+ my Int @int_elements = @elements;
+ say maximum-xor(@int_elements);
+}