Je voulais tromper un ami en lui donnant une quine qui fonctionnait presque , mais qui devenait de plus en plus bâclée.
Créez un programme qui, une fois exécuté, produira le programme, mais un caractère désactivé. Un caractère peut être ajouté, supprimé ou les deux (un caractère change). Mais un seul personnage.
Votre score sera (length of your program) / floor(sqrt(number of times the program almost quines))
(Où / 0
est l'infini)
number of times the program almost quines
est le nombre de fois que votre programme s'exécute sans changer qu'un seul caractère dans stdout. Votre programme peut ne pas accepter d'entrée. Il peut également ne pas imprimer un programme qu'il a déjà imprimé.
Vous ne pouvez pas non plus ajouter un caractère que vous avez déjà ajouté auparavant, ni supprimer un caractère du même index. Par exemple, si vous avez ajouté 1
auparavant et que vous ajoutez à 1
nouveau, c'est là que number of times the program almost quines
s'arrête. Si vous supprimez le premier caractère, vous ne pouvez plus supprimer le premier caractère. Si vous avez changé le troisième caractère en a 2
, vous ne pouvez pas ajouter 2
ou supprimer le troisième caractère.
Réponses:
CJam, 0.000884
Ici, indique le caractère non imprimable avec le point de code 128. Essayez-le en ligne.
Idée
Cette approche ajoute tous les caractères UCS (spécification d'origine) avec des points de code compris entre U + 4000000 et U + 7FFFFFFF à la chaîne initialement vide qui suit le bloc de code.
Nous choisissons UTF-8 , qui encode chacun de ces caractères en utilisant une chaîne de 6 octets comme suit:
Ainsi, nous pouvons encoder le nième caractère de cette plage en calculant ses 6 chiffres les moins significatifs en base 64 et en ajoutant 252 aux plus significatifs et 128 aux autres.
Notation
Il y a
2 ** 31 = 2,147,483,648
6 caractères UTF-8 octets et la longueur du code original est de 39, donc le score est39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806
.Comment ça fonctionne
la source
CJam, 46 octets, 65504 add, 65505 del, Score 0.127424
Testez-le ici.
La forme de base est un quine CJam généralisé standard. Pour "quine quine", il y a un commentaire
e#
à la fin du bloc de la quine, où je peux librement ajouter des caractères sans affecter le code. Notez que le commentaire contient initialement un seul espace.Le programme continue à ajouter des caractères à l' avant du commentaire, à partir de
!
puis aller dans l' ordre de la valeur ASCII. Les codes de caractères de CJam s'enroulent après 2 16 donc à un moment donné, cela ajoutera un octet nul. Une fois que cela se produit, le programme commence à supprimer les octets de la fin du commentaire (de sorte que la position du caractère supprimé est toujours différente) jusqu'à ce que le commentaire soit vide.la source
CJam, 19 octets, 65536 add, 0 del, Score 0,074219
Plus c'est simple, mieux c'est.
la source