Guest User

Untitled

a guest
Oct 27th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.22 KB | None | 0 0
  1. ->a{(1..a.size).flat_map{|n|a.sort.combination(n).select{|c|c.reduce(:+)==10}.uniq}}
  2.  
  3. (1..a.size) # Для диапазона от 1 до длины массива А
  4. .flat_map{ |n| # ...сконкатенировать для каждого следующее (где N текущее):
  5. a.sort # Из отсортированного массива А...
  6. .combination(n) # ...взять все комбинации длиной N элементов
  7. .select{ |c| # ...выбрав только те из них (где С текущее), в которых:
  8. c.reduce(:+)==10} # Cвёртка С сложением равна 10.
  9. .uniq} # ...убрав повторения.
  10.  
  11. c[]=[[]]
  12. c(x:l)=c l++[x:r|r<-c l]
  13. g n l=nub$filter((n==).sum)$c$sort l
  14.  
  15. c [] = [[]]
  16. c (x:l) = c l ++ [ x:r | r <- c l ]
  17. g n l = nub $ filter (x -> sum x == n) $ c $ sort l
  18.  
  19. sub X{my($n,%r)=pop;@_=sort@_;map{my$c=pop;$r{"$c,$_"}++for X(@_,$n-$c||$r{$c}++&&0)}@_;keys%r}
  20.  
  21. sub X { # Основная функция
  22. my$n=pop; # $n=первый параметр (текущий остаток)
  23. @_=sort@_; # Сортируем входной массив
  24. my %r; # Объявляем хеш результатов
  25. map { # перебираем массив
  26. my$a=$n-(my$c=pop); # вытаскиваем очередной элемент массива (в $c)
  27. # и вычисляем текущий остаток минус данный элемент массива
  28. $r{"$c,$_"}++ for X(@_,$a) # Кладем в хеш результатов каждый элемент массива,
  29. # который вернет функция перед которым текущий элемент с запятой
  30. $r{$c}++ if!$a # Если разность 0 - то кладем в результаты само число
  31. } @_;
  32. keys%r # возвращаем массив результатов
  33. }
  34.  
  35. # Вызов
  36. @A=(1,3,4,5,3,3,7,2,7,10); # Тестовый массив
  37. $,="n";
  38. print X(@A,10);
  39.  
  40. f=(n,s,r=[],c={},i=0)=>{s||(c[r.join(',')]=r);for(;i<n.length;)f(n,s-n[i],[n[i],...r].sort(),c,++i);return c}
  41.  
  42. solve <- function(a) {
  43. # собираем вектор с допустимыми длинами комбинаций
  44. sizes <- c(1:length(a))
  45. # сопоставляем каждой длине комбинации, получаем список списков комбинаций, каждая комбинация пропускается через sort
  46. combinations <- Map(function(size) combn(a, size, FUN = sort, simplify = FALSE), sizes)
  47. # делаем список с комбинациями плоским
  48. combinations <- unlist(combinations, recursive = FALSE)
  49. # оставляем только комбинации дающие в сумме 10
  50. combinations <- Filter(function(x) sum(x) == 10, combinations)
  51. # выкидываем дубликаты
  52. combinations <- unique(combinations)
  53. #возвращаем результат
  54. combinations
  55. }
  56.  
  57. s(c(2,3,5,5))
  58.  
  59. a=>[...Array(2e3)].map((x,q)=>a.filter((x,i)=>q&1<<i).sort()).sort().filter((x,i,a)=>x+""!=a[i-1]&!x.reduce((x,y)=>x+y,-10))
  60.  
  61. def r(a,c=[],z=[]):
  62. a.sort()
  63. for i,v in enumerate(a):z+=[c+[v]]if v+sum(c)==10*0**(c+[v]in z)else r(a[i+1:],c+[v],z)*0
  64. return z
  65.  
  66. res = r( [1,4,5,5,2,3,1,4] )
  67. print( res )
  68.  
  69. def recur( arr, curArr, maxSumm ):
  70. arr.sort()
  71. curSumm = sum( curArr ) # текущая набранная сумма, не забываем, что sum([]) == 0
  72. result = []
  73. for i in range( len( arr ) ):
  74. if arr[i] + curSumm == maxSumm: # если в сумме набрали нужное число, то добавляем к результату
  75. result+=[ curArr + [ arr[i] ] ]
  76. elif arr[i] + curSumm < maxSumm: # если сумма меньше, то добавляем результат рекурсивного вызова
  77. result+= recur( arr[i+1:], curArr + [ arr[i] ], maxSumm )
  78. return result
  79.  
  80. def unique( arr ): # уникальные значения массива
  81. unique = []
  82. [ unique.append(i) for i in arr if i not in unique ]
  83. return unique
  84.  
  85. function f($a,&$o){while(++$i<1000){shuffle($a);$t=array_slice($a,0,rand(1,10));sort($t);array_sum($t)==10?$o[serialize($t)]=$t:'';}}
  86.  
  87. <?php
  88. $a = [5,2,3,5,7,1,10,8];
  89.  
  90. function f($a,&$o){
  91. while(++$i<1000){
  92. shuffle($a);
  93. $t=array_slice($a,0,rand(1,10));
  94. sort($t);
  95. array_sum($t)==10?$o[serialize($t)]=$t:'';
  96. }
  97. }
  98. f($a, $o);
  99. var_dump($o);
  100.  
  101. function f($a,&$o){sort($a);$c=count($a);for($k=-1,$i=0;$i<$c;$k=$i++){$t=[];while(++$k<$c){$t[]=$a[$k];($s=array_sum($t))==10?$o[implode($t)]=$t:$s>10?array_pop($t):1;}}}
  102.  
  103. function f($a,&$o){
  104. sort($a);
  105. $c=count($a);
  106. for($k=-1,$i=0;$i<$c;$k=$i++){
  107. $t=[];
  108. while(++$k<$c){
  109. $t[]=$a[$k];
  110. ($s=array_sum($t))==10?$o[implode($t)]=$t:$s>10?array_pop($t):1;
  111. }
  112. }
  113. }
Add Comment
Please, Sign In to add comment