monosort-- source --
randarr = shuffled(4)
nest = PDC(d_lr,c_lr, !(min,max) @ #!corr, id, atom, id)
monosort = PDC(d_lr,c_lr, id, !nest @ !(min,max) @ #!mirr, atom, id)
trace(monosort, randarr)
-- end source --
-- lib: monosort_lib.py --
"""Helpers for monosort.dc.
Loaded via: ./pydc dcsrc/monosort.dc dcsrc/monosort_lib.py
`randints(N)` returns 2^N random integers in [0, 99] — small enough that
the trace stays readable, big enough that collisions are rare for small N.
`shuffled(N)` returns a uniform permutation of [0..2^N - 1] — useful for
verifying the sort end-to-end (output should be [0, 1, ..., 2^N - 1])."""
import random
def randints(N, lo=0, hi=99, seed=None):
"""List of 2**N random integers in [lo, hi]."""
if seed is not None:
random.seed(seed)
return [random.randint(lo, hi) for _ in range(2 ** N)]
def shuffled(N, seed=None):
"""A random permutation of [0..2**N - 1]."""
if seed is not None:
random.seed(seed)
arr = list(range(2 ** N))
random.shuffle(arr)
return arr
-- end lib --
-- trace: monosort([0,7,4,11,15,2,3,5,14,12,1,6,9,13,10,8]) --
monosort([0,7,4,11,15,2,3,5,14,12,1,6,9,13,10,8])
divide d_lr -> ([0,7,4,11,15,2,3,5], [14,12,1,6,9,13,10,8])
monosort([0,7,4,11,15,2,3,5])
divide d_lr -> ([0,7,4,11], [15,2,3,5])
monosort([0,7,4,11])
divide d_lr -> ([0,7], [4,11])
monosort([0,7])
divide d_lr -> ([0], [7])
monosort([0])
⇣ atom; basef -> [0]
monosort([7])
⇣ atom; basef -> [7]
post #!mirr -> ([(0, 7)], [(7, 0)])
post !(min, max) -> ([0], [7])
post !nest -> ([0], [7])
combine c_lr -> [0,7]
monosort([4,11])
divide d_lr -> ([4], [11])
monosort([4])
⇣ atom; basef -> [4]
monosort([11])
⇣ atom; basef -> [11]
post #!mirr -> ([(4, 11)], [(11, 4)])
post !(min, max) -> ([4], [11])
post !nest -> ([4], [11])
combine c_lr -> [4,11]
post #!mirr -> ([(0, 11),(7, 4)], [(4, 7),(11, 0)])
post !(min, max) -> ([0,4], [7,11])
post !nest -> ([0,4], [7,11])
combine c_lr -> [0,4,7,11]
monosort([15,2,3,5])
divide d_lr -> ([15,2], [3,5])
monosort([15,2])
divide d_lr -> ([15], [2])
monosort([15])
⇣ atom; basef -> [15]
monosort([2])
⇣ atom; basef -> [2]
post #!mirr -> ([(15, 2)], [(2, 15)])
post !(min, max) -> ([2], [15])
post !nest -> ([2], [15])
combine c_lr -> [2,15]
monosort([3,5])
divide d_lr -> ([3], [5])
monosort([3])
⇣ atom; basef -> [3]
monosort([5])
⇣ atom; basef -> [5]
post #!mirr -> ([(3, 5)], [(5, 3)])
post !(min, max) -> ([3], [5])
post !nest -> ([3], [5])
combine c_lr -> [3,5]
post #!mirr -> ([(2, 5),(15, 3)], [(3, 15),(5, 2)])
post !(min, max) -> ([2,3], [15,5])
post !nest -> ([2,3], [5,15])
combine c_lr -> [2,3,5,15]
post #!mirr -> ([(0, 15),(4, 5),(7, 3),(11, 2)], [(2, 11),(3, 7),(5, 4),(15, 0)])
post !(min, max) -> ([0,4,3,2], [11,7,5,15])
post !nest -> ([0,2,3,4], [5,7,11,15])
combine c_lr -> [0,2,3,4,5,7,11,15]
monosort([14,12,1,6,9,13,10,8])
divide d_lr -> ([14,12,1,6], [9,13,10,8])
monosort([14,12,1,6])
divide d_lr -> ([14,12], [1,6])
monosort([14,12])
divide d_lr -> ([14], [12])
monosort([14])
⇣ atom; basef -> [14]
monosort([12])
⇣ atom; basef -> [12]
post #!mirr -> ([(14, 12)], [(12, 14)])
post !(min, max) -> ([12], [14])
post !nest -> ([12], [14])
combine c_lr -> [12,14]
monosort([1,6])
divide d_lr -> ([1], [6])
monosort([1])
⇣ atom; basef -> [1]
monosort([6])
⇣ atom; basef -> [6]
post #!mirr -> ([(1, 6)], [(6, 1)])
post !(min, max) -> ([1], [6])
post !nest -> ([1], [6])
combine c_lr -> [1,6]
post #!mirr -> ([(12, 6),(14, 1)], [(1, 14),(6, 12)])
post !(min, max) -> ([6,1], [14,12])
post !nest -> ([1,6], [12,14])
combine c_lr -> [1,6,12,14]
monosort([9,13,10,8])
divide d_lr -> ([9,13], [10,8])
monosort([9,13])
divide d_lr -> ([9], [13])
monosort([9])
⇣ atom; basef -> [9]
monosort([13])
⇣ atom; basef -> [13]
post #!mirr -> ([(9, 13)], [(13, 9)])
post !(min, max) -> ([9], [13])
post !nest -> ([9], [13])
combine c_lr -> [9,13]
monosort([10,8])
divide d_lr -> ([10], [8])
monosort([10])
⇣ atom; basef -> [10]
monosort([8])
⇣ atom; basef -> [8]
post #!mirr -> ([(10, 8)], [(8, 10)])
post !(min, max) -> ([8], [10])
post !nest -> ([8], [10])
combine c_lr -> [8,10]
post #!mirr -> ([(9, 10),(13, 8)], [(8, 13),(10, 9)])
post !(min, max) -> ([9,8], [13,10])
post !nest -> ([8,9], [10,13])
combine c_lr -> [8,9,10,13]
post #!mirr -> ([(1, 13),(6, 10),(12, 9),(14, 8)], [(8, 14),(9, 12),(10, 6),(13, 1)])
post !(min, max) -> ([1,6,9,8], [14,12,10,13])
post !nest -> ([1,6,8,9], [10,12,13,14])
combine c_lr -> [1,6,8,9,10,12,13,14]
post #!mirr -> ([(0, 14),(2, 13),(3, 12),(4, 10),(5, 9),(7, 8),(11, 6),(15, 1)], [(1, 15),(6, 11),(8, 7),(9, 5),(10, 4),(12, 3),(13, 2),(14, 0)])
post !(min, max) -> ([0,2,3,4,5,7,6,1], [15,11,8,9,10,12,13,14])
post !nest -> ([0,1,2,3,4,5,6,7], [8,9,10,11,12,13,14,15])
combine c_lr -> [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
-- result: [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
--
|