1. JavaScript / Говнокод #2924

    +166.8

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    i = '0000101001010010111';
    i = i.split('');
    for (s = 0; s < i.length; s++) {
    if (i[s] == 0) i[s] = '';
    if (i[s] == 1) break;
    }
    i = i.join('');
    alert(i);

    Обрезание всех нулей, идущих до первой единицы.

    Запостил: eval, 03 Апреля 2010

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

    • alert(i.substr(i.indexOf( '1' )))
      думаю так проще) но только для случаев где только нули и единицы. тут как я понял удаление незначащих нулей из двоичного числа. так что норм
      Ответить
      • а это если не только единицы
        alert(i.replace(/0*/,''));
        Ответить
        • а если нулей спереди нет?
          /^0+/
          Ответить
          • Ну вообще это правильно, но не обязательно. Предыдущий пример нормально без нулей срабатывает.
            Ответить
            • как твой пример сработает над этим числом?
              10001
              Ответить
              • Выведет 10001.
                <script type='text/javascript'>
                i = '10001';
                alert(i.replace(/0*/,""));
                </script>
                Ответить
                • да, действительно удаляет только, когда нули впереди.
                  Ответить
        • alert(+'0000101001010010111');

          Ну и через parseInt можно.

          Ваш К.О.
          Ответить
          • Оплошал на этот раз К.О.

            alert(+'00001010010100101111111111111'); -> 1.0100101001011111e+24
            Ответить
            • Тогда через parseInt.
              Ответить
              • Вот на лицо не понимание о там как хранятся данные и в частности про максимальное значение integer. А с parseInt еще хуже

                alert(parseInt('000010100101001011111111 11111')) -> 4.796299830628956e+21
                Ответить
                • c parseInt все нормально, если указать основание.
                  alert(parseInt('00001010010111111110011111',2).toString(2));
                  Ответить
                  • Только основание у нас 10.
                    alert( parseInt('00001010010111111110011111',10) )
                    Ответить
                • murz, вот на лицо незнание того, что parseInt вторым аргументом принимает основание… И если указать 2, то всё будет нормально работать.
                  Ответить
        • это удалит нули в другом месте, если нет нулей сначала.
          Ответить
          • хм... проверил в chrome и ff, нормально работает.
            нули в других местах режутся только с модификатором "g".
            alert(i.replace(/0*/g,''));
            Ответить
            • ха, неожиданно.. То есть он срабатывает на начале строки в любом случае.
              alert(i.replace(/0*/g,'>>>'));
              Спасибо, буду помнить. Надо вам плюсануть.
              Ответить
            • alert('11100011'.replace(/0*/g,'>>>'));
              Ответить
        • Очень хитрый пример. Плюсую.
          Ответить
          • Ничего, что в других языках это регулярное выражение может работать по-другому?
            Ответить
            • где здесь ...другой язык?
              Ответить
            • Пусть работает. Я js-разработчик и на другие платформы (какие еще могут быть клиентские языки? Флеш и сильверлайт не в счет) переносить код не собираюсь.
              Ответить
    • Вообще-то говнисто. но не лихо. Так веселее:
      alert('00001010010100101111000000001111111111111'.split(/(1+)/).slice(1).join(''));
      Ответить

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