Meine frühere Herausforderung, unsichtbaren Text zu drucken, war ziemlich beliebt, wahrscheinlich weil es so trivial ist.
Diejenigen, die Sie genauer beobachten, haben jedoch möglicherweise bemerkt, dass Sie nicht wirklich unsichtbaren Text drucken, da es unmöglich ist, zu lesen, was nur bei der Ausgabe eingegeben wurde.
Also dachte ich mir, wie wäre es mit einer wirklich unsichtbaren Textherausforderung?
0x20-0x7E
Konvertieren Sie bei einer Zeichenfolge, die nur aus druckbaren ASCII-Zeichen ( ) besteht, jedes Zeichen in ein bestimmtes Unicode-Zeichen (in UTF-8-Codierung), das nicht zu den 95 druckbaren ASCII-Zeichen (UTF-8-Zeichen außerhalb des 0x20-0x7E
Bereichs) gehört.
Eingang
Eine Zeichenfolge aus druckbaren ASCII-Zeichen, entweder als Zeichenfolge oder als Array / Liste von Zeichen
Ausgabe
Die Eingabezeichenfolge, wobei jedes Zeichen durch ein bestimmtes nicht druckbares Zeichen ersetzt wird. Jedes angegebene Zeichen muss ein entsprechendes nicht druckbares Zeichen enthalten, das nicht als Ersatz für ein anderes Zeichen verwendet wird.
Wenn Sie keine nicht druckbaren Zeichen drucken können, können Sie stattdessen die Zeichenwerte ausgeben.
Wenn Ihr Code beispielsweise alle Kleinbuchstaben a
durch ersetzt 0x01
, dürfen Sie 0x01
keine anderen Zeichen ersetzen.
Ihr Code muss auch deterministisch sein . Dies bedeutet, dass, wenn in der angegebenen Zeichenfolge Hello
alle Kleinbuchstaben l
durch ersetzt werden 0x03
, Ihr Code auch alle Kleinbuchstaben l
durch 0x03
eine beliebige andere Zeichenfolge ersetzen muss .
Testfälle
Es ist etwas schwierig, Testfälle für diese Herausforderung zu schreiben, daher zeige ich die Ausgabe einfach als Liste mit Hexcodes
input -> output
"Hello" -> [0x01, 0x02, 0x03, 0x03, 0x04]
"Hi!" -> [0x01, 0x05, 0x06]
"" -> []
" H " -> [0x07, 0x07, 0x07, 0x01, 0x07, 0x07, 0x07]
"yo! " -> [0x08, 0x04, 0x06, 0x07]
Antworten:
Gelee , 3 Bytes
Probieren Sie es online!
Quadriert jeden Codepunkt.
quelle
Leerzeichen ,
3936 BytesProbieren Sie es online!
Erläuterung
Ursprünglich wollte ich mit -0 oder -1 multiplizieren, da dies die kürzesten Stellen sind, die in Whitespace deklariert werden können. TIO unterscheidet nicht zwischen -0 und +0. Während das Tutorial / die Spezifikation nicht eindeutig ist, wie ein negativer Wert als Zeichen interpretiert werden soll, wirft TIO (zu Recht) einen Fehler über das ungültige Argument aus, sodass dies ebenfalls keine Option darstellt.
Die nächstkürzere Arbeitskonstante ist 4, sodass wir am Ende den gleichen grundlegenden Ansatz wie die Powershell / Pyth-Lösungen ausführen.
Whitespace ,
5653 Bytes - Ordnet Zeichen zuProbieren Sie es online!
Erläuterung
Tatsächlich der gleiche Ansatz wie in der vorherigen Version, außer dass 0xE0000 als Konstante verwendet wird und anstelle von Multiplikationen addiert wird. Dadurch werden die sichtbaren ASCII-Zeichen dem entsprechenden Unicode-Tag-Zeichen (Bereich U + E0000-U + E007F) zugeordnet. Die beabsichtigte Verwendung für diesen Bereich bestand darin, die Sprache des Texts in einer Klartextdatei anzugeben, von deren Verwendung jedoch abgeraten wird. Dieser Code gibt gültige Bezeichnungen aus, wenn Sie Zeichenfolgen mit einem 0x01-Zeichen voranstellen.
Der Unicode-Standard besagt, dass Zeichen in diesem Bereich kein sichtbares Rendering aufweisen. Ich bin daher der Meinung, dass dies dem Geist der Herausforderung besser entspricht als der vorherige Ansatz.
quelle
Japt ,
52 BytesProbieren Sie es online aus
Erläuterung
quelle
126 ** 3 == 2000376
, was nicht im Bereich [0..1114111] liegt. Sie können trotzdem quadrieren :) Das liegt daran, dass UTF-8 dort endet, während UTF-16 fortgesetzt wird.Brain-Flak , 33 Bytes
Beinhaltet +1 für
-c
Probieren Sie es online!
quelle
Braingolf v0.6, 17 Bytes
Quadrate für jeden Zeichenwert werden gedruckt.
-1 Byte dank der Quadraturlösung von Erik the Outgolfer
Braingolf v0.7, 6 bytes [nicht konkurrierend]
Jeder Wert wird dann auch quadriert, aber in v0.7 gibt es die "foreach"
{}
-Schleifequelle
Mathematica, 48 Bytes
Erläuterung:
Interessanterweise waren von den beiden Moduloptionen mit weniger als 1000, die die 96 Zeichen in 96 eindeutige Werte mit dem Modul 978 änderten, die beiden niedrigsten Werte 7 und 33. Glücklicherweise werden diese Werte durch 4-mal in 28 und 132 umgewandelt, die beide gerade außerhalb des sichtbaren Bereichs liegen. Wenn ich den anderen Modul von 784 verwendete, musste ich mit 18 multiplizieren, um die Zahlen außerhalb des Bereichs zu bewegen.
Testfall.
Hinweis: Zusätzliche Backslashes als Escape-Zeichen für
"
und\
. Auch das Zeichen 0x7E scheint nicht richtig einfügen zu wollen.Ausgabe:
Die Verwendung von
Hash
kam wie esToCharacterCode
ist wirklich lange her. Allerdings war es fast so teuer. Der einfache mathematische Weg, dies zu tun, wäre 49 Bytes:quelle
CJam ,
85 BytesProbieren Sie es online!
Fügt jedem Codepunkt 95 hinzu.
quelle
Pyth, 6 Bytes
Probieren Sie es hier aus.
Multipliziert jeden Codepunkt mit 4.
quelle
PowerShell,
32 -31 Byte-1 Danke an neil,
99+
an4*
multipliziert 9 mit jedem Zeichencode und druckt ihn zurück.
quelle
05AB1E , 4 Bytes
Probieren Sie es online!
Quadriert jeden Codepunkt.
quelle
CJam , 4 Bytes
XORs jeden Codepunkt mit -1 . CJams Zeichen sind 16 Bit breit, daher ordnet dies den Codepunkt n dem Codepunkt 65535-n zu .
Probieren Sie es online!
quelle
Dezimal 37 Bytes
Erläuterung:
Probieren Sie es online!
quelle
90D
) endet also?Google Sheets, 68 Bytes
Ich wollte dies posten, um zu zeigen, wie umständlich es ist, einige grundlegende Funktionen in Sheets auszuführen. Möchten Sie für jedes Zeichen in einer Zelle eine Operation ausführen und das verkettete Ergebnis ausgeben? Sie sind bei 42 Bytes, bevor Sie überhaupt auf diese Zeichen einwirken .
Ansonsten ist dies dasselbe wie bei anderen Lösungen: Quadrieren Sie den Codepunkt jedes Zeichens.
quelle
Python 3,
4038 BytesProbieren Sie es online!
quelle
C, 42 Bytes
Nimmt ein UTF-8-Gebietsschema an. Die Eingabe wird quadriert.
Probieren Sie es online!
quelle
Sauber , 25 Bytes
Ein Teilfunktionsliteral.
Probieren Sie es online!
Realistisch:
Unboxed-Array-Verständnis über ein unboxed-Array desselben Typs (
{#Char} -> {#Char}
). Clean kann feststellen, dass die Eindeutigkeit übertragbar ist (!u:{#Char} -> u:{#Char}
) und dass die Größe der Eingabegröße entspricht. Dies bedeutet, dass bei Übergabe von a*String
jedes Zeichen destruktiv mit dem entsprechenden Zeichen in der Ausgabe aktualisiert wird, was bedeutet, dass keine Speicherzuweisung oder Bewegung erfolgt und der Graphknoten vollständig wiederverwendet wird.Probieren Sie es online!
quelle