第 3 回 情報の構造を分析しよう レポート課題 氏名:高橋岬 学籍番号:c1110973 語学クラス:英語5 コース:環境サイエンスコース 1.A.takahashi misaki は以下の16進数を使って表すことが出来る。 t = 0x74 a = 0x61 k = 0x6b h = 0x68 s = 0x73 i = 0x69 m = 0x6d また、これらを10進数に変換すると t = 0x74 = 16*7+ 4 = 116 a = 0x61 = 16*6+ 1 = 97 k = 0x6b = 16*6+11 = 107 h = 0x68 = 16*6+ 8 = 104 s = 0x73 = 16*7+ 3 = 115 i = 0x69 = 16*6+ 9 = 105 m = 0x6d = 16*6+13 = 109 となる。 B.ここではきものをおぬぎください 「ここでは着物をお脱ぎ下さい」 「ここで履物をお脱ぎ下さい」 ゆでたまごをたべる 「ゆで卵を食べる」 「茹でた孫を食べる」 C.世界の臭い食べ物を hash 配列 stinky としました。 stinky の key と value は 臭い食べ物の名前 と 原材料, 食べられている国, 測定器によって数値化した臭い[Au(アラバスター)] にとりました。 その1: key 「シュール・ストレミング」に対して value 「ニシン, スウェーデン, 8070」 その2: key 「ホンオ・フェ」に対して value 「ガンギエイ, 韓国, 6230」 その3: key 「エピキュアーチーズ」に対して value 「缶チーズ, ニュージーランド, 1870」 その4: key 「キビヤック」に対して value 「アザラシ, アラスカ/グリーンランド, 1370」 その5: key 「くさや」に対して value 「ムロアジ, 日本・伊豆諸島, 1267」 これに対応する Hash の表し方は また、もう一つの表し方は {"シュール・ストレミング"=>["ニシン", "スウェーデン", 8070], "ホンオ・フェ"=>["ガンギエイ", "韓国", 6230], "エピキュアーチーズ"=>["缶チーズ", "ニュージーランド", 1870], "キビヤック"=>["アザラシ", "アラスカ/グリーンランド", 1370], "くさや"=>["ムロアジ", "日本・伊豆諸島", 1267]} 2.A.hash_ary_print.rb 作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("\n世界の臭い物辞典\n\n") # kterm に表示する文章 stinky = Hash.new # Hash配列を stinky とする stinky["シュール・ストレミング"] = ["ニシン", "スウェーデン", 8070] # Hash配列 stinky に入れる key と value stinky["ホンオ・フェ"] = ["ガンギエイ", "韓国", 6230] stinky["エビキュアーチーズ"] = ["缶チーズ", "ニュージーランド", 1870] stinky["キビヤック"] = ["アザラシ", "アラスカ/グリーンランド", 1370] stinky["くさや"] = ["ムロアジ", "日本・伊豆諸島", 1267] for food,item in stinky # Hash配列 stinky の key を food , value を item とする printf("%s : %d[Au] 原材料は%sで%sで食べられています \n", food, item[2], item[0], item[1]) # 変数を代入し kterm に表示する文章( [ ] は value で何個目なのかを示す) end print("\n※ Au(アラバスター) : 測定器によって数値化した臭いの単位\n") print("\t納豆 = 452[Au]\n") 実行結果 pan{c111097}% ./hash_ary_print.rb [~/Ruby] 世界の臭い物辞典 シュール・ストレミング : 8070[Au] 原材料はニシンでスウェーデンで食べられています ホンオ・フェ : 6230[Au] 原材料はガンギエイで韓国で食べられています エビキュアーチーズ : 1870[Au] 原材料は缶チーズでニュージーランドで食べられています キビヤック : 1370[Au] 原材料はアザラシでアラスカ/グリーンランドで食べられています くさや : 1267[Au] 原材料はムロアジで日本・伊豆諸島で食べられています ※ Au(アラバスター) : 測定器によって数値化した臭いの単位 納豆 = 452[Au] 考察 プログラムに書きこんだデータが対になるように代入されている。 よって、このプログラムは正しく起動している。 参考プログラム Ruby/hash_print.rb B.hash_ary_sort.rb 作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("\n世界の臭い物辞典\n\n") stinky = Hash.new stinky["シュール・ストレミング"] = ["ニシン", "スウェーデン", 8070] stinky["ホンオ・フェ"] = ["ガンギエイ", "韓国", 6230] stinky["エビキュアーチーズ"] = ["缶チーズ", "ニュージーランド", 1870] stinky["キビヤック"] = ["アザラシ", "アラスカ/グリーンランド", 1370] stinky["くさや"] = ["ムロアジ", "日本・伊豆諸島", 1267] for food, item in stinky printf("%s : %d[Au] 原材料は%sで%sで食べられています \n", food, item[2], item[0], item[1]) end print("\n※ Au(アラバスター) : 測定器によって数値化した臭いの単位\n") print("\t納豆 = 452[Au]\n") print("\n臭くない順に並び替え\n") stinky.keys.sort{|kusai, kusakunai| # stinky の key を並べ替える stinky[kusai][2]<=>stinky[kusakunai][2] # 数の小さい順にする }.each{|item| # 並び替えた key を item とする printf("%s\t%d[Au]\n", item, stinky[item][2]) } 実行結果 pan{c111097}% ./hash_ary_sort.rb [~/Ruby] 世界の臭い物辞典 シュール・ストレミング : 8070[Au] 原材料はニシンでスウェーデンで食べられています ホンオ・フェ : 6230[Au] 原材料はガンギエイで韓国で食べられています エビキュアーチーズ : 1870[Au] 原材料は缶チーズでニュージーランドで食べられています キビヤック : 1370[Au] 原材料はアザラシでアラスカ/グリーンランドで食べられています くさや : 1267[Au] 原材料はムロアジで日本・伊豆諸島で食べられています ※ Au(アラバスター) : 測定器によって数値化した臭いの単位 納豆 = 452[Au] 臭くない順に並び替え くさや 1267[Au] キビヤック 1370[Au] エビキュアーチーズ 1870[Au] ホンオ・フェ 6230[Au] シュール・ストレミング 8070[Au] 考察 このプログラムは臭さの数が大きい順に並んでいる。 実行結果では数の小さい順に並んでいるので、並び替えられたことがわかる。 よって、このプログラムは正しく起動している。 参考プログラム Ruby/hash_ary_print.rb Ruby/hash_sesame.rb C.hash_ary_calc.rb 作成したプログラム #!/usr/koeki/bin/ruby #coding: euc-jp print("\n世界の臭い物辞典\n\n") stinky = Hash.new au = 0 # アラバスターの平均を求めるための変数 stinky["シュール・ストレミング"] = ["ニシン", "スウェーデン", 8070] stinky["ホンオ・フェ"] = ["ガンギエイ", "韓国", 6230] stinky["エビキュアーチーズ"] = ["缶チーズ", "ニュージーランド", 1870] stinky["キビヤック"] = ["アザラシ", "アラスカ/グリーンランド", 1370] stinky["くさや"] = ["ムロアジ", "日本・伊豆諸島", 1267] for food,item in stinky printf("%s : %d[Au] 原材料は%sで%sで食べられています \n", food, item[2], item[0], item[1]) au += item[2] # item[2] を au に足し続ける end printf("\n臭さ平均は %d[Au]\n", au / stinky.length) # au(アラバスターの合計) を stinky の最大値(存在する数)で割る print("\n※ Au(アラバスター) : 測定器によって数値化した臭いの単位\n") print("\t納豆 = 452[Au]\n") 実行結果 pan{c111097}% ./hash_ary_calc.rb [~/Ruby] 世界の臭い物辞典 シュール・ストレミング : 8070[Au] 原材料はニシンでスウェーデンで食べられています ホンオ・フェ : 6230[Au] 原材料はガンギエイで韓国で食べられています エビキュアーチーズ : 1870[Au] 原材料は缶チーズでニュージーランドで食べられています キビヤック : 1370[Au] 原材料はアザラシでアラスカ/グリーンランドで食べられています くさや : 1267[Au] 原材料はムロアジで日本・伊豆諸島で食べられています 臭さ平均は 3761[Au] ※ Au(アラバスター) : 測定器によって数値化した臭いの単位 納豆 = 452[Au] 考察 計算は以下のようになる。 pan{c111097}% bc -l [~/Ruby] (8070+6230+1870+1370+1267)/5 3761.40000000000000000000 小数第一位は四捨五入で切り捨てられるため、平均は3761となる。 よって、このプログラムは正しく起動している。 参考プログラム Ruby/hash_ary_print.rb D.hash_ary_data.dat 作成したデータ シュール・ストレミング ニシン スウェーデン 8070 ホンオ・フェ ガンギエイ 韓国 6230 エピキュアーチーズ 缶チーズ ニュージーランド 1870 キビヤック アザラシ アラスカ/グリーンランド 1370 くさや ムロアジ 日本・伊豆諸島 1267 hash_ary_read.rb 作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp print("\n世界の臭い物辞典\n\n") stinky = Hash.new open("hash_ary_data.dat", "r") do |read| # hash_ary_data.dat を読みこみ(r) read とする while food = read.gets # read に含まれるデータを food とする if /(\S+)\s+(\S+)\s+(\S+)\s+(\d+)/ =~ food # food に含まれるデータの区分 stinky[$1] = [$2, $3, $4.to_i] # $1 を stinky の key とし、 $2, $3, $4.to_i を value とする( to_i は 整数として扱うことを示す) end end end for food, item in stinky printf("%s : %d[Au] 原材料は%sで%sで食べられています \n", food, item[2], item[0], item[1]) end print("\n※ Au(アラバスター) : 測定器によって数値化した臭いの単位\n") print("\t納豆 = 452[Au]\n") 実行結果 pan{c111097}% ./hash_ary_read.rb [~/Ruby] 世界の臭い物辞典 シュール・ストレミング : 8070[Au] 原材料はニシンでスウェーデンで食べられています ホンオ・フェ : 6230[Au] 原材料はガンギエイで韓国で食べられています エピキュアーチーズ : 1870[Au] 原材料は缶チーズでニュージーランドで食べられています キビヤック : 1370[Au] 原材料はアザラシでアラスカ/グリーンランドで食べられています くさや : 1267[Au] 原材料はムロアジで日本・伊豆諸島で食べられています ※ Au(アラバスター) : 測定器によって数値化した臭いの単位 納豆 = 452[Au] 考察 準備されたデータと実行結果で対になってるものが同じである。 よって、このプログラムは正しく起動している。 参考プログラム Ruby/hash_ary_print.rb Ruby/hash_read.rb E.hash_each_func.rb 作成したプログラム #!/usr/koeki/bin/ruby # coding: euc-jp print("\n世界の臭い物辞典\n\n") stinky = Hash.new au = 0 open("hash_ary_data.dat", "r") do |read| while food = read.gets if /(\S+)\s+(\S+)\s+(\S+)\s+(\d+)/ =~ food stinky[$1] = [$2, $3, $4.to_i] end end end for food, item in stinky printf("%s : %d[Au] 原材料は%sで%sで食べられています \n", food, item[2], item[0], item[1]) au += item[2] end printf("\n臭さ平均は %d[Au]\n", au / stinky.length) print("\n※ Au(アラバスター) : 測定器によって数値化した臭いの単位\n") print("\t納豆 = 452[Au]\n") 実行結果 pan{c111097}% ./hash_each_func.rb [~/Ruby] 世界の臭い物辞典 シュール・ストレミング : 8070[Au] 原材料はニシンでスウェーデンで食べられています ホンオ・フェ : 6230[Au] 原材料はガンギエイで韓国で食べられています エピキュアーチーズ : 1870[Au] 原材料は缶チーズでニュージーランドで食べられています キビヤック : 1370[Au] 原材料はアザラシでアラスカ/グリーンランドで食べられています くさや : 1267[Au] 原材料はムロアジで日本・伊豆諸島で食べられています 臭さ平均は 3761[Au] ※ Au(アラバスター) : 測定器によって数値化した臭いの単位 納豆 = 452[Au] 考察 データの読みこみ,平均値ともにD,Cと同様の結果が得られる。 よって、このプログラムは正しく起動している。 参考プログラム Ruby/hash_ary_read.rb Ruby/hash_ary_calc.rb 3.感想 商品や新聞記事などを検索した際におすすめや関連記事を出す仕組みは、検索エンジンに日本語や英語などの区切りを別の場所につけ、違う意味を持たせるようになっているのだと思う。 そうすれば 1.A. のような違う言葉も、おすすめや関連記事として扱うことが出来る。 4.参考文献 1.A. 西村 講義ノート 2012 基礎プログラミング I 第 5 回 (配列の構造) 「ASCII コード表」 http://roy/~madoka/2012/r1/05/r1_05_01_theme_01_asciicode.html (2012/10/12) 1.C./2. facebook Brali 世界の臭い食べ物ランキング https://www.facebook.com/photo.php?fbid=499079623436714&set=a.275268672484478.80014.273161056028573&type=1&theater (2012/10/12) ----------------------------- 高橋 岬 東北公益文科大学 2年 c111097@g.koeki-u.ac.jp -----------------------------