import os import strutils # Generate some pseudo-random data var seed: tuple[s1, s2, s3: int32] = (2'i32, 8'i32, 16'i32) proc random(): int32 = seed = (((((((seed[0] and 0x0007_FFFF'i32) shl 13'i32) xor seed[0]) shr 19'i32) and 0x0000_1FFF'i32) xor ((seed[0] and 0x000F_FFFE'i32) shl 12'i32)), ((((((seed[1] and 0x3FFF_FFFF'i32) shl 2'i32) xor seed[1]) shr 25'i32) and 0x0000_007F'i32) xor ((seed[1] and 0x0FFF_FFF8'i32) shl 4'i32)), ((((((seed[2] and 0x1FFF_FFFF'i32) shl 3'i32) xor seed[2]) shr 11'i32) and 0x001F_FFFF'i32) xor ((seed[2] and 0x0000_7FF0'i32) shl 17'i32))) return seed[0] xor seed[1] xor seed[2] var n = 9999999 var data: seq[int32] newSeq(data, n) for i in 0 .. data.high(): data[i] = random() proc `$`(d: seq[int32]): string = result = "[ " for i in items(d): result.addSep(", ", 2) result.add($(i and 0xFFFF_FFFF'i64)) result.add(" ]") # Sort the data proc sort(start, stop: int) = if stop <= start+1: return var j = start for i in start..stop-2: if data[i] <% data[stop-1]: swap(data[i], data[j]) inc(j) swap(data[j], data[stop-1]) sort(start, j) sort(j+1, stop) sort(0, data.len) echo(data[n div 2 - 1] and 0xFFFF_FFFF'i64, ", ", data[n div 2] and 0xFFFF_FFFF'i64, ", ", data[n div 2 + 1] and 0xFFFF_FFFF'i64)