diff --git a/.gitignore b/.gitignore index ff0c96f..7b5b841 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .dir-locals.el __pycache__ *.png +*.csv diff --git a/prim_wallpaper/pickers/__init__.py b/prim_wallpaper/pickers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/prim_wallpaper/pickers/diagonal.py b/prim_wallpaper/pickers/diagonal.py new file mode 100644 index 0000000..872e19f --- /dev/null +++ b/prim_wallpaper/pickers/diagonal.py @@ -0,0 +1,56 @@ +from math import sqrt + + +def get_row_num(i): + return int((sqrt(8 * i + 1) - 1) / 2) + + +def get_last_whole_i(row): + return (row * (row + 1)) // 2 + + +class DiagonalCounter: + def __init__(self, table_size): + self.table_size = table_size + + def diagonal(self, i): + row = get_row_num(i) + last_whole_i = get_last_whole_i(row) + if row < self.table_size: + y = i - last_whole_i + x = row - y + return x, y + else: + x, y = self.diagonal(self.table_size ** 2 - (1 + i)) + return self.table_size - x - 1, self.table_size - y - 1 + + def diagonal_reversed(self, i): + y, x = self.diagonal(i) + return x, y + + def diagonal_then_reversed(self, i): + row = get_row_num(i) + if row > self.table_size: + row += 1 + if row % 2 != 0: + return self.diagonal(i) + else: + return self.diagonal_reversed(i) + + +if __name__ == "__main__": + import csv + + d = DiagonalCounter(6) + for func in (d.diagonal, d.diagonal_reversed, d.diagonal_then_reversed): + output = list( + list(-1 for i in range(d.table_size)) for j in range(d.table_size) + ) + indices = map(func, range(d.table_size ** 2)) + for i, index in enumerate(indices): + x, y = index + output[y][x] = i + + with open(func.__name__ + ".csv", "w", newline="") as file: + writer = csv.writer(file) + writer.writerows(output) diff --git a/test.py b/test.py new file mode 100644 index 0000000..9c54431 --- /dev/null +++ b/test.py @@ -0,0 +1,3 @@ +from prim_wallpaper.make_wallpaper import make_wallpaper + +i = make_wallpaper(3, 5, 6)