Escaravelho Dourado: decifre o enigma de Allan Poe com Python

“O Escaravelho Dourado” é um pequeno conto, do escritor americano Edgar Allan Poe, publicado em 1843.

O enredo narra a história de William Legrand, supostamente picado por um escaravelho dourado. Seu servo Júpiter teme que Legrand fique louco, e com a ajuda do narrador anônimo, partem para uma aventura que envolve uma mensagem criptografada e um tesouro escondido.

Sem mais delongas, os aventureiros se depararam com a seguinte mensagem.

53‡‡†305))6;4826)4‡.)4‡);80 6;48†8¶60))85;1‡(;:‡8†83(88) 5†;46(;8896?;8)‡(;485);5

2:‡(;49562(5-4)8¶8;40692

85);)6†8)4‡‡;1(‡9;48081;8:8‡1

;48†85;4)485†528806*81(‡9;48

;(88;4(‡?34;48)4‡;161;:188;‡?;

A primeira informação é que a mensagem está em inglês. O narrador cita que, tendo decifrado inúmeras mensagens criptogradas, é essencial saber qual a linguagem em que este está escrito.

A seguir, ele faz uma contagem dos caracteres existentes.

Em Python, podemos utilizar um set para listar os caracteres únicos, como mostra o código a seguir.

strOriginal = "53‡‡†305))6;4826)4‡.)4‡);806;48†8¶60))85;1‡(;:‡8†83(88)5†;46(;8896?;8)‡(;485);5†2:‡(;49562(5-4)8¶8;4069285);)6†8)4‡‡;1(‡9;48081;8:8‡1;48†85;4)485†528806*81(‡9;48;(88;4(‡?34;48)4‡;161;:188;‡?;"

caracteres = set(strOriginal)

A seguir, podemos contar o número de vezes que cada caractere aparece na string, e imprimir o resultado:

dictCaract ={}

for ch in caracteres:
dictCaract[ch] = strOriginal.count(ch)

for i in sorted(dictCaract, key = dictCaract.get, reverse=True):
print(i, dictCaract[i])

Resultado:
8 33
; 26
4 19
‡ 16
) 16

13
5 12
6 11
( 10
1 8
† 8
0 6
2 5
9 5
: 4
3 4
? 3
¶ 2
. 1

-1

O caractere ‘8’ aparece 33 vezes, seguido pelo caractere ‘;’, 26 vezes. Em inglês, “e” é a letra mais comum, então um bom chute é considerar ‘8’ -> ‘E’. Vou utilizar maiúsculas para indicar a string trocada.

A seguir, o narrador nota que a cadeia de strings ‘;48’ aparece com grande frequência no texto, e o último caractere é “E”.

O ‘THE’ é um artigo bastante comum na língua inglesa, de modo que as substituições ‘;’ -> ‘T’, ‘4’ -> ‘H’ parecem ser um bom chute.

Em Python, é só usar a função replace:

str2 = strOriginal.replace('8','E')
str2 = str2.replace(';','T')
str2 = str2.replace('4','H')

Resulta em:

53‡‡†305))6THE26)H‡.)H‡)TE06THE†E¶60))E5T1‡(T:‡E†E3(EE)5†TH6(TEE96?TE)‡(THE5)T5†2:‡(TH9562(5-H)E¶ETH0692E5)T)6†E)H‡‡T1(‡9THE0E1TE:E‡1THE†E5TH)HE5†52EE06*E1(‡9THET(EETH(‡?3HTHE)H‡T161T:1EET‡?T

Ainda bastante ininteligível, porém, um pouco mais familiar.

Pescando algumas palavras, há um trecho assim: ‘t(ee’, que pode ser ‘tree’, indicando a substituição ‘(‘ -> ‘R’.

O trecho fica:
the tree thr‡?3h the.

A palavra ‘through’ indica novas letras ‘O’, ‘U’ e ‘G’, representadas por ‘‡’, ‘?’ e ‘3’.

No Python, letra por letra (é possível por outros meios em massa, mas assim é mais didático).

str2 = str2.replace('(','R')

str2 = str2.replace('‡','O')
str2 = str2.replace('?','U')
str2 = str2.replace('3','G')

Resultando em:

5GOO†G05))6THE26)HO.)HO)TE06THE†E¶60))E5T1ORT:OE†EGREE)5†TH6RTEE96UTE)ORTHE5)T5†2:ORTH9562R5-H)E¶ETH0692E5)T)6†E)HOOT1RO9THE0E1TE:EO1THE†E5TH)HE5†52EE06*E1RO9THETREETHROUGHTHE)HOT161T:1EETOUT

Outras pistas:
†83(88, ou †egree,

Deixando clara a palavra ‘degree’, e a substituição ‘†’ por ‘D’.

Outro trecho parcialmente traduzido fica ”TH6RTEE‘, evidentemente ‘thirteen’, ‘6’ -> ‘I’ e ‘‘ -> ‘N’.

O início, ‘5GOOD’, indica o ‘5’ como ‘A’.

Colocando todas as pistas no Python, temos:

str2 = str2.replace('†','D')
str2 = str2.replace('6','I')
str2 = str2.replace('*','N')

str2 = str2.replace('5','A')

Texto parcialmente decifrado:

AGOODG0A))INTHE2I)HO.)HO)TE0INTHEDE¶I0))EAT1ORT:ONEDEGREE)ANDTHIRTEEN9INUTE)NORTHEA)TAND2:NORTH9AIN2RAN-H)E¶ENTH0I92EA)T)IDE)HOOT1RO9THE0E1TE:EO1THEDEATH)HEADA2EE0INE1RO9THETREETHROUGHTHE)HOT1I1T:1EETOUT

Allan Poe para por aí, dizendo que o resto segue a mesma lógica, e realmente não é difícil. Por exemplo, ‘9INUTE)’ significa ‘MINUTES’; pelo contexto de direção, ‘NORTHEA)T’ significa ‘NORTHEAST’ e assim por diante.

Fechando a cifra:

str2 = str2.replace('0','L')
str2 = str2.replace(')','S')
str2 = str2.replace('2','B')
str2 = str2.replace('.','P')
str2 = str2.replace('¶','V')
str2 = str2.replace('1','F')
str2 = str2.replace(':','Y')
str2 = str2.replace('9','M')
str2 = str2.replace('-','C')

Resulta em:

AGOODGLASSINTHEBISHOPSHOSTELINTHEDEVILSSEATFORTYONEDEGREESANDTHIRTEENMINUTESNORTHEASTANDBYNORTHMAINBRANCHSEVENTHLIMBEASTSIDESHOOTFROMTHELEFTEYEOFTHEDEATHSHEADABEELINEFROMTHETREETHROUGHTHESHOTFIFTYFEETOUT

Como está sem pontuação e espaço, estes devem ser inseridos:

“A good glass in the Bishop’s hostel in the Devil’s seat — forty-one degrees and thirteen minutes — northeast and by north — main branch seventh limb east side — shoot from the left eye of the death’s-head — a bee-line from the tree through the shot fifty feet out.'”

[Um bom vidro no hotel do bispo na cadeira do diabo – quarenta e um graus e treze
minutos nordeste quadrante norte – tronco principal sétimo galho lado leste – atirai do
olho esquerdo da caveira – uma linha de abelha da árvore através o tiro cinqüenta pés
distante.]

Esta é uma cifra de substituição simples, onde cada palavra é trocada por um caracter específico. Sabendo o dicionário, é possível cifrar e decifrar uma mensagem. Cifras deste tipo são conhecidas desde o Império Romano, e são muito frágeis, bastando um ataque de contagem e força bruta, como demonstrados no conto. Atualmente, há métodos de chave assimétrica como o RSA, extremamente mais avançados. Porém, na época de Allan Poe, este era o melhor que existia, e o conto do “Escaravelho dourado” ajudou a popularizar a ciência da criptografia.

Vide o código completo no Colab: https://colab.research.google.com/drive/1l1MztHdxUHdJl1yW4NZzn1heDUvoSoJJ?usp=sharing

Visite o meu blog pessoal https://ideiasesquecidas.com/

Conto ‘Golden Bug’, de Edgar Allan Poe https://poestories.com/read/goldbug

Conto em português, “O Escaravelho Dourado”

Códigos, genética e puzzles

Algumas recomendações de livros, para quem gosta da parte de exatas.

  1. O livro dos códigos, Simon Singh.

Conta a história da criptografia, desde os primórdios até os dias de hoje.

Especialmente interessante é uma descrição detalhada de como o Enigma funcionava. O Enigma era o dispositivo de criptografia dos alemães, na Segunda Grande Guerra, e era considerado indecifrável.

Um grupo de cientistas ingleses, incluindo Alan Turing, conseguiu decifrar o Enigma, dando aos aliados uma vantagem estratégica enorme (eles conseguiram ter a confiança de que o Dia D ocorreria sem grandes problemas, por exemplo)

Link da Amazon: https://amzn.to/3kPY3DG

  1. Genética e DNA em Quadrinhos, Mark Schultz.

Eu gosto bastante do poder de simplificação e visualização de temas complexos em quadrinhos.

O livro é uma introdução divertida à genética, incluindo Gregor Mendel, Charles Darwin e a famosa dupla hélice do DNA, descoberta pela dupla Watson e Crick.

Link da Amazon: https://amzn.to/3lMhAWZ

Aproveitando, na mesma linha, Química em Quadrinhos, de Larry Gonick:
Link da Amazon: https://amzn.to/3fkbjiH

  1. Mania de Matemática, Ian Stewart.

O matemático Ian Stewart é autor de vários livros populares sobre matemática.


Neste livro, ele descreve com bastante detalhe alguns puzzles. O nível é bem alto, são puzzles difíceis.

Link da Amazon: https://amzn.to/35QmoFp

Um exemplo é a “Quadratura do Quadrado”: como cobrir um quadrado com quadrados menores, de tamanhos diferentes?

Como a “quadratura do quadrado” é um problema difícil demais, ataquei a “quadratura do retângulo” no link a seguir.

https://ideiasesquecidas.com/2019/11/15/quadraturas-do-retangulo/

Na mesma linha, tem o Mania de Matemática II:

Link da Amazon: https://amzn.to/2KnT8gF

Boa diversão!

Veja também:

https://ideiasesquecidas.com/2016/06/19/calculo-em-quadrinhos-bioquimica-em-quadrinhos/

https://ideiasesquecidas.com/2020/09/18/nietzsche-em-quadrinhos/

Satya Nadella (CEO Microsoft), sobre computação quântica

O indiano Satya Nadella é o atual CEO da Microsoft, empresa fundada por Bill Gates. Nadella foi o responsável pelas grandes mudanças recentes da empresa, como direcionar esforços para cloud (ex. o Office 365 é extremamente poderoso).

No livro “Hit Refresh”, ele cita três tecnologias disruptivas: realidade mista, inteligência artificial e computação quântica. Não à toa, a Microsoft está investindo pesado nas três áreas.

Abaixo algumas frases, sobre computação quântica.

A computação quântica nos permitirá ir além do limite da Lei de Moore – a observação de que o número de transístores num chip de computador dobra a cada 2 anos – mudando a própria física da computação como conhecemos hoje.

Uma empresa de tecnologia que perde múltiplas tendências como esta ficará inevitavelmente para trás. Ao mesmo tempo, é perigoso perseguir tecnologias futuras não testadas e negligenciar o core do negócio atual. É o clássico dilema do inovador – arriscar o sucesso existente ao perseguir novas oportunidades.

Se construir um computador quântico fosse fácil, já teria sido feito.

Ao invés de apenas 0 ou 1 como num bit clássico, qubits podem estar em superposição, que permite várias computações simultâneas. Num algoritmo quântico propriamente construído, de acordo com um de nossos cientistas, ocorre um grande massacre em que todas ou muitas das respostas erradas são canceladas.

Problemas que computadores clássicos demorariam séculos para resolver, poderiam ser resolvidos por computadores quânticos em poucos minutos ou horas. Por exemplo, os níveis atuais de criptografia. Um computador atualmente demandaria 1 bilhão de anos para quebrar o RSA-2048, mas um computador quântico conseguiria quebrar em menos de 2 minutos. Felizmente, a computação quântica também revolucionará a computação clássica e a criptografia, levando a maior segurança ainda.

Computação quântica é o Santo Graal da tecnologia.

Links:

https://www.ciodive.com/news/microsofts-ceo-nadella-ai-mixed-reality-quantum-computing/507134/

https://arstechnica.com/gadgets/2017/09/microsoft-quantum-toolkit/

Ideias técnicas com uma pitada de filosofia

https://ideiasesquecidas.com/