As of October, 2016, Embarcadero is offering a free release
of Delphi (Delphi
10.1 Berlin Starter Edition ). There
are a few restrictions, but it is a welcome step toward making
more programmers aware of the joys of Delphi. They do say
"Offer may be withdrawn at any time", so don't delay if you want
to check it out. Please use the
link to let me know if the link stops working.
Support DFF - Shop
If you shop at Amazon anyway, consider
using this link.
We receive a few cents from each
Support DFF - Donate
If you benefit from the website, in terms of
knowledge, entertainment value, or something otherwise useful,
consider making a donation via PayPal to help defray the
costs. (No PayPal account necessary to donate via credit
card.) Transaction is secure.
For over 15 years
Mensa Page-A-Day calendars have provided several puzzles a year
for my programming pleasure. Coding "solvers" is most fun,
but many programs also allow user solving, convenient for "fill
in the blanks" type. Below are Amazon links to the
two most recent years.
365 Puzzlers Calendar 2017
365 Puzzlers Calendar 2018
(Hint: If you can
wait, current year calendars are usually on sale in January.)
e-mail with your comments about this program (or anything else).
For a given power value, find all numbers greater than 1 which are equal to
the sum of their digits raised to that power. For example: 370=33+73+03.
Background & Techniques
This problem is from an article "Are Toy Problems Useful" written by Donald
Knuth, published in the February , 1977 issue of Popular Computing magazine,
I found it reprinted in "Selected Papers on Computer Science:, Donald E. Knuth,
Cambridge University Press, 1996. The articled challenged claims by G. H.
Hardy that trivial problems were useless and a waste of time. Knuth
believes, and I agree, that such problems are useful if a encourage and
reinforce problem solving skills in the same sense that story problems in your
Algebra or Calculus textbook are useful.
This one in particular proved challenging because my standard "Brute Force"
approach works OK for single digit powers but finding the single number
equal to the sum of the 10 powers of its digits takes 25 minutes on my medium
The program allows users to enter a Power value between 2 and 15 and has
buttons for each of 3 methods implemented.
Button 1 tests all permutations with repeats for N digit integers. We'll call
this "Brute Force 1"and it works
well up to about N=8 (sum of 8th powers of digits equal to the number being
tested). Button 1 checks only number with N digits.
Button 2 tried a second way to generate all permutations with repeats, simply
counting, looking at all numbers
from the starting point up to some limit. All of Knuth's examples showed N digit
solutions for a
given exponent, N. I spent several hours without success trying to prove that
this was always true. Button
2 revealed that in fact there is at least one case where it is not so when
checking digits with N-1, N, or N+1 digits.
Button 3 is the best solution so far. It solves the N=10 case less than 2
seconds compared to 30 minutes
for Button 1 and about 2 hours for Button 2. I will leave the description to be
revealed in a separate form in
case you would like to work on the puzzle yourself. Like Button 2, Button 3
checks combinations with N-1 to N+1 digits.
The program uses several components from our DFFLIB library and any recent
version will be required before recompiling the program. UComboV2 is
used to generate permutations and combinations. UIntList, used in Button
3, lets us create an integer list of number "signatures" and the array of
Because it is easy here to start processes which may run for hours,
provisions are made for the user to interrupt execution. The technique
used in many programs here on DFF is as follows:
The Stop button in this case is made large enough to to cover all
three buttons and is initially moved to the top left corner of the top button.
It is initially and normally has its Visibility property set to False.
Entering the Button click exit, sets the Stop button Visible to True
and sets it back to False before exiting the procedure.
Running/Exploring the Program
Suggestions for Further Explorations
||The number of digits to check for solutions for a
specific exponent value, N, is not is not clear to me. Experimentally, a
few solutions have been found for some N values at N-1 and N+1 with most
occurring for N digit numbers. Is there a way to definitively know?
||.Is there any apriori way to
know if there are solutions for a particular N value?
|Original: May 07, 2013
July 29, 2017