Un programme durci par rayonnement est un programme où, si un caractère du code est supprimé, le programme fonctionnera toujours de la même manière. Pour cette question, nous allons écrire un programme qui détecte quand il est irradié.
Écrivez un programme ou une fonction qui, quand un seul octet est supprimé, le programme résultant sortira cet octet et uniquement cet octet. ( Vous pouvez sortir cet octet plusieurs fois, tant que vous ne sortez aucun autre octet )
Règles:
- Le programme doit contenir au moins 2 octets distincts. (Pas de solutions de seulement 0s;)
- Peu importe ce que fait le programme d'origine
- Pas de lecture de votre propre code source.
- Le code sera noté sur le nombre d'octets distincts, où le montant le plus élevé gagne. Par exemple,
abc
= 3 points,ababba
= 2 points,abc
gagne.- Le bris d'égalité est le nombre d'octets le plus petit, suivi de l'heure de soumission antérieure
Bonne chance!
Réponses:
05AB1E ,
97 octets (Score de 3)Essayez-le en ligne!
Suppression d'un
'
Si tout est
'
supprimé,22''rr
22 sera la première chose sur la pile et'
la dernière chose sur la pile, ce qui, une fois inversé deux fois, entraînera'
.Suppression d'un
r
Si tout est
r
supprimé,22'''r
22 est la première chose sur la pile,'
la seconde sur la pile etr
la dernière sur la pile. Cecir
, cependant, a été précédé par un'
qui en fait la chaîne littérale"r"
(par opposition à la commandereverse stack
), qui est implicitement imprimée.Suppression d'un
2
Si tout est
2
supprimé, cela2'''rr
se traduira par2
être la 1ère chose sur la pile,'
être la 2ème chose sur la pile et enfinr
être la dernière chose sur la pile, qui une fois inversée entraînera2
.Par conséquent, cette réponse est valide. Sans rien retiré, il sort
'
, ce qui n'est pas pertinent. Cela fonctionne également pour tout nombre autre que 2.Créé un vérificateur de validité, vous pouvez l'utiliser pour participer à 05AB1E *.
* Je ne suis pas sûr à 100% du nombre de solutions possibles dans 05AB1E ...
Des solutions plus valables qui sont pires ou identiques
'
supérieur à 2 fonctionnera ...'''''''VV
,'''''''XX
ou'''''''<any command that pops a without pushing>x2
'
supérieur à 3 suivi par tout nombre pairs
supérieur à 1 (EG'''''''''ssss
).'''..
avec un nombre de périodes supérieur à 1 et un nombre impair'
supérieur à 2.'\\'''rr
- même idée que22'''rr
mais\
"supprimer le dernier élément de la pile".la source
'
n'est pas pertinente par les règles, comme vous le dites. Mais cela invalide l'objectif nominal de détection des anomalies, ce qui est un peu drôle.Brainfuck, Score 3
Peut ne pas être compétitif car la sortie n'est visible que via un vidage de la mémoire.
En supposant que l'entrée est vide et EOF laisse la cellule inchangée. Utilise un interpréteur qui transfère la mémoire vers une sortie, comme celle-ci .
Supprimez un plus, et la mémoire est la valeur unicode pour "+", sinon c'est la valeur unicode pour ",". C'est plus une règle que une réponse. À peu près la même chose avec "-". Abuse le fait que ces trois personnages se succèdent dans le jeu de caractères unicode.
la source
Un poirier, 256 octets distincts, 975 octets
Malheureusement, la question nécessite à peu près une solution optimale pour contenir un octet NUL quelque part (car elle doit contenir les 256 octets quelque part). Cela signifie que a) je ne peux pas vous donner un lien TIO (parce que TIO n'aime pas NUL dans les programmes, ou au moins, je n'ai pas trouvé de moyen de le taper que mon navigateur peut gérer), et b) I ne peut pas coller le programme dans Stack Exchange littéralement. Au lieu de cela, j'ai placé un
xxd
vidage hexadécimal réversible caché derrière le lien "extrait de code" ci-dessous.Afficher l'extrait de code
Explication
Ce programme se compose de trois parties identiques. (La concaténation de plusieurs parties identiques d'un programme est quelque chose d'un thème pour moi dans les programmes de durcissement aux radiations .) Chaque A Pear Tree a besoin d'une somme de contrôle quelque part pour permettre à l'interprète de savoir quelles parties du programme exécuter; il fait tourner toute partie du programme pour laquelle la somme de contrôle réussit au début avant de l'exécuter (ou s'imprime
a partridge
si aucune somme de contrôle ne correspond). Dans ce cas, nous avons une somme de contrôle sur chacune des trois parties, et donc une partie non irradiée se déplacera au début. On peut donc supposer que le programme se compose d'une partie non modifiée, suivie de deux autres parties (dont une peut avoir été modifiée).Chaque partie commence par une nouvelle ligne, puis continue avec le code suivant (j'ai ajouté des espaces et des commentaires ci-dessous):
Après cela vient une copie de chaque octet qui n'a pas été utilisé dans le programme jusqu'à présent (uniquement pour augmenter le score), et enfin la somme de contrôle. (Il n'y a pas de nouvelle ligne de fin; les pièces commencent par une nouvelle ligne mais ne se terminent pas par une.)
Il y a trois cas distincts ici:
%z
un nombre impair de fois, pour finir finalement dans la table de hachage. En fait, ce sera la seule clé de la table de hachage (car la chaîne va de après la nouvelle ligne de la deuxième partie à la fin de la troisième partie, et la table de hachage a commencé avec une seule nouvelle ligne), donc c'est ' ll vient d'être imprimé seul.<DATA>
contient chaque caractère un nombre pair de fois, donc la table de hachage aura son contenu d'origine, une seule nouvelle ligne, et cela sera imprimé.<DATA>
commence seulement la lecture de la ligne ci__DATA__
- dessous , donc il ne verra que la troisième partie. Cela a plus de cinq caractères qui apparaissent un nombre impair de fois, donc cela déclenchera le cas spécial pour imprimer une nouvelle ligne.Vérification
Une dernière chose qui doit être vérifiée pour à peu près tous les programmes A Pear Tree durcis aux radiations est de savoir si une suppression se produit au hasard pour qu'une section indésirable du code fasse une somme de contrôle correcte et fasse pivoter le code au mauvais endroit; étant donné que nous utilisons des sommes de contrôle 32 bits, cela est peu probable mais pas impossible. J'ai utilisé le script de force brute suivant pour m'assurer que cela ne se produise pour aucune suppression:
Le script de vérification confirme que ce programme fonctionne correctement.
la source
Stax , 11 octets (Score de 4)
Exécutez et déboguez en ligne!
C'est mon honneur d'avoir la première (chronologiquement) réponse à ce défi avec un score supérieur ou égal à 4. Peut-être que le score peut être encore plus élevé.
Dans Stax, un littéral de chaîne composé d'un seul caractère est écrit avec
'
, tout'', 'c, 'd, '~
comme tous les littéraux de chaîne. Les commandesc
d
et~
moyens correspondants dupliquent le haut de la pile principale, sautent le haut de la pile principale et sautent le haut de la pile principale et poussent vers la pile d'entrée, respectivement. Pour ce défi, la pile d'entrée n'affecte pas la sortie et n'est pas importante, nous pouvons donc dired
et~
sont identiques.Explication
Il est préférable de diviser le code en plusieurs parties et de les considérer séparément.
Quand il n'est pas altéré,
'''cc
pousse un littéral'
et un littéralc
vers la pile principale et duplique le haut, de sorte que la pile serait (de bas en haut)c,c,'
.Lorsqu'il n'est pas altéré,
'~~
pousse le littéral~
, puis le fait apparaître (et le pousse vers la pile d'entrée), qui est fondamentalement un no-op pour la pile principale.Lorsqu'il n'est pas altéré,
'dd
pousse le littérald
puis le fait apparaître, un autre no-op pour la pile principale.À la fin du programme, étant donné qu'aucune sortie explicite n'est effectuée, le haut de la pile principale sera implicitement imprimé.
Si le programme s'exécute tel quel, la pile finale est toujours
c,c,'
et sortirac
.Si la première partie devient
''cc
, alors nous avons un littéral'
et deux instructions de copie, la pile finale sera',','
. Étant donné que les deux autres parties sont sans opération, le résultat sera'
.Si la première partie devient
'''c
, le résultat est fondamentalement le même que celui non modifié, mais lec
n'est pas dupliqué. La pile sera doncc,'
. Après deux no-op, le haut de la pile estc
.Nous pouvons donc détecter le rayonnement dans la première partie.
La deuxième partie et la troisième partie fonctionnent exactement de la même manière. Je prendrai la troisième partie comme exemple.
Si la troisième partie est altérée, les deux premières parties sont conservées telles quelles et la pile avant d'exécuter la troisième partie est
c,c,'
Si la troisième partie devient
'd
, un littérald
est poussé vers le haut de la pile principale et rien de plus n'est fait. Le haut de la pile principale est maintenant celuid
qui sera sorti.Si la troisième partie devient
dd
, deux éléments sont extraits de la pile principale et maintenant le haut de la pile est'
et est sorti.Par conséquent, nous pouvons détecter le rayonnement dans la troisième partie. Pour la même raison, nous pouvons détecter un rayonnement dans la deuxième partie.
la source
05AB1E , score 2, 6 octets
Imprime parfois le double du caractère supprimé. Ne contient pas
'
.Comment ça marche:
Suppression du premier
„
Essayez-le en ligne!
Tout d'abord, nous poussons un littéral de chaîne vide dans la pile. Ensuite, nous poussons
„„
, qui est imprimé implicitement.Suppression d'un
"
Essayez-le en ligne!
Tout d'abord, nous poussons
""
vers la pile avec l'2-char string
instruction. Ensuite, nous essayons d'obtenir une autre chaîne de 2 caractères, mais celle-ci est abandonnée (je ne sais pas exactement pourquoi) et le""
est imprimé.Retrait du deuxième ou du troisième
„
Essayez-le en ligne!
Tout d'abord, nous poussons
""
vers la pile avec l'2-char string
instruction. Ensuite, nous poussons„
, qui est imprimé implicitement.la source
Gelée , 5 octets, score 2
Essayez-le en ligne!
Avec tout
”
supprimé:Essayez-le en ligne!
Le caractère
”
commence un littéral de caractère d'un octet. Ce programme commence par””
lequel donne la chaîne”
. Laḷ
dyade prend son argument de gauche. La chaîne est”
simplement passée à travers les deux instances deḷ
.Avec tout
ḷ
supprimé:Essayez-le en ligne!
Dans ce programme
””
donne le caractère”
puis”ḷ
donne le caractèreḷ
et seulement ceci est sorti.Autres solutions
a
ouo
auraient travaillé à la place deḷ
cette soumission.⁾⁾⁾⁾FFF
. Cela fonctionne de manière similaire.⁾
est comme”
mais il démarre un littéral de chaîne de deux octets. Les programmes "irradiés" produisent deux fois l'octet supprimé, ce qui a été jugé valide dans les commentaires.Voici une version (beaucoup moins sophistiquée) Jelly du vérificateur de validité de Magic Octopus Urn. La colonne de gauche de la sortie est le caractère supprimé et la colonne de droite est la sortie du programme résultant.
la source