Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 8, 2013 12:29:43

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

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

Помогите решить следующую задачу.
Дан большой текст более 1000 слов, необходимо из слов этого текста составить палиндром как можно большей длины, каждое слово в палиндроме должно встречаться только 1 раз. Слова из текста я извлек в массив, а как из них составить палиндром ума не приложу. Всё упирается в кучу циклов, считать которые никакого времени не хватит
Буду благодарен за любые идеи в помощи решения этой задачи.

Офлайн

#2 Авг. 8, 2013 15:10:11

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

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

Покажите код.

Офлайн

#3 Авг. 8, 2013 16:32:39

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

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

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

Офлайн

#4 Авг. 8, 2013 16:57:42

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

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

from collections import deque
l = ['adc','arc','cda','rtt','ttr','gfdgd']
res = deque(list())
for x in l:
	for y in l:
		if x == y[::-1]:
			res.appendleft(x)
			res.append(y)
print [ x for x in res] 
Это в лоб.
Можно оптимизировать количество разворачиваний строк

Отредактировано Singularity (Авг. 8, 2013 17:00:33)

Офлайн

#5 Авг. 8, 2013 20:53:52

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

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

полным перебором тут и из 20-ти слов не вычислить

Офлайн

#6 Авг. 8, 2013 21:18:32

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

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

есть входной файл с ответом?

Офлайн

#7 Авг. 8, 2013 22:04:58

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

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

нужно строить по словам от концов последовательности слов к её центру
опять олимпиадная задачка, походу (бессмысленная и отнимающая время)



Онлайн

#8 Авг. 9, 2013 06:48:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

Singularity
Это в лоб.
Можно оптимизировать количество разворачиваний строк
Не работает
from collections import deque
l = ['лазер','боре','хер','обрезал']
res = deque(list())
for x in l:
    for y in l:
        if x == y[::-1]:
            res.appendleft(x)
            res.append(y)
print [ x for x in res]
[]



Офлайн

#9 Авг. 9, 2013 09:48:14

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

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

В лоб решение у меня такое

# -*- coding: utf-8 -*-
f=open('file')
string=f.read().split('\n') # Слова уже все извлек в файл 1 строка одно слово
s1=[]
s2=[]
for i in string:
    for x in string:
        if i == x[::-1] and i!=x and i not in s1 and i not in s2 and x not in s1 and x not in s2:
            s1.append(i)
            s2.append(x)
print s1
print s2[::-1]

Но это малая часть палиндрома получается.

Отредактировано zhut (Авг. 9, 2013 09:49:00)

Офлайн

#10 Авг. 9, 2013 09:51:54

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

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

sergeek
есть входной файл с ответом?
Файла нет с ответом, просто задание, палиндром должен быть как можно длиннее

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version