diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-11-23 04:44:50 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-23 04:44:50 +0000 |
| commit | 12daab7ec95c69b9b0651b918c5f253d367f0761 (patch) | |
| tree | 099e0b924e7aa1626b7faf7be32b8313b625459c | |
| parent | 890b42b2db29ac1d4f738fb7c7d35fc291d5fa62 (diff) | |
| parent | 8d5d3f9a32fd9ff251c013a050562073092204b4 (diff) | |
| download | perlweeklychallenge-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.raku | 31 |
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 |
