Я занимаюсь еще одной проблемой Project Euler - Задача 38 .
У меня есть эта функция, которая возвращает список чисел, но мне нужно, чтобы список чисел был одним числом. Он вычисляет составное произведение целого числа.
f (a,b) = a*b
conProInt x n = map f (zip (replicate n x) ([1..n]))
prob38 = maximum [ (conProInt (x) (n)) | x <- [100..500], n <- [1..9], (sort $ nub $ (decToList $ (conProInt x n) )) == (sort $ (decToList $ (conProInt x n) )), (sort $ nub $ (decToList $ (conProInt x n))) == [1..9] ]
например:
conProInt 192 3
возвращает:
[192384576]
мне нужно вернуть:
192384576
Я искал вокруг и не могу найти функцию или подумать о функции, которую я мог бы создать, которая бы доставила то, что мне нужно. Как бы я пошел по этому поводу?
EDIT:
Я обновил скрипт, чтобы включить более быструю конкатенацию, но он не возвращает правильный результат:
f (a,b) = a*b
conProInt x n =( combine (map f (zip (replicate n x) ([1..n]))))
prob38 = maximum [ (conProInt (x) (n)) | x <- [1..50000], n <- [2..40], (sort $ nub $ (decToList $ (conProInt x n) )) == (sort $ (decToList $ (conProInt x n) )), (sort $ nub $ (decToList $ (conProInt x n))) == [1..9] ]
Я почти уверен, что тест на пандигитальный
(sort $ nub $ (decToList $ (conProInt x n) )) == (sort $ (decToList $ (conProInt x n) )), (sort $ nub $ (decToList $ (conProInt x n))) == [1..9]
не подведет. Я пытался сделать поиск максимально большим, но максимальный 9-pandigital, который я получил, был 986315724. Есть предложения? Диапазон значений для n очень большой?