on 568abcd help sign in
95 lines 2.4 kB history raw
1:- :~ navhome/'/docs/'
2 next/'true'
3 sort/'1'
4 title/'Python'
5 ==
6;>
8# Python
10From [James Tauber](https://github.com/jtauber/pynock/blob/master/nock.py):
12```
13#!/usr/bin/env python3
15# []
16def l(*lst):
17 if len(lst) == 1:
18 return(lst[0], 0)
19 if len(lst) == 2:
20 return lst
21 else:
22 return (lst[0], l(*lst[1:]))
24# *
25def nock(noun):
26 return tar(noun)
28# ?
29def wut(noun):
30 if isinstance(noun, int):
31 return 1
32 else:
33 return 0
36# +
37def lus(noun):
38 if isinstance(noun, int):
39 return 1 + noun
40 else:
41 return noun
44# =
45def tis(noun):
46 if noun[0] == noun[1]:
47 return 0
48 else:
49 return 1
52# /
53def slot(noun):
54 if noun[0] == 1:
55 return noun[1]
56 elif noun[0] == 2:
57 return noun[1][0]
58 elif noun[0] == 3:
59 return noun[1][1]
60 elif noun[0] % 2 == 0:
61 return slot((2, slot((noun[0] // 2, noun[1]))))
62 elif noun[0] % 2 == 1:
63 return slot((3, slot(((noun[0] - 1) // 2, noun[1]))))
66def tar(noun):
67 if isinstance(noun[1][0], int):
68 if noun[1][0] == 0:
69 return slot((noun[1][1], noun[0]))
70 elif noun[1][0] == 1:
71 return noun[1][1]
72 elif noun[1][0] == 2:
73 return nock((nock((noun[0], noun[1][1][0])), nock((noun[0], noun[1][1][1]))))
74 elif noun[1][0] == 3:
75 return wut(nock((noun[0], noun[1][1])))
76 elif noun[1][0] == 4:
77 return lus(nock((noun[0], noun[1][1])))
78 elif noun[1][0] == 5:
79 return tis(nock((noun[0], noun[1][1])))
80 elif noun[1][0] == 6:
81 return nock(l(noun[0], 2, (0, 1), 2, l(1, noun[1][1][1][0], noun[1][1][1][1]), (1, 0), 2, l(1, 2, 3), (1, 0), 4, 4, noun[1][1][0]))
82 elif noun[1][0] == 7:
83 return nock(l(noun[0], 2, noun[1][1][0], 1, noun[1][1][1]))
84 elif noun[1][0] == 8:
85 return nock(l(noun[0], 7, l(l(7, (0, 1), noun[1][1][0]), 0, 1), noun[1][1][1]))
86 elif noun[1][0] == 9:
87 return nock(l(noun[0], 7, noun[1][1][1], l(2, (0, 1), (0, noun[1][1][0]))))
88 elif noun[1][0] == 10:
89 if isinstance(noun[1][1][0], int):
90 return nock((noun[0], noun[1][1][1]))
91 else:
92 return nock(l(noun[0], 8, noun[1][1][0][1], 7, (0, 3), noun[1][1][1][0]))
93 else:
94 return (nock((noun[0], noun[1][0])), nock((noun[0], noun[1][1])))
95```