Bonsoir mesdames et messieurs.
Ce soir - nous avons un défi de code. Une compétition qui sera définie non pas en nombre de points (à la Asteroids) mais simplement si vous pouvez la terminer (à la Zelda). Et pour la comparaison, la quantité d'octets (euh ... mais vous avez dit ...).
Votre défi est de composer une seule quine qui se compile à la fois dans WhiteSpace et dans toute autre langue de votre choix. Les deux quines doivent avoir une sortie absolument identique (qui en tant que quine est absolument identique au code source). Votre quine doit être de plus de 3 octets.
Votre score est la taille de votre code source en octets.
Étant donné que ce défi implique WhiteSpace, veuillez échapper vos réponses afin qu'elles soient claires - de préférence dans le style C. Votre score est la source d'origine en octets - pas la version échappée.
Bonne chance.
Réponses:
Espaces et Perl,
992975 caractèresBonsoir mesdames et messieurs.
Pour commencer, voici ma soumission encodée en base64, qui me semble être la meilleure façon de communiquer un grand programme Whitespace. (Vous ne voulez vraiment pas utiliser un encodage qui laisse les blancs tels quels, il est donc inutile de sélectionner quelque chose de plus "lisible".)
Voici un extrait qui met en évidence toutes les parties visibles de la source.
⇥
est utilisé pour indiquer un onglet et↲
pour indiquer une nouvelle ligne.Perl était le choix naturel pour la deuxième langue dans ce défi, étant l'un des meilleurs langages à usage général pour écrire des quines compactes. Mon quine Perl le plus court est de 19 octets:
- et vous pouvez voir comment c'était la graine pour la moitié Perl de la double quine. En comparaison, ma meilleure quine d'espace blanc est longue de 541 octets. (Bien que les plus courts existent - 445 octets est le meilleur que j'ai vu.)
Du point de vue de l'interpréteur Perl, la première ligne du fichier source du double quine contient les deux instructions qui composent l'ensemble du programme proprement dit, car le contenu restant est deux chaînes entre guillemets. La première chaîne est la ligne répétée de Perl et est délimitée par la troisième ligne vierge. La deuxième chaîne est entièrement en blanc et s'étend de la quatrième ligne de la source jusqu'au
0
délimiteur au bas du fichier.Lorsqu'elles sont considérées comme un programme d'espaces blancs, les quatre premières lignes contiennent trois instructions qui sont largement inutiles. (Leur effet est de pousser deux valeurs nulles sur la pile, puis de rejeter la seconde.) Elles sont incluses juste pour franchir en toute sécurité les nouvelles lignes requises par le programme Perl - le vrai programme démarre ensuite. Plutôt que de citer la source illisible plus loin, voici une paraphrase des instructions qui composent le programme Whitespace, dans un format de type assembleur:
Les nombres géants en haut sont ce que nous, les utilisateurs d'espace blanc, devons utiliser à la place des chaînes réelles. Ne vous embêtez pas à essayer d'exécuter ceci sur un interpréteur Whitespace qui n'a pas de support bignum approprié.
Enfin, voici à nouveau le programme, mais cette fois avec des échappements de style C, car il a été spécifiquement demandé:
la source