Su tarea, si desea aceptarlo, es escribir un programa que genere su propio código fuente en la representación binaria UTF-8 .
Reglas
La fuente debe tener al menos 1 byte de longitud.
Su programa no debe tomar entrada (o tener una entrada vacía no utilizada).
La salida puede estar en cualquier formato conveniente.
Se permite la nueva línea final opcional.
Observe que un byte es de 8 bits, y la longitud de la representación binaria UTF-8 es necesariamente un múltiplo de 8.
Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Las lagunas estándar están prohibidas.
Ejemplo
Digamos que su código fuente es Aä$$€h, su representación binaria UTF-8 correspondiente es 010000011100001110100100001001000010010011100010100000101010110001101000.
Si ejecuto Aä$$€hla salida debe ser 010000011100001110100100001001000010010011100010100000101010110001101000.
A --> 01000001
ä --> 1100001110100100
$ --> 00100100
$ --> 00100100
€ --> 111000101000001010101100
h --> 01101000
Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000

01011110o0010011100100010en UTF-8 (se parecen bastante:^vs∧)01111100y0010001100100010codificar|y∣.Respuestas:
V , 28 (¿o 16?) Latín 1 bytes (35 UTF-8 bytes)
Pruébalo en línea!
Hexdump (en latín 1):
Salida (representación binaria del mismo código en UTF-8, no en latín 1):
Explicación:
O...
V , 16 bytes
Pruébalo en línea!
Salida:
OP dijo:
Esto sale en un formato mucho más conveniente para V: P (pero no estoy seguro de si eso está estirando las reglas)
fuente
CJam , 20 bytes
Pruébalo en línea!
¡Sorprendido de ver ganar a CJam! veremos cuánto dura eso ...
fuente
05AB1E , 105 bytes
05AB1E no tiene funciones integradas de conversión UTF-8, así que tengo que hacer todo manualmente .
Pruébelo en línea o verifique que sea una quine .
Explicación:
quine -parte:
La quine más corta para 05AB1E es esta:
0"D34çý"D34çý( 14 bytes ) proporcionada por @OliverNi . Mi respuesta utiliza una versión modificada de ese quine añadiendo al...aquí:0"D34çý..."D34çý.... Una breve explicación de esta quine:Parte del desafío:
Ahora para el desafío parte del código. Como mencioné en la parte superior, 05AB1E no tiene incorporadas conversiones UTF-8, por lo que tengo que hacer estas cosas manualmente. He usado esta fuente como referencia sobre cómo hacer eso: convertir manualmente puntos de código unicode en UTF-8 y UTF-16 . Aquí un breve resumen de eso con respecto a la conversión de caracteres Unicode a UTF-8:
"dЖ丽"convierte en[100,1046,20029])[100,1046,20029]convierte["1100100","10000010110","100111000111101"])0x00000000 - 0x0000007F(0-127):0xxxxxxx0x00000080 - 0x000007FF(128-2047):110xxxxx 10xxxxxx0x00000800 - 0x0000FFFF(2048-65535):1110xxxx 10xxxxxx 10xxxxxx0x00010000 - 0x001FFFFF(65536-2097151):11110xxx 10xxxxxx 10xxxxxx 10xxxxxxTambién hay rangos para 5 o 6 bytes, pero dejémoslos fuera por ahora.
El personaje
destará en el primer rango, por lo que 1 byte en UTF-8; el carácterЖestá en el segundo rango, entonces 2 bytes en UTF-8; y el carácter丽está en el tercer rango, por lo que 3 bytes en UTF-8.En
xel patrón detrás de él se rellenan los binarios de estos caracteres, de derecha a izquierda. Entonces eld(1100100) con patrón se0xxxxxxxconvierte en01100100; elЖ(10000010110) con patrón se110xxxxx 10xxxxxxconvierte en11010000 10010110; y el丽(100111000111101) con el patrón1110xxxx 10xxxxxx 10xxxxxxse convierte1110x100 10111000 10111101, después de lo cual los restantesxse sustituyen con0:11100100 10111000 10111101.Entonces, ese enfoque también lo usé en mi código.
xSin embargo, en lugar de verificar los rangos reales, solo miro la longitud del binario y lo comparo con la cantidad de patrones, ya que eso ahorra algunos bytes.Ver este 05AB1E respuesta mío (secciones cómo comprimir grandes números enteros? Y ¿Cómo listas de números enteros comprimir? ) Para entender por qué
•Xó•18вes[1,8,12,17].fuente
JavaScript (Node.js) , 60 bytes
-15 bytes de @Neil y @Shaggy
Pruébalo en línea!
fuente
padStart(8,0)ahorra 2 bytes.mapy deshacerse de lajoinsalida de una matriz de bitsÓxido , 187 bytes
Pruébalo en línea!
fuente
Perl 6 , 46 bytes
Pruébalo en línea!
La línea estándar con
.fmt("%08b",'')formatos de la lista de valores ordinales en binario de longitud 8 y se une con una cadena vacía.fuente
Perl 5, 42 bytes
TIO
fuente
Java 10,
339308265227225186184 bytes-8 bytes gracias a @NahuelFouilleul eliminando lo innecesario
&255(y un -35 adicional por llamar mi atención sobre que las especificaciones completas del programa del desafío habían sido revocadas y ahora también se permite una función ...)-41 bytes gracias a @ OlivierGrégoire .
Pruébalo en línea.
Explicación:
quine -parte:
var scontiene el código fuente sin formato String%sse usa para poner esta cadena en sí misma cons.format(...)%c,%1$cy34se utilizan para formatear las comillas dobles (")s.format(s,34,s)lo pone todo juntoParte del desafío:
fuente
c&255se necesita int sin firmar&255Sin embargo, es bueno no necesitarlo, ya que no utilizamos caracteres que no sean ASCII, ¡gracias!BigIntegerser bastante corto para convertir a cadenas binarias. Y 2 bytes más cambiando elreturn'0'+areturn 0+. Hmm, ¿por qué ese liderazgo es0necesario por cierto? Me confunde que todas las cadenas binarias internas tienen esta guía0, pero la primera no cuando se usaBigInteger.toString(2)...Python 2 ,
6867 bytesPruébalo en línea!
Una modificación de esta respuesta
-1 bytes eliminando el espacio después de 'in' (gracias @mdahmoune)
fuente
in'%08b'%ord(i)lugar debin(256|ord(i))[3:], pero no funcionó por alguna razónR ,
138114bytesPruébalo en línea!
Utiliza la capacidad de R para dispersar funciones a su representación de personaje. Los
revs son necesarios porquerawToBitspone el bit menos significativo primero.as.integeres necesario porque de lo contrario los bits se muestran con un cero a la izquierda.Editado una vez que me di cuenta de que se permitía cualquier salida conveniente. También estaba fuera por uno en el recuento de bytes original.
fuente
C # (compilador interactivo de Visual C #) , 221 bytes
Pruébalo en línea!
C # (compilador interactivo de Visual C #) con indicador
/u:System.String, 193 bytesPruébalo en línea!
fuente
Bash + herramientas GNU, 48 bytes
TIO
fuente