From c8a4ea77712e5a42ca7f78338b4f6ebf4c227bd5 Mon Sep 17 00:00:00 2001 From: "R. Tyler Croy" Date: Sun, 13 Mar 2011 23:22:20 -0700 Subject: [PATCH] Add solution for problem eight --- eight.adb | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 eight.adb diff --git a/eight.adb b/eight.adb new file mode 100644 index 0000000..89b15fa --- /dev/null +++ b/eight.adb @@ -0,0 +1,57 @@ +-- +-- Project Euler problem #8 +-- +-- Find the greatest product of five consecutive digits in the 1000-digit +-- number. + +with Ada.Text_IO; + +use Ada.Text_IO; + +procedure Eight is + Source : constant String := "73167176531330624919225119674426574742355349194934" & + "96983520312774506326239578318016984801869478851843" & + "85861560789112949495459501737958331952853208805511" & + "12540698747158523863050715693290963295227443043557" & + "66896648950445244523161731856403098711121722383113" & + "62229893423380308135336276614282806444486645238749" & + "30358907296290491560440772390713810515859307960866" & + "70172427121883998797908792274921901699720888093776" & + "65727333001053367881220235421809751254540594752243" & + "52584907711670556013604839586446706324415722155397" & + "53697817977846174064955149290862569321978468622482" & + "83972241375657056057490261407972968652414535100474" & + "82166370484403199890008895243450658541227588666881" & + "16427171479924442928230863465674813919123162824586" & + "17866458359124566529476545682848912883142607690042" & + "24219022671055626321111109370544217506941658960408" & + "07198403850962455444362981230987879927244284909188" & + "84580156166097919133875499200524063689912560717606" & + "05886116467109405077541002256983155200055935729725" & + "71636269561882670428252483600823257530420752963450"; + + function Digits_Product (Input : in String) return Natural is + Result : Natural := 1; + begin + for Item in Input'Range loop + Result := (Result * Natural'Value (Input (Item .. Item))); + end loop; + + return Result; + end Digits_Product; + + Highest : Natural := 0; +begin + for Index in 1 .. (Source'Length - 5) loop + declare + Sub : constant String := Source (Index .. Index + 4); + Product : constant Natural := Digits_Product (Sub); + begin + if Product > Highest then + Highest := Product; + end if; + end; + end loop; + + Put_Line ("> Highest product:" & Natural'Image (Highest)); +end Eight;