Skip to content

Instantly share code, notes, and snippets.

@i-am-unknown-81514525
Last active December 10, 2024 20:38
Show Gist options
  • Select an option

  • Save i-am-unknown-81514525/58de6a414b39f0c66e4b3d342fa5d098 to your computer and use it in GitHub Desktop.

Select an option

Save i-am-unknown-81514525/58de6a414b39f0c66e4b3d342fa5d098 to your computer and use it in GitHub Desktop.
AOC csharp one-line
using System;
using System.Linq;
using System.IO;
namespace D10
{
internal class Program
{
static int P1(string[] d, int r = -1, int c = -1, Tuple<int, int>[] prev = null) => prev == null
? Enumerable.Range(0, d.Length)
.Where(nr => d[nr] != "")
.Select(
nr => Enumerable.Range(0, d[nr].Length)
.Where(nc => d[nr][nc] == '0')
.Sum(nc => P1(d, nr, nc, new Tuple<int, int>[d.Length * d[nr].Length]))
).Sum()
: prev.Contains(new Tuple<int, int>(r, c))
? 0
:
((prev[Enumerable.Range(0, prev.Length)
.SkipWhile(i => prev[i] != null)
.Take(1)
.ToArray()[0]
] = new Tuple<int, int>(r, c)).Item1 == 0?0:0) +
(
d[r][c] == '9'?
1
:
(
(r - 1 >= 0 ? d[r - 1][c] - d[r][c] == 1 ? P1(d, r - 1, c, prev) : 0 : 0) +
(c - 1 >= 0 ? d[r][c - 1] - d[r][c] == 1 ? P1(d, r, c - 1, prev) : 0 : 0) +
(r + 1 < d.Length ? d[r + 1][c] - d[r][c] == 1 ? P1(d, r + 1, c, prev) : 0 : 0) +
(c + 1 < d[r].Length ? d[r][c + 1] - d[r][c] == 1 ? P1(d, r, c + 1, prev) : 0 : 0)
)
);
static int P2(string[] d, int r = -1, int c = -1, Tuple<int, int>[] prev = null) => prev == null
? Enumerable.Range(0, d.Length)
.Where(nr => d[nr] != "")
.Select(
nr => Enumerable.Range(0, d[nr].Length)
.Where(nc => d[nr][nc] == '0')
.Sum(nc => P2(d, nr, nc, new Tuple<int, int>[d.Length * d[nr].Length]))
).Sum()
: prev.Contains(new Tuple<int, int>(r, c))
? 0
: (
(prev[Enumerable.Range(0, prev.Length)
.SkipWhile(i => prev[i] != null)
.Take(1)
.ToArray()[0]
] = new Tuple<int, int>(r, c)).Item1 == 0 ? 0 : 0
) + (d[r][c] == '9'
? 1
:
(
(r - 1 >= 0 ? d[r - 1][c] - d[r][c] == 1 ? P2(d, r - 1, c, prev.ToArray()) : 0 : 0) +
(c - 1 >= 0 ? d[r][c - 1] - d[r][c] == 1 ? P2(d, r, c - 1, prev.ToArray()) : 0 : 0) +
(r + 1 < d.Length ? d[r + 1][c] - d[r][c] == 1 ? P2(d, r + 1, c, prev.ToArray()) : 0 : 0) +
(c + 1 < d[r].Length ? d[r][c + 1] - d[r][c] == 1 ? P2(d, r, c + 1, prev.ToArray()) : 0 : 0)
)
);
static void Main(string[] _) => Console.WriteLine(
"Part 1: "+P1(File.ReadAllLines(".aoc-cache/aoc-2024-10.content")).ToString()+
"\nPart 2: "+P2(File.ReadAllLines(".aoc-cache/aoc-2024-10.content"))+
""
);
}
}
using System;
using System.Linq;
using System.IO;
namespace D6
{
internal class Program
{
static int P1(string[] d) => Enumerable.Range(1, 32768) // Limited cause amount of run is not in my control
.Aggregate(
new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>[]{
new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(
true,
Enumerable.Range(0, d.Length)
.SelectMany(
r => Enumerable.Range(0, d[r].Length)
.Where(c => d[r][c] == '^')
.Select(c => new Tuple<int, int>(r, c))
)
.ToArray()[0],
new Tuple<int, int>[d.Length * d[0].Length],
new Tuple<int, int>(-1, 0)
)
}
.Select(
x=>new Tuple<bool, Tuple<int,int>, Tuple<int,int>[], Tuple<int,int>>(x.Item1, x.Item2, (x.Item3[0]=x.Item2).Item1==-1?x.Item3:x.Item3,x.Item4)
).ToArray()[0],
((tuple, i) =>
!tuple.Item1
? tuple
:
(
tuple.Item2.Item1 + tuple.Item4.Item1 < 0 ||
tuple.Item2.Item1 + tuple.Item4.Item1 >= d.Length ||
tuple.Item2.Item2 + tuple.Item4.Item2 < 0 ||
tuple.Item2.Item2 + tuple.Item4.Item2 >= d[tuple.Item2.Item1].Length
)
?
new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(false, tuple.Item2,
tuple.Item3, tuple.Item4)
: d[tuple.Item2.Item1 + tuple.Item4.Item1][tuple.Item2.Item2 + tuple.Item4.Item2] == '#'
? new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(true,
tuple.Item2, tuple.Item3,
new Tuple<int, int>(tuple.Item4.Item2, -tuple.Item4.Item1))
: tuple.Item3.Contains(new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
))
? new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(
true,
new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
),
tuple.Item3,
tuple.Item4
)
:
new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(
true,
new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
),
// new Tuple<int, int>[][]
// {
// tuple.Item3,
// new Tuple<int, int>[]{ tuple.Item2 }
// }
// .SelectMany(x => x)
// .ToArray(),
(tuple.Item3[i]=new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
)).Item1==-1?tuple.Item3:tuple.Item3,
tuple.Item4
)
)
).Item3.Count(x=>x!=null);
static int P2(string[] d)=>Enumerable.Range(0, 32768) // Limited cause amount of run is not in my control
.Aggregate(
new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(
true,
Enumerable.Range(0, d.Length)
.SelectMany(
r => Enumerable.Range(0, d[r].Length)
.Where(c => d[r][c] == '^')
.Select(c => new Tuple<int, int>(r, c))
)
.ToArray()[0],
new Tuple<int, int>[d.Length*d[0].Length],
new Tuple<int, int>(-1, 0)
),
((tuple, i) =>
!tuple.Item1
? tuple
:
(
tuple.Item2.Item1 + tuple.Item4.Item1 < 0 ||
tuple.Item2.Item1 + tuple.Item4.Item1 >= d.Length ||
tuple.Item2.Item2 + tuple.Item4.Item2 < 0 ||
tuple.Item2.Item2 + tuple.Item4.Item2 >= d[tuple.Item2.Item1].Length
)
?
new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(false, tuple.Item2,
tuple.Item3, tuple.Item4)
: d[tuple.Item2.Item1 + tuple.Item4.Item1][tuple.Item2.Item2 + tuple.Item4.Item2] == '#'
? new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(true,
tuple.Item2, tuple.Item3,
new Tuple<int, int>(tuple.Item4.Item2, -tuple.Item4.Item1))
: tuple.Item3.Contains(new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
))
? new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(
true,
new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
),
tuple.Item3,
tuple.Item4
)
:
new Tuple<bool, Tuple<int, int>, Tuple<int, int>[], Tuple<int, int>>(
true,
new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
),
// new Tuple<int, int>[][]
// {
// tuple.Item3,
// new Tuple<int, int>[]{ tuple.Item2 }
// }
// .SelectMany(x => x)
// .ToArray(),
(tuple.Item3[i]=new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
)).Item1==-1?tuple.Item3:tuple.Item3,
tuple.Item4
)
)
).Item3
.Where(x=>x!=null)
.Where(
coord=>Enumerable.Range(0,10000).Aggregate(
new Tuple<int, Tuple<int,int>,Tuple<int,int,int,int>[], Tuple<int,int>>(
0,
Enumerable.Range(0, d.Length)
.SelectMany(
r => Enumerable.Range(0, d[r].Length)
.Where(c => d[r][c] == '^')
.Select(c => new Tuple<int, int>(r, c))
)
.ToArray()[0]
,
new Tuple<int,int,int,int>[d.Length*d[0].Length*4],
new Tuple<int,int> (-1,0)
),
(
(tuple, i) => tuple.Item1!=0?
tuple:
(
tuple.Item2.Item1 + tuple.Item4.Item1 < 0 ||
tuple.Item2.Item1 + tuple.Item4.Item1 >= d.Length ||
tuple.Item2.Item2 + tuple.Item4.Item2 < 0 ||
tuple.Item2.Item2 + tuple.Item4.Item2 >= d[tuple.Item2.Item1].Length
)?
new Tuple<int, Tuple<int,int>,Tuple<int,int,int,int>[], Tuple<int,int>> (
1,
tuple.Item2,
tuple.Item3,
tuple.Item4
):
(d[tuple.Item2.Item1 + tuple.Item4.Item1][tuple.Item2.Item2 + tuple.Item4.Item2] == '#' ||
(
tuple.Item2.Item1 + tuple.Item4.Item1 == coord.Item1 &&
tuple.Item2.Item2 + tuple.Item4.Item2 == coord.Item2)
)?
tuple.Item3.Contains(new Tuple<int,int,int,int> (
tuple.Item2.Item1+tuple.Item4.Item1,
tuple.Item2.Item2+tuple.Item4.Item2,
tuple.Item4.Item1,
tuple.Item4.Item2)
)?
new Tuple<int, Tuple<int,int>,Tuple<int,int,int,int>[], Tuple<int,int>> (
2,
tuple.Item2,
tuple.Item3,
tuple.Item4
):
new Tuple<int, Tuple<int,int>,Tuple<int,int,int,int>[], Tuple<int,int>> (
0,
tuple.Item2,
(tuple.Item3[i] = new Tuple<int, int, int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2,
tuple.Item4.Item1,
tuple.Item4.Item2)).Item1==-1?tuple.Item3:tuple.Item3,
new Tuple<int, int>(tuple.Item4.Item2, -tuple.Item4.Item1)
)
:
new Tuple<int, Tuple<int, int>, Tuple<int, int,int,int>[], Tuple<int, int>>(
0,
new Tuple<int, int>(
tuple.Item2.Item1 + tuple.Item4.Item1,
tuple.Item2.Item2 + tuple.Item4.Item2
),
tuple.Item3,
tuple.Item4
)
)
).Item1 == 2
).Count();
static void Main(string[] _)=>Console.WriteLine(
"Part 1: "+P1(File.ReadAllLines(".aoc-cache/aoc-2024-6.content")).ToString()+
"\nPart 2: "+P2(File.ReadAllLines(".aoc-cache/aoc-2024-6.content"))+
""
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment