using System.Collections.Generic;
var response = await new HttpClient().GetStringAsync("https://tompafireadventofcode.free.beeceptor.com/day3");
var rows = response.Split(Environment.NewLine).Select(line => line.Select((val, index) => new CellValue(index, val)));
var columns = rows.SelectMany(row => row).GroupBy(x => x.Index);
var mostCommonPerColumn = columns.Select(GetMostCommon);
var leastCommonPerColumn = columns.Select(GetLeastCommon);
var gamma = GetDecimalValue(mostCommonPerColumn);
var epsilon = GetDecimalValue(leastCommonPerColumn);
var result = gamma * epsilon;
Console.WriteLine(result);
var oxygenValues = rows.ToList();
var co2ScrubValues = rows.ToList();
for (var i = 0; i < columns.Count(); i++)
var mostCommon = GetMostCommon(oxygenValues.SelectMany(row => row).Where(x => x.Index == i));
oxygenValues.RemoveAll(row => row.ElementAt(i) != mostCommon);
var leastCommon = GetLeastCommon(co2ScrubValues.SelectMany(row => row).Where(x => x.Index == i));
co2ScrubValues.RemoveAll(row => row.ElementAt(i) != leastCommon);
var oxygen = GetDecimalValue(oxygenValues.SelectMany(v => v));
var co2Scrub = GetDecimalValue(co2ScrubValues.SelectMany(v => v));
var result2 = oxygen * co2Scrub;
Console.WriteLine(result2);
int GetDecimalValue(IEnumerable<CellValue> values)
return Convert.ToInt32(new string(values.Select(v => v.Value).ToArray()), 2);
CellValue GetMostCommon(IEnumerable<CellValue> values)
return values.OrderByDescending(x => values.Count(y => y == x)).ThenByDescending(x => x.Value).First();
CellValue GetLeastCommon(IEnumerable<CellValue> values)
return values.OrderBy(x => values.Count(y => y == x)).ThenBy(x => x.Value).First();
public record struct CellValue(int Index, char Value);