Malbolge

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Wikitext.svg
Este artigo ou seção precisa ser wikificado (desde maio de 2012).
Por favor ajude a formatar este artigo de acordo com as diretrizes estabelecidas no livro de estilo.

Malbolge é uma linguagem de programação esotérica inventada por Ben Olmstead em 1998, cujo nome veio do oitavo círculo do Inferno na Divina Comédia de Dante Alighieri.

A maior característica de Malbolge é que ela foi especialmente desenhada para ser a pior linguagem de programação possível (a mais difícil e mais esotérica). Porém, muitos truques usados para complicá-la podem ser simplificados e entendidos.

Um pouco Mais da Linguagem

1. Introdução:

Criada por Ben Olmstead em 1998, e ganhou esse nome baseado no filme Inferno de Dante. Seu grande diferencial é ter sido desenvolvida para ser a pior linguagem possível para se programar, e o trabalho de seus desenvolvedores é torná-la o mais impossível de ser entendida pelos seus programadores.

2. Fatos da programação:

Malbolge é tão difícil de ser entendida que somente depois de dois anos de ter sido inventada que surgiu seu primeiro programa. Por sinal, não foi criado por um humano, mas sim por um algoritmo baseado em LISP, desenvolvido por Andrew Cooke.

Continuando, no dia 24 de Agosto de 2000, Anthony Youhas garantiu ter dominado a linguagem depois de ter conseguido criar três programas que conseguiam apenas imprimir várias frases diferentes!

Dizem inclusive que levaria anos para se implementar uma simples instrução de repetição em Malbolge...

3. Implementando o Hello World!

Hello World é o algoritmo que normalmente implementamos pela primeira vez quando estudamos uma linguagem nova: nós fazemos o computador mostrar na tela a frase "Hello World". Apenas isso.

Esse seria o código pra fazer, em Malbolge, o Hello World: Código:

(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk** 
hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O< 

4. Dados sobre a linguagem:

Basicamente, o Malbolge utiliza três registradores, que funcionam como variáveis: a, c, d. Elas iniciam com valor zero, onde c recebe a instrução que irá ser processada no momento, e d recebe um endereço de memória específico das operações implementadas.

Possui 59049 locações de memórias virtuais que podem armazenar números de dez dígitos. A primeira parte dessas locações recebem o programa, e as restantes são preenchidas por dados de uma instrução chamada Crazy Operation, que recebem os endereços anteriores ([m] = crz [m - 2], [m - 1]) e realizam operações imediatas que repetem os endereços de memória 12 vezes (já que os dígitos individuais ternários se repetem a cada três ou quatro endereços, dando no total um grupo de endereços 12 vezes repetidos igualitariamente).

5. Instruções:

Malbolge possui 8 instruções, que funcionam a partir do valor que foi atribuído no registrador c. Em seguida, adiciona um valor de acordo com a instrução e subtrai por 94 até o número respectivo ser menos que 94. De acordo com o valor retornado, o interpretador Malbolge retornará a seguinte resposta:

4: O valor que está guardado no endereço de memória d será somado com um e e alí executará a dada operação.

5: Imprime o valor ASCII armazenado na variável a.

23: Adiciona o código ASCII da tecla pressionada na execução do algoritmo em a.

39: Rotaciona o valor que estiver armazenado em D em um dígito (por exemplo, se for o numero 000111254 ele retorna 400011125) e o armazena tanto em d quanto em a.

40: Copia o valor armazenado em d e envia para d em forma de endereço de memória.

62: Realiza a Crazy Operation (que veremos logo abaixo) com o valor armazenado no endereço de memória d e com a e o armazena nos dois registradores.

68: Não faz nada.

81: Termina de executar o algoritmo.

Terminado de executar, o interpretador criptografa as instruções para que não realize a mesma função futuramente, e torne toda a tarefa de criação do algoritmo mais complexa.

5.1 Crazy Operation:

Pega dois valores ternários de dez dígitos e retorna os valores de acordo com a seguinte tabela ternária, como no exemplo:

Se executarmos a crazy operation crz 0001112220, 012012012, teremos como retorno o valor 1001022211, como na tabela:

///0 1 2 0 1 0 0 1 1 0 2 2 2 2 1

De forma bem simples, você compara cada digito individualmente e compara com o que está demonstrado na tabela. Por exemplo, se o crz 0001112220, 012012012 é esse, comparamos primeiro o 0001112220 com 012012012 em negrito e vemos na tabela qual o valor que será retornado:

///0 1 2 0 1 0 0 1 1 0 2 2 2 2 1

Simples demais, não?

5.2 Encriptação:

Depois de executar uma instrução, o que foi armazenado em C será subtraido repetidas vezes por 94, até seu resultado ser menor que 94. Em seguida, pode ser criptografada em dois métodos (só demonstraremos um pelo fato do segundo exigir atenção de uma tabela gigantesca):

Método 1: Retorna o seguinte trecho criptografado a partir do valor ASCII armazenado em c:

Código: 0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123


9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@5z]&gqtyfr$(we4{WP)H-Zn,[%\3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb

Ligações externaseditar | editar código-fonte

Ícone de esboço Este artigo sobre programação de computadores é um esboço. Você pode ajudar a Wikipédia expandindo-o.









Creative Commons License