Programa de auto puntuación


15

Tenemos el desafío de generar su propia puntuación , pero parece que todas las respuestas allí solo codifican la salida y eso es aburrido 1 . Así que tengamos un nuevo desafío. Su programa debe generar su propia longitud en bytes seguidos de la cadena " bytes", pero para evitar soluciones codificadas si reducimos su tamaño eliminando cualquier byte, el nuevo programa también debe generar su nuevo recuento de bytes, aún seguido de " bytes". La salida no necesita ser sensible a mayúsculas y minúsculas. También puede optar por generar una nueva línea final.

Sus respuestas se puntuarán en bytes, siendo menos bytes mejores.


1: De hecho, me gustan algunas de las respuestas allí.


Tal vez podría cambiar el nombre del desafío a "programa modificable de auto puntuación" o algo similar.
dylnan

¿Se pueden usar idiomas compatibles o solo interpretados?
Logern

@Logern Puedes usar cualquiera de los dos.
Post Rock Garf Hunter

2
Argh Pasé media hora haciendo una solución de Hexagony , pero cuando fui a probarlo, ¡quitar el byte hizo que el hexágono se encogiera ! :(
Jo King

1
@WW Lo que quiero decir es " 1 byteses una gramática técnicamente incorrecta, pero suponiendo que los idiomas no tengan una función integrada para generar la cadena" bytes "en <= 2 bytes, el programa tendrá más de 3 bytes, por lo que no importa "- no importa de todos modos.
user202729

Respuestas:


16

Revés , 40 36 29 bytes

vv""sseettyybb  ""jjHHOO]

Pruébalo en línea! ¡Verificación!

En caso de duda, duplique en todo. Esto utiliza la capacidad de Backhand para moverse más de un paso a la vez para implementar la redundancia. Todos los no imprimibles tienen el valor de byte 28.

Explicación:

Programa no irradiado:

v       Reduce step count to 2
  "    Start string literal
    s e t y b        Push the " bytes" part of the output
                  " Push 28 twice and end the string literal
                       j    Jump to the 28th position (0 indexed) 
                             ]   Increment the 28 to 29
                           O     Print the 29
                         H       Halt and output the entire stack

Programa irradiado:

Si se elimina algún carácter, todos los caracteres posteriores se desplazan hacia abajo.

vv"sseettyybb
v " s e t y b     The same instructions are still executed

Sin embargo, en lugar de saltar al ], se refleja en el final del programa y aterriza en el O.

                             v  28th character (0 indexed)
vv""sseettyybb       ""jjHHOO]
v""sseettyybb       ""jjHHOO]OOHHjj"".....
                             ^ 28th character, reflecting off the end of the code

3

Encantamientos rúnicos , 47 bytes

>>yyLL     @"setyb 64"/
"47 bytes"@"setyb 64"L\

Pruébalo en línea!

Que es más o menos un puerto de mi respuesta Geiger Counter , pero con una salida diferente (que es, en sí mismo, un puerto de una respuesta de Klein).

>>yyLLes necesario para que Runic genere (al menos) una IP, combine dos IPS y se refleje hacia la izquierda, de modo que todas las variaciones den como resultado una sola IP que se mueva hacia la izquierda. Podría ser reemplazado por yy<<pero no guarda ningún byte.

Los reflectores de la derecha fuerzan la IP a la cadena inferior izquierda, por lo que la eliminación de uno de ellos superior derecho permite que la IP entre en la cadena superior derecha. Al eliminar un byte en cualquier otro lugar a lo largo de la línea superior, se ajusta el reflector superior para que se asiente sobre la L (permitiendo que el programa entre en la esquina inferior derecha). La eliminación de un byte a lo largo de la parte inferior ajusta ese reflector (o lo elimina) para que el último carácter se llene implícitamente con un espacio, lo que permite que la IP rebote en ambos lados del reflector superior derecho y en la cadena superior derecha.

Sin embargo, los espacios en exceso son decepcionantes. Pero todos los intentos de reducirlos han dado como resultado programas más grandes, programas del mismo tamaño o programas que no son 100% a prueba de radiación. Tanto las respuestas Klein como> <> aquí usan características no disponibles en Runic.


2

> <> , 43 39 bytes

||vn-{"' bytes"-10/
 o>o<"38 bytes"[0/0

Pruébalo en línea! ¡Verificación!

En el programa no irradiado, agregamos 0a '(39), y en el programa irradiado omitimos el 0 y lo agregamos -1. Si algo se elimina de la fila superior, cambiamos a la fila inferior en su lugar y solo imprimimos 38 bytes.


2

Hexagonía , 71 bytes.

//.........||.>e;s;@..\;t;y;b<>}F"+!P0;/|/F!P0$@;<...t;ye;bs/.........)

Pruébalo en línea! ¡Verificación!

Pasé demasiado tiempo tratando de conseguir esto en un hexágono de tamaño 5, pero tuve que conformarme con un tamaño inferior a 6 :(.

Expandido:

      / / . . . .
     . . . . . | |
    . > e ; s ; @ .
   . \ ; t ; y ; b <
  > } F " + ! P 0 ; /
 | / F ! P 0 $ @ ; < .
  . . t ; y e ; b s /
   . . . . . . . . .
    ) . . . . . . .
     . . . . . . .
      . . . . . .

Inicialmente hice esto con la )fila inferior, pero resulta que es exactamente donde está la división entre los hexágonos de tamaño 5 y 6. Esto significa que cuando se elimina un byte, el tamaño se desplaza hacia abajo y arruina los caminos. Definitivamente estoy seguro de que es posible una talla 5.


Si estoy entendiendo esto correctamente, ¿no puedes poner )una fila más abajo y luego poner un no-op después de eso para que sea un hexágono de tamaño 6?
EdgyNerd

@EdgyNerd Si pones un no-op después de que se pueda eliminar sin afectar el programa
Jo King

2

Klein 000, 41 bytes

<<@"setyb "$"4"+"0"/
..@"setyb 04"(....<1

Pruébalo en línea! Verificador de JoKing

Creo que esta respuesta es similar a la respuesta> <> de JoKing , pero no leo> <>, así que no puedo estar seguro.

Hay 4 tipos diferentes de eliminación de bytes aquí

  1. Un byte se elimina de la primera línea anterior /. En este caso, la barra se mueve efectivamente hacia la izquierda un espacio, desviándola hacia la línea inferior y evitando que se ejecute la parte modificada del código. Esto nos hace ejecutar el código ("40 bytes"@, que genera 40 bytes.

  2. El primero /se elimina de la primera línea. En este caso ejecutamos el código "0"+"4"$" bytes"@, que es una forma complicada o de impresión 40 bytes.

  3. La nueva línea se elimina. Esto nos hace comenzar desde el final de la segunda línea y el código resultante (con noops eliminados) es 1("40 bytes"@, que solo imprime 40 bytes.

  4. Se elimina un byte de la última línea. Esto hace que 1al final de la primera línea se mueva hacia la izquierda y evita que se agregue a la pila cuando el punto se desvía /. El código "0"+por eso empuja 0en lugar de 1, el resto del código convierte el 0en 40 bytes.

Klein 001, 41 bytes

\("40 bytes"@......1
..@"setyb "$"4"+"0"/

Pruébalo en línea! Verificador de JoKing

Aquí hay una respuesta usando una topología diferente. Es del mismo tamaño pero creo que hay margen de mejora.


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.