Task

Draw a Cantor set.



See details at this Wikipedia webpage:   Cantor set

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 }