Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.01.2025
Сообщений: 6

Длиннословие

20.01.2025, 06:44. Показов 2353. Ответов 10

Студворк — интернет-сервис помощи студентам
Ребят ,помогите пожалуйста кто может! Выпало на мою голову...

Краткое описание:Найти самые длинные последовательности n-буквенных слов, все
пары соседних слов в которых удовлетворяют некоторому ограничению.

Условие: Назовём два слова родственными, если наборы букв, из которых состоят эти
слова, отличаются ровно на одну. Например, четырёхбуквенные слова “игра” и “рагу”
являются родственными, так как у них ровно три общие буквы (“а”, “г” и “р”). А слова “кот”
и “ток” не являются родственными, так как у них все буквы общие. Требуется реализовать
программу для генерации как можно более длинных последовательностей из
неповторяющихся слов, в которых любые два соседних слова являются родственными.
Пример последовательности из шести слов: “игра”-”рагу”-”груз”-”узор”-”взор”-”роза”.
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
20.01.2025, 08:02
Цитата Сообщение от miron4ik54 Посмотреть сообщение
Назовём два слова родственными, если наборы букв, из которых состоят эти
слова, отличаются ровно на одну.
1. Учитываются ли повторы букв?
Например:
барабан-барак
- родственники?
2. Из чего происходит генерация последовательности? Что подается на вход программе? Или программа сама должна составлять слова из букв предыдущего слова?
1
0 / 0 / 0
Регистрация: 20.01.2025
Сообщений: 6
20.01.2025, 10:32  [ТС]
Добавлено через 7 минут
про повторы букв ничего не сказано, на вход программе как я понял подается пара слов
вот такие там критерии еще есть:
максимальная длина последовательности
количество найденных длинных последовательностей
скорость алгоритма для поиска последовательностей
Цитата Сообщение от YuS_2 Посмотреть сообщение
1. Учитываются ли повторы букв?
Например:
барабан-барак
- родственники?
2. Из чего происходит генерация последовательности? Что подается на вход программе? Или программа сама должна составлять слова из букв предыдущего слова?
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
20.01.2025, 10:53
Цитата Сообщение от miron4ik54 Посмотреть сообщение
про повторы букв ничего не сказано
Это важно - необходимо уточнение.

Цитата Сообщение от miron4ik54 Посмотреть сообщение
максимальная длина последовательности
Последовательность слов складывается из самих слов - осталось выяснить, как эти слова поступают на вход программе...

Цитата Сообщение от miron4ik54 Посмотреть сообщение
на вход программе как я понял подается пара слов
ок, подается парами слов до каких пор? Что служит ограничением?
Если подается пара слов не являющимися родственниками - отбрасываются оба слова или они используются в дальнейшем для сравнения с другими поступающими словами? Механизм формирования набора слов непонятен совсем... пока, во всяком случае, ничего отчетливого не наблюдается.
Примеры входных данных имеются?
0
0 / 0 / 0
Регистрация: 20.01.2025
Сообщений: 6
20.01.2025, 13:32  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Это важно - необходимо уточнение.
Постараюсь уточнить все эти вопросы!
0
0 / 0 / 0
Регистрация: 20.01.2025
Сообщений: 6
22.01.2025, 04:17  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
ок, подается парами с
1) Учитываются ли повторы букв?

Да, слова с повторяющимися буквами разрешены. Приведём пример для пояснения: слова "шалаш" и "лапша" родственные, потому что пятёрки букв, из которых эти слова состоят, отличаются ровно на одну (убрали "ш" и добавили "п").

2) Если подается пара слов не являющимися родственниками - отбрасываются оба слова или они используются в дальнейшем для сравнения с другими поступающими словами?

Это зависит от вашей реализации. Со своей стороны мы не подаём никакие пары слов вашему алгоритму. Мы ожидаем от вас цепочки родственных слов (т.е. такую цепочку из неповторяющихся слов, в которой любые два соседних слова являются родственными).

3) Если последовательность слов складывается из самих слов, то  как эти слова поступают на вход программе?

Последовательность слов – это результат работы вашей программы. Вам надо научиться генерировать как можно более длинные последовательности родственных слов. Для работы вашего алгоритма может понадобиться словарь слов русского языка. Традиционно в подобных задачах используют словари существительных в начальной форме, пишущихся с маленькой буквы (т.е. имена нарицательные). Так что очень желательно найти именно такой словарь. Но если в вашем словаре будут ещё какие-то части речи, то за это не будут снижаться баллы.

4) Если как в примере слова подаются парами, до каких пор? Что служит ограничением?

В примере показана последовательность из шести слов, удовлетворяющая условию (все слова разные, любые два соседних являются родственными). Вам надо научиться генерировать подобные последовательности, стараясь делать их как можно более длинными.
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
22.01.2025, 12:14
Цитата Сообщение от miron4ik54 Посмотреть сообщение
Вам надо научиться генерировать как можно более длинные последовательности родственных слов. Для работы вашего алгоритма может понадобиться словарь слов русского языка. Традиционно в подобных задачах используют словари существительных в начальной форме, пишущихся с маленькой буквы (т.е. имена нарицательные). Так что очень желательно найти именно такой словарь.
Да уж... это задача не на программирование, а по литературе... на пополнение словарного запаса, например.
0
0 / 0 / 0
Регистрация: 20.01.2025
Сообщений: 6
22.01.2025, 12:21  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Да уж... это задача не на программирование, а по литературе... на пополнение словарного запаса, например.
да хотя бы чтобы работала как в примере, пара слов, а словарь, ну его
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
22.01.2025, 14:18
Цитата Сообщение от miron4ik54 Посмотреть сообщение
да хотя бы чтобы работала как в примере, пара слов
Ну, если без генератора...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
arr = ['игра','рагу','груз','узор','взор','роза','барабан','барак']
out = []
for i in range(len(arr)):
    a = arr[i]
    if i < len(arr)-1:
        b = arr[i+1]
        x,y = set(a),set(b)
        if len(x) == len(y):
            d = x&y
            if len(d) == len(x)-1:
                out.append((a,b))
            else:
                out.append([f'не родня: "{a}" и "{b}"'])
 
print('родственные соседи:\n',out)
- слова проверяются попарно, причем только рядом стоящие...
дубликаты букв считаются за одну... а из ответа, так и не понял, каким образом у них дубли считаются...

Добавлено через 3 минуты
т.е. это не ответ на задачу, это заготовка/часть ответа, если слова подавать рандомно, родственники могут не найтись...
0
 Аватар для VistaSV30
987 / 331 / 79
Регистрация: 10.04.2012
Сообщений: 1,239
Записей в блоге: 4
22.01.2025, 16:06
Добрый день!
Еще одна заготовка

Просто находим всех "родственников" из предложенного списка
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
arr = ['игра','рагу','груз','узор','взор','роза','барабан','барак', 'баран']
 
def Relative(a, b):
    if len(a) != len(b):
        return False
    
    bl = list(b)
    for i in a:
        if i in bl:
            bl.remove(i)
            
    if len(bl) == 1:
        return True
    else:
        return False
    
n = 0
for i in arr:
    n += 1
    for j in arr[n:]:
        if Relative(i, j):
            print(i, j)
0
0 / 0 / 0
Регистрация: 20.01.2025
Сообщений: 6
23.01.2025, 11:54  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
Ну, если без генератора...
а если генератор? или можно создать например текстовый файл со списком слов?

Добавлено через 50 секунд
Цитата Сообщение от VistaSV30 Посмотреть сообщение
Просто находим всех "родственников" из предложенного списка
список же можно взять из какого либо источника? словарь и т.д

Добавлено через 1 минуту
гляньте на ваш профессиональный взгляд эту программу, на ход которой подается слово , а затем сам словарь
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
def are_relatives(word1, word2):
    """Проверяет, являются ли два слова родственными."""
    return len(set(word1) ^ set(word2)) == 2
 
def find_a_sequence_from_dictionary(start_word, dictionary):
    """Находит максимально длинную последовательность родственных слов из словаря."""
    if start_word not in dictionary:
        raise ValueError("Начальное слово отсутствует в словаре.")
    
    graph = {word: [] for word in dictionary}
    for i, word1 in enumerate(dictionary):
        for word2 in dictionary[i+1:]:
            if are_relatives(word1, word2):
                graph[word1].append(word2)
                graph[word2].append(word1)
 
    def dfs(current_word, path):
        
        neighbors = [neighbor for neighbor in graph[current_word] if neighbor not in path]
        if not neighbors:
            return path
        
        for neighbor in neighbors:
            result = dfs(neighbor, path + [neighbor])
            if len(result) > len(path) :
                return result
        return path
    
    return dfs(start_word, [start_word])
 
def find_all_relatives(sequence, dictionary):
    """Находит все уникальные родственные слова для слов в последовательности."""
    all_relatives = set()
    for word in sequence:
        for other_word in dictionary:
            if word != other_word and are_relatives(word, other_word) and other_word not in sequence:
              all_relatives.add(other_word)
    return all_relatives
 
# Пример использования:
try:
    start_word = input("Введите начальное слово: ")
    dictionary_str = input("Введите словарь (слова через пробел): ")
    dictionary = dictionary_str.split()
    
    sequence = find_a_sequence_from_dictionary(start_word, dictionary)
 
    if len(sequence) > 1:
        print("Найденная последовательность:", " - ".join(sequence))
        all_relatives = find_all_relatives(sequence, dictionary)
        print(f"Общее количество уникальных родственных слов: {len(all_relatives)}")
    else:
        print("Не найдено ни одной последовательности.")
        
except ValueError as e:
    print(f"Ошибка ввода: {e}")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru