Semblable à d'autres puzzles quine (plus spécifiquement, celui-ci ), écrivez un programme qui produit la source pour lui-même.
Voici la nouvelle tournure: le code produit ne doit PAS être identique à la source. Il devrait plutôt produire un programme différent qui créera le premier.
Le défi lié à ce qui précède l'a atteint en sautant entre deux langues. Je pense que celui-ci serait fait dans une seule langue , mais les deux versions (ou plus) de la source devraient être sensiblement différentes (voir les règles ci-dessous). Avec cette contrainte, les réponses à caractère unique seraient interdites, ce qui nécessiterait un peu plus de réflexion pour une soumission finale.
RÈGLES
- Votre code doit être produit dans une seule langue. (Plusieurs soumissions, une pour chaque langue sont parfaitement acceptables.)
- Vos différentes versions de code doivent être syntaxiquement distinctes. En d'autres termes, si vous deviez dessiner un arbre de syntaxe abstrait pour votre code, il devrait y avoir au moins un nœud différent.
- La fourniture d' un AST ne sera pas nécessaire, mais si vous avez envie de fournir un pour chacun de vos programmes, il serait aider à juger.
- Vous pouvez produire autant d'itérations que vous le souhaitez, tant qu'elles restent toutes syntaxiquement distinctes. (Plus aidera votre score, voir ci-dessous.)
NOTATION
Votre score final sera la durée moyenne de tous vos programmes, divisée par le nombre de programmes.
Exemple 1:
A (source pour B) = 50 caractères
B (source pour A) = 75 caractères
Score final = 31,25
Exemple 2:
A (source pour B) = 50 caractères
B (source pour C) = 75 caractères
C (source pour A) = 100 caractères
Score final = 25
Réponses:
Python, 0 (limite de (68 + 3 n ) / (16 n ))
Si deux arbres de syntaxe abstraite sont différents s'ils ont des constantes différentes,
il y a 16 n programmes de longueur au maximum 68 + 3n, donnant un score asymptotique de 0.
Si vous souhaitez des programmes à structure variable, nous pouvons implémenter un additionneur binaire sur n bits. Ici, il y a 2 n programmes de longueur O ( n 2 ). Va dans un cycle en raison de la chute du bit de transport.
la source
pass
changera ent=n(t)
et en arrière, dans toutes les 2 ^ n combinaisons.Perl, score de 110,25
Je dois admettre que je ne suis pas très bon avec les quines. Je suis certain à 100% qu'il y a place à amélioration. La solution est basée sur le même principe que la solution Element ci-dessous.
Le premier programme est de 264 caractères.
Le deuxième programme est de 177 caractères.
Je travaille sur l'AST pour cette entrée (et l'entrée Element).
Élément , score de 47,25
Le premier programme est de 105 caractères.
Le deuxième programme est de 84 caractères.
Je suis sûr qu'il y a encore beaucoup à faire.
Dans le premier programme, il y a une chaîne (dans laquelle chaque caractère est échappé, malgré beaucoup de redondance) suivie des parties exécutables A et B. La partie A fait plusieurs choses: imprime la chaîne et s'échappe de chaque caractère, imprime la dernière moitié de la chaîne (qui est la source de la partie B), puis empêche la partie B qui la suit de faire quoi que ce soit.
Le deuxième programme est la même chaîne suivie de la partie B. La partie B est basée sur un quine simple; il imprime une chaîne précédée d'une version d'échappement de celui-ci. Cela signifie qu'il imprime la chaîne et les deux parties A et B.
la source
[]{}
, toute commande peut être placée n'importe où dans le programme entier sans provoquer d'erreur de syntaxe. Il est parfait.VBA: (251 + 216) / 2/2 = 116,75
251
216
Il est exécuté dans MSAccess pour utiliser l'
Module
objet. Le module est nommé"Q"
pour le golf. La différence de syntaxe vient duIf ... Then
manque de la version plus courte.la source
vbCrLF
àvbCr
C ++, score de 0,734194
Le code source suivant imprime une méta quine d'ordre 999 sur la console (explication ci-dessous):
La seule ligne qui change est la première ligne. La valeur de
X
sera 1000, 999, 998, ..., 3, 2, puis il recommencera. Cependant, afin d'obtenir des arborescences de syntaxe différentes à chaque fois,X
est représenté en termes de factorisation en nombre premier, où chaque nombre premier est écrit comme une somme de1
s. Les AST sont différents, car la factorisation principale des entiers est différente pour chaque valeur.Le programme s'imprimera lui-même, sauf que la première ligne est modifiée et les contre-obliques, les sauts de ligne et les retraits qui se trouvent à l'intérieur
Q(...)
seront supprimés.Le programme suivant calcule le score de ma réponse:
Il a imprimé 0.734194 sur la console. Évidemment, 1000 peut être remplacé par des entiers plus grands et le score approchera 0 comme sa limite. La preuve mathématique implique que la fonction Zeta de Riemann est quelque peu alambiquée. Je le laisse comme un exercice au lecteur. ;)
la source
JavaScript,
84,56461Deux programmes, tous deux d'une longueur de
169128122.Avant de jouer au golf, pour votre plus grand plaisir:
Renvoie le nouveau programme et sort la partie actuelle!
Je pourrais probablement le raccourcir sans la fonction regex, mais ... je ne veux pas.la source
J - (24 + 30) / 2/2 = 13,5 pts
Notez que les chaînes en J ne sont pas les anti-slash échappé, mais devis échappé à la Pascal:
'I can''t breathe!'
.Le programme 1 a AST
noun verb hook noun
et le programme 2 a ASTnoun
. Le programme 2 est une version citée du programme 1, qui renverra simplement le programme 1 lors de son exécution, donc cette méthode ne peut pas être étendue à trois copies aussi facilement: PLe programme 1 fonctionne en prenant une copie de la partie code de la source, avec une citation ajoutée à l'avant, et en ajoutant cinq de ces citations à la fin (
(,5#{.)
). Ensuite, il prend cycliquement 30 caractères de cette chaîne de 16 caractères, ce qui donne exactement le programme 2 comme résultat.la source