Mou Code

Divacon Trace Output


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([6,5,4,12,10,11,2,15,0,7,13,9,3,1,14,8]) -- monosort([6,5,4,12,10,11,2,15,0,7,13,9,3,1,14,8]) divide d_lr -> ([6,5,4,12,10,11,2,15], [0,7,13,9,3,1,14,8]) monosort([6,5,4,12,10,11,2,15]) divide d_lr -> ([6,5,4,12], [10,11,2,15]) monosort([6,5,4,12]) divide d_lr -> ([6,5], [4,12]) monosort([6,5]) divide d_lr -> ([6], [5]) monosort([6]) ⇣ atom; basef -> [6] monosort([5]) ⇣ atom; basef -> [5] post #!mirr -> ([(6, 5)], [(5, 6)]) post !(min, max) -> ([5], [6]) post !nest -> ([5], [6]) combine c_lr -> [5,6] monosort([4,12]) divide d_lr -> ([4], [12]) monosort([4]) ⇣ atom; basef -> [4] monosort([12]) ⇣ atom; basef -> [12] post #!mirr -> ([(4, 12)], [(12, 4)]) post !(min, max) -> ([4], [12]) post !nest -> ([4], [12]) combine c_lr -> [4,12] post #!mirr -> ([(5, 12),(6, 4)], [(4, 6),(12, 5)]) post !(min, max) -> ([5,4], [6,12]) post !nest -> ([4,5], [6,12]) combine c_lr -> [4,5,6,12] monosort([10,11,2,15]) divide d_lr -> ([10,11], [2,15]) monosort([10,11]) divide d_lr -> ([10], [11]) monosort([10]) ⇣ atom; basef -> [10] monosort([11]) ⇣ atom; basef -> [11] post #!mirr -> ([(10, 11)], [(11, 10)]) post !(min, max) -> ([10], [11]) post !nest -> ([10], [11]) combine c_lr -> [10,11] monosort([2,15]) divide d_lr -> ([2], [15]) monosort([2]) ⇣ atom; basef -> [2] monosort([15]) ⇣ atom; basef -> [15] post #!mirr -> ([(2, 15)], [(15, 2)]) post !(min, max) -> ([2], [15]) post !nest -> ([2], [15]) combine c_lr -> [2,15] post #!mirr -> ([(10, 15),(11, 2)], [(2, 11),(15, 10)]) post !(min, max) -> ([10,2], [11,15]) post !nest -> ([2,10], [11,15]) combine c_lr -> [2,10,11,15] post #!mirr -> ([(4, 15),(5, 11),(6, 10),(12, 2)], [(2, 12),(10, 6),(11, 5),(15, 4)]) post !(min, max) -> ([4,5,6,2], [12,10,11,15]) post !nest -> ([2,4,5,6], [10,11,12,15]) combine c_lr -> [2,4,5,6,10,11,12,15] monosort([0,7,13,9,3,1,14,8]) divide d_lr -> ([0,7,13,9], [3,1,14,8]) monosort([0,7,13,9]) divide d_lr -> ([0,7], [13,9]) 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([13,9]) divide d_lr -> ([13], [9]) monosort([13]) ⇣ atom; basef -> [13] monosort([9]) ⇣ atom; basef -> [9] post #!mirr -> ([(13, 9)], [(9, 13)]) post !(min, max) -> ([9], [13]) post !nest -> ([9], [13]) combine c_lr -> [9,13] post #!mirr -> ([(0, 13),(7, 9)], [(9, 7),(13, 0)]) post !(min, max) -> ([0,7], [9,13]) post !nest -> ([0,7], [9,13]) combine c_lr -> [0,7,9,13] monosort([3,1,14,8]) divide d_lr -> ([3,1], [14,8]) monosort([3,1]) divide d_lr -> ([3], [1]) monosort([3]) ⇣ atom; basef -> [3] monosort([1]) ⇣ atom; basef -> [1] post #!mirr -> ([(3, 1)], [(1, 3)]) post !(min, max) -> ([1], [3]) post !nest -> ([1], [3]) combine c_lr -> [1,3] monosort([14,8]) divide d_lr -> ([14], [8]) monosort([14]) ⇣ atom; basef -> [14] monosort([8]) ⇣ atom; basef -> [8] post #!mirr -> ([(14, 8)], [(8, 14)]) post !(min, max) -> ([8], [14]) post !nest -> ([8], [14]) combine c_lr -> [8,14] post #!mirr -> ([(1, 14),(3, 8)], [(8, 3),(14, 1)]) post !(min, max) -> ([1,3], [8,14]) post !nest -> ([1,3], [8,14]) combine c_lr -> [1,3,8,14] post #!mirr -> ([(0, 14),(7, 8),(9, 3),(13, 1)], [(1, 13),(3, 9),(8, 7),(14, 0)]) post !(min, max) -> ([0,7,3,1], [13,9,8,14]) post !nest -> ([0,1,3,7], [8,9,13,14]) combine c_lr -> [0,1,3,7,8,9,13,14] post #!mirr -> ([(2, 14),(4, 13),(5, 9),(6, 8),(10, 7),(11, 3),(12, 1),(15, 0)], [(0, 15),(1, 12),(3, 11),(7, 10),(8, 6),(9, 5),(13, 4),(14, 2)]) post !(min, max) -> ([2,4,5,6,7,3,1,0], [15,12,11,10,8,9,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] --
Your thoughts?
(will not be shared or abused)
Comment:
                                        Feedback is welcome.
Copyright © 2025 Thomas C. Veatch. All rights reserved.
Created: May 2026