Задачка. ломаю голову уже второй день.

Billy_Wonka

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

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

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


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


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


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


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

Понял что если длинна первой строки не равна длине второй то уже получаем False.
Понял что нужно создать цикл и что проверяем в цикле( условно (x) )от i до длины первого слова (ищем, есть ли еще first_letter в a ИЛИ second_letter в b

Пока дошел только к этому и то коряво...
def chek_string( a , b ):
if len(a) != len(b):
return False
while i<=len(a)
first_letter = a
second_letter = b
 
  • Мне нравится
Реакции: Student

Messyar

Новичок
Пользователь
Авг 13, 2020
10
1
3
Да, с принтом и ретурном разобрался, перенеся принт на вызов функции.
А вот по поводу маленьких букв не понял, у меня есть проверка, что если в исходной строке есть заглавная буква, то возвращается ноль, это ведь она и есть.
А проверки на русский и длину предлагаешь убрать?
Я вот про это "участвуют только буквы русского алфавита а-я". А проверки они никак на результат не влияют, разве что время выполнения увеличивают. Написано в условии: "Некорректные данные на вход не поступают, дополнительные проверки не требуются." - значит эти проверки не имеют смысла для этой задачи. Я выше писал какие проверки и для чего делать, читал всю ветку?

Потому что по условию можно использовать толко 33 буквы и если они все использованы, то преобразовать слово одно в другое не получится, так как заменять можно тоже только на эти 33 буквы. И в итоге при первом же проходе появятся как минимум две одинаковые буквы.
Вот я объяснял зачем оно и этой проверки у тебя нет - скорее всего из-за этого и не проходит.

if len(word_origin) >= 33: list_of_letters = list('абвгдеёжзийклмнопрстуфхцчшщъыьэюя') for symbol in word_origin: if symbol in list_of_letters: list_of_letters.remove(symbol) if len(list_of_letters) == 0: return 0

вот мой код, где эта проверка.
 

shshn

Новичок
Пользователь
Окт 9, 2020
3
0
1
Я вот про это "участвуют только буквы русского алфавита а-я". А проверки они никак на результат не влияют, разве что время выполнения увеличивают. Написано в условии: "Некорректные данные на вход не поступают, дополнительные проверки не требуются." - значит эти проверки не имеют смысла для этой задачи. Я выше писал какие проверки и для чего делать, читал всю ветку?


Вот я объяснял зачем оно и этой проверки у тебя нет - скорее всего из-за этого и не проходит.



вот мой код, где эта проверка.

Да, я видел этот код, я его вставил, но всё равно не помогает(
 

Messyar

Новичок
Пользователь
Авг 13, 2020
10
1
3
Да, я видел этот код, я его вставил, но всё равно не помогает(

А какой код в итоге получился?
 

Форум IT Специалистов