Camel
Peter
Peter Campbell Smith

Lots of counting

Weekly challenge 365 — 16 March 2026

Week 365: 16 Mar 2026

Task 1

Task — Alphabet index digit sum

You are given a string $str consisting of lowercase English letters, and an integer $k. Write a script to convert the lowercase string into numbers using alphabet positions (a=1 … z=26), concatenate them to form an integer, then compute the sum of its digits repeatedly $k times, returning the final value.

Examples


Example 1
Input: $str = 'abc', $k = 1
Output: 6
Conversion: a = 1, b = 2, c = 3 -> 123
Digit sum: 1 + 2 + 3 = 6

Example 2
Input: $str = 'az', $k = 2
Output: 9
Conversion: a = 1, z = 26 -> 126
1st sum: 1 + 2 + 6 = 9
2nd sum: 9

Example 3
Input: $str = 'cat', $k = 1
Output: 6
Conversion: c = 3, a = 1, t = 20 -> 3120
Digit sum: 3 + 1 + 2 + 0 = 6

Example 4
Input: $str = 'dog', $k = 2
Output: 8
Conversion: d = 4, o = 15, g = 7 -> 4157
1st sum: 4 + 1 + 5 + 7 = 17
2nd sum: 1 + 7 = 8

Example 5
Input: $str = 'perl', $k = 3
Output: 6
Conversion: p = 16, e = 5, r = 18, l = 12 -> 1651812
1st sum: 1 + 6 + 5 + 1 + 8 + 1 + 2 = 24
2nd sum: 2 + 4 = 6
3rd sum: 6

Analysis

The initial conversion of characters to digits is done using a computed regex:

$a = ord('a') - 1;
$string =~ s|([a-z])|ord($1) - $a|ge;

The repeated summation is done by splitting the numeric string into single digits and summing them.

Try it 

Try running the script with any input:



example: weeklychallenge



example: 3

Script


#!/usr/bin/perl

# Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge

use v5.26;    # The Weekly Challenge - 2026-03-16
use utf8;     # Week 365 - task 1 - Alphabet index digit sum
use warnings; # Peter Campbell Smith
binmode STDOUT, ':utf8';
use Encode;

alphabet_index_digit_sum('abc', 1);
alphabet_index_digit_sum('az', 2);
alphabet_index_digit_sum('perl', 3);
alphabet_index_digit_sum('supercalifragilisticexpialidocious', 3);
alphabet_index_digit_sum('', 6);

sub alphabet_index_digit_sum {
    
    my ($string, $count, $a, $sum, @digits, $d);
    
    # initialise
    ($string, $count) = @_;
    $a = ord('a') - 1;
    
    # convert string to digits
    $string =~ s|([a-z])|ord($1) - $a|ge;
    
    # sum repeatedly
    for (1 .. $count) {
        @digits = split(//, $string);
        $string = '';
        $sum = 0;
        $sum += $_ for @digits;
        $string .= $sum;
    }
    
    # report
    say qq[\nInput:  \$str = '$_[0]', \$k = $count];
    say qq[Output: ] . ($sum + 0);
}

last updated 2026-03-16 — 13 lines of code

Output


Input:  $str = 'abc', $k = 1
Output: 6

Input:  $str = 'az', $k = 2
Output: 9

Input:  $str = 'perl', $k = 3
Output: 6

Input:  $str = 'supercalifragilisticexpialidocious', 
        $k = 3
Output: 10

Input:  $str = '', $k = 6
Output: 0

 

Any content of this website which has been created by Peter Campbell Smith is in the public domain