講評: がんばりました。人工無能は、自分の例について 考察で Hash 配列で書いてみたりしたら、もう少し謎を 解けるようになったかもしれません。いそがばまわれ。 ---- 10 月 24 日 第 4 回レポート 「Value が hash 配列のとき」 学籍番号:c106XXXX 氏名:XXXXXXXX 語学クラス:XXXX語XX 系:社会系 1.A.V6のヒットCDを hash 配列 vsix とする。 vsix = {輪になって踊ろう => 愛なんだ, 愛なんだ=> サンダーバード, サンダーバード=> Darling, Darling =>HONEY BEAT, HONEY BEAT => ジャスミン} B."しごとおわらないしごと" ●しご と おわらない しごと (死語と終わらない仕事) ●しごと おわらない しごと (仕事終わらない仕事) ●しご と おわらない しごと (死後と終わらない仕事) ●しご と おわらない しごと (私語と終わらない仕事) 2. A◯考えた設定◯ 小さな町に辿り着いた主人公が、町の人々と触れ合いながら暮らして行くストーリー。 ◯もとにしたプログラムからの変更点◯ hash を game とした。 ◯作成したプログラム◯ #!/usr/koeki/bin/ruby $KCODE = 'e' game = {"電車を降り間違えて小さな村に辿り着いた" => "なんとなく土地を買った", "なんとなく土地を買った" => "犬が迷いこんできた", "犬が迷いこんできた" => "カブの種を買った", "カブの種を買った" => "広い土地にカブの種を蒔いてみた", "広い土地にカブの種を蒔いてみた" => "じゃがいもも植えたいと思い買い物に行った", "じゃがいもも植えたいと思い買い物に行った" => "雑貨屋で男の子と会った", "雑貨屋で男の子と会った" => "こんにちはと挨拶し種を買った", "こんにちはと挨拶し種を買った" => "種を蒔いて水をかけた", "種を蒔いて水をかけた" => "立派なカブとじゃがいもが実った", "立派なカブとじゃがいもが実った" => "男の子が分けてもらいにきた", "男の子が分けてもらいにきた" => "分けてあげたら友達になれた", "分けてあげたら友達になれた" => "誘われて町のお祭りに参加した", "誘われて町のお祭りに参加した" => "他にも友達が出来た!!", "他にも友達が出来た!!" => "パーティをするため家を増築した", "パーティをするため家を増築した" => "皆でパーティをした", "皆でパーティをした" => "男の子からイヤリングをもらった", "男の子からイヤリングをもらった" => "お返しにクッキーをあげた", "お返しにクッキーをあげた" => "告白された", "告白された" => "教会で式をあげることになった", "教会で式をあげることになった" => "村中の人から祝福され結婚した。"} for premise in game.keys if game.value?(premise) == false printf("%s.そして",premise) end end for conclusion in game.values if game.key?(conclusion) == false printf("%s\n",conclusion) end end ◯実行画面◯ irsv{c106052}% ./strawrich-exist.rb [~/Ruby] 電車を降り間違えて小さな村に辿り着いた.そして村中の人から祝福され結婚し た。 ◯考察◯ 最初の文と最後の文がつながった。 ◯参考文献◯ まどか先生のホームページ http://roy/~madoka/2007/r2/04/04-03-hash-rich.html B◯考えた設定◯ 父親を探して旅に出る少年の物語。いろんな人に会って、道具を手に入れ父親 に辿り着く。 ◯作成したプログラム◯ #!/usr/koeki/bin/ruby syounen = {"村長" => ["パン","小麦","商人"], "商人" => ["地図","パン","旅人"], "旅人" => ["お金","地図","探偵"], "探偵" => ["情報","お金","お父さん"]} tabi = "村長" print("ある小さな町に一人の少年が暮らしていた。\n") print("突然、大好きな母が病に伏せってしまった。\n") printf("父を探して旅に出ると決めた少年は%sの元へ行った。\n",tabi) while true if tabi == "お父さん" break end print("少年:「お父さんを探してるんだ!!」\n") printf("%s: 「それなら%sが必要だろう。その%sと交換してあげるよ。%sへ会いに行ってごらん。」\n",tabi,syounen[tabi][0],syounen[tabi][1],syounen[tabi][2]) printf("そこで少年は%sに会いに行った。\n",syounen[tabi][2]) tabi = syounen[tabi][2] end printf("少年は都市の豪邸で%sを見つけることが出来た。\n",tabi) ◯もとからの変更点◯ 話が通るように筋道を立てた。また、 value を一つ増やした。 ◯実行結果◯ irsv{c106052}% ./hash-while.rb [~/Ruby] ある小さな町に一人の少年が暮らしていた。 突然、大好きな母が病に伏せってしまった。 父を探して旅に出ると決めた少年は村長の元へ行った。 少年:「お父さんを探してるんだ!!」 村長: 「それならパンが必要だろう。その小麦と交換してあげるよ。商人へ会いに行ってごらん。」 そこで少年は商人に会いに行った。 少年:「お父さんを探してるんだ!!」 商人: 「それなら地図が必要だろう。そのパンと交換してあげるよ。旅人へ会いに行ってごらん。」 そこで少年は旅人に会いに行った。 少年:「お父さんを探してるんだ!!」 旅人: 「それならお金が必要だろう。その地図と交換してあげるよ。探偵へ会いに行ってごらん。」 そこで少年は探偵に会いに行った。 少年:「お父さんを探してるんだ!!」 探偵: 「それなら情報が必要だろう。そのお金と交換してあげるよ。お父さんへ会いに行ってごらん。」 そこで少年はお父さんに会いに行った。 少年は都市の豪邸でお父さんを見つけることが出来た。 ◯考察◯ [0][1][2]と分けないと上手く噛み合わなかった。最初は[0]というのを忘れ ていた。 ◯参考文献◯ まどか先生のホームページ http://roy/~madoka/2007/r2/04/04-04-hash-in-hash.html C◯考えた設定◯ 医者に症状を伝えると薬を出してくれる。ただしぼったくり。 ◯プログラム◯ #!/usr/koeki/bin/ruby $KCODE = 'e' vocab = Hash.new STDERR.printf("どうしましたか。\n") syozyo = gets.chomp while true # p syozyo if /^(\S+)(が)(\S+)(|の|だ|です)/ =~ syozyo # p syozyo topic = $1 keyword = $3 end vocab[keyword] = topic # vocab[topic] = keyword # p vocab vocab.each{ |check| if (vocab.value?(topic) == true && check[0] != keyword) printf("%sは%sだね。あ、薬に保険かからないからね。\n",check[0],keyword) print("他には何かありますか?\n") break else printf("%sってどんな感じ?\n",check[1]) break end } syozyo= gets.chomp! end ◯もとからの変更点◯ hash を syozyo とした。 ◯結果◯ irsv{c106052}% ./hash-doctor.rb [~/Ruby] どうしましたか。 頭が痛い 頭ってどんな感じ? 頭がガンガンします 痛いはガンガンしますだね。あ、薬に保険かからないからね。 他には何かありますか? 喉が痛い 喉ってどんな感じ? 喉がイガイガ 痛いはイガイガだね。あ、薬に保険かからないからね。 他には何かありますか? ◯考察◯ 入力を上手くしないと正常に働かなかった。 ◯参考文献◯ まどか先生のホームページ http://roy/~madoka/2007/r2/04/04-05-hash-chatterbot.html 3.先生のホームページを参考にしながらプログラムを作成した。プログラム自 体は難しかったが作成するには楽しかった。4つの内、3つしかプログラムが 出来なかったので悔しかったので、来週はもっと粘りたい。