2 Commits

Author SHA1 Message Date
68c79467e4 implement cli for benchmarking and evilnkode 2025-09-09 13:21:27 -05:00
aa2e949938 implement keypad ABC 2025-09-08 12:11:29 -05:00
3 changed files with 29 additions and 167 deletions

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,6 @@
from dataclasses import dataclass
import numpy as np
@dataclass
class Tower:
floors: list[np.ndarray]
@@ -11,7 +10,7 @@ class Tower:
keep = np.array([], dtype=int)
balance = self.balance()
for idx, floor in enumerate(self.floors):
div = len(floor) // 2 + balance[idx]
div = len(floor)//2 + balance[idx]
floor_shuffle = np.random.permutation(len(floor))
keep = np.concatenate((keep, floor[floor_shuffle[:div]]))
discard = np.concatenate((discard, floor[floor_shuffle[div:]]))
@@ -29,6 +28,7 @@ class Tower:
balance[odd_floors] = 1
return balance.tolist()
def update_tower(self, keep: np.ndarray, other_discard: np.ndarray):
new_floors = []
for floor in self.floors:
@@ -51,22 +51,20 @@ class Tower:
tower.extend(floor.tolist())
return tower
@dataclass
class TowerShuffle:
# TODO: I don't think total_positions is used anywhere
total_positions: int
left_tower: Tower
right_tower: Tower
@classmethod
def new(cls, total_pos: int):
def new(cls, total_pos:int):
assert total_pos >= 3
rand_pos = np.random.permutation(total_pos)
return TowerShuffle(
total_positions=total_pos,
left_tower=Tower(floors=[rand_pos[:total_pos // 2]]),
right_tower=Tower(floors=[rand_pos[total_pos // 2:]]),
left_tower=Tower(floors=[rand_pos[:total_pos//2]]),
right_tower=Tower(floors=[rand_pos[total_pos//2:]]),
)
def shuffle(self):

View File

@@ -1,8 +1,7 @@
from src.keypad.tower_shuffle import TowerShuffle
def test_tower_shuffle():
tower = TowerShuffle.new(13)
tower = TowerShuffle.new(9)
print(tower)
for _ in range(100):
tower.shuffle()