Не получается пройти тесты алгоритма

Не программист, но голову поломать люблю. На вход подается 2 строки. Нужно определить, можно ли превратить первую строку во вторую, заменяя одни буквы на другие, с учетом следующих правил:

- участвуют только буквы русского алфавита а-я;
- все буквы в нижнем регистре;
- за один шаг можно преобразовать все вхождения одной буквы в другую.

Входные данные

Входная информация поступает из стандартного ввода в виде одной строки. В этой строке содержатся две подстроки, разделенные пробелом. Ваше решение должно учитывать вариант, когда на вход поданы строки разной длины. Некорректные данные на вход не поступают, дополнительные проверки не требуются.

Выходные данные

В качестве ответа в стандартный вывод программа должна выводить 1 (если превратить можно) или 0 (если превратить нельзя).

Пример 1

Входные данные: привет прикол Выходные данные: 1 Преобразования (выводить не нужно): в ⇒ к (прикет) е ⇒ о (прикот) т ⇒ л (прикол)

Пример 2

Входные данные: ааббдд ддббаа Выходные данные: 1 Преобразования (выводить не нужно): д ⇒ я (ааббяя) а ⇒ д (ддббяя) я ⇒ а (ддббаа)

Пример 3

Входные данные: абаб ааах Выходные данные: 0 Преобразовать нельзя, так как 'б' не сможет оказаться одновременно 'а' и 'х'.

Получился вот этот монстр - тесты из примеров выше проходят, а также тесты на ввод символов алфавита тоже.

def revert (s: str):
    #Обработка крайнего случая - реверс строки
    rev = str('')
    for i in range (0, len(s)):
        rev = rev + s[len(s)-1-i]
    return rev

def unique (s: str):
    #Подсчитываем число уникальных букв. 0 - говорит об одной уникальной букве.
    j=0
    abc = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
    for i in range(0, len(abc)):
        if ((abc[i] in s)==True):
            j = j+1
    return j

def DiffLen (s1:str, s2:str):
    #Проверяем строки по длине
    ret = True
    if (len(s1)==len(s2)):
        ret=False
    return ret
def inplace (s1:str, s2:str):
    #Проверяем слова на одинаковое количество заменяемых букв. Как только сталкиваемся с разным числом заменяемых букв, то говорим, что превращение невозможно
    ret = True
    for i in range(0, len(s1)):
        if s1.count(s1[i])!=s2.count(s2[i]):
            ret=False
            break
    return ret
def funk (s: str):
    b = s.split()
    ret = 0
    if ((DiffLen(b[0],b[1])==False) and 
    ((inplace(b[0],b[1])==True) and (((unique(b[0])<=15)==True) and ((unique(b[1])<=16)==True)) or  
    (((revert(b[0])==b[1]) and ((unique(b[0])<=15))==True) and ((((unique(b[0])<=16)==True) and ((unique(b[1])<=16)==True)))))):
        ret=1
    return ret
a = input()
print(funk(a))

Какие данные алгоритм не может уловить?


Ответы (0 шт):