Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Main()
- {
- var input = File.ReadAllLines(@"C:\Users\dostj\Documents\LINQPad Queries\AdventOfCode\2021\04.txt");
- //input = File.ReadAllLines(@"C:\Users\dostj\Documents\LINQPad Queries\AdventOfCode\2021\04_test.txt");
- var numbers = input[0].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(n => int.Parse(n)).ToList();
- var boardInput = input.ToList().GetRange(1, input.Length - 1);
- var boards = new List<Board>();
- for (var i = 0; i < boardInput.Count; i += 6)
- {
- boards.Add(new Board(boardInput.GetRange(i + 1, 5)));
- }
- Board winningBoard = null;
- int winningNumber = -1;
- foreach (var number in numbers)
- {
- var boardWins = false;
- foreach (var board in boards)
- {
- if (board.HasWon)
- {
- continue;
- }
- board.MarkBoard(number);
- boardWins = board.BoardWins();
- if (boardWins)
- {
- winningBoard = board;
- winningNumber = number;
- }
- }
- }
- //boards.Dump();
- //winningBoard.Dump();
- var winningSum = 0;
- for (var i = 0; i < 5; i++)
- {
- for (var j = 0; j < 5; j++)
- {
- if (winningBoard.Markers[i,j] == 0)
- {
- winningSum += winningBoard.Input[i,j];
- }
- }
- }
- (winningSum * winningNumber).Dump();
- }
- // Define other methods and classes here
- class Board
- {
- public int[,] Input;
- public int[,] Markers;
- public int WinIPos = -1;
- public int WinJPos = -1;
- public bool HasWon = false;
- public Dictionary<int, Tuple<int, int>> PositionMap = new Dictionary<int, System.Tuple<int, int>>();
- public Board(List<string> input)
- {
- Input = new int[5,5];
- Markers = new int[5,5];
- for(var i = 0; i < 5; i++)
- {
- var numbers = input[i].Split(new char[] { ' '}, StringSplitOptions.RemoveEmptyEntries).Select(e => int.Parse(e)).ToArray();
- for (var j = 0; j < 5; j++)
- {
- Markers[i, j] = 0;
- Input[i, j] = numbers[j];
- PositionMap.Add(numbers[j], new Tuple<int, int>(i, j));
- }
- }
- }
- public void MarkBoard(int number)
- {
- if (PositionMap.ContainsKey(number))
- {
- var position = PositionMap[number];
- Markers[position.Item1, position.Item2] = 1;
- }
- }
- public bool BoardWins()
- {
- // check horizontal
- var iMarkers = 0;
- for (var i = 0; i < 5; i++)
- {
- iMarkers = 0;
- for (var j = 0; j < 5; j++)
- {
- if (Markers[i,j] == 1)
- {
- iMarkers++;
- }
- }
- if (iMarkers == 5)
- {
- WinIPos = i;
- HasWon = true;
- return true;
- }
- }
- // check vertical
- var jMarkers = 0;
- for (var j = 0; j < 5; j++)
- {
- jMarkers = 0;
- for (var i = 0; i < 5; i++)
- {
- if (Markers[i, j] == 1)
- {
- jMarkers++;
- }
- }
- if (jMarkers == 5)
- {
- WinJPos = j;
- HasWon = true;
- return true;
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement