Código de bolos reorganizable

14

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 AJBtendría una puntuación de 3
    Un programa con código fuente AAJtendría una puntuación de 2
    Un programa con código fuente 111tendría una puntuación de1

  • Esta es una variante de . ¡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

  1. Entrada
    El programa / función puede tomar una entrada, aunque es completamente opcional.

  2. 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)

  3. Reorganización
    No importa cómo se reorganice el código fuente, la salida debe ser la misma.

    Ejemplo:
       Programa: ABJsalidas hello world, al igual que los programas: [ AJB, JAB, JBA, etc.]

Esta es una variante de . ¡El programa con el mayor número de personajes gana!

Albert Renshaw
fuente
1
Sin ninguna tarea específica que lograr, este desafío es demasiado amplio en mi opinión.
Dennis
2
¿Qué significa no nulo?
Dennis
2
Si bien su puntuación de pangrama es un intento de hacer que el juego de bolos de código funcione, no estoy seguro de que estos desafíos realmente se deban etiquetar como bolos de código . El mecanismo de puntuación es bastante diferente de lo que se supone que es el juego de bolos de código, por lo que diría que use código de desafío o cree una nueva etiqueta.
Martin Ender
1
Tengo que estar de acuerdo con Martin. Por ejemplo, este desafío no es un código de golf. Tan pronto como anote por cualquier cosa que no sea el número total de caracteres (o bytes), ya no es un desafío de boliche de código
Nathan Merrill
3
¿El programa / función tiene que finalizar? (por ejemplo, ¿puedo imprimir 0para siempre?)
MildlyMilquetoast

Respuestas:

18

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)

Nathan Merrill
fuente
2
Usted señor es un genio. Y espera, ¿por qué mi computadora se descompone? : 'P
HyperNeutrino
Pensé que Unicode tenía el carácter 1114112?
MilkyWay90
14

Muchos idiomas, 2 puntos

0.

Produce 0.0como 0.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):

  • Python REPL
  • Javascript REPL
  • MATLAB (produce ans = 0)
  • Octava (produce ans = 0)
  • MATL (produce 0)
  • CJam
  • Retina (produce 0 )
  • Apilado (produce 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.

  • Cualquier operador binario o unario fallará como último carácter
  • Cualquiera de [](){} requerir un partido y fallará si el cierre es primero
  • Un tabulador o espacio no puede iniciar una línea. Las líneas nuevas no se pueden usar en REPL.
  • A , no puede ser el primer personaje
  • Un #primer lugar comentaría todo y no produciría salida
  • Un inicio \es una continuación de línea no válida
  • Los backticks (Python 2) deben estar emparejados, y los que rodean nada es un error
  • $, !, ?, Y @no pueden ser utilizados sin otros caracteres no utilizables

Esto deja letras, dígitos _, .y citas.

  • Con comillas, cualquier no cadena fuera de ellas da un error.
  • Letras con posibles dígitos y _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 sean 0. Entonces, creo que es cero y .es la única forma de obtener una puntuación superior 1. Pero, no conozco bien el Python lexer, así que podría estar perdiendo algo.

xnor
fuente
11

CJam , puntaje 15

T U
V	LMOQR[]0q

Pruébalo en línea!

Siempre imprime 0000:

  • 0 solo empuja un cero.
  • T, U, VSon variables que son pre-inicializa a cero.
  • L, M, O, Q, RSon 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.
  • salto de línea, espacio y tabulación son ignorados por el analizador.
Martin Ender
fuente
¡Esta es una gran respuesta para un lenguaje como CJam! Niza
Albert Renshaw
¿Se rpodría agregar una minúscula para lograr algo similar a la minúscula q?
Albert Renshaw
1
@AlbertRenshaw no puedes tener ambos, porque uno producirá un error en EOF.
Martin Ender
9

MATL , 3 5 6 puntos

La idea de agregar espacios en blanco fue tomada de la respuesta de Bijan .

lv
 T1

El código, o cualquier permutación del mismo, genera tres separados por líneas nuevas.

Pruébalo en línea!

Explicación

  • La función lpor defecto empuja el número uno a la pila.
  • Literal 1hace lo mismo.
  • Literales Tempujones true, que se muestra como número uno.
  • El espacio y la nueva línea son separadores, y aquí no hacen nada.
  • vconcatena toda la pila hasta ahora en un vector de columna. Entonces, por ejemplo, vluego Tconcatenaría los dos primeros números en una columna (y luego se empujaría el siguiente número). Una inicial vproduciría una matriz vacía.

Al final del código, la pila se muestra implícitamente, con las siguientes reglas:

  • Cada elemento o matriz en la pila se muestra en una línea diferente.
  • Los vectores de columna se muestran con cada elemento en una línea diferente.
  • La matriz vacía no produce salida.

Entonces, cualquier permutación de los caracteres de entrada produce 1tres veces en diferentes líneas.

Luis Mendo
fuente
¿Explicación? Tengo curiosidad acerca de cómo funciona esto.
Camarada SparklePony
@Sparkle agregó una explicación
Luis Mendo
¡Agradable! También solo quería señalar que tenía este texto en el desafío 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, posiblemente
Albert Renshaw
1
@AlbertRenshaw ¡Gracias por el aviso! Dos puntos más
Luis Mendo
Te estoy acusando de robar mi idea. Sin embargo, no es un problema.
Bijan
6

Jalea , la puntuación de 53 101

¶ ¤$¥&+ABDFHNPQSUVX^_aborv|®²×ȧȯḄḅḌḞḢḤḷṀṂṚṛṠṢṪẠạị«»()kquƁƇƊƑƘⱮƝƤƬƲȤɓɗƒɦƙɱɲƥʠɼʂƭʋȥẸẈẒẎŻẹḥḳṇọụṿẉỵẓḋėġṅẏ

Usando 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, inicialmente 0(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).

Jonathan Allan
fuente
1
Puede agregar todos los caracteres fuera de la página de códigos de forma gratuita, ya que el intérprete los descarta antes de procesar el código. Sin embargo, todavía no sé qué significa no nulo.
Dennis
1
Creo que el espíritu del desafío es probablemente que los personajes deberían estar en la página. Pregunté acerca de no nulo y la respuesta fue especificar una salida mínima de 1 byte.
Jonathan Allan
@ ¿Dennis alguna idea sobre la terminología correcta de lo que sucede con el análisis entre paréntesis?
Jonathan Allan
Todos los caracteres no utilizados comienzan un nuevo enlace, al igual que una nueva línea.
Dennis
1
Llamémosles comportamiento indefinido. : P
Dennis
4

TI-Basic (serie 83), 93 puntos (99 en una TI-84 Plus)

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZθnπeiAnsrandgetKeyZXsclZYsclXsclYsclXminXmaxYminYmaxTminTmaxθminθmaxZXminZXmaxZYminZYmaxZθminZθmaxZTminZTmaxTblStartPlotStartZPlotStartnMaxZnMaxnMinZnMinΔTblTstepθstepZTstepZθstepΔXΔYXFactYFactTblInputNI%PVPMTFVP/YC/YPlotStepZPlotStepXresZXresTraceStep

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, randy getKey), 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, getKeyserá 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}porque getDatey getTimedevuelve 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).

Misha Lavrov
fuente
Esto es inteligente No es particularmente impresionante jaja, ¡pero sí inteligente! +1
Albert Renshaw
3

(no competidor) Brainf-ck, 63 bytes

Bueno, no sé si esto se considera trampa, pero ...

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

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.

brianush1
fuente
Consideraría que una salida nula
Albert Renshaw
Oh, ¿debería eliminar mi respuesta o marcarla como no competitiva?
brianush1
1
Hay 97 caracteres que se pueden escribir, 7 de los cuales no se pueden usar (8-1), por lo que diría que 90.
Bijan
@ brianush1 puedes dejarlo como no competitivo para que otros puedan verlo. Editaré la pregunta un poco más para explicar que la salida debe ser de al menos 1 byte
Albert Renshaw
15
@AlbertRenshaw (perdón por todos estos comentarios) Si la salida debe ser de 1 byte, entonces el carácter NULL debe contar, ya que es un byte, aunque uno con un valor de 0.
brianush1
3

Haskell, 3 puntos

+ 1

No importa cuán reorganizado este código siempre devuelve la función que incrementa la entrada. Ejemplos de uso en repl:

>(+ 1) 1
2
>(1+ ) 1  
2
>( +1) 1
2
Antístenes
fuente
2

√ å ı ¥ ® Ï Ø ¿ , 128,234 (?) Puntos

Llegué a 128,234 con la ayuda de @DestructibleLemon. Este programa utiliza todos los caracteres Unicode (128,237) excepto o, Oy ł. 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:

===== OUTPUT =====



==================

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.

caird coinheringaahing
fuente
¿Qué conjunto de caracteres usa? utf 8? utf-16? ¿Utiliza todo de Unicode?
Destructible Lemon
@DestructibleLemon Al buscar en la página de github, parece usar "CP-1252" para la codificación.
brianush1
@DestructibleLemon Los comandos están todos en CP-1252 (Windows-1252) pero aceptará cualquier carácter Unicode como sintaxis válida
caird coinheringaahing
Aparentemente, hay 128,237 caracteres unicode, entonces, ¿tendrías 128,234? en.wikipedia.org/wiki/Unicode#cite_note-24
Destructible Lemon
Según otras respuestas, aparentemente hay 1.112.064 unicode, por lo que ya no estoy seguro
Destructible Lemon
1

J, 3 bytes

 1

Los caracteres 1, espacio y nueva línea siempre imprimirán 1.

Bijan
fuente
1

/// , 1 2 puntos

\_

Prué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.

Camarada SparklePony
fuente
Esto debería ser dos puntos, no bytes
Destructible Lemon
@DestructibleLemon Lo sentimos, formato TIO.
Camarada SparklePony
1

Puntos , 1,114,111 caracteres (si usa unicode).

<87 dots here> Every Unicode character except NUL and . here

Explicación:

1                                           leading binary number
1010                                        010 increments the value under the pointer
1010111                                     111 prints out chr(1)

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.

MilkyWay90
fuente
0

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 ).

!
" #$    %&'+,-./0:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(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.
  • otros personajes: no op.

Entonces, solo hay 13 caracteres que debemos evitar:

  • (, ) : El paréntesis no emparejado causará error
  • 1-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" \ro \n. Por lo tanto, es mejor simplemente eliminar el *.
kennytm
fuente
0

Deadfish , puntaje 86

o.ABCDEFGHIJKLMNOPQRSTUVWXYZabcefghjklmnpqrtuvwxyz?!|[]_-();'"*&^$#@!1234567890+=<>,/\:

Si eso es ilegal, entonces también hay

o

(puntaje 1)

ronquido
fuente