The weekly challenge 365 - Task 1: Alphabet Index Digit Sum
1 #!/usr/bin/env perl 2 # https://theweeklychallenge.org/blog/perl-weekly-challenge-365/#TASK1 3 # 4 # Task 1: Alphabet Index Digit Sum 5 # ================================ 6 # 7 # You are given a string $str consisting of lowercase English letters, and an 8 # integer $k. 9 # 10 # Write a script to convert a lowercase string into numbers using alphabet 11 # positions (a=1 … z=26), concatenate them to form an integer, then compute the 12 # sum of its digits repeatedly $k times, returning the final value. 13 # 14 ## Example 1 15 ## 16 ## Input: $str = "abc", $k = 1 17 ## Output: 6 18 ## 19 ## Conversion: a = 1, b = 2, c = 3 -> 123 20 ## Digit sum: 1 + 2 + 3 = 6 21 # 22 ## Example 2 23 ## 24 ## Input: $str = "az", $k = 2 25 ## Output: 9 26 ## 27 ## Conversion: a = 1, z = 26 -> 126 28 ## 1st sum: 1 + 2 + 6 = 9 29 ## 2nd sum: 9 30 # 31 ## Example 3 32 ## 33 ## Input: $str = "cat", $k = 1 34 ## Output: 6 35 ## 36 ## Conversion: c = 3, a = 1, t = 20 -> 3120 37 ## Digit sum: 3 + 1 + 2 + 0 = 6 38 # 39 ## Example 4 40 ## 41 ## Input: $str = "dog", $k = 2 42 ## Output: 8 43 ## 44 ## Conversion: d = 4, o = 15, g = 7 -> 4157 45 ## 1st sum: 4 + 1 + 5 + 7 = 17 46 ## 2nd sum: 1 + 7 = 8 47 # 48 ## Example 5 49 ## 50 ## Input: $str = "perl", $k = 3 51 ## Output: 6 52 ## 53 ## Conversion: p = 16, e = 5, r = 18, l = 12 -> 1651812 54 ## 1st sum: 1 + 6 + 5 + 1 + 8 + 1 + 2 = 24 55 ## 2nd sum: 2+4 = 6 56 ## 3rd sum: 6 57 # 58 ############################################################ 59 ## 60 ## discussion 61 ## 62 ############################################################ 63 # 64 # We simply convert the string into its digit numbers and save them 65 # into $digits. Then we calculate the digit sum $k times using 66 # List::Util's sum(). 67 68 use v5.36; 69 use List::Util qw( sum ); 70 71 alphabet_index_digit_sum("abc", 1); 72 alphabet_index_digit_sum("az", 2); 73 alphabet_index_digit_sum("cat", 1); 74 alphabet_index_digit_sum("dog", 2); 75 alphabet_index_digit_sum("perl", 3); 76 77 sub alphabet_index_digit_sum($str, $k) { 78 say "Input: \$str = \"$str\", \$k = $k"; 79 my $digits = ""; 80 foreach my $chr (split //, $str) { 81 $digits .= ( ord($chr) - 96 ); 82 } 83 foreach (1..$k) { 84 $digits = sum(split //, $digits); 85 } 86 say "Output: $digits"; 87 }