Herausforderung
Schreiben Sie ein Programm, das eine injektive Funktion anwendet, die ein geordnetes Paar von Zeichenfolgen als Eingabe und eine Zeichenfolge als Ausgabe verwendet. Mit anderen Worten, jede Eingabe muss einer eindeutigen Ausgabe zugeordnet werden.
Besonderheiten
- Die Eingabe kann alle zwei Strings beliebiger Länge, sondern nur aus druckbaren ASCII - Zeichen (Codes besteht ).
- In ähnlicher Weise unterliegt die Ausgabezeichenfolge keiner Längenbeschränkung, sondern darf nur aus druckbaren ASCII-Zeichen bestehen.
- Wenn Ihre Sprache keine Zeichenfolgen beliebiger Länge verarbeiten kann, funktioniert das Programm möglicherweise nur theoretisch für Zeichenfolgen beliebiger Größe.
- Die Zuordnung von Eingaben zu Ausgaben sollte zwischen den Ausführungen des Programms konsistent sein. Ansonsten liegt das verwendete Mapping ganz bei Ihnen, solange es sich um eine Injektion handelt.
- Der Eingang ist bestellt. Wenn die beiden Eingabezeichenfolgen unterschiedlich sind, sollten sie eine andere Ausgabe erzeugen, als wenn sie vertauscht wären.
- Nicht jeder String muss eine mögliche Ausgabe sein.
- Die kürzeste Antwort in jeder Sprache gewinnt!
Testfälle
Die folgenden Eingaben sollten alle zu unterschiedlichen Ausgaben führen. Um Verwechslungen zu vermeiden, werden Strings von Guillemets («») umgeben und durch einzelne Leerzeichen getrennt.
"Hallo Welt" «Lelho» «drowl» "anders" "nicht das gleiche" «Code» «Golf» «Co» «deGolf» «CodeGolf» «» «» «» «» «» «» «» «» «» «» «» «Abc", »« def » «Abc» «," def » «Abc '» «' def» «Abc '» «' def» «\» «" » «\\» «\" »
Antworten:
Brainfuck,
30292723 BytesProbieren Sie es online!
Eingänge sind durch ein
0x01
Byte getrennt.Dies wird
["foo", "bar"]
zufUToUToUTUTbUTaUTrUT
. Um die ursprünglichen zwei Zeichenfolgen wiederherzustellen, nehmen Sie Gruppen mit 3 Zeichen, suchen Sie die Zeichenfolge, bei der der zweite Buchstabe nicht vorhanden istU
, und teilen Sie sie dort auf.quelle
JavaScript (ES6), 14 Byte
Übernimmt die Eingabe als Array von 2 Zeichenfolgen. Inspiriert von Luis 'Antwort .
Probieren Sie es online!
JavaScript (ES6),
21 bis20 ByteÜbernimmt die Eingabe als
(a)(b)
.Probieren Sie es online!
Liefert die Länge vona , gefolgt von einem Komma, gefolgt von der Verkettung von a und b .
quelle
stringify
Trick selbst anzuwenden !a="hello",""
b="world"
unda="hello"
b="","world"
["\"hello\",\"\"","\"world\""]
und["\"hello\"","\"\",\"world\""]
.JSON.stringify()
auf jeden Fall entkommt"
. Sehe einen Hex-Dump .jq -c, 0 Bytes
Probieren Sie es online!
Das fühlt sich definitiv nach Schummeln an ...? Aber es scheint den Regeln der Herausforderung zu entsprechen.
Standardmäßig
jq
wird die Eingabe in einem für Menschen lesbaren JSON-Format ausgegeben. Das-c
(kompakte) Flag weistjq
an, im "kompakten" Stil auszugeben, wodurch die Zeilenumbrüche entfernt werden (da die Abfrage nicht druckbares ASCII verbietet).quelle
["","x"]
und["x",""]
jeweilsPython 3 , 3 Bytes
Eine (eingebaute) Funktion, die bei gegebener Liste der beiden Zeichenfolgen eine Zeichenfolgendarstellung der Liste liefert
Probieren Sie es online!
quelle
Japt
-S
, 3 BytesIch habe immer noch das Gefühl, dass mir hier etwas fehlt ...
Versuch es
Möglicherweise 2 Bytes:
Versuch es
Oder dehnen Sie es mit diesem 1-Byte:
Versuch es
In der ersten Version wird jeder String im Array seinen Codepunkten zugeordnet und mit einem Leerzeichen verbunden ausgegeben.
In der zweiten Version wird jede Zeichenfolge in ein Zeichenfeld aufgeteilt und mit einem Leerzeichen verbunden ausgegeben.
Und die dritte Version, die sich wie Schummeln anfühlt, gibt nur die Eingabe mit der
-Q
Flagge aus, die das schwere Heben der Eingabesrringify
bewirkt.quelle
Pyth , 4 Bytes
Probieren Sie es online!
Dadurch wird jede Zeichenfolge in die Basis 256 konvertiert und anschließend der Reihe nach mit a verbunden
"
. Da es sich bei den Ergebnissen jeweils um Zahlen handelt,"
werden diese eindeutig voneinander getrennt und die ursprünglichen Zeichenfolgen können mit wiederhergestellt werdenmCsdczN
.quelle
T-SQL, 38 Bytes
Die Eingabe wird aus einer bereits vorhandenen Tabelle übernommenich mit ein und b , Je unsere IO - Regeln .
varchar
FeldernVerwendet
QUOTENAME
, was die Saiten mit umgibt[]
und auch eventuelle interne Klammern übergeht. Sollte einer eindeutigen Ausgabe zugeordnet werden.quelle
SELECT CONCAT(QUOTE(a),QUOTE(b))FROM t
Versuchen Sie es onlineZsh , 7 Bytes
Probieren Sie es online!
Verbindet implizit die Argumente in Leerzeichen. Der
q
Modifikator weist zsh an, die Argumente in Anführungszeichen zu setzen, wodurch die Leerzeichen entscheidend ausgeblendet werden. Auf diese Weise wird sichergestellt, dass die beiden Argumente durch ein Leerzeichen eindeutig voneinander getrennt werden.(Ohne
q
,"a " "b"
und"a" " b"
würde beiden Ausbeuten"a b"
) .quelle
MATL , 1 Byte
Der Code verwendet ein Array mit zwei Zeichenfolgen als Eingabe und gibt eine Zeichenfolgendarstellung dieses Arrays aus.
Probieren Sie es online!
Erläuterung
Der Code liest einfach die Eingabe als Zeichenfolge, nicht ausgewertet.
quelle
Gelee , 2 Bytes
Ein monadischer Link, der eine Liste von zwei Listen von Zeichen als Argument akzeptiert, das eine einzelne Liste von Zeichen ergibt.
Probieren Sie es online!
Wie?
Es ist eingebaut, um Pythons String-Darstellung zu erhalten, simples.
quelle
Haskell, 4 Bytes
Der Haskell ist eingebaut, um Dinge in Fäden zu verwandeln. Die Eingabe wird als ein Paar von Zeichenfolgen verwendet.
Probieren Sie es online!
quelle
05AB1E , 2 Bytes
Probieren Sie es online! Interpretiert jede Zeichenfolge als Ganzzahl zur Basis 256 und druckt dann die beiden Zeichenfolgen im Formular aus
[1, 2]
.05AB1E, 1 Byte (unbekannte Gültigkeit)
Probieren Sie es online!
Nimmt das kartesische Produkt der Eingabe mit sich. Anführungszeichen in der Eingabe werden nicht maskiert, was zu Verwirrung führen kann. Ich habe alle Kombinationen von bis zu 12
", "
und brutal gezwungen"], ["
und keine Kollision gefunden. Ich kann jedoch nicht beweisen, dass es für längere Saiten keine Kollisionen gibt. Wenn jemand einen Beweis oder ein Gegenbeispiel finden kann, würde ich es sehr schätzen!Das einfache 0-Byte schlägt fehl, weil Anführungszeichen nicht maskiert werden: Eingaben (
", "
, leere Zeichenfolge) und (leere Zeichenfolge", "
) ergeben beide die Ausgabe["", "", ""]
.Das 1-Byte
º
(Spiegeln jeder Eingabezeichenfolge) schlägt auch deshalb fehl: Eingaben (", "" ,"
leere Zeichenfolge) und (leere Zeichenfolge" ,"", "
) liefern beide die Ausgabe["", "" ,"", "" ,"", ""]
.quelle
C # mit 26 Bytes (danke an Lukas Lang, Kevin Cruijssen und Jo King)
tio.run lambda
quelle
$"{a.Length}.{a}{b}"
- Sie können immer extrahierena
undb
daraus ohne Mehrdeutigkeit (nur bis zum ersten lesen.
die Länge zu erhaltena
,b
ist dann der RestKohle , 12 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Power Shell , 22 Byte
Viele Fehlerbehebungen dank mazzy
Probieren Sie es online!
Nimm fünf, oh mein Gott.
quelle
"ab" "c"
und"a" "bc"
beide erzeugen die gleiche Ausgabe.R , 4 Bytes
Probieren Sie es online!
Eine integrierte Funktion, die die Zeichenfolgendarstellung der Eingabe zurückgibt (inspiriert von Jonathan Allans Antwort )
quelle
Wolfram-Sprache (Mathematica) , 8 Bytes
Probieren Sie es online!
quelle
{"Hello, ","World"}
und{"Hello",", World"}
geben sie nicht die gleiche Zeichenfolge?Compress
es ist dannCSS + HTML, 55 + 20 = 75 Byte
Stellen Sie die Eingaben im HTML nach
<code>
Tags bereit. Fügt Buchstaben einzeln von jeder Eingabe in die Ausgabe ein. Wenn eine Eingabe länger als die andere ist, werden visuelle Leerzeichen für fehlende Buchstaben der kürzeren Eingabe angezeigt. Außerdem wird in HTML ein Komma hinzugefügt, um die Eindeutigkeit der visuellen Ausgabe zu erzwingen (hoffe ich).quelle
C # (Visual C # Interactive Compiler) , 5 Byte
Probieren Sie es online!
quelle
Perl 6 ,
63 BytesProbieren Sie es online!
Gibt die Objektdarstellung an STDERR aus.
quelle
["Hello, ", "World!"]
Lua , 27 Bytes
Probieren Sie es online!
Vollständiges Programm, Eingabe als Argumente.
Inspiriert von zsh answer, wie es auch verwendet wird
%q
Modifikatoren zur Verwendung der internen Safe-String-Engine verwendet.Auch mir fällt gerade ein
aber ich bin nicht sicher, ob dies eine akzeptable Antwort ist.
quelle
('%q%q'):format
sie nicht zu einem Objekt führt, das beispielsweise einer Variablen zugewiesen werden kann. Es verursacht nur einen eigenen Syntaxfehler. Die Doppelpunktsyntax ist nur eine Abkürzung für'%q%q'.format('%q%q', ...)
und Lua erlaubt keine teilweise Anwendung für Funktionensed , 19 bytes
Probieren Sie es online!
quelle
JavaScript (SpiderMonkey) , 6 Bytes
Probieren Sie es online!
Eingabe-Array von Zeichenfolgen, Ausgabe einer einzelnen Zeichenfolge.
Inspiriert von Arnauld's JSON.stringify-Antwort .
quelle
C (gcc) , 59 Bytes
Vielen Dank an Grimy für den Vorschlag.
Nimmt ein Array von Eingabezeichenfolgen (von denen "2" die richtige Nummer für diese Abfrage ist) und druckt ihre Zeichenwerte, einschließlich des nachfolgenden Zeichens
NUL
. Technisch gesehen ist der von verwendete%p
Formatiererprintf
für Zeiger gedacht, aber er funktioniert gut für die Anzeige von Hexadezimalwerten beliebiger Ganzzahlen, wenn Sie nicht genau wissen, wie sie aussehen.Probieren Sie es online!
quelle
Brachylog , 0 Bytes
Eingabe als Array von 2 Zeichenfolgen, Ausgabe im Format:
Z = ["{{string 1 stringified}}","{{string 2 stringified}}"]
Inspiriert von Arnauld's JSON.stringify-Antwort und Doorknobs leerer jq-Antwort
Probieren Sie es online!
quelle
PHP , 9 Bytes
Probieren Sie es online!
Eingang ist ein Array von 2 Strings wie folgt aus :
['abc', 'def']
. Verwendet PHPs serialize, um die Eingabe in einen String zu serialisieren.quelle
Bash , 11 Bytes
Probieren Sie es online!
${parameter@Q}
zitiert den Parameter zur Wiederverwendung als Eingabe. Im Fall eines Arrays wird jedes Element in Anführungszeichen gesetzt.quelle
Ruby , 12 Bytes
Probieren Sie es online!
quelle