Куча говна / Говнокод #17914 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
-- Алгебраический тип-сумма Масть («перечисление»).
-- Значением типа Масть может быть одно из указанных справа
-- (или Пики, или Трефы, или Бубны, или Червы).
-- «Масть» здесь выступает конструктором _типа_,
-- а «Пики», «Трефы» и т.д. — конструкторами _данных_.
data Масть = Пики | Трефы | Бубны | Червы
  -- необязательное автоматическое выведение экземпляров классов,
  -- позволяющее преобразовывать значения в строки (функцией show из Show)
  -- и обратно (функцией read из Read), а также сравнивать их между собой
  -- (функциями классов Eq и Ord).
  deriving (Show, Read, Eq, Ord)
 
-- Алгебраический тип-сумма Достоинство
data Достоинство = Семёрка | Восьмёрка | Девятка | Десятка
                 | Валет | Дама | Король | Туз
  deriving (Show, Read, Eq, Ord)
 
-- Алгебраический тип-произведение Карта («тип-кортеж»).
-- Значения типа Карта — комбинации значений типов Достоинство и Масть,
-- объединённые конструктором данных К.
-- Часто имена конструктора данных и конструктора типа совпадают.
data Карта = К Достоинство Масть
  deriving (Show, Read, Eq, Ord)
 
-- Синоним списка значений типа Карта.
type Рука = [Карта]
 
-- Функция, определяющая, есть ли в руке марьяж (король и дама одной масти).
естьМарьяж :: Рука -> Bool
естьМарьяж карты =
   -- достаточно найти марьяж хотя бы одной масти
   any (естьМарьяжМасти) [Пики, Трефы, Бубны, Червы]
   where
     -- проверить, есть ли и дама, и король заданной масти м в руке
     естьМарьяжМасти м = (К Дама м) `elem` карты && (К Король м) `elem` карты
 
-- примеры раздач
рука = [ К Дама Трефы, К Семёрка Червы, К Король Трефы, К Туз Бубны ]
рука_без_марьяжа = [ К Десятка Пики, К Король Пики, К Дама Червы ]
 
main = do
  проверить рука
  проверить рука_без_марьяжа
  проверить [] -- пустая раздача
  where
    проверить кк = putStrLn ( (show кк) ++ " -> " ++ (show (естьМарьяж кк)) )
 
-- Вывод:
-- [К Дама Трефы,К Семёрка Червы,К Король Трефы,К Туз Бубны] -> True
-- [К Десятка Пики,К Король Пики,К Дама Червы] -> False
-- [] -> False

Рука без макияжа

Запостил: DesmondHume DesmondHume, (Updated )

Комментарии (383) RSS

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8