diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-05-17 07:18:30 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-17 07:18:30 +0100 |
| commit | 36f57247358bdfce5419157c0fd9b984759c9680 (patch) | |
| tree | 42e1e76a2c411e15fc11be431610292b9a6087b0 /challenge-060 | |
| parent | b9cf3d518b8424f04298e96d551349211c0d2a00 (diff) | |
| parent | 46715341a8faf2768b6d172b0400690281f693de (diff) | |
| download | perlweeklychallenge-club-36f57247358bdfce5419157c0fd9b984759c9680.tar.gz perlweeklychallenge-club-36f57247358bdfce5419157c0fd9b984759c9680.tar.bz2 perlweeklychallenge-club-36f57247358bdfce5419157c0fd9b984759c9680.zip | |
Merge pull request #1719 from andemark/branch-for-challenge-060
ch-1.raku
Diffstat (limited to 'challenge-060')
| -rw-r--r-- | challenge-060/mark-anderson/raku/ch-1.raku | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/challenge-060/mark-anderson/raku/ch-1.raku b/challenge-060/mark-anderson/raku/ch-1.raku index 5ad393a053..c8d3b23d61 100644 --- a/challenge-060/mark-anderson/raku/ch-1.raku +++ b/challenge-060/mark-anderson/raku/ch-1.raku @@ -1,25 +1,46 @@ #!/usr/bin/env raku -my %letter; -my %number; +sub from-excel(Str $str) { + my $num; -my $number = 1; -my $letter = "A"; + my @letters = $str.comb; -loop { - last if $number > 16384; + my $exp = @letters.keys.max; - %letter{$number} = $letter; - %number{$letter} = $number; + for @letters { + $num += ($_.ord - 64) * (26 ** $exp--); + } - $number++; - $letter++; + $num; } -multi sub MAIN (Str $str where $str.all ~~ /<[A..Z]>/) { - say %number{$str}; +sub to-excel(UInt $num is copy) { + my $string; + my $quotient; + my $remainder; + my @letters = ("A" .. "Z"); + + while $num > 26 { + $quotient = ($num / 26).Int; + $remainder = $num % 26; + + if $remainder == 0 { + $quotient--; + $remainder = 26; + } + + $string ~= @letters[$remainder - 1]; + $num = $quotient; + } + + $string ~= @letters[$num - 1]; + $string.flip; +} + +multi sub MAIN (Str $str where $str ~~ /^<[A..Z]>+$/) { + say from-excel($str); } -multi sub MAIN (UInt $num where $num <= 16384) { - say %letter{$num}; +multi sub MAIN (UInt $num where $num > 0) { + say to-excel($num); } |
