module MyPicture where
import Data.Char
import Data.List
a1 = [" A "," A A ","A A ","AAAAA ","A A "]
b1 = ["BBBB ","B B ","BBBB ","B B ","BBBB "]
c1 = [" CCCC ","C ","C ","C "," CCCC "]
d1 = ["DDD ","D D ","D D ","D D ","DDD "]
e1 = ["EEEEE ","E ","EEEEE ","E ","EEEEE "]
f1 = ["FFFFF ","F ","FFFF ","F ","F "]
g1 = [" GGGG ","G ","G GG ","G G "," GGG "]
h1 = ["H H ","H H ","HHHHH ","H H ","H H "]
i1 = ["IIIII "," I "," I "," I ","IIIII "]
j1 = [" JJJJ "," J "," J ","J J "," JJ "]
k1 = ["K KK ","K K ","KK ","K K ","K KK "]
l1 = ["L ","L ","L ","L ","LLLLL "]
m1 = ["M M ","MM MM ","M M M ","M M M ","M M M "]
n1 = ["N N ","NN N ","N N N ","N NN ","N N "]
o1 = [" OOO ","O O ","O O ","O O "," OOO "]
p1 = ["PPPP ","P P ","PPPP ","P ","P "]
q1 = [" QQQ ","Q Q ","Q Q ","Q Q "," QQ Q "]
r1 = ["RRRR ","R R ","RR R ","R R ","R RR "]
s1 = [" SSSS ","S ","SSSSS "," S ","SSSS "]
t1 = ["TTTTT "," T "," T "," T "," T "]
u1 = ["U U ","U U ","U U ","U U ","UUUUU "]
v1 = ["V V ","V V ","V V "," V V "," V "]
w1 = ["W W ","W W W ","W W W ","W W W "," W W "]
x1 = ["X X "," X X "," X "," X X ","X X "]
y1 = ["Y Y "," Y Y "," Y "," Y "," Y "]
z1 = ["ZZZZZ "," Z "," Z "," Z ","ZZZZZ "]
l0 = [" 000 ","00 0 ","0 0 0 ","0 00 "," 000 "]
ll = [" 1 "," 11 "," 1 "," 1 ","11111 "]--ll(charater l) not l1(one)
l2 = [" 222 ","2 2 "," 2 "," 2 ","22222 "]
l3 = ["3333 "," 3 "," 333 "," 3 ","3333 "]
l4 = [" 4 "," 44 "," 4 4 ","44444 "," 4 "]
l5 = ["55555 ","5 ","55555 "," 5 ","55555 "]
l6 = ["66666 ","6 ","66666 ","6 6 ","66666 "]
l7 = ["77777 "," 7 "," 7 "," 7 "," 7 "]
l8 = ["88888 ","8 8 ","88888 ","8 8 ","88888 "]
l9 = ["99999 ","9 9 ","99999 "," 9 ","99999 "]
blank = [" "," "," "," "," "]
enlarge :: Char -> [String]
enlarge c
|c == 'A' || c == 'a' = a1
|c == 'B' || c == 'b' = b1
|c == 'C' || c == 'c' = c1
|c == 'D' || c == 'd' = d1
|c == 'E' || c == 'e' = e1
|c == 'F' || c == 'f' = f1
|c == 'G' || c == 'g' = g1
|c == 'H' || c == 'h' = h1
|c == 'I' || c == 'i' = i1
|c == 'J' || c == 'j' = j1
|c == 'K' || c == 'k' = k1
|c == 'L' || c == 'l' = l1
|c == 'M' || c == 'm' = m1
|c == 'N' || c == 'n' = n1
|c == 'O' || c == 'o' = o1
|c == 'P' || c == 'p' = p1
|c == 'Q' || c == 'q' = q1
|c == 'R' || c == 'r' = r1
|c == 'S' || c == 's' = s1
|c == 'T' || c == 't' = t1
|c == 'U' || c == 'u' = u1
|c == 'V' || c == 'v' = v1
|c == 'W' || c == 'w' = w1
|c == 'X' || c == 'x' = x1
|c == 'Y' || c == 'y' = y1
|c == 'Z' || c == 'z' = z1
|c == '0' = l0
|c == '1' = ll
|c == '2' = l2
|c == '3' = l3
|c == '4' = l4
|c == '5' = l5
|c == '6' = l6
|c == '7' = l7
|c == '8' = l8
|c == '9' = l9
|c == ' ' = blank
|otherwise = error "Out of A-Z,a-z and 0-9"
sideByside :: [String] -> [String] -> [String]
sideByside pic1 pic2 = [ x ++ y | (x,y) <- zip pic1 pic2]
formNewStr :: String -> Int -> [String]
formNewStr str1 n--can be replaced by foldr
|n == 1 = sideByside (enlarge (str1!!0)) (enlarge (str1!!1))
|n == -1 = error "No input" -- sayit ""
|otherwise = sideByside (formNewStr str1 (n-1)) (enlarge (str1!!n))
say :: String -> String
say str1 = unlines ( formNewStr str1 (length str1 -1) )
sayit :: String -> IO ()
sayit str1 = putStr ( say str1 )
Haskell作業2(2)|放大字符串
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.