- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
(function(){
const panel = document.querySelector('.pane-content > ul');
function appendLink(text, href) {
const li = document.createElement('li');
const a = document.createElement('a');
li.appendChild(a);
a.setAttribute('href', href);
a.innerText = text;
panel.appendChild(li);
}
appendLink("Перелогиниться", 'https://govnokod.ru/user/exit/?url=https://govnokod.ru/user/login');
appendLink("Регистрация", 'https://govnokod.ru/user/exit/?url=https://govnokod.ru/user/register');
})();
phpBidlokoder2 28.01.2020 16:41 # −1
KpunoBblu_nemyx 28.01.2020 16:53 # −1
> Single quotes for strings – when they are code eg 'color: blue'
> Double quotes for strings – when they are natural language and need I18n, eg "Error you have run out of space"
> чистые функции
Приведи реальный пример чистой функции изменяющей DOM.
bormand 28.01.2020 17:09 # 0
KpunoBblu_nemyx 29.01.2020 18:11 # −1
Да и ГЦ заебётся чистить. Странички в интернетах довольно большие и постоянно жопоскриптами дрочатся.
bormand 29.01.2020 18:24 # −1
1024-- 29.01.2020 20:14 # 0
3.14159265 30.01.2020 15:48 # +2
То как найти в хацкеле среднее арифметическое списка за один проход по списку и О(1) памяти?
bootcamp_dropout 30.01.2020 16:13 # −1
3.14159265 30.01.2020 16:24 # 0
Мдяяя. Оказывается на этой простой задачке ломают зубы вообще все.
bootcamp_dropout 30.01.2020 16:31 # −1
3.14159265 30.01.2020 16:34 # +1
Высокоуровевный же язык, со сборщиком мусора. ФУНКЦИОНАЛЬНЫЙ.
bootcamp_dropout 30.01.2020 16:39 # −1
>А байтоёбы причём?
Ну а кто виноват в том что 5/6*2.6 +2/6 === 2.5000000000000004?
3.14159265 30.01.2020 16:43 # +1
Разве трудно считать сумму лениво-иммутабельно?
Можно передать в массиве сумму и count.
А в конце поделить.
bootcamp_dropout 30.01.2020 16:45 # −1
Определять где конец - это уже какая-то императивная хуйня
3.14159265 30.01.2020 16:50 # +1
>Определять где конец
Зачем? Зачем?
bootcamp_dropout 30.01.2020 17:04 # +1
>Зачем? Зачем?
Ну вот представь, у тебя биржевая лента, в которой по 123456 котировок в секунду приходит и тебе надо считать в лайв-режиме среднюю котировку за день. Ты на каждое новое значение будешь постоянно растущий список пересчитывать?
gost 30.01.2020 17:09 # −1
А в ФП реально питушня какая-то получится, либо тормозная, либо неидиоматическая.
3.14159265 30.01.2020 17:29 # 0
>Ты на каждое новое значение будешь постоянно растущий список пересчитывать?
Да. И это лучше, чем каждый раз терять точность на плавающих питухах.
Это же деньги.
Там на округлениях миллионы могут накапать.
https://www.youtube.com/watch?v=N7JBXGkBoFc
kak 31.01.2020 20:58 # 0
3.14159265 30.01.2020 18:01 # 0
Хотя, в этом конечно есть свой резон.
Числа тут примерно одного порядка.
Если это среднее ни на что не влияет, и допустим нужно для вывода котировок на трейдерском сайте.
Тогда это вполне приемлимая реализация.
bootcamp_dropout 30.01.2020 18:31 # −1
3.14159265 30.01.2020 18:46 # 0
Потом нам приходит пачка чисел. Мы вычисляем ищем взвешенное среднее, а к count прибавляем размер пришедшего батча.
>(count-1)/count * res + curr/count: curr
Просто меня покоробило 2 деления и 1 умножение на каждой итерации.
Если считать среднее батча самым тривиальным способом, а уже потом находить взвешенное среднее, то получится очень годно.
bootcamp_dropout 30.01.2020 18:49 # −1
3.14159265 30.01.2020 19:01 # +1
В жабе допустим для этого сделали Spliteratorы в Stream.
Проблема в том что оверхед на создание потоков и синхронизацию, для таких простых задач съедает выгоду от многопоточности.
Я когда-то пытался одну программу на крестах таким образом сделать многопоточной, используя лямбды и тред-пул.
Причём вычисление там было посложнее, чем «посчитай среднее N чисел».
В итоге оно работало чуточку дольше, но при этом грузило 2-3 ядра вместо одного.
3.14159265 30.01.2020 19:04 # +1
https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html
Зацените как они по-байтоёбски среднее для сплита находят
>>> (unsigned right shift)
1024-- 30.01.2020 17:14 # 0
Вот как раз как-то так, только в хаскеле. Думаю, стандартные функции свёртки должны оптимизнуться.
А если нет, то стоит писать явную хвостовую рекурсию:
gostinho 30.01.2020 17:23 # +1
За один проход, хочу заметить.
https://ideone.com/3JdsWI
3.14159265 30.01.2020 17:27 # 0
gostinho 30.01.2020 17:29 # +1
3.14159265 30.01.2020 17:25 # +1
https://nponeccop.livejournal.com/449682.html?thread=3937170#t3937170
gost 30.01.2020 17:30 # +3
Бля, я к ФП отношусь уважительно, но это реально какой багор )))
Кстати, нагуглил: https://wiki.haskell.org/Foldr_Foldl_Foldl'. Багор-с!..
3.14159265 30.01.2020 17:45 # +1
Ну и 5 императивных строк, которые в говне валяют эти потуги. Никаких оптимизаций тут нет, но они и не нужны.
Ведь задача какая была?
Показать, что хаскель-отребье обделалась и наврало.
Версия на сишке компактней, быстрее, проще и выигрывает во всём.
К тому же, нужно понимать, что никому никакие оптимизации в for сишке ненужны.
А тем, кому они нужны - напишет себе то, что ему нужно.
Поэтому хацкель-отребье так любит брать подобную херню и кого-то побеждать, правда оппонент как всегда не явился.
Пойти и писать реальные программы, реальную логику - отребье не может.
Соревноваться с лучшим - это не удел отребья.
1024-- 30.01.2020 18:04 # 0
* В ИП снизил уровень внимания ниже 100% - UB, которое будет ждать тебя в коде годы, и никакая хвалёная статическая питушня тебя не спасёт.
* В ИП программа не может освободить память. Вся память освобождается только после завершения программы.
* В ИП имена функций плохо сочетаются друг с другом, ИП - неконсистентное говно.
* В ИП нельзя вернуть что-то сложнее числа или структуры, массив вернуть нельзя.
Поэтому ИП - говно.
3.14159265 30.01.2020 18:15 # +1
> массив вернуть нельзя
Сомнительное утверждение.
Особенно от человека, знающего js.
3.14159265 30.01.2020 17:38 # 0
Cтандартное функцианальное кудахтанье: «оно должно питумизнуться», «хвостовая питушня», «заедушник не лолжен ни о чём думать».
gostinho 30.01.2020 17:40 # +1
HoBorogHuu_nemyx 30.01.2020 17:42 # −1
gostinho 30.01.2020 20:06 # −1
3.14159265 30.01.2020 20:28 # 0
https://thedeemon.livejournal.com/101735.html
KpunoBblu_nemyx 30.01.2020 20:58 # −1
HoBorogHuu_nemyx 30.01.2020 21:06 # −1
3.14159265 30.01.2020 21:20 # +1
Человек, который хорошо в нем ориентируется - это хорошее зубрилко а не хороший программист.
Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современно мире ценится разве что только среди прыщавых сосок.
Работодатель же это сомнительное умение не ценит, и совершенно справедливо.
Потому производительность труда этих борщехлёбов настолько поганая, что больше платить им просто невозможно.
Рантаймы же для нормальных платформ пишут обычно на голом Си, и они как правило очень компактны и минимальны.
gost 30.01.2020 16:31 # −1
Именно поэтому я за «Python».
3.14159265 30.01.2020 16:40 # +3
>среднее арифметическое списка за один проход по списку и О(1) памяти?
>> за один проход по списку
Мы вам перезвоним.
gost 30.01.2020 16:42 # −1
3.14159265 30.01.2020 16:44 # 0
А мы передали кастомную реализацию связного списка.
bootcamp_dropout правильно сказал: длина неизвестна.
gost 30.01.2020 16:50 # +2
3.14159265 30.01.2020 16:54 # +2
Причём я думал, что в этой задаче скриптухов подловить нереально.
Особенно питонистов с их длинными интами, но жсеров и пхпшников тоже.
gost 30.01.2020 16:36 # +3
3.14159265 30.01.2020 16:48 # 0
Это и плохо.
int не переполнится?
gost 30.01.2020 16:54 # −1
3.14159265 30.01.2020 16:58 # 0
Даже 2 инта нетривиально посчитать.
gost 30.01.2020 17:05 # −1
bormand 30.01.2020 17:14 # 0
avg = (uncurry /) . fold (\(s, c) x -> (s + x, c + 1)) (0, 0)
З.Ы. На пустом поделит на 0, да. Но тут все участники специальной олимпиады на него делят.
3.14159265 30.01.2020 17:23 # +1
Ты так говоришь, будто делить на 0 это что-то плохое.
avg([]) = 0/0
NaN
На пустом будет NaN. Что логично: среднее арифметическое от пустоты — это не число.
gost 30.01.2020 17:26 # −1
gost 30.01.2020 17:27 # −1
3.14159265 30.01.2020 17:40 # 0
O(N)
https://nponeccop.livejournal.com/449682.html
bormand 30.01.2020 17:46 # +1
Собственно из-за постоянной борьбы с ленивостью я и забросил хаски.
3.14159265 30.01.2020 17:52 # +2
Выздоровел.
gost 30.01.2020 17:42 # −1
gostinho 30.01.2020 17:44 # −1
gost 30.01.2020 17:45 # +3
gostinho 30.01.2020 17:46 # −1
bormand 30.01.2020 17:48 # +2
С такими "оптимизациями" иди на пхп ебашить.
gostinho 30.01.2020 17:49 # −1
KpunoBblu_nemyx 30.01.2020 18:05 # +2
gostinho 30.01.2020 18:07 # 0
KpunoBblu_nemyx 30.01.2020 18:17 # −1
KpunoBblu_nemyx 30.01.2020 18:21 # −1
gost 30.01.2020 18:08 # −1
KpunoBblu_nemyx 30.01.2020 21:02 # +1
Функцианальненько )))
3.14159265 30.01.2020 17:47 # 0
Настоящий Сишник сделал бы null terminated array.
Только массивы, только хардкор!
gost 30.01.2020 17:49 # 0
>>> А мы передали кастомную реализацию связного списка.
.
3.14159265 30.01.2020 17:50 # 0
Моча какая-то
https://ideone.com/WneDbX
Я же говорю: переполнение.
Считать в рамках обычных интов нужно или изощрённое байтоёбство или длинная арифметика.
gost 30.01.2020 17:53 # −1
gost 30.01.2020 18:00 # −1
А вот интересно, если длина списка заранее не известна — байтоёбство поможет? У меня такое ощущение, что не особо.
3.14159265 30.01.2020 18:09 # 0
Достаточно просто найти попарно находить среднее.
И то, этот код неочевидно округляет отрицательные аргументы.
> если длина списка заранее не известна — байтоёбство поможет
При рандомной длине нужно или суммировать всё в более широком типе.
Или сохранять старшие биты в новую переменную. И потом делить их по частям.
3.14159265 28.01.2020 18:09 # 0
bormand 28.01.2020 18:13 # −1
Fike 28.01.2020 18:58 # +2
> Double quotes for strings – when they are natural language and need I18n, eg "Error you have run out of space"
господи как же они заебали блядь
то eslint, то standard, то ставь точку с запятой, то не ставь
HoBorogHuu_nemyx 28.01.2020 19:12 # −1
Desktop 28.01.2020 19:18 # +2
bootcamp_dropout 28.01.2020 19:25 # −1
Выглядит уебищно и мне не нравится, но менять мне лень, а так хоть однородно
Stallman 28.01.2020 20:46 # +3
bormand 28.01.2020 20:50 # −1
AnalBoy 28.01.2020 21:28 # −2
KpunoBblu_nemyx 29.01.2020 14:27 # −1
HoBorogHuu_nemyx 29.01.2020 18:02 # −1
Зачем за ним нужно проверять даже такую примитивную вещь как кавычки?
1024-- 29.01.2020 20:19 # +2
Как думаете, программист должен
А. автоматизировать задачу заказчика
Б. пердолиться с указателями в языке без ГЦ
В. из кожи вон лезть, чтобы выполнить дебильный конвеншн, ничем не обоснованный?
Разумный кодстайл позволяет исполнять себя автоматически. А значит его можно повесить на коммит, чтобы весь код был красивым, не важно, кто там у себя в кьюбикле насколько извращённо его написал.
phpBidlokoder2 28.01.2020 21:53 # −1
AnalBoy 28.01.2020 16:57 # −3
KpunoBblu_nemyx 28.01.2020 17:02 # −1
AnalBoy 28.01.2020 17:32 # −3
KpunoBblu_nemyx 29.01.2020 18:07 # −1
zhigolo 29.01.2020 22:42 # −1