Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Паллиндромы. 
:(
    Опции темы
dixoNICH
Дата 18.10.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Дан русский текст, найти все паллиндромы данного текста.
Т.е., например, дано $text = "ааа ааа рор рор хи хи привет тевип салам мам мам малас";
надо найти 
ааа ааа 
рор рор
хи хи
салам мам мам малас

совершенно не представляю, как это сделать) подскажите, пожалуйста.
PM MAIL   Вверх
MakTpaxep
Дата 18.10.2011, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 25.11.2010

Репутация: нет
Всего: нет



"хи хи" точно должно находить?
" рор рор " с пробелами должно находиться.

Вы определитесь как эту вашу строку рассматривать) Как массив (тогда не найдёт "салам мам мам малас") или как строку (тогда не найдёт "хи хи", но найдёт ещё "т т" и кучу других сочетаний).

Вообщем много непонятного.

Это сообщение отредактировал(а) MakTpaxep - 18.10.2011, 17:40
PM MAIL   Вверх
dixoNICH
Дата 18.10.2011, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



С хихи да, я невнимательно просто писал, не должно его найти.
Не знаю, как рассматривать. Скажем так : есть файл с русским текстом.
Надо найти все паллиндромы.
Текст, например : 'привет тевирп хи их поп поп  выфа2в  вывфврор рор я еду гулять ьтялуг уде я';
Должно найти : 
я еду гулять ьтялуг уде я'
'привет тевирп
хи их
поп поп
рор рор

в общем нужны все фразы палиндромы.

Это сообщение отредактировал(а) dixoNICH - 18.10.2011, 19:34
PM MAIL   Вверх
alezzz
Дата 18.10.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



если "рор рор" тоже должно найти, то... немного магии perl:
Код

$str = 'привет тевирп хи их поп поп  выфа2в  вывфврор рор я еду гулять ьтялуг уде я';

while ($str =~ /(.+?)\s(??{reverse(split('', $1))})/g){
    print $& . "\n";
};

Код

привет тевирп
 хи их 
поп поп
рор рор
я еду гулять ьтялуг уде я


PM MAIL   Вверх
dixoNICH
Дата 18.10.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Цитата(alezzz @ 18.10.2011,  19:34)
если "рор рор" тоже должно найти, то... немного магии perl:
Код

$str = 'привет тевирп хи их поп поп  выфа2в  вывфврор рор я еду гулять ьтялуг уде я';

while ($str =~ /(.+?)\s(??{reverse(split('', $1))})/g){
    print $& . "\n";
};

Код

привет тевирп
 хи их 
поп поп
рор рор
я еду гулять ьтялуг уде я


спасибо! а как разбить не только по пробелу? по-обычному не получается (
$str =~ /(.+?)\s(??{reverse(split(/[.;:!?]/, $1))})/g
PM MAIL   Вверх
alezzz
Дата 18.10.2011, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



что такое "по-обычному"?
PM MAIL   Вверх
dixoNICH
Дата 18.10.2011, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



$str =~ /(.+?)\s(??{reverse(split(/[.;:!?]/, $1))})/g

ну вот так)

а ещё вопрос : если у меня например строка будет такой : $str = 'хи их хи их поп поп тевирп выфа2в  привет';


то как мне найти тевирп привет?
PM MAIL   Вверх
alezzz
Дата 18.10.2011, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



Цитата(dixoNICH @  18.10.2011,  19:58 Найти цитируемый пост)
$str =~ /(.+?)\s(??{reverse(split(/[.;:!?]/, $1))})/g

smile вы не поняли как это все работает. split я применил потому что reverse по другому не ревертировал строку.
могу предложить нормализовать строку убрав все лишнее оставив по одному пробелу между словами.

Цитата(dixoNICH @  18.10.2011,  19:58 Найти цитируемый пост)
то как мне найти тевирп привет?

моим способом никак.

Это сообщение отредактировал(а) alezzz - 18.10.2011, 20:04
PM MAIL   Вверх
Pfailed
Дата 18.10.2011, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



А у меня так получилось
Код

use utf8;

my $str = 'привет тевирп хи их поп поп выфа2в вывфврор рор я еду гулять ьтялуг уде я';
my (@m) = $str =~ /(\b\w[\w\s]*?) \s+ ((??{quotemeta reverse $1}))/xg
    or die;

for ($i=0; $i<@m; $i+=2) {
    print "$m[$i] <-> $m[$i+1]\n";
}


Добавлено через 8 минут и 37 секунд
Цитата(dixoNICH @  18.10.2011,  19:58 Найти цитируемый пост)
а ещё вопрос : если у меня например строка будет такой : $str = 'хи их хи их поп поп тевирп выфа2в  привет';

Можно так попробовать
Код

use utf8;

my $str = 'хи их хи их поп поп тевирп выфа2в  привет';
my (@m) = $str =~ /(\b\w[\w\s]*?) \s[\w\s]* \b((??{quotemeta reverse $1}))/xg
    or die;

for ($i=0; $i<@m; $i+=2) {
    print "$m[$i] <-> $m[$i+1]\n";
}



--------------------
PM MAIL   Вверх
alezzz
Дата 18.10.2011, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



Цитата(Pfailed @  18.10.2011,  20:17 Найти цитируемый пост)
Цитата(dixoNICH @  18.10.2011,  19:58 )а ещё вопрос : если у меня например строка будет такой : $str = 'хи их хи их поп поп тевирп выфа2в  привет';

Можно так попробовать

а так потеряются палиндромы внутри "тевирп привет".

Это сообщение отредактировал(а) alezzz - 18.10.2011, 20:36
PM MAIL   Вверх
dixoNICH
Дата 18.10.2011, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



Цитата(Pfailed @ 18.10.2011,  20:17)
А у меня так получилось
Код

use utf8;

my $str = 'привет тевирп хи их поп поп выфа2в вывфврор рор я еду гулять ьтялуг уде я';
my (@m) = $str =~ /(\b\w[\w\s]*?) \s+ ((??{quotemeta reverse $1}))/xg
    or die;

for ($i=0; $i<@m; $i+=2) {
    print "$m[$i] <-> $m[$i+1]\n";
}


Добавлено @ 20:26
Цитата(dixoNICH @  18.10.2011,  19:58 Найти цитируемый пост)
а ещё вопрос : если у меня например строка будет такой : $str = 'хи их хи их поп поп тевирп выфа2в  привет';

Можно так попробовать
Код

use utf8;

my $str = 'хи их хи их поп поп тевирп выфа2в  привет';
my (@m) = $str =~ /(\b\w[\w\s]*?) \s[\w\s]* \b((??{quotemeta reverse $1}))/xg
    or die;

for ($i=0; $i<@m; $i+=2) {
    print "$m[$i] <-> $m[$i+1]\n";
}

второй вариант не работает для такой строки (
'лол хи их хи их поп поп тевирп выфа2в  привет лол';
находит только лол - лол
PM MAIL   Вверх
Pfailed
Дата 19.10.2011, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 22
Всего: 39



Код

use utf8;

my $str = 'лол хи их хи их поп поп тевирп выфа2в  привет лол';
while (my @pol = $str =~ /(\b\w[\w\s]*?) \s[\w\s]* \b((??{quotemeta reverse $1}))/x) {
    print "$pol[0] <-> $pol[1]\n";
    $str =~ s/\b\Q$pol[0]\E\b//;
    $str =~ s/\b\Q$pol[1]\E\b//;
}



--------------------
PM MAIL   Вверх
dixoNICH
Дата 19.10.2011, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



как дела друг как гурд алед
но ведь для такого не будет работать(
PM MAIL   Вверх
dixoNICH
Дата 19.10.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



есть ли вариант рассмотреть массив слов, например
@words = qw/a b c/;
потом формировать как-то хеш
%words = (
                 a => ab,ac,ba,ca,abc,acb,bac,cab,bca
                 );
ну и собственно так и рассмотреть всевозможные фразы в тексте, а потом уже перебирать фразы и смотреть, палиндром это или нет?
PM MAIL   Вверх
Suppir
Дата 20.10.2011, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 588
Регистрация: 20.4.2009

Репутация: нет
Всего: нет



А мне интересно, можно ли написать скрипт, который сам составит фразу (пусть, и не связную),
которую можно будет прочитать задом-наперед, отчего получится другая фраза (пусть, и еще менее связная)? smile


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.