Skip to content

Instantly share code, notes, and snippets.

@klopp
Last active February 6, 2020 12:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save klopp/51c86723ecc6b64e2ad38dffb00656bf to your computer and use it in GitHub Desktop.
Save klopp/51c86723ecc6b64e2ad38dffb00656bf to your computer and use it in GitHub Desktop.
#!/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