Mind the gap
Weekly challenge 309 — 17 February 2025
Week 309: 17 Feb 2025
You are given an array of integers, @ints
.
Write a script to find the minimum difference between any two elements.
Example 1 Input: @ints = (1, 5, 8, 9) Output: 1 1, 5 => 5 - 1 => 4 1, 8 => 8 - 1 => 7 1, 9 => 9 - 1 => 8 5, 8 => 8 - 5 => 3 5, 9 => 9 - 5 => 4 8, 9 => 9 - 8 => 1 Example 2 Input: @ints = (9, 4, 1, 7) Output: 2 9, 4 => 9 - 4 => 5 9, 1 => 9 - 1 => 8 9, 7 => 9 - 7 => 2 4, 1 => 4 - 1 => 3 4, 7 => 7 - 4 => 3 1, 7 => 7 - 1 => 6
I don't have much to say about this one as the code is
almost the same as for task 1. Clearly, if we sort @ints
the smallest gap will be between 2 consecutive elements,
and the rest is just slightly different output.
And in case you wondered, see also Mind the gap.
#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2025-02-17 use utf8; # Week 309 - task 2 - Min diff use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; min_diff(1, 5, 8, 9); min_diff(9, 4, 1, 7); my @ints; push @ints, int(rand(1000)) for 0 .. 11; min_diff(@ints); sub min_diff { my (@ints, $min_gap, $gap, $j, $where); # initialise @ints = sort {$a <=> $b} @_; $min_gap = 1e9; # loop over @ints starting at the second element for $j (1 .. $#ints) { $gap = $ints[$j] - $ints[$j - 1]; next if $gap >= $min_gap; # found the smallest so far $min_gap = $gap; $where = qq[$ints[$j - 1] and $ints[$j]]; } say qq[\nInput: \@ints = (] . join(', ', @_) . ')'; say qq[Output: minimum difference is $min_gap between $where]; }
Input: @ints = (1, 5, 8, 9) Output: minimum difference is 1 between 8 and 9 Input: @ints = (9, 4, 1, 7) Output: minimum difference is 2 between 7 and 9 Input: @ints = (419, 772, 368, 569, 478, 471, 282, 858, 420, 910, 586, 746) Output: minimum difference is 1 between 419 and 420
Any content of this website which has been created by Peter Campbell Smith is in the public domain