|
|
|
|
using AdventOfCode.Contracts;
|
|
|
|
|
using AoC.Utils;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
namespace AoC.TwentyTwenty
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace AoC.TwentyTwenty
|
|
|
|
|
{
|
|
|
|
|
class Two : Day
|
|
|
|
|
{
|
|
|
|
|
public override int Year => 2020;
|
|
|
|
|
public override int DayNumber => 2;
|
|
|
|
|
|
|
|
|
|
public override void BigBoi(string[] input)
|
|
|
|
|
{
|
|
|
|
|
throw new NotImplementedException();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void Part1(string[] input)
|
|
|
|
|
{
|
|
|
|
|
int total = 0;
|
|
|
|
|
foreach (string s in input)
|
|
|
|
|
{
|
|
|
|
|
int occurences = 0;
|
|
|
|
|
string[] split = s.Split(" ");
|
|
|
|
|
string[] startEnd = split[0].Split("-");
|
|
|
|
|
int start = int.Parse(startEnd[0]);
|
|
|
|
|
int end = int.Parse(startEnd[1]);
|
|
|
|
|
char c = split[1][0];
|
|
|
|
|
|
|
|
|
|
foreach (char letter in split[2])
|
|
|
|
|
{
|
|
|
|
|
if (letter == c)
|
|
|
|
|
{
|
|
|
|
|
occurences += 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (occurences >= start && occurences <= end)
|
|
|
|
|
{
|
|
|
|
|
total += 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Print("1", total);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void Part2(string[] input)
|
|
|
|
|
{
|
|
|
|
|
int total = 0;
|
|
|
|
|
foreach (string s in input)
|
|
|
|
|
{
|
|
|
|
|
string[] split = s.Split(" ");
|
|
|
|
|
string[] startEnd = split[0].Split("-");
|
|
|
|
|
string password = split[2];
|
|
|
|
|
char start = password[int.Parse(startEnd[0]) - 1];
|
|
|
|
|
char end = password[int.Parse(startEnd[1]) - 1];
|
|
|
|
|
char c = split[1][0];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool thing = (start, end) switch
|
|
|
|
|
{
|
|
|
|
|
_ when start == end => false,
|
|
|
|
|
_ when start == c || end == c => true,
|
|
|
|
|
_ => false
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (thing)
|
|
|
|
|
{
|
|
|
|
|
total += 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Print("2", total);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|