1. Входной формат данных для рассмотренного примера избыточен: первая строка содержит имена всех игроков, что излишне. Имена участвующих в турнире игроков можно получить из последующих строк.
Как изменить программу если строка с именами игроков отсутствует ?
Подсказка: %hash.keys возвращает список всех ключей %hash.
Ответ: Достаточно удалить строку my @names = $file.get.split(' ');, и внести изменения в код:
my @sorted = @names.sort({ %sets{$_} }).sort({ %matches{$_} }).reverse;
... чтобы стало:
my @sorted = B<%sets.keys>.sort({ %sets{$_} }).sort({ %matches{$_} }).reverse;
2. Вместо удаления избыточной строки, ее можно использовать для контроля наличия всех упомянутых в ней игроков среди результатов матча. Например, для обнаружения опечаток в именах. Каким образом можно изменить программу, чтобы добавить такую функциональность ?
Ответ: Ввести еще один хэш, в котором хранить в качестве ключей правильные имена игроков, а затем использовать его при чтении данных сетов:
...
my @names = $file.get.split(' ');
my %legitimate-players;
for @names -> $n {
%legitimate-players{$n} = 1;
}
...
for $file.lines -> $line {
my ($pairing, $result) = $line.split(' | ');
my ($p1, $p2) = $pairing.split(' vs ');
for $p1, $p2 -> $p {
if !%legitimate-players{$p} {
say "Warning: '$p' is not on our list!";
}
}
...
}