Votre tâche consiste à écrire un programme informatique non vide composé d'une séquence d'octets. Si nous choisissons un octet particulier dans le programme et en supprimons toutes les instances du programme, le programme modifié doit sortir l'octet supprimé.
Par exemple, si notre programme était
aabacba
Puis bcb
sortirait a
, aaaca
aurait besoin de sortir b
et aababa
sortirait c
.
Peu importe ce que fait le programme non modifié.
Les réponses seront notées en octets, l'objectif étant de minimiser le nombre d'octets.
code-golf
source-layout
radiation-hardening
Assistant de blé
la source
la source
Réponses:
zsh,
603594566561548440415399378370 octetsDépend de coreutils +
dc
.Essayez-le en ligne!
C'était ... un voyage.
Cette réponse comporte trois parties. Les 4 premières lignes gèrent certains cas particuliers pour simplifier le code qui suit. Les 2 lignes suivantes et la dernière ligne accomplissent toutes deux essentiellement la même chose, mais exactement une est exécutée avec la suppression d'un caractère donné. Ils sont écrits avec des jeux de caractères pour la plupart complémentaires, de sorte que la suppression de tout caractère ne rompt qu'un seul, permettant à l'autre de continuer à fonctionner.
En regardant la première partie, nous nous occupons d'abord
ec\nho \\n
ca t<<<$'\x20'
(suivi deexi t
pour éviter d'exécuter du code plus tard, ce qui entraînerait une sortie étrangère)$
suppression avecd$c -e8BC6P
(8BC6
=9226
is36*256 + 10
, et 36 et 10 sont les valeurs d'octet des$
caractères et newline respectivement; nous utilisons des chiffres hexadécimaux en décimal pour éviter d'avoir à les inclure dans le grand commentaire de la ligne 6)0
suppression avecd0c -eKp
(K
obtient la précision décimale, qui est0
par défaut)Dans la partie suivante, les seuls caractères utilisés (à part les ordures à la fin de la deuxième ligne) sont
$'\01234567v;
, l'espace et la nouvelle ligne. Parmi ceux-ci, quatre ont été pris en compte, de sorte que le reste ('\1234567v
) ne peut pas apparaître sur la dernière ligne. En développant les échappements octaux ($'\123'
représente le caractère ASCII avec la valeur 123 8 ), on obtient:La première ligne parcourt tous les caractères utilisés dans le programme et recherche chacun dans son propre code source (
$0
c'est le nom de fichier du script en cours d'exécution), en imprimant tout caractère introuvable.La deuxième ligne semble un peu étrange et semble faire la même chose
exit
qu'avec un tas de nops. Cependant, le codageexit
en octal entraîne directement$'\145\170\151\164'
ce qui ne contient pas2
ou3
. Nous devons en fait rendre cela moins résistant aux renvois. En effet, si l'un d'entre eux'\014567v
est supprimé, la première ligne est rompue, la deuxième ligne se rompt également, permettant au reste du code de s'exécuter. Cependant, nous avons besoin qu'il se casse également si2
ou3
sont supprimés pour que les lignes 3 et 4 puissent s'exécuter. Ceci est accompli par le cordage des chaussures dans:
et;
, qui ont respectivement 2 et 3 dans leur représentation octale.La jonque à la fin de la ligne 2 est simplement là pour s'assurer que chaque caractère ASCII imprimable apparaît au moins une fois, car la manière dont la vérification est effectuée en bouclant à travers chacun l'exige.
Si
exit
n'a pas été appelé dans la première section (c'est-à-dire qu'il a été mutilé par la suppression de l'un'\01234567v
), nous passons à la seconde, dans laquelle nous devons accomplir la même chose sans utiliser aucun de ces caractères. La dernière ligne est similaire à la première ligne décodée, sauf que nous pouvons réduire la plage de la boucle pour économiser quelques octets, car nous savons déjà que tous les caractères, à l'exception de,'\01234567v
ont été couverts. Il a également0# $#
devant lui, qui le commente et l'empêche de produire une sortie étrangère si0
ou a$
été supprimé.la source
Rétine , 1 octet
Essayez-le en ligne!
Lorsque toutes les instances du seul octet (
1
) sont supprimées, la sortie est1
. Assez simple.la source
1
pour le programme vide? Quoi qu'il en soit, je pense que les réponses en question utilisent des approches et des comportements différents. OMI, une réponse polyglotte n'est justifiée que si l'approche reste la même. (Objectivement, ce n'est pas un polyglotte car le code réel est différent, pour les réponses ci-dessous.) N'hésitez pas à voter comme vous le souhaitez, mais une réponse valide est une réponse valide. Je garderai ma réponse telle qu'elle est, je ne souhaite pas y héberger une collection de réponses.Lenguage, 216173027061157310 octets
216173027061157310 = (144115617572598740 + 144115241762960340 + 144115194786755540) / 2
. Il y a des216173027061157310 - 144115617572598740
$
s, des216173027061157310 - 144115241762960340
#
s et des216173027061157310 - 144115194786755540
espaces.Les 144115617572598740
#
s et espaces codent le programme BF suivant:Essayez-le en ligne!
Les 144115241762960340
$
s et espaces codent le programme BF suivant:Essayez-le en ligne!
Les
$
s et#
s 144115194786755540 codent le programme BF suivant:Essayez-le en ligne!
Edit: 72057832274401770 octets enregistrés grâce à @Nitrodon.
la source
U
et octet 127? Essayez-le en ligne! Ou même juste l'octet nul et soh?U
c'était l'octet ASCII imprimable le plus court qui pouvait être sorti. Je ne voulais pas utiliser d'octets non imprimables.Gelée , 1 octet
Complètement différent de la réponse Retina. sifflets
Essayez-le en ligne!
la source
Polyglotte * , 1 octet (en attente de confirmation )
Essayez-le en ligne! (en utilisant la triangularité)
*: Cela fonctionne dans une (assez large) variété de langues (à l'exception des esolangs comme 4,> <> et similaires et quelques autres exceptions). Identique à la réponse Jelly dans le code source, mais la méthode d'E / S est différente - La sortie se fait via le code de sortie. Quand on supprime
0
du code source, ils se retrouvent avec un programme vide, qui souvent ne fait pas d'erreur et donne le code de sortie 0 dans la majorité des langues.la source
sed , 1 octet
Essayez-le en ligne!
Complètement différent de la réponse Retina ou de la réponse Jelly.
la source
Unaire (non compétitif), 96 octets
Voici le
xxd
vidage.Une définition plus large de la langue unaire autorise tous les caractères de son code source. Mais je n'ai pas trouvé de compilateur ou d'interprète qui fonctionnerait pour cela. J'ai donc marqué cette réponse comme non compétitive. Si vous pouvez en trouver un qui a été publié avant que cette question ne soit posée, je vais y accéder.
la source