もっと Lambda その15

Java

今日のエントリーも Java8 ネタです。

このところ Java8 のエントリーがほとんどになってきたけど Lambda をはじめ、新機能がよく理解できてないので慣れることを目標としてます。(^_^;)

今回は無理矢理 Java8 を使って有名なナップサック問題を解くプログラムを創ってみました。

それでは下記のようなデータの人たちがいるとします。

<– Person  –>
柴田 恭平, 61歳, Gender: MALE   体重 : 70   評価 : 8
壇 蜜, 32歳, Gender: FEMALE   体重 : 60   評価 : 6
北川 景子, 26歳, Gender: FEMALE   体重 : 55   評価 : 7
綾瀬 はるか, 28歳, Gender: FEMALE   体重 : 50   評価 : 4
佐々木 希, 25歳, Gender: FEMALE   体重 : 48   評価 : 9
剛力 彩芽, 20歳, Gender: FEMALE   体重 : 45   評価 : 6
小栗 旬, 30歳, Gender: MALE   体重 : 65   評価 : 3
堀北 真希, 24歳, Gender: FEMALE   体重 : 45   評価 : 10
武井 咲, 19歳, Gender: FEMALE   体重 : 50   評価 : 5
市原 隼人, 26歳, Gender: MALE   体重 : 67   評価 : 2
深田 恭子, 30歳, Gender: FEMALE   体重 : 50   評価 : 8

あなたはヨットをもっていてクルージングを楽しもうとしています。

上記の人たちが「是非ご一緒させてください」と申し出てきました。

ヨットの制限であと 180 キログラムまでしか乗船できません。

そこであなたは、女性を同伴させることにします。

重量制限のあるなか、あなたは女性の評価値の総和が最大になるように同伴メンバーを選ばなくてはなりません。

今回はヨットであり、希望者も少ないのでわざわざプログラムを組む必要はないでしょう。

しかし、ある日突然大金持ちになって豪華客船でクルージングなんてことがあるかもしれません。(ヲヒ

プログラムの内容は 0-1 ナップサック問題 動的計画法アルゴリズムで良く知られているから解説はしません。

Java8 だとこんな風に組めるのかくらいに斜めにみてください。

実行結果は下記のようになります。

合計評価 : 27
佐々木 希    年齢 : 25    Gender : FEMALE   体重 : 48   評価 : 9
堀北 真希    年齢 : 24    Gender : FEMALE   体重 : 45   評価 : 10
深田 恭子    年齢 : 30    Gender : FEMALE   体重 : 50   評価 : 8

間違っているかもしれません。そのときは優しくご指摘くださいませ。

Java8 に詳しい方は「ここはこうすれば良いのにとかあればコソッとコメント入れといてくれると嬉しいです。」 なんてね。(^_^)

*注意* 2013年7月2日 API 使用変更に対応、ついでに選んだ人の情報取得方法を Optional と Person を使う二種類記述しました。

cludia_2013_06_08_001

Hatena タグ: