21 lines
526 B
Text
21 lines
526 B
Text
func cantor (height) {
|
|
var width = 3**(height - 1)
|
|
var lines = height.of { "\N{FULL BLOCK}" * width }
|
|
|
|
func trim_middle_third (len, start, index) {
|
|
var seg = (len // 3) || return()
|
|
|
|
for i, j in ((index ..^ height) ~X (0 ..^ seg)) {
|
|
lines[i].replace!(Regex("^.{#{start + seg + j}}\\K."), ' ')
|
|
}
|
|
|
|
[0, 2*seg].each { |k|
|
|
trim_middle_third(seg, start + k, index + 1)
|
|
}
|
|
}
|
|
|
|
trim_middle_third(width, 0, 1)
|
|
return lines
|
|
}
|
|
|
|
cantor(5).each { .say }
|