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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Python => Perl 
V
    Опции темы
dixoNICH
Дата 26.10.2011, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Надо переписать скрипт с питона на перл. Попытался, не получилось smile Питон совершенно не знаю. Помогите, пожалуйста. Вывод должен быть - полный перебор фраз, т.е. ab, ac, ba, bc, abc, cba и т.д.
Код


from numpy import chararray

N_CHARS = 3
a = chararray( N_CHARS )
a[:] = ['a', 'b', 'c']
z = chararray( N_CHARS )


def Pnm( a, lenA, j, m ):
    _a = chararray( lenA )
    if j <= m:
#       for i in range(0,len(a) ):
        i = 0
        while i <= lenA-1:
            z[j-1] = a[i]
#2          _a = []
#           for l in range(0,len(a) ):
            k = 0
            kk = 0
            while k <= lenA-1:
                if k != i:
#2                  _a.append( a[k] )
                    _a[kk] = a[k]
                    kk = kk+1
                k = k+1
            Pnm( _a, kk, j+1, m )
            i = i+1
    else:
        kk = 0
        while kk < m:
            print z[kk],
            kk = kk+1
        print
        return


# for m in range (1, len(a)+1):
m = 1
while m <= len(a):
#   z = range( m )
#2  z = []
    i = 0
    while i < m:
#2      z.append( i )
        z[i] = i
        i = i+1
    Pnm( a, 3, 1, m )
    m = m+1



Код

my @a = qw/a b c/;
my @z;
sub pnm {
    my(@a, $lenA, $j, $m) = @_;
    if ($j <= $m) {
        $i = 0;
        while($i <= $lenA-1) {
            $z[$j-1] = $a[$i];
            $k = 0;
            $kk = 0;
        }
        while($k <= $lenA-1) {
            if ($k!=$i) {
                $_a[$kk] = $a[$k];
                $kk = $kk+1;
                $k = $k+1;
                pnm($_a, $kk, $j+1, $m);
                $i = $i+1;
            }
        }
    }
    else {
        $kk = 0;
        while($kk<$m) {
            print $z[$kk];
            $kk = $kk+1;
            print;
        return;
        }
    }
}
    $m = 1;
    while($m <= scalar @a) {
       $i = 0;
        while($i < $m) {
            $z[$i] = $i;
            $i = $i+1;
            pnm(@a, 3,1,$m);
            $m = $m+1;
        }
    }



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


Опытный
**


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

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



Блин, питон такой простой. Смотрю код и сразу все понятно! smile
PM MAIL   Вверх
dixoNICH
Дата 26.10.2011, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



если понятно - не составит труда переписать smile буду благодарен smile
PM MAIL   Вверх
Suppir
Дата 27.10.2011, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Извини, друг, я на работе smile 
PM MAIL   Вверх
ginnie
Дата 27.10.2011, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



dixoNICH, можно попробовать Algorithm::Combinatorics


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
MakTpaxep
Дата 27.10.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Так вы нам напишите более конкретно что требуется. Питон тогда не потребуется переводить.
PM MAIL   Вверх
dixoNICH
Дата 27.10.2011, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Перебор всех возможных фраз в тексте.
т.е. 
$text = "привет мой друг";
и на выходе, например, массив
@text = qw /приветмой приветдруг приветмойдруг мойдруг другмой и т.д.

Добавлено через 30 секунд
Цитата(ginnie @ 27.10.2011,  11:46)
dixoNICH, можно попробовать Algorithm::Combinatorics

Мне бы без сторонних модулей smile
PM MAIL   Вверх
dixoNICH
Дата 27.10.2011, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Уже не надо smile
PM MAIL   Вверх
dixoNICH
Дата 8.11.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ап smile Теперь надо. Помогите, пожалуйста smile
PM MAIL   Вверх
Lols
Дата 8.11.2011, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Увы, питона не знаю, но посмотреть, как должно быть, интересно.
PM MAIL   Вверх
dixoNICH
Дата 13.11.2011, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ап smile
PM MAIL   Вверх
trigandyaj
Дата 27.11.2011, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Моя логика заключается в том что используется только три аргумента(а,бэ,цэ) и отсюда следует что возможных
комбинаций всего двенадцать!
use 5.010; без этой строки у меня перл ругается и не выполняет скрипт
@w=split /\s+/, <STDIN>; слова должны быть разделены пробелами, вместо <STDIN> моно скаляр
@result=($w[0].$w[1],$w[0].$w[2],$w[0].$w[1].$w[2],$w[0].$w[2].$w[1],
 $w[1].$w[0],$w[1].$w[2],$w[1].$w[0].$w[2],$w[1].$w[2].$w[0],
 $w[2].$w[0],$w[2].$w[1],$w[2].$w[0].$w[1],$w[2].$w[1].$w[0]);
say "@result"; выводит результат
PM MAIL   Вверх
alezzz
Дата 27.11.2011, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


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

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



жуть... а foreach(0..99) вы раскладываете в 100 строчек?

Цитата(trigandyaj @  27.11.2011,  15:29 Найти цитируемый пост)
use 5.010; без этой строки у меня перл ругается и не выполняет скрипт

замените say на print.

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


Бывалый
*


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

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



Цитата(trigandyaj @ 27.11.2011,  15:29)
Моя логика заключается в том что используется только три аргумента(а,бэ,цэ) и отсюда следует что возможных
комбинаций всего двенадцать!
use 5.010; без этой строки у меня перл ругается и не выполняет скрипт
@w=split /\s+/, <STDIN>; слова должны быть разделены пробелами, вместо <STDIN> моно скаляр
@result=($w[0].$w[1],$w[0].$w[2],$w[0].$w[1].$w[2],$w[0].$w[2].$w[1],
 $w[1].$w[0],$w[1].$w[2],$w[1].$w[0].$w[2],$w[1].$w[2].$w[0],
 $w[2].$w[0],$w[2].$w[1],$w[2].$w[0].$w[1],$w[2].$w[1].$w[0]);
say "@result"; выводит результат

вы, конечно, извините, но до такого догадаться не проблема и для 1-го классника.
а я ищу решение не для трёх слов, а для n слов 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.0707 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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