Day 24. Overall pleased with this solution.
Definitely could use some optimization in not creating so many new maps, but runtime is acceptable for now.
This commit is contained in:
@ -74,6 +74,9 @@
|
|||||||
<None Update="23input.txt">
|
<None Update="23input.txt">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
<None Update="24input.txt">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
292
24input.txt
Normal file
292
24input.txt
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
nwswswnenwswsweswseswswnwswsweswsw
|
||||||
|
swseswsenwswnenwsesesenwseseesesenwenw
|
||||||
|
seswseswseswswseswwswneseswsese
|
||||||
|
nwwwsewenwwwwswwwe
|
||||||
|
seswwwseeseseseseseseswseswneneesew
|
||||||
|
eenewewweseneneneenene
|
||||||
|
nenenenenwnwwswseenwwneneenwneswnwnw
|
||||||
|
swneswwswwnewwwswwswwww
|
||||||
|
seseweewwnwwnwwsewwnwnenewnwne
|
||||||
|
nwwewewnwnwwwwnwswnwwsenwneww
|
||||||
|
sewnewswswwsenwsenenwneswswsesweenw
|
||||||
|
nwwnwnenwnwwnwsewnwseewsenwsesenwnwnw
|
||||||
|
enwnenwnwswnwnenesenwneswnenwnenwwnenese
|
||||||
|
neneneneneswneneenwenenenenenenewnwse
|
||||||
|
nwenwswsenwwnwwnwwnwwnwneww
|
||||||
|
wnwnwnwnwnenenwnesenwnwnwneswnwnenwsewne
|
||||||
|
wnwnwnwsesenwwwnenewnwnwnwnww
|
||||||
|
wnewwwswwwwwsw
|
||||||
|
nenwnenenewnenwnesenesenewnenenw
|
||||||
|
eeseeseeesenwesesese
|
||||||
|
seneseneneeeneewwswenweeneeneenene
|
||||||
|
wswsesenwseeeeseseseseseswnewseswnwnwse
|
||||||
|
swnenewwneneneneneneneseenenenenenee
|
||||||
|
swenwwwwewweswswwswswwswwnww
|
||||||
|
neswnenenenwswnwnwnwneneneneewnwneenw
|
||||||
|
eeesewswseenweewnwweeseene
|
||||||
|
swnwseeswneenwsesenwseeswnw
|
||||||
|
enwwnwwwswnwnwnenenenenwnenwnesesesenw
|
||||||
|
swwwwwwnewnewewwnewwsesw
|
||||||
|
eneseswwneseewnwnweswswwwnenwnenwne
|
||||||
|
sewsesesesenwnesewnweeswswswneseswwsw
|
||||||
|
nwneswnwnenenwnenweneswnesenwswnewnw
|
||||||
|
seneneseseseewsenenwswsewseswswsenesw
|
||||||
|
nwneseneenesewwnesenene
|
||||||
|
swwnwwsenwewswneewnweweswewnewse
|
||||||
|
nenenwseneswnwnwnwsenwwnwnenwnenenenw
|
||||||
|
neneneswneneenweesweneeeewenenw
|
||||||
|
swswswsenewseseseewswnesewswswseseswnw
|
||||||
|
eswwnwnwwswnwwwnwnwewwnw
|
||||||
|
swneseswenwseswsesesenwneseseseseswsese
|
||||||
|
nesenesenewnenenenwsenewnewsenwwnwne
|
||||||
|
swswseswseseswswnwseswsenesweswsw
|
||||||
|
swnwnwwswwswswswswwswsweneseswswnewne
|
||||||
|
nenenenenenwswneneswsenwnesenenenwnenenwnee
|
||||||
|
newnwneneeswneswnenwwsenenwneneenwnenw
|
||||||
|
swneeesesenesesewseseeesewse
|
||||||
|
nenwnwswseeenwseswneenewwene
|
||||||
|
enenenenenenenwnenesw
|
||||||
|
nwwswwwseneewwwwnwwwswnenweww
|
||||||
|
sewseneeesenwesesesesewneswseeew
|
||||||
|
swnwnweneswneneseswnwnenenenenenenwnese
|
||||||
|
nwsenwneseswwewnweswneewnwnwnwenw
|
||||||
|
wsenwwnwwnwenwwwnweswnw
|
||||||
|
swswwewnwnenesesewsesewneesewnene
|
||||||
|
neswnwwseswenenenwneseneeneenewsesww
|
||||||
|
nwwwsesenesesesesesenwseneeswnwsenewse
|
||||||
|
wnwswneswswswsweswne
|
||||||
|
enesenweneswsewneenenenwswnewnwnwsw
|
||||||
|
enenwnwswsenenwnwswnwwnwnwnwnwwnwwnw
|
||||||
|
wswswswwswwsesenwnwswnewsewswswnese
|
||||||
|
swwswneswswswneswswswsw
|
||||||
|
swswseswsesesenwseeeswseseswnwseseswnewsw
|
||||||
|
nwseeseseseswwesesesesesesesenesesenwe
|
||||||
|
swnwewewwwnwnwwnwnenwwwnwsewnw
|
||||||
|
swswswswnwswsenwswwweswwswsw
|
||||||
|
swenwswnesenwswesweseswwnewswenwswswnw
|
||||||
|
enewswnwwwwswswneewneewsw
|
||||||
|
nwsewnenwnwwnwnwnwenwnwnwnwnwswsesenwnw
|
||||||
|
wneeseseswseseesenweeseenwsenesewwne
|
||||||
|
senenwnwnenwnwnwnewnwnwnwnwenwnwswnesw
|
||||||
|
seseseseeseseseneseewse
|
||||||
|
neneeeneewweeneeneesesw
|
||||||
|
swswnwseswswwneseswswswswnwneswseswwswe
|
||||||
|
wsenenwwwseseeseswsewneneneneseswse
|
||||||
|
seeseeneeeswswseseenwneewneeseese
|
||||||
|
eeseeeeswsenweweenwneeewseene
|
||||||
|
wnenewnenenenesesenewnwnwnenenenwsenwne
|
||||||
|
neneneeswswnenenenenwenwnenwneneneswne
|
||||||
|
nwnwnwnwswwwnwnwwneenwwwswnwnwsenw
|
||||||
|
eneweneeneneenesweneneneesweswnww
|
||||||
|
neseseseseswsesesenwseseswseseseseswnew
|
||||||
|
seseseswswseseswsewne
|
||||||
|
swnwnewsweswswweswswswswwswswsesenwswsw
|
||||||
|
neewnwswnwswswewswnenwseswnwswswswsesw
|
||||||
|
esewnewwwwwswwwwwnwseewwwne
|
||||||
|
swswswnwswesweswswsweswswswswsewswnwsw
|
||||||
|
swneswswwnwswswswwswneswsweewswswsw
|
||||||
|
swwwesesewwswseneseneseseseeswsesesw
|
||||||
|
nwswnwnwnweswwnwnwenwnwnwnwe
|
||||||
|
nwwwnenwseseswnewsenesesewneswswwwe
|
||||||
|
nwnenenenwsenwwnenwnewseneewse
|
||||||
|
wwnwswnewwwwnw
|
||||||
|
swneneswnesenenenewnesenwewnewnenene
|
||||||
|
nenwneeneneesenwnesenewsw
|
||||||
|
neseseeewswweesesese
|
||||||
|
seenwsesesenwseeseseseseesesese
|
||||||
|
wwwwwswnewswswwwwnwswnewesw
|
||||||
|
swswwswswseswsenwwwseneeneswseswnwneese
|
||||||
|
nesenweseswesewsenwwsesesesesesee
|
||||||
|
neswseswsenwsweseneswswswseswswswswswwwnw
|
||||||
|
sesesewswseneswnwswswswswnwsesenwswesesw
|
||||||
|
nwwswesenewnwswswnwswwnwenenwne
|
||||||
|
eeeeneeweeeneneseeeenw
|
||||||
|
seseneseswwsewnwneseeeseneseswsenesw
|
||||||
|
nwnwneenwwnewewenwwnwnenwsesenenenw
|
||||||
|
neneneneswnenenwneneneeneneswneswswnene
|
||||||
|
wswseewneneseenewsesewwwswnwnwnwnwnw
|
||||||
|
nwnwnwnwnwnenwnwswnwnenenwsenwe
|
||||||
|
swnwnweswnwseeeeenwsesewswwnenesw
|
||||||
|
ewswseswnwwnwwnwnwsweweeenwnenw
|
||||||
|
wnewwnwneswsenwsewwenewnwnwwwww
|
||||||
|
nwnenenenewnwsenwnenwnwnesewnenwnwnwnwse
|
||||||
|
swsenewneswneneneenwnw
|
||||||
|
sweseswneeeneesenwnwneneenwnesenww
|
||||||
|
seswswneswswseswwseswnenwseseneswswswswse
|
||||||
|
nenwsenenwneneewneneneneneneswswene
|
||||||
|
wsewwwwwnewwwwwwwnw
|
||||||
|
swswseseeswswswwswsesesesewneneseswnw
|
||||||
|
nenweswnwnenenwnwnenwnewsewwnenenwe
|
||||||
|
neeewnenwnwnwnwnwsenwnwnwswwnwnwnwnw
|
||||||
|
swsenwswswneseswenewewsenwwnesewsenwne
|
||||||
|
wswwswwweeswswwswswnwnwnwene
|
||||||
|
nwneneneneseswnenwnesweswnenenwnenesene
|
||||||
|
wseseswswsewseneeswneewswseseswsene
|
||||||
|
swsenweeneswswsesesene
|
||||||
|
weswswsenewnwwewwswswenwsewnwnesw
|
||||||
|
neswnewsenwewnesenwsweseeseene
|
||||||
|
seswswseseswwneswseenweswswswswswnwnw
|
||||||
|
eseswswsweeswseswswsenwswswswswsewsenw
|
||||||
|
enewnwswsesweneswseswseenwsewnwsee
|
||||||
|
neseneswseweseenweeweesweeenew
|
||||||
|
wnwenesenwswnwnewsenwnwswnwnesewnwwese
|
||||||
|
swnwswswseeseseeneswswswswswswswswsww
|
||||||
|
wsesewwneseswswswseswnwswseeswneswewsw
|
||||||
|
nwnenenwnwenwswnwnenewnwnwswnwsesenwnww
|
||||||
|
eswseseswsewseseswsesesesenese
|
||||||
|
nwswswseeswswseswswsenweseewnwsesese
|
||||||
|
seseeeeenewswnwwnwswsenwnenwnwnwwsesw
|
||||||
|
neeweewnenwneenwnwsenwsenwsesesene
|
||||||
|
nenwseeseenwenwseeswswnweeeneeswse
|
||||||
|
swswseswswswswswenwwwswnwswneswswesww
|
||||||
|
swswneswnwswswswswswseewswewswwnene
|
||||||
|
nwneeneenwnewswnenwnenwswnenwnwnwenwne
|
||||||
|
nenenenenwnenesweneseneneneswnwnenenenw
|
||||||
|
ewseesweenweneseenwesweewwew
|
||||||
|
eseseeseseseeweesewseesesene
|
||||||
|
wneeneneenwweswenwwseneeenesesese
|
||||||
|
nwnwnenesenenenwwnwwnwsenwnwnwnenenwse
|
||||||
|
senewnwseesenwwseseswesewesesenenesw
|
||||||
|
seneeewnwwwsewnenwewnwswswse
|
||||||
|
neswwewwwwwwwswsweewwwww
|
||||||
|
wwsweswwswewwsenewwswwswswswnw
|
||||||
|
nwnwnwnwneneswnwsenwenwnwnwneenewnwnw
|
||||||
|
senwwnwneneeswneneeeweeenenenesw
|
||||||
|
nweneswneneswneenwnewnwnwnwnwnenenwnesenw
|
||||||
|
sewneswnweweswnesewnwwwwnewswsww
|
||||||
|
wneswswswwswsewswwswswswewswsw
|
||||||
|
senwneseswseeseswneseswneswswswswswsenw
|
||||||
|
ewwsweneenwsene
|
||||||
|
seeneeseeenewnwewswnwswswsesenww
|
||||||
|
wsesewwsewwswwnewswwnewwwwwnew
|
||||||
|
wnwsewwwnwwnewsenwnwnewnwnesenwnw
|
||||||
|
swswseseswsenewsesesesesesesesenwsenwse
|
||||||
|
nwwwwneswwwwwseswewwwwnenew
|
||||||
|
seewneeeeseenwsewenwsesw
|
||||||
|
nwnenwwneneseswnwew
|
||||||
|
neeenwenwesweeeeeeeseesw
|
||||||
|
nwnwwswewswnwnenwnwnwnwsenene
|
||||||
|
ewnwsesesesenwswesesesewswseesesese
|
||||||
|
neenwwsewsenwseeeeewwswneeneswne
|
||||||
|
swsenwseeswsewnwweneseneseeswsesesee
|
||||||
|
swsenwnweseswseenwseswseseseenwwsesene
|
||||||
|
eseenenenwneswnwnwneeeeneseneenew
|
||||||
|
swnenesweeeswneswenenwswneeeeseswse
|
||||||
|
sewsesesweeeeweeneeneseswesee
|
||||||
|
swwwwwwewnwnwwwewwwwnw
|
||||||
|
seswswenenwnweeneneneneswwenenenenenwne
|
||||||
|
seseeeseswwneeesenww
|
||||||
|
nwnwnwswneenwnenwneneswnwswnwsw
|
||||||
|
swswswswseswneswswswswnwseswsww
|
||||||
|
wnwwnwwsenwnwwneenwnwnwsesenwnwenww
|
||||||
|
eseeseeesewseseswesesenwnenwesese
|
||||||
|
swswnenwnenenwnenwenenenwenenwnwswnwnwswne
|
||||||
|
newwsewwwnwwnewsew
|
||||||
|
swswswseseswwseswswneswneneswnwnwswsesw
|
||||||
|
eeeesenwswseeeeewwseeneeeee
|
||||||
|
neswswseswneeswswneswswseswswww
|
||||||
|
neseeesesesewnwseswsesesewseseswwnwsee
|
||||||
|
nwnwnesenenwnwsesweswswenwnwnwewnwwse
|
||||||
|
eswswswswswseeeswwseewsenenwwsesww
|
||||||
|
newwnesesesweeneewwenee
|
||||||
|
swnwswwnwswseeneeseeneswswenwswwnesw
|
||||||
|
sesesweeseswseeseseenweseeswnesenenw
|
||||||
|
wwwwwwseewwwwwwwwswwnesene
|
||||||
|
swnwnwnenwesweswswsenwwneneenwnwnww
|
||||||
|
swnwnwewenwenweenwnwswwwnwnwnwww
|
||||||
|
wsweswswswswnwswswsweswswswswswswswne
|
||||||
|
neneneswwnwnenwnwneswneenwsesenene
|
||||||
|
swewswseneswnwswseswswseseenwswswsee
|
||||||
|
enweeesweseseweeeeeenwswee
|
||||||
|
sewseseswnenesewenwneeneneneewnewnew
|
||||||
|
esenwswewneswneswnwnenwnwnwenwenwnw
|
||||||
|
swneswwswwswswswwwwenwswswsweswsw
|
||||||
|
newseswseswnwseseneeswsenwwswnw
|
||||||
|
wwesweewswswnwwewewwwenwnesenw
|
||||||
|
seswenwseswenwwseewnenenwnesenwsese
|
||||||
|
wwwwnewwwswswww
|
||||||
|
nwwnwnwswnesenenenwwenwenwwnwnwsenwwnw
|
||||||
|
nwsewesesewswsesweseseneseneseswnese
|
||||||
|
eseeeeenwseeseswe
|
||||||
|
swseenwseswwneneswsweseswseswnwwnene
|
||||||
|
eenwewesweseneweswnenwswsewenee
|
||||||
|
wewwwwwwwwwnewsewwwwsenw
|
||||||
|
wwwsewwwwneww
|
||||||
|
senwneneenenwsenwnesenenenenewnewsesw
|
||||||
|
eweeeeeeee
|
||||||
|
nwnewneneneseneneenewseneneswsenenwnenw
|
||||||
|
swsewswnwneeenwseweseenwwwenesww
|
||||||
|
swswnwswneneswsesewswseswsewswnesese
|
||||||
|
newwnwnwwwwnwswswnenwnwneenwnwswnw
|
||||||
|
eenwsenwnewwneneenenwnenwsewwwsee
|
||||||
|
eseesenweeseseswseenesenweeewswnwe
|
||||||
|
nwenwenewnwwwnwswwsweswseswnwwe
|
||||||
|
nwseneeswswseseseswswswseswseeewswnw
|
||||||
|
seeeenweeweeeeesweeenee
|
||||||
|
eneweswnesenenewnenewneswnenesesww
|
||||||
|
nwwnewswnwwwnwe
|
||||||
|
swswswswswseswswswswwswswnesw
|
||||||
|
wwwsewnenwwwwnwsewnw
|
||||||
|
neeeseseesewseseesesewsesesene
|
||||||
|
nwnwswswneswwswseswswswsweswswseneswswsw
|
||||||
|
sesesenewsewseseswseseseseswnesesese
|
||||||
|
seneseswswseswseeeseenwnwseenesewnwse
|
||||||
|
nwwnwwwwwnwwewe
|
||||||
|
swseswwsweswswswnwswsweswswswswneswse
|
||||||
|
swseeswswswswswswswwnwnwswwnesesenwswsw
|
||||||
|
senwseseswsesenesenenwsesesewsesesesese
|
||||||
|
ewswwswnwseneswseswnenwswsenwseseswswne
|
||||||
|
sweswseswseswwwseneneenesenwseswnwsenw
|
||||||
|
nwwweswnwswnwswswseeseswsenenwsesww
|
||||||
|
sesewseesenwesweseeneseeneseswnewese
|
||||||
|
esewseeeesewenwseeweenesewew
|
||||||
|
eneseneswnesewwneenwneneswewsewnesw
|
||||||
|
newneweeseenesweneeeseenwneeswe
|
||||||
|
seswseseneswswswswswswsw
|
||||||
|
wsesesesesenesesenwseesenwsesesesesese
|
||||||
|
nenenenesenenewnenenene
|
||||||
|
seswwnwswwsesesweswsweswenesenwene
|
||||||
|
neswesenenesenenweeswseeenwnewnwnene
|
||||||
|
eeeeeeeenweeneswenenwnweswsw
|
||||||
|
seneenenesweneswneewnwswnene
|
||||||
|
swswwswswswwswswnwwwnweenwwseswww
|
||||||
|
swswwswneswseneswswswsenesw
|
||||||
|
swwswswswswswsweswswswswsw
|
||||||
|
seneseseseenwnwsweswnwseseswseswwneswswsw
|
||||||
|
nenwnwswnenwewneswnwnewnenenesenenee
|
||||||
|
nwseseesenwwswseeenesesesesenwnwew
|
||||||
|
swnwswseenewswwswswswwwwwnwswwe
|
||||||
|
nwneenesenwneewnewneseeneneesw
|
||||||
|
neswnwwnenweswneneneneswnenwwneenwneene
|
||||||
|
neeneneswwsenwnwneneneseenenenewsene
|
||||||
|
swswnewseseseswswseswneswnwseeseswsese
|
||||||
|
swnwwswseswwnwsweeswwnweenewnwsw
|
||||||
|
nenweeeeswneweseswneswne
|
||||||
|
weneenwnenenenenwnenwswnewneeneneenesw
|
||||||
|
swnenwnwwwswwwnenewwnwsewnesewnw
|
||||||
|
neswswwswswseesweneswswsewswswwswse
|
||||||
|
nenenenwwsenwnwnenwnwnenwsenenwnwnwsenw
|
||||||
|
nwseseswseesenwseswswsenwese
|
||||||
|
wswneswnwneneswseseswwnwseswswnesenwsesew
|
||||||
|
weeeewsweeeneneneswesenwswee
|
||||||
|
senwnwwwnwsenwnwwwnwsesenesesenewsene
|
||||||
|
wwwesewwsenwwwwswweswwswnenww
|
||||||
|
swwneneseswswwswsewwwsw
|
||||||
|
enenwneneeneeseneswnwneeneswnesenene
|
||||||
|
eseesenenenewwneneseenenewnenenewnene
|
||||||
|
wenwswewnwewnweswseeeneeneenesw
|
||||||
|
neneneneswnenewsenwneseneenenwneswnenewne
|
||||||
|
eneswneneeseeswenewneeeeeenwnee
|
||||||
|
eswswsenwneseeseeeeeswnweeeewne
|
||||||
|
nwewwwwenwwwwewnwwnwwewsw
|
||||||
|
nwwwwnwnesenwwseenwswnwewnwswwnewnw
|
||||||
|
seweeweeenwseeeeenwseeeene
|
||||||
|
wswsenenewwwwwwwswwswwwneseww
|
||||||
|
nenenenweeseneneneeeeeweewswse
|
||||||
|
neneneneenweseeneswswnenenweeneswee
|
||||||
|
sesweeeswenwnese
|
||||||
|
enweseneneneneenwneenwneswneswneswnew
|
||||||
|
senenweseneneswsesenwseswswnwwswnwsewse
|
||||||
|
nwnwnwenwnwnwnwnwnwnwswnwnwnwsesenwnwnw
|
||||||
|
wwwnwnwwenwnwnwnwsenwswww
|
||||||
|
nwnwnweswnenenwnesenwwswnenenenwnesenwe
|
@ -26,6 +26,7 @@
|
|||||||
Q21.Go();
|
Q21.Go();
|
||||||
Q22.Go();
|
Q22.Go();
|
||||||
Q23.Go();
|
Q23.Go();
|
||||||
|
Q24.Go();
|
||||||
Util.Log($"Total time={(System.DateTime.Now - start).TotalMilliseconds}ms");
|
Util.Log($"Total time={(System.DateTime.Now - start).TotalMilliseconds}ms");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
174
Q24.cs
Normal file
174
Q24.cs
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace _2020
|
||||||
|
{
|
||||||
|
class Q24
|
||||||
|
{
|
||||||
|
static readonly List<List<string>> list = new List<List<string>>();
|
||||||
|
static Dictionary<Tuple<int, int>, int> tiles = new Dictionary<Tuple<int, int>, int>();
|
||||||
|
|
||||||
|
public static void Go()
|
||||||
|
{
|
||||||
|
var start = DateTime.Now;
|
||||||
|
MakeList();
|
||||||
|
Util.Log($"Q24 MakeList took {(DateTime.Now - start).TotalMilliseconds:N0}ms");
|
||||||
|
var p1start = DateTime.Now;
|
||||||
|
Part1();
|
||||||
|
Util.Log($"Q24 part1 took {(DateTime.Now - p1start).TotalMilliseconds:N0}ms");
|
||||||
|
var p2start = DateTime.Now;
|
||||||
|
Part2();
|
||||||
|
Util.Log($"Q24 part2 took {(DateTime.Now - p2start).TotalMilliseconds:N0}ms");
|
||||||
|
|
||||||
|
Util.Log($"Q24 took {(DateTime.Now - start).TotalMilliseconds:N0}ms");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MakeList()
|
||||||
|
{
|
||||||
|
foreach (var line in File.ReadAllLines("24input.txt"))
|
||||||
|
{
|
||||||
|
var sublist = new List<string>();
|
||||||
|
for (int i = 0; i < line.Length; i++)
|
||||||
|
{
|
||||||
|
if (line[i] == 'e' || line[i] == 'w')
|
||||||
|
{
|
||||||
|
sublist.Add(line[i].ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
sublist.Add($"{line[i - 1]}{line[i]}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list.Add(sublist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Part1()
|
||||||
|
{
|
||||||
|
foreach (var inst in list)
|
||||||
|
{
|
||||||
|
var row = 0;
|
||||||
|
var col = 0;
|
||||||
|
foreach (var step in inst)
|
||||||
|
{
|
||||||
|
if (step.StartsWith('n'))
|
||||||
|
{
|
||||||
|
row--;
|
||||||
|
}
|
||||||
|
else if (step.StartsWith('s'))
|
||||||
|
{
|
||||||
|
row++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (step.EndsWith('e'))
|
||||||
|
{
|
||||||
|
col++;
|
||||||
|
if (step.Length == 1)
|
||||||
|
{
|
||||||
|
col++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (step.EndsWith('w'))
|
||||||
|
{
|
||||||
|
col--;
|
||||||
|
if (step.Length == 1)
|
||||||
|
{
|
||||||
|
col--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var tilePos = Tuple.Create(row, col);
|
||||||
|
if (!tiles.ContainsKey(tilePos))
|
||||||
|
{
|
||||||
|
tiles.Add(tilePos, 0);
|
||||||
|
}
|
||||||
|
tiles[tilePos]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
var flipped = tiles.Values.Aggregate(0, (sum, curr) => IsFlipped(curr) ? (sum + 1) : sum);
|
||||||
|
|
||||||
|
Util.Log($"Q24Part1: flipped={flipped}");
|
||||||
|
}
|
||||||
|
|
||||||
|
static List<Tuple<int, int>> GetNeighbors(Tuple<int, int> coords)
|
||||||
|
{
|
||||||
|
var result = new List<Tuple<int, int>>();
|
||||||
|
result.Add(Tuple.Create(coords.Item1 - 1, coords.Item2 - 1));
|
||||||
|
result.Add(Tuple.Create(coords.Item1 , coords.Item2 - 2));
|
||||||
|
result.Add(Tuple.Create(coords.Item1 + 1, coords.Item2 - 1));
|
||||||
|
result.Add(Tuple.Create(coords.Item1 - 1, coords.Item2 + 1));
|
||||||
|
result.Add(Tuple.Create(coords.Item1 , coords.Item2 + 2));
|
||||||
|
result.Add(Tuple.Create(coords.Item1 + 1, coords.Item2 + 1));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool IsFlipped(int val)
|
||||||
|
{
|
||||||
|
return (val & 1) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int NumNeighborsFlipped(Tuple<int, int> coords)
|
||||||
|
{
|
||||||
|
var result = 0;
|
||||||
|
foreach (var neighbor in GetNeighbors(coords))
|
||||||
|
{
|
||||||
|
if (tiles.ContainsKey(neighbor) && IsFlipped(tiles[neighbor]))
|
||||||
|
{
|
||||||
|
result++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Dictionary<Tuple<int, int>, int> PopulateNeighbors(Dictionary<Tuple<int, int>, int> inList)
|
||||||
|
{
|
||||||
|
var tempList = new Dictionary<Tuple<int, int>, int>(inList);
|
||||||
|
foreach (var pair in inList)
|
||||||
|
{
|
||||||
|
if (IsFlipped(pair.Value))
|
||||||
|
{
|
||||||
|
foreach (var neighbor in GetNeighbors(pair.Key))
|
||||||
|
{
|
||||||
|
if (!tempList.ContainsKey(neighbor))
|
||||||
|
{
|
||||||
|
tempList.Add(neighbor, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return tempList;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Part2()
|
||||||
|
{
|
||||||
|
for (int day = 0; day < 100; day++)
|
||||||
|
{
|
||||||
|
var tileState = PopulateNeighbors(tiles);
|
||||||
|
foreach (var pair in tileState)
|
||||||
|
{
|
||||||
|
var numNeighborsFlipped = NumNeighborsFlipped(pair.Key);
|
||||||
|
var isFlipped = IsFlipped(pair.Value);
|
||||||
|
if (isFlipped && (numNeighborsFlipped == 0 || numNeighborsFlipped > 2))
|
||||||
|
{
|
||||||
|
tileState[pair.Key]++;
|
||||||
|
}
|
||||||
|
else if (!isFlipped && numNeighborsFlipped == 2)
|
||||||
|
{
|
||||||
|
tileState[pair.Key]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tiles = new Dictionary<Tuple<int, int>, int>(tileState);
|
||||||
|
}
|
||||||
|
|
||||||
|
var flipped = tiles.Values.Aggregate(0, (sum, curr) => IsFlipped(curr) ? (sum + 1) : sum);
|
||||||
|
Util.Log($"Q24Part2: flipped={flipped}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user