## 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.

## Task 1: Smallest Index

*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.

## Leave a comment