Size: a a a

Clojure — русскоговорящее сообщество

2020 July 10

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
👆
источник

Д

Диёр in Clojure — русскоговорящее сообщество
Igor Levdansky
Нужно находить номера банковских карт вида <4 цифры><separator><4 цифры><separator><4 цифры><separator><4 цифры> (причем сепаратор должен быть один и тот же, используется backreference для него) или <8 цифр><separator><8 цифр> или <16 цифр>
при чём тут коты тогда интересно)
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Igor Levdansky
Это у тебя просто в группу взятое выражение вторым в списке выводится
Это пример xy problem) как задача поставлена, такие и решения
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Igor Levdansky
Не, надо чтобы все возможные варианты нашло и по ним еще алгоритмом Луна проверить
Типа 1111 2222 33334444?
источник

IL

Igor Levdansky in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
Типа 1111 2222 33334444?
Ну вычленить все варианты с оверлаппингом
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Тебе зачем оверлаппинг? Чтобы номер карты через такой же разделитель не стоял рядом с другими 4мя цифрами?
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
источник

IL

Igor Levdansky in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
Тебе зачем оверлаппинг? Чтобы номер карты через такой же разделитель не стоял рядом с другими 4мя цифрами?
Если другие 4 цифры стоят до или после, то тоже чтоб находил
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Я бы делал без регекспа. Это простой редьюс
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
источник

IL

Igor Levdansky in Clojure — русскоговорящее сообщество
(time 
 (dotimes [i 100000]
  (let [input "cat cat cat ! bar cat cat ! cat ! ! cat cat cat cat cat cat ! cat"
        search "cat cat"
        iter (take-while
               (comp (partial <= (count search)) count)
               (iterate rest input))]
    (->> iter
         (map (partial take (count search)))
         (filter (partial = (seq search)))
         (map str/join)
         doall))))
"Elapsed time: 4988.35768 msecs"
=> nil
(time
 (dotimes [i 100000]
  (doall
    (map #(->> % rest (string/join " "))
         (re-seq #"(cat) (?=(cat))" "cat cat cat ! bar cat cat ! cat ! ! cat cat cat cat cat cat ! cat")))
  ))
"Elapsed time: 591.221235 msecs"
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Для примера
user=> (time (dotimes [i 100000] (reduce (fn [acc i] (when-let [pos (clojure.string/index-of "cat cat cat" "cat cat" i)] (conj acc pos))) #{} (range (- (count "cat cat cat") (count "cat cat"))))))
"Elapsed time: 149.210892 msecs"


через несколько раз будет

user=> (time (dotimes [i 100000] (reduce (fn [acc i] (when-let [pos (clojure.string/index-of "cat cat cat" "cat cat" i)] (conj acc pos))) #{} (range (- (count "cat cat cat") (count "cat cat"))))))
"Elapsed time: 62.439154 msecs"
источник

IL

Igor Levdansky in Clojure — русскоговорящее сообщество
Ну там надо reduce в doall взять, но в целом да, надо использовать либу
источник

DF

Dima Fomin in Clojure — русскоговорящее сообщество
Забавно,
reduce-kv

работает норм в cljs над subvec вот так
(reduce-kv conj [] (subvec [:a :b :c :d] 1 3) )


Но в clojure выдает ошибку
No implementation of method

🤔
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
No implementation of method: :kv-reduce of protocol: #'clojure.core.protocols/IKVReduce found for class: clojure.lang.APersistentVector$SubVector
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
У cljs просто было время сделать иначе
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
У cljs просто было время сделать иначе
"было время"?
источник