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