Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 9, 2013 10:10:12

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Интересная задача про палиндром

zhut
Файла нет с ответом
Я имел ввиду файл со словами и (отдельно) ответ к задаче. Как я понял файл есть, ответа нет. Давай файл

Офлайн

#2 Авг. 9, 2013 10:21:56

zhut
Зарегистрирован: 2013-08-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Интересная задача про палиндром

Вот файл.

Прикреплённый файлы:
attachment file.txt (9,1 KБ)

Офлайн

#3 Авг. 9, 2013 10:53:52

zhut
Зарегистрирован: 2013-08-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Интересная задача про палиндром

Файл с уже выбранными словами.

Отредактировано zhut (Авг. 9, 2013 10:55:47)

Прикреплённый файлы:
attachment file_11.txt (16,0 KБ)

Офлайн

#4 Авг. 10, 2013 12:02:14

Alen
Зарегистрирован: 2013-08-01
Сообщения: 373
Репутация: +  49  -
Профиль   Отправить e-mail  

Интересная задача про палиндром

Проверял только для 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))

Офлайн

#5 Сен. 13, 2013 14:49:47

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Интересная задача про палиндром

Ну тут явно надо через рекурсию делать. Что-то типа полного перебора з возвратом. Если будет время, можно будет позадрачиваться с этой задачей



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#6 Сен. 13, 2013 15:07:55

zhut
Зарегистрирован: 2013-08-08
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Интересная задача про палиндром

Полным перебором не получится, слишком много времени нужно.
В принципе задачку я давно решил, кода под рукой сейчас нет поэтому показать не смогу. А решение было следующим: я написал 2 функции 1 добавляла левую часть палиндрома 2-я правую часть. Слова брались из условия что для левой части

s1==s2[::-1][0:len(s1)]
для правой
s1[::-1]==s2[0:len(s1)]
. Создавались два списка вариантов левой и правой части к которым прибавлялось слово и проверялось условие. После почти суток работы программы получил палиндром длиной 1344 буквы.

Отредактировано zhut (Сен. 13, 2013 15:09:42)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version