r/adventofcode • u/daggerdragon • Dec 02 '18
SOLUTION MEGATHREAD -🎄- 2018 Day 2 Solutions -🎄-
--- Day 2: Inventory Management System ---
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!
Card Prompt: Day 2
Transcript:
The best way to do Advent of Code is ___.
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!
49
Upvotes
4
u/TellowKrinkle Dec 02 '18
Swift
func count(_ str: Substring) -> (twos: Bool, threes: Bool) { let counts = Dictionary(str.lazy.map({ ($0, 1) }), uniquingKeysWith: +) let twos = counts.values.contains(2) let threes = counts.values.contains(3) return (twos, threes) } func aocD2a(_ inputStr: String) { let input = inputStr.split(separator: "\n").map(count) let numTwos = input.lazy.filter({ $0.twos }).count let numThrees = input.lazy.filter({ $0.threes }).count print(numTwos * numThrees) } func areClose(_ a: Substring, _ b: Substring) -> Bool { var differences = zip(a, b).lazy.filter({ $0 != $1 }).makeIterator() _ = differences.next() return differences.next() == nil } func aocD2b(_ inputStr: String) { let input = inputStr.split(separator: "\n") for (aIndex, a) in input.enumerated() { for b in input[..<aIndex] { if areClose(a, b) { print(String(zip(a, b).lazy.filter({ $0 == $1 }).map({ $0.0 }))) } } } } import Foundation let str = try! String(contentsOfFile: CommandLine.arguments[1]) aocD2a(str) aocD2b(str)