Nonoblock: Difference between revisions

Added Kotlin
(Added Kotlin)
Line 726:
blocks [2, 3], cells 4
No solution</pre>
 
=={{header|Kotlin}}==
{{trans|Java}}
<lang scala>// version 1.2.0
 
fun printBlock(data: String, len: Int) {
val sumChars = data.toCharArray().map { it.toInt() - 48 }.sum()
val a = data.toCharArray()
println("\nblocks ${a.asList()}, cells $len")
if (len - sumChars <= 0) {
println("No solution")
return
}
val prep = a.map { "1".repeat(it.toInt() - 48) }
for (r in genSequence(prep, len - sumChars + 1)) println(r.substring(1))
}
 
fun genSequence(ones: List<String>, numZeros: Int): List<String> {
if (ones.isEmpty()) return listOf("0".repeat(numZeros))
val result = mutableListOf<String>()
for (x in 1 until numZeros - ones.size + 2) {
val skipOne = ones.drop(1)
for (tail in genSequence(skipOne, numZeros - x)) {
result.add("0".repeat(x) + ones[0] + tail)
}
}
return result
}
 
fun main(args: Array<String>) {
printBlock("21", 5)
printBlock("", 5)
printBlock("8", 10)
printBlock("2323", 15)
printBlock("23", 5)
}</lang>
 
{{out}}
<pre>
blocks [2, 1], cells 5
11010
11001
01101
 
blocks [], cells 5
00000
 
blocks [8], cells 10
1111111100
0111111110
0011111111
 
blocks [2, 3, 2, 3], cells 15
110111011011100
110111011001110
110111011000111
110111001101110
110111001100111
110111000110111
110011101101110
110011101100111
110011100110111
110001110110111
011011101101110
011011101100111
011011100110111
011001110110111
001101110110111
 
blocks [2, 3], cells 5
No solution
</pre>
 
=={{header|Phix}}==
9,485

edits