from contextlib import contextmanager
from timeit import default_timer
from pathlib import Path

spl = lambda y: [int(w) for w in y]


def load_rows(day):
    return [row for row in load(day)]


def load(day):
    path = Path(get_fname(day))
    return path.read_text().rstrip().split("\n")


def get_fname(day: int) -> str:
    import sys

    if sys.argv[-1] == "--sample":
        return f"../samples/day{day:02}.txt"
    else:
        return f"../full/day{day:02}.txt"


#############
def load_char_matrix(f):
    my_file = []
    for line in f:
        my_file.append(line.rstrip())
    return [list(x) for x in my_file]


def load_file_char_matrix(name):
    with open(name, "r") as f:
        return load_char_matrix(f)


def load_int_matrix(f):
    my_file = []
    for line in f:
        my_file.append(line.rstrip())
    return [list(map(int, x)) for x in my_file]


def load_file_int_matrix(name):
    with open(name, "r") as f:
        return load_int_matrix(f)


def load_word_matrix(f):
    my_file = []
    for line in f:
        my_file.append(line.rstrip())
    return [x.split(" ") for x in my_file]


def load_file_word_matrix(name):
    with open(name, "r") as f:
        return load_word_matrix(f)


#############


def rotate(WHAT, times=1):
    what = WHAT
    for x in range(times):
        what = list(zip(*what[::-1]))
    return what


@contextmanager
def elapsed_timer():
    start = default_timer()
    elapser = lambda: default_timer() - start
    yield lambda: elapser()
    end = default_timer()
    elapser = lambda: end - start
