Peut être en avez-vous déjà entendu parler, vu des bouts de code étranges...
Une quine est un programme qui s'écrit lui-même sur la sortie standard. Autrement dit, l'exécution du programme affiche le code source du programme.

Quelques règles structurent ce jeu à priori trivial, la principale étant bien sûr l'interdiction d'accéder au fichier contenant le code source ! Y a des limites à la facilité, namého.
Une fois muni de cette contrainte, le jeu devient nettement plus intéressant.
L'approche de base étant bien entendu de mettre le programme dans une variable de type chaîne de caractères. Le problème ? Que met-on au moment de redéfinir la variable dans le String ? Si on recopie le programme, on obtient un programme de taille infinie ! (e.g. var i:String="var i:String=\"var i:String="). Il faut donc ruser pour écrire sa quine ! Et n'abandonnez pas : si votre langage est Turing Complet (comme la quasi totalité des langages), vous pouvez faire une quine avec.

Ci-dessous, quelques exemples de quine.

Je présente ici deux exemples de quine, vous en trouverez une liste bien plus complète (mais toujours aussi peu exhaustive) sur The Quine page.

En JAVA

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));
	}
}

Ici l'astuce consiste à encoder le guillemet (034) sous forme de Char et à s'en resservir. Comme vous le devinez aisément, le caractère 52 du string s est au niveau de la définition de s dans s (oui, je me comprends).
Notons l'ajout de sauts de lignes et des tabulations ici pour faciliter la lecture du code, mais normalement la quine se présente sur une seule ligne.

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));}}

En JAVASCRIPT

unescape(q="unescape(q=%22*%22).replace('*',q)").replace('*',q)

Que dire ? Le caractère %22 est bien entendu le ". On remplace ensuite toutes les * par la variable.

En FRANÇAIS

recopier puis recopier entre guillemets la phrase "recopier puis recopier entre guillemets la phrase".

Ici, c'est le lecteur qui sert de compilateur ;)