Skip to content

Instantly share code, notes, and snippets.

@somebody1234
Last active November 3, 2016 13:21
Show Gist options
  • Save somebody1234/a4b4ba61b9fdeaa98d40151d7e777a19 to your computer and use it in GitHub Desktop.
Save somebody1234/a4b4ba61b9fdeaa98d40151d7e777a19 to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import http.server
N=25001
numbers = ["()" * i for i in range(N)]
def tryi(n, s):
if n < N and len(numbers[n]) > len(s):
numbers[n] = s
for i in range(2, N):
for j in range(1, 8):
if i + j >= N:
break
tryi(i, "%s[%s]" % (numbers[i + j], numbers[j]))
tryi(i + 1, "%s()" % numbers[i])
tryi(i * 2, "(%s){}" % numbers[i])
tryi(i * 3, "((%s)){}{}" % numbers[i])
tryi(i * 3 + 2, "((%s)()){}{}" % numbers[i])
tryi((3 * i * i - i) // 2, "%s)({({})({}[()])({})}{}" % numbers[i])
tryi(i ** 2, "%s)({({})({}[()])}{}" % numbers[i])
for l in range(1, int(i**.5) + 1):
if not i % l:
j = 0
k = ((i + j + j) * i / l + i) / 2
if k % 1:
continue
k = int(k)
while k < N:
tryi(k, "(%s){%s({}[%s])}{}" % (numbers[i], numbers[j], numbers[l]))
j += 1
k = ((i + j + j) * i / l + i) / 2
if k % 1:
continue
k = int(k)
length = 0
print("Total length 1 to %s:" % N, sum(len(n) for n in numbers))
def tryint(s):
try:
return int(s)
except:
return None
def reverse(n):
if not n:
return ""
s = "%s" if n > 0 else "([%s])"
if n < 0:
n *= -1
while n >= N:
if not (n ** .5) % 1:
s = s % "%s({({})({}[()])}{})"
n = int(n ** .5)
elif ((24 * n + 1) ** .5) % 6 == 5:
s = s % "%s({({})({}[()])({})}{})"
n = (((24 * n + 1) ** .5) - 5) // 6
elif not (n - 2) % 3:
s = s % "((%s)()){}{}"
n = (n - 2) // 3
elif not n % 3:
s = s % "((%s)){}{}"
n //= 3
elif not n % 2:
s = s % "(%s){}"
n //= 2
else:
s = s % "%s()"
n -= 1
return s % ("(%s)" % numbers[n])
class Handler(http.server.BaseHTTPRequestHandler):
def do_HEAD(s):
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
def do_GET(s):
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
s.wfile.write(bytes(
"<pre>%s</pre>" % reverse(int(s.path[1:]))
if tryint(s.path[1:]) is not None else
"Invalid path",
"ascii"
))
httpd = http.server.HTTPServer(("", 8000), Handler)
httpd.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment