- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
module.exports = leftpad;
function leftpad (str, len, ch) {
str = String(str);
var i = -1;
if (!ch && ch !== 0) ch = ' ';
len = len - str.length;
while (++i < len) {
str = ch + str;
}
return str;
}
Миллионы скачиваний, "абсракция", и ни один JS-адепт не обратил внимания на то, что алгоритм квадратичный.
В теории, конечно, для больших строк паддинг врядли кто-то будет вызывать, не узкое место, но в модуле из ОДНОЙ ФУНКЦИИ, КАРЛ можно было и не за квадрат реализовать.
В V8 какая-то другая оптимизация для конкатенаций в цикле.
Ок, теперь понятно, что рассуждать об алгоритмической сложности программ на JS можно только эмпирически.
Балансировка нужна, чтобы быстро искать, неизменяемость тут не при чём.
Если тупо приклеивать, получается колбаса вида
Доступ по индексу будет медленным.
> Может лучше просто склеить их при доступе по индексу?
Наверное, можно, но тогда в каждый доступ по индексу приезжают нетривиальные ветвления. В целом оптимизаторы могут и такое выпилить, но уж как-то всё сложно и непредсказуемо получается.
У разных деревьев могут быть разные контракты относительно того, как соотносятся значения в узлах. Конкретно в ropes нужно поддерживать контракт, что количество дочерних узлов в правой ветке примерно равно количеству узлов в левой ветке.
Вставка может нарушить контракт, но вот вопрос когда нужно заниматься исправлением: можно это делать при каждой вставке, а можно это делать при доступе к элементам.
уже читаю
https://en.wikipedia.org/wiki/Rope_(data_structure)
Наш сайт точно откроется за время жизни Бога*
* При условии существования Вселенной, планеты Земля, человечества на определённом этапе развития, ЭВМ определённой архитектуры, доступности энергии и ежедневных взносов пользователей в размере 0.05 МРОТ.
https://www.npmjs.com/package/isnumber
Цирк.
str = Array(len+1).join(ch) + str; //так лучше?
И вообще, как это лучше всего делается?
Иначе это - какие-то догадки и споры о внутреннем мире неразделанного медведя.
> str = Array(len+1).join(ch) + str; //так лучше?
Зависит от версии интерпретатора. Может, в какой-то эту операцию сильно соптимизировали.
Двоичный поискДвоичное склеивание рулит.
Polyfill
This method has been added to the ECMAScript 6 specification and may not be available in all JavaScript implementations yet. However, you can polyfill String.prototype.repeat() with the following snippet:
s=Array(6).join('.')
> "....."
s.length
> 5
Вроде, всё в порядке
We should do that for each language we like to troll.
A Java left pad implementing a Padder class instanciated by a PadderFactory that you can get by a PadderInjector from a PadderRegistry all that accepting an AbstractPaddingString.
Then one in Ruby where you monkey patch the string that it pads, then add an AUTO_PAD settings set to True by default and a fluent API to chain padding.
Then one version PHP version containing pad_string, then real_pad_string that deals with unicode, then real_pad_string_i_swear_this_time that that call str() on parameters automatically.
Then a Haskell one with a monad and a trampolin and some |=> giberrish to mix it all.
Then a Go one that creates a string padding microservice based on goroutine. With a docker file, just in case.
And because we should never forget to be able to mock ourself, an aio_string_pad which gives you an asyncronous padding coroutine, but under the wood calling run_in_executor, and optionally auto start an event loop.
http://left-pad.io/
так им и надо, так им и надо!!!!!!
https://meduza.io/feature/2016/03/28/kak-slomat-internet
kak slomat internet, my ass
я думал, там какую-нибудь архитектурную уязвимость в протоколе IP нашли или что-то вроде этого, а они пишут про обосрамс каких-то тупых хиптеров
И вообще облачные сервисы — это ловушка.
breal_pad.io has deploys worldwide, then call str=padding ruby where you can\'t currible the we str
on php vert ' to preved follow manyway, most make array(count var robust must string.prototype.repeated from a monkey partup ecosystem occurrenting