Size: a a a

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

2021 March 13

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
ты что, прям с println мерял?
его же скорость от фазы луны зависит
ну он в string writer пишет
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
ну он в string writer пишет
неважно, просто замеряется не сам алгоритм, а что-то другое
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
А как по мне, конечная часть задачи это вывести на экран всё-таки
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
вывод на экран ты не оптимизируешь
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Ну тогда тестить с (constantly nil) как с функцией вывода
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
Ну тогда тестить с (constantly nil) как с функцией вывода
прогнал с identity, в комментах
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
и ты не взял мой оптимизированный вариант с concat
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
А как по мне, конечная часть задачи это вывести на экран всё-таки
не 10000 тысяч же
либо тестировать на малых числаx, либо мы сам алгоритм смотрим
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
и ты не взял мой оптимизированный вариант с concat
Ща
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
в общем они по сути одинаковы
  (transduce
   (take 10001)
   (constantly nil)
   (iterate (fn [s] (do (identity s) (.concat ^String s " *"))) "*"))
 
 (->> (iterate #(.concat ^String % " *") "*")
      (transduce (comp (take 10000) (map identity))
                 (constantly nil)))
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
в общем они по сути одинаковы
  (transduce
   (take 10001)
   (constantly nil)
   (iterate (fn [s] (do (identity s) (.concat ^String s " *"))) "*"))
 
 (->> (iterate #(.concat ^String % " *") "*")
      (transduce (comp (take 10000) (map identity))
                 (constantly nil)))
Ага. Время в наносекундах. Замеряю через System/nanoTime
https://gist.github.com/4e9d3d9c3ca5853ed323f7f796d9b9a4

Код
https://gist.github.com/4187ec8d8ec8f2089a65f764c8a3c097
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
Ага. Время в наносекундах. Замеряю через System/nanoTime
https://gist.github.com/4e9d3d9c3ca5853ed323f7f796d9b9a4

Код
https://gist.github.com/4187ec8d8ec8f2089a65f764c8a3c097
Ну у меня вот тут получилось перегнать
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
в общем они по сути одинаковы
  (transduce
   (take 10001)
   (constantly nil)
   (iterate (fn [s] (do (identity s) (.concat ^String s " *"))) "*"))
 
 (->> (iterate #(.concat ^String % " *") "*")
      (transduce (comp (take 10000) (map identity))
                 (constantly nil)))
только у меня сайд-эффект отделён
источник

T

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

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
А не, падажжи
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
только у меня сайд-эффект отделён
Ну да, у меня за счет этого и быстрее, может быть
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
 (do (->> (iterate #(.concat ^String % " *") "*")
          (transduce (comp (take 10000) (map identity))
                     (constantly nil)))
     nil)
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
)
Evaluation count : 42 in 6 samples of 7 calls.
            Execution time mean : 21,694222 ms
   Execution time std-deviation : 5,401123 ms
  Execution time lower quantile : 15,950505 ms ( 2,5%)
  Execution time upper quantile : 27,703639 ms (97,5%)
                  Overhead used : 9,195613 ns

;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
 (transduce
   (take 10001)
   (constantly nil)
   (iterate (fn [s] (do (identity s) (.concat ^String s " *"))) "*"))
;•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
)
Evaluation count : 42 in 6 samples of 7 calls.
            Execution time mean : 21,973524 ms
   Execution time std-deviation : 5,257730 ms
  Execution time lower quantile : 16,050862 ms ( 2,5%)
  Execution time upper quantile : 27,779134 ms (97,5%)
                  Overhead used : 9,195613 ns

(transduce (take 10001) (constantly nil) (iterate (fn [s] (do (identity s) (.concat s " *"))) "*"))
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
Ну да, у меня за счет этого и быстрее, может быть
Хотя не, нет там особой разницы за счет этого
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
Ну да, у меня за счет этого и быстрее, может быть
одинаковые они, если замерять нормально
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Sergey Trofimov
одинаковые они, если замерять нормально
А если и в  мою тайпхинт добавить?
источник