Acortar un número largo


10

Cuando se trata de números largos cuando se juega golf con códigos, puede ser difícil reducir la longitud de su código, entonces, ¿tiene algún consejo para hacer que un número sea más corto y fácil de administrar?

Por ejemplo, el siguiente código Pyth imprime "Hola mundo", pero a 44 bytes, eso no es satisfactorio:

Vcjkj85942000775441864767076 2 7=k+kCiN2)k

Entonces, ¿cómo acortaría el número largo 85942000775441864767076?

Respuestas:


10

Momento perfecto para esta pregunta. @isaacg acaba de agregar una nueva característica hoy, que permite acortar enormemente dichos números.

La técnica básica es convertir el número a base 256 y convertirlo en caracteres. Puedes hacer esto usando el código ++NsCMjQ256N. Luego puede usar la cadena resultante en combinación con C, que hace exactamente lo contrario (convertir caracteres en int e interpretar el resultado como número base-256). Por lo que obtener 13 caracteres: C"2ìÙ½}ü¶d". Algunos de los caracteres no se pueden imprimir.

Pero tenga en cuenta que dije 13 CHARS, no bytes. Si copio los caracteres y cuento con https://mothereff.in/byte-counter , dice 13 caracteres y 18 bytes. Esto se debe a la codificación de caracteres de los caracteres, que es UTF-8 por defecto. Y UTF-8 solo permite 2 ^ 7 caracteres diferentes de 1 byte. Cada char ccon ord(c) > 127realmente se almacena usando dos bytes en lugar de uno.

Y aquí viene la nueva característica de @ isaacg en juego. Cambió el formato de código predeterminado de UTF-8 a iso-8859-1. iso-8859 puede representar 256 caracteres con solo 1 byte. Entonces ahora puedes alcanzar 13 BYTES. Sin embargo, esto solo es posible con el compilador estándar , esto no funciona en el compilador en línea.

En primer lugar desea convertir el número de valores hexadecimales mediante el uso de este script: jdm.[2.Hd"0"jQ256. Esto te da 12 32 ec d9 bd 07 7d fc b6 64. Luego, copie esos números en su archivo de código utilizando un editor hexadecimal (por ejemplo, hexedit para linux).

demostración de hexedit

Darse cuenta:

  • Obviamente, eliminas el "al final, si la cadena es la última parte del código.
  • Esto solo funciona si no hay 34(el byte 22) en la representación base-256 de sus números, ya que este es el "carácter y terminará la cadena. Sin embargo, escapar funciona ( 5C 22).
  • Por cierto, cuando abre un archivo con un editor hexadecimal, es probable que vea el byte 0Ao 0d 0aal final, que puede eliminar. Esto solo indica el final de la línea.

Tendré que poner el intérprete sin conexión en mi máquina, pero esto es genial, ¡gracias! :)
Decaimiento Beta

1
La cadena tampoco puede incluir el byte nulo, de valor 00. Además, el \byte 5cpuede o no necesitarse escapar con otro '', dependiendo del byte posterior.
isaacg
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.