Nonoblock: Difference between revisions

(Swift - simplified code)
Line 1,446:
Nonoblock 5,2,3,2
</lang>
 
=={{header|Nim}}==
{{trans|Go}}
<lang Nim>import math, sequtils, strformat, strutils
 
 
proc genSequence(ones: seq[string]; numZeroes: Natural): seq[string] =
if ones.len == 0: return @[repeat('0', numZeroes)]
for x in 1..(numZeroes - ones.len + 1):
let skipOne = ones[1..^1]
for tail in genSequence(skipOne, numZeroes - x):
result.add repeat('0', x) & ones[0] & tail
 
 
proc printBlock(data: string; length: Positive) =
 
let a = mapIt(data, ord(it) - ord('0'))
let sumBytes = sum(a)
 
echo &"\nblocks {($a)[1..^1]} cells {length}"
if length - sumBytes <= 0:
echo "No solution"
return
 
var prep: seq[string]
for b in a: prep.add repeat('1', b)
 
for r in genSequence(prep, length - sumBytes + 1):
echo r[1..^1]
 
 
when isMainModule:
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|Perl}}==
Anonymous user