Skip to content

Instantly share code, notes, and snippets.

@ktwrd
Created December 2, 2024 06:53
Show Gist options
  • Select an option

  • Save ktwrd/341867611bbe9889524bca230933deef to your computer and use it in GitHub Desktop.

Select an option

Save ktwrd/341867611bbe9889524bca230933deef to your computer and use it in GitHub Desktop.
Advent of Code 2024 - Day 2
// Uploaded as a gist instead in my AoC repo because I forgot to push yesterday :(
var content = File.ReadAllLines("input.txt");
int result = 0;
int secondResult = 0;
for (int i = 0; i < content.Length; i++)
{
var line = content[i];
if (string.IsNullOrEmpty(line))
continue;
var data = line.Split(' ').Select(int.Parse).ToArray();
if (IsSafe(data))
{
result++;
}
if (IsSafe(data))
{
secondResult++;
}
else
{
for (int x = 0; x < data.Length; x++)
{
var tmp = line.Split(' ').Select(int.Parse).ToList();
tmp.RemoveAt(x);
if (IsSafe(tmp.ToArray()))
{
secondResult++;
break;
}
}
}
}
Console.WriteLine($"Result: {result}");
Console.WriteLine($"Result: {secondResult} (Part 2)");
bool IsSafe(int[] data)
{
var a = Rule1(data);
var b = Rule2(data);
return a == false && b == false;
}
bool Rule1(int[] data)
{
var p = new int[data.Length - 1];
for (int i = 0; i < data.Length; i++)
{
if (i > 0)
{
p[i - 1] = data[i - 1] == data[i] ? 0 : data[i - 1] > data[i] ? 1 : -1;
}
}
var a = 0;
var b = 0;
var c = 0;
for (int i = 0; i < p.Length; i++)
{
if (p[i] == 0)
a++;
else if (p[i] == 1)
b++;
else if (p[i] == -1)
c++;
}
var s = true;
if (a > 0 && b == 0 && c == 0)
s = false;
else if (a == 0 && b > 0 && c == 0)
s = false;
else if (a == 0 && b == 0 && c > 0)
s = false;
return s;
}
bool Rule2(int[] data)
{
bool s = false;
for (int i = 0; i < data.Length; i++)
{
if (i > 0)
{
var abs = Math.Abs(data[i] - data[i - 1]);
if (abs > 3 || abs < 1)
{
s = true;
}
}
}
return s;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment