Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
split and convert solution in Clear category for Bit Message by Olpag
from datetime import datetime
def checkio(data):
data = data.strip()
type_pack = (7,8,16)[int(data[1:2])//3]
date = data[2:16]
dt_chunks = [date[i:i+2][::-1] for i in range(0, len(date), 2)]
# year from 1970 to 2069
dt_chunks[0] = f'19{dt_chunks[0]}' if dt_chunks[0] > '69' else f'20{dt_chunks[0]}'
date = datetime(*map(int, dt_chunks[:-1]))
# timezone
tz = dt_chunks[-1]
timezone = (-10 * (int(tz[0],16) & 0b0111) - int(tz[1]) if int(tz,16)>>7 else int(tz)) // 4
date_str = f'{date:%d %b %Y %H:%M:%S} GMT {timezone:+}'
length = int(data[16:18], 16)
content = data[18:]
hex_bytes = [content[i:i+2] for i in range(0, len(content), 2)]
bin_string = ''.join([f'{int(b, 16):08b}'[::-1] for b in hex_bytes])
N = type_pack
unpacked = [bin_string[i:i+N][::-1] for i in range(0, len(bin_string), N)]
decoded = ''.join(chr(int(ch[8:] + ch[:8], 2)) for ch in unpacked)[:length]
return [date_str, length, decoded]
May 31, 2021