d02
This commit is contained in:
		
							
								
								
									
										29
									
								
								day02/d02p2.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								day02/d02p2.swift
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| import Foundation | ||||
|  | ||||
| func readInput(filePath: String) -> [[Int?]]? { | ||||
|     let content =  try? String(contentsOfFile: filePath, encoding: .ascii) | ||||
|     let lines = content?.split(separator: "\n") | ||||
|     return lines?.map { $0.split(separator: " ").map { Int($0) } } | ||||
| } | ||||
|  | ||||
| func safe(_ report: [Int?]) -> Bool { | ||||
|     if report.contains(nil) { | ||||
|         return false | ||||
|     } | ||||
|     let diffs = zip(report.dropFirst(), report).map { $0.0! - $0.1! } | ||||
|     return diffs.allSatisfy { abs($0) >= 1 } | ||||
|         && diffs.allSatisfy { abs($0) <= 3 } | ||||
|         && (diffs.allSatisfy { $0 > 0 } || diffs.allSatisfy { 0 > $0 }) | ||||
| } | ||||
|  | ||||
| func drop<T>(_ l: [T], at: Int) -> [T] { | ||||
|     return l.enumerated().filter { $0.0 != at }.map { $0.1 } | ||||
| } | ||||
|  | ||||
| func mutate<T>(_ l: [T]) -> [[T]] { | ||||
|     return (0..<l.count).map { drop(l, at: $0) } | ||||
| } | ||||
|  | ||||
| let reports = readInput(filePath: CommandLine.arguments[1]) | ||||
| let answer = reports!.map(mutate).filter { $0.contains(where: safe) }.count | ||||
| print(answer) | ||||
		Reference in New Issue
	
	Block a user