Skip to content

Instantly share code, notes, and snippets.

@Cosmo
Last active October 17, 2015 00:47
Show Gist options
  • Save Cosmo/81765cda64af72e2af89 to your computer and use it in GitHub Desktop.
Save Cosmo/81765cda64af72e2af89 to your computer and use it in GitHub Desktop.
split int by array of ints
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