#!/usr/bin/ruby # ## https://rosettacode.org/wiki/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 }