-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay01.cs
40 lines (34 loc) · 1.17 KB
/
Day01.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using LanguageExt;
using static MoreLinq.Extensions.PairwiseExtension;
using WinstonPuckett.PipeExtensions;
using Microsoft.FSharp.Collections;
using System.Reflection;
public static class Day01
{
private static async Task<IList<int>> GetInput() =>
await Inputs
.Read(MethodBase.GetCurrentMethod()?.DeclaringType?.FullName?.Split("+").First() ?? "")
.Select(i => int.Parse(i))
.ToListAsync();
public static async Task<int> One() =>
(await GetInput())
.Pipe(CountIncreases);
public static async Task<int> Two() =>
(await GetInput())
.Pipe(ToGroupsOfThree)
.Pipe(ToSums)
.Pipe(CountIncreases);
public static int CountIncreases(IList<int> inputs) =>
inputs
.Prepend(int.MaxValue)
.Pairwise((previous, current) => current > previous ? 1 : 0)
.Sum();
public static IEnumerable<IList<int>> ToGroupsOfThree(IList<int> inputs) =>
SeqModule
.Windowed(3, inputs)
.Select(x => x.ToList());
public static IList<int> ToSums(IEnumerable<IList<int>> inputsGrouped) =>
inputsGrouped
.Select(i => i.Sum())
.ToList();
}