1. C# / Говнокод #19831

    −10

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    static bool IsPalindrome( int value ) { 
    int reverseValue = 0; 
    if(value < 0) value = -value; 
    int tempValue = value; 
    int reverseValueTens = 1; 
    while(tempValue > 0) { 
    reverseValueTens *= 10; 
    tempValue /= 10; 
    } 
    reverseValueTens /= 10; 
    tempValue = value; 
    while(tempValue > 0) { 
    //Alert( reverseAbsValueAddition ); 
    reverseValue += (tempValue - (tempValue/10)*10) * reverseValueTens; 
    reverseValueTens /= 10; 
    tempValue /= 10; 
    } 
    //Alert( reverseAbsValue ); 
    return reverseValue == value; 
    }

    Запостил: d_fomenok, 17 Апреля 2016

    Комментарии (63) RSS

    • Alert... Alert... Alert...
      Ответить
    • JS головного мозга?
      Ответить
      • function isPalindrome(s) {   
           return (s=""+s).length<2 || s.slice(-1)==s[0] && isPalindrome(s.slice(1,-1));
        }
        Ответить
        • function isPalindrome(s, callback) {
            s = String(s);
            if(!s) callback(!0);
            
            var n = s.length;
            
            // TODO: скорей в продакшн, пока баги не нашлись
            [].forEach.call(s, function(c, i) {
              setTimeout(function() {
                c == s[s.length-i-1] ?! -- n && callback(!0) : n>0 && callback(!!(n=0));
              }, 0 | Math.random() * 1000);
            });
          }
          Ответить
          • Ха-ха-ха-ха. ОМГ, что за страшное асинхронное Дерьмо я только что прочитал 7
            Ответить
            • Зато это Дерьмо-с-большой-буквы браузер не вешает.
              Ответить
          • "0 |" - приведение к инту что-ли?
            Ответить
            • Да. А "+x" - к флоату вроде бы...
              Ответить
            • Да.

              ""+s //приведение к строке
              +s   //приведение к числу
              !!s  //приведение к bool
              Ответить

              • {}+s // приведение к объекту
                []+s // приведение к массиву
                undefined+s // приведение к хуй пойми чему
                Ответить
                • >// привидение к хуй пойми чему
                               .--,
                              /  (
                             /    \
                            /      \ 
                           /  0  0  \
                   ((()   |    ()    |   ()))
                   \  ()  (  .____.  )  ()  /
                    |` \_/ \  `""`  / \_/ `|
                    |       `.'--'.`       |
                     \        `""`        /
                      \                  /
                       `.              .'    ,
                        |`             |  _.'|
                        |              `-'  /
                        \                 .'
                         `.____________.-'
                  Ответить
                • undefined+число // приведение к нечислу
                  Ответить
                  • >{}+s // приведение к объекту
                    Как ни странно но это каст к числу
                    эквивалентно
                    +s

                    PS Ждём известную картинку xkcd
                    Ответить
                    • Эквивалентность питуизации в число вызвана синтаксиальной психозой языка. Кобенарное кортежирование сразу вызывает питуизирование в строку. ({})+s
                      Ответить
                      • > Кобенарное кортежирование сразу вызывает питуизирование в строку. ({})+s
                        Дык препендация мосиыва даёт сточную тоже ворецию.
                        []+x == ""+x

                        PS> Блин по-моему я только что придумал многострочники в js

                        ([]+function(){
                        вореции
                        кобенации
                        натализации
                        }).split('\n').splice(1,-1)
                        Ответить
                        • Я тоже хочу такой портвейн.
                          Ответить
                          • fixed. И экранировать не надо...
                            ([]+function(){/*
                            вореции   \ | /
                            кобенации   |   
                            натализации '
                                      */}).split('\n').slice(1,-1).join('\n')
                            Ответить
                • Ну это уже все смотрели, я надеюсь, я только напомню.
                  https://www.destroyallsoftware.com/talks/wat
                  Ответить
        • isPalindrome =: <=<@|.
             isPalindrome 'dsadasd'
          1
             isPalindrome 'dsadgasd'
          0
          Ответить
          • <=<@

            Это та роза, что упала на лапу Азора?
            Ответить
          • > isPalindrome =: <=<@|.

            И сразу фейл.
            isPalindrome 124321
            1

            Вот именно по этой причине на J никто серьезно не пишет.
            Ответить
            • Ну так и на сриптовых языках никто серьезно не пишет,

              Блеадь, да даже на шарпе тоже никто серьезно не пишет

              Не, ты только прикинь, там

              bool isPalindrome (sting str){...}
              
              ...
              isPalindrome (123523);
              ...


              Вообще не скомпилится, пиздец, так так жить!
              Ответить
              • >bool isPalindrome (sting str){...}

                Условие задачи: bool IsPalindrome( int value ) {

                Мы вам перезвоним. Следующий...
                Ответить
    • Опять лаба?
      Ответить
    • function isPalindrome(i,o,r) {  //всё-таки строковое читерство препод мог не принять
         return 0===(i=0|i)?o===r:isPalindrome(i/10,o||i,(r||0)*10+i%10);
      }
      Ответить
      • У меня говнистее:
        isPalindrome=F=(a,b=0,T=10)=>(r=a%T,d=a/T|0,d<=b?a==b|d==b:r|b&&F(d,b*T+r));


        делим число не полностью, а до половины
        потом сравниваем с перевёрнутой второй половиной
        Ответить
        • Голубая кровь, поди?
          Ответить
        • >T=10
          Ну я б константу не стал по штеку гонять, но вдвое быстрее найдёт, да.
          И без лишнего аргумента.
          Ответить
          • T - это чтобы пару символов сэкономить.

            Хотя нет, это только добавило ;(
            Ответить
        • Кегдан, перелогиньтесь. Тут никто больше не пишет на J6.
          Ответить
        • 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 цифру, действие для "правой" цифры (для конкретной длины) проверяет цифру и, если что, снимает флаг палиндромности (действие для гипотетических длин работают вхолостую). После такого обхода вызывается коллбек с результатом.
          Ответить
          • isPalindrome =: (<=<@|.)@": 
               isPalindrome 1234321
            1
               isPalindrome 1234322
            0


            а что кегдан? кегдан ничего...
            Ответить
            • Кстати, а можно ли проверить на палиндром за O(1) по памяти и один проход по строке (ещё не зная её длину)? Вроде нет ;(
              Ответить
              • нет, в любом случае от длинны зависит. O(n/2) максимум

                или я тебя не понял?

                Ответить
                • > O(n/2) максимум
                  Это если длинну знаешь. А если нет - придётся буферизовать вообще всю строку целиком ;(
                  Ответить
                  • угу(

                    программистов расстраивают вещи, которые обычным смертным даже не дано понять
                    Ответить
              • Можно.
                Ответить
                • На квантовом компьютере?
                  А, Пи ниже сказал и про обычный. А ещё я перечитал условие. Почему-то показалось, что O(1) относится к проходам по строке.
                  Кстати, что там у хохлов квантов?
                  Ответить
                  • Хотя, у нас с вами интовые палиндромы: там O(1) и по времени, и по памяти!
                    Ответить
              • можно, если один проход будет с обоих концов. знание длины необязательно
                Ответить
                • а как найти конец строки когда не известна длина?
                  Ответить
                  • struct character {
                      character* next;
                      character* prev;
                      char value;
                    };
                    struct string {
                      character* first;
                      character* last;
                    };
                    Ответить
                    • Тихо-тихо, то они еще не знают про deque, и circular buffer.
                      Ответить
                      • Я и так тихо написал.
                        Впрочем, царей ничто не сломает.
                        Ответить
                • Кстати, вроде бы у CRC было такое свойство: CRC от перевёрнутого стрима совпадает с перевёрнутой CRC с перевёрнутым полиномом. Точно не помню, могу и наврать...

                  В общем, считаем 2 CRC с противоположными полиномами, в конце потока одну из них переворачиваем, сравниваем. Если совпало - вероятно, что строка была палиндромом. Если не совпала - всяко не палиндром.
                  Ответить
                  • коллизии

                    >вероятно, что строка была палиндромом
                    а. всё. вижу

                    думал о вореции рабин-карпа. но это ж вероятностное.
                    Ответить
                    • Ну тут, походу, либо буфер размером со всю строку, либо хеши и вероятности...
                      Ответить
                      • Есть ещё идея: аппроксимировать зависимость значения байта от его смещения какой-нибудь функцией. Для хранения параметров этой функции может понадобиться буфер меньшего размера.

                        Либо придумать алгоритм сжатия, который умеет разжимать строку задом наперёд.
                        Ответить
                      • Тут просто слишком жёсткие условия O(1) и 1 проход, да еще и с начала, да еще и не зная размера.

                        Даже если строку итерировать несколько [O(1)] раз то думаю и тут проблематично будет за O(1) памяти.
                        Ответить
                        • > O(1) и 1 проход, да еще и с начала, да еще и не зная размера
                          Ну типичный такой стрим с неизвестной длиной. Не знаешь же заранее, сколько памяти запасти. Поэтому алгоритм с O(N) по памяти не подходит.
                          Ответить
                          • O(1) по памяти.
                            Проверить
                            xN=x0
                            xN-1=x1
                            xN-2=x2
                            ...
                            Выход есть!

                            вореционное дерево фомфана!
                            зожимаим стрим в o(17 3 5 )
                            1680 палиромов данной информации
                            как кодировать рекурсию когда в ней проблем много
                            это означет что все будет используя вигагерцы и оперативнную паметь
                            и это означет сто все будет зависить от компьтера, на счет требываний мы поговорим после теста срима
                            Ответить
                  • Я как бы ниже это и реализовал.
                    Ответить
              • Нехер делать

                bool isPalindrome()
                {
                	const unsigned base = 31;
                	char c;
                	unsigned power = 1,
                		left_hash = 0,
                		right_hash = 0;
                
                	while((c = getchar()) != '\n')
                	{
                		left_hash = left_hash * base + c - '0' + 1;
                		right_hash += power * (c - '0' + 1);
                		power *= base;
                	}
                	return left_hash == right_hash;
                }
                Ответить

    Добавить комментарий