perl logo Perl logo (Thanks to Olaf Alders)

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 }