aboutsummaryrefslogtreecommitdiff
path: root/challenge-060
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-05-17 07:18:30 +0100
committerGitHub <noreply@github.com>2020-05-17 07:18:30 +0100
commit36f57247358bdfce5419157c0fd9b984759c9680 (patch)
tree42e1e76a2c411e15fc11be431610292b9a6087b0 /challenge-060
parentb9cf3d518b8424f04298e96d551349211c0d2a00 (diff)
parent46715341a8faf2768b6d172b0400690281f693de (diff)
downloadperlweeklychallenge-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.raku49
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);
}