Code-Bowling Challenge
Escriba un programa o función que produzca la misma salida, sin importar cómo reorganice el código fuente. (La salida no puede ser un error)
Pangram Scoring
Su puntaje es la cantidad de caracteres únicos en su código fuente.
Un programa con código fuente
AJB
tendría una puntuación de3
Un programa con código fuenteAAJ
tendría una puntuación de2
Un programa con código fuente111
tendría una puntuación de1
Esta es una variante de código de boliche . ¡El programa con la puntuación más alta gana!
(Para su comodidad, se ha creado una herramienta de puntuación automatizada aquí )
Reglas de desafío
Entrada
El programa / función puede tomar una entrada, aunque es completamente opcional.Salida
Esta salida puede ser cualquier cosa que desee, pero no debe ser nula, no nula, no vacía y sin errores. (Por lo tanto, la salida debe ser de al menos 1 byte)- Reorganización
No importa cómo se reorganice el código fuente, la salida debe ser la misma.
Ejemplo:
Programa:ABJ
salidashello world
, al igual que los programas: [AJB
,JAB
,JBA
, etc.]
Esta es una variante de código de boliche . ¡El programa con el mayor número de personajes gana!
fuente
0
para siempre?)Respuestas:
Lenguaje, 1,112,064 puntos si UTF-8
Mi programa consta de todos los caracteres UTF-8 posibles. Imprime "Hola mundo" y utiliza 1.75 * 1076 yottabytes de espacio.
(Para generar el programa, simplemente necesita hacer un archivo con 17498005810995570277424757300680353162371620393379153004301136096632219477184361459647073663110750484 caracteres, asegurándose de que cada posible personaje UTF-8 esté en el archivo)
fuente
Muchos idiomas, 2 puntos
Produce
0.0
como0.
o.0
. Requiere el análisis de números liberales que está bien con un punto decimal al principio o al final, suponiendo 0 para la parte integral o decimal faltante.0000000.
daría el mismo puntaje.Esto también funciona en los siguientes idiomas (en algunos casos con una salida diferente, como se indica):
ans = 0
)ans = 0
)0
)0
)0
)Para Python, creo que esta es la única forma de obtener una puntuación superior a 1, ya que las posibilidades se pueden agotar.
[](){}
requerir un partido y fallará si el cierre es primero,
no puede ser el primer personaje#
primer lugar comentaría todo y no produciría salida\
es una continuación de línea no válida$
,!
,?
, Y@
no pueden ser utilizados sin otros caracteres no utilizablesEsto deja letras, dígitos
_
,.
y citas._
crea nombres de variables, de los cuales siempre no existe alguna permutación.Los dígitos de las hojas y
.
. Permutar dígitos diferentes da un número diferente a menos que todos los dígitos lo sean0
. Entonces, creo que es cero y.
es la única forma de obtener una puntuación superior1
. Pero, no conozco bien el Python lexer, así que podría estar perdiendo algo.fuente
CJam , puntaje 15
Pruébalo en línea!
Siempre imprime
0000
:0
solo empuja un cero.T
,U
,V
Son variables que son pre-inicializa a cero.L
,M
,O
,Q
,R
Son variables que están pre-inicializado a una lista vacía, por lo que no aparecen en la salida.[
y]
puede o no incluir cosas en una lista, pero no tienen que coincidir correctamente y la salida se aplana para imprimir de todos modos.q
lee la entrada que está vacía y, por lo tanto, tampoco aparece en la salida.fuente
r
podría agregar una minúscula para lograr algo similar a la minúsculaq
?MATL ,
356 puntosLa idea de agregar espacios en blanco fue tomada de la respuesta de Bijan .
El código, o cualquier permutación del mismo, genera tres separados por líneas nuevas.
Pruébalo en línea!
Explicación
l
por defecto empuja el número uno a la pila.1
hace lo mismo.T
empujonestrue
, que se muestra como número uno.v
concatena toda la pila hasta ahora en un vector de columna. Entonces, por ejemplo,v
luegoT
concatenaría los dos primeros números en una columna (y luego se empujaría el siguiente número). Una inicialv
produciría una matriz vacía.Al final del código, la pila se muestra implícitamente, con las siguientes reglas:
Entonces, cualquier permutación de los caracteres de entrada produce
1
tres veces en diferentes líneas.fuente
Removing any part of the source code however should cause that specific output to not be produced.
en el momento en que publicó, no quise agregarlo y lo eliminé. Tal vez eso te ayude a aumentar un poco la puntuación, posiblementeJalea , la puntuación de
53101Usando solo caracteres que son parte de la página de códigos de Jelly .
Jelly tiene una entrada implícita de
0
, y la primera mitad (hasta e incluyendoạị«»
) de la cadena de código anterior consiste principalmente en átomos monádicos (mayúsculas) y diádicos (minúsculas y símbolos) que cuando se les da un cero o una lista que contiene solo un cero ( o dos de tales entradas en el caso de las díadas) devuelven un cero o una lista que contiene solo un cero.Las excepciones son:
El espacio: se ignora (aunque esté en la página de códigos).
El pilcrow
¶
separa los enlaces (al igual que un avance de línea, pero ese es realmente el mismo byte), pero de todos modos ningún otro bypass hará referencia al código.el escarabajo, le
¤
indica al analizador que trate todo lo que queda a partir de un nilad (o constante) como una constante (y funciona como un primer átomo).el dólar,
$
instruye al analizador para que trate los dos enlaces a los que queda como una mónada (y, algo sorprendente, funciona como un primer átomo)el Yen, de
¥
manera similar, le indica al analizador que trate los dos enlaces a su izquierda como una diada.El recomendado,
®
recuerda el valor del registro, inicialmente0
(es el derecho de autor de contraparte©
, se rompe cuando se usa como el primer átomo, ya que se encuentra en el arity del enlace a su izquierda, que aún no está configurado).El código de los paréntesis,
(
y así)
sucesivamente, son puntos de código actualmente no utilizados, todos estos se analizan y cada uno causa una nueva cadena (al igual que lo haría una nueva línea, aunque no tienen el efecto de crear enlaces invocables como una nueva línea, pero eso no es problema aquí ya que nada intenta hacerlo).fuente
TI-Basic (serie 83), 93 puntos (99 en una TI-84 Plus)
Todos los dígitos, todas las variables de un byte (incluidas θ yn , las variables independientes para gráficos polares y secuenciales), las constantes π, e , y i , algunos no del todo las variables (
Ans
,rand
ygetKey
), y 59 diferente variables de ventana (todas las que están garantizadas para ser definidas).La multiplicación implícita garantiza que el resultado será 0 cuando tomemos esto en cualquier orden. Si esto se ejecuta en una calculadora nueva, todas las variables serán 0; incluso si no,
getKey
será 0 porque no hay tiempo para presionar una tecla antes de que el programa devuelva un valor.En una TI-84 Plus o superior, podemos obtener 6 puntos más mediante la adición de las fichas
getDate
,getTime
,startTmr
,getDtFmt
,getTmFmt
,isClockOn
. El resultado ahora siempre será{0 0 0}
porquegetDate
ygetTime
devuelve listas de longitud 3 y la multiplicación implícita se distribuye sobre los elementos.Creo que estos son todos los tokens posibles para usar: cualquier comando real es prefijo, infijo o postfijo (lo que significa que no funcionará al principio o al final del programa) y cualquier otra variable puede estar indefinida (y causar un error cuando usado).
fuente
(no competidor) Brainf-ck, 63 bytes
Bueno, no sé si esto se considera trampa, pero ...
El punto imprime el carácter actual (0x00) y el resto de los caracteres no hacen nada. Esto podría expandirse técnicamente infinitamente, así que avíseme si esto se considera trampa.
fuente
Haskell, 3 puntos
No importa cuán reorganizado este código siempre devuelve la función que incrementa la entrada. Ejemplos de uso en repl:
fuente
√ å ı ¥ ® Ï Ø ¿ , 128,234 (?) Puntos
Llegué a 128,234 con la ayuda de @DestructibleLemon. Este programa utiliza todos los caracteres Unicode (128,237) excepto
o
,O
ył
. Curiosamente, dos de estos son comandos de salida.Seguramente, sin embargo, ningún lenguaje podría usar todos esos caracteres, ¿verdad? Bueno, este lenguaje simplemente ignora los comandos que no reconoce. Problema resuelto.
Este idioma, de forma predeterminada, generará lo siguiente:
que no es nulo, no es nulo, no está vacío y no es un error.
Nota: si esto viola alguna regla no escrita, notifíqueme en los comentarios y lo cambiaré. Si conoce mi puntaje (suponiendo que esto esté permitido), también publique en los comentarios.
fuente
J, 3 bytes
Los caracteres 1, espacio y nueva línea siempre imprimirán 1.
fuente
/// ,
12 puntosPruébalo en línea!
No tengo idea de cómo hacerlo en ningún otro lenguaje completo de Turing. Por supuesto, hay HQ9, pero eso se siente engañoso.
1 byte gracias a @Martin Ender.
fuente
Puntos , 1,114,111 caracteres (si usa unicode).
<87 dots here> Every Unicode character except NUL and . here
Explicación:
Entonces la cadena binaria resultante es
1010111
, que convertida a decimal es 87, por lo que necesitamos 87 puntos.Todos los demás caracteres son un comentario, por lo que usamos todos los caracteres excepto un NUL, porque Python3 deja de leer el archivo y un punto, porque los puntos no son comentarios.
fuente
Preludio , puntaje 1,112,051
(Cuando solo consideramos el ASCII imprimible
[\t\n -~]
, el puntaje es 84. Si consideramos todos los puntos de código Unicode , el puntaje es 1,112,051 ).(luego agregue todos los caracteres
[\u{7f}-\u{10ffff}]
después).Siempre imprimir
0
.Prelude es un lenguaje paralelo basado en la pila, donde la pila se llena previamente con números infinitos de 0.
+
: Resalte dos valores (siempre 0), agréguelos (0) y presione para apilar.-
: Pop dos valores (siempre 0), restarlos (0), y empujar para apilar.#
: Pop un valor y descartarlo.!
: Resalta un valor y lo genera como un número (siempre 0) (la especificación dice "carácter" pero el intérprete dice "número"; en cualquier caso, se imprime un byte)0
: Empuja 0.^
,v
`V
: Empuja el valor superior de los programas anteriores / siguientes paralelas ( "voces"), pero las pilas de todas las "voces" se rellenan con 0, por lo que siempre empujan 0.Entonces, solo hay 13 caracteres que debemos evitar:
(
,)
: El paréntesis no emparejado causará error1
-9
: Solo queremos generar 0.?
: No queremos ingresar nada.*
: Provoca una comprobación de consistencia muy complicada para el código antes y después de una línea que consiste en un solitario*
. Por lo tanto, debemos eliminar la nueva línea o eliminar la*
. La implementación de referencia utiliza Python 2, lo.readline()
que podría significar una "nueva línea"\r
o\n
. Por lo tanto, es mejor simplemente eliminar el*
.fuente
Deadfish , puntaje 86
Si eso es ilegal, entonces también hay
(puntaje 1)
fuente