Форум сайта python.su
zhutЯ имел ввиду файл со словами и (отдельно) ответ к задаче. Как я понял файл есть, ответа нет. Давай файл
Файла нет с ответом
Офлайн
Вот файл.
Прикреплённый файлы: file.txt (9,1 KБ)
Офлайн
Файл с уже выбранными словами.
Отредактировано zhut (Авг. 9, 2013 10:55:47)
Прикреплённый файлы: file_11.txt (16,0 KБ)
Офлайн
Проверял только для utf-8.
#!/usr/bin/env python #-*-coding:utf8-*- import sys import itertools import codecs import re def is_palindrome(string_to_check): reverse_string = string_to_check[::-1] return string_to_check == reverse_string def load_words(words_file='file.txt'): with codecs.open(words_file, encoding='utf-8') as wf: list_words = wf.read() list_words = ''.join(re.sub('[/.!,;+()#&?=<>|%$-]', '', list_words)) return list_words.lower().split() def combinator_words(list_words): for current_stage in range(len(list_words),1,-1): iter = itertools.combinations(list_words,(current_stage)) while True: try: current_mutation = iter.next() except StopIteration: break string = ''.join(current_mutation) if is_palindrome(string): return ' '.join(current_mutation) if __name__ == '__main__': list_words = load_words(sys.argv[1]) # имя файла с исходным текстом print (combinator_words(list_words))
Офлайн
Ну тут явно надо через рекурсию делать. Что-то типа полного перебора з возвратом. Если будет время, можно будет позадрачиваться с этой задачей
Офлайн
Полным перебором не получится, слишком много времени нужно.
В принципе задачку я давно решил, кода под рукой сейчас нет поэтому показать не смогу. А решение было следующим: я написал 2 функции 1 добавляла левую часть палиндрома 2-я правую часть. Слова брались из условия что для левой части
s1==s2[::-1][0:len(s1)]
s1[::-1]==s2[0:len(s1)]
Отредактировано zhut (Сен. 13, 2013 15:09:42)
Офлайн