Su desafío es simple: escriba el mayor tiempo posible de un programa prístino en el idioma que elija utilizando solo bytes únicos. (La definición completa de un programa original, copiado de ese enlace, se encuentra al final de esta pregunta).
Así es, sin condiciones. Su código no tiene que hacer nada en absoluto, solo ejecutarlo sin errores, cumplir con los requisitos para un programa original (vinculado anteriormente) e incluir bytes no duplicados en la codificación que utiliza.
A los fines de la explicación anterior y la definición vinculada de "programa prístino", un error se define como cualquier cosa que hace que el programa no se ejecute por completo o termine con un código de salida distinto de cero después de un período de tiempo finito.
Como esto es código de boliche , el código más largo , no el más corto, gana (medido por el conteo de bytes). El puntaje máximo teóricamente posible es 256, ya que hay 256 bytes distintos posibles. En caso de empate, gana la primera respuesta con la puntuación más alta.
Aquí está la definición completa de un programa prístino, copiado del enlace anterior:
Definamos un programa prístino como un programa que no tiene ningún error en sí mismo, pero lo hará si lo modifica quitando cualquier subcadena contigua de N caracteres, donde
1 <= N < program length.Por ejemplo, el programa Python 2 de tres caracteres
`8`es un programa original porque todos los programas resultantes de la eliminación de subcadenas de longitud 1 causan errores (errores de sintaxis, de hecho, pero cualquier tipo de error funcionará):
8` `` `8y también todos los programas resultantes de la eliminación de subcadenas de longitud 2 causan errores:
` `Si, por ejemplo,
`8hubiera sido un programa sin errores, entonces`8`no sería perfecto porque todos los resultados de la eliminación de la subcadena deben ser erróneos.
fuente

JMP <address outside of the program's memory>en la asamblea. En principio, en una computadora real, podría hacer un bucle infinito o salir con un error distinto de cero, pero generalmente se bloqueará espectacularmente.Respuestas:
Jalea ,
253254256 bytesPruébalo en línea! o verificarlo!
Resulta que los idiomas de golf pueden jugar ...
‘.Ahora solo«»no se usan«». ¡Ahora tenga la puntuación óptima!¿Cómo?
La característica crucial de Jelly que lo hace posible es que los caracteres de apertura y cierre de los literales de cadena no son los mismos que en casi todos los demás idiomas.
La estructura del programa es la siguiente:
M <239 character long string> L»«’Ɗạ‘}237$¤¡Mencuentra los índices de su argumento que apuntan a elementos máximos. Lo único que importa es que, sin argumentos para este programa, Jelly asigna0errores a la cadena y Jelly cuandoMse aplica0.Para evitar
Mactuar0en el programa completo, utilizamos el¡rápido, que se aplicaMvarias veces según el resultado del enlace que lo precede inmediatamente. En este caso ese enlace es<239 character long string> L»«’Ɗạ‘}237$¤.Ltoma la longitud de esta cadena (239) y la»«’Ɗdisminuye a 238. La»«parte no hace nada peroƊ(los últimos tres enlaces como mónada) hace que si se eliminan se produzca un error. Luegoạtoma la diferencia absoluta entre el resultado de»«’Ɗy la mónada‘}237$aplicada a la cadena.‘aumenta y es una mónada, pero la}convierte en una díada y la aplica a su argumento correcto237, cediendo238. Asíạrinde0en el programa completo.¤se vincula de nuevo a la cadena literal que forma un nilad. El resultado de esto es0, porMlo que no se aplica en absoluto, evitando cualquier error.Posibles subprogramas:
<string>..¤será distinta de cero yMse aplicará0, causando un error.L»«’Ɗạ‘}237$se elimina cualquier parte deM, se aplicará0o habrá operaciones entre la cadena y un número, lo que dará como resultado aTypeError.¤¡se elimina,Mse aplica a0.”y ambos’‘se eliminan y“no lo hacen, todo después seMconvierte en una cadena, porMlo que actuará0.”y’se elimina y“no lo hace, todo entre”y se‘convierte en una lista de enteros.Msolo se elimina, hay unEOFErrorporque¡espera un enlace antes del nilad anterior.M“y cualquier número de caracteres después de que se elimina, habrá unEOFErrorporque¤busca un nilod que lo precede pero no encuentra uno.238no cuenta porque es parte de una mónada.Esto prácticamente cubre todo.
Anteriormente no lo había usado
«»‘porque los dos últimos no se pueden incluir en la cadena porque coinciden con el“carácter para formar otras cosas que no sean cadenas.«tampoco puede estar en una“”cadena pero no sé por qué.fuente
Haskell ,
3945505260 bytesEl identificador
maindebe tener tipoIO apara algún tipo a. Cuando se ejecuta el programa, se realiza el cálculomainy se descarta su resultado. En este caso su tipo esIO ((a,b)->a).El resultado es una aplicación de la función
(λ a b c d e f → return fst), una función constante de seis argumentos que devuelve la función fst (que da el primer elemento de una tupla de 2), inyectada en la mónada IO. Los argumentos son seisLT(enumeración por menos),EQ(enumeración por la igualdad), lista vacía[],3,2y1.Lo que serían espacios se reemplazan con caracteres únicos que cuentan como espacios: una pestaña, un espacio sin interrupción, un avance de página, pestaña vertical, MARCA DE ESPACIO OGHAM, espacio regular, nueva línea y retorno de carro. Si falta alguno de estos, habrá una falta de coincidencia en el número de argumentos. Los nombres de los parámetros se eligen como caracteres UTF-8 de tres o cuatro bytes
𤶸陸ⵙ商ߜ新, eligiendo cuidadosamente los caracteres que no generan bytes duplicados.Gracias a @BMO por sus valiosas contribuciones.
Volcado hexadecimal:
Pruébalo en línea!
fuente
'\109999'parece ser válido, al menos en GHC 8.2.2.'\10999a'produce un error léxicoproduce un error léxico.maxBound :: Char, es decir'\1114111'. Nota: los números son decimales de forma predeterminada, por lo que si desea hexadecimal, debe poner unxdespués de\, por ejemplo'\x10999a'.\x10fffffunciona bien y\x110000proporciona un error fuera de rango como era de esperar.Python 2 ,
20 21 33 39 4550 bytes¡Ahora un gran esfuerzo de colaboración!
+2 gracias a Aidan F. Pierce (reemplazar
sorted({0})conmap(long,{0}))+8 gracias a dylnan (uso de
\y nueva línea para reemplazar el espacio; sugerencias para pasar de0una expresión matemática; reemplazo-1con-True; uso de hexadecimal)+11 gracias a Angs (
4*23+~91->~4836+9*1075/2luego más tarde~197836254+0xbCABdDF->~875+0xDEAdFBCbc%1439/2*6)Pruébalo en línea! O vea la suite de confirmación
0xDEAdFBCbces hexadecimal y se evalúa como59775106236.~es un complemento en cuanto a bits, por lo que se~875evalúa como-876.%es el operador de módulo por lo que se0xDEAdFBCbc%1439evalúa293./es la división entera por lo que se0xDEAdFBCbc%1439/2evalúa como146.*es la multiplicación por lo que sexDEAdFBCbc%1439/2*6evalúa como876.+Esta suma se~875+xDEAdFBCbc%1439/2*6evalúa a0.... ninguna versión eliminada también se evalúa
0.{0}es unasetque contiene un solo elemento,0.Llamar
sortedcon asetcomo argumento genera una lista, que puede indexarse con[...].Sin
sortedel código({0})solo se obtendría elsety esto no se puede indexar de la misma manera,if({0})[-True]:qelevaría aTypeError.La indexación en Python está basada en 0 y permite una indexación negativa desde la parte posterior y
Truees equivalente a1, por lo tanto,sorted({0})[-True]encuentra el elemento0, mientrassorted({0})[True]que elevará una sintaxisIndexError, como lo harásorted({})[-True]ysorted({0})[]no es válida.Lo
0que se encuentra es falsey, por lo que el cuerpo deif,qnunca se ejecuta, sin embargo, si lo hiciera, generaría unNameErrordado queqno se ha definido.Como una lista no vacía es verdadera, tampoco podemos recortarla
if[-1]:q.Vea el conjunto de confirmación para ver: confirmación de que los bytes son únicos; todos los errores y el éxito del código en sí.
fuente
C (tcc) , x86_64,
2931333940 bytesDevuelve 0 . Gracias a @feersum por sugerir dígitos hexadecimales en mayúsculas.
Pruébalo en línea!
Cómo funciona
La asignación escribe dos entradas ( 184 y 49664 ) en la ubicación de memoria de main . Con entradas de 32 bits y orden de bytes little-endian, los bytes exactos son
b8 00 00 00 00 c2 00 00.Dado que tcc no declara la matriz definida como .data (la mayoría de los compiladores lo haría), entonces saltar a main ejecuta el código de máquina al que apunta.
b8 00 00 00 00(mov eax, imm32) almacena el int 0 en el registro eax.c2 00 00(ret imm16) saca 0 bytes adicionales de la pila y los devuelve. (El valor en el registro eax es el valor de retorno de la función).fuente
> <> , 122 bytes
Pruébalo en línea!
No hace nada. Basado en el mismo formato que mi respuesta Programming a Pristine World .
Primero, verificamos que la longitud del código es 122 y error si no lo es.
><>los programas no pueden finalizar sin el uso del;comando, pero si este comando está en el programa, podemos eliminar todo antes de que finalice el programa de inmediato. Para combatir esto, usamos elpcomando para colocar un;código en el código durante el tiempo de ejecución. Para hacer esto, restamos 6Ay lo colocamos después dep.Probablemente agregaré la mayoría de los otros valores por encima de 127 una vez que descubra los valores de dos bytes correctos. Los 5 valores que faltan son
v^;y las dos nuevas líneas.De los 7502 subprogramas, 7417 tuvieron errores debido a instrucciones no válidas, 72 por falta de memoria y 13 por quedarse sin memoria.
fuente
JavaScript, 42 bytes
i,foifcausaráSyntaxError: missing ; before statement;田causaráSyntaxError: expected expression, got end of script;田causaráInvalid or unexpected token;田Mostrar fragmento de código
fuente
Brain-Flak , 2 bytes
Pruébalo en línea!
Alternativamente
[],{}o(). La eliminación de cualquier soporte hace que el otro soporte no coincida.Prueba de que esta es la solución óptima:
Un programa Brain-Flak está hecho de nilas (un par de paréntesis por sí mismas) o mónadas (un par de paréntesis que contienen 1 o más nilas). Una mónada no puede estar en un programa prístino, ya que simplemente puede eliminar una o más de las nilas. Del mismo modo, no puede tener más de un nilad en el programa, ya que puede eliminar uno de ellos sin interrumpir el programa.
Como tal, este podría ser el lenguaje menos óptimo para una programación prístina o única.
fuente
Ada, 110 bytes (latin1)
¿Probablemente la mejor respuesta que obtendrá de cualquier idioma en uso en la industria?
Hexdump:
Compile guardando en cualquier archivo que termine
.adsy se ejecutegcc -c <filename>. Produce un ejecutable que no hace nada. (No se puede proporcionar el enlace TIO porque TIO coloca el código en un.adbarchivo y,gccde forma predeterminada, intenta encontrar una especificación que coincida con ellos)Básicamente declara un paquete con un nombre abusando de mayúsculas / minúsculas latin1. Necesita un carácter de espacio en blanco diferente para cada uno de los espacios, por lo que utiliza espacio, CR, LF y TAB.
Cómo se ve en la versión vim:
Cómo funciona
En Ada, incluso las especificaciones se pueden compilar. Las especificaciones son como los archivos de encabezado de c, pero tienen más funciones y pueden compilar un código básico. Para que sea válida, cualquier especificación debe tener el formato:
package <NAME> is ... end <NAME>;con<NAME>coincidencia. Lo bueno de Ada es que no distingue entre mayúsculas y minúsculas. Por lo tanto, siempre que su nombre tenga variantes en mayúsculas y minúsculas, ¡estará listo!La parte difícil fue obtener una unidad compilable. Normalmente, los programas Ada tienen un procedimiento o función 'principal' que se encuentra fuera de cualquier paquete que se convertirá en el ejecutable final. Desafortunadamente, los procedimientos requieren la
beginpalabra clave, lo que conduce a demasiadoses (solo se conocen 2 casos), mientras que las funciones requieren lareturnpalabra clave, lo que conduce a demasiadosns. Por lo tanto, tuve que compilar un paquete.fuente
C, 8 bytes
No hace nada.
Pruébalo en línea!
fuente
main(){short x;}main(){short;}compila solo con awarning: useless type name in empty declaration. Creo que C99 y C ++ requieren un tipo de retorno explícito, por lo queint main(o tal vezunsigned main) podría funcionar, pero no con gcc, que solo advierte incluso con-std=c11.return 0;podría ser posible con C89, donde no hay implícitoreturn 0al final demain. Salir con un estado distinto de cero puede considerarse un fracaso, según otras respuestas. ¿Agregar banderas de compilación como-Werrorcuenta para la puntuación de una buena manera en el bowling de código? Porque hacer cumplir estrictamente las violaciones de C11 podría permitir un programa mucho más largo. Hmm,#include<>algo y luego úsalo; no puede eliminar tanto la inclusión como el uso, y si falla sin un prototipo o macro def, ganará.mainyincludeambos contieneni, por lo que no puede tener ambas cosas. Del mismo modo para declarar y usar una función. También usoreturnen absoluto, ahora que lo pienso.int mainque no puede funcionar.JavaScript, 22 bytes
Pruébalo en línea!
Posibles errores
Cuando se modifica, arrojará uno de los siguientes errores 1 :
1. El número exacto de errores distintos depende del motor. Esta lista fue generada con SpiderMonkey (Firefox).
fuente
Python 3 + Flask-Env ,
7131417 bytesNo TIO porque no tiene
flask-env.Encontró el nombre de módulo más largo que no tiene intersección
importy no tiene ningún número al final del nombre._sha256es más largo pero256por sí solo no da error. Encontré una biblioteca,b3j0f.syncque es un byte más, pero no pude conseguir que se importara correctamente.importcon\<newline>. Sacar uno o ambos causa un error.Todavía puede haber opciones más largas que
flask_env, realmente no hice una búsqueda exhaustiva, pero sí revisé ~ 70,000 módulos. Abierto a sugerencias.fuente
256Se ejecuta sin errores.import *[hawkey]y similares, pero por desgracia no funciona ...R , 14 bytes
Pruébalo en línea!
Esto podría ser lo más largo posible en R. Llamar a cualquier función está condenada al fracaso, porque podría eliminar todo menos el nombre de la función, lo que simplemente daría como resultado la impresión del código fuente de la función. Este es el objeto con nombre más largo en la configuración predeterminada de R sin caracteres duplicados y sin nombre de objeto sobrante al eliminar caracteres contiguos.
¡Este primer intento no funcionó, pero aprendí mucho al intentarlo!
dontCheck({family;NROW})fuente
Perl 5, 3 bytes
=>es la "coma gruesa", que cita la palabra a la izquierda. Entonces esto es equivalente aque no hace nada
Sin la coma gruesa,
yes el operador de transliteración, que no es válido sin tres del mismo carácter repetido más tarde.La coma gruesa sola también es inválida, como está
=y>sola.fuente
brainfuck , 2 bytes
Pruébalo en línea!
Inspirado por la respuesta Brain Flak de Jo King . Esto es óptimo porque el único error en brainfuck son los corchetes sin igual. (Nuevamente, gracias a Jo King por esta información).
fuente
Rubí , 28 bytes.
Pruébalo en línea!
¡Verifícalo!
fuente
ML estándar , 22 bytes
Pruébalo en línea!
op-(a,b)es la forma de-azucarada dea-b.~denota el menos unario, por lo que en realidad estamos computando765+324. Esta expresión coincide con el patrón en la constante1089. Esta coincidencia tiene éxito si el programa no ha sido alterado y no hace, bueno, nada.Si la coincidencia no tiene éxito porque se eliminaron algunos dígitos, se obtiene un
unhandled exception: Bind. La eliminación deop-resultados en un error de tipo porque una tupla coincide con unint. Todas las demás eliminaciones deberían dar como resultado un error de sintaxis.fuente
Swift 4 , 19 bytes
Pruébalo en línea!
Todos los posibles errores que he encontrado son:
[,],{o}dará lugar a un error de sintaxis[].resultará enUse of unresolved identifier 'contains'.resultará enConsecutive statements on a line must be separated by ';'[]resultará enReference to member 'contains' cannot be resolved without a contextual type{1 !=␊0}resultará enExpression resolves to an unused function1 !=␊0resultará enMissing return in a closure expected to return 'Bool''!=' is not a prefix unary operator'=' must have consistent whitespace on both sides!=resultará enMissing return in a closure expected to return 'Bool'Consecutive statements on a line must be separated by ';'Contextual type for closure argument list expects 1 argument, which cannot be implicitly ignored[].containsresultará enClosure expression is unusedAlgunos otros programas interesantes son (uno en cada línea):
fuente
asTcl , 6 bytes
Pruébalo en línea!
Tcl , 3 bytes
Pruébalo en línea!
Tcl , 2 bytes
Pruébalo en línea!
fuente
Lote de 7 bytes
Un buen comienzo
fuente
Retina , 2 bytes
No me sorprendería si esto es óptimo ...
Pruébalo en línea!
La expresión regular contiene un grupo vacío. Eliminar cualquiera de los pares causará un error de análisis debido a paréntesis inigualables.
Otras soluciones son:
\(,\),\[,\],\*,\+,\?,a]fuente
a]no errorC (gcc) ,
7375 bytesPruébalo en línea!
Basado en la respuesta de @Steadybox, gracias a @Angs por detectar errores graves.
Sí, es un truco sucio (porque de hecho usa un
#definecon-DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=mainy-Dg=return), pero no veo ninguna regla que prohíba dicha opción de compilación.fuente
-DABCEGHIJKLMNOPQRSUVXYZabjkmopqrsvxz234567890=main+-Dg=return, por lo que diría que esto usa un lenguaje inventado específicamente diseñado para el desafío , que está prohibido por defecto.-1error sin error