Hi,
ich übe gerade mit diesem Buch Haskell.
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?
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?
Zuletzt bearbeitet: