The problem I’m trying to solve is the simple but lovely euler 62.

The cube, 41063625 (345

^{3}), can be permuted to produce two other cubes: 56623104 (384^{3}) and 66430125 (405^{3}). In fact, 41063625 is the smallest cube which has exactly three permutations of its digits which are also cube.Find the smallest cube for which exactly five permutations of its digits are cube.

A bit of fun coding after a statistics midterm last night and the solution should be in the bag. Except it isn’t, I am doing something wrong somehow and I can’t figure out what! Hopefully someone a bit better than me can shed some light whether my proposed solution is wrong or I just suck at Haskell.

## Algorithm

- Generate cubes up to 10,000
- Every cube is a pair of a digit-ordered string
*n^3*Β and*n,*for instance*(“279”,9)* - Order cubes by the string number presentation
- Group together all cubes with the same
*n^3* - Pick out groups with the size of 5
- Sort by
*n* - Pick the smallest number

Should work in principle right? So why doesn’t the website accept my answer *(5027)*? My guess is I’m doing something wrong in the sorting and grouping department and I was hoping someone with a bit more knowledge of Haskell could point out where I’m being stupid.

## Code

import Data.List cubes::(Num a) => a -> [(String, a)] cubes 1 = [(show 1, 1)] cubes n = (sort$show(n^3), n):(cubes $ n-1) sortStrNum (s1, n1) (s2, n2) | length s1 == length s2 = compare s1 s2 | otherwise = compare (length s1) (length s2) permuted_cubes n = groupBy (\a b -> fst a == fst b) $ sortBy sortStrNum $ cubes n fives n = filter (\xs -> length xs == 5) $ permuted_cubes n comparing p x y = compare (p x) (p y) smallest = head $ sortBy (comparing snd) $ head $ fives 100000 |

The whole thing looks kind of alright to me, no matter how much I poke around it doesn’t seem like something is misbehaving … but it still is.

Ideas?

###### Related articles

- Collatz, Haskell and Memoization (swizec.com)
- Learning me a Haskell (swizec.com)
- Converting Haskell Polymorphic Cosine function to F# (stackoverflow.com)
- Mutable, (possibly parallel) Haskell code and performance tuning (stackoverflow.com)
- Will this Haskell code take too much memory? (stackoverflow.com)
- Exceptions in Haskell (stackoverflow.com)

PS: You should also follow me on twitter π here.

It's where I go to shoot the shit about programming.