Pandigital products
Problem 032: Pandigital products
We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital.
The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.
Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.
HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum.
Solution:
$$$$$$$$$
###############################
vp2\0:<
>" "> 1-:|
v < *"ce"<
v p01 1$< vp1\0:< >v >v >$v >v >v >$v >v >v >$v v\g1:< >10g:1+10p2pv
>9"ec"*>80p:80g55+> 1-:| >:55+%:|>:1g!|>1\1p55+/:!| >\:>:55+%:|>:1g!|>1\1p55+/:!| >*:>:55+%:|>:1g!|>1\1p55+/:!| >55+> 1-:|>| >80g1-:5558***-#^_$1-:1-|
>$:^ $# $# < ^ $# $# < ^ $# $# <v++++++++$< >$ ^v $<
v < > > > > $> >$ $00>9-! ^ 1
| <0 <*9*3+1*94<
vp1\0:< >v >v >$v >v >v >$v >v >v >$v v\g1:< >10g:1+10p2pv
>"c"49*1+3*9*>80p:80g55+> 1-:| >:55+%:|>:1g!|>1\1p55+/:!| >\:>:55+%:|>:1g!|>1\1p55+/:!| >*:>:55+%:|>:1g!|>1\1p55+/:!| >55+> 1-:|>| >80g1-:"d"-#^_$1-:55+-|
>$:^ $# $# < ^ $# $# < ^ $# $# <v++++++++$< >$ ^ $
> >#v ># ># #< $> >$ $00>9-! ^
v < v\< ^ <
v -1< v< |:g2:<
v ># $# ># v# -1< ^$<
>" ">80p80g1->70p80g2g:!|>70g2g -| > 70g:1-#^_$80g:2-#^_$0>" "> 1-:| >+#<\:#<_+.@
>^ >070g2p^ >$^
Explanation:
The main focus here was optimizing the pandigital testing. The rest is just looping over every possible number.
We can optimize the outer loop a little bit if we look at the possible multiplicands.
There are only 2 possibilities if we need 9 digits in our calculation:
- 1-digit number * 4-digit number = 4-digit number
- 2-digit number * 3-digit number = 4-digit number
Interpreter steps: | 42 123 428 |
Execution time (BefunExec): | 7.19s (5.86 MHz) |
Program size: | 166 x 21 |
Solution: | 45228 |
Solved at: | 2014-09-22 |