Skip to content

Instantly share code, notes, and snippets.

@apua
Last active August 11, 2018 09:28
Show Gist options
  • Save apua/1620d95c48a5731ad0359fe0687112b4 to your computer and use it in GitHub Desktop.
Save apua/1620d95c48a5731ad0359fe0687112b4 to your computer and use it in GitHub Desktop.
an obfuscation code
# source: https://twitter.com/dabeaz/status/1018134539917512704
# output -> ****666****
print(f'''{(lambda f: (lambda x: (f()(lambda: (x()(x))))) (lambda:
(lambda x: (f()(lambda: (x()(x)))))))(lambda: (lambda r:
(lambda n: (lambda x: x()(lambda: (lambda x: (lambda y:
y())))(lambda: (lambda x: x()(lambda: (lambda x: (lambda y:
y())))(lambda: (lambda x: (lambda y: x())))))(lambda: (lambda
x: (lambda y: y()))))(n) (lambda: (lambda f: (lambda x: x())))
(lambda: (n()(lambda: (lambda n: (lambda f: (lambda x:
f()(lambda: (n()(f)(x)))))))(lambda: (r()(lambda: (lambda n:
((lambda p: (p()(lambda: (lambda x: (lambda y: y())))))(lambda:
n()(lambda: (lambda p: ((lambda a: (lambda b: (lambda z:
z()(a)(b))))(lambda: (lambda n: (lambda f: (lambda x:
f()(lambda: (n()(f)(x))))))(lambda: (lambda p: (p()(lambda:
(lambda x: (lambda y: x())))))(p)))(lambda: (lambda p:
(p()(lambda: (lambda x: (lambda y: x())))))(p)))))(lambda:
((lambda a: (lambda b: (lambda z: z()(a)(b))))(lambda: (lambda
f: (lambda x: x())))(lambda: (lambda f: (lambda x:
x()))))))))(n))))))))) (lambda: (lambda f: (lambda x:
f()(lambda: (f()(lambda: (f()(x))))))) )(lambda: (lambda x:
x()+1))(lambda: 0)*111:*^11}''')
# only research the "6" part
v = (lambda f: (lambda x: (f()(lambda: (x()(x)))))(lambda: (lambda x: (f()(lambda: (x()(x)))))))(lambda: (lambda r: (lambda n: (lambda x: x()(lambda: (lambda x: (lambda y: y())))(lambda: (lambda x: x()(lambda: (lambda x: (lambda y: y())))(lambda: (lambda x: (lambda y: x())))))(lambda: (lambda x: (lambda y: y()))))(n)(lambda: (lambda f: (lambda x: x())))(lambda: (n()(lambda: (lambda n: (lambda f: (lambda x: f()(lambda: (n()(f)(x)))))))(lambda: (r()(lambda: (lambda n: ((lambda p: (p()(lambda: (lambda x: (lambda y: y())))))(lambda: n()(lambda: (lambda p: ((lambda a: (lambda b: (lambda z: z()(a)(b))))(lambda: (lambda n: (lambda f: (lambda x: f()(lambda: (n()(f)(x))))))(lambda: (lambda p: (p()(lambda: (lambda x: (lambda y: x())))))(p)))(lambda: (lambda p: (p()(lambda: (lambda x: (lambda y: x())))))(p)))))(lambda: ((lambda a: (lambda b: (lambda z: z()(a)(b))))(lambda: (lambda f: (lambda x: x())))(lambda: (lambda f: (lambda x: x()))))))))(n)))))))))(lambda: (lambda f: (lambda x: f()(lambda: (f()(lambda: (f()(x))))))))(lambda: (lambda x: x()+1))(lambda: 0)
# output -> 6
print(v)
a = (lambda f: (lambda x: (f()(lambda: (x()(x)))))(lambda: (lambda x: (f()(lambda: (x()(x)))))))
b = (lambda: (lambda r: (lambda n: (lambda x: x()(lambda: (lambda x: (lambda y: y())))(lambda: (lambda x: x()(lambda: (lambda x: (lambda y: y())))(lambda: (lambda x: (lambda y: x())))))(lambda: (lambda x: (lambda y: y()))))(n)(lambda: (lambda f: (lambda x: x())))(lambda: (n()(lambda: (lambda n: (lambda f: (lambda x: f()(lambda: (n()(f)(x)))))))(lambda: (r()(lambda: (lambda n: ((lambda p: (p()(lambda: (lambda x: (lambda y: y())))))(lambda: n()(lambda: (lambda p: ((lambda a: (lambda b: (lambda z: z()(a)(b))))(lambda: (lambda n: (lambda f: (lambda x: f()(lambda: (n()(f)(x))))))(lambda: (lambda p: (p()(lambda: (lambda x: (lambda y: x())))))(p)))(lambda: (lambda p: (p()(lambda: (lambda x: (lambda y: x())))))(p)))))(lambda: ((lambda a: (lambda b: (lambda z: z()(a)(b))))(lambda: (lambda f: (lambda x: x())))(lambda: (lambda f: (lambda x: x()))))))))(n)))))))))
c = (lambda: (lambda f: (lambda x: f()(lambda: (f()(lambda: (f()(x))))))))
d = (lambda: (lambda x: x()+1))
e = (lambda: 0)
# output -> 6
print(a(b)(c)(d)(e))
-- NOTE: ignore type checking and declare final type
import Unsafe.Coerce
a = \f -> (\x -> f (unsafeCoerce x x)) (\x -> f (unsafeCoerce x x))
b = \r -> \n ->
(\x ->
x
(\x -> \y -> y)
(\x ->
x
(\x -> \y -> y)
(\x -> \y -> x)
)
(\x -> \y -> y)
)
(unsafeCoerce n)
(\f -> \x -> x)
(
n
(\n -> \f -> \x -> f (n f x))
(
r
(
(\n ->
(\p -> p (\x -> \y -> y))
(
n
(\p ->
(\a -> \b -> \z -> z a b)
(
(\n -> \f -> \x -> f (n f x))
(
(\p -> p (\x -> \y -> x))
p
)
)
(
(\p -> p (\x -> \y -> x))
p
)
)
(
(\a -> \b -> \z -> z a b)
(\f -> \x -> x)
(\f -> \x -> x)
)
)
)
(unsafeCoerce n)
)
)
)
c = \f -> \x -> f (f (f x ))
d = \x -> x + 1
e = 0
main = print (a b c d e :: Int)
import Unsafe.Coerce
import Prelude hiding (succ, pred, and, or, not, exp, head, tail)
-- refer to: https://en.wikipedia.org/wiki/Lambda_calculus
zero = \f x -> x
one = \f x -> f $ x
two = \f x -> f.f $ x
three = \f x -> f.f.f $ x
succ n = \f x -> f $ n f x
true = \x y -> x
false = \x y -> y
not b = b false true
iszero n = n false not false
-- = n (\x -> false) true
pair a b = \z -> z a b
first p = p true
second p = p false
phi p = pair (succ (first p)) (first p)
pred n = second $ n phi (pair zero zero)
-- = first $ n (\p -> pair (second p) (succ (second p))) (pair zero zero)
y = \f -> (\x -> f (unsafeCoerce x x)) (\x -> f (unsafeCoerce x x))
b = \r -> \n ->
iszero
(unsafeCoerce n)
zero
(
n
succ
(
r
(
pred
(unsafeCoerce n)
)
)
)
main = print (y b three (1+) 0 :: Int)
import Unsafe.Coerce
import Prelude hiding (succ, pred, and, or, not, exp, head, tail)
zero = \f x -> x
one = \f x -> f $ x
two = \f x -> f.f $ x
three = \f x -> f.f.f $ x
succ n = \f x -> f $ n f x
true = \x y -> x
false = \x y -> y
not b = b false true
iszero n = n false not false
-- = n (\x -> false) true
pair a b = \z -> z a b
first p = p true
second p = p false
phi p = pair (succ (first p)) (first p)
pred n = second $ n phi (pair zero zero)
-- = first $ n (\p -> pair (second p) (succ (second p))) (pair zero zero)
r n = iszero (unsafeCoerce n) zero (n succ (r $ pred $ unsafeCoerce n))
main = print (r three (1+) 0)
r n = if n == 0 then 0 else n + r (n - 1)
main = do
print $ iterate (1+) 0 !! r 3 -- 6
print $ r 3 -- 6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment