On Dec 19, 2009, at 1:36 PM, baptiste auguie wrote:

2009/12/19 David Winsemius <dwinsem...@comcast.net>:

On Dec 19, 2009, at 9:06 AM, baptiste auguie wrote:

Dear list,

In a little numbers game, I've hit a performance snag and I'm not sure
how to code this in C.

The game is the following: how many 8-digit numbers have the sum of
their digits equal to 17?
And are you considering the number "00000089" to be in the acceptable set?
Or is the range of possible numbers in 10000079:98000000 ?


The latter, the first digit should not be 0. But if you have an
interesting solution for the other case, let me know anyway.

I should also stress that this is only for entertainment and curiosity's sake.

The sequence of numbers whose digit sum is 13 is one of the ATT integer sequences:

http://www.research.att.com/~njas/sequences/A143164

No R implementations there, only Maple and Mathematica. Rather than doing strsplit()'s, I thought that a mathematical approach would be faster for a sumdigits function:

sumdigits <- function(x) { s=0; for (i in 1:(1+floor(log(x, base=10))) ){
                                         s<-s+x%%10; x<-x%/%10}
                            return(s) }

# what follows would be expected to take roughly 1/100th and 1/50th of the time of a complete enumeration but is useful for estimating the size of the result and the time of an exhaustive search:

> system.time( for (i in 10000079:11000079) if (sumdigits(i)==17) {idx<-c(idx,i)})
   user  system elapsed
 30.997   3.516  34.403

> system.time( for (i in 10000079:12000079) if (sumdigits(i)==17) {idx<-c(idx,i)})
   user  system elapsed
 55.975   2.433  58.218

> head(idx)
[1] 10000079 10000088 10000097 10000169 10000178 10000187

> length(idx)
[1] 31572

So it looks as though an exhaustive strategy would take a bit under an hour on my machine (a 2 year-old device) and be a vector around 1578600 elements in length. (Takes very little memory, and would undoubtedly be faster if I could use more than one core.)


baptiste

David Winsemius, MD
Heritage Laboratories
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to