pattern = [
"* *",
" * * ",
" * * ",
" ** "
]
A jeżeli w zadaniu oczekuje się, że długość fali będzie podana a nie liczba fal, wtedy pattern na fix nie jest rozwiązaniem
program, który pobierze od użytkownika liczbę dodatnią (typu int) i narysuje falę o zadanej długości i wysokości 4 linijek
main :: IO ()
main = do
line <- getLine
putBanner (read line :: Int)
putBanner :: Int -> IO ()
putBanner n = putStr $ unlines $ (lineBy <$> [0..3])
where
lineBy i = (!! i) <$> take n inf
inf :: [String]
inf = cycle
[ "* "
, " * "
, " * "
, " *"
, " *"
, " * "
, " * "
, "* "
]
i wersja jednolinijkowa
main = (\line -> (\n -> putStr $ unlines $ ((\i -> (\l -> l!!i) <$> take n (cycle [ "* ", " * ", " * ", " *", " *", " * ", " * ", "* "])) <$> [0..3])) (read line :: Int)) =<< getLine
i dla 80 dostaniemy:
* ** ** ** ** ** ** ** ** ** *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
** ** ** ** ** ** ** ** ** **
Falę o zadanej długości (długość pobrana od użytkownika)
Może jedna kompletna fala o zmiennej długości a nie kilka fal o stałej długości?
Jeśli przez OP ma na myśli prawdziwą długość fali to nie chce mi się myśleć już dziś.