aboutsummaryrefslogtreecommitdiff
path: root/sbdata
diff options
context:
space:
mode:
Diffstat (limited to 'sbdata')
-rw-r--r--sbdata/task.py3
-rw-r--r--sbdata/tasks/__init__.py2
-rw-r--r--sbdata/tasks/calculate_mapping_function.py31
-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
+