/extra/project-euler/004/004.factor

http://github.com/abeaumont/factor · Factor · 37 lines · 12 code · 13 blank · 12 comment · 0 complexity · 676c28c9ec7f48079700a75d0836f821 MD5 · raw file

  1. ! Copyright (c) 2007 Aaron Schaefer, Daniel Ehrenberg.
  2. ! See http://factorcode.org/license.txt for BSD license.
  3. USING: hashtables kernel math math.functions math.ranges project-euler.common
  4. sequences sorting sets ;
  5. IN: project-euler.004
  6. ! http://projecteuler.net/index.php?section=problems&id=4
  7. ! DESCRIPTION
  8. ! -----------
  9. ! A palindromic number reads the same both ways. The largest palindrome made
  10. ! from the product of two 2-digit numbers is 9009 = 91 * 99.
  11. ! Find the largest palindrome made from the product of two 3-digit numbers.
  12. ! SOLUTION
  13. ! --------
  14. <PRIVATE
  15. : source-004 ( -- seq )
  16. 100 999 [a,b] [ 10 divisor? not ] filter ;
  17. : max-palindrome ( seq -- palindrome )
  18. natural-sort [ palindrome? ] find-last nip ;
  19. PRIVATE>
  20. : euler004 ( -- answer )
  21. source-004 dup [ * ] cartesian-map combine max-palindrome ;
  22. ! [ euler004 ] 100 ave-time
  23. ! 1164 ms ave run time - 39.35 SD (100 trials)
  24. SOLUTION: euler004