fork(1) download
  1. F=
  2. ->a{l=a.join(?o*(5-w=a[0].size))
  3. s=?o*25
  4. q=(0..25-l.size).select{|i|i/5==(i+w-1)/5}.map{|i|(?o*i+l+s)}
  5. (h=q[0].size.times.map{|i|q.count{|p|p[i]<?o}}
  6. s[c=h.index(h.max)]=?X
  7. q.reject!{|p|p[c]<?o})while q!=[]
  8. s.scan /.{5}/}
  9.  
  10. puts 'Sheep'
  11. puts F[['XXXX']]
  12. puts
  13.  
  14. puts 'Unicorn'
  15. puts F[[
  16. 'Xoo',
  17. 'oXX']]
  18. puts
  19.  
  20. puts 'Hippo'
  21. puts F[[
  22. 'XoX',
  23. 'ooo',
  24. 'XoX']]
  25. puts
  26.  
Success #stdin #stdout 0.02s 7416KB
stdin
Standard input is empty
stdout
Sheep
oXooo
oXooo
oXooo
oXooo
oXooo

Unicorn
ooXoo
ooXoo
ooXoo
ooXoo
ooXoo

Hippo
ooooo
oXXoo
oXXoo
ooooo
ooooo