# Eine pandigitale Zahl in Haskell berechnen



## Ugi25 (6. Feb 2021)

Hi,

ich übe gerade mit diesem Buch Haskell.








						Haskell-Intensivkurs
					






					link.springer.com
				




Hier gibt es eine Aufgabe mit Lösung.

Die Aufgabe:

_Eine n-stellige Zahl wird als pandigital bezeichnet, wenn sie jede Zahl von 1 bis n genau einmal enthält. Die erste Zahl darf dabei nicht 0 sein. Beispielsweise ist die 5-stellige Zahl 15234 von 1 bis 5 pandigital. Das Produkt 7254 ist ein seltener Fall, denn für die Multiplikation 39 × 186 = 7254 sind die Multiplikanden und das Produkt 1 bis 9 pandigital. Finden Sie die Summe aller Produkte, deren Multiplikanden und Produkte von 1 bis 9 pandigital sind. Hinweis: Die Reihenfolge der Multiplikanden sollte keine Rolle spielen und die Lösung dann nur einmal angegeben werden._

Die Lösung:

[CODE lang="java" title="Lösung"]isPan :: Int -> Int -> Bool
isPan x y = "123456789" == sort digits
        where digits = (show x) ++ (show y) ++ (show (x*y))

euler32 :: Int
euler32 = sum (nub (pan1 ++ pan2))
        where
              pan1 = [x*y| x<-[1..9]  ,y<-[x..9999], (isPan x y)]
              pan2 = [x*y| x<-[10..99],y<-[x..999] , (isPan x y)][/CODE]

Hier der abgetippte Code in VS Code:



*Hier die Fehlermeldung: *




Warum wird sort und nub nicht erkannt?
Was läuft schief im Staate Dänemark?


----------



## mihe7 (6. Feb 2021)

Soweit ich das sehe, fehlt am Anfang schlicht `import Data.List`


```
import Data.List

isPan :: Int -> Int -> Bool
isPan x y = "123456789" == sort digits
        where digits = (show x) ++ (show y) ++ (show (x*y))

euler32 :: Int
euler32 = sum (nub (pan1 ++ pan2))
        where
              pan1 = [x*y| x<-[1..9]  ,y<-[x..9999], (isPan x y)]
              pan2 = [x*y| x<-[10..99],y<-[x..999] , (isPan x y)]
              
main = do
    print euler32
```

Das läuft zumindest unter https://repl.it/languages/haskell


----------

