-rwxr-xr-x 2704 djbsort-20180729/verif/tryinput
#!/usr/bin/env python3 import re import sys import hashlib import struct n = int(sys.argv[1]) original = [] for i in range(n): h = hashlib.sha256() h.update(str([n,i]).encode('utf-8')) h = h.digest() h = h[:4] h = struct.unpack('<L',h)[0] original += [h] print('in_%d_32 = [32,%d]' % (i,h)) print(""" def constant(x,y): return x,y # python keywords include 'and', 'or' def __and__(x,y): assert x[0] == y[0] return x[0],x[1] & y[1] def __or__(x,y): assert x[0] == y[0] return x[0],x[1] | y[1] def xor(x,y): assert x[0] == y[0] return x[0],x[1] ^ y[1] def invert(x): return x[0],2**x[0] - 1 - x[1] def add(x,y): assert x[0] == y[0] return x[0],(x[1] + y[1]) % (2**x[0]) def sub(x,y): assert x[0] == y[0] return x[0],(x[1] - y[1]) % (2**x[0]) def mul(x,y): assert x[0] == y[0] return x[0],(x[1] * y[1]) % (2**x[0]) def equal(x,y): assert x[0] == y[0] return 1,x[1] == y[1] def signedmin(x,y): b = x[0] assert b == y[0] flip = 2**(b-1) xsigned = x[1] ^ flip ysigned = y[1] ^ flip zsigned = min(xsigned,ysigned) return b,zsigned ^ flip def signedmax(x,y): b = x[0] assert b == y[0] flip = 2**(b-1) xsigned = x[1] ^ flip ysigned = y[1] ^ flip zsigned = max(xsigned,ysigned) return b,zsigned ^ flip def signedle(x,y): b = x[0] assert b == y[0] flip = 2**(b-1) xsigned = x[1] ^ flip ysigned = y[1] ^ flip return 1,xsigned <= ysigned def signedlt(x,y): b = x[0] assert b == y[0] flip = 2**(b-1) xsigned = x[1] ^ flip ysigned = y[1] ^ flip return 1,xsigned < ysigned def signedrshift(x,y): b = x[0] assert b == y[0] flip = 2**(b-1) xsigned = (x[1] ^ flip) - flip ysigned = (y[1] ^ flip) - flip assert 0 <= ysigned assert ysigned < b zsigned = xsigned >> ysigned return b,(zsigned + flip) ^ flip def Extract(x,top,bot): assert x[0] > top assert top > bot assert bot >= 0 return top + 1 - bot,((x[1] & ((2 << top) - 1)) >> bot) def Reverse(x): b = x[0] assert b % 8 == 0 bytes = [] for j in range(b//8): bytes += [255 & (x[1] >> (8*j))] bytes.reverse() return b,sum(bytes[j] * 256**j for j in range(b//8)) def If(c,x,y): assert x[0] == y[0] assert c[0] == 1 if c[1]: return x return y def Concat(*args): pos,value = 0,0 for arg in reversed(args): pos,value = pos + arg[0],value + (arg[1] << pos) return pos,value """) program = sys.stdin.read() program = re.sub(' and\(',' __and__(',program) program = re.sub(' or\(',' __or__(',program) print(program) flip = 2**31 original = [x ^ flip for x in original] original.sort() original = [x ^ flip for x in original] for i in range(n): print('assert out%d[1] == %d' % (i,original[i]))