Nonoblock: Difference between revisions

Swift - use nested functions instead of class
(Added Swift solution)
(Swift - use nested functions instead of class)
Line 2,303:
<lang swift>import Foundation
 
func private initnonoblock(cells: Int, blocks: [Int]) {
class Nonoblock {
letprint("\(cells) cells: Intand blocks \(blocks):")
let totalBlockSize = blocks:.reduce(0, [Int]+)
if cells < totalBlockSize + blocks.count - 1 {
var positions: [Int]
print("no solution")
var count: Int
return
 
private init(cells: Int, blocks: [Int]) {
self.cells = cells
self.blocks = blocks
positions = Array(repeating: 0, count: blocks.count)
count = 0
}
 
class func printSolutions(cells: Int, blocks: [Int]) {
print("\(cells) cells and blocks \(blocks):")
var totalBlockSize = 0
for blockSize in blocks {
totalBlockSize += blockSize
}
if cells < totalBlockSize + blocks.count - 1 {
print("no solution")
return
}
let nb = Nonoblock(cells: cells, blocks: blocks)
nb.solve(cells: cells, index: 0, totalBlockSize: totalBlockSize)
}
 
private func solve(cells: Int, index: Int, totalBlockSize: Int) {
if index == blocks.count {
count += 1
Line 2,347 ⟶ 2,328:
}
 
private func printSolution() {
var str = String(format: "%2d ", count)
var c = 0
Line 2,367 ⟶ 2,348:
print(str)
}
}
var positions = Array(repeating: 0, count: blocks.count)
var count: Int= 0
nb.solve(cells: cells, index: 0, totalBlockSize: totalBlockSize)
}
 
Nonoblock.printSolutionsnonoblock(cells: 5, blocks: [2, 1])
print()
 
Nonoblock.printSolutionsnonoblock(cells: 5, blocks: [])
print()
 
Nonoblock.printSolutionsnonoblock(cells: 10, blocks: [8])
print()
 
Nonoblock.printSolutionsnonoblock(cells: 15, blocks: [2, 3, 2, 3])
print()
 
Nonoblock.printSolutionsnonoblock(cells: 5, blocks: [2, 3])</lang>
 
{{out}}
1,777

edits