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

    0

    1. 1
    2. 2
    3. 3
    def decode_flag(event_states: str) -> bool:
        flag = 1 if int(event_states, 16) & 10_000_000_000_000_000 else 0
        return bool(flag)

    Кусок из реального коммерческого проекта
    Есть стринга из 8 символов - флагов (0 или 1), но нас интересует только 4 символ в ней

    Запостил: lpjakewolfskin, 08 Сентября 2022

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

    • Стоять, но это же 5й символ (он же элемент с индексом 4)!

      Мне нравится, как типы проаннотировали, а внутри полную хуйню написали.
      Ответить
    • Зачем хранить число в строке?
      Ответить
      • Ну что, никто не знает?
        Ответить
        • Я знаю.
          Чтобы проще было кококонкатенировать с другими строками.
          Ответить
    • Функция всегда возвращает 0 т.к. константа справа всяко больше, чем 16**8?

      А нет, если константу перевести в хекс, то её хвост будет 0x6FC10000. Нечётные цифры стоят в позициях 2 и 4, т.е. эта штука проверяет event_states[1] or event_states[3].
      Ответить
      • Можно развить идею, подобрав константы для каждого бита:

        event_states[0] - 1_000_000_000_000_000_000_000
        event_states[1] - 10_000_000_000_000_000_000
        event_states[2] - 10_000_000_000_000
        event_states[3] - 1_000_000
        event_states[4] - 100_000
        event_states[5] - 1_000
        event_states[6] - ?
        event_states[7] - 1
        Ответить
        • Поздравляю. Ты только что сделал за процессор его работу.
          Ответить
      • Заметь, что строку парсят, как шестнадцатеричное число.
        То есть 4 бита на символ, установлен может быть только первый из каждой четвёрки.
        Если посмотреть на константу, то проверит она [4] и [6]. Блядь, я с конца строки считаю. Всё правильно написано.
        Ответить
        • Кстати, а [4] и [6] выделить таким образом не получается (про 100_000 у меня выше бага, это [3]).

          Интересно, можно ли ма-те-ма-тически доказать, что не существует такого n, что (10**n) & 0x11111111 == 0x00001000?
          Ответить
    • короче, кто-то прогуливал скучное битоебство (которое устарело и не нужно) и сразу выучил питон
      Ответить

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