- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
onst addAdjacencies = (
nodes,
) => (
nodes
.map(({
colorId,
id,
x,
y,
}) => ({
color: colors[colorId],
eastId: (
getNodeAtLocation({
nodes,
x: x + 1,
y,
})
),
id,
northId: (
getNodeAtLocation({
nodes,
x,
y: y - 1,
})
),
southId: (
getNodeAtLocation({
nodes,
x,
y: y + 1,
})
),
westId: (
getNodeAtLocation({
nodes,
x: x - 1,
y,
})
),
}))
.map(({
color,
id,
eastId,
northId,
southId,
westId,
}) => ({
adjacentIds: (
[
eastId,
northId,
southId,
westId,
]
.filter((
adjacentId,
) => (
adjacentId !== undefined
))
),
color,
id,
}))
)
https://medium.com/free-code-camp/bet-you-cant-solve-this-google-interview-question-4a6e5a4dc8ee
джаваскриптер натужно пытается решить простейшую задачу "гугл уровня" с обходом, для увеличения кринжа прилагается поехавший кодстайл и решение на RxJS
guest8 08.02.2020 01:11 # −999
guest8 08.02.2020 01:12 # −999
bormand 08.02.2020 09:27 # +3
HoBorogHuu_nemyx 08.02.2020 10:53 # 0
Desktop 08.02.2020 19:13 # 0
bormand 08.02.2020 19:57 # 0
phpBidlokoder2 08.02.2020 01:57 # 0
phpBidlokoder2 08.02.2020 01:58 # 0
bormand 08.02.2020 11:49 # 0
В кресты тоже завезли RxCpp, так что можно почти дословно переписать...
HoBorogHuu_nemyx 08.02.2020 12:07 # +1
Fike 09.02.2020 22:12 # 0
3.14159265 08.02.2020 02:02 # +4
Но автор похоже в курсе что сишный for лучше и быстрее:
И тут мы приходим к тому, о чём я уже говорил......
HoBorogHuu_nemyx 08.02.2020 02:08 # −1
3.14159265 08.02.2020 02:14 # −1
Он на полном серьёзе начал замерять пирформанс своей скриптухи.
А в конце подытожил, мол вот ещё пару статей как сделать функцианаьную скриптуху быстрее не такой тормознутой:
>If you wanna read more on JavaScript performance, check out my other articles:
> Speed Up JavaScript Array Processing
> Using Transducers to Speed Up JavaScript Arrays
>>JavaScript
>>performance
guest8 08.02.2020 02:17 # −999
3.14159265 08.02.2020 02:22 # +1
Transducers aren’t all peaches and cream. When you have a very small number of items, transducers are a lot slower than either solution. It’s beyond the scope of this article to find the trade-off point for most machines, but let’s redo those performance tests with an array of 3 items.
Скриптух, боролся, боролся, выдумывал питух-структуры, трансдусеры.
Но Царя не читал и не знает, что лучшая структура данных — массив. А лучший цикл — for.
Fike 08.02.2020 02:25 # +2
¿¿¿нахуя мне оптимизировать алгоритм для small number of items???
1024-- 08.02.2020 19:46 # 0
Fike 09.02.2020 22:12 # 0
3.14159265 08.02.2020 02:25 # 0
Не поможет. Он же в статье прямо пишет, что его питушарский способ даже в concurrent версиях сливает тупой однопоточной итерации.
Моча в рожи сектантов.
guest8 08.02.2020 02:33 # −999
Fike 08.02.2020 02:26 # +1
phpBidlokoder2 08.02.2020 09:19 # 0
guest8 08.02.2020 13:01 # −999
guest8 08.02.2020 02:09 # −999
3.14159265 08.02.2020 02:18 # 0
В самом конце статьи анскилябра дала ссылку, на эпопею как она борлоась с царским for.
https://itnext.io/speed-up-javascript-array-processing-8d601c57bb0d
Let’s do a simple performance test with 10 million items using Array.prototype.map:
And then let’s compare that to the native for loop:
I ran each test 7 times and pulled the averages. On my overclocked Intel Core i7–4770K, our array method averaged 1281ms while our for loop averaged 323ms. Incredible right? What a performance improvement! But for loops are so 10 years ago. They’re difficult to write and harder to reason about when doing complex transformations.
guest8 08.02.2020 02:21 # −999
3.14159265 08.02.2020 02:37 # +1
Да. Я ещё 6 лет назад заметил:
https://govnokod.ru/16298#comment239238
В начале 00-х когда оно было в зените популярности мне в принципе было очевидно что панацеей оно не является.
Сейчас же лихорадка прошла, появляются языки без ооп и стало модно пинать ооп.
Однако лихорадка сменилась другим сумасшествием - чисто функциональные языки. И это пройдет, останутся только идеи, самые удачные из которых запилят в промышленные императивные язычки (как, например, тоже ооп когда еще было модно, добавили в пыху). Собственно мы видим это уже сейчас.
guest8 08.02.2020 03:43 # −999
1024-- 08.02.2020 19:50 # 0
phpBidlokoder2 08.02.2020 09:23 # 0
gost 08.02.2020 13:59 # 0
Ебать дебил.
Fike 08.02.2020 02:24 # 0
кто бы мог подумать. Интересно, почему вызовы функций такие медленные?
guest8 08.02.2020 02:25 # −999
3.14159265 08.02.2020 02:35 # 0
https://govnokod.ru/17460#comment262105
https://govnokod.ru/17470#comment261947
https://govnokod.ru/16008#comment232669
https://govnokod.ru/13688#comment193518
guest8 08.02.2020 02:36 # −999
1024-- 08.02.2020 19:51 # 0
Fike 08.02.2020 03:17 # 0
Fike 08.02.2020 03:19 # 0
cyka blyat
gost 08.02.2020 14:06 # +3
https://ideone.com/e7dSAC
gost 08.02.2020 14:20 # +3
Какой пиздец )))
gost 08.02.2020 14:25 # 0
HoBorogHuu_nemyx 08.02.2020 14:44 # 0
3.14159265 08.02.2020 16:34 # +2
Хахаха. Минут 40 втыкал в код, искал где же «говно».
Ну можно столько MATRIX_AT и не делать.
И сразу early-exit вписать. Нет смысла продолжать, если уже посещали.
gost 08.02.2020 16:43 # +1
Да, точно.
> И сразу early-exit вписать. Нет смысла продолжать, если уже посещали.
У меня в visitNode() идут только непосещённые ноды, там в главном цикле проверка.
На «C» основное говно в неоптимизированности и самописном векторе, ИМХО. Для теста заменил в коде вектора «calloc» на «malloc», увеличил начальную ёмкость до 100, в visitNode сделал vec статическим (с заменой vector_delete на vector_clear) — получил x3 прирост, с 6 секунд до 2 для матрицы 10000*10000. Думаю, если в профилировщике посидеть — можно ещё пару-тройку раз прироста выжать.
3.14159265 08.02.2020 17:03 # +2
Ну да.
Я имел ввиду перенести её в цикл, а лишний MATRIX_AT выкинуть.
Или просто передавать curr аргументом.
Ну и тут
Edit: Я пытался замерять пирфоманс, но код настолько быстрый, даже на 5000x5000, что пирфоманс колеблется в пределах погрешности таймера.
bormand 08.02.2020 16:54 # +1
Вот же оно: LCGRand() % COLOR_NUM
gostinho 08.02.2020 14:23 # +1
> vec_delete
> EXIT_FAILURE
Ну ты понел )
gost 08.02.2020 14:24 # 0
3.14159265 08.02.2020 15:26 # +2
>putchar(MATRIX_AT(matrix, i, j).color + '0');
>putchar('\n');
Только настоящий олд-сишник держит в уме что printf тормозной.
И на тысячах итераций putchar чуток быстрее.
* притом что шланг вроде оптимизирует односимвольные printfы в putchar
3.14159265 08.02.2020 15:32 # +1
И gcc тоже
А вот MSVC — глупая лалка.
guest8 08.02.2020 14:24 # −999
3.14159265 08.02.2020 14:49 # +4
>perror("OOM");
>size_t вместо inta
Попытался прикинуться олимпиадником, но руки-то помнят!
gostinho 08.02.2020 15:29 # 0
3.14159265 08.02.2020 16:28 # +2
Это как маленькая девочка заходит и сообщает: «приффетик ))) я люблю кукол и розофых пони».
А потом пишет обфусцированную программу на Си, которая помимо прочего возвращает ненулевой код ответа в случае ошибочного ввода.
3.14159265 08.02.2020 17:14 # +1
https://govnokod.ru/21037#comment349170
Для удобного чтения треда, введите в консоль регистрационный ключ:
gostinho 08.02.2020 17:19 # 0
3.14159265 08.02.2020 17:21 # +3
> printf("%c", love [bormand % HACTEHbKA]);
Всё-таки девочки в сишке не очень сильны. gost бы кошерно putchar поставил.
Да и какая разница? Лулзы же.
gost 08.02.2020 17:51 # 0
HACTEHbKA 09.02.2020 09:17 # +2
gost 09.02.2020 12:25 # 0
Бормондяша так мощно кодил на крестах, что пробудил тебя ото сна?
HACTEHbKA 09.02.2020 12:32 # 0
bormand 09.02.2020 12:43 # 0
gost 09.02.2020 13:06 # 0
HACTEHbKA 09.02.2020 13:12 # +3
1024-- 09.02.2020 13:13 # +3
3.14159265 08.02.2020 14:53 # +2
gost 08.02.2020 15:54 # +4
https://pastebin.com/yHXjpAg2
Просто пиздец, насколько же чувак из статьи — анскилльный питух.
3.14159265 08.02.2020 16:20 # +2
> 229.481ms Recursive
> 391.582ms Redux-Observable Concurrent
>js в функцианальном дрисня-стиле, чуть ли не в ДЕСЯТОК раз сливает jsу же в нормальном императивном стиле.
Хм. Перехвалил я скриптуха, откровенно перехвалил. 10x slowdown нужно ещё заслужить.
bormand 08.02.2020 16:30 # 0
Desktop 08.02.2020 17:52 # 0
gost 08.02.2020 17:53 # +2
bormand 08.02.2020 19:52 # +2
https://ideone.com/UEJlLe З.Ы. Не особо оптимально, но если на пулы пересадить, то будет за O(COLS) по памяти.
bormand 08.02.2020 20:49 # 0
gost 08.02.2020 20:55 # +1
Крестовая версия выдаёт 12, наивная — 14, ручной подсчёт присуждает победу наивной.
10111121200121100111102
22112011211021011121121
02101000120120111022110
Именно для этого, кстати, я и запилил самописный рандом.
gost 08.02.2020 21:03 # +1
9 у крестовой, 10 у наивной.
Не учитывается самый левый столбец блока, у которого есть только один элемент нужного цвета, находящийся в самой нижней строке?
bormand 08.02.2020 21:08 # 0
bormand 08.02.2020 21:17 # 0
gost 08.02.2020 21:33 # 0
По сравнению с немного оптимизированной версией на «C» (https://ideone.com/bd4g1I) производительность снижена примерно в 1.5—2.5 раза: https://ideone.com/mhPokq (на моём компе — ~6500 мс против ~2400).
Подозреваю, что в основном это из-за «шаред_поинтеров».
bormand 08.02.2020 21:40 # 0
gost 08.02.2020 21:50 # 0
bormand 08.02.2020 23:55 # +1
gost 09.02.2020 00:39 # +1
Кстати, оптимизированный код на «C++» оказался гораздо больше похож на «C», чем код на «C». Какой багор )))
HoBorogHuu_nemyx 09.02.2020 01:26 # 0
gost 09.02.2020 02:27 # 0
3.14159265 09.02.2020 01:35 # 0
У меня сначала была мысль сделать что-то похожее на борманда.
Но я стремился к царскому решению: побольше массивов, поменьше структур.
Потому я взял за основу твой одномерный массив и заполняшку.
bormand 09.02.2020 01:45 # 0
Зато у меня даже входной матрицы нет, можно генерить её на ходу или стримить с диска.
3.14159265 09.02.2020 02:19 # 0
На больших и хитрых матрицах ломается. Плюс второй цикл непонятно как убрать.
bormand 09.02.2020 02:24 # 0
3.14159265 09.02.2020 02:40 # 0
Я не смотрел в крестоверсию.
Пока свою не сделал. У меня вышло очень похоже.
Но блин, никак не выходит без третьего вложенного цикла, который топы апдейтит:
>который должен разъебать всё
Слить в хламину же.
gost 09.02.2020 02:26 # 0
3.14159265 09.02.2020 02:44 # 0
Да взять исходный 0xDEADBEAF 100х100.
Недосчитывает.
Я merge заинлайнил, но всё-равно надо вверх идти и топы обновлять.
http://govnokod.ru/26422#comment525770
gost 09.02.2020 02:25 # +1
Фаззилка на «C++»: https://ideone.com/4JphF7;
Фаззилка на «JavaScript»: https://pastebin.com/QD8nBSA2.
3.14159265 09.02.2020 02:56 # 0
gost 09.02.2020 12:17 # 0
bormand 09.02.2020 01:48 # +2
HoBorogHuu_nemyx 09.02.2020 02:11 # 0
bormand 09.02.2020 03:06 # 0
З.Ы. Код внизу треда.
HACTEHbKA 09.02.2020 09:19 # +2
HoBorogHuu_nemyx 09.02.2020 09:39 # 0
HACTEHbKA 09.02.2020 09:50 # 0
bormand 09.02.2020 10:23 # +1
поедешь
bormand 09.02.2020 10:44 # 0
HoBorogHuu_nemyx 09.02.2020 10:48 # 0
gost 09.02.2020 12:18 # 0
HACTEHbKA 09.02.2020 12:20 # 0
HACTEHbKA 09.02.2020 11:31 # 0
LLapcKuu_nemyx 08.02.2020 22:14 # 0
bormand 08.02.2020 16:20 # 0
gost 08.02.2020 16:31 # 0
phpBidlokoder2 08.02.2020 17:04 # 0
gost 08.02.2020 19:04 # 0
Desktop 08.02.2020 19:08 # 0
3.14159265 08.02.2020 19:26 # +1
> Эмпирически, при увеличении размеров матрицы оно растёт как что-то логарифмоподобное.
Думаю вопрос очень сложный. Формулы будут зависеть от числа цветов.
Не факт что при их увеличении, размер больших областей будет расти пропорицонально размерам карты. Вспомним проблему 4х цветов.
5000х5000 Max block size: 106
10kх10k Max block size: 93
3.14159265 08.02.2020 19:36 # +1
А вот МО одноцветной области максимального размера на бесконечной случайной карте явно будет бесконечным.
phpBidlokoder2 08.02.2020 21:42 # 0
gost 08.02.2020 22:17 # 0
Возьмём простенькую модельку:
https://ideone.com/dGYGm7
Джва цвета:
Три:
Четыре:
Пять:
Эта ебола очень похожа на какой-то логарифм.
3.14159265 09.02.2020 01:37 # 0
3.14159265 09.02.2020 02:37 # 0
Но всё-равно херня. Никак не выходит без третьего вложенного цикла, который upы обновляет.
bormand 09.02.2020 03:03 # +1
https://ideone.com/k37NrXЗ.Ы. Ну теперь то мне позвонят из гугла? UwU
3.14159265 09.02.2020 03:39 # 0
Третий вложенный цикл, от которого я никак не мог избавиться бесил, вышел наружу.
PS
>next = prev = this;
А это зачем? Для чистки памяти?
bormand 09.02.2020 03:45 # +1
3.14159265 09.02.2020 03:48 # 0
> max_size = std::max(max_size, size);
Ага. Вкурил, теперь. Мощно.
bormand 09.02.2020 03:48 # 0
3.14159265 09.02.2020 03:54 # 0
У меня на ломалось на областях в форме буквы Ш, из-за того что данные в верхних объектах не обновлялись. Линкед-лист очевидно решает эту проблему.
Вот пара тестовых матриц.
000111101
001100101
011000001
010100111
010100100
011111100
000111101
001100110
011000011
010100111
010100100
011111100
bormand 09.02.2020 04:36 # +1
На любой картинке с кольцом LinkTo начинает линковать список сам с собой. Но так вышло, что LinkTo ничего не делает если ноды в правильном порядке, а порядок всегда сохраняется.
gost 09.02.2020 12:21 # +2
Ну вот, это теперь практически идиоматический код на «C». Именно поэтому…
Судя по тому, что после прошлогоднего обновления веб-интерфейса их почты он стал жрать одно ядро и отрисовываться с ~10-15 фпс (просто тупой список тем сообщений с парой иконок!) — нет, не возьмут.
bormand 09.02.2020 14:30 # +1
К сожалению, я не осилил circular_list_algorithms из буста, чувствую себя мартышкой с очками ;(
bormand 10.02.2020 07:47 # +1
3.14159265 13.02.2020 15:32 # +2
А чего ещё ждать от доски объявлений-то?
govno jopa barebuh suka, pidor gopa ⓒ
https://ebanoe.it/2019/07/05/govno-jopa-google/
gost 13.02.2020 15:57 # +2