aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/algorithms/input_kind.py
blob: 11801a522df39a354ca69a5d72bb4f4ff619e6e4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Copyright (c) 2016 Egor Tensin <egor@tensin.name>
# This file is part of the "Sorting algorithms" project.
# For details, see https://github.com/egor-tensin/sorting-algorithms
# Distributed under the MIT License.

from array import array
from enum import Enum
from random import seed, sample

seed()


class InputKind(Enum):
    BEST, AVERAGE, WORST = "best", "average", "worst"

    def __str__(self):
        return self.value


def _gen_input_from(xs):
    return array("l", xs)


def gen_input_for_sorting(n, case=InputKind.AVERAGE):
    if n < 0:
        raise ValueError("input length cannot be less than zero")
    if case is InputKind.BEST:
        return _gen_input_from(range(n))
    if case is InputKind.AVERAGE:
        return _gen_input_from(sample(range(n), n))
    if case is InputKind.WORST:
        return _gen_input_from(range(n - 1, -1, -1))
    raise NotImplementedError(f"invalid input kind: {case}")