diff --git a/05input.txt b/05input.txt
new file mode 100644
index 0000000..9c84402
--- /dev/null
+++ b/05input.txt
@@ -0,0 +1,761 @@
+BBFFFBBLLR
+BBFFFFFLRL
+BFBFFFBLRR
+FBBFFFFRLL
+FFBFFFBLRR
+BFBBBFFLLL
+BFBBBFFLRR
+FBBFBBFRLL
+BFFBFBBLLL
+BFBFBBFRRR
+FBFBFFBLLR
+FFFBBBFRLL
+BFBBFBBRRR
+FBFFBFBRRR
+BFFBFFFLLL
+FBBBFBFLRR
+BFBBFBFRLR
+BFFFFFBRRL
+BFFBFFFRLR
+FBBBBBFRLL
+BFBBFBBLRL
+BFFFBFBRLR
+FBBBBFBLLR
+BBFFFBFRRR
+BFFBBBFLRL
+BFBFBFFLLR
+FFFBBBFLLR
+BFBFFFFRRL
+FFFBBFBLLR
+FBFFFBFLRL
+FBBBFBBRLL
+FBBFBFFLLR
+FBFBBFFLLL
+FBBFFFFLLL
+BFBFFBFRRL
+FFBBBFBRLL
+BFFBBFFLLR
+BFBBBBBRLR
+BFFBFFFRLL
+FBBBBFFRRR
+FFBBBFFRRL
+BBFBFBBLRR
+BBFFFFFLLR
+FFBFBFBLRR
+FBBBBFFLLR
+BBFBFBBRLR
+FFBFFBFRLR
+BFBBFFFLRL
+FFBFBFFLLR
+FFBFBBFRRR
+BBFFFBFLLL
+BFFFBBFRLL
+FFBFBBFLRR
+FBBBFFFRLL
+FBBFBFBRLR
+BFFFFFBRLR
+BFBFBFBLRL
+FBBBBFBLRL
+BBFFFFBLRR
+FBBBFFFRRR
+FFBBFFBLRL
+FBFBFFFRRL
+FFBFBBFLLL
+BBFFFBBRLR
+FBFBFFBRRR
+BBFFBBFRLR
+BFBBBFBLLR
+BFFBFBBLLR
+FBBBFBBLRR
+FFBFBBFLRL
+BFBFFBBRLR
+BFBBBFFLRL
+BFFFFBBRLR
+BFBBBFBRRL
+BFBFBBBRRR
+FFBFFBBLRR
+FBFBBBBRRL
+FFBFFFBRLL
+FBFFFFBLLL
+FFBBBFBLRR
+BBFFBBFLLL
+BFFBFBBLRR
+FBBBFBBRRL
+FFBFFBFRRR
+BFBBFFBRLL
+FBFFBBBLRR
+FFBFFBFLLL
+FBFBFBFRRL
+BBFFFFFLRR
+FFBBFBFRLL
+BFBBFFFRLL
+FBBBBFFLLL
+BFFBFBBRRL
+FBFBBBFLRR
+FBBBBFFLRR
+FBFFBBFLLL
+BFFFBBFRRL
+BFBBBFBRLL
+BFBFBBFRLL
+FBFFFFBRLL
+BBFBFBBLLL
+FFBBBFBLLR
+BBFFBBBLLR
+FBBBBBBRRR
+BBFFBFFRLL
+FBBFFBBRRL
+FFBBBBFRRR
+FBFBBFBRRL
+BFFFBFFRLL
+BFBFBFFRLL
+FBFBFFBLRR
+BFBBFFFRRR
+BFBBBBBLLL
+BFBBFFFRLR
+FFBFBFBRLL
+FBFFBFBRRL
+FFFBBBFRLR
+BBFFFBFLLR
+FBFBBBBRLR
+FBFBBFFLRL
+FBBBBFBLRR
+FBFBBBBLLL
+BFBBFBBLRR
+FFBBFBFLRL
+FFBFBBFRLL
+BFFFBFBLRR
+FFBFFBBRRR
+FBFFFFFRLL
+BFFFBFFRRR
+BFFBBFBRLR
+BFBFBBBLLL
+BFFBBFBLLR
+BFFBBBFLLL
+BFFFBFFLRL
+FBBFBFFLLL
+FBBBBBFLRR
+FBFBFBBRRR
+BFBBBBFLLR
+FBFFBFBLLR
+BBFFBBBLLL
+BBFFBBBRLR
+FFBBBFFRRR
+BBFFFBFLRR
+FFFBBBBRRR
+FFBFBFBRRR
+FFFBBFFRLL
+FBFFBBFRLR
+BFFBBBBRRR
+FBFBFFBLLL
+BBFBFFBLRL
+FFBFFBFLLR
+BFFFBBBLRL
+FBFFBFFLRR
+FBFFBBBLLR
+FBBFBFFLRR
+BFFBFFFRRL
+FBBFBBBLLL
+BBFBFBFRRL
+FBFFFFBRLR
+BFBFBFBLRR
+BFFBFBBRLL
+BFBFBBFLRL
+FBBBBFFRLR
+BFFFBBFLLL
+BFBBBFBLLL
+FFBBBBFRRL
+FFBFFFFLLR
+FBFBFFBRLL
+BBFBFBFLRL
+FBBBBBBRLR
+BFBFFFBLLR
+BBFFBBFLRR
+BBFFBBBRRR
+FBFFFBFRLR
+FFBBFFBLLL
+BFFBFBFLLL
+FBFFFFFLRL
+BFFBBFFLRL
+FBBBBBBRRL
+BFFBFBBRLR
+FBFBFBFLLL
+BFFBFFFRRR
+BBFFFFBRRR
+BFFBBFFRRR
+FBBFBBBLRL
+FFBBFBBRLL
+FBFFBBFRLL
+BFBFFBBRRL
+FBBFFFBLRL
+BFBBFFBLRR
+BBFFBFBRLR
+FBFBFFBRLR
+BBFFBFBRRL
+FFBBFBBRLR
+BFBFBFFLRR
+BFFBFFFLRL
+FFBBBFBRRL
+FFBFFBBLRL
+FBBFBBBRLR
+FFFBBBBRLR
+FBBFFFBLLR
+FFBFBBBRRR
+FFBBBFBRRR
+BFFBFBFRLL
+BFBBBBFLLL
+BFBFFFFRLL
+FBBBBBFRLR
+BFFBFBFLRL
+FBFFBFFRRL
+BBFFBFFRRL
+BFFBFBBRRR
+FBFFFBBRRR
+FFBBFBFRRR
+BFBBBFBLRL
+FFBBBFFLLL
+BFFFBBBRRR
+BFFBBBBRLL
+BFBBBBBLRL
+FBFFFBBLLL
+FBFBBBFLLL
+FFBBBFFRLR
+FFBFFFFRLR
+FFBFFBFRLL
+BFBFBFFRRL
+BFBFFBBRRR
+FFFBBFFRRR
+BFFFBFBLLR
+FBFBFBFLRR
+BFBFFFFLLL
+FBBBFBBLLL
+FBBFBBFRLR
+FFBFBFFLRL
+FBFFBFFLLR
+BFBFBFBLLR
+FBBFFFFRLR
+FBFBFFBLRL
+BFFFBFFLLR
+BFBFBFBLLL
+BFBBFBFLRR
+BFFBBFFRLL
+BFFFBBFRRR
+BFBFFBBLLR
+FBBFBBBLRR
+FFBFFFBLRL
+BFFFBBBRLR
+BBFBFFBLLR
+BBFBFBFRLL
+FFFBBFBRRL
+BFFFFBBLRR
+BBFFFFFRRR
+BFBBFBBRRL
+BFFFFFFRLL
+BFFFFFFLLL
+FBFFBBBRLR
+BBFBFFBRRL
+BFFFBBFLRR
+FBBFBFBLLR
+FFBBBBBLLR
+FBFBBFFRLL
+BFBBFFFRRL
+FFBBBFBRLR
+FBBBFFFLRR
+FFBBBFFRLL
+FFBBBBBRLL
+BFFFBBBLLR
+FBBFFFFLLR
+BBFBFFBLRR
+FFBFBBFRRL
+BBFBFBBLRL
+BFBBBFBRRR
+FFBFFBBRLL
+FFBFBFFRRR
+FBFBBFBLRL
+BBFFFBBRRR
+BFFBBBBLRR
+BFBFBBFRLR
+FBBBBFBRRR
+FFBBFFBLRR
+FFFBBBFLLL
+BBFBFFFLLR
+FFBFFBFRRL
+BBFFFBFLRL
+BFBFFFFRRR
+BFFFFFFRRL
+FFBFFFFLRR
+BFBBBFBLRR
+FFFBBBBLLR
+BFFBBFFRLR
+BBFFFBFRLR
+BFFBFFBRLR
+FFBBFFFLLR
+FFBBFBFRRL
+FBFBBBBLRL
+FBBBFFBLLL
+FBBBBBBLRR
+FFBBFBBLRR
+FBBFBBFRRL
+FBBFFFFLRR
+FFBBFFBRLR
+FBFFFFBLRL
+FBFFBFFRLR
+BFBFFBFRRR
+FFBFFFFRLL
+BFBFFBBLRL
+FBFFFBFRRR
+BFFBBBFRLR
+BFFBBFBRRL
+BFBBBBFLRR
+FFBFBBBRLL
+FBFBBBFRLL
+BFBFFFFLRR
+BBFBFFFLLL
+BFFBBBBLRL
+FFBFBFBLLR
+FBBFFFBRLL
+BFFFFFBLLR
+FBFBBFFRRR
+FBFFBBFLRR
+BFFFFFBLLL
+FBFFFFFRRL
+FFBBBFBLLL
+FBBFFFFLRL
+BBFBFFBRRR
+FBFFBFBRLR
+FBBBFBFLLR
+BFFBBBBRRL
+BFFFBBFLLR
+BFFBFFBRLL
+FFBFBBBLLR
+FFBFBFFRLR
+BFFBFFBLRR
+BFBBBFFRRL
+BFFBBFBLRL
+FBFBFBFLRL
+BBFBFBBRLL
+FBFFFFBRRL
+FFBBBBBRRR
+BFBFFFBRRR
+FFBFFBFLRL
+BFFBBBFLRR
+FBFBBFBRLL
+BFBBBFFRRR
+BFFBFFFLRR
+BFBFFFFRLR
+FBBBFBFLRL
+FFFBBBFRRR
+FBFBBFFRRL
+BFFFBBFLRL
+FBBBBFBRLR
+FBBFBBFLLR
+FBFBBBBLRR
+FFBBBBBRRL
+FFBBFFFLLL
+FFBBFBBLLR
+BBFFFBFRLL
+BBFBFBBLLR
+FBBFBFBLLL
+FBFFBBFRRR
+FBBBFBBRRR
+BFBFBBFLLL
+FBFBFBBRRL
+BFBBFBFLRL
+BFBBFBBLLL
+FBBFBFFRLL
+BBFFFBBLLL
+FFBBFFFLRL
+BFFBFFFLLR
+BFFBBFBRRR
+BFFBFFBLLL
+BBFFBFBLRR
+FBFBFBBLRR
+BBFBFBFRLR
+BFFFFBFLLL
+FBBFBFFRLR
+FBFBFBBRLL
+BFFFFFBLRL
+BFBBFBBLLR
+BBFFBFFLLR
+BBFFBFBLRL
+BBFFBBBLRR
+FBFFBFBLRL
+BFFBBFBRLL
+BFFBBFFLRR
+FBBFFBFRRL
+BBFBFFBLLL
+BFBFBBBLRL
+FFBFFFBLLR
+FBBBFBFRLR
+BFFFFBFRRR
+BFBFBFBRRR
+FBBBBBFLLR
+BBFFBBFRRL
+BBFFFFFRLR
+FBFBFBBLLL
+BFFFFBFLRR
+BFFBBBFLLR
+FBFBBFBRRR
+BFBFBFFRLR
+FBFBFBFRLR
+BFBBFBFRRL
+FFBBFFBLLR
+FBBBBBFRRL
+BFBFFFBRRL
+BBFFBBBLRL
+FBBBFFFLRL
+BFFFBBBRRL
+FBBFFBBLRL
+FFBBBBBRLR
+BFBFBBBRLR
+FBFBFBBRLR
+FFBBBBBLRL
+FFBBFBFLLR
+FBFBFBFLLR
+FBFBBBBRLL
+FBFFFFFLLL
+BFFBFBFLLR
+BFBBBBBRRL
+FBBBBFFRLL
+BFBFFFBLLL
+FBFFBFBLRR
+FBFBBFBLLR
+FBBFFBFLRR
+BBFFFBBRRL
+FBBBFFBRLR
+BFFBBFFLLL
+FBFBBFFLRR
+FFBBBBFRLR
+FFBBBFFLRL
+FFBBFFFRRL
+BBFBFFFRRL
+FBFBFFFRLL
+BFBBBBFLRL
+FBFFFBFLLR
+FBFFBBBRLL
+FBBBFBBRLR
+BFBBBBBLLR
+BFBBFFBLLL
+BFBBFFFLLR
+FBBFBFBLRR
+BFFFBFFRRL
+FFBFFFFRRR
+FBFBFBBLLR
+FFBBBBFLLL
+FBFFFBFRRL
+FBBBFFBRRR
+BFBBFFFLRR
+BBFFFFBRLR
+FBBBFBFRLL
+FFBFFFBRLR
+FBFFFFBRRR
+FFBFBFFLLL
+BBFBFFBRLR
+BFFBFBFRLR
+FBBBBFBRLL
+FBFBFFFRRR
+BBFFBFFLRL
+BFBFBBBLLR
+FBBBBFFRRL
+FBFBFBFRRR
+FFBFBFBRRL
+FBFBBFBLRR
+FBBBFFBLRL
+BBFFFBBLRL
+FFBBFBFLRR
+BFFFFFFLLR
+BFBBBBBRLL
+BFBFBFBRLL
+BFBBFBFLLR
+FBFFFFFLRR
+BFFFBBBRLL
+FBBBBBBRLL
+BFBFBBBRRL
+FBFFBFBRLL
+FFFBBBBLRL
+BFBFFFBRLR
+FFBBBBFRLL
+FFBBFFBRLL
+BFFFBFBLLL
+BFFBFFBLLR
+BBFFFFFRRL
+BBFFBBFRRR
+BFBFFBFRLR
+FBFFBFFRLL
+FBBFBBBRRR
+BFFFFBFRRL
+BFFBFFBRRL
+BBFBFFFLRR
+BFBFBBFLLR
+FFBFFBBLLL
+FBFBFFFLRL
+FBFBFFFLLR
+BFBFBBFRRL
+FFBFFFFLLL
+BFFBFBBLRL
+FBFFFBBRLL
+FFFBBBBRRL
+FBFFBBFLRL
+FBFFFBBLLR
+FFBFBFFRLL
+FFBBBFFLLR
+BFBFFBBLLL
+BBFBFFBRLL
+BFFFFBFLLR
+BFFFFFFLRL
+BBFFBFFRLR
+FBBBFBFRRR
+FFFBBFBLLL
+FFBBFBBLLL
+BFFFFBFLRL
+BFBFBFFRRR
+BFBFFFFLLR
+BFFFBFBLRL
+FBBBBBBLLR
+BFFFFFFLRR
+FFBFBFBLRL
+BFFFFBBRRR
+BFBBFBBRLR
+BFBBFFBRRL
+FFBBBBBLLL
+FBFFFFBLLR
+FBBBFFBRLL
+FBBFBFBLRL
+BFBFFFBRLL
+FFBBFBBRRL
+BFBBFBFRLL
+FFBFFBBRRL
+FBBFBFFRRR
+BBFFFBBRLL
+BBFFBFBLLL
+FBFBFFFRLR
+FBFFFBBLRL
+FBFBBBFLRL
+BFFFFFFRLR
+FFFBBFFRRL
+FBFBBFFLLR
+BFFBFFBRRR
+FBBBFBFRRL
+BFBFFBFLRR
+BBFBFFFRLL
+BFFFFBFRLR
+FFBFBBBLLL
+FBBFFFBRLR
+BFFFFBBRRL
+BBFFBBBRLL
+BBFBFBFLRR
+BBFFBBBRRL
+FBFFBBBLLL
+BFBBFFFLLL
+FBBFBBBRLL
+BBFFBBFRLL
+BFFBFBFLRR
+FBFFBFFRRR
+FBBFFBFRRR
+BBFFBBFLRL
+BBFFBFFLRR
+FBBFFFBLRR
+FFBFBFFLRR
+BBFFBFFRRR
+BFBFBFFLRL
+FBFBBFBLLL
+BBFFBFFLLL
+BFBBBBFRRR
+BBFFBFBRLL
+FBFBBBFRRL
+BFBFFFBLRL
+FBBFFBBRLR
+FFBFFFBRRR
+BFBFBFBRRL
+BFFFBFBRLL
+FBFFFBBRLR
+FFBFFBFLRR
+BBFFBBFLLR
+BBFFFBBLRR
+BBFFFFBRLL
+BBFBFFFRLR
+FBFBFBFRLL
+FBBFFBFRLL
+FFFBBBFLRR
+BFFFBFBRRL
+BFFFFBBLRL
+BFFFFFBLRR
+BFFFFBFRLL
+FBBFBFFRRL
+BBFBFBFLLL
+FBFFBBBLRL
+FBBBFFBLRR
+FBBFFBBLRR
+FFFBBFBLRL
+BFFFBFFLRR
+FFBFFBBLLR
+BFBFBFBRLR
+BBFBFBFRRR
+BFFBFFBLRL
+FBFFBFFLLL
+FBFBFFFLRR
+FBBFBFBRRR
+BBFFBFBRRR
+FBBBBBBLLL
+FBBFBBFLLL
+FBBFFBFLLL
+FFBBBBFLLR
+FFBBBFFLRR
+FBFBFFFLLL
+FFBBBFBLRL
+FFFBBFBRLL
+BBFFFFBRRL
+FFFBBFBLRR
+BFBFBBBRLL
+FBFBBBFRLR
+FBBFFBBLLL
+FBFBBBFLLR
+FBFFBBFLLR
+BFBBBBBRRR
+FBBFFBFLLR
+FBFFFBBRRL
+BFBBBFFRLR
+BFBBBFFLLR
+FBFFFBBLRR
+FFBFBBBLRL
+BFFFBBBLLL
+FFBFFFBRRL
+BBFFFFFRLL
+FFFBBFBRLR
+FFFBBBBRLL
+FBBFBBFLRR
+FBBBBFBRRL
+BFBBBBBLRR
+BBFBFFFLRL
+BFBFBBFLRR
+BFBBFFBRLR
+FBFFFFFRLR
+FFBFFFBLLL
+FBBFBFBRLL
+BFBFFBBLRR
+FBBBBFBLLL
+FBBBFBFLLL
+FBFFFBFLLL
+BFFFFFBRRR
+FBBFFBFLRL
+BBFFBFBLLR
+FBBFBBBLLR
+FFBFFFFRRL
+FBBFFBBLLR
+BFFFFFBRLL
+FBFBBFFRLR
+FBBFFFBLLL
+BFFBBBFRRR
+BFFBBFBLRR
+FFBBBBBLRR
+FFBFFBBRLR
+FFBFFFFLRL
+FFBFBBBLRR
+BFBFFBFLRL
+FBFFBFFLRL
+FFBBFFFRLR
+BFBFBFFLLL
+FFBFBFBRLR
+FFBBFFBRRL
+FFBBFBFRLR
+FBBBFBBLLR
+FBFBBBBRRR
+FBBFFFFRRR
+FBFFBBBRRL
+BFBBBBFRLL
+FBBBBBFLRL
+FBBBBBBLRL
+FFBFBBFLLR
+BFBFFBFLLL
+BFFBBBBRLR
+FBFFFFFRRR
+FBFBBBBLLR
+BFBBBFBRLR
+BFFBBBFRRL
+BFFFBFFRLR
+BFBBBBFRRL
+BBFBFBFLLR
+BFFFBBBLRR
+FFBBFBBRRR
+FBFFFBFRLL
+FBBBFFFLLR
+BFBFFFFLRL
+FFBFBFFRRL
+BBFFFFBLRL
+BFFBBFBLLL
+BFFBBBBLLL
+FBBFFFFRRL
+FBBFBFFLRL
+BFFBFBFRRL
+FBFFBBFRRL
+FBBFFBBRRR
+FFFBBBBLRR
+FFBBFFBRRR
+FBBBFFFRRL
+FFBBFFFRLL
+FFFBBBFRRL
+FBFBFBBLRL
+BFFBBBFRLL
+FBBBBBFRRR
+FBBFBFBRRL
+BFFFFBBLLR
+FBFBFFBRRL
+BFBBFFBLRL
+BFBFFBBRLL
+BFBBBBFRLR
+FFBFBBFRLR
+FFBBFBBLRL
+FBBBFFFRLR
+BFBBBFFRLL
+FBBBFFFLLL
+BBFBFFFRRR
+BFBFBBBLRR
+FBFFBFBLLL
+FFFBBFBRRR
+BBFFFBFRRL
+FBFFFFBLRR
+BBFFFFBLLL
+BBFFFFFLLL
+FFBBFFFLRR
+BFFBFBFRRR
+BFFFBFBRRR
+FBBBFFBLLR
+BFBBFBFLLL
+FFBBBBFLRL
+FBBFFBFRLR
+BFFFFBBLLL
+FFBFBFBLLL
+FBBFFBBRLL
+FBBFFFBRRL
+FBFFBBBRRR
+BFFFBFFLLL
+FBBBBBFLLL
+BFFBBFFRRL
+FBBFBBBRRL
+BBFFFFBLLR
+FBFBBBFRRR
+FFBFBBBRRL
+FFBFBBBRLR
+FBBBFBBLRL
+FFFBBBBLLL
+BFBBFBBRLL
+FBBFBBFRRR
+BFFFFBBRLL
+BFFFBBFRLR
+FBBFBBFLRL
+BFBBFBFRRR
+FFBBBBFLRR
+FFFBBBFLRL
+FBFFFBFLRR
+FBBFFFBRRR
+BFBFFBFRLL
+FBFBBFBRLR
+BFBBFFBRRR
+FFBBFBFLLL
+FBFFFFFLLR
+BFBBFFBLLR
+FBBBBFFLRL
+FFFBBFFRLR
+BFBFFBFLLR
+FFBBFFFRRR
+FBBBFFBRRL
+BFFFFFFRRR
\ No newline at end of file
diff --git a/2020.csproj b/2020.csproj
index 6c2b00f..76ec201 100644
--- a/2020.csproj
+++ b/2020.csproj
@@ -19,6 +19,9 @@
PreserveNewest
+
+ PreserveNewest
+
diff --git a/Program.cs b/Program.cs
index df74adb..d4e41a9 100644
--- a/Program.cs
+++ b/Program.cs
@@ -8,6 +8,7 @@
Q02.Go();
Q03.Go();
Q04.Go();
+ Q05.Go();
}
}
}
diff --git a/Q05.cs b/Q05.cs
new file mode 100644
index 0000000..9694109
--- /dev/null
+++ b/Q05.cs
@@ -0,0 +1,144 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+
+namespace _2020
+{
+ class Q05
+ {
+ static List list = new List();
+
+ const int numRows = 128;
+ const int numCols = 8;
+
+ public static void Go()
+ {
+ MakeList();
+ Part1();
+ Part2();
+ }
+
+ static void MakeList()
+ {
+ list = new List(System.IO.File.ReadAllLines("05input.txt"));
+ }
+
+ static int BinaryPartition(int upperExcl, IEnumerable input, char frontHalf, char backHalf)
+ {
+ int retval = -1;
+
+ int lowerBoundIncl = 0;
+ int upperBoundExcl = upperExcl;
+
+ int i = 0;
+ for (; retval < 0; i++)
+ {
+ if (input.Count() <= i)
+ {
+ throw new Exception("Fell off the end of the input");
+ }
+
+ int range = upperBoundExcl - lowerBoundIncl;
+ int reduceBy = range / 2;
+
+ if (input.ElementAt(i) == frontHalf)
+ {
+ upperBoundExcl -= reduceBy;
+ }
+ else if (input.ElementAt(i) == backHalf)
+ {
+ lowerBoundIncl += reduceBy;
+ }
+ else
+ {
+ throw new Exception("Unexpected input");
+ }
+
+ if (upperBoundExcl - lowerBoundIncl == 1)
+ {
+ retval = lowerBoundIncl;
+ }
+ }
+
+ return retval;
+ }
+
+ static Tuple GetRowCol(string ticket)
+ {
+ var fbs = ticket.TakeWhile((c) => c == 'F' || c == 'B');
+ int row = BinaryPartition(numRows, fbs, 'F', 'B');
+ var lrs = ticket.Skip(fbs.Count()).TakeWhile((c) => c == 'L' || c == 'R');
+ int col = BinaryPartition(numCols, lrs, 'L', 'R');
+
+ if (ticket.Length != fbs.Count() + lrs.Count())
+ {
+ throw new Exception("Invalid input");
+ }
+
+ return new Tuple(row, col);
+ }
+
+ static int GetSeatId(int row, int col)
+ {
+ return (row * numCols) + col;
+ }
+
+ static void Part1()
+ {
+ int highestId = 0;
+ foreach (var ticket in list)
+ {
+ var (row, col) = GetRowCol(ticket);
+
+ int seatId = GetSeatId(row, col);
+ if (seatId > highestId)
+ {
+ highestId = seatId;
+ }
+ }
+
+ Debug.WriteLine($"Q05Part1: highest id={highestId}");
+ }
+
+ static void Part2()
+ {
+ var seatList = new bool[numRows, numCols];
+ foreach (var ticket in list)
+ {
+ var (row, col) = GetRowCol(ticket);
+ seatList[row, col] = true;
+ }
+
+ bool foundValid = false;
+ bool foundMine = false;
+ int myId = -1;
+ for (int row = 0; row < seatList.GetLength(0); row++)
+ {
+ for (int col = 0; col < seatList.GetLength(1); col++)
+ {
+ if (seatList[row, col])
+ {
+ if (!foundValid && myId >= 0)
+ {
+ if (foundMine)
+ {
+ throw new Exception("Found multiple seats");
+ }
+
+ Debug.WriteLine($"Q05Part2: your seat={myId}");
+ foundMine = true;
+ }
+
+ foundValid = true;
+ }
+ else if (foundValid)
+ {
+ myId = GetSeatId(row, col);
+ foundValid = false;
+ }
+ }
+ }
+ }
+ }
+}