Last active
October 17, 2015 00:47
-
-
Save Cosmo/81765cda64af72e2af89 to your computer and use it in GitHub Desktop.
split int by array of ints
This file contains 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
struct NumberComposition { | |
var value: Int | |
var numbers: [Int] | |
var composition: [Int] { | |
return generateComposition() | |
} | |
init(of value: Int, fromNumbers numbers: [Int]) { | |
self.value = value | |
self.numbers = numbers | |
} | |
private func generateComposition() -> [Int] { | |
var tempValue = self.value | |
var result = [Int]() | |
while tempValue > 0 { | |
let filteredNumbers = numbers.filter({ tempValue >= $0 }) | |
guard let maxValidNumber = filteredNumbers.maxElement() else { | |
fatalError("Can't break down \(self.value) with \(self.numbers)") | |
} | |
result.append(maxValidNumber) | |
tempValue -= maxValidNumber | |
} | |
return result | |
} | |
} | |
var result = NumberComposition(of: 27, fromNumbers: [1,2,3,4,5,7,15]) | |
result.composition |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment