Home

# PureScript solution to Project Euler problem 15

`2018-Dec-12 22:17`

Problem details at Project Euler problem 15 page.

## Test

 12345678910111213141516 `module` `Euler015Test (euler15suite) ``where` `import` `Prelude` `import` `Data``.``BigInt (fromString)``import` `Euler015 (euler15)``import` `Test``.``Unit (TestSuite, suite, test)``import` `Test``.``Unit``.``Assert ``as` `Assert` `euler15suite ``::` `forall` `e``.` `TestSuite e``euler15suite ``=``  ``suite ``"Euler 15"` `do``    ``test ``"Warmup"` `do``      ``Assert``.``equal (fromString ``"6"``) (euler15 ``2``)``    ``test ``"Real"` `do``      ``Assert``.``equal (fromString ``"137846528820"``) (euler15 ``20``)`

## Solution

 12345678910111213141516171819202122232425 `module` `Euler015 (euler15) ``where` `import` `Prelude` `import` `Data``.``Array` `(``concat``, ``drop``, ``head``, ``length``, range, ``zip``, (``!!``), (``:``))``import` `Data``.``BigInt (BigInt, fromInt)``import` `Data``.``Foldable (``foldl``)``import` `Data``.``Maybe` `(``Maybe``(``..``), fromMaybe, ``maybe``)``import` `Data``.``Tuple` `(``Tuple``(``..``))` `next ``::` `Array` `BigInt ``-``> ``Array` `BigInt``next a ``=` `concat` `[[fromInt ``1``], (g <``\$``> ``zip` `a (``drop` `1` `a)), [fromInt ``1``]]``  ``where` `g (``Tuple` `a b) ``=` `a ``+` `b` `type` `Mat a ``=` `Array` `(``Array` `a)` `pascal ``::` `Int` `-``> Mat BigInt``pascal n ``=` `foldl` `f [[fromInt ``1``]] (range ``1` `n)``  ``where` `f a ``_` `=` `next r ``:` `a``          ``where` `r ``=` `fromMaybe [] (``head` `a)` `euler15 ``::` `Int` `-``> ``Maybe` `BigInt``euler15 n ``=` `maybe` `Nothing` `f (``head` `p)``  ``where` `p ``=` `pascal (n ``*` `2``)``        ``f r ``=` `r ``!!` `(``length` `r ``/` `2``)`