mirror of
https://github.com/jcreek/advent-of-code.git
synced 2026-07-12 18:53:47 +00:00
feat(*): Update 2021-06 files (part 1 working, part 2 not I think, but unable to test on laptop due to CPU limitations)
This resolves the out of memory issue, but still takes too long to run. It's either CPU or IO bound.
This commit is contained in:
+71
-14
@@ -23,18 +23,18 @@
|
||||
Console.WriteLine($"Day: {currentDay} - there are {lanternFishPopulation.Count()} lantern fish");
|
||||
for (int i = 0; i < lanternFishPopulation.Count; i++)
|
||||
{
|
||||
switch(lanternFishPopulation[i])
|
||||
switch (lanternFishPopulation[i])
|
||||
{
|
||||
case 0:
|
||||
// its internal timer would reset to 6, and it would create a new lanternfish with an internal timer of 8.
|
||||
lanternFishPopulation[i] = 6;
|
||||
// Adding a new one with 9 though it should be 8 as this loop will catch new fish and decrement them. It's dirty, but fast way to solve the issue
|
||||
lanternFishPopulation.Add(9);
|
||||
break;
|
||||
default:
|
||||
// remove one day from the fish's countdown
|
||||
lanternFishPopulation[i] -= 1;
|
||||
break;
|
||||
case 0:
|
||||
// its internal timer would reset to 6, and it would create a new lanternfish with an internal timer of 8.
|
||||
lanternFishPopulation[i] = 6;
|
||||
// Adding a new one with 9 though it should be 8 as this loop will catch new fish and decrement them. It's dirty, but fast way to solve the issue
|
||||
lanternFishPopulation.Add(9);
|
||||
break;
|
||||
default:
|
||||
// remove one day from the fish's countdown
|
||||
lanternFishPopulation[i] -= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,58 @@
|
||||
}
|
||||
}
|
||||
|
||||
static void SimulateLanternFishBigDatasets(ref List<int> lanternFishPopulation, int daysToSimulate)
|
||||
{
|
||||
// A lanternfish that creates a new fish resets its timer to 6, not 7 (because 0 is included as a valid timer value). The new lanternfish starts with an internal timer of 8 and does not start counting down until the next day.
|
||||
|
||||
// Store dataset into db
|
||||
using (var db = new FishContext())
|
||||
{
|
||||
foreach (var fish in lanternFishPopulation)
|
||||
{
|
||||
db.Add(new Fish { InternalTimer = fish });
|
||||
db.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
int currentDay = 1;
|
||||
|
||||
while (currentDay <= daysToSimulate)
|
||||
{
|
||||
using (var db = new FishContext())
|
||||
{
|
||||
int fishCount = db.Fishes.Count();
|
||||
Console.WriteLine($"Day: {currentDay} - there are {fishCount} lantern fish");
|
||||
|
||||
List<int> fishIds = db.Fishes.Select(x => x.FishId).ToList();
|
||||
|
||||
foreach (int fishId in fishIds)
|
||||
{
|
||||
Fish fish = db.Fishes.First(x => x.FishId == fishId);
|
||||
|
||||
switch (fish.InternalTimer)
|
||||
{
|
||||
case 0:
|
||||
// its internal timer would reset to 6, and it would create a new lanternfish with an internal timer of 8.
|
||||
fish.InternalTimer = 6;
|
||||
// Adding a new one with 9 though it should be 8 as this loop will catch new fish and decrement them. It's dirty, but fast way to solve the issue
|
||||
db.Add(new Fish { InternalTimer = 9 });
|
||||
break;
|
||||
default:
|
||||
// remove one day from the fish's countdown
|
||||
fish.InternalTimer -= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
db.SaveChanges();
|
||||
}
|
||||
|
||||
currentDay += 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void Part1(List<int> lanternFish)
|
||||
{
|
||||
SimulateLanternFish(ref lanternFish, 80);
|
||||
@@ -51,11 +103,16 @@
|
||||
|
||||
static void Part2(List<int> lanternFish)
|
||||
{
|
||||
SimulateLanternFish(ref lanternFish, 256);
|
||||
SimulateLanternFishBigDatasets(ref lanternFish, 256);
|
||||
|
||||
// TODO - redo this using a database for large datasets, and entity framework, so as to avoid the HUGE memory usage
|
||||
|
||||
Console.WriteLine($"After 256 days there are {lanternFish.Count()} lantern fish.");
|
||||
using (var db = new FishContext())
|
||||
{
|
||||
int fishCount = db.Fishes.Count();
|
||||
Console.WriteLine($"After 256 days there are {fishCount} lantern fish.");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user