diff options
| author | Israel C. Batista <israel.batista031@gmail.com> | 2023-05-21 15:20:58 -0300 |
|---|---|---|
| committer | Israel C. Batista <israel.batista031@gmail.com> | 2023-05-21 15:20:58 -0300 |
| commit | 81638724318912bcf9235c74c2a79499b78bd2a5 (patch) | |
| tree | 3ca59b5329f9583b8832cf849f51f56f233610dd | |
| parent | c4b5be7c34b100fcda4b1e2481df1e497a7d2661 (diff) | |
| download | perlweeklychallenge-club-81638724318912bcf9235c74c2a79499b78bd2a5.tar.gz perlweeklychallenge-club-81638724318912bcf9235c74c2a79499b78bd2a5.tar.bz2 perlweeklychallenge-club-81638724318912bcf9235c74c2a79499b78bd2a5.zip | |
Adding Rozcovo's solution for challenge #217
| -rw-r--r-- | challenge-217/rozcovo/README | 1 | ||||
| -rw-r--r-- | challenge-217/rozcovo/perl/ch-1.pl | 31 | ||||
| -rw-r--r-- | challenge-217/rozcovo/perl/ch-2.pl | 6 | ||||
| -rw-r--r-- | challenge-217/rozcovo/perl/performance_test_ch-1.pl | 71 |
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 +} |
