aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-11-23 04:44:50 +0000
committerGitHub <noreply@github.com>2020-11-23 04:44:50 +0000
commit12daab7ec95c69b9b0651b918c5f253d367f0761 (patch)
tree099e0b924e7aa1626b7faf7be32b8313b625459c
parent890b42b2db29ac1d4f738fb7c7d35fc291d5fa62 (diff)
parent8d5d3f9a32fd9ff251c013a050562073092204b4 (diff)
downloadperlweeklychallenge-club-12daab7ec95c69b9b0651b918c5f253d367f0761.tar.gz
perlweeklychallenge-club-12daab7ec95c69b9b0651b918c5f253d367f0761.tar.bz2
perlweeklychallenge-club-12daab7ec95c69b9b0651b918c5f253d367f0761.zip
Merge pull request #2824 from jeongoon/master
[ch-087/jeongoon] ch-2.raku: sligtly better performance.
-rw-r--r--challenge-087/jeongoon/raku/ch-2.raku31
1 files changed, 15 insertions, 16 deletions
diff --git a/challenge-087/jeongoon/raku/ch-2.raku b/challenge-087/jeongoon/raku/ch-2.raku
index 76d6ec90f3..63ac0d1dd1 100644
--- a/challenge-087/jeongoon/raku/ch-2.raku
+++ b/challenge-087/jeongoon/raku/ch-2.raku
@@ -44,30 +44,29 @@ map( -> $ln { next if $ln eq ""; # skip empty line
with $ln } );
# confirm input
-$*ERR.say(.Array) for @matrix;
-$*ERR.say;
+#$*ERR.say(.Array) for @matrix;
+#$*ERR.say;
@matrix andthen .kv.map(
-> $ri, $rw {
# find all lines which has consecutive element of "1"
## a. find cells has value of 1
- $rw.pairs.grep( { .value eq 1 }, :k ).Slip.
- ## b. make combinations from 1 to elems
- combinations( 1..* ). # one column is *maybe* okay
- # except when the column have
- # one row (-> point)
- ## c. grep only consecutive points
- map( -> $cmb {
- $cmb.rotor( 2 => -1 ).
- map({ [-] .reverse }). # distance between two points
- all == 1 # are all equal to one.
- ## d. as ( points array , row index )
- ?? ( $cmb, $ri )
- !! Empty } ).Array.Slip
+ my @one-indices = $rw.pairs.grep( { .value eq 1 }, :k );
+ ## b. make combinations from 1 to elems
+ ( 1..$rw.elems ). # one column is *maybe* okay
+ map( -> $n # except when the column have
+ { # one row (-> point)
+ @one-indices.rotor( $n => -($n.pred) ).Slip } ).
+ ## c. grep only consecutive points
+ map( -> $cmb {
+ next if 1 != any( # skip if
+ $cmb.rotor( 2 => -1 ). # distance between two points
+ map({ [-] .reverse }) ); # are not equal to one
+ ## d. as ( points array , row index )
+ ( $cmb, $ri ) } ).Slip
} ).
-
classify( {.[0].Str}, :as{ .[1] } ). # group by same point or line
map( { my ($pts-str, $rows) = $_.kv;
my $pts = $pts-str.split(/\s+/)>>.Int.Array; # note: >>.Int required