12345678910111213141516171819202122232425262728 |
- #!/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 }
|