day 5 solutions

This commit is contained in:
Colin McMillen 2020-12-07 13:20:53 -05:00
parent 9dcddd0081
commit 2ebb48985a
3 changed files with 882 additions and 1 deletions

76
2020/Day05.cs Normal file
View File

@ -0,0 +1,76 @@
using System;
using static System.Console;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Xunit;
namespace AdventOfCode {
public class Day05 {
static int FindRow(string boardingPass, int low, int high) {
if (low == high) {
return low;
}
int midpoint = (high + low) / 2;
if (boardingPass[0] == 'F' || boardingPass[0] == 'L') {
return FindRow(boardingPass.Substring(1), low, midpoint);
} else {
return FindRow(boardingPass.Substring(1), midpoint + 1, high);
}
}
static int FindRow(string boardingPass) {
return FindRow(boardingPass, 0, 127);
}
static int FindColumn(string boardingPass) {
return FindRow(boardingPass.Substring(7), 0, 7);
}
static int FindSeatId(string boardingPass) {
return FindRow(boardingPass) * 8 + FindColumn(boardingPass);
}
static int Part1() {
string[] passes = File.ReadAllLines(Util.RootDir + "day05.txt");
int maxId = 0;
foreach (string boardingPass in passes) {
int id = FindSeatId(boardingPass);
if (id > maxId) {
maxId = id;
}
}
return maxId;
}
static int Part2() {
string[] passes = File.ReadAllLines(Util.RootDir + "day05.txt");
var seatIds = new HashSet<int>();
foreach (string boardingPass in passes) {
int id = FindSeatId(boardingPass);
seatIds.Add(id);
}
for (int i = 1; i < 828; i++) {
if (!seatIds.Contains(i) && seatIds.Contains(i - 1) && seatIds.Contains(i + 1)) {
return i;
}
}
return -1;
}
[Fact]
public static void Test() {
Assert.Equal(44, FindRow("FBFBBFFRLR"));
Assert.Equal(5, FindColumn("FBFBBFFRLR"));
Assert.Equal(357, FindSeatId("FBFBBFFRLR"));
Assert.Equal(567, FindSeatId("BFFFBBFRRR"));
Assert.Equal(119, FindSeatId("FFFBBBFRRR"));
Assert.Equal(820, FindSeatId("BBFFBBFRLL"));
Assert.Equal(828, Part1());
WriteLine(Part2());
}
}
}

View File

@ -19,7 +19,7 @@ namespace AdventOfCode {
public class Program {
static void Main(string[] args) {
Day04.Test();
Day05.Test();
}
}
}

805
2020/day05.txt Normal file
View File

@ -0,0 +1,805 @@
FBFBBFBRRL
BBFFBFFRLR
FBBFFBBLLL
FBFBFBFRRR
FBBBFFFLLL
FFBFBBFLLR
BFBBBFBLRR
BFBBBFFRLL
FBFFBFFLLL
BFBFBFFRLR
FBFBFFBLLL
FBFFBBFLLR
FBFBBBBLRR
BFFBBBFLLL
BFBBFBBLLL
FBFFFFBLRL
BFBFFFFLRR
BFBBFFBRRL
FBFFFFBLLL
FBBBBFFRLR
BFBBBFBLRL
BBFFBFBRRL
FBBFFFBRRL
FFBFBBFRRL
FFFFBBFLLR
FBFFFBBRLR
FFBBFBBRRR
FFBFBFFRLL
BFFFFFBLRL
FFBBBFBLLR
FBBFFBBLRR
FBBFFBBRRL
FFBBBFFRRL
FFBFFBBRLL
FBBFFBFLLL
BFBBFBBRRL
FFFFFBBRLR
FBBBFFFLRL
BFBBFBBRRR
BFBFFBFLLL
BFFBFBBLRL
FBFBFFFLRR
FBFBBBBLLR
FFFFBFFRLR
BFFBFBBLRR
BBFFBBBLRL
FBBFFFFLLL
FBFBFFFRLL
FFFBFBFRLL
BBFFFBFLRR
BFFBBBBLRL
BBFFBBFLLL
FBBBBBFLLR
BFFFFBBRRR
FFBBFBBRLR
FBFBFFFRRL
BFFBFBFRLL
FBFBFBBLRR
BBFFBBBRLL
FFBBFFFLRL
FFFBFBBLLR
BFFFBFFLLL
BFFFBFFLRL
BFFBFFBLLR
BFBBFBBLRL
FFFBFFFRRL
BFFFBBFLRR
FFBBBFFRRR
FBBFBBBRLR
FFBFBFFLRL
BBFFBFBRRR
FBBFFFBLLL
FBFFBBFRRR
BFBFFFBLLL
FFFFBFFLLR
FBFBFBFLRR
BFFFBBFRLL
BFBBBFFLRR
FFBBFBBLRR
BFFFFBBRLR
BFBFBBBLLR
BFFFFBBLLL
FBBFFBBRLL
FBFFBFBRRR
BFBFBFFLRR
FFFFBBBRRL
FBBBFFBRRR
FFFFBFFLLL
BFBFBFBRRR
FBBBBBFRRR
BFBBBBBRLL
BFBFFBBRRL
BFFFFFFRLL
BFBBBBFRLL
FBFFFFFLLR
FFFBBFBRRL
BFBBFBFRRL
FFFFBBFRLL
FFFFFBBRRL
FFBFFBFRRR
FFBBFBBRRL
BFBBFFFRLR
BBFFFFBRLL
FBFFBFBLRL
FBFBBBFRLR
BFBFBFFLRL
BFFFFFBLRR
FBFFBBFRLR
FBBFFBBLLR
BFFFBFFLLR
BFBFFBFRLR
BFBFFBBRLR
FBBBBFBLLL
BFBFBBFLLL
FBBFBBBLRR
FBBFBFBRLR
BFBBFBFLRR
BFFFFFFLLR
BFBFBBFLLR
FFBBBFBLRR
FFBBBBBRLR
FFFBBFFRRR
FFFFBFBLRL
BBFFBFBRLR
BBFFBFFLRL
BBFFFFBRRR
BFBBFFBRLR
FBBBBBBLLL
FFBFFFBRRL
FBFFBBBLRL
FBBFBBFRRL
FBBBBFBRRR
BFFFFFFLRR
BFBBBFBLLL
FFBBFBFLRR
FFFFBBFLRL
FBFBBFFLRL
FBFBBFFLLL
FFFBBFFLLR
BFBBFBFLLR
FFFFFBBLRR
FFBFFFFRLL
BFBFFFFLRL
BFFBBBBLRR
FBBFFFBRRR
FFFBBBBRLL
BFBFBBBRRL
BBFFFBFLLR
FBBBFBBLRR
FFBBBFBRRR
BBFFBFFRLL
FFFBBBFRLR
BBFFFBFRLR
FBFBBFBRRR
BFBFBFBLRL
FFFBFBFRRR
FFBFFFFLRR
FFFFBFFLRL
FFBBBBFRLL
FFFFBBBLRR
FBBBBBBLRL
BFFBBBFLLR
FFBBFBBLLL
FFFBBBBLLR
BFFBBBBRLL
FBBFBFFRRR
BBFFBFFRRL
FFBFBFFLLL
BFFBBFBLLR
FFFFBFBRRL
FFBFBBFLRL
FBBFFFFLRL
FBBBFFFLRR
BFBBBBFRRR
FBFBFBBRRL
BFFFFBFRLR
BFBFFBBLRR
FFFBBBFLRR
FBBBFBFRRR
FFFFBBBRLR
FFFFBFBLLR
BFFFBBFLLR
FFFBFFFLLL
BBFFFBFRRR
FFBFBBBLRR
FFFFBFFLRR
FBFFBBBLRR
BBFFFBBLRL
FBBBFBFLRR
BFFBBFBRRR
FBFFBFFRLL
FBFBFBBLLL
BBFFBFFRRR
BFFBFBBLLR
FBFBFFFRRR
BFBFFBBLRL
FFBBBFBLRL
BFFBBFFRLR
BFFFBBBLLL
BFFFFFFRRR
FBBBBFBLRL
BFFFFFFRRL
FFFBFFFLRR
FFBBFFFRRL
BFFBFBFLRL
FBBBFBBRLL
BFFBFBFRRR
FFBFFFFLRL
FBBFBFFLRL
FFFFBFFRRR
BBFFBBFLRR
FBBBFFFRRR
FFFBFFBLLL
FBBBFFFLLR
FFBFFFBLLR
FFBBFFBRRR
BBFFFBBRRL
FFFFBBFRLR
BFFBFBBLLL
FFFBBFFLRR
FBBBFFFRLL
FFBBBBBRRR
BFBBFBFLRL
BFBBBBBRRL
FBFBFBBLLR
FFBFFFBRLL
FFFFBBFLLL
FFFBBFBLLR
FFFBBBBLRL
BFFBFFFLLL
FFBFFBFRRL
FBBFFFBLLR
BBFFFFBLRL
BFFFBBBRLR
BFFBFFBLRL
BBFFBFBLLL
FBFBFBBRLL
FFFBBFBRLL
BBFFFBFRRL
FBBBFFFRRL
BFBFBFBRLL
BFBBFFFLRR
FFFFBFBRLL
FFBBBFBRLL
BFBBFFFLLL
BFBFFFBRRL
FBFBFBFRLR
FBFFBBBRLL
BBFFBFBLRL
BFBBBBBLLL
FBBFBFFRLR
FFFBFBFRRL
BFBBFBFLLL
BFFFFBFLLR
FBFBFFBLRL
FBFBFFBRRR
BFBFFFFLLR
BFFFFBFRRL
BFFFFBFLRR
BBFFFFFRRL
FFFBFFBRRR
BBFFBFFLLL
FBFFFBBLLL
FBBFBBFLRR
BFBBBBFRRL
BFBBBFBRLR
BFFFFFBRLR
FFBFBBBRRL
FBFBFFBRLL
BFFFBFBLRL
FFBFBFFRLR
FBFFFBBRRR
BFFBFFBLRR
BFBFBFBLRR
FBFFBFBLLL
BFBBBFBRRL
FBBFFBFRLL
FFBFBFBRLR
BBFFFFFLLL
BFBBBFBRRR
FFBBFBFRRR
BFFBFBFLRR
FBBBFBFRLL
FBBBBBBRLL
FBFBFBBRLR
BFBBBFFRLR
FBFBBFFLLR
BBFFBBBLLL
BFFFBFBLLR
FFBBBBFLLR
BFFBBFBRLR
FBFBBBFLLL
FFBFBFFLLR
FFBFFFFLLR
FBBFBFFRLL
BFFBBBFLRL
FFFBFFBRRL
FFFBFBBRRL
FFBFBBFRLL
BBFFBFBLRR
BBFFFBBRRR
FBFFFFBLRR
BFBFBFBRLR
BFBBFFBLLL
BFBFBFFRRL
BFBFFBBRRR
FBBFBBFRLR
BFBBFFFRLL
BFBFFFBLRR
FBBFFBBRLR
FFBFFBBRLR
FFBBBBFLRL
BFFFBFBRRL
BBFFBBBLLR
BFBFBFBLLR
FFFBFFFRLR
BFFBBBBLLR
BFBBFFBRRR
BFFFBFBLRR
BFBFBBBRRR
FBBFBBFLLR
FBFFFBFRLL
FBBBBFFLRL
FFBBFBFLLL
BFBFFBFLRR
FFFFBBBRLL
FBFFBBFLRL
FFBFFFFRRR
BFBBFBBLLR
FFBBFBBLRL
FFBBFBFRLR
FFFFBBBLLR
BFFBBFBRRL
FBFFBFFRRL
FBBFBBBRRL
FFBFFFBRLR
BBFFFBBLRR
BFFBBFFRRR
FBFFFBFRRR
FBBFBBFRLL
FFBFBFBLLR
BBFFBFFLRR
FBBFFBBLRL
FBFFFFFLRR
FFBBFBBRLL
FFBBBBBLRL
FFFBBFBRRR
BFBFFFBRRR
FFBFFFFRRL
BBFFFFBRLR
FFBFFBBLLL
BFBFFFFRLR
FBBFBBBRRR
FFFBFFFLRL
BFBFBFFLLR
BBFFFFFRLL
BFBFBFFRLL
BFFFBBBRLL
BFBFBFFRRR
BFFFBFFRLR
FFBBFFBRRL
FFBFFFBRRR
FBFFBBFLLL
BFBBFFFLLR
BFBBBFFRRR
FFBFBBFRRR
FFFBBBBRLR
FBFFFBBLLR
FBBBFBFRLR
FBFBBFFRLR
FFFBFFBLRR
FFBBBBFLLL
FBFBFBFLLL
BFBFFBFLLR
FFFBBFFLLL
FBFBFBFLLR
BFBFBBFLRR
FBFFBBBRRL
BFFBBBFRLR
BBFFFBFLLL
BFFBFFBRRL
BFFFFFFRLR
FBFFBFFRRR
FFFFBFFRLL
FFFBBFBLRL
BFFBBBFLRR
BFFFBBFLRL
FFBFFFFLLL
BFFBFFFRRL
BFFFFFFLLL
FFFBFBBLLL
FBBBBBBRRL
BFFBFBFRRL
BFBFFFFRLL
BFFFBFBLLL
BFBFFFBRLL
FFFBBBBLRR
BFFBFFFLRR
BFFBBFBRLL
FBFFBBBRLR
FBBBFFBRRL
FBBBBFFLRR
FFFFFBBRRR
BFBBBFFLLL
FFBFBFBRLL
FBFBBBFLLR
BBFFFFFLLR
FFBFFBFRLL
FFFBBBFRRL
FFFBBFBRLR
FFBFBFBRRR
BFFBFBFLLR
BFFFFBFRLL
BFFBBBFRRR
BFFBFBBRRR
BFFBBBBRLR
FFBFFBFLLR
FFBBFFBRLR
FFBFBBBRRR
FFBBFFBLLL
FFFFBFBLRR
BFBFFBFRRR
FFBFFBFLRL
FFBBBFFLRR
FFBFBBFLLL
FBFBBFBLRL
FFBBFFFRRR
FFBFFFBLRR
BFFBFFBRLL
FBFBBBBRRR
BFFFBFFLRR
FBBBBFFRRR
FFBFFFBLLL
BFBFBBFRLR
FFBFFFBLRL
BBFFFBBRLR
BFFBBBFRRL
FFFBFBBRRR
FFBBFFFRLL
FBFFBBFLRR
BFFBBBBLLL
FBFFFFBRRR
FBBFFFBRLR
FFFBBBFRRR
FBBBBBBLRR
FFBBBFFRLR
FBBBFFBRLR
FBBFBFBLRL
FBBBFBFLLR
FBBFFBFRLR
FBFFFFBRLR
BFBFFFFRRL
BFBFBFBRRL
BFFFFBFRRR
FFFBBFFRLL
BBFFBBFRLR
FFFBFBFLLL
FBBBFBFLRL
FBFBBFBRLL
BFFBFFFLLR
BFFBBBFRLL
BFBBBFBLLR
FBFBFFFLRL
FFBFFFFRLR
FFBFBBBRLR
BFBBBFFLLR
BFFFFFBLLR
FBBFBFFRRL
BFFBFBFRLR
FBFFBBFRRL
BBFFBBFRLL
FBFFBFBLRR
FBFBFBFRLL
FFFBBBFLLR
FBFBFBBRRR
FBFBBFBLRR
FFBFBBBLRL
FFBFBFBLLL
FFFBBBBRRL
FBBBBBBRLR
BBFFFFBLLL
FFBBBBBRLL
BFFFBBFRRR
BBFFFFBLRR
FBFFFFFLRL
BFBFFFBLRL
FBBBFBBRRR
BFFBBBBRRL
FBFFFBFRRL
BBFFBBFLRL
FBBFFBFLLR
FBFBFBBLRL
FBFBFFFLLR
BFFFBBFRRL
BFBFBBBRLR
BFFBFBBRLR
BFFFBFFRRR
BBFFFFBRRL
FFBFBBFLRR
BFFFBBBLRL
FBBBFBBLRL
FFBBBBFLRR
BFFFBFBRRR
BFFBBFFLRR
FBFFFBFLLL
BFFBFFFLRL
FFFFBBBLRL
FFBBBBBRRL
FBBBFFBLLR
BBFFFBBRLL
FBFFBFBRLL
BFFFBFBRLL
FBFFBFFLRL
FFFFFBBLRL
FBFBFFBLLR
FFFBFBBLRL
FBFFBBBRRR
FFFBBFFRRL
FBFBBFFLRR
FBBFBFFLLL
BFFFBFFRRL
FFBFFBBRRR
BFBBBBFLLL
BFFFBFFRLL
FBFFBFFLLR
BFFBBFBLLL
BBFFFBBLLL
FBFBBBBLRL
BBFFBFBLLR
BBFFBBFRRR
BFFBFFFRRR
FBBFBBFLRL
FFBFBFBRRL
FFFBFFFLLR
BFBFBFFLLL
FFFBFBBRLL
FFBFBFFLRR
BFFFFFFLRL
FBBFFFBRLL
FBBFBBBLLR
FBBBFFBLLL
BBFFBBFLLR
FFFFFBBLLR
FBBBFFFRLR
FBBFFFFRRR
BFBFFBFLRL
FFFBFFFRRR
FBFFFFFLLL
FFBFBBBLLL
FFBBFFBLRR
FFFFBBFRRL
FBFFBBBLLL
FFFBBFFRLR
BFBFBBBLRL
FBFFBBFRLL
FBFBFFFRLR
FFBBBFFLLL
FBBFFBFLRR
BFBFBBBRLL
BFFBBFFLLL
BFFBBFFRLL
FFFBFFFRLL
FBFBBBFRLL
FBBBFBBLLL
FBFBFFBRRL
FBFBBBFLRR
FBBBBBFLRL
FBBFFFBLRL
BFFFBBBLLR
FBFBBFBLLL
BFBBBBBLRL
BFBBBBBLLR
FFBFFBFRLR
BFBBBBFLLR
FFBBFFFLLL
FFBFBFBLRL
FFBBFFFLRR
FBFBBFBLLR
FBBFFBFRRR
FBBFBBFRRR
BFFBFBFLLL
FBBFBBBRLL
BFFFFBBLRR
BBFFFFFLRL
FFFBBFBLRR
BFBFBFBLLL
FFBBFFBRLL
FFBBFBFRRL
FFFBFFBRLL
FBBBFBFLLL
BFFBBFFRRL
FBFFBFFLRR
FFFFBFBLLL
BFFFBBFLLL
FFBBBFBRRL
BFFBFFFRLR
FBBBFFBLRL
FFBBFBFRLL
FFFBBFBLLL
FFBBBFBRLR
FFFBFBFLRL
FBBFBBBLLL
FFBFBFBLRR
BFFFBFBRLR
BFFBFFBRLR
BFFFBBBRRL
FFFFBFBRRR
BFFBBFFLLR
FFFBFFBRLR
FBBFBFFLRR
FFFFFBBLLL
BFFFBBBRRR
BFBFBBBLRR
FBBFFFBLRR
BFFFFBBLLR
FFFBBFFLRL
BFBBFBFRRR
FFFBFBFLRR
FFBFBBFRLR
FFBFFBFLRR
FFFBBBBLLL
BFFBBFBLRL
FFFBBBFRLL
FFBBBBFRRL
FFFFBFBRLR
FBFFFBBLRL
FBBBBBBLLR
BFFFFFBRRR
FBFFFFFRRR
FBBBFBBLLR
FFFBFFBLRL
FBBFBFBRLL
FBFFBFBLLR
FBFFFBFLLR
FBFBBFFRLL
FBFFFFBRRL
BFBFFFFLLL
FFBFFBBLRR
FBBFFFFRRL
FFBFFBBLRL
FFBBFBFLLR
FFBBBFBLLL
FFFBBBFLRL
FBFFFFFRLR
FBBFBBFLLL
FBBBBFBLLR
FFFBFFBLLR
FBBBBFFLLL
FBBFBBBLRL
FFBBFBBLLR
FBFBBFBRLR
FFFFBBFLRR
FBBBBBFRRL
FBFBBBBRRL
FBFFBFBRLR
BFBFBBFRRL
FBFBBBFRRR
BFBFFBBLLR
BFBFFFBRLR
FFBFFBBLLR
BBFFFBFLRL
FBBBBBBRRR
BFFFFBFLLL
FFBBBFFRLL
FBBFBFBRRL
FBBFFFFLLR
FBFFFBFLRR
BFBFBBFLRL
FBFFFFBLLR
BBFFFFFRRR
BFFFFFBRLL
FFFFFBBRLL
FBFBBBBLLL
BFBFFBBLLL
FBFFFBBRRL
FBBFBFBLRR
BFBBFFFRRL
FBFBBBFLRL
FBBFFBBRRR
FBBBFFBLRR
BFBFBBFRRR
FBBBBFBLRR
FBFFFBFRLR
FBBFBFBRRR
FFFFBBFRRR
BBFFFBFRLL
FFBBBFFLRL
BBFFFBBLLR
FBBBFBBRLR
FBFBFBFRRL
FBFBFFBRLR
BFBBBBBRRR
FBBBBBFLLL
FBFFBFFRLR
FBBFFFFRLR
FBFBBBBRLR
FFBBBBBLLR
BFBBFFFRRR
BFBBBBFLRL
FBFFFBBLRR
BFBFFBFRLL
FBFBBFFRRR
FFBFFBBRRL
BFBFFBBRLL
BFBBFFBLLR
BFBBFBBRLL
BFBBBBFRLR
FFBBFBFLRL
BFFBFFFRLL
FBBBFBBRRL
BBFFBBFRRL
FBBFBFFLLR
BFFFFBFLRL
FBBBBFFRRL
FBBBBFFLLR
FFBBFFFRLR
FBFFFBBRLL
BFBFFFFRRR
BFBBFFBLRL
BFBBFFBLRR
BBFFBFBRLL
FBBFFFFRLL
BBFFFFBLLR
FFFFBFFRRL
FFBFBFFRRR
FBFBBBFRRL
BFFFFBBRLL
BFFFFBBRRL
FBFBFFBLRR
FFFBBBFLLL
FFBBBBFRRR
FBBBBBFRLL
BBFFBBBLRR
FBBBBFBRRL
FBBBBFBRLR
FFBFBFFRRL
FBFBFBFLRL
BFFBFFBRRR
BFFBBFBLRR
FBBFFFFLRR
BFBFFBFRRL
FFBBBBBLRR
FBFFBBBLLR
BFBBFBBLRR
BFBFBBFRLL
FFBFBBBLLR
FFFBFBBRLR
FFBBFFBLLR
FFBFFBFLLL
FBBBFBFRRL
BFBBBFFLRL
BFBBFFFLRL
FBFBBFFRRL
FFFBFBFRLR
FBBBFFBRLL
FBBBBFBRLL
FBBBBBFLRR
BFBBFBFRLL
BFBBBBBLRR
FFFBBBBRRR
FBBFFBFLRL
FFBFBBBRLL
BFFBFBBRLL
BBFFFFFRLR
FFFBFBFLLR
FBFFBFBRRL
BFFFBBBLRR
BFBBFBBRLR
FBBBBBFRLR
FBFFFBFLRL
FFBBBBFRLR
BFFFFFBRRL
BFFFFFBLLL
BFBFBBBLLL
BBFFFFFLRR
FBBFBFBLLR
BFBFFFBLLR
FBFFFFFRRL
FFFFBBBRRR
BFBBFBFRLR
BFBBBFBRLL
BFFFFBBLRL
FFFFFBFRRR
FFBBFFBLRL
BFBBBFFRRL
BBFFBFFLLR
FFBBBBBLLL
FFFBFBBLRR
FBFBFFFLLL
FFFFBBBLLL
BFFBBBBRRR
FBFFFFFRLL
FBFBBBBRLL
BFBBBBBRLR
BFFBFFBLLL
BFFBBFFLRL
FBFFFFBRLL
FFBBFFFLLR
BFFBFBBRRL
FBBFFBFRRL
FBBFBFBLLL
BFBBFFBRLL
BFBBBBFLRR
FFBBBFFLLR
FBBBBFFRLL