Следующий perl
скрипт читает список слов из stdin и/или имя(а) файла(ов), указанные в командной строке, и выводит все палиндромы и обратимые слова, которые он находит. Он игнорирует слова длиной менее 3 символов (в основном потому, что в моем файле /usr/share/dict/words
много такого мусора, например, 'A' и 'Aa')
Он написан на очень простом perl, предназначенном для того, чтобы его было как можно легче понять и изменить, без использования каких-либо "умных" трюков perl.
#! /usr/bin/perl
use strict;
my %dict = ();
print "Palindromes\n";
print "-----------\n";
while(<>) {
chomp;
next if (length($_) < 3);
$dict{$_} = 1;
print "$_\n" if ($_ eq reverse($_));
}
print "\n\nReversibles\n";
print "-----------\n";
foreach my $key (keys %dict) {
my $len = length($key);
my $firsthalf = '';
my $secondhalf = '';
if (($len / 2) == int($len/2)) {
# even length words
$firsthalf = substr($key,0,int($len/2));
$secondhalf = substr($key,int($len/2));
} else {
# odd length words
$firsthalf = substr($key,0,int($len/2)+1);
$secondhalf = substr($key,int($len/2)+1);
};
my $rev = $secondhalf . $firsthalf;
next unless (exists $dict{$rev});
# don't print if reversed word is a palindrome
next if ($rev eq $key);
print "$key => $rev\n";
}
Вывод выглядит так:
$ ./find-P-and-R.pl /usr/share/dict/words
Palindromes
-----------
MGM
aba
abba
aga
aha
aia
aka
...
...
...
Reversibles
-----------
mode => demo
reenter => terreen
juba => baju
oon => noo
lave => vela
lassi => silas
updo => doup
air => rai
...
...
...
Я только что столкнулся с этим при компиляции модуля ядра на Pi. Чтобы исправить ошибку отсутствия каталога сборки, установите заголовки ядра для вашего Pi.
sudo apt-get install raspberrypi-kernel-headers