Lucky concatenations
Weekly challenge 251 — 8 January 2024
Week 251: 8 Jan 2024
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 1 Input: @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 => 1286 Example 2 Input: @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 => 489 Example 3 Input: @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
Any content of this website which has been created by Peter Campbell Smith is in the public domain