Votre tâche, si vous souhaitez l'accepter, est d'écrire un programme qui génère son propre code source dans la représentation binaire UTF-8 .
Règles
La source doit avoir au moins 1 octet de long.
Votre programme ne doit pas accepter d'entrée (ou avoir une entrée vide non utilisée).
La sortie peut être dans n'importe quel format approprié.
La nouvelle ligne de fin facultative est autorisée.
Notez qu'un octet est de 8 bits, et la longueur de la représentation binaire UTF-8 est nécessairement un multiple de 8.
Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
Les failles standard sont interdites.
Exemple
Disons que votre code source est Aä$$€h
, sa représentation binaire UTF-8 correspondante est 010000011100001110100100001001000010010011100010100000101010110001101000
.
Si je lance Aä$$€h
la sortie doit être 010000011100001110100100001001000010010011100010100000101010110001101000
.
A --> 01000001
ä --> 1100001110100100
$ --> 00100100
$ --> 00100100
€ --> 111000101000001010101100
h --> 01101000
Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000
01011110
ou0010011100100010
en UTF-8 (ils ont l' air assez ressemblent:^
vs∧
)01111100
et0010001100100010
encoder|
et∣
.Réponses:
V , 28 (ou 16?) Latin 1 octets (35 UTF-8 octets)
Essayez-le en ligne!
Hexdump (en latin 1):
Sortie (représentation binaire du même code en UTF-8, pas en latin 1):
Explication:
Ou...
V , 16 octets
Essayez-le en ligne!
Production:
OP a déclaré:
Cela sort dans un format beaucoup plus pratique pour V: P (mais je ne sais pas si cela étire les règles)
la source
CJam , 20 octets
Essayez-le en ligne!
Surpris de voir CJam gagner! on verra combien de temps ça dure ...
la source
05AB1E , 105 octets
05AB1E n'a pas de conversion UTF-8 intégrée, donc je dois tout faire manuellement ..
Essayez-le en ligne ou vérifiez qu'il s'agit d'une quine .
Explication:
quine -part:
Le quine le plus court pour 05AB1E est celui-ci:
0"D34çý"D34çý
( 14 octets ) fourni par @OliverNi . Ma réponse utilise en ajoutant à la version modifiée de ce Quine...
ici:0"D34çý..."D34çý...
. Une brève explication de ce quine:Partie défi:
Maintenant, pour la partie défi du code. Comme je l'ai mentionné en haut, 05AB1E n'a pas de conversion intégrée UTF-8, donc je dois faire ces choses manuellement. J'ai utilisé cette source comme référence sur la façon de le faire: convertir manuellement les points de code unicode en UTF-8 et UTF-16 . Voici un bref résumé de celui concernant la conversion des caractères Unicode en UTF-8:
"dЖ丽"
devient[100,1046,20029]
)[100,1046,20029]
devient["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
Il existe également des plages de 5 ou 6 octets, mais laissons-les pour l'instant.
Le caractère
d
sera dans la première plage, donc 1 octet en UTF-8; le caractèreЖ
est dans la deuxième plage, donc 2 octets en UTF-8; et le caractère丽
est dans la troisième plage, donc 3 octets en UTF-8.Le
x
dans le motif derrière lui est rempli du binaire de ces caractères, de droite à gauche. Ainsi, led
(1100100
) avec motif0xxxxxxx
devient01100100
; leЖ
(10000010110
) avec motif110xxxxx 10xxxxxx
devient11010000 10010110
; et le丽
(100111000111101
) avec le motif1110xxxx 10xxxxxx 10xxxxxx
devient1110x100 10111000 10111101
, après quoi le restantx
sont remplacés par0
:11100100 10111000 10111101
.Donc, cette approche que j'ai également utilisée dans mon code. Au lieu de vérifier les plages réelles, je regarde simplement la longueur du binaire et le compare à la quantité de
x
dans les modèles, car cela économise quelques octets.Voir cette réponse 05AB1E de mes (sections Comment compresser les grands entiers? Et comment les listes entières Compresser? ) Pour comprendre pourquoi
•Xó•18в
est[1,8,12,17]
.la source
JavaScript (Node.js) , 60 octets
-15 octets de @Neil et @Shaggy
Essayez-le en ligne!
la source
padStart(8,0)
enregistre 2 octets.map
et abandonner lejoin
pour sortir un tableau de bitsRouille , 187 octets
Essayez-le en ligne!
la source
Perl 6 , 46 octets
Essayez-le en ligne!
Le quine standard avec
.fmt("%08b",'')
formate la liste des valeurs ordinales en longueur binaire 8 et joint avec une chaîne vide.la source
Perl 5, 42 octets
TIO
la source
Java 10,
339308265227225186184 184 octets-8 octets grâce à @NahuelFouilleul supprimant l'inutile
&255
(et un supplémentaire -35 pour avoir attiré mon attention sur le fait que les spécifications complètes du programme du défi avaient été révoquées et qu'une fonction est désormais autorisée également.)-41 octets grâce à @ OlivierGrégoire .
Essayez-le en ligne.
Explication:
quine -part:
var s
contient la chaîne de code source non formatée%s
est utilisé pour mettre cette chaîne en elle-même avecs.format(...)
%c
,%1$c
Et34
sont utilisés pour formater les guillemets doubles ("
)s.format(s,34,s)
met tout cela ensemblePartie défi:
la source
c&255
n'est pas nécessaire&255
cependant car nous n'utilisons aucun caractère non ASCII, merci!BigInteger
être assez court pour la conversion en chaînes binaires. Et 2 octets supplémentaires en changeant lereturn'0'+
enreturn 0+
. Hmm, pourquoi ce leader est-il0
nécessaire? Cela m'embrouille que toutes les chaînes binaires internes aient ce0
début, mais le tout premier pas lors de l'utilisationBigInteger.toString(2)
..Python 2 ,
6867 octetsEssayez-le en ligne!
Une modification de cette réponse
-1 octets en supprimant l'espace après 'in' (merci @mdahmoune)
la source
in
'%08b'%ord(i)
place debin(256|ord(i))[3:]
, mais cela n'a pas fonctionné pour une raison quelconqueR ,
138114 octetsEssayez-le en ligne!
Utilise la capacité de R à analyser les fonctions de leur représentation de caractère. Les
rev
s sont nécessaires car ilsrawToBits
placent le bit le moins significatif en premier.as.integer
est nécessaire car sinon les bits sont affichés avec un zéro non significatif.Modifié une fois que j'ai réalisé que toute sortie pratique était autorisée. Également sorti par un sur le nombre d'octets d'origine.
la source
C # (Visual C # Interactive Compiler) , 221 octets
Essayez-le en ligne!
C # (Visual C # Interactive Compiler) avec indicateur
/u:System.String
, 193 octetsEssayez-le en ligne!
la source
Outils Bash + GNU, 48 octets
TIO
la source