Lucky concatenations

Weekly challenge 251 — 8 January 2024

Week 251 - 8 Jan 2024

Task 1

You are given an array of integers, @ints. Write a script to find the concatenation value of the given array.

The concatenation of two numbers is the number formed by concatenating their numerals.

For example, the concatenation of 10, 21 is 1021. The concatenation value of @ints is initially equal to 0. Perform this operation until @ints becomes empty:

If there exists more than one number in @ints, pick the first element and last element in @ints respectively and add the value of their concatenation to the concatenation value of @ints, then delete the first and last element from @ints.

If one element exists, add its value to the concatenation value of @ints, then delete it.

Example 1Input: @ints = (6, 12, 25, 1) Output: 1286 1st operation: concatenation of 6 and 1 is 61 2nd operation: concaternation of 12 and 25 is 1225 Concatenation Value => 61 + 1225 => 1286Example 2Input: @ints = (10, 7, 31, 5, 2, 2) Output: 489 1st operation: concatenation of 10 and 2 is 102 2nd operation: concatenation of 7 and 2 is 72 3rd operation: concatenation of 31 and 5 is 315 Concatenation Value => 102 + 72 + 315 => 489Example 3Input: @ints = (1, 2, 10) Output: 112 1st operation: concatenation of 1 and 10 is 110 2nd operation: only element left is 2 Concatenation Value => 110 + 2 => 112

I took a simple approach: loop over `@ints`

inwards
from both ends, successively adding the concatenations to `$sum`

until either (a) all values have been used, or (b) only one value
remains, in which case add it to `$sum`

.

I suppose this could be claimed to be non-compliant as I haven't
__deleted__ the members from the array as I used them, but I
reckon that if I produce the correct output then the task is accomplished.

#!/usr/bin/perl use v5.16; # The Weekly Challenge - 2024-01-08 use utf8; # Week 251 task 1 - Concatenation value use strict; # Peter Campbell Smith use warnings; # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge binmode STDOUT, ':utf8'; my ($j, @ints); concatenation_value(6, 12, 25, 1); concatenation_value(10, 7, 31, 5, 2, 2); concatenation_value(1, 2, 10); for $j (0 .. 99) { push(@ints, int(rand(99))); } concatenation_value(@ints); sub concatenation_value { my(@ints, $sum, $j, $k); # initialise @ints = @_; $sum = 0; # iterate from both ends for $j (0 .. @ints) { $k = @ints - $j - 1; last if $k < $j; $sum += ($k == $j ? $ints[$j] : $ints[$j] . $ints[$k]); } # show result say qq[\nInput: (] . join(', ', @ints) . ')'; say qq[Output: $sum]; }

Input: (6, 12, 25, 1) Output: 1286 Input: (10, 7, 31, 5, 2, 2) Output: 489 Input: (1, 2, 10) Output: 112 Input: (56, 1, 44, 58, 9, 95, 74, 29, 31, 67, 91, 44, 88, 71, 83, 49, 67, 95, 22, 39, 32, 74, 57, 6, 14, 35, 12, 24, 11, 23, 14, 80, 6, 51, 56, 10, 30, 43, 0, 51, 93, 72, 76, 50, 87, 39, 42, 97, 2, 68, 26, 85, 67, 82, 46, 28, 34, 64, 74, 40, 13, 72, 72, 91, 31, 54, 1, 4, 78, 69, 21, 88, 42, 91, 88, 16, 28, 13, 72, 60, 32, 56, 68, 8, 82, 95, 25, 5, 1, 52, 73, 95, 27, 51, 7, 7, 25, 91, 38, 19) Output: 206807

The content of
this website
is licensed by
Peter
Campbell Smith under a
Creative Commons Attribution 4.0 International Licence