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([4,11,2,12,0,3,6,9,15,5,13,1,7,8,14,10]) --
monosort([4,11,2,12,0,3,6,9,15,5,13,1,7,8,14,10])
divide d_lr -> ([4,11,2,12,0,3,6,9], [15,5,13,1,7,8,14,10])
monosort([4,11,2,12,0,3,6,9])
divide d_lr -> ([4,11,2,12], [0,3,6,9])
monosort([4,11,2,12])
divide d_lr -> ([4,11], [2,12])
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]
monosort([2,12])
divide d_lr -> ([2], [12])
monosort([2])
⇣ atom; basef -> [2]
monosort([12])
⇣ atom; basef -> [12]
post #!mirr -> ([(2, 12)], [(12, 2)])
post !(min, max) -> ([2], [12])
post !nest -> ([2], [12])
combine c_lr -> [2,12]
post #!mirr -> ([(4, 12),(11, 2)], [(2, 11),(12, 4)])
post !(min, max) -> ([4,2], [11,12])
post !nest -> ([2,4], [11,12])
combine c_lr -> [2,4,11,12]
monosort([0,3,6,9])
divide d_lr -> ([0,3], [6,9])
monosort([0,3])
divide d_lr -> ([0], [3])
monosort([0])
⇣ atom; basef -> [0]
monosort([3])
⇣ atom; basef -> [3]
post #!mirr -> ([(0, 3)], [(3, 0)])
post !(min, max) -> ([0], [3])
post !nest -> ([0], [3])
combine c_lr -> [0,3]
monosort([6,9])
divide d_lr -> ([6], [9])
monosort([6])
⇣ atom; basef -> [6]
monosort([9])
⇣ atom; basef -> [9]
post #!mirr -> ([(6, 9)], [(9, 6)])
post !(min, max) -> ([6], [9])
post !nest -> ([6], [9])
combine c_lr -> [6,9]
post #!mirr -> ([(0, 9),(3, 6)], [(6, 3),(9, 0)])
post !(min, max) -> ([0,3], [6,9])
post !nest -> ([0,3], [6,9])
combine c_lr -> [0,3,6,9]
post #!mirr -> ([(2, 9),(4, 6),(11, 3),(12, 0)], [(0, 12),(3, 11),(6, 4),(9, 2)])
post !(min, max) -> ([2,4,3,0], [12,11,6,9])
post !nest -> ([0,2,3,4], [6,9,11,12])
combine c_lr -> [0,2,3,4,6,9,11,12]
monosort([15,5,13,1,7,8,14,10])
divide d_lr -> ([15,5,13,1], [7,8,14,10])
monosort([15,5,13,1])
divide d_lr -> ([15,5], [13,1])
monosort([15,5])
divide d_lr -> ([15], [5])
monosort([15])
⇣ atom; basef -> [15]
monosort([5])
⇣ atom; basef -> [5]
post #!mirr -> ([(15, 5)], [(5, 15)])
post !(min, max) -> ([5], [15])
post !nest -> ([5], [15])
combine c_lr -> [5,15]
monosort([13,1])
divide d_lr -> ([13], [1])
monosort([13])
⇣ atom; basef -> [13]
monosort([1])
⇣ atom; basef -> [1]
post #!mirr -> ([(13, 1)], [(1, 13)])
post !(min, max) -> ([1], [13])
post !nest -> ([1], [13])
combine c_lr -> [1,13]
post #!mirr -> ([(5, 13),(15, 1)], [(1, 15),(13, 5)])
post !(min, max) -> ([5,1], [15,13])
post !nest -> ([1,5], [13,15])
combine c_lr -> [1,5,13,15]
monosort([7,8,14,10])
divide d_lr -> ([7,8], [14,10])
monosort([7,8])
divide d_lr -> ([7], [8])
monosort([7])
⇣ atom; basef -> [7]
monosort([8])
⇣ atom; basef -> [8]
post #!mirr -> ([(7, 8)], [(8, 7)])
post !(min, max) -> ([7], [8])
post !nest -> ([7], [8])
combine c_lr -> [7,8]
monosort([14,10])
divide d_lr -> ([14], [10])
monosort([14])
⇣ atom; basef -> [14]
monosort([10])
⇣ atom; basef -> [10]
post #!mirr -> ([(14, 10)], [(10, 14)])
post !(min, max) -> ([10], [14])
post !nest -> ([10], [14])
combine c_lr -> [10,14]
post #!mirr -> ([(7, 14),(8, 10)], [(10, 8),(14, 7)])
post !(min, max) -> ([7,8], [10,14])
post !nest -> ([7,8], [10,14])
combine c_lr -> [7,8,10,14]
post #!mirr -> ([(1, 14),(5, 10),(13, 8),(15, 7)], [(7, 15),(8, 13),(10, 5),(14, 1)])
post !(min, max) -> ([1,5,8,7], [15,13,10,14])
post !nest -> ([1,5,7,8], [10,13,14,15])
combine c_lr -> [1,5,7,8,10,13,14,15]
post #!mirr -> ([(0, 15),(2, 14),(3, 13),(4, 10),(6, 8),(9, 7),(11, 5),(12, 1)], [(1, 12),(5, 11),(7, 9),(8, 6),(10, 4),(13, 3),(14, 2),(15, 0)])
post !(min, max) -> ([0,2,3,4,6,7,5,1], [12,11,9,8,10,13,14,15])
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]
--
|