Le Monde puzzle [#1043]
An arithmetic Le Monde mathematical puzzle :
A number is “noble” if all its digits are different and if it is equal to the average of all numbers created by permuting its digits. What are the noble numbers?
There is no need for simulation when plain enumeration works. After failing to install the R packge permutations, I installed the R package permute, which works, although (a) the function allPerm does not apply directly to a vector of characters or numbers but only to its size:
> allPerms(c("a","r","h")) [,1] [,2] [,3] [1,] 1 3 2 [2,] 2 1 3 [3,] 2 3 1 [4,] 3 1 2 [5,] 3 2 1
and (b) as seen above the function does not contain “all” permutations since it misses the identity permutation. Which ends up being fine for solving this puzzle. Using a bit of digit-character manipulation
findzol=function(N=2){ for (u in 1:(10^N-1)){ digz=strsplit(as.character(u),"")[[1]] if (length(digz)<N) digz=c(rep("0",N-length(digz)),digz) if (length(unique(digz))==N){ permz=apply(matrix(digz[allPerms(1:N)], ncol=N),2,as.numeric) if (mean(permz%*%10^{(N-1):0})==u) print(u)}}}
I found solutions for N=3
> findzol(3) [1] 370 [1] 407 [1] 481 [1] 518 [1] 592 [1] 629
and none for N=4,5,6. Le Monde gives solutions for N=9, which is not achievable by my code!
March 6, 2018 at 5:02 pm
For N=9 the problem simplifies because there are only 10 possibilities, i.e. which digit do you drop? You can then calculate the average over all digit permutations:
for (i in 1:10) { print(mean((0:9)[-i])*111111111) }
and keep the numbers that satisfy the permutation condition for noble numbers (unique digits, not containing the dropped digit)
March 7, 2018 at 7:50 am
Very neat, Martyn!!!