Created
December 18, 2020 14:43
-
-
Save felix-larsen/e76394306d3959b682ee76450d0ebe4d to your computer and use it in GitHub Desktop.
18th December solution - Advent of Code 2020 - swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func calcNoBrackets(expression: String) -> Int { | |
let parts = expression.components(separatedBy: " ") | |
let numbers = parts.enumerated().filter {$0.0 % 2 == 0 && !$0.1.isEmpty }.map { $0.1.toInt() } | |
let operators: [((Int,Int) -> Int)] = parts.enumerated().filter {$0.0 % 2 == 1 && !$0.1.isEmpty }.map { $0.1.trimmingCharacters(in: .whitespacesAndNewlines) }.map { | |
switch $0 { | |
case "*": return (*) | |
case "+": return (+) | |
default: | |
return (+) | |
} | |
} | |
var result = numbers.first! | |
for (i, op) in operators.enumerated() { | |
result = op(result, numbers[i+1]) | |
} | |
return result | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func calcNoBrackets(expression: String) -> Int { | |
let parts = expression.components(separatedBy: " ") | |
var numbers = parts.enumerated().filter {$0.0 % 2 == 0 && !$0.1.isEmpty }.map { $0.1.toInt() } | |
var operators: [(String, ((Int,Int) -> Int))] = parts.enumerated().filter {$0.0 % 2 == 1 && !$0.1.isEmpty }.map { $0.1.trimmingCharacters(in: .whitespacesAndNewlines) }.map { | |
switch $0 { | |
case "*": return ($0,*) | |
case "+": return ($0,+) | |
default: | |
return ($0,+) | |
} | |
} | |
var factors = [Int]() | |
var i = 0 | |
while i < operators.count { | |
if operators[i].0 == "*" { | |
factors.append(numbers[i]) | |
i += 1 | |
} else { | |
numbers[i] = operators[i].1(numbers[i], numbers[i+1]) | |
numbers.remove(at: i+1) | |
operators.remove(at: i) | |
} | |
} | |
return numbers.reduce(1, *) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment