1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/usr/bin/ruby
- var(m=14, scale=3) = ARGV.map{.to_i}...
- (var world = Hash.new){0}{0} = 1
- var loc = 0
- var dir = 1i
- var fib = ['1', '0']
- func fib_word(n) {
- fib[n] \\= (fib_word(n-1) + fib_word(n-2))
- }
- func step {
- scale.times {
- loc += dir
- world{loc.im}{loc.re} = 1
- }
- }
- func turn_left { dir *= 1i }
- func turn_right { dir *= -1i }
- var n = 1
- fib_word(m).each_char { |c|
- if (c == '0') {
- step()
- n % 2 == 0 ? turn_left()
- : turn_right()
- } else { n++ }
- }
- func braille_graphics(a) {
- var (xlo, xhi, ylo, yhi) = +([Inf, -Inf]*2)...
- a.each_key { |y|
- ylo.min!(y.to_i)
- yhi.max!(y.to_i)
- a{y}.each_key { |x|
- xlo.min!(x.to_i)
- xhi.max!(x.to_i)
- }
- }
- for y in (ylo .. (yhi, 4)) {
- for x in (xlo .. (xhi, 2)) {
- var cell = 0x2800
- a{y+0}{x+0} && (cell += 1)
- a{y+1}{x+0} && (cell += 2)
- a{y+2}{x+0} && (cell += 4)
- a{y+0}{x+1} && (cell += 8)
- a{y+1}{x+1} && (cell += 16)
- a{y+2}{x+1} && (cell += 32)
- a{y+3}{x+0} && (cell += 64)
- a{y+3}{x+1} && (cell += 128)
- print cell.chr
- }
- print "\n"
- }
- }
- braille_graphics(world)
|