яндексова задачка
Nov. 6th, 2009 09:50 amвзята отсюда.
На сервере имеется файл /tmp/money. Каждая строка файла – последовательность символов без пробелов, состоящая из наименования валюты и номинала. Например, rubl100, bucks20, frank1.
Нужно дописать perl-скрипт, чтобы он вывел все строки из файла в порядке возрастания стоимости соответствующей банкноты.
мое решение:
использование:
На сервере имеется файл /tmp/money. Каждая строка файла – последовательность символов без пробелов, состоящая из наименования валюты и номинала. Например, rubl100, bucks20, frank1.
Нужно дописать perl-скрипт, чтобы он вывел все строки из файла в порядке возрастания стоимости соответствующей банкноты.
#!/usr/bin/perl -w
use strict;
# Курсы валют (предполагается, что все курсы,
# которые могут встретиться в файле, в этом хэше есть)
my $roe = {
frunk => 1,
tugrik => 100,
bobrik => 10,
};
мое решение:
my $re = sprintf "(%s)",join "|",keys %$roe;
print join "\n",map { $_->[0] } sort { $a->[1] <=> $b->[1] }
map { chomp; m#^$re(\d+)#o && [ $_,$2/$roe->{$1} ] } <>;
использование:
zsh# perl -le 'my $roe = { frunk => 1, tugrik => 100, bobrik => 10 };
my $re = sprintf "(%s)",join "|",keys %$roe;
print join "\n",map { $_->[0] } sort { $a->[1] <=> $b->[1] }
map { chomp; m#$re(\d+)#o && [ $_,$2/$roe->{$1} ] } <>' \
=( print -l frunk1 bobrik1 tugrik1 tugrik100 bobrik20 bobrik5 )
tugrik1
bobrik1
bobrik5
frunk1
tugrik100
bobrik20
zsh#