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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задачка! 
:(
    Опции темы
DooZ
Дата 14.12.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



доброй ночи

помогите решить задачку

есть строка

1 2 k 5 6 7

в строке ГЛАВНОЕ слово это 'k' т.е. отталкиваемся от нее
надо из нее сделать следующие строки:
1 2 k 5 6
1 2 k 5
1 2 k
2 k 5 6 7
k 5 6 7
2 k 5 6
2 k 5
2 k
k 5

изместно всегда только главное слово от которого отталкиваться
но слова из которых все это делать не известны
они могут быть любой длинны например всего 3 слова
тогда пример будет такой:
1 k 3

строки надо получить:
1 k
k 3
все

и т.д.
если 3 слова такого вида:
1 2 k
то всего 1 строка получится
2 k

З.Ы. никаких рандомных вставок делать низя
т.е есть исходное слово типа
1 2 3 k 4
из него получаем СТРОГО
1 2 3 k
2 3 k
2 3 k 4
3 k
3 k 4
k 4

все
PM MAIL   Вверх
DooZ
Дата 14.12.2007, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



фух сделал

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

Код

#!/usr/bin/perl -w

use strict;

my $string="1 2 k 5 6 7";
my $keyword="k";
my @result;
my %result;

push(@result, $string);
my $str=$string;

    while (1)
    {
        while (1)
        {
        $str=replace($str, 0);
        last if (!$str || $str eq "");
        push(@result, $str);

        my $s=$str;

            while(1)
            {
            $s=replace($s, 1);
            last if (!$s || $s eq "");
            push(@result, $s);
            }
        }

    $str=$string;

        while(1)
        {
        $str=replace($str, 1);
        last if (!$str || $str eq "");
        push(@result, $str);

        my $s=$str;

            while(1)
            {
            $s=replace($s, 0);
            last if (!$s || $s eq "");
            push(@result, $s);
            }
        }

    last;
    }

    foreach my $result (@result)
    {
    $result =~ s/^[\s\t\r\n]+//;
    $result =~ s/[\s\t\r\n]+$//;
    chomp($result);
    next if (!$result || $result eq "");
    $result{$result}++;
    }

    foreach my $result (sort keys %result)
    {
    $result =~ s/^[\s\t\r\n]+//;
    $result =~ s/[\s\t\r\n]+$//;
    chomp($result);
    print "$result\n";
    }


sub replace
{

my $str=$_[0];
my $step=$_[1];

$str =~ s/^[\s\t\r\n]+//;
$str =~ s/[\s\t\r\n]+$//;
chomp($str);

    if ($step==0)
    {
    return if ($str =~ /^$keyword/i);
    $str =~ s/^[^\s]+//;
    }

    if ($step==1)
    {
    return if ($str =~ /$keyword$/i);
    $str =~ s/[^\s]+$//;
    }

return $str;

}


Это сообщение отредактировал(а) DooZ - 14.12.2007, 02:18
PM MAIL   Вверх
AlexPet
Дата 14.12.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

my $str = "1 2 3 4 k 5 6";
my $k = 'k';
my @arr = split(/ /, $str);

my $i = 0;
my $j;
map { $j = $i if $_ eq $k; $i++; } @arr;
print "@arr\n";
for (my $i1 = 0; $i1 <= $j; $i1++) {
        for (my $i2 = $#arr; $i2 >= $j; $i2--) {
                if ($i1 != $i2 && ($i1 > 0 || $i2 < $#arr)) {
                        my @curarr = @arr[$i1..$i2];
                        print "@curarr\n";  #здесь вместо вывода можно вставить заполнение нужной Вам структуры
                }
        }
}

Это если я правильно понял смысл задачи

Это сообщение отредактировал(а) AlexPet - 14.12.2007, 10:09
PM MAIL ICQ Jabber   Вверх
DooZ
Дата 14.12.2007, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2AlexPet да все верно smile
спасибо за пример 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.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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