Compare commits

...

5 Commits

Author SHA1 Message Date
Rudra__
35e5026163
Merge db6a052a62 into f3f32ae3ca 2024-11-21 21:37:39 +05:30
pre-commit-ci[bot]
f3f32ae3ca
[pre-commit.ci] pre-commit autoupdate (#12385)
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.7.3 → v0.7.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.7.3...v0.7.4)

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-11-18 22:07:12 +01:00
Christian Clauss
e3bd7721c8
validate_filenames.py Shebang python for Windows (#12371) 2024-11-15 14:59:14 +01:00
pre-commit-ci[bot]
e3f3d668be
[pre-commit.ci] pre-commit autoupdate (#12370)
* [pre-commit.ci] pre-commit autoupdate

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.7.2 → v0.7.3](https://github.com/astral-sh/ruff-pre-commit/compare/v0.7.2...v0.7.3)
- [github.com/abravalheri/validate-pyproject: v0.22 → v0.23](https://github.com/abravalheri/validate-pyproject/compare/v0.22...v0.23)

* Update sudoku_solver.py

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Christian Clauss <cclauss@me.com>
2024-11-11 21:05:50 +01:00
rudrajiii
db6a052a62 feat/implementation of Booth's Algorithm 2024-10-28 22:14:48 +05:30
4 changed files with 70 additions and 4 deletions

View File

@ -16,7 +16,7 @@ repos:
- id: auto-walrus
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.7.2
rev: v0.7.4
hooks:
- id: ruff
- id: ruff-format
@ -42,7 +42,7 @@ repos:
pass_filenames: false
- repo: https://github.com/abravalheri/validate-pyproject
rev: v0.22
rev: v0.23
hooks:
- id: validate-pyproject

View File

@ -172,7 +172,7 @@ def solved(values):
def from_file(filename, sep="\n"):
"Parse a file into a list of strings, separated by sep."
return open(filename).read().strip().split(sep) # noqa: SIM115
return open(filename).read().strip().split(sep)
def random_puzzle(assignments=17):

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!python
import os
try:

View File

@ -0,0 +1,66 @@
class BoothsAlgorithm:
"""
Booth's Algorithm finds the lexicographically minimal rotation of a string.
Time Complexity: O(n) - Linear time where n is the length of input string
Space Complexity: O(n) - Linear space for failure function array
For More Visit - https://en.wikipedia.org/wiki/Booth%27s_multiplication_algorithm
"""
def find_minimal_rotation(self, string: str) -> str:
"""
Find the lexicographically minimal rotation of the input string.
Args:
string (str): Input string to find minimal rotation.
Returns:
str: Lexicographically minimal rotation of the input string.
Raises:
ValueError: If the input is not a string or is empty.
Examples:
>>> ba = BoothsAlgorithm()
>>> ba.find_minimal_rotation("baca")
'abac'
>>> ba.find_minimal_rotation("aaab")
'aaab'
>>> ba.find_minimal_rotation("abcd")
'abcd'
>>> ba.find_minimal_rotation("dcba")
'adcb'
>>> ba.find_minimal_rotation("aabaa")
'aaaab'
"""
if not isinstance(string, str) or not string:
raise ValueError("Input must be a non-empty string")
n = len(string)
s = string + string # Double the string to handle all rotations
f = [-1] * (2 * n) # Initialize failure function array with twice the length
k = 0 # Starting position of minimal rotation
for j in range(1, 2 * n):
sj = s[j]
i = f[j - k - 1]
while i != -1 and sj != s[k + i + 1]:
if sj < s[k + i + 1]:
k = j - i - 1
i = f[i]
if i == -1 and sj != s[k]:
if sj < s[k]:
k = j
f[j - k] = -1
else:
f[j - k] = i + 1
return s[k : k + n]
if __name__ == "__main__":
ba = BoothsAlgorithm()
print(ba.find_minimal_rotation("bca")) # output is 'abc'