Sucio y único


26

En esta pregunta hablaré sobre los programas como cadenas, se trata de cadenas de bytes, no de caracteres. La forma en que se representa o muestra el programa resultante no es importante para este desafío, solo importa cómo aparece en la memoria.

Un programa prístino es un programa que, cuando se ejecuta, no produce un error, sin embargo, lo hará siempre que una subcadena continua de tamaño n , donde 1 n < | S | , es removido.Sn1n<|SEl |

Un programa sucia es el contrario, es un programa que cuando es ejecutado hace error, sin embargo cada vez una subcadena continua de tamaño n , donde 1 n < | S | , se elimina, no tiene error.Snorte1n<El |SEl |

Para este desafío, un error es la salida no vacía a STDERR.

Su desafío es escribir un programa sucio que use tantos bytes únicos como sea posible. Esto significa que obtendrá un punto por cada byte único que aparece en su código con una puntuación más alta que es mejor. El puntaje máximo es por lo tanto 256.


¿Es posible responder esto en idiomas que incluyen paréntesis / paréntesis? Sería posible eliminar algunas subcadenas del código para que haya corchetes no coincidentes.
JungHwan Min

@JungHwanMin Si el lenguaje aplica paréntesis equilibrados, sospecharía que sería imposible.
Wheat Wizard

@CatWizard para que un programa sucio no produzca errores cuando se elimina una subcadena continua de caracteres (es decir, no un conjunto continuo de bytes), ¿correcto?
JungHwan Min

@JungHwanMin Lo siento. Puede o no puede. Solo nos preocupamos por las cadenas continuas.
Wheat Wizard

Respuestas:


18

Unario , 14 bytes

123456789ABCDE

Esto codifica el programa brainfuck [, que errores debido a paréntesis incomparables.

Eliminación de bytes resultarán en >, <, +, -, ., ,o el programa de vacío, que son programas brainfuck válidos.


Esta es la solución óptima, ya que cualquier solución más larga podría reducirse a esta solución, que errores
Jo King

Esta es también la única solución.
user202729

13

R , 3 bytes

qrt

Pruébalo en línea!

El nombre de un objeto es un programa válido en R.

qrt no es el nombre de nada, por lo que devuelve un error.

q es la función para dejar de fumar

qr es la función de descomposición QR

rt es la función de muestreo de distribución t

qt es la distribución t CDF inversa

t es la función de transposición


2
@pajonk pero "r" es una subcadena continua. Eliminación que deja "qt"
Orphevs

3
Hay exactamente un programa sucio en R de longitud 3, ¡y esto es todo! (los programas válidos solamente single-char son 0-9cqtCDFIT, por lo tanto, cualquier programa debe comenzar con cm, qf, qr, qt, tso Im. La longitud tres posibilidades son qrf, qrm, qrt, qtsy tsd, y sólo uno de ellos es sucia (los otros no pueden ser extendidos o bien para que sean sucia ya que no hay funciones rm*, rf*, ts*, sd*)
JDL

@Orphevs mi mal, leyó mal el desafío.
pajonk

10

Gelatina , 4 5 6 7 8 10 11 bytes

“a”;⁽PFð+µU

Pruébalo en línea!

Verificarlo

Intenta agregar una cadena con un número entero.

Algunos de los posibles subprogramas:

“a” Es una cadena literal.

“a es el mismo literal de cadena.

Es la cadena vacía.

“a”; concatena "a" consigo mismo.

... demasiados para enumerarlos a todos.


1
Afortunadamente, Jelly aún te permite cometer errores.
user202729

6

Políglota, 3 bytes.

1 2

Trabaja en:

  • JavaScript
  • Rubí
  • R
  • Octava
  • GHCi
  • Julia

En JavaScript, lanza SyntaxError: token inesperado: literal numérico o un error similar.

Todas las demás cadenas son literales numéricos válidos ( 1 , 2 o 12 ).


En GHCi esto arroja

<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

Esto se debe a que intenta aplicar 1a 2función, sin embargo, no puede. Cuando se elimina cualquier parte de esto, simplemente se convierte en un literal numérico.


Polyglot: R, Octave, Ruby, the Pythons ...
ngm

1
@ngm GHCi también, sin embargo, los errores `2` en python.
Wheat Wizard

Sospeché que era muy genérico. ¡He convertido esto en una wiki comunitaria, así que siéntase libre de editar con todos los idiomas para los que funciona!
Arnauld


5

Python 2/3 , 3 bytes

4\f2

O

4\x0c2

Pruébalo en línea!

En python "\ f" es lo mismo que "\ x0c" y es un carácter de fuente de formulario . Esto significa que indica que una impresora vaya a la siguiente línea.

Si una expresión de Python comienza o termina con \f, básicamente se ignora, por lo que \f2es una expresión válida.

El 4y 2puede ser cualquier número 0-9. Sin embargo, para que el primer byte sea 0solo es válido en Python 2.7.15, como 02se hizo una declaración legal de 2.

Entonces, la expresión en sí falla con un error de sintaxis, porque hay dos números separados por un espacio en blanco. Sin embargo, cualquier reducción se pone \fal principio o al final, donde no importa, o crea 42cuál es válido.

(Vale la pena señalar que en IDLE este archivo se abre como "42").

Fuente de explicación del feed del formulario: /programming//a/26184126


3
Esto sería más fácil de entender si usara el código real en la fuente sin el \f. Aquí hay un enlace para probarlo en línea desde el que puede obtener una respuesta preformateada.
Wheat Wizard

1
Lo he agregado como una variante para aclarar. Además, gracias por la sugerencia del enlace.
El Matt

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.