7 , 31 caractères, score 30, sûr mais peut-être cassé?
Un programme 7 n'est normalement qu'un nombre, mais il peut contenir des espaces, le divisant en plusieurs nombres. Cette soumission se compose donc de deux nombres (qui sont implicitement concaténés par l'interpréteur 7), et le programme prend également deux nombres en entrée, via une entrée standard. (Les "31 caractères" dans l'en-tête sont la longueur totale des deux nombres, plus un caractère d'espacement séparé; les chiffres qui composent les nombres sont interprétés comme octaux lorsqu'ils sont utilisés comme programme, mais décimaux lorsqu'ils sont utilisés comme entrée, et ce sont les chiffres qui sont les mêmes dans les deux cas, pas les nombres réels. Notez que ce n'est pas pertinent soit lorsqu'il est traité comme un programme, soit lorsqu'il est traité comme une entrée, que vous les sépariez par un espace ou une nouvelle ligne; j'espère que cela ne fonctionne pas ne pas invalider la soumission.)
La sortie attendue est le nombre suivant (exprimé ici en décimal, car c'est le format de sortie utilisé par l'interpréteur 7):
238363505302130098723162537059
Notez que l'interpréteur 7 lié à partir du wiki Esolang stocke en interne les nombres en unaire, ce qui signifie qu'il est peu probable que vous ayez suffisamment de mémoire pour exécuter le programme sur lui-même pour voir ce qu'il fait. J'ai vérifié le programme en travaillant manuellement sur son comportement et en le testant sur de petites entrées pour vérifier qu'il faisait ce que je m'attendais à ce qu'il fasse. Une autre approche serait d'écrire un interpréteur qui utilise une méthode plus efficace de stockage des nombres.
Éviter les fissures ici était quelque chose de pénible, mais je suis enfin convaincu maintenant qu'aucun autre nombre que ceux du programme lui-même n'est capable de produire 238363505302130098723162537059 en sortie. ( MODIFIER 1 semaine plus tard: j'ai peut-être eu tort, selon la façon dont vous interprétez la question; voir ci-dessous. )
Solution
Le programme original était:
711170237403706
111723603700633
Ce programme prend deux nombres X et y et calcule le résultat de l'expression 3 x y- y- 2 (c'est-à-dire y( 3 x - 1 ) - 2 ). Si nous effectuons ce calcul à x = 711170237403706 et y= 111723603700633 , nous obtenons un résultat de 238363505302130098723162537059 comme requis .
Il était prévu qu'aucune autre entrée ne donne le résultat souhaité car:
L'entrée doit être choisie de telle sorte que y( 3 x - 1 ) - 2 = 238363505302130098723162537059 , c'est-à-dire y( 3 x - 1 ) = 238363505302130098723162537061 (en ajoutant 2 des deux côtés). Ce nombre est un semi-premier, avec seulement deux facteurs: 111723603700633 et 2133510712211117 . Un seul de ces nombres, 2133510712211117 , peut être exprimé sous la forme 3 x - 1 (donnant ( 3 × 711170237403706 ) - 1 = 2133510712211117 ). Nous pouvons donc identifier de manière unique quel nombre estX et lequel esty , ce qui signifie qu'une seule entrée fonctionne.
Cependant, selon la façon dont vous interprétez la question, il peut y avoir une deuxième entrée qui produit la sortie souhaitée (invalidant ainsi cette solution):
113x - 1X79454501767376699574387512354189) qui ne font pas partie du jeu de caractères pour 7 programmes. Donc, si l'entrée est limitée à être dans le même jeu de caractères que le programme, cette solution est valide; mais si l'entrée contenant des caractères extérieurs au jeu de caractères du programme est autorisée, cette solution n'est pas valide.
Explication
Voici comment fonctionne la solution envisagée:
711170237403706 111723603700633
7 7 7 Séparateurs d'éléments de pile
111023 403706 111723603700633 Éléments de pile initiaux
111 numéro 3, en unaire
023 E / S DSL pour "saisir un numéro"
403706 111723603700633 Programme principal
(Implicite: exécuter une copie de l'élément principal du programme, en préservant l'original)
40 Échangez {023} au-dessus de {programme}, en l'échappant
3 Faites des E / S en utilisant {023}; pop {programme}
0 E / S: numérique
23 Entrez un nombre en copiant {111} autant de fois
706 Ajouter "6" au nombre (en le décrémentant)
11 Poussez deux éléments de pile vides
17236 Pousser un élément de pile "23" (sans échappement)
0 Escape {23}, consommant un élément vide
3 Faites des E / S en utilisant {23}; pop {l'élément ci-dessous}
23 Copiez le haut de la pile d' entrée plusieurs fois
7006 Ajouter "66" (c'est-à-dire soustraire 2)
3 Sortie {sous forme de nombre}
3 Quittez le programme (en raison d'une pile faible)
1
7
0
6
66
12345
3123451234512345