diff options
Diffstat (limited to 'sbdata')
-rw-r--r-- | sbdata/task.py | 3 | ||||
-rw-r--r-- | sbdata/tasks/__init__.py | 2 | ||||
-rw-r--r-- | sbdata/tasks/calculate_mapping_function.py | 31 | ||||
-rw-r--r-- | sbdata/tasks/fetch_dungeon_loot.py (renamed from sbdata/tasks.py) | 1 |
4 files changed, 37 insertions, 0 deletions
diff --git a/sbdata/task.py b/sbdata/task.py index 7011ca2..90f23e6 100644 --- a/sbdata/task.py +++ b/sbdata/task.py @@ -40,6 +40,9 @@ class Arguments: return question.ask() return value + def get_arg(self, label: str, arg_name: str, mapper: typing.Callable[[str], _T]) -> _T: + return mapper(self.get_value(label, self.args.get(arg_name), questionary.text('Missing ' + label))) + def has_flag(self, param: str) -> bool: return param in self.flags diff --git a/sbdata/tasks/__init__.py b/sbdata/tasks/__init__.py new file mode 100644 index 0000000..737c65c --- /dev/null +++ b/sbdata/tasks/__init__.py @@ -0,0 +1,2 @@ +from .fetch_dungeon_loot import fetch_dungeon_loot +from .calculate_mapping_function import calculate_mapping_function diff --git a/sbdata/tasks/calculate_mapping_function.py b/sbdata/tasks/calculate_mapping_function.py new file mode 100644 index 0000000..37185a8 --- /dev/null +++ b/sbdata/tasks/calculate_mapping_function.py @@ -0,0 +1,31 @@ +import pathlib +import random +import numpy as np +from sklearn.linear_model import LinearRegression + +from sbdata.task import register_task, Arguments + + +@register_task("Calculate Map Coordinate Function") +def calculate_mapping_function(args: Arguments): + csv = args.get_arg("Coordinate CSV", "coords", pathlib.Path) + points = [[int(x) for x in y.split(",")] for y in csv.read_text().splitlines()[1:]] + xs = [(a[0], a[2]) for a in points] + zs = [(a[1], a[3]) for a in points] + random.shuffle(xs) + random.shuffle(zs) + find_best_function_for("X", xs) + find_best_function_for("Z", zs) + + +def find_best_function_for(label: str, l: list[tuple[int, int]]): + x = np.array([a[0] for a in l]).reshape((-1, 1)) + y = np.array([a[1] for a in l]) + model = LinearRegression() + model.fit(x, y) + print(f'------------') + print(f' {label} Coordinate:') + print(f" Score: {model.score(x, y)}") + print(f" Slope: {model.coef_[0]}") + print(f" Intercept: {model.intercept_}") + print(f'------------') diff --git a/sbdata/tasks.py b/sbdata/tasks/fetch_dungeon_loot.py index f50b530..bf7ef64 100644 --- a/sbdata/tasks.py +++ b/sbdata/tasks/fetch_dungeon_loot.py @@ -71,3 +71,4 @@ def fetch_dungeon_loot(args: Arguments): cost = defaults[min(f for f in defaults.keys() if f >= ifloor)] items.append(DungeonDrop(item, ifloor, chest, cost, drop_chances)) return items + |