diff options
| -rwxr-xr-x | challenge-090/pkmnx/raku/ch-1.raku | 44 | ||||
| -rwxr-xr-x | challenge-090/pkmnx/raku/ch-2.raku | 45 |
2 files changed, 89 insertions, 0 deletions
diff --git a/challenge-090/pkmnx/raku/ch-1.raku b/challenge-090/pkmnx/raku/ch-1.raku new file mode 100755 index 0000000000..09cde1a9e6 --- /dev/null +++ b/challenge-090/pkmnx/raku/ch-1.raku @@ -0,0 +1,44 @@ +#!/usr/bin/env raku + +# +# see usage: +# +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-090/pkmnx/raku$ cat input.1 +# GTAAACCCCTTTTCATTTAGACAGATCGACTCCTTATCCATTCTCAGAGATGTGTTGCTGGTCGCCG +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-090/pkmnx/raku$ ./ch-1.raku < input.1 +# Input count: A: 14; C: 18; T: 22; G: 13 +# In: GTAAACCCCTTTTCATTTAGACAGATCGACTCCTTATCCATTCTCAGAGATGTGTTGCTGGTCGCCG +# Out: CATTTGGGGAAAAGTAAATCTGTCTAGCTGAGGAATAGGTAAGAGTCTCTACACAACGACCAGCGGC +# + +sub MAIN() { + + my $map = { T => "A", A => "T", G => "C", C => "G" }; + my ($inCnt, $outCnt) = (0, 0); + + my $count = {}; + my @out = (); + my @data = (); + + for lines() -> $l { + @data = $l.comb(/./); + for (@data) -> $c { + $inCnt++; + if ( $map{$c}:exists ) { + $outCnt++; + $count{$c}++; + @out.push( $map{$c} ); + } else { + } + } + } + + die ( "bad input" ) if $inCnt != $outCnt; + + constant fmt = "%12s %s\n"; + + printf fmt, "Input count:", $count.kv.map(-> $k, $v { "$k: $v" }).join("; "); + printf fmt, "In:", @data.join(""); + printf fmt, "Out:", @out.join(""); + +} diff --git a/challenge-090/pkmnx/raku/ch-2.raku b/challenge-090/pkmnx/raku/ch-2.raku new file mode 100755 index 0000000000..3997243848 --- /dev/null +++ b/challenge-090/pkmnx/raku/ch-2.raku @@ -0,0 +1,45 @@ +#!/usr/bin/env raku + +# +# see usage: +# +# pk@pkx:~/Downloads/raku/perlweeklychallenge-club/challenge-090/pkmnx/raku$ ./ch-2.raku 12 14 +# 12 14 +# 6 28 +# 3 56 + +# 1 112 + +# Sum: 168 +# + +sub MAIN( Int $A, Int $B where ($A > 0 and $B > 0) ) { + + my $a = $A; + my $b = $B; + + my @out = (); + my $sum = 0; + while ($a >= 1 ) { + + my $mod = !($a %% 2); + if ( ( $a >= 1 ) && $mod ) { + $sum += $b; + } + + @out.push( [ $a, $b, $mod ??"+" !!" " ] ); + + $a = ($a / 2).Int; + $b *= 2; + } + + my $amx = (@out).map(->($a,$b,$c){$a}).max.chars + 5; + my $bmx = (@out).map(->($a,$b,$c){$b}).max.chars + 5; + + my $fn = sub ($a,$b) { ( sprintf ('%', $a, 's').join(""), $b ) }; + + for (@out) ->($a,$b,$c) { + ( $fn($amx, $a), $fn($bmx,$b), $c ).join(" ").say; + } + + "Sum: $sum".say; + +} |
