
2 в списке
2 в списке
with open("24-249.txt", "r") as f:
HEX = { hex(n)[2]: n for n in range(16) }
ALL = (1
# Загружаю файл 24-249.txt в строку string
f = open("24-249.txt")
string = f.read()+" "
f.close()
# Задаю цифры 16-тиричной системы исчисления
s16 = "0123456789ABCDEF"
# Задаю начальное значение для минимальной длины строки
min_len = 10**6;
# Запускаю цикл для i по всем символам строки string
for i in range(0, len(string)):
# Если i-й символ строки - 16-е цифра, тогда...
if string[i] in s16:
# ... запускаю цикл для k так, чтобы от
# i-го до k-го символов было расстояние
# не меньше 16 и не больше min_len.
# 16 - так как в строке нужно, чтобы были
# все 16-тиричные цифры.
# min_len - так как если я беру строку, бОльшую,
# чем min_len, то она не нужна - ищу-то я строку
# с минимальной длиной, а это - строка длиной
# min_len или меньше
m = min(i+min_len, len(string))
for k in range(i+16, m):
# Если последний символ не 16-тиричная
# цифра, тогда перехожу к следующей итерации,
# так как такая строка не подходит
if not(string[k-1] in s16):
continue
# Вырезаю в s строку от i-го до k-1 - го
# символов
s = string[i:k]
# Выбираю для начала, что строка s мне
# подходит
finded_string = True
# Проверяю, что в этой строке есть все 16-тиричные
# символы
for char in s16:
if not (char in s):
finded_string = False
# Если строка подходит мне и её длина меньше минимальной,
# тогда выбираю её длину минимальной
if finded_string and len(s) < min_len:
min_len = len(s)
# Если строка s мне подошла, тогда нет смысла продолжать цикл
# для k. Потому что дальше будут строки только с бОльшей длиной
if finded_string:
break
# Вывожу минимальную длину на экран
print(min_len)
if string[i] in s16:
# ... запускаю цикл для k так, чтобы от
# i-го до k-го символов было расстрояние
# не меньше 16 и не больше min_len.
# 16 - так как в строке нужно, чтобы были
# все 16-тиричные цифры.
# min_len - так как если я беру строку, бОльшую,
# чем min_len, то она не нужна - ищу-то я строку
# с минимальной длиной, а это - строка длиной
# min_len или меньше
m = min(i+min_len, len(string))
for k in range(i+16, m):
# Если последний символ не 16-тиричная
# цифра, тогда перехожу к следующей итерации,
# так как такая строка не подходит
if not(string[k-1] in s16):
continue
# Вырезаю в s строку от i-го до k-1 - го
# символов
s = string[i:k]
# Выбираю для начала, что строка s мне
# подходит
finded_string = True
# Проверяю, что в этой строке есть все 16-тиричные
# символы
for char in s16:
if not (char in s):
finded_string = False
# Если строка подходит мне и её длина меньше минимальной,
# тогда выбираю её длину минимальной
if finded_string and len(s) < min_len:
min_len = len(s)
# Если строка s мне подошла, тогда нет смысла продолжать цикл
# для k. Потому что дальше будут строки только с бОльшей длиной
if finded_string:
break
# Вывожу минимальную длину на экран
if min_len == 10**6 + 1:
print("Строки, содержащей все 16-тиричные цифры, в файле нет.")
else:
print(min_len)