From 2ebb48985a5e63f51f0ed37ab89c6eb612b5c85f Mon Sep 17 00:00:00 2001 From: Colin McMillen Date: Mon, 7 Dec 2020 13:20:53 -0500 Subject: [PATCH] day 5 solutions --- 2020/Day05.cs | 76 +++++ 2020/Program.cs | 2 +- 2020/day05.txt | 805 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 882 insertions(+), 1 deletion(-) create mode 100644 2020/Day05.cs create mode 100644 2020/day05.txt diff --git a/2020/Day05.cs b/2020/Day05.cs new file mode 100644 index 0000000..d327a43 --- /dev/null +++ b/2020/Day05.cs @@ -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(); + 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()); + } + } +} diff --git a/2020/Program.cs b/2020/Program.cs index 120ff26..75aac0f 100644 --- a/2020/Program.cs +++ b/2020/Program.cs @@ -19,7 +19,7 @@ namespace AdventOfCode { public class Program { static void Main(string[] args) { - Day04.Test(); + Day05.Test(); } } } diff --git a/2020/day05.txt b/2020/day05.txt new file mode 100644 index 0000000..06103f5 --- /dev/null +++ b/2020/day05.txt @@ -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