# Fish number 1
class Proc
def <<(other)
-> (*args) { self[other[*args]] }
end
def ^(n)
return -> x { x } if n == 0
return self << (self ^ (n - 1))
end
end
def B(m, n, f)
return f[n] if m == 0
return B(m - 1, 1, f) if n == 0
return B(m - 1, B(m, n - 1, f), f)
end
S =
-> f {
-> x {
B(x, x, f)
}
}
SS =
-> trio {
m, f, s = trio
n = (s ^ f[m])[f][m]
g = (s ^ f[m])[f]
s2 = s ^ f[m]
[n, g, s2]
}
m0 = 3
f0 = -> x { x + 1 }
S0 = S
trio = (SS ^ 63).call([m0, f0, S0])
F1 = trio.first
puts F1
IyBGaXNoIG51bWJlciAxCmNsYXNzIFByb2MKICBkZWYgPDwob3RoZXIpCiAgICAtPiAoKmFyZ3MpIHsgc2VsZltvdGhlclsqYXJnc11dIH0KICBlbmQKCiAgZGVmIF4obikKICAgIHJldHVybiAtPiB4IHsgeCB9IGlmIG4gPT0gMAogICAgcmV0dXJuIHNlbGYgPDwgKHNlbGYgXiAobiAtIDEpKQogIGVuZAplbmQKCmRlZiBCKG0sIG4sIGYpCiAgcmV0dXJuIGZbbl0gaWYgbSA9PSAwCiAgcmV0dXJuIEIobSAtIDEsIDEsIGYpIGlmIG4gPT0gMAogIHJldHVybiBCKG0gLSAxLCBCKG0sIG4gLSAxLCBmKSwgZikKZW5kCgpTID0KICAtPiBmIHsKICAgIC0+IHggewogICAgICBCKHgsIHgsIGYpCiAgICB9CiAgfQoKU1MgPQogIC0+IHRyaW8gewogICAgbSwgZiwgcyA9IHRyaW8KICAgIG4gPSAocyBeIGZbbV0pW2ZdW21dCiAgICBnID0gKHMgXiBmW21dKVtmXQogICAgczIgPSBzIF4gZlttXQogICAgW24sIGcsIHMyXQogIH0KCm0wID0gMwpmMCA9IC0+IHggeyB4ICsgMSB9ClMwID0gUwoKdHJpbyA9IChTUyBeIDYzKS5jYWxsKFttMCwgZjAsIFMwXSkKRjEgPSB0cmlvLmZpcnN0CnB1dHMgRjE=