Inspiré de l' hyperprogrammation: N + N, N × N, N ^ N tout en un .
Merci à @MartinEnder et @trichoplax pour leur aide dans le bac à sable.
Définitions
Hyperquines
Définissez une hyperquine d'ordre n comme un programme complet ou une fonction P de type quine qui satisfait toutes les règles qui s'appliquent aux quines appropriées et, en outre, a la structure suivante.
P est la concaténation des caractères ‡ groupes qui sont constitués de n copies du même caractère. Lorsque P est exécuté, la sortie est la concaténation des mêmes groupes, augmentée d'une copie de plus du caractère.
Exemples
Dans un langage de programmation hypothétique où le code source
aabbcc
génère la sortieaaabbbccc
, ce programme constitue un hyperquine d'ordre 2 .La définition n'exige pas que les caractères des différents groupes soient différents.
Si le code source
aabbcc
génère la sortieaaaabbbbcccc
, le programme est un hyperquine d'ordre 1 ; le code source se compose de six groupes de caractères uniques, la sortie de six paires de caractères.Dans GS2 , le programme vide s'imprime
\n
et le programme\n
s'imprime\n\n
. Cependant, les hyperquines\n
ne le\n\n
sont pas non plus, car elles ne satisfont pas à toutes les propriétés des quines appropriées ; aucune partie du code source n'encode une partie différente de la sortie.
Chaînes hyperquines
Définissons une chaîne hyperquine de longueur n comme une séquence finie de n programmes complets ou n fonctions
(P 1 ,…, P n ) qui satisfait les contraintes suivantes.
Les sorties de P 1 ,…, P n-1 sont respectivement P 2 ,…, P n .
P 1 ,…, P n sont des hyperquines.
Les ordres de P 1 ,…, P n forment une séquence strictement croissante d' entiers adjacents .
Enfin, définissons une chaîne hyperquine infinie comme une séquence infinie de programmes ou fonctions complets (P 1 , P 2 ,…) de sorte que chaque intervalle initial (P 1 ,…, P n ) constitue une chaîne hyperquine de longueur n .
Exemples
Dans un langage de programmation hypothétique où le code source
aabbcc
génère la sortieaaabbbccc
, qui, à son tour, génère la sortieaaaabbbbcccc
, la paire (aabbcc
,aaabbbccc
) constitue une chaîne hyperquine de longueur 2 .Notez que
aaaabbbbcccc
- la sortie de la dernière hyperquine de la chaîne - n'a pas à produire une sortie spécifique; il n'a même pas besoin d'être du code source valide.En reprenant l'exemple précédent, si
aaaabbbbcccc
génère la sortieaaaaabbbbbccccc
, le triplet (aabbcc
,aaabbbccc
,aaaabbbbcccc
) constitue une chaîne de longueur hyperquine 3 .Si cette tendance se poursuit toujours, la séquence (
aabbcc
,aaabbbccc
,aaaabbbbcccc
, ...) constitue une chaîne hyperquine infinie.La paire de programmes (
abc
,aabbcc
) avec des sorties (aabbcc
,aaaabbbbcccc
) n'est pas une chaîne hyperquine, puisque les ordres des hyperquines sont tous les deux 1 , donc ils ne forment pas une séquence strictement croissante.La paire de programmes (
aabbcc
,aaaabbbbcccc
) avec des sorties (aaaabbbbcccc
,aaaaabbbbbccccc
) n'est pas une chaîne hyperquine, puisque les ordres des hyperquines sont 1 et 4 , donc ils ne forment pas une séquence d'entiers adjacents.
Règles
Tâche
Dans un langage de programmation de votre choix, écrivez une chaîne hyperquine non triviale, c'est-à-dire une chaîne composée d'au moins 2 hyperquines.
Comme d'habitude, vos programmes ne peuvent prendre aucune entrée ni accéder à leur propre code source sous quelque forme que ce soit.
Si votre interprète imprime une nouvelle ligne implicite, vos hyperquines doivent en tenir compte.
Toutes les failles standard - en particulier celles liées aux quines - s'appliquent.
Notation
La chaîne hyperquine la plus longue gagne. Si deux soumissions ou plus sont liées, la soumission parmi celles qui commence par l'hyperquine la plus courte (mesurée en caractères ‡ ) l'emporte. Comme d'habitude, le temps d'affichage est le dernier bris d'égalité.
‡ Vous devez utiliser le même codage de caractères pour le code source, la sortie, le nombre de caractères et l’exécution. Par exemple, le programme Python print 42
n'est pas une soumission UTF-32 à 2 caractères, car l'interpréteur traite chaque octet comme un seul caractère. Si la langue de votre choix n'est pas basée sur des caractères, traitez tous les octets individuels comme des caractères.