diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-10-07 21:55:26 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-10-07 21:55:26 +0100 |
| commit | f02433ffa321383734bfe15d53eecd8883a02552 (patch) | |
| tree | 542de6f72709ff9685845b4d3c49a5af8d561176 | |
| parent | 7f85c2620938dbf5e8201885ffbdaba3018ce40b (diff) | |
| parent | 1bf08a8547aab0cc7f60923ad26f516afcc6e5ff (diff) | |
| download | perlweeklychallenge-club-f02433ffa321383734bfe15d53eecd8883a02552.tar.gz perlweeklychallenge-club-f02433ffa321383734bfe15d53eecd8883a02552.tar.bz2 perlweeklychallenge-club-f02433ffa321383734bfe15d53eecd8883a02552.zip | |
Merge pull request #2472 from gugod/master
gugod's Raku solutions for PWC 081
| -rw-r--r-- | challenge-081/gugod/raku/ch-1.raku | 20 | ||||
| -rw-r--r-- | challenge-081/gugod/raku/ch-2.raku | 28 |
2 files changed, 48 insertions, 0 deletions
diff --git a/challenge-081/gugod/raku/ch-1.raku b/challenge-081/gugod/raku/ch-1.raku new file mode 100644 index 0000000000..b84d053ef5 --- /dev/null +++ b/challenge-081/gugod/raku/ch-1.raku @@ -0,0 +1,20 @@ +#!/usr/bin/env raku + +# raku challenge-081/gugod/raku/ch-1.raku abcdabcd abcdabcdabcdabcd +# (abcd abcdabcd) + +sub MAIN (Str $A, Str $B) { + say common-base-string($A, $B); +} + +sub common-base-string (Str $A, Str $B) { + return ( base-string($A) ∩ base-string($B) ).keys; +} + +sub base-string (Str $s) { + return (1..$s.chars).grep( + -> $n { + ($s.chars mod $n == 0) + && ($s.substr(0,$n) x ($s.chars div $n)) eq $s + }).map(-> $n { $s.substr(0,$n) }); +} diff --git a/challenge-081/gugod/raku/ch-2.raku b/challenge-081/gugod/raku/ch-2.raku new file mode 100644 index 0000000000..62a014f118 --- /dev/null +++ b/challenge-081/gugod/raku/ch-2.raku @@ -0,0 +1,28 @@ +#!/usr/bin/env raku + +sub MAIN (Str $input = 'input') { + print-frequency-table( word-frequency( IO::Path.new($input) ) ); +} + +sub word-frequency ( $fh ) { + my %freq; + my $prev = ''; + for $fh.split(/<?wb>/) -> $token { + if $token.match(/<:Letter>/) && !($token eq "s" && $prev eq "'") { + %freq{$token} += 1; + } + $prev = $token; + } + + return %freq; +} + +sub print-frequency-table ( %freq ) { + my %rfreq; + for %freq.pairs -> $it { + %rfreq{ $it.value }.append( $it.key ); + } + for %rfreq.keys.sort -> $n { + say $n ~ ' ' ~ %rfreq{$n}.sort.join(' '); + } +} |
