Created
January 28, 2017 08:07
-
-
Save jsakamoto/632bb2593d83b13090c5a20834cea1d8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
class Program | |
{ | |
class 牛めし | |
{ | |
public string 大きさ { get; set; } | |
public int カロリー { get; set; } | |
public override string ToString() => $"{大きさ} {カロリー}kcal"; | |
} | |
static 牛めし[] ラインアップ = new[] { | |
new 牛めし { 大きさ = "ミニ盛", カロリー = 507}, | |
new 牛めし { 大きさ = "並盛", カロリー = 709}, | |
new 牛めし { 大きさ = "大盛", カロリー = 945}, | |
new 牛めし { 大きさ = "特盛", カロリー = 1299} | |
}; | |
static void Main(string[] args) | |
{ | |
var カロリー上限 = 2000; | |
Console.WriteLine($"カロリー上限: {カロリー上限}"); | |
var 組み合わせの数々 = 組み合わせ列挙(new 牛めし[0], カロリー上限); | |
Console.WriteLine($"組み合わせの数: {組み合わせの数々.Count()}"); | |
var i = 0; | |
foreach (var 組み合わせ in 組み合わせの数々) | |
{ | |
i++; | |
var カロリー = 組み合わせ.Sum(_ => _.カロリー); | |
Console.WriteLine($"{i}: {string.Join(", ", 組み合わせ.Select(_ => _.大きさ))} ({カロリー}kcal)"); | |
} | |
var ベストセレクション = 組み合わせの数々 | |
.Select(組み合わせ => new | |
{ | |
内訳 = string.Join(", ", 組み合わせ.Select(_ => _.大きさ)), | |
カロリー = 組み合わせ.Sum(_ => _.カロリー) | |
}) | |
.OrderByDescending(組み合わせ => 組み合わせ.カロリー) | |
.First(); | |
System.Console.WriteLine(); | |
Console.WriteLine(ベストセレクション.内訳); | |
Console.WriteLine(ベストセレクション.カロリー); | |
} | |
static IEnumerable<牛めし[]> 組み合わせ列挙(牛めし[] 組み合わせ, int カロリー上限) | |
{ | |
var 新しい組み合わせの数々 = ラインアップ | |
.Select(牛めし => 組み合わせ.Concat(new[] { 牛めし }).ToArray()) | |
.Where(新しい組み合わせ => 新しい組み合わせ.Sum(_ => _.カロリー) <= カロリー上限) | |
.ToArray(); | |
foreach (var 新しい組み合わせ in 新しい組み合わせの数々) | |
{ | |
yield return 新しい組み合わせ; | |
foreach (var 新しい組み合わせから生まれたさらに新しい組み合わせ in 組み合わせ列挙(新しい組み合わせ, カロリー上限)) | |
{ | |
yield return 新しい組み合わせから生まれたさらに新しい組み合わせ; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment