Dmitry
ну уменьши мож буфер
Dmitry
ну и проверь сам md5sum там же есть
Aragaer
оно всасывает достаточно медленно - по одному слову в два разных вектора, которые еще и растут - дохрена реаллокаций и перекопирования будет
Dmitry
@aragaer у меня на сях так
Dmitry
два буфера чанков с реаллокациями по фибоначчи
Dmitry
реаллокаций всего ничего
Dmitry
и ни на что не влияет
Dmitry
удивительно токсичная задача, надо сказать
a66ath
9e72dae8a4c87ad3e2c5f798b71ce33a
a66ath
Оно?
a66ath
Нет, нихуя
A64m
это вроде то что у меня обычно получается, лишний перевод строки в конце вроде
a66ath
bb4e60942cf4d01581d01dffafb88a8f
Dmitry
неа
a66ath
Опять не то
Dmitry
там есть же
Dmitry
$ ./v-stream < ./49zGQ6Zt.txt | md5sum eb8d32c8d260d240b351dfadd42cb5e5 -
Vadim
ребят, по поводу олимпиады: я позапускал на своем компе с тем файликом (49zGQ6Zt.txt) и у меня результаты такие: fast C: real 1m58.509s user 0m3.816s sys 0m27.664s Haskell fast-builder: real 2m0.527s user 0m4.724s sys 0m29.208s OCaml batteries: real 1m58.804s user 0m3.952s sys 0m27.984s что я делаю не так? где взять все эти 0.3-2 и 5 секунд?
a66ath
Калькулятор у тебя какой?
Dmitry
скока?!
Vadim
как правильно запускать то?
Dmitry
который fast с кстати?
Dmitry
надо брать последнюю версию от @qnikst либо fixchunks
Dmitry
в псто есть
a66ath
c -O3 надеюсь собираешь?
Dmitry
ну и референс давай pypy
Vadim
https://gist.github.com/voidlizard/dddf9ef4fbfa860da1ea2ebc030b6935
Dmitry
лучше в самом конце из списка
Dmitry
это https://paste.pound-python.org/show/fg5hdWv46KurkkDUdnxg/
Vadim
ну ок, а хаскель сколько должен работать? я не вижу разницы между ними чето
Dmitry
или это https://gist.github.com/voidlizard/4dd7941d98b557a39e251109340335bf
A64m
какой хаскель?
Dmitry
vstream работает 1.6 у меня
Dmitry
"последний идеоматичный" - типа 2.схреном
Vadim
ой, я кажется понял почему я глупый) эти минуты - это скорость моего терминала - я аутпут не перенаправлял
Vadim
сори
A64m
последний идеоматичный это который?
Dmitry
module Main where import Data.Monoid import Data.List import qualified Data.ByteString.Char8 as BS import Data.List.Split import qualified Data.Vector as V import Control.Monad import qualified Data.ByteString.FastBuilder as B import System.IO main = do ls <- V.fromList . BS.words <$> BS.hGetContents stdin let p = V.ifilter (\i _ -> even i) ls let s = V.ifilter (\i _ -> odd i) ls let wtf = V.map (\pref -> foldMap (mkb pref) s) p mapM_ (B.hPutBuilder stdout) wtf where mkb s1 s2 = B.byteString s1 <> B.byteString s2 <> B.char7 '\n'
Dmitry
ну такое я в смысле сам бы мог написать без сознания
Dmitry
не читая диссеров
Dmitry
перед этим
A64m
НУ НЕ ЗНАЮ, я бы сказал что v-stream поидиоматичнее
Dmitry
ну фиг знает - тут же просто чтение в вектор а потом его вывод
Dmitry
всё просто и тупо
A64m
вообще первоначальные версии с interact можно назвать идиоматичными, но они какие-то олдскульные чтоли, сейчас так не пишут
a66ath
Что это?
Vadim
time ./olymp < ~/Downloads/49zGQ6Zt.txt > /dev/null fast C: real 0m0.792s user 0m0.788s sys 0m0.000s Haskell fast-builder: real 0m3.877s user 0m4.704s sys 0m0.724s OCaml batteries: real 0m3.703s user 0m3.688s sys 0m0.012s у вас похоже?
Vadim
или не time нужно мерить?
Aragaer
похоже
A64m
у меня фастбилдер версия работала быстрее окамлобатареечной
Dmitry
olymp это что?
A64m
но результаты похожи теперь на нормальные
Alexander
я менял sys-process/time
Alexander
вызывается как \time чтобы башевый builtin его не перебивал
Vadim
olymp это что?
бинарник с любой из реализаций - команда запуска одинаковая же
a66ath
У меня какое-то говно в выводе 😐
Dmitry
у меня такое было в сях!
Dmitry
не помню что было. после переписывания буферизации пропало
Vadim
у меня фастбилдер версия работала быстрее окамлобатареечной
да, после 2 запуска видимо что-то закешировалось и стало для Haskell так: real 0m2.268s user 0m3.040s sys 0m0.380s
Dmitry
отладить нереально.
A64m
@eahqzsr сразу верю
A64m
как вообще про хаскель люди узнавали 15 лет назад? я про него до 2005-го что-ли ничего не слышал
Dmitry
если соберете окамл для amd64/16.04 я запущу у себя
a66ath
У меня какие-то контрлсобачки затесались
a66ath
Не ясно откуда
Aragaer
контрлсобачки - а покажи их в хексах
eahqzsr
Лямбда-счисление, Харрисон-Филд, все дела.
A64m
повезло
eahqzsr
Наверное да. Хотя на практике больше использовал эрланг наверное из чистого FP. Сейчас пишу в основном на JS, ибо коньюктура такая - там использую Ramda.
eahqzsr
Кстати мне там нравится http://ramdajs.com/docs/#applySpec Что-то похожее в haskell есть?
Alexander
vector-fixed-hetero?
Vadim
OCaml безо всего: let read_line () = try Some (read_line ()) with End_of_file -> None let read_lines () = let rec loop acc = match read_line () with | None -> List.rev acc | Some line -> loop (line::acc) in loop [] let get_pair line = match String.split_on_char ' ' line with | [prefix; suffix] -> (prefix, suffix) | _ -> failwith "Invalid input" let unzip = List.fold_left (fun (ltl, rtl) (left, right) -> (left::ltl, right::rtl)) ([], []) let () = let lines = read_lines () in let lines = List.map get_pair lines in let prefixes, suffixes = unzip lines in let buf_size = 160000 in let buf = Buffer.create buf_size in let show prefix suffix = if Buffer.length buf > buf_size - 10 then (Buffer.output_buffer stdout buf; Buffer.clear buf); Buffer.add_string buf prefix; Buffer.add_string buf suffix; Buffer.add_string buf "\n" in List.iter (fun p -> List.iter (show p) suffixes) prefixes; Buffer.output_buffer stdout buf; flush stdout результат: real 0m2.318s user 0m2.312s sys 0m0.004s Почти как Haskell на моей машине: real 0m1.844s user 0m2.188s sys 0m0.340s
A64m
жаль стролько писанины на парсинг, который вообще на скорость не влияет
A64m
думаю, если в батареечной версии сделать буфер то примерно то же и выйдет, так и оставшись пятистрочником