# RabbitFarm

### 2021-12-05

#### Like, Itâ€™s Just the First Ten Numbers Man!

*The examples used here are from The Weekly Challenge problem statement and demonstrate
the working solution.*

## Part 1

*Write a script to find lowest 10 positive integers having exactly 8 divisors*

### Solution

```
use strict;
use warnings;
sub factor{
my($n) = @_;
my @factors = (1, $n);
foreach my $j (2..sqrt($n)){
push @factors, $j if $n % $j == 0;
push @factors, ($n / $j) if $n % $j == 0 && $j ** 2 != $n;
}
return @factors;
}
sub first_ten_with_eight{
my $i = 0;
my @first_ten;
do{
my @factors = factor($i);
push @first_ten, $i if @factors == 8;
$i++;
}while(@first_ten != 10);
return @first_ten;
}
MAIN:{
print join(", ", first_ten_with_eight()) . "\n";
}
```

### Sample Run

```
$ perl perl/ch-1.pl
24, 30, 40, 42, 54, 56, 66, 70, 78, 88
```

### Notes

I have re-used that `factor()`

function quite a bit for these challenges, especially
recently. My blog writing has been fairly terse recently and as much as I'd like to
be a bit more verbose I really am not sure if there all that much more to say about this
code that hasn't been said before!

## Part 2

*You are given positive integers, $m and $n. Write a script to find total count of
integers created using the digits of $m which is also divisible by $n.*

### Solution

```
use strict;
use warnings;
##
# You are given positive integers, $m and $n.
# Write a script to find total count of integers
# created using the digits of $m which is also
# divisible by $n.
##
use Data::PowerSet q/powerset/;
sub like_numbers{
my($m, $n) = @_;
my @divisible;
for my $subset (@{powerset(split(//, $m))}){
my $i = join("", @$subset);
push @divisible, $i if $i && $i != $m && $i % $n == 0;
}
return @divisible;
}
MAIN:{
print like_numbers(1234, 2) . "\n";
print like_numbers(768, 4) . "\n";
}
```

### Sample Run

```
$ perl perl/ch-2.pl
9
3
```

### Notes

I've been making more use of `Data::PowerSet`

recently that I would have expected! If
anyone is interested in seeing an implementation of the Power Set calculations see my
C++ solution links below. While not Perl the code is quite readable and should be
adaptable easy to other languages. There is also a Rosetta Code entry for Power Set
but, frankly, many of the submissions there, especially the C++ and Perl ones are overly
convoluted in my opinion. Or at least much more so than the way I implemented it, which
I would think would be the more common method but I guess not!

## References

posted at: 16:47 by: Adam Russell | path: /perl | permanent link to this entry