Vocês já brincaram com quines?

Alguém aí já ouviu falar em quines? Para quem não conhece, aqui vai um feito em Java (deve ser copiado em uma única linha):

import java.text.*;class a{ public static void main(String x[]){char b[]={34};char c[]={123};String s[]=new String[3];s[0]="import java.text.*;class a{2}public static void main(String x[]){2}char b[]={2}34};char c[]={2}123};String s[]=new String[3];s[0]={1}{0}{1};s[1]=new String(b);s[2]=new String(c);System.out.println(MessageFormat.format(s[0],s));}}";s[1]=new String(b);s[2]=new String(c);System.out.println(MessageFormat.format(s[0],s));}}

Salve o arquivo como a.java, compile, execute, e veja o que aparece!

Legal,
ele põe o código do próprio programa em algumas partes.

O código que eu pus tava com alguns erros. Eu os corrigi e editei o post acima.

Na verdade, o programa imprime o código inteiro (se estiver digitado adequadamente).

Para tirar a prova, execute a classe redirecionando a saída para um arquivo. Depois compare, por exemplo, os md5sums dos dois.

Pode explicar o porquê?

Vamos tentar destrinchar um exemplo mais simples:

class S{public static void main(String[]a){String s="class S{public static void main(String[]a){String s=;char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}";char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}

Observe que o conteúdo da string s contém todos os comandos do programa. Depurando o código, veremos que ele segue a seguinte seqüência:

[color=“blue”]1[/color]. Primeiramente, ele pega os primeiros 52 caracteres da string s, que correspondem a

class S{public static void main(String[]a){String s=

[color=“green”]2[/color]. Em seguida, ele concatena, ao trecho selecionado no passo anterior, o caracter cujo código ASCII é 34, que é o "

[color=“red”]3[/color]. Depois, ele concatena todo o conteúdo da string s, que corresponde a

class S{public static void main(String[]a){String s="class S{public static void main(String[]a){String s=;char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}

[color=“violet”]4[/color]. Em seguida, ele concatena outro caracter ", delimitando o conteúdo da string s na tela.

[color=“orange”]5[/color]. Finalmente, ele concatena o resto da string s (a partir da posição 53), que corresponde a

;char c=34;System.out.println(s.substring(0,52)+c+s+c+s.substring(52));}}

e imprime na tela a string resultante

Juntando tudo, teremos a seguinte saída (eu separei por cores a porção do texto que vai sendo adicionada em cada passo do programa, segundo a ordem que eu expliquei acima):

que é exatamente o código do programa (compare com o código no começo do post).

operador nabla, sabia que voce faz corte em grafos?