helpers.rotate_r
This commit is contained in:
parent
8ceb690cb1
commit
85d275f04b
2 changed files with 53 additions and 0 deletions
36
pigeon_magnet_solver/helpers.py
Normal file
36
pigeon_magnet_solver/helpers.py
Normal 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
17
tests/test_helpers.py
Normal 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"
|
Loading…
Reference in a new issue