diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-11-24 09:35:47 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-24 09:35:47 +0000 |
| commit | 787e8c65621bf72125337f30b4a72cb62c5324c1 (patch) | |
| tree | 39d45cec9dd98250f16d3f39c31669ada73921ac | |
| parent | 59c632184dc97e8046a639cda7d1e2e294c32bd9 (diff) | |
| parent | 3c80dfb0fbe6adb3e1ee5ca9df4cf1fd858279ce (diff) | |
| download | perlweeklychallenge-club-787e8c65621bf72125337f30b4a72cb62c5324c1.tar.gz perlweeklychallenge-club-787e8c65621bf72125337f30b4a72cb62c5324c1.tar.bz2 perlweeklychallenge-club-787e8c65621bf72125337f30b4a72cb62c5324c1.zip | |
Merge pull request #2840 from pkmnx/branch-for-challenge-088
challenges 1 & 2 in raku ...
| -rwxr-xr-x | challenge-088/pkmnx/raku/ch-1.raku | 29 | ||||
| -rwxr-xr-x | challenge-088/pkmnx/raku/ch-2.raku | 80 |
2 files changed, 109 insertions, 0 deletions
diff --git a/challenge-088/pkmnx/raku/ch-1.raku b/challenge-088/pkmnx/raku/ch-1.raku new file mode 100755 index 0000000000..a96fe31f36 --- /dev/null +++ b/challenge-088/pkmnx/raku/ch-1.raku @@ -0,0 +1,29 @@ +#!/usr/bin/env rakudo + +# +# ex: ./ch-1.raku 5 2 1 4 3 +# + +sub MAIN ( *@N where @N.elems >2 && all(@N) ~~ Int ) { + + my %h; + ( (^@N.elems) X (^@N.elems) ).grep(-> ($x,$y) { $x != $y }).map( -> ($x, $y) { %h{$x}.push( @N[$y] ) }); + + "Input: ".say; + print "@N = ("; + print @N.join(", "); + print ")\n"; + + my @output = %h.keys.sort.map(-> $k { + my @v = @(%h{$k}); my $prd = ([*] @v); ('$M[' ~ $k ~ '] = ' ~ @v.join(' x ') ~ ' = ' ~ $prd, $prd ) + }); + + "Output: ".say; + print "@M = ("; + print @output.map( -> ($k,$v) { $v }).join(", "); + print ")\n\n"; + + @output.map( -> ($k,$v) { + $k.say; + }); +} diff --git a/challenge-088/pkmnx/raku/ch-2.raku b/challenge-088/pkmnx/raku/ch-2.raku new file mode 100755 index 0000000000..496888a5da --- /dev/null +++ b/challenge-088/pkmnx/raku/ch-2.raku @@ -0,0 +1,80 @@ +#!/usr/bin/env rakudo +# +# ex. ./ch-2.raku < input.txt # where input is rectangular shaped data block of numbers +# + +sub MAIN () { + + my $d = verifyInput(); + + "Input:".say; + $d.join("\n").say; + + my $output; + + while ($d) { + my $f = $d.shift; + + $output.push($f); + if ($d) { + my $l = $d.pop.reverse; + + my $leftCnt = 0; + my $tmp; + while ($d) { + my $t = shift $d; + if ( $t.elems ) { + my $tl = pop $t; + $output.push($tl); + $tmp.push($t); + } + $leftCnt++; + } + + if ( $l ) { + $output.push($l); + $l = Nil; + } + + while ( $leftCnt >0 ) { + my $t = pop $tmp; + if ( $t.elems ) { + my $tf = shift $t; + $output.push($tf); + if ( $d ) { + $d.unshift( ($t) ); + } else { + $d = [$t]; + } + } + $leftCnt--; + } + + } + + } + + "".say; + "Output:".say; + $output.List.flat.join(", ").say; +} + +sub verifyInput() { + + my $data; + my $lcnt = 0; + my $dsz = 0; + + for $*IN.lines() -> $l { + my @d = $l.comb(/\d+/); + if ( $dsz == 0 ) { $dsz = @d.elems; } + if ( $dsz != @d.elems ) { die "Input must be in rectangular format."; } + $data.push( @d ); + $lcnt++; + } + + if ( $lcnt < 2 ) { die "there must be at least 2 lines of input."; } + if ( $dsz < 2 ) { die "line length must be greater than 1."; } + + return $data; +} |
