=====1===== (2)を四番まで =====2===== food = Hash.new foodex = Hash.new open("foods.txt","r:utf-8") do |foods| while line = foods.gets if /(\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)/ =~ line food[$1] = [$2.to_i,$3.to_i,$4.to_i,$5] foodex[$1] = [$2.to_i,$3.to_i,$4.to_i,$5] end end end print("商品選択 商品A:0 商品B:1 商品C:2\n") x = gets.chomp!.to_i print"-店舗コード-+-商品A-+-商品B-+-商品C--+-立地---\n" i = 0 a = 0 b = 0 o = 0 s = 0 r = 0 e = 0 top10 = Hash.new for n in food.keys.sort {|a, b| food[b][x] <=> food[a][x]} if i < 10 result = sprintf("%10s%8d%8d%8d%8s\n", n, food[n][0], food[n][1], food[n][2], food[n][3]) puts result i += 1 if food[n][3] == "住宅街A" a += 1 elsif food[n][3] == "住宅街B" b += 1 elsif food[n][3] == "オフィス街" o += 1 elsif food[n][3] == "学校" s += 1 elsif food[n][3] == "幹線道路" r += 1 else e += 1 end end end besum = 0 afsum =0 if a >= 5 print("この商品は住宅街Aの店舗で売り上げが多いため、高齢者に絞った広告を推奨する。\n") for p in food.keys do if food[p][3] == "住宅地A" foodex[p][x] = food[p][x] * 1.5 else foodex[p][x] = food[p][x] * 1.1 end besum += food[p][x] afsum += foodex[p][x] end printf("高齢者をターゲットとして絞った場合売り上げが%d個から%d個へ増加することが予想される。\n", besum,afsum) elsif b >= 5 print("この商品は住宅街Bの店舗で売り上げが多いため、若者に絞った広告を推奨する。\n") for p in food.keys do if food[p][3] == "住宅地B" foodex[p][x] = food[p][x] * 1.5 else foodex[p][x] = food[p][x] * 1.1 end besum += food[p][x] afsum += foodex[p][x] end printf("若者をターゲットとして絞った場合売り上げが%d個から%d個へ増加することが予想される。\n", besum,afsum) elsif o >= 5 print("この商品はオフィス街の店舗で売り上げが多いため、会社員に絞った広告を推奨する。\n") for p in food.keys do if food[p][3] == "オフィス街" foodex[p][x] = food[p][x] * 1.5 else foodex[p][x] = food[p][x] * 1.1 end besum += food[p][x] afsum += foodex[p][x] end printf("会社員をターゲットとして絞った場合売り上げが%d個から%d個へ増加することが予想される。\n", besum,afsum) elsif s >= 5 print("この商品は学校の店舗で売り上げが多いため、学生に絞った広告を推奨する。\n") for p in food.keys do if food[p][3] == "学校" foodex[p][x] = food[p][x] * 1.5 else foodex[p][x] = food[p][x] * 1.1 end besum += food[p][x] afsum += foodex[p][x] end printf("学生をターゲットとして絞った場合売り上げが%d個から%d個へ増加することが予想される。\n", besum,afsum) else print("ターゲットを絞る必要がない。\n") for p in food.keys do foodex[p][x] = food[p][x] * 1.15 besum += food[p][x] afsum += foodex[p][x] end printf("売り上げは%d個から%d個へ増加することが予想される。\n", besum,afsum) end =====3===== 1. 商品選択 商品A:0 商品B:1 商品C:2 0 -店舗コード-+-商品A-+-商品B-+-商品C--+-立地--- 0025 1405 501 1473 住宅街A 0002 1393 1340 1206 オフィス街 0014 1329 950 1483 住宅街A 0008 1326 868 858 住宅街A 0004 1260 1362 825 オフィス街 0027 1218 322 858 住宅街A 0020 1190 1307 179 オフィス街 0021 1145 1375 1416 住宅街B 0007 1143 555 1186 幹線道路 0010 1137 924 1084 住宅街B ターゲットを絞る必要がない。 売り上げは24727個から28436個へ増加することが予想される。 2. 商品選択 商品A:0 商品B:1 商品C:2 1 -店舗コード-+-商品A-+-商品B-+-商品C--+-立地--- 0024 175 1495 446 オフィス街 0021 1145 1375 1416 住宅街B 0004 1260 1362 825 オフィス街 0002 1393 1340 1206 オフィス街 0017 849 1321 1214 住宅街B 0020 1190 1307 179 オフィス街 0023 348 1268 1017 幹線道路 0029 509 1168 595 住宅街B 0011 394 1134 545 幹線道路 0006 550 1024 593 オフィス街 この商品はオフィス街の店舗で売り上げが多いため、会社員に絞った広告を推奨する。 会社員をターゲットとして絞った場合売り上げが24367個から29521個へ増加することが予想される。 =====4===== 1~25はopenメソッドを使いファイルのデータをハッシュに入力し、これから使う変数を指定している。 27ではsortを使い、ハッシュを並べ替え、28~34で上位10個だけが表示されるようにしている。 36~50ではトップ10店舗のうち同じ店舗が何個あるか確認している。 57以降は36~50で確認した店舗数を条件としたif分でどの客層をターゲットとするかをprintで提案した。 さらに課題4番の条件をもとに、配列と倍率を使って計算し合計を求めた。 最後にもとの売り上げ数を期待売り上げ数をprintで表示した。 =====5===== キーとバリューを使った配列は苦手。 値を何度も使っているので変数化、条件分岐をつかってもっと短く書けそうだったが、分からなくなったのであきらめた。