Scénario
Un de vos amis a du mal à faire ses devoirs. Il a besoin d’un programme simple qui affiche les 404 premiers nombres naturels:
1 2 3 4 5 6 7 8 9 10 11 ... 401 402 403 404
Votre défi est simple: écrivez ce programme pour lui.
Cependant, votre connexion est terrible, donc 1 caractère aléatoire est perdu chaque fois que vous envoyez le programme. Pour éviter que cela ne casse votre programme, vous devez faire en sorte que la suppression d' un seul caractère n'ait aucun effet: le programme fonctionne, peu importe. (Le programme original doit également fonctionner.)
Comme la connexion est trop faible pour envoyer des fichiers volumineux, votre code doit être aussi court que possible.
TL: DR - crée un programme de radiocommunication pour sortir les nombres de 1 à 404
Règles / Détails
- Le résultat peut être une liste d'entiers dans un format raisonnable (séparés par des espaces, des nouvelles lignes, des virgules, etc.). Cependant, votre sortie doit être cohérente et ne pas changer lorsque le programme est modifié.
- Les indicateurs de ligne de commande contenant de la logique, l'exécution du code réel, la génération de la liste de numéros, etc. sont interdits.
- C'est du code-golf , donc la soumission la plus courte (en octets) gagne!
Réponses:
05AB1E , 12 octets
Code:
Explication de code normale:
Cela conduit au code golfé suivant:,
X404Ÿ
ce que nous voulons atteindre.Le nombre 404 est généré par l'une des variantes suivantes:
La plage inclusive fonctionne comme suit sur deux nombres:
Ce qui rend toujours la seconde
Ÿ
un non-op .Utilise le codage CP-1252 . Essayez-le en ligne!
la source
JavaScript, 228 octets
Explication
L'évaluation du code dans a
setInterval
permet au programme de continuer même s'il y a une erreur. Nous nous assurons que le code transmis générera une erreur si un seul caractère est supprimé. La syntaxe de la chaîne de modèle peut être utilisée pour appelersetInterval
avec une chaîne constante sans parenthèses. Heureusement, même si la chaîne de modèle se trouve sur la ligne suivante, elle est toujours analysée comme un appel de fonction avec une telle syntaxe.Le premier problème que nous rencontrons est qu’il
setInterval
s’agit d’une fonction. Par conséquent, si un personnage est supprimé et que le programme essaie d’appeler à lasetInteval
place, il se trompera. Bien sûr, comme il y a deux invocations identiques dusetInterval
, nous n'avons pas à nous soucier de son fonctionnement correct tant que nous évitons l'erreur. Ainsi, la première ligne définit chaque "faute d’orthographe" possiblesetTimeout
en une fonction valide.La première ligne fonctionne en attribuant toutes ces "fautes d'orthographe" à la fonction
top=>4
. Notez la syntaxe ES6, cela prend simplement un paramètre nommé "top" et renvoie 4. Pourquoi "top"? Eh bien, la première ligne ne doit jamais générer d'erreur, même si un personnage est supprimé. Si un=
est supprimé pour fairetop>4
, cette expression booléenne sera valide cartop
est prédéfinie dans les navigateurs, cédant simplementfalse
. Si le 4 est supprimé, le corps de la fonction devient simplement le premiersetInterval
segment et le second fonctionne sans dommage.Maintenant, tout ce qui reste à s’inquiéter, c’est si un `est supprimé.
Si elle est retirée dès le début,
setInterval
ne fait simplement rien, s’évaluant comme sa propre expression. Ensuite, le reste de la deuxième ligne exécute simplement une seule itération de la boucle, laissant l'autresetInterval
fragment terminer le travail. Si retiré de la fin, le backtick restant est repris à la fin du commentaire.Les nouvelles lignes sont placées de manière à ce que la suppression n’affecte pas le comportement du programme, mais évite les erreurs lors de certaines suppressions de caractères telles que le backtick principal.
la source
405
était supprimé, mais je me suis rendu compte alors: rien, soit tous les 404 numéros ont déjà été imprimés, soit la seconde boucle imprimera les numéros manquants. Un travail spectaculaire.this
?Pyth - 16 octets
L'idée de base est que lorsque vous enlevez un chiffre
404
, cela ne fait que réduire le nombre. Nous devons donc obtenir le maximum de deux404
pour avoir le bon nombre. De toute évidence, il y a beaucoup plus de licenciements.Explication:
Essayez-le en ligne ici .
la source
Befunge-98 , 37 octets
Essayez-le en ligne!
Explication
Créer du code durci avec les radiations dans Befunge-98 n'est pas si mal que ça, car vous pouvez régler le "delta" (c'est-à-dire la taille de pas du pointeur d'instruction) manuellement avec
x
. Donc, si vous définissez le delta sur(2,0)
, à partir de là, tous les autres caractères sont ignorés et nous pouvons simplement doubler toutes les commandes. La difficulté est2 0
d’atteindre le sommet de la pile de manière fiable. Nous aurons besoin0 2 0
du reste pour que le programme fonctionne correctement, mais nous le ferons gratuitement. Voici comment nous faisons cela:Notez que chaque chiffre se répète, donc dans le programme complet, il y aura un début
2 0
que nous ignorerons tout simplement.Par conséquent, supprimer le premier ou le second caractère du programme n'a aucune importance, car nous n'utiliserons pas ces chiffres de toute façon. De même, supprimer le troisième caractère est identique à supprimer le deuxième, nous n’avons donc pas à nous en préoccuper.
Considérons ce qui se passe dans les deux autres cas. Lâcher le quatrième personnage:
Notez que le delta est défini sur
(0,0)
. Mais cela ne déplace pas du tout le point d’instruction, la même chosex
est exécutée immédiatement et cette fois-ci apparaît(2,0)
et tout va bien (il existe des zéros implicites au bas de la pile pour nos besoins ultérieurs).Laissons le cinquième caractère à la place:
Maintenant, le delta est réglé sur
(0,2)
. Cependant, il n'y a toujours pas de mouvement horizontal. Par conséquent, l'adresse IP est renvoyée immédiatementx
et le delta correct est défini.À partir de ce moment, nous pouvons pratiquement ignorer la duplication de caractères ainsi que cette partie initiale car elle sera toujours ignorée:
Le
;
est une sorte de commande de commentaire qui ignore tout jusqu'à la prochaine;
rencontre. Cependant, nous sautons par-dessus le premier,;
de#
sorte que seule la partie entre le;
sera exécutée à partir de ce point.la source
> <> ,
1036051 octetsTesté ici.
Utilise la même tactique que ce programme . Si un caractère est supprimé dans la première ligne, la deuxième ligne sera toujours exécutée. Si un caractère de la 2ème ligne est supprimé, le
v
déplacement de l'exécution sur la 3ème ligne, car la 2ème ligne est un caractère plus court. Une suppression dans la 3ème ligne n’a aucun effet sur le contrôle du programme, car elle n’est exécutée qu’après une suppression dans la ligne 2.Le programme fonctionnera également dans le cas où un saut de ligne est supprimé:
Cas 1:
La 2ème ligne sera exécutée.
Cas 2:
Les deux lignes deviennent une ligne avec deux fois les instructions.
Explication:
Le noyau du programme est le suivant. Notez que a
1
est déjà poussé sur la pile par la première ligne.la source
o" e"
?+1
vous pouvez utiliserl
. De plus, l'interprète fishlanguage.com est un peu bizarre (et ennuyeux à utiliser, bien que la fonctionnalité de débogage soit utile bien sûr). TIO utilise l'interpréteur Python un peu plus sain1
s de la première ligne.> <> ,
42 3834 octetsEssayez-le en ligne!
Merci à @Martin Ender et @Teal Pelican pour avoir réduit de 8 octets!
Similaire à la réponse de mbomb007 , mais n'utilise que 2 lignes.
Au lieu de compter de 1 à 404 en utilisant une seule valeur de mémoire, j'ai continuellement poussé la longueur de la pile. Cela a fait en sorte que je n'ai rien eu à mettre sur la pile avant le début de la boucle, ce qui facilite beaucoup les choses.
Le code d'origine
Les
<
s tourner la propriété intellectuelle autour, et/
est un non-op, comme l'IP s'enroule autour et continue son chemin le long de ce normal. Ainsi, le code pertinent est:Et cela se répète.
La suppression
La grande clé ici est le miroir
/
. Cela ne fait rien si la deuxième ligne est modifiée - elle ne fait que revenir à elle-même et est essentiellement un no-op. Mais si un caractère de la première ligne est supprimé, la ligne sera rétrogradée, de sorte que le miroir heurte la flèche<
et aboutisse à une boucle identique non modifiée.La seule autre suppression significative serait le
\n
personnage. Ceci est également pris en compte, car il produit ce code:Nous venons d’ajouter une copie de la boucle originale
;?=*4o" e"lnll
à elle-même. Comme il s'agit d'une boucle, l'exécution ne fait aucune différence et fonctionne comme si rien n'avait changé.la source
:+1
et l'autre:
par unl
chacun.;?=*4o" e"n:ll
fonctionne aussi.Un poirier , 34 octets
Le programme contient des caractères de contrôle, alors voici un
xxd
cliché:Un poirier est fondamentalement un dérivé de Perl, avec quelques fonctionnalités "intéressantes". Je l'ai jeté comme une blague (pour pouvoir dire que mon polyglotte est imprimé
a partridge
dans A Pear Pear; en fait, presque tous les programmes le font). Cependant, c'est Turing-complet, et en fait assez bon pour ce genre de défi.La fonctionnalité qui nous importe le plus ici est qu'un poirier n'exécutera un programme que si une sous-chaîne du code a un CRC-32
00000000
. Le code est tourné pour mettre la sous-chaîne en question au début. En fait, les deux moitiés (identiques) du code ont chacune le CRC-32 en question (en raison de ce commentaire binaire à la fin suspect), donc si vous supprimez un caractère de la source (brisant le CRC), l'autre moitié est tournée au début et le#
panneau vers la fin commentera la moitié endommagée, en plus de la malbouffe binaire.Une autre fonctionnalité rend le programme légèrement plus petit: bien que A Pear Pear soit principalement interprété en Perl, il comporte quelques modifications mineures qui le rendent plus proche de Python. Ce qui est pertinent ici est que, contrairement à la
print
déclaration de Perl (qui ne fait que mettre les chiffres ensemble), laprint
déclaration de A Pear Tree sépare les arguments avec des espaces et affiche un retour à la ligne final. Cela nous donne une sortie joliment séparée, ce qui nous évite de gaspiller des octets lors du formatage. (Notez que vous ne devez entrer aucune information dans le programme; si la langue en reçoit, elle suppose par défaut qu’elle est supposée en faire quelque chose.)Bien sûr, cela ne peut pas rivaliser avec les langues de golf réelles (et je ne m'y attendrais pas), mais je pensais que les gens pourraient trouver cela intéressant.
la source
Befunge 98 , 34 octets
Essayez-le en ligne!
Cela fonctionne de manière très similaire à ma réponse> <> , mais au lieu du miroir
/
, j'utilise l'opération de rotation à gauche[
, puis l'inverse de la direction IP, qui est fonctionnellement équivalente à un miroir dans ce cas.Le code d'origine
La suppression
Si quelque chose dans la deuxième ligne est supprimé, cela changera et n'affectera pas du tout le haut.
Si quelque chose dans la première ligne est supprimé, le
[
va envoyer l'adresse IP dans le<
, ce qui lance une boucle identique (à l'exception de2j^^
ce qui évite le^
s utilisé en tandem avec le[
)Comme il y a 2 nouvelles lignes, cela n’a aucune incidence sur le code s’il est supprimé (merci à @ masterX244 pour cela!)
la source
Befunge-93,
5451 octetsMerci à Mistah Figgins de m'avoir sauvé 3 octets.
Essayez-le en ligne!
C'est essentiellement le même truc que celui utilisé dans le défi Hello World tolérant aux pannes . La première ligne commence par s'assurer qu'il y a un 1 en haut de la pile pour le début de la séquence, puis une des
v
flèches à la fin de la ligne redirige le chemin du code au début de la routine principale sur la ligne 2 , exécutant de droite à gauche.Supprimer un caractère de la première ligne ne fera que déplacer les
v
flèches de un, mais cela permet toujours au code de rediriger avec succès vers la deuxième ligne. Si vous supprimez un caractère de la deuxième ligne, la<
flèche située à la fin de la ligne se déplacera hors du chemin situé au-v
dessus de celle-ci, de sorte que le chemin du code sera redirigé vers la routine de sauvegarde de la ligne 3.Supprimer la première ligne ne fait pas de mal car cela ne fait que déplacer la troisième ligne pour remplacer la deuxième. Et supprimer quoi que ce soit après la fin de la deuxième ligne n'aura aucun effet, car il ne s'agit que du code de sauvegarde.
la source
The first line starts by making sure there is a 1 on the top of the stack...
La première ligne est assez sûre d'elle à cet égard. En outre, vous pouvez raccourcir le <code> _ @ #!</code> to
_ @ # - `et mettez-le avant l'impression pour économiser 3 octets.JavaScript + HTML + extraits de pile,
167158154 octetsAbuser du fait que JavaScript dans Stack Snippets soit placé dans une page Web à l'intérieur d'un
<script>
élément.la source
En fait , 18 octets
Est en fait une langue de golf à base de pile.
Explication des commandes impliquées (car elles fonctionnent dans le contexte ci-dessus):
la source