Perl. Пересекаются ли два массива?
Очень простая задача – пересекаются ли два массива, есть хотя бы один элемент в одном массиве, который присутствует в другом, ответ да или нет.
На классических языках программирования обычно решается с помощью двух циклов и выходом из них при нахождении хотя бы одного элемента.
На Perl это делается так:
Исходник
Задача решена с помощью анонимного хеша, который строится на лету, и с помощью срезов.
Очень просто, элегантно, без лишних переменных и в одно условие, код написан именно так, как звучит задача. Даа, это красиво :)
UPD: Спасибо
what_me за решение на perl 5.10:
ЗЫ: Диалог с сишником++:
– Я не понимаю, зачем нужно учить Perl?
– Давай, я покажу п*здатый код, а ты сам решай. Простая задача – пересекаются ли два списка, ответ да или нет.
(Пошла ржака)
– А массивы одинаковой длины?
– (бугага)
– Массивы строк или чисел?
– (бугага)
– Вот код (показываю этот код)
– Даа, круто! Что такое map, grep, qw?
– (бугага) Смотри задача решена без единой лишней переменной и с помощью анонимного хеша
– Это как лямбда-функция?
– (бугага)
– В си тоже есть hashmap
– (бугага) Учи Perl! :)
UPD ЗЫ: Другой сишник мне написал: "и все-таки оно будет работать медленнее чем 2 цикла" (бугага) x 100500
ЗЫЗЫ: RostovOnDon.pm offline #3 permalink.gmane.org/gmane.comp.lang.perl.p erl-mongers.rostovondon/343
use Perl or die;
JFDI
На классических языках программирования обычно решается с помощью двух циклов и выходом из них при нахождении хотя бы одного элемента.
На Perl это делается так:
use common::sense;
my @a = qw(q w e r t y);
my @b = qw(u i o p q);
say 1 if grep { defined } @{{ map { $_ => 1 } @a }}{ @b };
Исходник
Задача решена с помощью анонимного хеша, который строится на лету, и с помощью срезов.
Очень просто, элегантно, без лишних переменных и в одно условие, код написан именно так, как звучит задача. Даа, это красиво :)
UPD: Спасибо
use common::sense;
my @a = qw(q w e r t y);
my @b = qw(u i o p q);
say @a ~~ {map { $_ => 1 } @b};
ЗЫ: Диалог с сишником++:
– Я не понимаю, зачем нужно учить Perl?
– Давай, я покажу п*здатый код, а ты сам решай. Простая задача – пересекаются ли два списка, ответ да или нет.
(Пошла ржака)
– А массивы одинаковой длины?
– (бугага)
– Массивы строк или чисел?
– (бугага)
– Вот код (показываю этот код)
– Даа, круто! Что такое map, grep, qw?
– (бугага) Смотри задача решена без единой лишней переменной и с помощью анонимного хеша
– Это как лямбда-функция?
– (бугага)
– В си тоже есть hashmap
– (бугага) Учи Perl! :)
UPD ЗЫ: Другой сишник мне написал: "и все-таки оно будет работать медленнее чем 2 цикла" (бугага) x 100500
ЗЫЗЫ: RostovOnDon.pm offline #3 permalink.gmane.org/gmane.comp.lang.perl.p
use Perl or die;
JFDI
