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ä$$€h
la salida debe ser 010000011100001110100100001001000010010011100010100000101010110001101000
.
A --> 01000001
ä --> 1100001110100100
$ --> 00100100
$ --> 00100100
€ --> 111000101000001010101100
h --> 01101000
Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000
01011110
o0010011100100010
en UTF-8 (se parecen bastante:^
vs∧
)01111100
y0010001100100010
codificar|
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):0xxxxxxx
0x00000080 - 0x000007FF
(128-2047):110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF
(2048-65535):1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF
(65536-2097151):11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
También hay rangos para 5 o 6 bytes, pero dejémoslos fuera por ahora.
El personaje
d
estará 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
x
el patrón detrás de él se rellenan los binarios de estos caracteres, de derecha a izquierda. Entonces eld
(1100100
) con patrón se0xxxxxxx
convierte en01100100
; elЖ
(10000010110
) con patrón se110xxxxx 10xxxxxx
convierte en11010000 10010110
; y el丽
(100111000111101
) con el patrón1110xxxx 10xxxxxx 10xxxxxx
se convierte1110x100 10111000 10111101
, después de lo cual los restantesx
se sustituyen con0
:11100100 10111000 10111101
.Entonces, ese enfoque también lo usé en mi código.
x
Sin 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.map
y deshacerse de lajoin
salida 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 s
contiene el código fuente sin formato String%s
se usa para poner esta cadena en sí misma cons.format(...)
%c
,%1$c
y34
se utilizan para formatear las comillas dobles ("
)s.format(s,34,s)
lo pone todo juntoParte del desafío:
fuente
c&255
se necesita int sin firmar&255
Sin embargo, es bueno no necesitarlo, ya que no utilizamos caracteres que no sean ASCII, ¡gracias!BigInteger
ser bastante corto para convertir a cadenas binarias. Y 2 bytes más cambiando elreturn'0'+
areturn 0+
. Hmm, ¿por qué ese liderazgo es0
necesario 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
rev
s son necesarios porquerawToBits
pone el bit menos significativo primero.as.integer
es 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