Sua tarefa, se você deseja aceitá-la, é escrever um programa que produz seu próprio código-fonte na representação binária UTF-8 .
Regras
A fonte deve ter pelo menos 1 byte de comprimento.
Seu programa não deve receber entrada (ou ter uma entrada vazia não utilizada).
A saída pode estar em qualquer formato conveniente.
Nova linha à direita opcional é permitida.
Observe que um byte tem 8 bits e o comprimento da representação binária UTF-8 é necessariamente um múltiplo de 8.
Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
As brechas padrão são proibidas.
Exemplo
Digamos que seu código-fonte seja Aä$$€h
, sua representação binária UTF-8 correspondente é 010000011100001110100100001001000010010011100010100000101010110001101000
.
Se eu executar Aä$$€h
a saída deve ser 010000011100001110100100001001000010010011100010100000101010110001101000
.
A --> 01000001
ä --> 1100001110100100
$ --> 00100100
$ --> 00100100
€ --> 111000101000001010101100
h --> 01101000
Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000
01011110
ou0010011100100010
em UTF-8 (eles parecem muito parecidos:^
vs∧
)01111100
e0010001100100010
codifique|
e∣
.Respostas:
V , 28 (ou 16?) Latina 1 bytes (35 bytes UTF-8)
Experimente online!
Hexdump (em latim 1):
Saída (representação binária do mesmo código em UTF-8, não em latim 1):
Explicação:
Ou...
V , 16 bytes
Experimente online!
Resultado:
OP disse:
Isso gera um formato muito mais conveniente para V: P (mas não tenho certeza se isso está estendendo as regras)
fonte
CJam , 20 bytes
Experimente online!
Surpreso ao ver CJam ganhando! vamos ver quanto tempo isso dura ...
fonte
05AB1E , 105 bytes
05AB1E não possui built-in de conversão UTF-8, por isso tenho que fazer tudo manualmente .
Experimente on-line ou verifique se é um problema .
Explicação:
quine -part:
O quine mais curto para 05AB1E é este:
0"D34çý"D34çý
( 14 bytes ) fornecido por @OliverNi . Minha resposta utiliza uma versão modificada do que Quine, adicionando ao...
aqui:0"D34çý..."D34çý...
. Uma breve explicação sobre esse quine:Parte do desafio:
Agora, para a parte do desafio do código. Como mencionei na parte superior, o 05AB1E não possui built-in de conversão UTF-8, por isso tenho que fazer essas coisas manualmente. Eu usei esta fonte como referência sobre como fazer isso: Converter manualmente pontos de código unicode em UTF-8 e UTF-16 . Aqui está um breve resumo sobre a conversão de caracteres Unicode em UTF-8:
"dЖ丽"
torna-se[100,1046,20029]
)[100,1046,20029]
torna-se["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
Também existem intervalos para 5 ou 6 bytes, mas vamos deixá-los de fora por enquanto.
O personagem
d
estará no primeiro intervalo, portanto, 1 byte em UTF-8; caractereЖ
está no segundo intervalo, portanto, 2 bytes em UTF-8; e caractere丽
está no terceiro intervalo, portanto, 3 bytes em UTF-8.O
x
padrão por trás dele é preenchido com o binário desses caracteres, da direita para a esquerda. Então od
(1100100
) com padrão0xxxxxxx
se torna01100100
; oЖ
(10000010110
) com padrão110xxxxx 10xxxxxx
se torna11010000 10010110
; e o丽
(100111000111101
) com o padrão1110xxxx 10xxxxxx 10xxxxxx
se torna1110x100 10111000 10111101
, após o que os restantesx
são substituídas por0
:11100100 10111000 10111101
.Então, essa abordagem também usei no meu código. Em vez de verificar os intervalos reais, basta olhar para o comprimento do binário e compará-lo com a quantidade de
x
padrões no entanto, pois isso economiza alguns bytes.Veja este 05AB1E resposta meu (seções Como comprimir grandes inteiros? E Como listas inteiras compressa? ) Para entender por que
•Xó•18в
é[1,8,12,17]
.fonte
JavaScript (Node.js) , 60 bytes
-15 bytes de @Neil e @Shaggy
Experimente online!
fonte
padStart(8,0)
economiza 2 bytes.map
e largou ojoin
para a saída de uma matriz de bitsFerrugem , 187 bytes
Experimente online!
fonte
Perl 6 , 46 bytes
Experimente online!
O quine padrão com
.fmt("%08b",'')
formata a lista de valores ordinais em binário de comprimento 8 e se junta a uma string vazia.fonte
Perl 5, 42 bytes
TIO
fonte
Java 10,
339308265227225186184 bytes-8 bytes graças a @NahuelFouilleul removendo o desnecessário
&255
(e -35 adicional para chamar à atenção que as especificações completas do programa do desafio foram revogadas e uma função também é permitida agora ..)-41 bytes graças a @ OlivierGrégoire .
Experimente online.
Explicação:
quine -part:
var s
contém o código-fonte não formatado String%s
é usado para colocar essa String em si mesma coms.format(...)
%c
,%1$c
E34
são usados para formatar as aspas duplas ("
)s.format(s,34,s)
coloca tudo juntoParte do desafio:
fonte
c&255
não é necessário&255
No entanto, é bom não precisar, pois não usamos caracteres não-ASCII, obrigado!BigInteger
ser muito pequeno para converter em strings binárias. E mais 2 bytes alterandoreturn'0'+
parareturn 0+
. Hmm, por que essa liderança é0
necessária? Isso me confunde que todos os binários-cordas internas têm esse líder0
, mas o primeiro não quando usandoBigInteger.toString(2)
..Python 2 ,
6867 bytesExperimente online!
Uma modificação desta resposta
-1 bytes removendo o espaço após 'in' (obrigado @mdahmoune)
fonte
in
'%08b'%ord(i)
, em vez debin(256|ord(i))[3:]
, mas não funcionou por algum motivoR ,
138114 bytesExperimente online!
Usa a capacidade de R de separar funções para a representação de caracteres. Os
rev
são necessários porquerawToBits
coloca o bit menos significativo em primeiro lugar.as.integer
é necessário porque, caso contrário, os bits são exibidos com um zero à esquerda.Editado quando percebi que qualquer saída conveniente era permitida. Também foi eliminado por um na contagem de bytes original.
fonte
C # (Compilador interativo do Visual C #) , 221 bytes
Experimente online!
C # (Visual C # Interactive Compiler) com sinalizador
/u:System.String
, 193 bytesExperimente online!
fonte
Ferramentas Bash + GNU, 48 bytes
TIO
fonte