Created
December 3, 2016 11:10
-
-
Save Pyrobolser/f0a2a9fef4e3fa9219fd750116568c53 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
using System.Linq; | |
using static System.Console; | |
namespace AdventOfCode2016 | |
{ | |
// http://adventofcode.com/2016/day/3 | |
public static class Day3 | |
{ | |
// Find the number of possible triangles. | |
public static void Resolve() | |
{ | |
var input = ReadInput(); | |
var triangles = GetTriangles(input); | |
var columnTriangles = GetColumnTriangles(input); | |
var validTriangles = GetValidTriangles(triangles); | |
var validColumnTriangles = GetValidTriangles(columnTriangles); | |
WriteLine($"Among the listed triangles, { validTriangles } are possible(s)."); | |
WriteLine($"Among the listed triangles in columns, { validColumnTriangles } are possible(s)."); | |
} | |
// Read the Day 3 input. | |
private static string[] ReadInput() | |
{ | |
return File.ReadAllLines(@"Inputs\Day3.txt").Select(s => s.TrimStart()).ToArray(); | |
} | |
// Get the inline triangles. | |
private static int[,] GetTriangles(string[] input) | |
{ | |
int[,] triangles = new int[input.Length, 3]; | |
for (int i = 0; i < input.Length; i++) | |
{ | |
var values = input[i].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); | |
triangles[i, 0] = int.Parse(values[0]); | |
triangles[i, 1] = int.Parse(values[1]); | |
triangles[i, 2] = int.Parse(values[2]); | |
} | |
return triangles; | |
} | |
// Get the triangles in columns. | |
private static int[,] GetColumnTriangles(string[] input) | |
{ | |
int[,] triangles = new int[input.Length, 3]; | |
var row = 0; | |
var col = 0; | |
foreach(string s in input) | |
{ | |
var values = s.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); | |
triangles[col, row] = int.Parse(values[0]); | |
triangles[col + 1, row] = int.Parse(values[1]); | |
triangles[col + 2 , row] = int.Parse(values[2]); | |
row++; | |
if (row == 3) | |
{ | |
row = 0; | |
col += 3; | |
} | |
} | |
return triangles; | |
} | |
// Get the number of valid triangles. | |
private static int GetValidTriangles(int[,] triangles) | |
{ | |
var isValid = true; | |
var validTriangles = 0; | |
for (int i = 0; i < triangles.GetLength(0); i++) | |
{ | |
isValid = (triangles[i, 0] + triangles[i, 1] > triangles[i, 2]) | |
&& | |
(triangles[i, 2] + triangles[i, 0] > triangles[i, 1]) | |
&& | |
(triangles[i, 1] + triangles[i, 2] > triangles[i, 0]); | |
if (isValid) | |
validTriangles++; | |
} | |
return validTriangles; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment