githubEdit

Rhonda Numbers

Challenge: Rhonda Numbers

A Rhonda number is a positive integer n that satisfies the property that, for a given base barrow-up-right, the product of the base-b digits of n is equal to b times the sum of n's prime factors. Only composite bases (non-prime bases) have Rhonda numbers.

For instance, consider 10206₁₀ = 2133132₄, that is, 2×4⁶ + 1×4⁵ + 3×4⁴ + 3×4³ + 1×4² + 3×4¹ + 2×4⁰ = 2×4096₁₀ + 1×1024₁₀ + 3×256₁₀ + 3×64₁₀ + 1×16₁₀ + 3×4₁₀ + 2 = 8192₁₀ + 1024₁₀ + 768₁₀ + 192₁₀ + 16₁₀ + 12₁₀ + 2 = 10206₁₀. 10206₁₀ has the prime factorization (2, 3, 3, 3, 3, 3, 3, 7) because 2×3⁶×7 = 10206₁₀. This is a base-4 Rhonda number because 2×1×3×3×1×3×2 = 108₁₀ and 4×(2+3+3+3+3+3+3+7) = 4×27₁₀ = 108₁₀.

The Wolfram MathWorld entry for “Rhonda Number”arrow-up-right provides tables of many Rhonda numbers. Further information on Rhonda numbers may be found at Numbers Aplentyarrow-up-right. You may also find this base conversion toolarrow-up-right helpful.

  • Produce three files to carry out this task:

    • /lib/rhonda/hoon

      Your library /lib/rhonda/hoon should expose two arms:

      • +check accepts a @ud unsigned decimal value for the base and a @ud unsigned decimal value for the number, and returns %.y or %.n depending on whether the given number is a Rhonda number in that base or not.

      • +series accepts a base as a @ud unsigned decimal value and a number of values to return n, and either returns ~ if the base is prime or the n first Rhonda numbers in that base.

    • /gen/rhonda-check/hoon

      You should provide a %say generator at /gen/rhonda-check/hoon which accepts a @ud unsigned decimal value and applies +check to verify if that value is a Rhonda number or not.

    • /gen/rhonda-series/hoon

      You should provide a %say generator at /gen/rhonda-series/hoon which accepts a @ud unsigned decimal value b and a @ud unsigned decimal value n, where b is the base b, and returns the first n Rhonda numbers in that base.

Unit Tests

Following a principle of test-driven development, we compose a series of tests which allow us to rigorously check for expected behavior.

Solutions

These solutions were submitted by the Urbit community as part of a competition in ~2022.6. They are made available under both the MIT licensearrow-up-right and the CC0 licensearrow-up-right. We ask you to acknowledge authorship should you utilize these elsewhere.

Solution #1

This solution was produced by ~mocmex-pollen. This code includes the ~_ sigcab error message rune and demonstrates the use of a helper core in a library and shows ^ ket skipping of $ buc.

/lib/rhonda.hoon

/gen/rhonda-check.hoon

/gen/rhonda-series.hoon

Solution #2

This solution was produced by ~ticlys-monlun. This code demonstrates using a +map data structure and a different square-root solution algorithm.

/lib/rhonda.hoon

/gen/rhonda-check.hoon

/gen/rhonda-series.hoon

Solution #3

This solution was produced by ~tamlut-modnys. This code demonstrates a clean prime factorization algorithm and the use of +roll.

/lib/rhonda.hoon

/gen/rhonda-check.hoon

/gen/rhonda-series.hoon

Solution #4

This solution was produced by ~sidnym-ladrut. This code demonstrates using multiple cores in a library.

/lib/rhonda.hoon

/gen/rhonda-check.hoon

/gen/rhonda-series.hoon

Last updated