Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Concise algorithm solution in Speedy category for Unix Match. Part 2 by Igor_Sekretarev
def unix_match(filename: str, pattern: str) -> bool:
i = j = 0
while i < len(filename) and j < len(pattern):
if filename[i] != pattern[j]:
if pattern[j] != '[':
return False
symbols = set()
j += 1
while j < len(pattern) and pattern[j] != ']':
symbols.add(pattern[j])
j += 1
if ( j == len(pattern) or not symbols
or ('!' in symbols) == (filename[i] in symbols)
):
return False
i += 1
j += 1
return i == len(filename) and j == len(pattern)
if __name__ == '__main__':
print("Example:")
print(unix_match('somefile.txt', '*'))
# These "asserts" are used for self-checking and not for an auto-testing
assert unix_match('somefile.txt', 'somefile.txt') == True
assert unix_match('1name.txt', '[!abc]name.txt') == True
assert unix_match('log1.txt', 'log[!0].txt') == True
assert unix_match('log1.txt', 'log[1234567890].txt') == True
assert unix_match('log1.txt', 'log[!1].txt') == False
print("Coding complete? Click 'Check' to earn cool rewards!")
April 25, 2021