1. Python / Говнокод #18918

    −11

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    def addr2str(addr):
        addr=int(addr,16)
        hi=((addr&0xff00)>>8)>>1
        lo=(addr&0xff)>>1
        blo=format(lo,'b')
        bhi=format(hi,'b')
        return int(bhi+blo,2)

    Математика через строки. Ничего умнее не придумал, зато работает.
    Че имеем:
    0b1101101011001111
    Че надо:
    0b11011011100111

    Запостил: n158, 27 Октября 2015

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

    • А почему функция addr2str возвращает int? И что она вообще должна делать?
      Ответить
      • А вдруг название функции читается по-другому? Например, так: addr2str, где r2str — то, что нужно к чему-то добавить.
        Ответить
    • P.S. Нижняя строчка по-нормальному, без каста в строки, пишется как hi << 8 | lo, по крайней мере на си.

      P.S. Или там действительно надо, чтобы все ведущие нолики в lo сожрало?
      Ответить
    • Ну пример кагбе есть, нетрудно представить алгоритм. А инт нужен чтобы ввести вероятного противника в заблуждение. Кстате, в коде ошибка, но никто не найдет где она.
      Ответить
      • > никто не найдет где она...
        ... потому что по одному примеру алгоритмы не реверсятся. Задача сродни "допиши число" из всяких iq тестов.

        > нетрудно представить алгоритм
        Трудно. В голову пришло только "отбросить старший бит каждого байта, а оставшиеся 7 сконкатенировать получив 14-битное целое". Или всё-таки, как код сейчас и делает, отбросить ещё и все ведущие нули из младшего байта?
        Ответить
    • Объясняю: дают два байта одной строкой, надо выкинуть последний бит из каждого байта и соединить что получилось в одно hex число.

      p.s bormand таки угадал задачу.
      Ответить
      • Не, я зафейлил. Я сказал про старший бит, а надо младший. Короче как-то так, походу:
        addr = int(addr, 16)
        return ((addr & 0xFE00) >> 2) | ((addr & 0xFE) >> 1)
        Ответить
        • Классное решение, завтра проверю. Просто у меня с арифметикой, тем более шестнадцатеричной, проблемы, а надо было быстро тест накодить.

          p.s. а нули для младшего байта добавляются с помощью .zfill(7)
          Ответить
    • Лол , ну и хуйня
      Ответить

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