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