Double existence and

checking the payload

Weekly challenge 290 — 7 October 2024

Week 290: 7 Oct 2024

Task 1

You are given an array of integers, `@ints`

.
Write a script to find if there exist two indices $i and $j such that:

`$i != $j`

`0 <= ($i, $j) < scalar @ints`

`$ints[$i] == 2 * $ints[$j]`

Example 1Input: @ints = (6, 2, 3, 3) Output: true For $i = 0, $j = 2 $ints[$i] = 6 => 2 * 3 => 2 * $ints[$j]Example 2Input: @ints = (3, 1, 4, 13) Output: falseExample 3Input: @ints = (2, 1, 4, 2) Output: true For $i = 2, $j = 3 $ints[$i] = 4 => 2 * 2 => 2 * $ints[$j]

This is another one where ther is probably a one-liner, but I chose to write something a little more verbose;

First I create `%exists`

such that `$exists[$j]`

exists if `$j`

occurs in `@ints`

.

Then I simply loop through `@ints`

checking whether
`$exists{$j * 2}`

exists.

Note that since `$i != $j`

is a requirement, I have to explicitly exclude the
case where `0`

appears in `@ints`

.

#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2024-10-07 use utf8; # Week 290 - task 1 - Double exist use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; double_exist(6, 2, 3, 3); double_exist(3, 1, 4, 13); double_exist(2, 1, 4, 2); double_exist(0, 0, 14, 7, -4, -8); # bigger example my @ints; push @ints, int(rand(100)) for (0 .. 19); double_exist(@ints); sub double_exist { my (@ints, %exists, $explain, $j); # initialise @ints = @_; $exists{$_} = 1 for @ints; # find compliant pairs for $j (@ints) { $explain .= qq[$j and ] . ($j * 2) . ', ' if ($j != 0 and $exists{2 * $j}); } # show results say qq[\nInput: \@ints = (] . join(', ', @ints) . ')'; say qq[Output: ] . ($explain ? (qq[true - ] . substr($explain, 0, -2)) : 'false'); }

Input: @ints = (6, 2, 3, 3) Output: true - 3 and 6, 3 and 6 Input: @ints = (3, 1, 4, 13) Output: false Input: @ints = (2, 1, 4, 2) Output: true - 2 and 4, 1 and 2, 2 and 4 Input: @ints = (0, 0, 14, 7, -4, -8) Output: true - 7 and 14, -4 and -8 Input: @ints = (29, 87, 62, 35, 88, 66, 94, 60, 71, 79, 65, 96, 9, 4, 62, 62, 32, 39, 53, 9) Output: false

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