- 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');
})();
> 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.
Да и ГЦ заебётся чистить. Странички в интернетах довольно большие и постоянно жопоскриптами дрочатся.
То как найти в хацкеле среднее арифметическое списка за один проход по списку и О(1) памяти?
Мдяяя. Оказывается на этой простой задачке ломают зубы вообще все.
Высокоуровевный же язык, со сборщиком мусора. ФУНКЦИОНАЛЬНЫЙ.
>А байтоёбы причём?
Ну а кто виноват в том что 5/6*2.6 +2/6 === 2.5000000000000004?
Разве трудно считать сумму лениво-иммутабельно?
Можно передать в массиве сумму и count.
А в конце поделить.
Определять где конец - это уже какая-то императивная хуйня
>Определять где конец
Зачем? Зачем?
>Зачем? Зачем?
Ну вот представь, у тебя биржевая лента, в которой по 123456 котировок в секунду приходит и тебе надо считать в лайв-режиме среднюю котировку за день. Ты на каждое новое значение будешь постоянно растущий список пересчитывать?
А в ФП реально питушня какая-то получится, либо тормозная, либо неидиоматическая.
>Ты на каждое новое значение будешь постоянно растущий список пересчитывать?
Да. И это лучше, чем каждый раз терять точность на плавающих питухах.
Это же деньги.
Там на округлениях миллионы могут накапать.
https://www.youtube.com/watch?v=N7JBXGkBoFc
Хотя, в этом конечно есть свой резон.
Числа тут примерно одного порядка.
Если это среднее ни на что не влияет, и допустим нужно для вывода котировок на трейдерском сайте.
Тогда это вполне приемлимая реализация.
Потом нам приходит пачка чисел. Мы вычисляем ищем взвешенное среднее, а к count прибавляем размер пришедшего батча.
>(count-1)/count * res + curr/count: curr
Просто меня покоробило 2 деления и 1 умножение на каждой итерации.
Если считать среднее батча самым тривиальным способом, а уже потом находить взвешенное среднее, то получится очень годно.
В жабе допустим для этого сделали Spliteratorы в Stream.
Проблема в том что оверхед на создание потоков и синхронизацию, для таких простых задач съедает выгоду от многопоточности.
Я когда-то пытался одну программу на крестах таким образом сделать многопоточной, используя лямбды и тред-пул.
Причём вычисление там было посложнее, чем «посчитай среднее N чисел».
В итоге оно работало чуточку дольше, но при этом грузило 2-3 ядра вместо одного.
https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html
Зацените как они по-байтоёбски среднее для сплита находят
>>> (unsigned right shift)
Вот как раз как-то так, только в хаскеле. Думаю, стандартные функции свёртки должны оптимизнуться.
А если нет, то стоит писать явную хвостовую рекурсию:
За один проход, хочу заметить.
https://ideone.com/3JdsWI
https://nponeccop.livejournal.com/449682.html?thread=3937170#t3937170
Бля, я к ФП отношусь уважительно, но это реально какой багор )))
Кстати, нагуглил: https://wiki.haskell.org/Foldr_Foldl_Foldl'. Багор-с!..
Ну и 5 императивных строк, которые в говне валяют эти потуги. Никаких оптимизаций тут нет, но они и не нужны.
Ведь задача какая была?
Показать, что хаскель-отребье обделалась и наврало.
Версия на сишке компактней, быстрее, проще и выигрывает во всём.
К тому же, нужно понимать, что никому никакие оптимизации в for сишке ненужны.
А тем, кому они нужны - напишет себе то, что ему нужно.
Поэтому хацкель-отребье так любит брать подобную херню и кого-то побеждать, правда оппонент как всегда не явился.
Пойти и писать реальные программы, реальную логику - отребье не может.
Соревноваться с лучшим - это не удел отребья.
* В ИП снизил уровень внимания ниже 100% - UB, которое будет ждать тебя в коде годы, и никакая хвалёная статическая питушня тебя не спасёт.
* В ИП программа не может освободить память. Вся память освобождается только после завершения программы.
* В ИП имена функций плохо сочетаются друг с другом, ИП - неконсистентное говно.
* В ИП нельзя вернуть что-то сложнее числа или структуры, массив вернуть нельзя.
Поэтому ИП - говно.
> массив вернуть нельзя
Сомнительное утверждение.
Особенно от человека, знающего js.
Cтандартное функцианальное кудахтанье: «оно должно питумизнуться», «хвостовая питушня», «заедушник не лолжен ни о чём думать».
https://thedeemon.livejournal.com/101735.html
Человек, который хорошо в нем ориентируется - это хорошее зубрилко а не хороший программист.
Умение героически преодолевать трудности, которые создает твой собственный инструмент, вместо того, чтобы решать непосредственно прикладную задачу, в современно мире ценится разве что только среди прыщавых сосок.
Работодатель же это сомнительное умение не ценит, и совершенно справедливо.
Потому производительность труда этих борщехлёбов настолько поганая, что больше платить им просто невозможно.
Рантаймы же для нормальных платформ пишут обычно на голом Си, и они как правило очень компактны и минимальны.
Именно поэтому я за «Python».
>среднее арифметическое списка за один проход по списку и О(1) памяти?
>> за один проход по списку
Мы вам перезвоним.
А мы передали кастомную реализацию связного списка.
bootcamp_dropout правильно сказал: длина неизвестна.
Причём я думал, что в этой задаче скриптухов подловить нереально.
Особенно питонистов с их длинными интами, но жсеров и пхпшников тоже.
Это и плохо.
int не переполнится?
Даже 2 инта нетривиально посчитать.
avg = (uncurry /) . fold (\(s, c) x -> (s + x, c + 1)) (0, 0)
З.Ы. На пустом поделит на 0, да. Но тут все участники специальной олимпиады на него делят.
Ты так говоришь, будто делить на 0 это что-то плохое.
avg([]) = 0/0
NaN
На пустом будет NaN. Что логично: среднее арифметическое от пустоты — это не число.
O(N)
https://nponeccop.livejournal.com/449682.html
Собственно из-за постоянной борьбы с ленивостью я и забросил хаски.
Выздоровел.
С такими "оптимизациями" иди на пхп ебашить.
Функцианальненько )))
Настоящий Сишник сделал бы null terminated array.
Только массивы, только хардкор!
>>> А мы передали кастомную реализацию связного списка.
.
Моча какая-то
https://ideone.com/WneDbX
Я же говорю: переполнение.
Считать в рамках обычных интов нужно или изощрённое байтоёбство или длинная арифметика.
А вот интересно, если длина списка заранее не известна — байтоёбство поможет? У меня такое ощущение, что не особо.
Достаточно просто найти попарно находить среднее.
И то, этот код неочевидно округляет отрицательные аргументы.
> если длина списка заранее не известна — байтоёбство поможет
При рандомной длине нужно или суммировать всё в более широком типе.
Или сохранять старшие биты в новую переменную. И потом делить их по частям.
> Double quotes for strings – when they are natural language and need I18n, eg "Error you have run out of space"
господи как же они заебали блядь
то eslint, то standard, то ставь точку с запятой, то не ставь
Выглядит уебищно и мне не нравится, но менять мне лень, а так хоть однородно
Зачем за ним нужно проверять даже такую примитивную вещь как кавычки?
Как думаете, программист должен
А. автоматизировать задачу заказчика
Б. пердолиться с указателями в языке без ГЦ
В. из кожи вон лезть, чтобы выполнить дебильный конвеншн, ничем не обоснованный?
Разумный кодстайл позволяет исполнять себя автоматически. А значит его можно повесить на коммит, чтобы весь код был красивым, не важно, кто там у себя в кьюбикле насколько извращённо его написал.