Sale et unique

26

Dans cette question, je parlerai des programmes comme des chaînes, ce sont des chaînes d'octets, pas des caractères. La façon dont votre programme résultant est rendu ou affiché n'est pas importante pour ce défi, seule la façon dont il apparaît dans la mémoire compte.

Un programme vierge est un programme qui, lorsqu'il est exécuté, ne génère pas d'erreur, mais il provoquera une erreur chaque fois qu'une sous-chaîne continue de taille n , où 1 n < | S | , est retiré.Sn1n<|S|

Un programme sale est l'opposé, c'est un programme qui, lorsqu'il est exécuté, fait une erreur, mais chaque fois qu'une sous-chaîne continue de taille n , où 1 n < | S | , est supprimé, il ne fait pas d'erreur.Sn1n<|S|

Pour ce défi, une erreur est une sortie non vide vers STDERR.

Votre défi est d'écrire un programme sale qui utilise autant d'octets uniques que possible. Cela signifie que vous obtiendrez un point pour chaque octet unique qui apparaît dans votre code, un score plus élevé étant meilleur. Le score maximum est donc de 256.

Assistant de blé
la source
Est-il même possible de répondre à cela dans des langues comportant des parenthèses / parenthèses? Il serait possible de supprimer une sous-chaîne du code afin qu'il y ait des crochets incompatibles.
JungHwan Min
@JungHwanMin Si la langue impose des parenthèses équilibrées, je soupçonne que ce serait impossible.
Wheat Wizard
@CatWizard donc un programme sale ne fait pas d'erreur quand une sous-chaîne continue de caractères (c'est-à-dire un ensemble d'octets non continu) est supprimée, n'est-ce pas?
JungHwan Min
@JungHwanMin Désolé. Cela peut ou non. Nous nous soucions uniquement des chaînes continues.
Wheat Wizard

Réponses:

18

Unaire , 14 octets

123456789ABCDE

Cela code le programme brainfuck [, qui génère des erreurs en raison de parenthèses inégalées.

Suppression d' octets entraînera >, <, +, -, ., ,ou le programme vide, qui sont des programmes de brainfuck valides.

Dennis
la source
Il s'agit de la solution optimale, car toute solution plus longue pourrait être réduite à cette solution, ce qui entraîne des erreurs
Jo King
C'est aussi la seule solution.
user202729
13

R , 3 octets

qrt

Essayez-le en ligne!

Le nom d'un objet est un programme valide en R.

qrt n'est pas le nom de quoi que ce soit, il renvoie donc une erreur.

q est la fonction de sortie

qr est la fonction de décomposition QR

rt est la fonction d'échantillonnage de distribution t

qt est la distribution t CDF inverse

t est la fonction de transposition

ngm
la source
2
@pajonk mais "r" est une sous-chaîne continue. Suppression de ce qui laisse "qt"
Orphevs
3
Il y a exactement un programme sale en R de longueur 3, et c'est tout! (le seul seul type char programmes valides sont 0-9cqtCDFIT, tout programme doit donc commencer cm, qf, qr, qt, tsou Im. La longueur trois possibilités sont qrf, qrm, qrt, qtset tsdet un seul d' entre eux est sale (les autres ne peuvent pas être étendues soit pour les rendre sales car il n'y a pas de fonctions rm*, rf*, ts*, sd*)
JDL
@Orphevs my bad, mal lu le défi.
pajonk
10

Gelée , 4 5 6 7 8 10 11 octets

“a”;⁽PFð+µU

Essayez-le en ligne!

Vérifiez-le.

Tente d'ajouter une chaîne avec un entier.

Certains des sous-programmes possibles:

“a” est un littéral de chaîne.

“a est le même littéral de chaîne.

est la chaîne vide.

“a”; concatène "a" avec lui-même.

... trop pour les énumérer tous.

dylnan
la source
1
Heureusement, Jelly vous autorise toujours à l'erreur.
user202729
6

Polyglotte, 3 octets

1 2

Travaille dans:

  • Javascript
  • Rubis
  • R
  • Octave
  • GHCi
  • Julia

En JavaScript, lance SyntaxError: jeton inattendu: littéral numérique ou une erreur similaire.

Toutes les autres chaînes sont des littéraux numériques valides ( 1 , 2 ou 12 ).


Dans GHCi cela jette

<interactive>:1:1: error:
     Non type-variable argument in the constraint: Num (t1 -> t2)
      (Use FlexibleContexts to permit this)
     When checking the inferred type
        it :: forall t1 t2. (Num t1, Num (t1 -> t2)) => t2

C'est parce qu'il essaie de s'appliquer 1à 2une fonction, mais il ne peut pas. Lorsqu'une partie est supprimée, elle devient simplement un littéral numérique.

Arnauld
la source
Polyglotte: R, Octave, Ruby, les Pythons ...
ngm
1
@ngm GHCi également, mais des erreurs «2» en python.
Wheat Wizard
Je soupçonnais que c'était très générique. J'ai transformé cela en wiki communautaire, alors n'hésitez pas à le modifier avec toutes les langues pour lesquelles cela fonctionne!
Arnauld
5

Python 2/3 , 3 octets

4\f2

OU

4\x0c2

Essayez-le en ligne!

En python, "\ f" est identique à "\ x0c" et est un caractère de flux de formulaire . Cela signifie qu'il indique à une imprimante de passer à la ligne suivante.

Si une expression python commence ou se termine par \f, elle est fondamentalement ignorée, de même \f2qu'une expression valide.

Le 4et 2peut être n'importe quel nombre 0-9. Cependant, pour que le premier octet soit 0valide uniquement dans Python 2.7.15, comme cela a 02été fait une déclaration légale de 2.

Ainsi, l'expression elle-même échoue avec une erreur de syntaxe, car il y a deux nombres séparés par un espace. Cependant, tout raccourcissement place \fau début ou à la fin, là où cela n'a pas d'importance, ou crée 42ce qui est valide.

(Il convient de noter que dans IDLE, ce fichier s'ouvre et ressemble à "42".)

Source d'explication du flux de formulaires: /programming//a/26184126

Le Matt
la source
3
Ce serait plus facile à comprendre si vous utilisiez le code réel dans la source sans le \f. Voici un lien d'essayer en ligne à partir duquel vous pouvez obtenir une réponse pré-formatée.
Wheat Wizard
1
Je l'ai ajouté comme variante pour clarification. Merci également pour la suggestion du lien.
Le Matt