**Advent Calendar 2021**

### | **Day 15** | **Day 16** | **Day 17** |

The gift is presented by **Jaldhar H. Vyas**. Today he is talking about his solution to **“The Weekly Challenge - 108”**. This is re-produced for **Advent Calendar 2021** from the original **post** by `Jaldhar H. Vyas`

.

## Task #2: Bell Numbers

Write a script to display top 10 `Bell Numbers`

. Please refer to wikipedia page for more information.

Ugh maths again. Not being able to make head nor tail of the referenced wikipedia page, I googled around and found **this page**. The code below is a `Raku`

translation of the `C++`

example provided there.

```
sub bellNumber(Int $n) {
my @bell;
@bell[0][0] = 1;
for 1 .. $n -> $i {
@bell[$i][0] = @bell[$i - 1][$i - 1];
for 1 .. $i -> $j {
@bell[$i][$j] = @bell[$i - 1][$j - 1] + @bell[$i][$j - 1];
}
}
return @bell[$n][0];
}
```

Basically we are creating what’s known as a `Bell Triangle`

by starting with a known value (1 for a set with 0 elements) and using dynamic programming to calculate succeeding values. The leftmost value in the `$nth row`

of the triangle is the `Bell number`

for `$n`

.

This is the same thing in `Perl`

:

```
sub bellNumber {
my ($n) = @_;
my @bell;
$bell[0][0] = 1;
for my $i (1 .. $n) {
$bell[$i][0] = $bell[$i - 1][$i - 1];
for my $j (1 .. $i) {
$bell[$i][$j] = $bell[$i - 1][$j - 1] + $bell[$i][$j - 1];
}
}
return $bell[$n][0];
}
```

The spec asks for the “top ten” Bell numbers by which I assume the first ten is meant. In case you are curious, they are:

```
1 1 2 5 15 52 203 877 4140 21147
```

If you have any suggestion then please do share with us perlweeklychallenge@yahoo.com.