diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-16 05:41:48 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-16 05:41:48 +0100 |
| commit | b9924466cc009d2e5316cf2181e4cb701f0699b5 (patch) | |
| tree | ef821a084ce520ae5b4c7f9262cbbb19bf2c5e8c /challenge-060 | |
| parent | 4bd44dfd597811f71468831c7ee80a9101e7f30a (diff) | |
| download | perlweeklychallenge-club-b9924466cc009d2e5316cf2181e4cb701f0699b5.tar.gz perlweeklychallenge-club-b9924466cc009d2e5316cf2181e4cb701f0699b5.tar.bz2 perlweeklychallenge-club-b9924466cc009d2e5316cf2181e4cb701f0699b5.zip | |
- Added Raku solutions to the "Excel Column" task.
Diffstat (limited to 'challenge-060')
| -rw-r--r-- | challenge-060/mohammad-anwar/raku/ch-1.p6 | 47 | ||||
| -rw-r--r-- | challenge-060/mohammad-anwar/raku/ch-1a.p6 | 37 |
2 files changed, 84 insertions, 0 deletions
diff --git a/challenge-060/mohammad-anwar/raku/ch-1.p6 b/challenge-060/mohammad-anwar/raku/ch-1.p6 new file mode 100644 index 0000000000..5aa556a229 --- /dev/null +++ b/challenge-060/mohammad-anwar/raku/ch-1.p6 @@ -0,0 +1,47 @@ +#!/usr/bin/env perl6 + +use v6.d; + +multi sub MAIN(*@) is hidden-from-USAGE { + say $*USAGE; +} + +multi sub MAIN(Str :$name?, Int :$number?) { + die "ERROR: Missing --name=<Str> or --number=<Int>.\n" + unless defined $name or defined $number; + + defined $name + ?? + say sprintf("%s => %s", $name, excel-column($name)) + !! + say sprintf("%s => %s", $number.Str, excel-column($number.Int)); +} + +multi sub excel-column(Str $name) { + + my $i = 0; + my $b = 26; + my $d = 0; + + for $name.uc.flip.comb -> $c { + $d += ($c.ord - "A".ord + 1) * ($b ** $i++); + } + + return $d; +} + +multi sub excel-column(Int $number is copy) { + + my $name = ''; + my @name = 'A'..'Z'; + @name.unshift(0); + + while $number > 26 { + my $i = $number div 26; + $name ~= @name[$i]; + $number -= $i * 26; + } + $name ~= @name[$number]; + + return $name; +} diff --git a/challenge-060/mohammad-anwar/raku/ch-1a.p6 b/challenge-060/mohammad-anwar/raku/ch-1a.p6 new file mode 100644 index 0000000000..b447cd8692 --- /dev/null +++ b/challenge-060/mohammad-anwar/raku/ch-1a.p6 @@ -0,0 +1,37 @@ +#!/usr/bin/env perl6 + +use Test; + +is excel-column('AB'), 28, 'AB => 28'; +is excel-column(28), 'AB', '28 => AB'; + +done-testing; + +multi sub excel-column(Str $name) { + + my $i = 0; + my $b = 26; + my $d = 0; + + for $name.uc.flip.comb -> $c { + $d += ($c.ord - "A".ord + 1) * ($b ** $i++); + } + + return $d; +} + +multi sub excel-column(Int $number is copy) { + + my $name = ''; + my @name = 'A'..'Z'; + @name.unshift(0); + + while $number > 26 { + my $i = $number div 26; + $name ~= @name[$i]; + $number -= $i * 26; + } + $name ~= @name[$number]; + + return $name; +} |
