Workshop/StartHaskell2/exercise13

『モナドがいっぱい』 練習問題

Bさんの好きな男子を探せ!

作者による解答例はこちら

AさんとBさんはいわゆる恋バナをしていました。 一通り盛り上がったところで、 「ねぇ、ぶっちゃけBは誰が好きなの?」 と尋ねたところ、 「うちのクラス唯一の身長180cmの子の出席番号をnとして、 Hogeマンションの2号棟の200+n号室に住んでいる男の子の お姉ちゃんの親友の元カレだよ」という、 極めて回りくどい答え方をしました。 要するにBは恥ずかしがり屋なので知られたくないのです。 ところがそれにもめげなかったAは クラスの男子を中心とした人間関係などを調べ上げ、 下記のような表を作って、Haskellで扱いやすくしました。 これを参考に、Aさんの探偵のごとき調査能力を讃えつつ、 Bさんの好きな男子を求める関数を書きなさい。 ただし、Aさん・Bさんのそれぞれの性別はご想像にお任せする。

-- クラスの男子の身長
  [(161, "たかし")
  ,(174, "あつし")
  ,(200, "きよし")
  ,(156, "なおや")
  ,(180, "こうじ")
  ,(177, "かずお")
  ,(169, "ゆうや")
  ,(184, "かずき")
  ,(163, "みつを")
  ,(149, "じろう")]

-- 出席番号順に並べたクラスの男子
  [("あつし",  1)
  ,("かずお",  3)
  ,("かずき",  4)
  ,("きよし",  7)
  ,("こうじ",  8)
  ,("じろう", 10)
  ,("たかし", 13)
  ,("なおや", 15)
  ,("みつを", 18)
  ,("ゆうや", 22)]

-- Hogeマンション2号棟2階に住んでいる男の子とその年齢。
-- n番目のリストにある名前が200+n号室に住んでいる男の子の名前をそのまま表す。
-- Nothingである場合はもちろん部屋に男の子が住んでいないということ。
-- 注:nは0ではなく1から数えてください。
  [Nothing
  ,Just ("だいざぶろう", 12)
  ,Just ("こうじろう", 7)
  ,Just ("でんじろう", 11)
  ,Just ("しゅうべえ", 3)
  ,Nothing
  ,Just ("とうきちろう", 19)
  ,Just ("ちょうすけ", 9)
  ,Just ("じゅんいちろう", 70)
  ,Nothing]

-- Hogeマンション2号棟2階に住んでいる女の子とその年齢。
-- 男の子と同様。
  [Just ("はなこ", 17)
  ,Nothing
  ,Just ("よしこ", 13)
  ,Just ("みつこ", 11)
  ,Just ("たかこ", 1)
  ,Nothing
  ,Just ("とうきちこ", 20)
  ,Just ("じゅんこ", 21)
  ,Just ("きくこ", 14)
  ,Just ("きょうこ", 15)]

-- Hogeマンション2号棟2階に住んでいる女の子とその親友
  [("はなこ", "かずえ")
  ,("みつこ", "よしこ")
  ,("よしこ", "みつこ")
  ,("とうきちこ", "じゅんいちこ")
  ,("じゅんこ", "じょんこ")
  ,("きくこ", "さえ")
  ,("きょうこ", "ようこ")]

-- Aさんの調べた女の子とその元カレ
  [("かずえ", "きくお")
  ,("みつこ", "じゅんいちろう")
  ,("まつこ", "じょん")
  ,("ようこ", "ようた")
  ,("よしこ", "みつを")
  ,("じょんこ", "きよし")
  ,("たかこ", "じゅんいちろう")
  ,("さえ", "たかし")]