Guest User

Untitled

a guest
Oct 23rd, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. sub X{my$n=shift;my@r;while($#_+1){my$c=shift;my$a=$n-$c;if($a>0){push@r,"$c,$_"for X($a,@_)}push@r,$c if(!$a);}@r}$,="n";%x=map{((join'+',sort split/,/),1)}X(10,@A);print keys%x
  2.  
  3. @A=(1,3,4,5,3,3,7,2,7,10); # Тестовый массив
  4.  
  5. sub X { # Основная функция
  6. my $n=shift; # $n=первый параметр (текущий остаток)
  7. my @r; # Объявляем массив результатов
  8. while($#_+1) { # пока есть еще параметры
  9. my $c=pop; # вытаскиваем очередной элемент массива (в $c)
  10. my $a=$n-$c; # Вычисляем текущий остаток минус данный элемент массива
  11. if($a>=0) { # Если он больше или ноль
  12. push @r,"$c,$_" for X($a,@_) # Кладем в массив результатов каждый элемент массива,
  13. # который вернет функция перед которым текущий элемент с запятой
  14. }
  15. push @r,$c if(!$a); # Если разность 0 - то кладем в результаты само число
  16. }
  17. @r # возвращаем массив результатов
  18. }
  19. $,="n"; # Выводить результаты разделяя переводом каретки
  20. %x = # хеш
  21. map { # ключами которого являются строки
  22. ((join'+',sort split/,/),1) # разделенных знаком +, отсортированных элементов
  23. } X(10,@A); # построенных для каждого элемента возвращенного функцией
  24. print keys%x # печатаем ключи хеша, т.е. уникальные ответы
  25.  
  26. public class Golf : IEqualityComparer<List<int>>
  27. {
  28. //для Distinct
  29. public bool Equals(List<int> x, List<int> y) {return x.Except(y).Count()==0&&y.Except(x).Count()==0;}
  30. public int GetHashCode(List<int> obj) public int GetHashCode(List<int> obj) {return obj.Select((n,i)=>n*10^i).Sum();}
  31.  
  32. //Основная функция
  33. public List<List<int>> Golf_func(List<int> list, int lim) {
  34. var r = new List<List<int>>();
  35. foreach (var n in list) {
  36. if (n>lim) continue;
  37. else if (n==lim) r.Add(new List<int>() {n});
  38. else r.AddRange(Golf_func(list.Except(new List<int>() {n}).ToList(), lim-n).Select(a=>{a.Add(n); return a.OrderBy(b=>b).ToList();}));
  39. }
  40. return r.Distinct(this).ToList();
  41. }
  42. }
Add Comment
Please, Sign In to add comment