/extra/project-euler/067/067.factor

http://github.com/x6j8x/factor · Factor · 62 lines · 13 code · 20 blank · 29 comment · 0 complexity · b5b72b5ea8d4c61937733621b32deae9 MD5 · raw file

  1. ! Copyright (c) 2007 Samuel Tardieu, Aaron Schaefer.
  2. ! See http://factorcode.org/license.txt for BSD license.
  3. USING: io.files math.parser namespaces project-euler.common
  4. io.encodings.ascii sequences splitting ;
  5. IN: project-euler.067
  6. ! http://projecteuler.net/index.php?section=problems&id=67
  7. ! DESCRIPTION
  8. ! -----------
  9. ! By starting at the top of the triangle below and moving to adjacent numbers
  10. ! on the row below, the maximum total from top to bottom is 23.
  11. ! 3
  12. ! 7 5
  13. ! 2 4 6
  14. ! 8 5 9 3
  15. ! That is, 3 + 7 + 4 + 9 = 23.
  16. ! Find the maximum total from top to bottom in triangle.txt (right click and
  17. ! 'Save Link/Target As...'), a 15K text file containing a triangle with
  18. ! one-hundred rows.
  19. ! NOTE: This is a much more difficult version of Problem 18. It is not possible
  20. ! to try every route to solve this problem, as there are 2^99 altogether! If you
  21. ! could check one trillion (10^12) routes every second it would take over twenty
  22. ! billion years to check them all. There is an efficient algorithm to solve it. ;o)
  23. ! SOLUTION
  24. ! --------
  25. ! Propagate from bottom to top the longest cumulative path as is done in
  26. ! problem 18.
  27. <PRIVATE
  28. : source-067 ( -- seq )
  29. "resource:extra/project-euler/067/triangle.txt"
  30. ascii file-lines [ " " split [ string>number ] map ] map ;
  31. PRIVATE>
  32. : euler067 ( -- answer )
  33. source-067 propagate-all first first ;
  34. ! [ euler067 ] 100 ave-time
  35. ! 20 ms ave run time - 2.12 SD (100 trials)
  36. ! ALTERNATE SOLUTIONS
  37. ! -------------------
  38. : euler067a ( -- answer )
  39. source-067 max-path ;
  40. ! [ euler067a ] 100 ave-time
  41. ! 21 ms ave run time - 2.65 SD (100 trials)
  42. SOLUTION: euler067a