Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
function isPalindrome(n, callback, k) {
var c = 0, ok = true, D = 0;
k = k | 0 || 10;
while(n) (function(d, c1) {
setTimeout(function() { D = d; }, c1 * k);
for(var i = c1; i <= 10 - c1; ++ i) (function(i) {
setTimeout(function() {
if(i == c - c1 - 1 && D != d) ok = false;
}, i * k + (k >> 1));
})(i);
})(n % 10, c ++, n = n / 10 | 0);
setTimeout(function() { callback(ok); }, c * k);
}
Работает для 32хбитных неотрицательных чисел. Если будет работать неправильно, увеличивайте k. Вдохновение черпал из sleepsort и хаскельной питушни, которая может поэлементно создавать список из значений, полученных после обхода этого списка.
В цикле совершается обход числа, начиная с младших разрядов. Задаются отложенные действия. Во-первых, раз в k миллисекунд переменной D присваивается текущая цифра. Максимум в инте 10 цифр. Поэтому для каждой цифры создаётся несколько отложенных действий, которые стоят по времени с другой стороны - раз в k миллисекунд, но с каждой цифрой время не растёт, а сокращается. Т.к. неизвестна длина, таких действий несколько. На этапе исполнения отложенных действий длина уже известна. Действие для "левой" цифры записывает в D цифру, действие для "правой" цифры (для конкретной длины) проверяет цифру и, если что, снимает флаг палиндромности (действие для гипотетических длин работают вхолостую). После такого обхода вызывается коллбек с результатом.
На квантовом компьютере?
А, Пи ниже сказал и про обычный. А ещё я перечитал условие. Почему-то показалось, что O(1) относится к проходам по строке.
Кстати, что там у хохлов квантов?
Кстати, вроде бы у CRC было такое свойство: CRC от перевёрнутого стрима совпадает с перевёрнутой CRC с перевёрнутым полиномом. Точно не помню, могу и наврать...
В общем, считаем 2 CRC с противоположными полиномами, в конце потока одну из них переворачиваем, сравниваем. Если совпало - вероятно, что строка была палиндромом. Если не совпала - всяко не палиндром.
Есть ещё идея: аппроксимировать зависимость значения байта от его смещения какой-нибудь функцией. Для хранения параметров этой функции может понадобиться буфер меньшего размера.
Либо придумать алгоритм сжатия, который умеет разжимать строку задом наперёд.
> O(1) и 1 проход, да еще и с начала, да еще и не зная размера
Ну типичный такой стрим с неизвестной длиной. Не знаешь же заранее, сколько памяти запасти. Поэтому алгоритм с O(N) по памяти не подходит.
O(1) по памяти.
Проверить
xN=x0
xN-1=x1
xN-2=x2
...
Выход есть!
вореционное дерево фомфана!
зожимаим стрим в o(17 3 5 )
1680 палиромов данной информации
как кодировать рекурсию когда в ней проблем много
это означет что все будет используя вигагерцы и оперативнную паметь
и это означет сто все будет зависить от компьтера, на счет требываний мы поговорим после теста срима
{}+s // приведение к объекту
[]+s // приведение к массиву
undefined+s // приведение к хуй пойми чему
Как ни странно но это каст к числу
эквивалентно
+s
PS Ждём известную картинку xkcd
Дык препендация мосиыва даёт сточную тоже ворецию.
[]+x == ""+x
PS> Блин по-моему я только что придумал многострочники в js
([]+function(){
вореции
кобенации
натализации
}).split('\n').splice(1,-1)
https://www.destroyallsoftware.com/talks/wat
Это та роза, что упала на лапу Азора?
И сразу фейл.
Вот именно по этой причине на J никто серьезно не пишет.
Блеадь, да даже на шарпе тоже никто серьезно не пишет
Не, ты только прикинь, там
Вообще не скомпилится, пиздец, так так жить!
Условие задачи: bool IsPalindrome( int value ) {
Мы вам перезвоним. Следующий...
делим число не полностью, а до половины
потом сравниваем с перевёрнутой второй половиной
Ну я б константу не стал по штеку гонять, но вдвое быстрее найдёт, да.
И без лишнего аргумента.
Хотя нет, это только добавило ;(
Работает для 32хбитных неотрицательных чисел. Если будет работать неправильно, увеличивайте k.
Вдохновение черпал из sleepsort и хаскельной питушни, которая может поэлементно создавать список из значений, полученных после обхода этого списка.
В цикле совершается обход числа, начиная с младших разрядов. Задаются отложенные действия. Во-первых, раз в k миллисекунд переменной D присваивается текущая цифра. Максимум в инте 10 цифр. Поэтому для каждой цифры создаётся несколько отложенных действий, которые стоят по времени с другой стороны - раз в k миллисекунд, но с каждой цифрой время не растёт, а сокращается. Т.к. неизвестна длина, таких действий несколько. На этапе исполнения отложенных действий длина уже известна. Действие для "левой" цифры записывает в D цифру, действие для "правой" цифры (для конкретной длины) проверяет цифру и, если что, снимает флаг палиндромности (действие для гипотетических длин работают вхолостую). После такого обхода вызывается коллбек с результатом.
а что кегдан? кегдан ничего...
или я тебя не понял?
Это если длинну знаешь. А если нет - придётся буферизовать вообще всю строку целиком ;(
программистов расстраивают вещи, которые обычным смертным даже не дано понять
А, Пи ниже сказал и про обычный. А ещё я перечитал условие. Почему-то показалось, что O(1) относится к проходам по строке.
Кстати, что там у хохлов квантов?
Впрочем, царей ничто не сломает.
В общем, считаем 2 CRC с противоположными полиномами, в конце потока одну из них переворачиваем, сравниваем. Если совпало - вероятно, что строка была палиндромом. Если не совпала - всяко не палиндром.
>вероятно, что строка была палиндромом
а. всё. вижу
думал о вореции рабин-карпа. но это ж вероятностное.
Либо придумать алгоритм сжатия, который умеет разжимать строку задом наперёд.
Даже если строку итерировать несколько [O(1)] раз то думаю и тут проблематично будет за O(1) памяти.
Ну типичный такой стрим с неизвестной длиной. Не знаешь же заранее, сколько памяти запасти. Поэтому алгоритм с O(N) по памяти не подходит.
Проверить
xN=x0
xN-1=x1
xN-2=x2
...
Выход есть!
вореционное дерево фомфана!
зожимаим стрим в o(17 3 5 )
1680 палиромов данной информации
как кодировать рекурсию когда в ней проблем много
это означет что все будет используя вигагерцы и оперативнную паметь
и это означет сто все будет зависить от компьтера, на счет требываний мы поговорим после теста срима