Su tarea es escribir un programa, función o fragmento (sí, se permiten fragmentos) que simplemente generen un número entero. Sin embargo , debe poder separar su envío en prefijos que también producen enteros distintos. No puede usar ningún byte que haya aparecido en prefijos anteriores. Por ejemplo, podemos tener los prefijos:
1 # 1 (Now we can't use 1)
1-6 # -5 (Now we can't use - or 6)
1-6/3 # -1 (Now we can't use / or 3)
1-6/3+0xA # 9 Final submission
Reglas
- Su objetivo es crear para probar y crear los enteros más únicos, mientras los mantiene cerca de cero.
- El sistema de puntuación es
((number of unique integers)**3)/(sum of absolute values)
, donde cuanto mayor sea su puntuación, mejor. El ejemplo anterior puntuaciones .
- El sistema de puntuación es
- Debe haber al menos dos enteros únicos (¡sin dividir por cero!)
- Por favor, formatee su respuesta de manera similar a:
# Language, \$(4^{3})/16 = 4\$
1-6/3+0xA (the full program)
- Mencione si su envío está compuesto por fragmentos que evalúan un valor, funciones o programas completos.
- Enumere cada uno de los prefijos y (opcionalmente) una explicación de cómo funcionan.
number
code-challenge
restricted-source
Jo King
fuente
fuente
print 123-len(open(__file__).read())
seguido de#
luego uno de cada byte no utilizado hasta ahora (excepto algunos caracteres de control), con prefijos que cortan esos bytes. Ajuste 123 a lo que centre el rango de salidas alrededor de 0. Para una mejor puntuación, la parte del programa sin comentarios se puede reescribir usando solo los 7 caracteres distintos que son universales para Python. ¿Es todo esto válido?Respuestas:
TI-BASIC (TI-84 + CE),2383/ 14161=952.0
Los 256 bytes en TI-BASIC se descomponen así:
"
,→
personajes, y la nueva línea que las cadenas de descanso.La cadena contiene los 237 bytes permitidos en la primera categoría que aún no están incluidos
118-length(
.El programa calcula 238 enteros distintos, que van desde 118 hasta -119. El puntaje es por lo tanto2383∑118n = - 119|n|=952.
fuente
mean({1,2,3
, lo que se completaría enmean({1,2,3})
. las cadenas también se completan:Disp "Hi!
completa aDisp "Hi!"
. Por lo tanto, la cita final de cierre es innecesariavim, 14³ / 53 = 51,77
Pruébalo en línea! (todos los prefijos)
Descompostura:
fuente
<esc>
representa la tecla de escape y<c-char>
representa ctrl + charLenguage , 256³ / 16384 = 1024
El código fuente de la solución se puede describir de la siguiente manera:
Cada ejecución de bytes idénticos combinada con las ejecuciones anteriores constituye un prefijo, y el programa completo contiene todas las cadenas descritas anteriormente concatenadas.
Este es un puntaje óptimo. (Los programas imprimen todos los números desde -127 hasta 128 inclusive).
Para crear esta respuesta, primero, copié la respuesta de Java aquí para generar programas de brainfuck para imprimir una cadena. Lo ejecuté con esta
main
función:Luego, ejecuté este script Ruby para generar el texto legible por humanos que se muestra aquí:
El programa más grande tiene 3594571896764310192036774345469579167648804468538578264427 bytes de longitud (e impresiones
-90
).fuente
(Crédito a esta interesante utilidad para la conversión). Lo anterior efectivamente se evalúa en el siguiente código:
... que crea un proxy que convierte la longitud del nombre de una propiedad en un número. El primer prefijo termina un carácter después del
.
y usa solo 6 caracteres únicos, excluyendo el.$
. Los siguientes 63 sectores agregan otros 63 caracteres de un solo byte que son válidos en los nombres de propiedad de objetos JS. Los siguientes 44 cortes agregan caracteres válidos de dos bytes compuestos por bytes no utilizados. Las rodajas finales anexan&''
,|""**""
y,~{}
. Los primeros retornos rebanada-2
, el segundo2
, a continuación-3
, a continuación3
,-4
,4
,-5
, etc. hasta los últimos tres rebanadas que son0
,1
, y-1
.fuente
Para este, usamos fragmentos de ataques cerebrales, por lo que nos preocupa el valor, no lo que hacen.
Programa completo:
Prefijos y salida
Pruébalo en línea!
Explicación
Esta es probablemente la mejor respuesta que puede obtener Brain-Flak, ya que hemos usado todo el carácter que Brain-Flak se preocupa, y no podemos agrupar los números más cerca de cero.
El primer fragmento es
<>
,<>
cambia la pila, pero de lo contrario se evalúa a cero, por lo que comenzamos con cero. Desde aquí agregamos(())
esto hace uno. Podríamos haberlo hecho()
, porque también es uno, pero si presionamos uno ahora podremos recordarlo más tarde con{}
y[]
. Esta es prácticamente la única forma{}
y[]
puede crear valor, así que lo hacemos. Como hay una cosa en la pila,[]
cuenta como 1, por lo que restamos 3 del total[[][][]]
y nos lleva a -2. Por último, utilizamos{}
para hacer estallar el que presionamos anteriormente, lo que nos lleva a -1.fuente
Después de dos horas de prueba y error, finalmente obtuve todos los enteros de
-4
a+5
(y7
).Este es un fragmento con los siguientes fragmentos de prefijo:
Pruébalo en línea!
fuente
2*2
a22&7
(-3 y 6 en lugar de -3 y 4) para corregir esa repetición*
.'
y_
mediante el uso de encmp(cmp,())
lugar decmp('','_')
si eso es útil.--[-1-1-1-1-1]
, pero eso realmente no mejora su puntaje.Lote, 176³ / 7744 = 704
El primer prefijo incluye los dos puntos y genera el número -88. Los prefijos posteriores generan números ascendentes y el programa final genera 87.
fuente
Todos los caracteres escapados son bytes individuales: he presentado el programa en este formulario para facilitar la copia y el pegado. Este enlace es para el programa completo sin caracteres escapados; Como se puede ver, hay muchos marcadores de posición para los caracteres no imprimibles utilizados.
El enfoque utilizado es similar a la respuesta TI-BASIC de lirtosiast , aunque escribí mi respuesta antes de examinar las otras entradas. El cable funciona de la siguiente manera:
La cadena está formada por cada carácter de un solo byte que no sea 0 (NULL), 127 (retroceso) y los caracteres repetitivos (
-C\|l"
). De esa forma, cada carácter de la cadena se puede eliminar de uno en uno para producir cadenas de longitudes 248 hasta 0. Estos programas producen resultados en el rango [-124-124], con una suma de valores absolutos de 15500.El código fue generado usando este programa :
Y la suma de los números generados de cada uno de los programas truncados se encontró con este programa :
fuente
Gelatina , 984
Pruébalo en línea!
Puedes ver los prefijos (separados por una nueva línea doble) aquí .
Los números impresos son, en orden:
fuente
Python 2,113/ 53=25.1132075472
Prefijos
No es óptimo, pero lo mejor que pude encontrar personalmente con esta estructura en particular.
fuente
Python 26 63/ / 9 = 24
Aquí están los prefijos y lo que generan
fuente
Limpio , 403 / 400 = 160
Pruébalo en línea!
Define
n
qué produce-20, -19, ..., 18, 19
según la longitud del tipoG
.El prefijo más pequeño de
G
apariencia:: G = G
, precedido por las importaciones y definiciones variadas.El prefijo más grande de
G
apariencia , precedido de manera similar.:: G = GABCFHIJKMNOPQRUVWXYZcjkqxyz_0123456789`
fuente
Japt ,2453/ 15006=980.0163268026123
Pruébalo en línea!
Al igual que las otras entradas, usa la longitud de una cadena. Los caracteres en el fragmento inicial, así como
\r
(las áreas de texto no juegan bien con esto) y{
(carácter de interpolación de cadena) están excluidos de la cadena.El primer programa es
_Ê-122}$($"
, cada programa tiene un carácter más largo con la excepción de cuando agrega\\
.fuente
122
con#z
pero eso no sería mejorar su puntuación.Python 3,( 63) / 12 = 18
Este es un fragmento.
Los fragmentos de prefijo individuales son:
Los operadores bit a bit de Python tratan los enteros negativos como un complemento de dos con
1
s ilimitados a la derecha, por lo que-5
se trata como...11111011
, que cuando OR con...000010
da...11111011
no cambia.fuente
Sobresalir,( 63) / 12 = 18
Prefix
El desafío no funciona bien con la estructura de fórmulas de Excelfuente
Enchantments Runic , 117 3 / 3.422 = 468.034
Pruébalo en línea!
Y el prefijo .
Imprime [-58,58] inclusive.
Utiliza una táctica similar a otras entradas, utiliza una cadena progresivamente más larga, obtiene su longitud, resta
B
(valor decimal de66
) e imprime el resultado. Utiliza un carácter que no se imprime(se muestra en el bloque de código
€
porque, aparentemente, eso es lo que se€
evalúa en HTML) para utilizar el valor de byte0x80
(y consumir un valor inutilizable0x00
) y obtener un valor más. Solo los valores de byte hasta 127 que no se pueden representar de ninguna manera son10
y13
, porque causarían que el programa tenga dos líneas de alto y no sea leído correctamente por el puntero de instrucción.fuente
Carbón ,
95³ / 2256 = 380.0421196³ / 2304 = 384El primer prefijo son los primeros 7 bytes y genera el número
47
. Pruébalo en línea! Los prefijos posteriores generan números descendentes y las salidas finales del programa-48
. Pruébalo en línea! Editar: Aumento de la puntuación en 3.95789 gracias a @ ASCII-only.fuente