Peter’s blog ✴ Week 333 ✴ 4 August 2025
THE WEEKLY CHALLENGE
Straight zeroes
You are given an array of integers. Write a script to duplicate each occurrence of zero, shifting the remaining elements to the right. The elements beyond the length of the original array are not written.
Example 1 Input: @ints = (1, 0, 2, 3, 0, 4, 5, 0) Output: (1, 0, 0, 2, 3, 0, 0, 4) Each zero is duplicated. Elements beyond the original length (like 5 and last 0) are discarded. Example 2 Input: @ints = (1, 2, 3) Output: (1, 2, 3) No zeros exist, so the array remains unchanged. Example 3 Input: @ints = (1, 2, 3, 0) Output: (1, 2, 3, 0) Example 4 Input: @ints = (0, 0, 1, 2) Output: (0, 0, 0, 0) Example 5 Input: @ints = (1, 2, 0, 3, 4) Output: (1, 2, 0, 0, 3)
This one's a bit simpler.
Step 1 is to create a new array mapping each 0 to (0, 0) and just
copying over any non-zero elements.
Step 2 is to output the first n elements of the new array,
where n is the number of elements in the input array.
The implementations provide excellent examples of how to approach these challenges in Perl, balancing correctness, clarity, and practicality. The detailed output formatting in Task 1 is particularly noteworthy for making the solutions more informative and useful.
#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2025-08-04 use utf8; # Week 333 - task 2 - Duplicate zeros use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; use Encode; duplicate_zeros(1, 0, 2, 3, 0, 4, 5, 0); duplicate_zeros(1, 2, 3); duplicate_zeros(1, 2, 3, 0); duplicate_zeros(0, 0, 1, 2); duplicate_zeros(1, 2, 0, 3, 4); sub duplicate_zeros { # map each 0 to 0, 0 my @output = map($_ == 0 ? (0, 0) : $_, @_); # output as many elements in @output as in the input array say qq[\nInput: (] . join(', ', @_) . ')'; say qq[Output: (] . join(', ', @output[0 .. $#_]) . ')'; }
4 lines of code
Input: (1, 0, 2, 3, 0, 4, 5, 0) Output: (1, 0, 0, 2, 3, 0, 0, 4) Input: (1, 2, 3) Output: (1, 2, 3) Input: (1, 2, 3, 0) Output: (1, 2, 3, 0) Input: (0, 0, 1, 2) Output: (0, 0, 0, 0) Input: (1, 2, 0, 3, 4) Output: (1, 2, 0, 0, 3)
Any content of this website which has been created by Peter Campbell Smith is in the public domain