## Perl Weekly Challenge 250: Smallest Index

These are some answers to the Week 250, Task 1, of the Perl Weekly Challenge organized by Mohammad S. Anwar.

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

Write a script to find the smallest index `i` such that `i mod 10 == \$ints[i]` otherwise return -1.

Example 1

``````Input: @ints = (0, 1, 2)
Output: 0

i=0: 0 mod 10 = 0 == \$ints[0].
i=1: 1 mod 10 = 1 == \$ints[1].
i=2: 2 mod 10 = 2 == \$ints[2].
All indices have i mod 10 == \$ints[i], so we return the smallest index 0.
``````

Example 2

``````Input: @ints = (4, 3, 2, 1)
Output: 2

i=0: 0 mod 10 = 0 != \$ints[0].
i=1: 1 mod 10 = 1 != \$ints[1].
i=2: 2 mod 10 = 2 == \$ints[2].
i=3: 3 mod 10 = 3 != \$ints[3].
2 is the only index which has i mod 10 == \$ints[i].
``````

Example 3

``````Input: @ints = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
Output: -1
Explanation: No index satisfies i mod 10 == \$ints[i].
``````

### Smallest Index in Raku

We'll simply use a `for` loop to iterate over the input array indexes. We exit the loop and return the current index if suitable. We return `-1` if we get to the end of the loop.

``````sub smallest_index (@in) {
for 0..@in.end -> \$i {
return \$i if \$i % 10 == @in[\$i];
}
return -1
}

for (0, 1, 2), (4, 3, 2, 1),
qw/1 2 3 4 5 6 7 8 9 0/ -> @test {
printf "%-20s => ", "@test[]";
say smallest_index @test;
}
``````

This program displays the following output:

``````\$ raku ./smallest-index.raku
0 1 2                => 0
4 3 2 1              => 2
1 2 3 4 5 6 7 8 9 0  => -1
``````

### Smallest Index in Perl

This is a port to Perl of the above Raku program. Please refer to the previous section if you need any explanations.

``````use strict;
use warnings;
use feature 'say';

sub smallest_index {
my @in = @_;
for my \$i (0..\$#in) {
return \$i if \$i % 10 == \$in[\$i];
}
return -1
}

for my \$test ([0, 1, 2], [4, 3, 2, 1],
[qw/1 2 3 4 5 6 7 8 9 0/]) {
printf "%-20s => ", "@\$test";
say smallest_index @\$test;
}
``````

This program displays the following output:

``````\$ perl ./smallest-index.pl
0 1 2                => 0
4 3 2 1              => 2
1 2 3 4 5 6 7 8 9 0  => -1
``````

## Wrapping up

Happy new year to everyone. The next week Perl Weekly Challenge will start soon. If you want to participate in this challenge, please check https://perlweeklychallenge.org/ and make sure you answer the challenge before 23:59 BST (British summer time) on January 14, 2024. And, please, also spread the word about the Perl Weekly Challenge if you can.