Си диез / Говнокод #19831 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 d_fomenok, (Updated )

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

    • 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
          Ответить
          • Зато это Дерьмо-с-большой-буквы браузер не вешает.
            Ответить
          • Да.

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

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

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8