helpers.rotate_r

This commit is contained in:
Jörn-Michael Miehe 2023-08-18 22:34:02 +00:00
parent 8ceb690cb1
commit 85d275f04b
2 changed files with 53 additions and 0 deletions

View file

@ -0,0 +1,36 @@
def _rotate_r(__s: str) -> str:
return __s[-1] + __s[0:-1]
def _valid_rotate(__s: str, __c: str) -> bool:
for sc, cc in zip(__s, __c):
# can never rotate a "1" onto an "x"
if sc == "x" and cc == "1":
return False
return True
def _fix_exes(__s: str, __c: str) -> str:
result = ""
for sc, cc in zip(__s, __c):
if sc == "x":
result += "x"
elif cc == "x":
result += "0"
else:
result += cc
return result
def rotate_r(__s: str) -> str:
result = _rotate_r(__s)
while not _valid_rotate(__s, result):
result = _rotate_r(result)
return _fix_exes(__s, result)

17
tests/test_helpers.py Normal file
View file

@ -0,0 +1,17 @@
from pigeon_magnet_solver import helpers
def test_rotate_r():
assert helpers._rotate_r("1x01") == "11x0"
assert helpers._rotate_r("11x0") == "011x"
assert helpers._rotate_r("011x") == "x011"
assert helpers._rotate_r("x011") == "1x01"
assert helpers._valid_rotate("1x01", "11x0") is False
assert helpers._valid_rotate("1x01", "011x") is False
assert helpers._valid_rotate("1x01", "x011") is True
assert helpers._valid_rotate("1x01", "1x01") is True
assert helpers._fix_exes("1x01", "x011") == "0x11"
assert helpers.rotate_r("1x01") == "0x11"