Codificador e decodificador

Programar

Todos deveriam aprender a programar. Vejam só que interessante o ocorrido ontem e como programar é muito legal.

Ontem foi o meu aniversário (uhuuu!)
Eu recebi uma mensagem de congratulações codificada no formato binário e precisei decodificar e codificar uma resposta.

A mensagem foi esta:
01010000 01100001 01110010 01100001 00100000 01101110 11100011 01101111 00100000 01110000 01100101 01110010 01100100 01100101 01110010 00100000 01101111 00100000 01100011 01101111 01110011 01110100 01110101 01101101 01100101 00100001 00100000 01000110 01100101 01101100 01101001 01111010 00100000 01000001 01101110 01101001 01110110 01100101 01110010 01110011 11100001 01110010 01101001 01101111 00100001

Resolvi fazer o meu decodificador em python. O bacana da linguagem é que eu posso fazer da forma imperativa ou declarativa. Resolvi fazer da forma preguiçosa, digo, declarativa.

s = '01010000 01100001 01110010 01100001 ...'
l = s.split(' ')
print( ''.join( map(lambda x: chr(int(x, 2)), l) ) )

Agora vamos abrir um pouco esse lambda:

int(x, 2) -> converte uma string em inteiro, base 2 (binária)
chr(…) -> converte um número para o seu caractere correspondente. Ex: 65 = A, 66=B, etc.
map( lambda x: função, lista ) -> para cada item da lista, sendo esse item x, execute a função e retorne uma lista com esses itens resultantes mapeados.”.join( lista ) -> junte os itens da lista, separados por vazio ( ” )

Ao final, acabei separando em duas funções para facilitar a vida e ficou dessa forma:

def from_bin(s):
	l = s.split(' ')
	return ''.join( map(lambda x: chr(int(x, 2)), l) )
def to_bin(s):
	return ' '.join( map(lambda x: format(ord(x), 'b'), s) )

Quem tiver interesse de aprender a programar, segue uma pequena lista de links interessantes:

  • CodeAcademy – https://www.codecademy.com/pt
  • KhanAcademy – https://pt.khanacademy.org/computing/computer-programming
  • Python – http://wiki.python.org.br/AprendaProgramar

Por enquanto é só.
Comentários são bem vindos !

Leave a Reply

Your email address will not be published. Required fields are marked *