Wenn Sie dies akzeptieren möchten, müssen Sie ein Programm schreiben, das seinen eigenen Quellcode in der binären UTF-8- Darstellung ausgibt .
Regeln
Die Quelle muss mindestens 1 Byte lang sein.
Ihr Programm darf keine Eingaben annehmen (oder eine nicht verwendete, leere Eingabe haben).
Die Ausgabe kann in einem beliebigen praktischen Format erfolgen.
Optional ist eine nachgestellte Newline zulässig.
Beachten Sie, dass ein Byte 8 Bit umfasst und die Länge der binären UTF-8-Darstellung notwendigerweise ein Vielfaches von 8 ist.
Dies ist Code-Golf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Bytes) gewinnt.
Standardlücken sind verboten.
Beispiel
Angenommen, Ihr Quellcode ist Aä$$€h
die entsprechende binäre UTF-8-Darstellung 010000011100001110100100001001000010010011100010100000101010110001101000
.
Wenn ich laufe, Aä$$€h
muss die Ausgabe sein 010000011100001110100100001001000010010011100010100000101010110001101000
.
A --> 01000001
ä --> 1100001110100100
$ --> 00100100
$ --> 00100100
€ --> 111000101000001010101100
h --> 01101000
Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000
01011110
oder0010011100100010
in UTF-8 codiert werden kann (sie sehen sich ziemlich ähnlich:^
vs∧
)01111100
und0010001100100010
codieren|
und∣
.Antworten:
V , 28 (oder 16?) Lateinische 1 Bytes (35 UTF-8 Bytes)
Probieren Sie es online aus!
Hexdump (in Latein 1):
Ausgabe (binäre Darstellung desselben Codes in UTF-8, nicht in Latein 1):
Erläuterung:
Oder...
V , 16 Bytes
Probieren Sie es online aus!
Ausgabe:
OP sagte:
Dies wird in einem viel bequemeren Format für V: P ausgegeben (aber ich bin mir nicht sicher, ob dies die Regeln erweitert).
quelle
CJam , 20 Bytes
Probieren Sie es online aus!
Überrascht zu sehen, wie CJam gewinnt! wir werden sehen, wie lange das dauert ...
quelle
05AB1E , 105 Bytes
05AB1E hat keine integrierten UTF-8-Konvertierungsfunktionen, daher muss ich alles manuell ausführen .
Probieren Sie es online aus oder stellen Sie sicher, dass es sich um eine Quine handelt .
Erläuterung:
Quine-Teil :
Das kürzeste Quine für 05AB1E ist dieses:
0"D34çý"D34çý
( 14 Bytes ) bereitgestellt von @OliverNi . Meine Antwort verwendet eine modifizierte Version dieses Quines, indem ich...
hier Folgendes hinzufüge :0"D34çý..."D34çý...
. Eine kurze Erklärung dieser Quine:Herausforderungsteil:
Nun zum Herausforderungsteil des Codes. Wie oben erwähnt, verfügt 05AB1E über keine integrierten UTF-8-Konvertierungsfunktionen, daher muss ich diese Dinge manuell ausführen. Ich habe diese Quelle als Referenz verwendet, um dies zu tun: Manuelles Konvertieren von Unicode-Codepunkten in UTF-8 und UTF-16 . Hier eine kurze Zusammenfassung der Konvertierung von Unicode-Zeichen in UTF-8:
"dЖ丽"
wird[100,1046,20029]
)[100,1046,20029]
wird["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
Es gibt auch Bereiche für 5 oder 6 Bytes, aber lassen wir sie vorerst weg.
Das Zeichen
d
befindet sich im ersten Bereich, also 1 Byte in UTF-8; ZeichenЖ
liegt im zweiten Bereich, also 2 Bytes in UTF-8; und Zeichen丽
liegt im dritten Bereich, also 3 Bytes in UTF-8.Die
x
im Muster dahinter sind mit der Binärdatei dieser Zeichen von rechts nach links gefüllt. So ist died
(1100100
) mit Muster0xxxxxxx
wird01100100
; dasЖ
(10000010110
) mit Muster110xxxxx 10xxxxxx
wird11010000 10010110
; und das丽
(100111000111101
) mit Muster1110xxxx 10xxxxxx 10xxxxxx
wird1110x100 10111000 10111101
, wonach die verbleibendenx
ersetzt werden durch0
:11100100 10111000 10111101
.Also, diesen Ansatz habe ich auch in meinem Code verwendet. Anstatt die tatsächlichen Bereiche zu überprüfen, schaue ich mir nur die Länge der Binärdatei an und vergleiche sie mit der Menge
x
in den Mustern, da dies einige Bytes spart.Sehen Sie diese 05AB1E Antwort von mir (Abschnitte Wie große natürliche Zahlen zu komprimieren? Und Wie zu komprimieren integer Listen? ) Zu verstehen , warum
•Xó•18в
ist[1,8,12,17]
.quelle
JavaScript (Node.js) , 60 Byte
-15 Bytes von @Neil und @Shaggy
Probieren Sie es online aus!
quelle
padStart(8,0)
spart 2 Bytes.map
diejoin
Ausgabe beibehalten und eine Reihe von Bits ausgeben könnenRust , 187 Bytes
Probieren Sie es online aus!
quelle
Perl 6 , 46 Bytes
Probieren Sie es online aus!
Das Standard-Quine mit
.fmt("%08b",'')
formatiert die Liste der Ordnungswerte in binäre Länge 8 und verbindet sich mit einer leeren Zeichenfolge.quelle
Perl 5, 42 Bytes
TIO
quelle
Java 10,
339308265227225186184 Bytes-8 Bytes dank @NahuelFouilleul , der das Unnötige entfernt
&255
(und zusätzlich -35, um mich darauf aufmerksam zu machen, dass die vollständigen Programmspezifikationen der Herausforderung widerrufen wurden und eine Funktion jetzt ebenfalls zulässig ist ..)-41 Bytes dank @ OlivierGrégoire .
Probieren Sie es online aus.
Erläuterung:
Quine-Teil :
var s
enthält den unformatierten Quellcode String%s
wird verwendet, um diesen String mit sich selbst in sich zu setzens.format(...)
%c
,%1$c
Und34
werden verwendet , um die doppelten Anführungszeichen zu formatieren ("
)s.format(s,34,s)
fasst alles zusammenHerausforderungsteil:
quelle
c&255
nicht benötigt zu werden&255
da wir keine Nicht-ASCII-Zeichen verwenden, danke!BigInteger
, ziemlich kurz für die Konvertierung in Binärstrings zu sein. Und 2 weitere Bytes durch Ändernreturn'0'+
vonreturn 0+
. Hmm, warum ist das0
übrigens notwendig? Es verwirrt mich , dass alle inneren binary-Strings haben diese führende0
, aber die allererste nicht bei der VerwendungBigInteger.toString(2)
..Python 2 ,
6867 BytesProbieren Sie es online aus!
Eine Änderung dieser Antwort
-1 Bytes durch Entfernen des Leerzeichens nach 'in' (danke @mdahmoune)
quelle
in
'%08b'%ord(i)
stattbin(256|ord(i))[3:]
, aber es hat aus irgendeinem Grund nicht funktioniertR ,
138114 BytesProbieren Sie es online aus!
Verwendet die Fähigkeit von R, Funktionen auf ihre Zeichendarstellung zu beschränken. Die
rev
s werden benötigt, weilrawToBits
das niedrigstwertige Bit an erster Stelle steht.as.integer
wird benötigt, da sonst die Bits mit einer führenden Null angezeigt werden.Bearbeitet, als ich merkte, dass jede bequeme Ausgabe erlaubt war. Auch war um eins bei der ursprünglichen Byteanzahl.
quelle
C # (Visual C # Interactive Compiler) , 221 Byte
Probieren Sie es online aus!
C # (Visual C # Interactive Compiler) mit Flag
/u:System.String
, 193 ByteProbieren Sie es online aus!
quelle
Bash + GNU-Tools, 48 Byte
TIO
quelle