Advertisement
Guest User

Untitled

a guest
Dec 16th, 2015
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.38 KB | None | 0 0
  1. def ff m, *a
  2.     return ->x{x+1} if m==0
  3.     return ->f{->x{x.times{x=f[x]};x}} if m==1
  4.     ->x{
  5.         if a.size==m
  6.             y=a[0], z=a[1]
  7.             x.times{z=y[z]}
  8.             a[2..-1].inject(z){|y,z|y[z]}[x]
  9.         else
  10.             ff m, [*a, x]
  11.         end
  12.     }
  13. end
  14.  
  15.  
  16. (ff 3)[ff 2][ff 1][ff 0][2]
  17. = ff(3, ff(2), ff(1), ff(0))[2]
  18. = (ff 2)[ff(2)[ff 1]][ff 0][2]
  19. = ff(2, ff(2)[ff 1], ff(0))[2]
  20. = ff(2)[ff 1][ff(2, ff(1), ff(0))][2]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement