# Merry Christmas!

**URL:** <https://www.ruby-forum.com/t/merry-christmas/80349>\
**Category:** Ruby\
**Created:** [December 24, 2006, 4:40pm UTC](https://www.ruby-forum.com/t/merry-christmas/80349 "2006-12-24T16:40:07Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [December 24, 2006, 4:40pm UTC](https://www.ruby-forum.com/t/merry-christmas/80349/1 "2006-12-24T16:40:07Z")

</div>

# In the spirit of ruby-talk:172428 and ruby-talk:124391…

eval “IyBUaGFua3MgZm9yIGxvb2tpbmcgYXQgbXkgY29kZS4KIwojIENvcHlyaWdodCAoQy  
kgMjAwMiwgMjAwNCwgMjAwNiAgQ2hyaXN0aWFuIE5ldWtpcmNoZW4gPGNobmV1a2lyY2hlbk  
Bn bW  
Fp bC5jb20+Ci MK  
Iy BUaGlzIHByb2d yY  
W0 gaXMgZn JlZSBzb2Z0d2FyZ Tsg eW  
91 IGNhbiByZWR pc3RyaWJ1dGUgaXQ gYW5k L2  
9y CiMgbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyB vZ  
iB 0aGUgR05VIEdlbmVyYWwgUHVibGl jIExpY2Vuc2U uC  
gp TVERPVVQuc3luYyA9IHRydWUKCmNs YXNzIFhNYXN IY  
WN rMjAwNgogIFdJRFRIID0gKEVOVlsi Q09MVU1OUyJ dI  
Hx 8IDgwKS50b19pCgogI GRlZiBpbm l0aWFsaXplC iA  
gI CBAbWV zc2FnZSA9ICIgTUVSUlk uQ0hSSVNUTU FT  
Lk FORC5BLkhBUFBZLk5FV y5ZRUFSISAgICAgICA gI  
CA gIgogICAgQHBvcyA9ID AKICBlbmQKCiAgZ GV  
mI HJ1bgogICAgY2xlYXIKCiAgICBpdGVyY XR  
lI DguNCBkbwogICAgICByZXNldAogICAgICB zZ  
XQ gMC4wMCwgMAogICAgICBzZXQgLTAuM jU  
sI DIwCiAgICAgIHNldCAgMC41MCwgNDAKCi Ag  
IC AgIHNob3cKICAgICA gc2xlZXAg MC4xCiAgICBlbmQKCiA gI  
CB jbGVhciAzCiAgICB0aWNrZXIgImJyb3Vn aHQgdG8geW91IGJ5 IG  
No cmlzMiIKICAgIGNsZWFyIDIKICBl bmQKCiA gZGVmIGl0ZXJh dG  
Uo bikKICAgICgwLi5uKk1hdGg6OlBJKS 5zdGVwK DAuMDkpIHs gf  
EB pfAogICAgICB5aWVsZAogICAgICBAcG 9zID0gK EBwb3Mg Ky  
Ax KSAlIEB tZXNzYWdlLnNpemUKICAgIH0KICBlbmQK CiAgZGVmIH Jl  
c2 V0CiAgICBAbGluZ SA9ICIgIiAqIFdJRFR ICiAgZW5kCgogIGRlZi Bz  
ZX QodHJpZ29mZnNldCwgb XNnb2Zmc2V0KQog ICAgQGxpbmVbK E1  
hd Gguc2luKEBpICsgTWF0aDo6 UEkqdHJpZ29mZ nNld Ck  
gK iAoV0lEVEgvMi0xKSArIFdJRFRILzIpLnRvX2 ld  
ID 0KICAgICAgQG1lc3NhZ2VbKEBwb3MgKyBtc2d vZ  
mZ zZXQpICUgKEBtZXNzYWdlLnNpemU tMSldC iA  
gZ W5kCi AgCiAgZGVmIHNob3cKICAgI HB1d HM  
gQ GxpbmUKICBlbmQKICAKICBkZWYgY2x lY XI  
ob j01MCkK ICAgIHByaW50ICJcbiIq bg  
og IGVuZAoKICBkZWYgdGlja2VyKG1 lc  
3N hZ 2UpCiAgICBwcmludCAiI CI  
qK ChXSURUSC1tZXNzY Wd  
lL nNpemU pL  
zI pC  
iAgICBtZXNzYWdlLmVhY2hfYnl0ZSB7IHxifCBwdXRjIGI7IHNsZWVwIDAuMiB9CiAgICBwd  
XRzCiAgZW5kCmVuZAoKWE1hc0hhY2syMDA2Lm5ldy5ydW4K\*\*”.delete(" \n").unpack(  
“m\*”).first # Copyright (C) 2006 Christian N. / [chneukirchen.org](http://chneukirchen.org)

**END**

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [December 25, 2006, 3:40am UTC](https://www.ruby-forum.com/t/merry-christmas/80349/2 "2006-12-25T03:40:55Z")

</div>

Christian N. wrote:

> iB 0aGUgR05VIEdlbmVyYWwgUHVibGl jIExpY2Vuc2U uC  
> IC AgIHNob3cKICAgICA gc2xlZXAg MC4xCiAgICBlbmQKCiA gI  
> mZ zZXQpICUgKEBtZXNzYWdlLnNpemU tMSldC iA  
> “m\*”).first # Copyright (C) 2006 Christian N. / [chneukirchen.org](http://chneukirchen.org)
> 
> ## **END**
> 
> Christian N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)[http://chneukirchen.org](http://chneukirchen.org)

require ‘Win32/Console’  
$console = Win32::Console.new(STD\_OUTPUT\_HANDLE)  
$console.Cls()

def at\_xy( x, y )  
$console.Cursor(x.to\_i, y.to\_i)  
end

STDOUT.sync = 8

width = 80  
height = 25 - 1

def collide( deltas, loc, string )  
x,y = loc.zip(deltas).map{|a,b| (a+b).to\_i}  
(x … x+string.size).zip([y]\*string.size).any?{|a| $board\_hash[a]}  
end

def rectangle( loc, dims )  
(loc[1] … loc[1]+dims[1]).each{|y|  
(loc[0] … loc[0]+dims[0]).each{|x|  
$board[y][x] = “\*”  
$board\_hash[[x,y]] = true }}  
end

def draw( x,y,str, show=true)  
at\_xy( x,y)  
print (show ? str : " " \* str.size)  
end

$board = Array.new(height){ " " \* width}  
$board\_hash = {}

[[0,0,width,1],  
[0,1,1,height-2],  
[width-1,1,1,height-2],  
[0,height-1,width,1]  
].each{|a| rectangle( a[0,2], a[2,2] ) }  
(1…8).each{|yy| rectangle([9-yy,yy], [1,1] )  
rectangle([yy+22,yy],[1,1]) }  
rectangle( [9,17], [23,3] )  
rectangle( [40,5], [30,1] )  
rectangle( [30,1], [1,7] )  
rectangle( [60,10],[1,7] )  
rectangle( [49,6], [1,1] )  
12.step(20,2){|yy| rectangle([yy\*4-18,yy], [1,1]) }  
print $board

thing = “Yule”  
y = height - 2  
x = width - 1 - thing.size  
dx,dy = 1,1

while 3 do

count = nil  
[[dx,0],[0,dy],[dx,dy]].each{|a|  
if collide(a,[x,y],thing)  
count = a.select{|n| n.nonzero?}.size  
x\_ok,y\_ok = [[1,1],[1,nil],[nil,1]][count\>1 ? rand(3) : 0]  
dx = -dx if x\_ok && a[0].nonzero?  
dy = -dy if y\_ok && a[1].nonzero?  
end  
break if count && a[1].nonzero?  
}  
print “\a” if 2 == count  
draw( x,y,thing, nil )  
x += dx ; y += dy  
draw( x,y,thing )  
sleep 0.05

end
