#!/usr/bin/perl@p = @ARGV;;
$sum = int $p[0]; # требуемая сумма
$n = int $p[1]; # кол-во цифр для суммы
$not = $p[2]; # 3-й параметр - через запятую перечисляются неиспользуемые цифры
@not = split(',',$not);
foreach $not (@not) { $not{$not} =1; }
# сделали %not - там ключи=цифры, которые нельзя использовать при составлении суммы.
#-----
sub sudoku {
my $start = shift;
my $_numbers = shift; #найденные цифры
my $_current_sum = shift; #сумма найденных цифр
my $n = shift; #кол-во оставшихся цифр
for (my $i=$start; $i<10; $i++)
{
next if $not{$i} == 1;
if ($n > 1) { sudoku($i + 1, join('', ($_numbers, $i)), $_current_sum + $i, $n - 1); }
elsif ($_current_sum + $i == $sum) { print "${_numbers}${i}\n"; }
}
}
sudoku(1, '', 0, $n, $not);