Eine pandigitale Zahl in Haskell berechnen

Ugi25

Mitglied
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:

1612633629652.png

Hier die Fehlermeldung:

1612633614303.png


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

mihe7

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

Code:
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
 

Neue Themen


Oben