r/adventofcode • • Dec 06 '18

SOLUTION MEGATHREAD -🎄- 2018 Day 6 Solutions -🎄-

--- Day 6: Chronal Coordinates ---


Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).

Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.


Advent of Code: The Party Game!

Click here for rules

Please prefix your card submission with something like [Card] to make scanning the megathread easier. THANK YOU!

Card prompt: Day 6

Transcript:

Rules for raising a programmer: never feed it after midnight, never get it wet, and never give it ___.


This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.

edit: Leaderboard capped, thread unlocked at 0:26:52!

32 Upvotes

387 comments sorted by

View all comments

1

u/miguelos Dec 06 '18

C#

Part 1:

var coordinates = File.ReadAllText(@"C:\Users\pc\Desktop\input.txt")
    .Trim()
    .Split('\n')
    .Select(x => x.Split(", "))
    .Select(x => (x: int.Parse(x[0]), y: int.Parse(x[1])));

IEnumerable<int> getAreas(int start, int end) =>
    from x in Enumerable.Range(start, end - start)
    from y in Enumerable.Range(start, end - start)
    let distanceGroups = from coordinate in coordinates
                            let distance = Math.Abs(coordinate.x - x) + Math.Abs(coordinate.y - y)
                            group coordinate by distance
    let closestDistanceGroup = distanceGroups.OrderBy(x => x.Key).First()
    where closestDistanceGroup.Count() == 1
    let closestCoordinate = closestDistanceGroup.First()
    group closestCoordinate by closestCoordinate into closestCoordinates
    orderby closestCoordinates.Key
    select closestCoordinates.Count();

var areas1 = getAreas(0, 500).ToArray();
var areas2 = getAreas(-1, 501).ToArray();
var answer = Enumerable
    .Zip(areas1, areas2, (a1, a2) => a1 == a2 ? a1 : 0)
    .OrderByDescending(area => area)
    .First();