Advertisement
Guest User

Untitled

a guest
Dec 8th, 2022
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.78 KB | None | 0 0
  1. public static void Solve()
  2. {
  3.     var input = File.ReadAllLines("AdventOfCode/2022/08/Input.txt")
  4.         .Select(l => l.Chunk(1).Select(c => int.Parse(c)).ToArray()).ToArray();
  5.  
  6.     int result1 = input.Select((row, x) => row.Select((_, y) => VisibleFromOutside(input, x, y)))
  7.         .SelectMany(v => v).Count(v => v);
  8.  
  9.     int result2 = input.Select((row, x) => row.Select((_, y) => ScenicScore(input, x, y)))
  10.         .SelectMany(s => s).Max(s => s);
  11.  
  12.     Console.WriteLine($"Part 1: {result1}, Part 2: {result2}");
  13. }
  14.  
  15. private static bool VisibleFromOutside(this int[][] data, int x, int y) =>
  16.     Enumerable.Range(0, x).Select(i => data[i][y])
  17.         .All(t => t < data[x][y]) ||
  18.     Enumerable.Range(0, y).Select(i => data[x][i])
  19.         .All(t => t < data[x][y]) ||
  20.     Enumerable.Range(x, data.Length - x).Select(i => data[i][y]).Skip(1)
  21.         .All(t => t < data[x][y]) ||
  22.     Enumerable.Range(y, data[0].Length - y).Select(i => data[x][i]).Skip(1)
  23.         .All(t => t < data[x][y]);
  24.  
  25. private static int ScenicScore(int[][] data, int x, int y) =>
  26.     Enumerable.Range(0, x).Select(i => data[i][y]).Reverse()
  27.         .TakeUntil(t => t >= data[x][y]).Count() *
  28.     Enumerable.Range(0, y).Select(i => data[x][i]).Reverse()
  29.         .TakeUntil(t => t >= data[x][y]).Count() *
  30.     Enumerable.Range(x, data.Length - x).Select(i => data[i][y]).Skip(1)
  31.         .TakeUntil(t => t >= data[x][y]).Count() *
  32.     Enumerable.Range(y, data[0].Length - y).Select(i => data[x][i]).Skip(1)
  33.         .TakeUntil(t => t >= data[x][y]).Count();
  34.  
  35. private static IEnumerable<T> TakeUntil<T>(this IEnumerable<T> source, Func<T, bool> predicate)
  36. {
  37.     foreach (T item in source)
  38.     {
  39.         if (!predicate(item)) { yield return item; }
  40.         else { yield return item; yield break; }
  41.     }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement