Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import argparse
- import regex as re
- from math import log2
- from bitstring import BitArray
- pad_str = 'ВАЩЕ'
- syms = (
- 'ПУК',
- 'СРЕНЬК',
- 'ХРЮК',
- 'УИИИ',
- 'ЛАХТА',
- 'ЛИБЕРАХА',
- 'ХОХЛЫ',
- 'СВИНОСОБАКА',
- 'ШВАЙНОКАРАСЬ',
- 'ЛОЛ',
- 'КЕК',
- 'АБУ',
- 'ДВАЧ',
- 'ПАРАША',
- 'ПОРИДЖ',
- 'ХРЮЧЕВО',
- 'СВИН',
- 'ПЕРДИКС',
- 'ПЫНЯ',
- 'ЧАЮ',
- 'ШУЕ',
- 'ЛЕВАК',
- 'ПРАВАК',
- 'КОМИГЛИСТ',
- 'ШВЯТЫЕ',
- 'ВАТА',
- 'ВОЛОДИН',
- 'ДОЛБИЛЬНЯ',
- 'ПЕРЕФОРС',
- 'КУНЧИК',
- 'АВАТАРКА',
- 'АНАЛЬЧИК'
- )
- keys_len = int(log2(len(syms)))
- syms_encode = {format(i, f'0{keys_len}b'): syms[i] for i in range(0, len(syms))}
- syms_decode = {v: k for k, v in syms_encode.items()} | {pad_str: ''}
- def decode(string):
- ba = ''.join([syms_decode[s] * int(c and c or 1) for (c, s) in re.findall(r'(\d*)(\w+)-?', string)])
- pad_len = (len(ba) % 8)
- ba = ba[:-pad_len]
- return BitArray(f'0b{ba}').bytes.decode()
- def encode(string):
- def join(l):
- result = [l[0]]
- last = None
- for e in l[1:]:
- if last == e:
- result[-1] += e
- else:
- result.append(e)
- last = e
- return result
- ba = BitArray(string.encode()).bin
- pad_len = keys_len - (len(ba) % keys_len)
- ba = ba + ('0' * pad_len)
- return '-'.join([f'{len(g) // keys_len > 1 and len(g) // keys_len or ""}{syms_encode[g[:keys_len]]}' for g in join(re.findall(f'([01]{{{keys_len}}})', ba))] + [pad_len and pad_str or ''])
- if __name__ == '__main__':
- parser = argparse.ArgumentParser(description='Encode and decode 2ch.hk fart code.')
- parser.add_argument('string', metavar='string', type=str,
- help='string for process')
- function = parser.add_mutually_exclusive_group(required=True)
- function.add_argument('-d', '--decode', dest='function', action='store_const',
- const=decode, help='decode string')
- function.add_argument('-e', '--encode', dest='function', action='store_const',
- const=encode, help='encode string')
- args = parser.parse_args()
- print(args.function(args.string))
Add Comment
Please, Sign In to add comment