Last active
February 6, 2020 12:41
-
-
Save klopp/51c86723ecc6b64e2ad38dffb00656bf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
# -------------------------------------------------------------------------------- | |
# Вход: массив слов | |
# Выход: отдельно сгруппировать слова, являющиеся анаграммами, | |
# отдельно - не являющиеся | |
# -------------------------------------------------------------------------------- | |
use Modern::Perl; | |
use utf8; | |
use DDP; | |
my @data = ( 'кот', 'ток', 'саронг', 'гарсон', 'мяч', 'кит' ); | |
my %rc; | |
for (@data) { | |
# формируем уникальный ключ, который для всех | |
# слов, состоящих из одинаковых букв, будет | |
# одним и тем же: | |
my $key = join '', sort split //; | |
# складываем туда слово: | |
push @{ $rc{$key} }, $_; | |
} | |
for ( keys %rc ) { | |
# если в массиве только одно слово, анаграмм | |
# для него не найдено: | |
if( @{ $rc{$_} } == 1 ) { | |
# складываем в отдельный массив и удаляем исходный ключ: | |
push @{ $rc{_} }, $rc{$_}->[0]; | |
delete $rc{$_}; | |
} | |
} | |
p %rc; | |
# -------------------------------------------------------------------------------- | |
# Результат: | |
# | |
# { | |
# _ [ | |
# [0] "мяч", | |
# [1] "кит" | |
# ], | |
# агнорс [ | |
# [0] "саронг", | |
# [1] "гарсон" | |
# ], | |
# кот [ | |
# [0] "кот", | |
# [1] "ток" | |
# ] | |
# } | |
# -------------------------------------------------------------------------------- |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment