Colorful numbers: Difference between revisions
Content added Content deleted
m (Minor improvement to code.) |
(add RPL) |
||
Line 2,063: | Line 2,063: | ||
Total colorful numbers: 57256</pre> |
Total colorful numbers: 57256</pre> |
||
=={{header|RPL}}== |
|||
We have assumed that the largest colored number has 8 digits. This means we only need to check the permutations of 98765432. Brute force is here used, generating these permutations - and many other numbers - through decrementation by 9. Before testing the colorfulness, the sum of the digits of the generated number is compared to that of 98765432. This improves execution time a little bit. |
|||
If the search had been unsuccessful, we would have tested the different possibilities of 7-digit pandigital numbers - but luckily it was not necessary. |
|||
{{works with|HP|48G}} |
|||
{| class="wikitable" ≪ |
|||
! RPL code |
|||
! Comment |
|||
|- |
|||
| |
|||
≪ →STR DUP SIZE → num dig |
|||
≪ '''CASE''' |
|||
dig 1 == '''THEN''' 1 '''END''' |
|||
num "0" POS num "1" POS OR '''THEN''' 0 '''END''' |
|||
1 SF |
|||
{ } 1 dig '''FOR''' j num j DUP SUB STR→ + '''NEXT''' |
|||
DUP SORT ΔLIST 1 + ΠLIST NOT '''THEN''' DROP 0 '''END''' |
|||
DUP |
|||
1 dig 1 - '''FOR''' k |
|||
1 dig k - '''FOR''' c |
|||
OVER c DUP k + SUB ΠLIST |
|||
'''IF''' DUP2 POS |
|||
'''THEN''' DROP 1 CF dig DUP 'c' STO 'k' STO |
|||
'''ELSE''' + '''END''' |
|||
'''NEXT NEXT''' |
|||
DROP2 1 FS? '''END''' |
|||
≫ ≫ '<span style="color:blue">COLOR?</span>' STO |
|||
| |
|||
<span style="color:blue">COLOR?</span> ( num → boolean ) |
|||
if num has only 1 digit then return true |
|||
if num contains 0 or 1 then return false |
|||
color = true |
|||
convert n into a list of digits |
|||
if 2 digits are identical then return false |
|||
list of products = list of digits |
|||
for k = 1 to ndig-1 |
|||
for c = 1 to ndig-k |
|||
p = digit[c]*..*digit[c+k] |
|||
if p in list of products |
|||
then color = false, exit loops |
|||
else append p to list of products |
|||
end loops |
|||
clean stack, return color |
|||
|} |
|||
≪ →STR 0 |
|||
1 3 PICK SIZE '''FOR''' j |
|||
OVER j DUP SUB NUM + |
|||
'''NEXT''' SWAP DROP |
|||
≫ '<span style="color:blue">DSTAMP</span>' STO |
|||
≪ { } |
|||
1 100 '''FOR''' j IF j <span style="color:blue">COLOR?</span> '''THEN''' + '''END NEXT''' |
|||
98765432 DUP <span style="color:blue">DSTAMP</span> SWAP |
|||
'''WHILE''' DUP <span style="color:blue">COLOR?</span> NOT '''REPEAT''' |
|||
'''DO''' 9 - '''UNTIL''' DUP2 <span style="color:blue">DSTAMP</span> == '''END''' |
|||
'''END''' SWAP DROP |
|||
≫ '<span style="color:blue">TASK</span>' STO |
|||
{{out}} |
|||
<pre> |
|||
2: { 1 2 3 4 5 6 7 8 9 23 24 25 26 27 28 29 32 34 35 36 37 38 39 42 43 45 46 47 48 49 52 53 54 56 57 58 59 62 63 64 65 67 68 69 72 73 74 75 76 78 79 82 83 84 85 86 87 89 92 93 94 95 96 97 98 } |
|||
1: 98746253 |
|||
</pre> |
|||
Largest colorful number found in 10 minutes 22 seconds on a HP-48G. |
|||
=={{header|Ruby}}== |
=={{header|Ruby}}== |