Интересные задачи для программистов

Sly32
На сайте с 29.03.2012
Offline
303
#21
Gerga:
Идет чтение потока до определенного символа либо length параметра

Мне кажется, у тебя в output останется лишняя запятая в конце

Gerga
На сайте с 02.08.2015
Offline
94
#22
Sly32:
Мне кажется, у тебя в output останется лишняя запятая в конце

Нет, запятая записывается перед добавлением новой записи и после тогда, как была сделана 1 запись, чтобы как раз не получилось "[,{" или "},]".

VoV@
На сайте с 22.09.2007
Offline
196
#23
danforth:
За сколько у вас отработал ваш код на данном файле?

У меня из раза в раз показывает разное время, то <=110ms, то <= 240ms.

---------- Добавлено 15.06.2020 в 13:41 ----------

danforth:
можно читать и по чуть-чуть распаковывать, попутно высвобождая память.

Мой код так и работает.

⭐ Разработка Андроид-приложений (Xamarin C#). ⭐ Разработка ASP.NET (WebForms, MVC, WebAPI, Core). ⭐ Цой жив!
T7
На сайте с 19.09.2018
Offline
63
#24
DenisVS:
Надо какую-то обёртку, время всех запущеных разом скриптов (на разных языках) сравнивать.

С точки зрения научного эксперимента, методику сравнения может и имеет смысл продумать. А в данной теме смысла большого не вижу. danforth, выиграл с 5-10 кратным перевесом, но у него GO и судя по

func NewDecoder
func NewDecoder(r io.Reader) *Decoder
NewDecoder returns a new decoder that reads from r.
The decoder introduces its own buffering and may read data from r beyond the JSON values requested.

потоковый парсер на борту.

А у нас, вот пример (читаем 10 раз fopen и file_get_contents)

fread($handle, 1);

----filesize:   411009
----fread len: 1
Timing fopen: 60.1470 ms
Timing file_get_contents: 0.6912 ms
Timing fopen: 62.8970 ms
Timing file_get_contents: 0.3510 ms
Timing fopen: 56.3872 ms
Timing file_get_contents: 0.3788 ms
Timing fopen: 64.8222 ms
Timing file_get_contents: 0.3781 ms
Timing fopen: 59.4339 ms
Timing file_get_contents: 0.3750 ms
Timing fopen: 61.2819 ms
Timing file_get_contents: 0.3550 ms
Timing fopen: 55.8791 ms
Timing file_get_contents: 0.3731 ms
Timing fopen: 61.0499 ms
Timing file_get_contents: 0.3550 ms
Timing fopen: 53.5061 ms
Timing file_get_contents: 0.4139 ms
Timing fopen: 60.6580 ms
Timing file_get_contents: 0.3819 ms

fread($handle, 4096);

----filesize:   411009
----fread len: 4096
Timing fopen: 0.7210 ms
Timing file_get_contents: 0.5479 ms
Timing fopen: 0.3130 ms
Timing file_get_contents: 0.2179 ms
Timing fopen: 0.2880 ms
Timing file_get_contents: 0.2019 ms
Timing fopen: 0.2718 ms
Timing file_get_contents: 0.2241 ms
Timing fopen: 0.3440 ms
Timing file_get_contents: 0.2580 ms
Timing fopen: 0.3731 ms
Timing file_get_contents: 0.2759 ms
Timing fopen: 0.3359 ms
Timing file_get_contents: 0.2561 ms
Timing fopen: 0.3331 ms
Timing file_get_contents: 0.2730 ms
Timing fopen: 0.3619 ms
Timing file_get_contents: 0.2720 ms
Timing fopen: 0.3259 ms
Timing file_get_contents: 0.2201 ms

Но, если по 4096 или не суть там сколько, последний объект будет разорван и надо как то сохранять состояние. Хотя, тоже несложно просто посидеть надо.

------резюме

И да, на PHP все равно проиграем GO. Даже отыграв 60 от 140 ~ 80 сильно больше 22-x

danforth
На сайте с 18.12.2015
Offline
153
#25

timo-71, скорость работы реализаций на разных языках интересно сравнивать, потому что иногда бывает, что медленный язык в какой-то задаче оказывается быстрее (например регулярки в PHP быстрее чем в Go).

На пыхе кстати можно декодер через yield завернуть, возможно будет быстрее. И можно было бы использовать mmap, если бы он там был.

Junior Web Developer
HM
На сайте с 14.01.2012
Offline
223
#26
danforth:
например регулярки в PHP быстрее чем в Go

Если что, я не докапываюсь, но это как? Точнее, какие библиотеки сравнивались? Не верю :)

В php видимо PCRE (или PCRE2?), а в go?

danforth
На сайте с 18.12.2015
Offline
153
#27

hakuna matata, std библиотека в Go vs std в PHP. Понятное дело, есть та же re2, которая тредится лучше, и на Go она будет быстрее. А если если не скомпилить регулярку в Go, то в цикле можно вообще адово просадить производительность.

В принципе можете сами проверить:

Go без компиляции:


package main

import (
"log"
"regexp"
"time"
)

func main() {
const str = `Если что, я не докапываюсь, но это как? Точнее, какие библиотеки сравнивались? Не верю`
const match = `это (как)\?`

start := time.Now()

for i := 0; i < 1000; i++ {
_, _ = regexp.MatchString(match, str)
}

log.Printf("took: %s", time.Since(start))
}

Go с компиляцией


package main

import (
"log"
"regexp"
"time"
)

func main() {
const str = `Если что, я не докапываюсь, но это как? Точнее, какие библиотеки сравнивались? Не верю`
const match = `это (как)\?`

start := time.Now()

r := regexp.MustCompile(match)

for i := 0; i < 1000; i++ {
_ = r.MatchString(str)
}

log.Printf("took: %v", time.Since(start).Seconds())
}

PHP:


<?php

$str = "Если что, я не докапываюсь, но это как? Точнее, какие библиотеки сравнивались? Не верю";
$pattern = "/это (как)\?/m";

$start = microtime(true);

for ($i = 0; $i < 1000; $i++) {
preg_match($pattern, $str);
}

echo (microtime(true) - $start) . " secs";


Go без компиляции: 0.005807088 секунд
Go с компиляцией: 0.000459663 секунд
PHP: 0.000177860 секунд
HM
На сайте с 14.01.2012
Offline
223
#28

danforth, не совсем согласен с бенчмарками, но спасибо за объяснение. Вообще я не поклонник таких тредов тут, это показательное решение синтетических задач которое в реальности работает иначе.

Ну и зачем вы в сотый раз меряетесь потоковым парсером json, тоже не понимаю.

danforth
На сайте с 18.12.2015
Offline
153
#29
hakuna matata:
не совсем согласен с бенчмарками

Почему не согласны?

hakuna matata:
Ну и зачем вы в сотый раз меряетесь потоковым парсером json, тоже не понимаю.

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

tommy-gung
На сайте с 22.11.2006
Offline
287
#30

как по мне весь интерес решения задач - это алгоритм, то, чему учат в институте, используя языки типа паскаля, в котором нет большого кол-ва встроенных функций.

помнится как же нелегко было написать простую задачу, зная основы того ж php, и зная, что на php (как любит писать один специалист) это занимает пару строк или вызов пары функций, но тебе эти функции для начала нужно написать самому

Здесь не могла быть ваша реклама

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий