Files
aoc24/day23/d23p1.swift
2024-12-22 22:39:55 -08:00

44 lines
1.3 KiB
Swift

import Foundation
typealias Network = [String: Set<String>]
func readInput(_ filePath: String) throws -> Network {
var map: Network = [:]
try String(contentsOfFile: filePath, encoding: .ascii)
.split(separator: "\n").map { $0.split(separator: "-") }
.map { (String($0[0]), String($0[1])) }.forEach { m1, m2 in
map[m1, default: []].insert(m2)
map[m2, default: []].insert(m1)
}
return map
}
struct Triple : Hashable, CustomStringConvertible {
let (m1, m2, m3): (String, String, String)
var description: String { return "\(m1)-\(m2)-\(m3)" }
var hasT: Bool {
return m1.first == "t" || m2.first == "t" || m3.first == "t"
}
init (_ m1: String, _ m2: String, _ m3: String) {
let ms = [m1, m2, m3].sorted()
(self.m1, self.m2, self.m3) = (ms[0], ms[1], ms[2])
}
}
func checkTriples(_ network: Network) -> Set<Triple> {
var triples: Set<Triple> = []
for (m1, m1conns) in network {
for m2 in m1conns {
for m3 in network[m2]! {
if network[m3]!.contains(m1) {
triples.insert(Triple(m1, m2, m3))
}
}
}
}
return triples
}
let conns = try readInput(CommandLine.arguments[1])
print(checkTriples(conns).filter { $0.hasT }.count)