Ответы пользователя по тегу JavaScript
  • Как быстро выбрать все сочетания из массива (комбинаторика)?

    > [(i, j) for i in range(1, 4) for j in range(i + 1, 4)]
    [(1, 2), (1, 3), (2, 3)]


    Более общий код, но на хаскеле.
    Идея такая:
    Для каждого элемента списка получаем n-1 сочетания из всех, что идут после него, и добавляем сам элемент.
    comb ∷ Int → [a] → [[a]]
    comb 0 _ = [[]] -- из нуля элементов можно составить только пустой список
    comb n [] = [] -- из пустого списка нельзя составить ничего
    comb n lst = do -- списочная монада, работает как вложенные for
    	-- tails для [1,2,3] вернёт [[1,2,3], [2,3], [3], []], т.е. все возможные хвосты
    	-- мы перебираем все хвосты, кроме последнего пустого
    	-- и дербаним его на голову l и остаток ls
    	(l:ls) ← filter (not ∘ null) $ tails lst
    	-- перебираем сочетания из n - 1 элементов от ls
    	ls' ← comb (n - 1) ls
    	-- и присобачиваем l к каждому
    	return (l:ls')
    Ответ написан
    4 комментария
  • Как составить регулярку по следующим параметрам?

    ^data:(?<Mime>.*?);base64.*$

    https://regex101.com/r/jA0lR8/1
    Ответ написан
    Комментировать
  • Как написать регулярку?

    Сходу не придумал, как сразу регексом общую длину, и получится ли, но её можно проверить и после.

    ([a-z0-9]*[!@#\$%\*\(\)_\-:;\.]){3,}[a-z0-9]*
    regex101.com/r/wU7hV0/1
    Ответ написан
    Комментировать
  • В чем отличие промисов от монад?

    Promise - одна из монад, где bind (>>=), упрощённо, из обещания и из последующей функции делает новое обещание, которое дожидается выполнения первого обещания и передаёт результат в следующую функцию. В итоге управление в вызывающую функцию возвращается на первом же ожидании.

    Но монады есть и другие. Например Either, позволяющий выдать "ошибку", т.о. обрывая всю цепь вычислений на первой же ошибке. Или Maybe, ведущий себя аналогично Either, но не с возвратом какого-то ошибочного значения, а просто с остановкой на первом фейле. Список - тоже монада, там последующая функция будет вычислена на каждом элементе, а результате сконкатенированы.
    Ответ написан
    Комментировать