Как перевернуть последовательность бит в двоичном представлении? - PullRequest
2 голосов
/ 22 апреля 2019

У меня есть такая строка BGGBG .Теперь я должен перевернуть все BG на GB . В этой строке есть два BG s. Теперь, если я хочу представить его как двоичный (принимая B= 0 и G = 1) тогда это будет 01101 .Так что от этого хочется перевернуть 01 до 10 .Возможно ли это сделать?если да Как это можно сделать в Python ?

FYI : это не просто переключение битов (0к 1 и наоборот). Скорее это связано с переворачиванием паттерна (например, 01 в данном случае).

Я знаю, что мог просто использовать str.replace () вот так:

string=string.replace("BG","GB") # will replace all BG to GB

На самом деле это может быть достойным подходом для решения этой проблемы здесь, в codeforces.https://codeforces.com/problemset/problem/266/B

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Если ваша двоичная строка находится в bg: это устанавливает mask в 1 только в позициях, где bg имеет 01. 1 удваивается в flip, и XORd с оригиналом, чтобы получить результат:

>>> bg = 0b00011011
>>> mask = bg & (~bg>>1)
>>> flip = mask|mask<<1
>>> result = bg ^ flip
>>> bin(result)
'0b00101101'
2 голосов
/ 22 апреля 2019

Я не утверждаю, что это лучший, самый устойчивый или даже приемлемый способ сделать это, но писать это было весело.Я надеюсь, что это приблизит вас к решению того, что вы пытаетесь решить:

import re

# I’m assuming that the string is "((BG)*(GB)*)*"
# any other characters will make this fail
input = 'BGBGBGGBGBGB'
output = ''

for two in re.findall('..', input):
    output += int.to_bytes(int.from_bytes(two.encode(), 'big') ^ 1285, 2, 'big').decode('ascii')

print(input)
print(output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...