Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Lahendada krüptoaritmeetiline ülesanne:
yks
yks
+kolm
-----
viis
Tuleb leida toodud ülesande kõikvõimalikud lahendused. Iga lahendus
on kujul [i,k,l,m,o,s,v,y] ; so. täisarvude list, mille esimesene
element vastab tähele i, teine tähele k jne. Iga täht tähistab
erinevat numbrit ning sõnade esimesed tähed (so. y, k ja v) ei tohi
olla nullid.
Allpool on toodud mooduli skelett ja lahendite väljatrükkimiseks
vajalikud funktsioonid.
> module Puzzle where
Lahendite väljatrükkimiseks kasutame loengus toodud moodulit 'Pictures':
> import Pictures
Funktsioon printAll saab argumendiks lahendite listi ja trükib need
kõik välja:
> printAll :: [[Int]] -> IO()
> printAll = printPicture . block 8 . map sol2Pic
Funktsioon printFst saab argumendiks lahendite listi ja trükib välja
kõige esimese:
> printFst :: [[Int]] -> IO()
> printFst = printPicture . sol2Pic . head
Funktsioon sol2Pic teisendab ühe lahenduse pildiks:
> sol2Pic :: [Int] -> Picture
> sol2Pic [i,k,l,m,o,s,v,y]
> = lframe (6,6) ([oneS,oneS,threeS,lineS,fiveS])
> where oneS = " " ++ show (digits2int [y,k,s])
> threeS = "+" ++ show (digits2int [k,o,l,m])
> fiveS = " " ++ show (digits2int [v,i,i,s])
> lineS = "-----"
Funktsioon digits2int teisendab numbrite listi vastavaks
täisarvuks. Näiteks:
digits2int [1,2,3] ==> 123
> digits2int :: [Int] -> Int
> digits2int = foldl (\ a i -> 10*a+i) 0
solve leiab toodud ülesande kõikvõimalikud lahendused:
> solve :: [[Int]]
> solve = error "solve: See definitsioon tuleb teil ise kirjutada"