aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-217/rozcovo/README1
-rw-r--r--challenge-217/rozcovo/perl/ch-1.pl31
-rw-r--r--challenge-217/rozcovo/perl/ch-2.pl6
-rw-r--r--challenge-217/rozcovo/perl/performance_test_ch-1.pl71
4 files changed, 109 insertions, 0 deletions
diff --git a/challenge-217/rozcovo/README b/challenge-217/rozcovo/README
new file mode 100644
index 0000000000..7f7cc4bff7
--- /dev/null
+++ b/challenge-217/rozcovo/README
@@ -0,0 +1 @@
+Solution by Israel C. Batista
diff --git a/challenge-217/rozcovo/perl/ch-1.pl b/challenge-217/rozcovo/perl/ch-1.pl
new file mode 100644
index 0000000000..30c4da8a86
--- /dev/null
+++ b/challenge-217/rozcovo/perl/ch-1.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+use 5.36.0;
+use strict;
+
+use subs qw/
+ simple_method
+ my_method
+/;
+
+my @m = ([0, 1, 2], [3, 4, 5], [6, 7, 8]);
+# say simple_method @m;
+say my_method @m;
+
+sub simple_method
+{
+ (sort { $a <=> $b } map { @$_ } @_)[2]
+}
+
+sub my_method
+{
+ my @m = @_;
+ my @small;
+ for (my $i = 0; $i <= $#m; $i++) {
+ for (my $j = 0; $j <= $#m; $j++) {
+ @small = sort { $a <=> $b } (@small, $m[$i][$j]);
+ pop @small unless $#small <= 2;
+ }
+ }
+
+ pop @small
+}
diff --git a/challenge-217/rozcovo/perl/ch-2.pl b/challenge-217/rozcovo/perl/ch-2.pl
new file mode 100644
index 0000000000..ffcb63270f
--- /dev/null
+++ b/challenge-217/rozcovo/perl/ch-2.pl
@@ -0,0 +1,6 @@
+#!//usr/bin/perl
+use 5.36.0;
+use strict;
+
+my @list = (31, 2, 4, 10);
+say join('', sort { $b cmp $a } @list);
diff --git a/challenge-217/rozcovo/perl/performance_test_ch-1.pl b/challenge-217/rozcovo/perl/performance_test_ch-1.pl
new file mode 100644
index 0000000000..0ee342cb01
--- /dev/null
+++ b/challenge-217/rozcovo/perl/performance_test_ch-1.pl
@@ -0,0 +1,71 @@
+#!/usr/bin/perl
+use 5.36.0;
+use strict;
+
+use Time::HiRes qw/time/;
+
+use subs qw/
+ simple_method
+ my_method
+ create_matrix
+/;
+
+my $min = 0, my $max = 10000;
+say "Using a matrix of 2..100 X 2..100";
+say "With elements from $min to $max\n";
+
+foreach my $n (2..100) {
+ my @m = create_matrix $n, $min, $max;
+
+ my $st = time;
+ simple_method @m;
+ my $me_1 = (time - $st) * 1000 ** 2;
+
+ $st = time;
+ my_method @m;
+ my $me_2 = (time - $st) * 1000 ** 2;
+
+ my $win = $me_1 < $me_2
+ ? 'simple_method'
+ : 'my_method'
+ ;
+
+ say sprintf
+ "%03d X %03d:\t%05d\t%05d\t$win",
+ $n, $n, $me_1, $me_2
+ ;
+}
+
+sub create_matrix
+{
+ my $n2 = shift;
+ my $min = shift;
+ my $max = shift;
+ my @matrix;
+
+ for (my $i = 0; $i < $n2; $i++) {
+ for (my $j = 0; $j < $n2; $j++) {
+ $matrix[$i][$j] = int rand($max - $min) + $min;
+ }
+ }
+ @matrix
+}
+
+sub simple_method
+{
+ (sort { $a <=> $b } map { @$_ } @_)[2]
+}
+
+sub my_method
+{
+ my @m = @_;
+ my @small;
+ for (my $i = 0; $i <= $#m; $i++) {
+ for (my $j = 0; $j <= $#m; $j++) {
+ @small = sort { $a <=> $b } (@small, $m[$i][$j]);
+ pop @small unless $#small <= 2;
+ }
+ }
+
+ pop @small
+}