RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 581668
Accepted
user207618
user207618
Asked:2020-10-23 18:46:29 +0000 UTC2020-10-23 18:46:29 +0000 UTC 2020-10-23 18:46:29 +0000 UTC

Codegolf——组合选择算法的实现

  • 772

招待会结束,感谢大家的参与!
您可以留下您的决定,但获胜者已经选出,不会重新计票。


问候。

任务:编写一个函数,从任意输入数组中选择所有数字组合,其总和等于 10。

更多详细信息:
数字范围:0 - 1000(含)。
输入数组中的数字数:1 - 10(含)。
已经选择的号码可以多次使用,但组合必须是唯一的。
---改变位置不会使组合唯一,即[1,9]不允许[9,1])。
--- 使用输入数据,[5,5,2,3]你可以做[5,5],[5,2,3]。
比赛时间:14天。
所需的响应标签格式(用于自动解析器到表):
<h2>Язык, КоличествоСимволов</h2>

获胜者的定义:由等级决定:

  1. 由最少字符数组成的实现。
  2. 获得最多赞成票的实施(总体评分减去反对票)。
  3. 第一次修订时间较早的实现。

还需要提供一个带有您的工作代码的在线编译器的链接。
欢迎测试。
强烈建议同时提供代码的竞争版本(缩小和/或带有巫术)和相同代码的可视化描述。每个人不仅有兴趣看到语言的魔力,而且有兴趣为自己学习一些东西。

如果以不同的语言实现,则允许一位参与者提供多个答案。但每种语言不超过一个


如对条款的细节和/或分歧和/或解释有任何疑问,请在本文评论或代码高尔夫聊天室中讨论。


结果:

大多数赞成票的标准 3 个位置 + 1 个(总体评分减去反对票数)。

第一名:@PavelMayorov-, 42Haskell个字符。
第二名:@ArtemKonovalov-,69Scala个字符。
第三名:@Mike-,78Perl个字符。

观众选择:@D-side ( Ruby, 84) - 19 分。

恭喜所有参赛者,你们打得很好。
激情在最后高涨,出人意料地公布了一项以 1 个符号超越领导者的决定。
但是命运把一切都带回来了。

我想指出来自用户@AlexanderGavrikov的本次比赛的不寻常解决方案- 1437个字符!
这是一种记录,值得注意。


排行榜:

execute(581668);
.cssload-container,.cssload-cube{width:97px;height:97px;transform-style:preserve-3d}.cssload-container,.cssload-cube,.cssload-half1,.cssload-half2{transform-style:preserve-3d}.cssload-container{position:relative;margin:23px 84px;perspective:292px}.cssload-cube{animation:cube 11.5s forwards infinite;transform-origin:center 49px}.cssload-half1,.cssload-s1{top:0;transform-origin:50% 100%}.cssload-half1{height:39px;position:absolute;animation:half-fold 11.5s forwards infinite}.cssload-side{width:19px;height:19px;background:#ddd;position:absolute}.cssload-s1{left:39px;animation:s1ani 11.5s forwards infinite}.cssload-s2,.cssload-s3,.cssload-s4{left:39px;transform-origin:50% 0}.cssload-s2{top:19px;animation:s2ani 11.5s forwards infinite}.cssload-s3{top:39px;animation:s3ani 11.5s forwards infinite}.cssload-s4{top:58px;animation:s4ani 11.5s forwards infinite}.cssload-s5{left:19px;top:19px;transform-origin:100% 50%;animation:s5ani 11.5s forwards infinite}.cssload-s6{left:58px;top:39px;transform-origin:0 50%;animation:s6ani 11.5s forwards infinite}@keyframes cube{0%,30%{transform:rotateX(0)}40%{transform:rotateX(45deg) rotateY(0) rotate(45deg)}60%{transform:rotateX(60deg) rotateY(0) rotate(45deg)}65%,70%{transform:rotateX(60deg) rotate(45deg) rotate(180deg)}75%,80%{transform:rotateX(60deg) rotate(45deg) rotate(1turn)}90%{transform:rotateX(0) rotate(0) rotate(0)}}@keyframes s1ani{0%{opacity:1;transform:translateY(0);background:#ddd}40%{transform:rotateX(0);background:#ddd}50%{transform:rotateX(-90deg);background:#ddd}90%{transform:rotateX(-90deg)}}@keyframes s2ani{0%{opacity:0;transform:rotateX(-179deg)}10%{opacity:1;transform:rotateX(0)}40%{background:#ddd}45%,80%{background:#b4b4b4}65%{opacity:1;background:#b4b4b4}90%{opacity:1}to{opacity:0}}@keyframes s3ani{0%,10%{opacity:0;transform:rotateX(-179deg)}20%,90%{opacity:1;transform:rotateX(0)}40%{background:#ddd}45%{background:#969696}to{opacity:0}}@keyframes s4ani{0%,20%{opacity:0;transform:rotateX(-179deg)}10%,to{opacity:0}30%{opacity:1;transform:rotateX(0)}40%{transform:rotateX(0);background:#ddd}50%{transform:rotateX(90deg);background:#b4b4b4}80%{background:#b4b4b4}90%{opacity:1;transform:rotateX(90deg)}}@keyframes s5ani{0%,10%{opacity:0;transform:rotateY(-179deg)}20%{opacity:1;background:#ddd;transform:rotateY(0)}40%{transform:rotateY(0)}50%{transform:rotateY(90deg)}55%{background:#ddd}60%{background:#c8c8c8}90%{transform:rotateY(90deg);opacity:1}to{opacity:0}}@keyframes s6ani{0%,20%{opacity:0;transform:rotateY(179deg)}30%{opacity:1;transform:rotateY(0)}40%{transform:rotateY(0)}50%{transform:rotateY(-90deg);background:#ddd}60%,80%{background:#c8c8c8}90%{opacity:1;transform:rotateY(-90deg)}to{opacity:0}}@keyframes half-fold{0%,50%{transform:rotateX(0)}60%,90%{transform:rotateX(-90deg)}}

.cssload-container,.cssload-cube{width:97px;height:97px;transform-style:preserve-3d}.cssload-container,.cssload-cube,.cssload-half1,.cssload-half2{transform-style:preserve-3d}.cssload-container{position:relative;margin:23px 84px;perspective:292px}.cssload-cube{animation:cube 11.5s forwards infinite;transform-origin:center 49px}.cssload-half1,.cssload-s1{top:0;transform-origin:50% 100%}.cssload-half1{height:39px;position:absolute;animation:half-fold 11.5s forwards infinite}.cssload-side{width:19px;height:19px;background:#ddd;position:absolute}.cssload-s1{left:39px;animation:s1ani 11.5s forwards infinite}.cssload-s2,.cssload-s3,.cssload-s4{left:39px;transform-origin:50% 0}.cssload-s2{top:19px;animation:s2ani 11.5s forwards infinite}.cssload-s3{top:39px;animation:s3ani 11.5s forwards infinite}.cssload-s4{top:58px;animation:s4ani 11.5s forwards infinite}.cssload-s5{left:19px;top:19px;transform-origin:100% 50%;animation:s5ani 11.5s forwards infinite}.cssload-s6{left:58px;top:39px;transform-origin:0 50%;animation:s6ani 11.5s forwards infinite}@keyframes cube{0%,30%{transform:rotateX(0)}40%{transform:rotateX(45deg) rotateY(0) rotate(45deg)}60%{transform:rotateX(60deg) rotateY(0) rotate(45deg)}65%,70%{transform:rotateX(60deg) rotate(45deg) rotate(180deg)}75%,80%{transform:rotateX(60deg) rotate(45deg) rotate(1turn)}90%{transform:rotateX(0) rotate(0) rotate(0)}}@keyframes s1ani{0%{opacity:1;transform:translateY(0);background:#ddd}40%{transform:rotateX(0);background:#ddd}50%{transform:rotateX(-90deg);background:#ddd}90%{transform:rotateX(-90deg)}}@keyframes s2ani{0%{opacity:0;transform:rotateX(-179deg)}10%{opacity:1;transform:rotateX(0)}40%{background:#ddd}45%,80%{background:#b4b4b4}65%{opacity:1;background:#b4b4b4}90%{opacity:1}to{opacity:0}}@keyframes s3ani{0%,10%{opacity:0;transform:rotateX(-179deg)}20%,90%{opacity:1;transform:rotateX(0)}40%{background:#ddd}45%{background:#969696}to{opacity:0}}@keyframes s4ani{0%,20%{opacity:0;transform:rotateX(-179deg)}10%,to{opacity:0}30%{opacity:1;transform:rotateX(0)}40%{transform:rotateX(0);background:#ddd}50%{transform:rotateX(90deg);background:#b4b4b4}80%{background:#b4b4b4}90%{opacity:1;transform:rotateX(90deg)}}@keyframes s5ani{0%,10%{opacity:0;transform:rotateY(-179deg)}20%{opacity:1;background:#ddd;transform:rotateY(0)}40%{transform:rotateY(0)}50%{transform:rotateY(90deg)}55%{background:#ddd}60%{background:#c8c8c8}90%{transform:rotateY(90deg);opacity:1}to{opacity:0}}@keyframes s6ani{0%,20%{opacity:0;transform:rotateY(179deg)}30%{opacity:1;transform:rotateY(0)}40%{transform:rotateY(0)}50%{transform:rotateY(-90deg);background:#ddd}60%,80%{background:#c8c8c8}90%{opacity:1;transform:rotateY(-90deg)}to{opacity:0}}@keyframes half-fold{0%,50%{transform:rotateX(0)}60%,90%{transform:rotateX(-90deg)}}

/* TODO: Fix it */
body {
  font-size: 1rem;
  line-height: 1.5rem;
  font-family: 'Open Sans', sans-serif;
  background: #fff;
  padding: 0 2rem;
}

h1 {
  font-weight: 600;
  margin-bottom: 3rem;
  text-align: center;
  color: #212121;
}

#leadership {
  width: 100%;
  margin: 1rem auto;  
  border-collapse: collapse;
  box-shadow: 0 2px 7px rgba(0,0,0,0.2);
  background: #fafafa;
}

#leadership td {
  padding: 1rem .5rem !important;
  text-align: left;
  font-weight: 500;
  transition: all .3s ease-in-out;
}

#leadership tr:hover td{
  background: #03a9f4;
  color: #fefefe;
}

#leadership tr:hover td a {
  color: #fff;
}

#leadership th {
  padding: 1.5rem .5rem !important;
  color: #727272;
  text-align: left !important;
  font-weight: 500;
  border-bottom: 1px solid #dcdcdc;
}

#leadership a {
  text-decoration: none;
  color: #212121;
}

#leadership a:hover {
  color: #03a9f4;
}

#leadership td:nth-of-type(1){
  text-align: center;
  color: #727272;
  font-size: .75rem;
}

#leadership td:nth-of-type(2){
  
}

#leadership td:nth-of-type(2) img {
  width: 34px;
  border-radius: 50%;
}

/* #leadership th:nth-of-type(1),
#leadership th:nth-of-type(2){
  border-bottom: none;
} */

#leadership th:nth-of-type(5),
#leadership th:nth-of-type(6),
#leadership th:nth-of-type(7),
#leadership td:nth-of-type(5),
#leadership td:nth-of-type(6),
#leadership td:nth-of-type(7) {
  text-align: center !important;
}
<script src="https://mayorovp.github.io/codegolf/97314479fcd24a2386e1.js"></script>
<div class=cssload-container><div class=cssload-cube><div class=cssload-half1><div class="cssload-side cssload-s1"></div><div class="cssload-side cssload-s2"></div><div class="cssload-side cssload-s5"></div></div><div class=cssload-half2><div class="cssload-side cssload-s3"></div><div class="cssload-side cssload-s4"></div><div class="cssload-side cssload-s6"></div></div></div></div>

大家好运!

любой-язык
  • 15 15 个回答
  • 10 Views

15 个回答

  • Voted
  1. user181100
    2020-10-24T08:31:23Z2020-10-24T08:31:23Z

    红宝石,84 91

    ->a{(1..a.size).flat_map{|n|a.sort.combination(n).select{|c|c.reduce(:+)==10}.uniq}}
    

    第一个从网站上看仍然适合一行的解决方案!

    这是一个用输入数组调用的 lambda 文字。结果将是一组找到的组合。

    艾迪酮

    在Ruby中,获取数组元素组合的功能是直接在类中实现的Array,在标准库中。哎哟。

    否则,解决方案将尽可能直接并很好地翻译成自然语言:

    (1..a.size)              # Для диапазона от 1 до длины массива А
      .flat_map{ |n|         # ...сконкатенировать для каждого N в нём следующее:
        a.sort               #   Из отсортированного массива А...
         .combination(n)     #   ...взять все комбинации длиной N элементов
         .select{ |c|        #   ...выбрав только те С из них, в которых:
           c.reduce(:+)==10} #     Cвёртка С сложением равна 10.
         .uniq}              #   ...убрав повторения.
    

    Поскольку порядок в комбинациях неважен, чтобы не получить дубликатов, массив можно отсортировать. Можно отсортировать и комбинации постфактум, но это медленнее и требует больше символов.

    • 27
  2. Best Answer
    Pavel Mayorov
    2020-10-24T16:24:35Z2020-10-24T16:24:35Z

    Haskell, 42 70 символа

    g=nub.filter((10==).sum).subsequences.sort
    

    Требует импорта функций nub, sort и subsequences из Data.List

    Запуск: main = print $ g [5,5,2,3] http://ideone.com/5jUIsy

    Как работает:

    • входной список сортируется (иначе функция nub, см. далее, не поймет);
    • функция subsequences находит все сочетания (без ограничения длины), их 2m, где m - длина входного списка;
    • при помощи filter выбираются те сочетания, которые дают нужную сумму;
    • при помощи nub выбираются различные сочетания.

    PS спасибо участнику Artem Konovalov за то, что опосредованно подсказал мне не писать велосипед, а заглянуть в стандартную библиотеку языка :)

    • 25
  3. 4per
    2020-10-24T11:53:45Z2020-10-24T11:53:45Z

    SQL SQLite Oracle 11.2, 104 114 124 147 176

    обнаружен баг (см.комментарии)

    Реализация алгоритма выборки комбинации слагаемых для получения заданной суммы из заданного набора значений, с помощью рекурсивных SQL-запросов

    • Решение на конкурс
     WITH t(p,w,s)AS(SELECT'',0,0 UNION SELECT p||i||';',r,i+s FROM t,a WHERE r>w)SELECT p FROM t WHERE s=10;
    
    • Подготовка
    -- создаём таблицу с данными
    CREATE TABLE a (r INTEGER, i INTEGER); 
    
    -- заполняем
    INSERT INTO a VALUES (1,5);
    INSERT INTO a VALUES (2,5);
    INSERT INTO a VALUES (3,2);
    INSERT INTO a VALUES (4,3);
    
    • Читаемый вариант решения
      в конкурсном убраны алиасы. вместо t.r - w, a.r - r, a.i - i
    WITH t (p, r, s) AS
      (SELECT '', 0, 0 -- инициализация кортежа для рекурсии
       UNION
       SELECT 
         p || a.i || ';' , -- сбор строки для вывода
         a.r, -- запоминаем номер строки, чтоб не взять дважды    
         a.i+s -- накопительная сумма
       FROM t, a
       WHERE a.r > t.r -- ограничение - не использовать уже учтенные строки 
      ) 
    SELECT p -- вывод комбинаций
    FROM t 
    WHERE s = 10; --наше конкурсное условие - сумма=10
    
    • Выдача
    P
    5;5;
    5;2;3;   
    
    • Тест (Home - читабельный код, Tab 2 - конкурсный)
    • 24
  4. Mike
    2020-10-23T21:41:55Z2020-10-23T21:41:55Z

    珀尔,78     81 95 98 109 112 118 121 123 178

    use List::Util 'sum';  # В размере не учитывается - библиотека "из коробки"
    
    sub X{for$c(sort@_){@r=map{$_,[@$_,$c]}@r,[]}grep{!$f{"@$_"}++&&10==sum@$_}@r}
    

    在ideone.com上测试

    未压缩版本:

    sub X{
     for $c(sort@_) {             # Перебираем отсортированный входной массив
      @r=map {$_,[@$_,$c]} @r,    # Для каждого элемента в массиве вариантов добавляем
                                  # такой же но с добавленным текущим числом
                              []  # Затравка первого цикла - пустой массив
     }
     grep {                       # Выбираем те элементы массива
           !$f{"@$_"}++ &&        # Которые еще не встречались ранее
           10==sum@$_             # И сумма элементов которых равна 10
          } @r
    }
    

    带递归的旧版本(95 个字符):

    sub X {                              # Основная функция
      my$n=pop;                          # $n=первый параметр (текущий остаток)
     @_=sort@_;                          # Сортируем входной массив
     my %r;                              # Объявляем хеш результатов
     map {                               # перебираем массив
      my$a=$n-(my$c=pop);                # вытаскиваем очередной элемент массива (в $c)
                                         # и вычисляем текущий остаток минус данный элемент массива
        $r{"$c,$_"}++ for X(@_,$a)       # Кладем в хеш результатов каждый элемент массива,
                                         # который вернет функция перед которым текущий элемент с запятой
      $r{$c}++ if!$a                     # Если разность 0 - то кладем в результаты само число
     } @_;
     keys%r                              # возвращаем массив результатов
    }
    
    # Вызов    
    @A=(1,3,4,5,3,3,7,2,7,10);           # Тестовый массив
    $,="\n";
    print X(@A,10);
    
    • 20
  5. Гончаров Александр
    2020-10-24T07:42:41Z2020-10-24T07:42:41Z

    JavaScript, 163 148 141 129 124 118 109 92

    比赛的字节码 :) 与@Mike 共同创作。

    f=(n,s,c,r=[],i=0)=>{for(s?0:c[r.join()]=r;i<n.length;)f(n,s-n[i],c,[n[i],...r].sort(),++i)}
    

    代码说明:

    var input = prompt('Введите цифры через запятую, к примеру 5,5,2,0,3,4,10,2,56,2,0,8');
    input = input ? input.split(',').map(function(v){return parseInt(v);}) : [];
    
    f=(n/*входной массив чисел*/,
       s/*желаемая сумма*/,
       c/*выходные данные*/,
       r=[]/*слагаемые - промежуточная переменная*/,
       i=0/*текущий шаг - промежуточная переменная*/)=>{
      /*запуск рекурсии, которая обойдёт все комбинации чисел в массиве 
       , комбинация на каждом шаге в аргументе r
       , (желаемая_сумма - сумма_комбинации) : в аргументе s*/
      for(
        s?0:c[r.join()]=r;/*если сумма == 0 - записываем слагаемые в выходные данные*/
        i<n.length;/*рекурсия останавливается, когда доходим до последнего элемента*/
      )
      f(n,
        s-n[i]/*вычитаем из суммы текущий элемент массива*/
        ,c
        ,[n[i],...r].sort()/*добавляем в слагаемые текущий элемент массива, сортируем для уникальности*/
        ,++i/*повторяем операцию для следующего элемента массива*/)
    }
    
    var output = {};
    f(input, 10, output);
    alert('Комбинации, дающие 10: ' + Object.keys(output).join('; '));

    混淆测试:

    var input = prompt('Введите цифры через запятую, к примеру 5,5,2,0,3,4,10,2,56,2,0,8');
    input = input ? input.split(',').map(function(v){return parseInt(v);}) : [];
    
    f=(n,s,c,r=[],i=0)=>{for(s?0:c[r.join()]=r;i<n.length;)f(n,s-n[i],c,[n[i],...r].sort(),++i)}
    
    var output = {};
    f(input, 10, output);
    alert('Комбинации, дающие 10: ' + Object.keys(output).join('; '));

    PS 并发的变体为了简洁起见有多余的参数:
    第二个参数必须是所需的数量,在我们的例子中是 10。
    第三个参数是将写入结果的对象,希望允许在返回时保存)

    • 20
  6. Nofate
    2020-10-25T01:38:41Z2020-10-25T01:38:41Z

    R, 111

    s<-function(a)unique(Filter(function(x)sum(x)==10,unlist(Map(function(n)combn(a,n,sort,F),c(1:length(a))),F)))
    

    Код на IDE ONE

    Человекопонятный код:

    solve <- function(a) {
      # собираем вектор с допустимыми длинами комбинаций
      sizes <- c(1:length(a)) 
      # сопоставляем каждой длине комбинации, получаем список списков комбинаций, каждая комбинация пропускается через sort
      combinations <- Map(function(size) combn(a, size, FUN = sort, simplify = FALSE), sizes)
      # делаем список с комбинациями плоским
      combinations <- unlist(combinations, recursive = FALSE)
      # оставляем только комбинации дающие в сумме 10
      combinations <- Filter(function(x) sum(x) == 10, combinations)
      # выкидываем дубликаты
      combinations <- unique(combinations)
      #возвращаем результат
      combinations
    }
    

    Вызывется на интересующем векторе

    s(c(2,3,5,5))
    
    • 20
  7. rjhdby
    2020-10-27T18:54:49Z2020-10-27T18:54:49Z

    PHP, 114   120 127 130 131 132 143 151 140 142 145 149 163 171 172

    По количеству так-же, но выдает меньше предупреждений и работает быстрее.

    function($a,&$o){for(;2e3-$c++;$d&=$t=[])foreach($a as$k=>$e)1<<$k&$c?:($d+=$t[]=$e)-sort($t)-9?:$o[join($t)]=$t;}
    

    sandbox

    function($a, &$o){
        for(; 2e3 - $c++; $d &= $t = [])                 // Перебор битовых масок массива 0..1023(2000)
            foreach($a as $k => $e)
                1<<$k&$c                                 // Попадает ли элемент в маску?
                    ?: ($d += $t[] = $e) - sort($t) - 9  // sort() == 1,  ($d += $t[] = $e) == $d
                        ?: $o[ join($t) ] = $t;          // join совместно с sort обеспечивают уникальность
    }
    
    • 19
  8. ReinRaus
    2020-10-24T04:58:45Z2020-10-24T04:58:45Z

    Python3, 130          131 136 144 147 168 182 216 226

    缩小版:

    def r(a,c=[],z=[]):
     a.sort()
     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
     return z
    

    使用示例:

    res = r( [1,4,5,5,2,3,1,4] )
    print( res )
    

    高尔夫专用的缩小版。


    未缩小版本:

    def recur( arr, curArr, maxSumm ):
        arr.sort()
        curSumm = sum( curArr ) # текущая набранная сумма, не забываем, что sum([]) == 0
        result = []
        for i in range( len( arr ) ):
            if arr[i] + curSumm == maxSumm: # если в сумме набрали нужное число, то добавляем к результату
                result+=[ curArr + [ arr[i] ] ]
            elif arr[i] + curSumm < maxSumm: # если сумма меньше, то добавляем результат рекурсивного вызова
                result+= recur( arr[i+1:], curArr + [ arr[i] ], maxSumm )
        return result
    
    def unique( arr ): # уникальные значения массива
        unique = []
        [ unique.append(i) for i in arr if i not in unique ]
        return unique
    

    现场示例:http:
    //ideone.com/ggl9lO

    • 16
  9. Qwertiy
    2020-10-24T07:17:20Z2020-10-24T07:17:20Z

    Javascript ES6, 165 161 150 147 145 134 133 125 123 (错误) 124 118

    a=>[...Array(2e3)].map((x,q)=>a.filter((x,i)=>q&1<<i).sort()).sort().filter((x,i,a)=>x+""!=a[i-1]&eval(x.join`+`)==10)
    

    笔记:

    1. 数组长度限制为 10 个数字,因此您可以使用掩码搜索。
    2. lambda 函数不是递归的,因此将其保存到变量中不计入字符数。在 codegolf 上阅读更多内容。
    3. 当前版本的函数不创建全局变量

    考试:

    f=a=>[...Array(2e3)].map((x,q)=>a.filter((x,i)=>q&1<<i).sort()).sort().filter((x,i,a)=>x+""!=a[i-1]&eval(x.join`+`)==10)
    
    console.log(f([5,5,2,3]).join("   "))
    console.log(f([5,2,3]).join("   "))
    console.log(f([0,10,10,5,0]).join("   "))
    console.log(f([0,10,10,5,0,5]).join("   "))
    console.log(f([9]).join("   "))

    • 16
  10. Artem Konovalov
    2020-11-06T02:18:28Z2020-11-06T02:18:28Z

    Scala, 69 73, 80

    Нечитабельный вариант:

    def f(a:Seq[Int])=a.indices.flatMap(a.combinations).filter(_.sum==10)
    

    пример использования

    val a = List(1,2,3,4,5,6,7,8,9,10)
    println(f(a))
    

    Читабельный вариант:

    def getSeq(list: List[Int]) =
     list
      //берем индексы т.е. получаем последовательность от 0 до size
      .indices
      //берем всевозможные комбинации длиной index из элементов списка
      .flatMap(index => list.combinations(index))
      //фильтруем списки по сумме элементов == 10
      .filter(s => s.sum == 10)
    

    Демка

    • 12

相关问题

  • 学习一门新语言的最佳方法是什么?[关闭]

  • 为什么在这么多示例中函数都称为 foo?

  • 为什么在许多语言中索引从 0 开始?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5