-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
59 lines (48 loc) · 1.45 KB
/
Copy pathProgram.cs
File metadata and controls
59 lines (48 loc) · 1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using BackpackingChallenge;
using System.Diagnostics;
var items = new List<Item>
{
new("Item 1", 5000f, 1f, 30),
new("Item 2", 80000f, 0.5f, 4),
new("Item 3", 500f, 0.5f, 2)
};
var backpack = new Backpack(100_000, items);
ICalculator calc;
calc = new HeavyCalculator(backpack);
//calc = new GreedyCalculator(backpack);
//calc = new Calculator(backpack);
var sw = Stopwatch.StartNew();
var solution = (await calc.CalcAsync()).Where(x => x != null).GroupBy(x => x.Name).ToList();
sw.Stop();
Console.WriteLine();
var totalVolume = 0f;
var usedItems = new Dictionary<string, int>();
foreach (var g in solution)
{
var item = g.First()!;
var count = g.Count();
var totalItemVolume = item.Volume* count;
usedItems.Add(item.Name, count);
Console.WriteLine($"{item.Name}, {item.Volume}, {count}, {totalItemVolume}");
totalVolume += totalItemVolume;
}
Console.WriteLine($"total volume: {totalVolume}");
Console.WriteLine();
Console.WriteLine("not in list:");
totalVolume = 0;
foreach (var item in items)
{
var unusedCount = item.Count;
if (usedItems.TryGetValue(item.Name, out var usedCount))
{
unusedCount -= usedCount;
}
if (unusedCount > 0)
{
Console.WriteLine($"{item.Name}, {item.Volume}, {unusedCount}");
totalVolume += item.Volume * unusedCount;
}
}
Console.WriteLine($"total unused volume: {totalVolume}");
Console.WriteLine();
Console.WriteLine($"ETA: {sw.Elapsed:d\\:h\\:mm\\:ss} s.");