## Advent Calendar - December 7, 2022

Wednesday, Dec 7, 2022| Tags: Perl, Python ### |   Day 6   |   Day 7   |   Day 8   |

The gift is presented by `Simon Green`. Today he is talking about his solution to “The Weekly Challenge - 157”. This is re-produced for Advent Calendar 2022 from the original post by him.

## Weekly Challenge 157

I’m back after the `three week hiatus!`

## TASK #1 › Pythagorean Means

You are given a set of integers.

Write a script to compute all three Pythagorean Means i.e `Arithmetic Mean`, `Geometric Mean` and `Harmonic Mean` of the given set of integers.

## My solution

This is a relatively straight forward task. `The Wikipedia` page provides the necessary formulas and we can use the `sum`, `reduce` and `lambda` functions to calculate the required figures. Finally we use the `round` function to print the results to one decimal place.

The `Perl` code is similar to the `Python` version, except we use the `product()` method in `List::Utils`. `Python`'s `math.product` is only available for `Python 3.8+`

One thing to note is if the sum of integers is `0`, a `division by zero error` might occur when calculating the harmonic mean. I’m not catching this and let the error pass to the user.

## Examples

``````\$ ./ch-1.py 1 3 5 6 9
AM = 4.8, GM = 3.8, HM = 2.8

\$ ./ch-1.py 2 4 6 8 10
AM = 6.0, GM = 5.2, HM = 4.4

\$ ./ch-1.py 1 2 3 4 5
AM = 3.0, GM = 2.6, HM = 2.2
``````

## TASK #2 › Brazilian Number

You are given a number `\$n > 3`.

Write a script to find out if the given number is a `Brazilian Number`. A positive integer number `N` has at least one natural number `B` where `1 < B < N-1` where the representation of `N` in `base B` has [the] same digits.

## My solution

This was an interesting task. We can’t convert numbers into a different base simply by using letters and numbers. For example `1282` is `22` in `base 640`, but how would you express `639` in the same base?

For this task I considered a value having the same digits even if the number itself has different digits. For example, `925` is express as `(25)(25)` in `base 36`.

The guts of this task is to convert the number n in `base 10` to a `specified base`, which I have called `b`. The function is called `same_digits`. I take the modulus (remainder) of `n` and `b` and make this value `d`. I then do an integer division and repeat this process comparing that `n % b` is `d`. I return `False` if any digit isn’t the same, or `True` if they all are.

Then it’s just a matter of having a loop from `2` to `n - 2`, and calling the `same_digits` function for each base. If there is a match, I print `1` (and the base), or `0` otherwise.

The `Perl` code is a transliteration of the `Python` code.

## Examples

``````\$ ./ch-2.py 6
0

\$ ./ch-2.py 7
1 (base 2)

\$ ./ch-2.py 8
1 (base 3)
``````

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

## SO WHAT DO YOU THINK ?

If you have any suggestions or ideas then please do share with us.