import Foundation func nonoblock(cells: Int, blocks: [Int]) { print("\(cells) cells and blocks \(blocks):") let totalBlockSize = blocks.reduce(0, +) if cells < totalBlockSize + blocks.count - 1 { print("no solution") return } func solve(cells: Int, index: Int, totalBlockSize: Int, offset: Int) { if index == blocks.count { count += 1 print("\(String(format: "%2d", count)) \(String(output))") return } let blockSize = blocks[index] let maxPos = cells - (totalBlockSize + blocks.count - index - 1) let t = totalBlockSize - blockSize var c = cells - (blockSize + 1) for pos in 0...maxPos { fill(value: ".", offset: offset, count: maxPos + blockSize) fill(value: "#", offset: offset + pos, count: blockSize) solve(cells: c, index: index + 1, totalBlockSize: t, offset: offset + blockSize + pos + 1) c -= 1 } } func fill(value: Character, offset: Int, count: Int) { output.replaceSubrange(offset..