Einführung
Angenommen, S 1 = a...b
und S 2 = ..c..
. Wenn wir sie aufeinander legen, erhalten wir:
a...b
..c..
Wir verschmelzen beide Zeichenketten mit dem .
flüssigen Zeichen (das sich überlappen kann). Wir bekommen das:
a.c.b
Wenn einer der Strings länger als der andere ist, wenden wir einfach denselben Algorithmus an:
a.....b
..c..
becomes:
a.c...b
und
a.....b
..c.......
becomes:
a.c...b...
Wenn zwei Zeichen kollidieren, verwenden wir nur das unterste Zeichen, z
a..b
...c
becomes:
a..c
Die Aufgabe
Geben Sie bei zwei nicht leeren Zeichenfolgen die zusammengeführte Zeichenfolge aus. Beachten Sie, dass die Eingabe nur Punkte und Kleinbuchstaben enthält (oder Großbuchstaben, falls dies praktischer ist).
Testfälle
Input Output
a....b ..c... a.c..b
aaaaaa bbbbbb bbbbbb
ab.ab. b.b.b. bbbab.
a.......b c c.......b
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
a.....b
..c.......
möglich? Was ist die Ausgabe dann?a.c...b...
.Antworten:
Gelee , 5 Bytes
Eingabe über Kommandozeilenargumente.
Probieren Sie es online!
Erläuterung
Dies ist ein direkter Port meiner CJam-Antwort (eine Erklärung, warum dies funktioniert, finden Sie hier):
quelle
CJam, 9 Bytes
Teste es hier.
Erläuterung
Nutzt die Tatsache, dass
'.' < upper case letters < lower case letters
. Auf diese Weise.
überschreibt ein Buchstabe , wenn das elementweise Maximum zwischen zwei Zeichenfolgen gesetzt wird, a. Sie können jedoch festlegen, dass ein Buchstabe aus der zweiten Eingabe einen Buchstaben aus der ersten überschreibt, wenn der erste in Großbuchstaben geschrieben wird. Verwirrend? Hier ist einer der Testfälle als Beispiel:Zuerst in Großbuchstaben konvertieren:
Nehmen Sie das elementweise Maximum:
Zurück in Kleinbuchstaben konvertieren:
Und so funktioniert der Code:
quelle
eu
/el
Trick!Javascript ES6,
5255 ZeichenPrüfung
quelle
f('c', 'a....b')
Pyth, 11
Probieren Sie es online aus oder führen Sie die Test Suite aus
quelle
Im Ernst, 10 Bytes
Probieren Sie es online!
Verwendet die gleiche Strategie wie Martins CJam-Antwort
Erläuterung:
quelle
Oktave, 50 Bytes
quelle
!=
durch>
Haskell,
4342 BytesAnwendungsbeispiel:
"ab.ab." # "b.b.b."
->"bbbab."
.Wie es funktioniert:
Wenn beide Listen nicht leer sind, wählen Sie den Kopf der ersten Liste, wenn der Kopf der zweiten Liste ist
"."
, oder wählen Sie den Kopf der zweiten Liste. Fügen Sie einen rekursiven Aufruf mit den Endpunkten der Listen hinzu.Wenn mindestens eine Liste leer ist, hängen Sie beide Listen an.
Bearbeiten: @Lynn hat ein Byte gespeichert. Vielen Dank!
quelle
c<'a'
, ob ein Byte gespeichert ist.Python 2, 47 Bytes
quelle
Julia, 101 Bytes
Dies ist eine Funktion, die zwei Zeichenfolgen akzeptiert und eine Zeichenfolge zurückgibt.
Wir berechnen
m
die maximale Länge der beiden Eingaben, definieren dann eine Funktionr
, die ihre Eingabe mit.
s auf Längem
auffüllt, und speichern diese als Funktionsargument. Wir wählen dannzip
die richtigen gepolsterten Eingänge und überprüfen das Minimum (wie durch den ASCII-Code definiert) jedes Paares. Wenn es ein ist.
, verwenden wir dasjenige Zeichen, das den größeren Code hat, andernfalls verwenden wir dasjenige, das aus der zweiten Eingabe stammt. Das resultierende Array wirdjoin
in eine Zeichenfolge umgewandelt und zurückgegeben.quelle
C
10689 BytesTeste live auf ideone .
quelle
Netzhaut , 55
Zeile 5 ist ein einzelnes Leerzeichen. Zeile 6 ist eine leere Zeile (ohne abschließenden Zeilenumbruch).
Probieren Sie es online aus.
Ich habe dieses in GNU sed gestartet (mit der Option -r). Einfacher Port zu Retina, sobald ich die Regexes herausgefunden habe. Die sed Version ist:
quelle
a..k.f....b c...f.g...g. => .c..kffg...g
Python 2, 70 Bytes
Probieren Sie es hier aus!
Zuerst erstellen wir beide Strings zu einer Liste. Wenn die zweite Zeichenfolge länger als die erste ist, wird sie mit
None
(map(None,x,y)
tut das) aufgefüllt .Dann iterieren wir über diese Liste, wobei
j
es sich um das Zeichen aus der ersten Zeichenfolge undk
das aus der zweiten Zeichenfolge handelt. Wir entscheiden,k
ob es kein Punkt ist und ansonstenj
.Dies könnten 61 Bytes sein, wenn ich das Ergebnis als Liste von Zeichen anstelle einer Zeichenfolge ausgeben könnte.
quelle
Perl, 48 + 3 = 51 Bytes
Bah kann keine kürzere Lösung finden. (Gleicher Ansatz wie die Antwort von @ Qwertiy in JavaScript).
Erfordert
-pl
und nimmt Eingaben vonstdin
und entgegen-i
quelle
$_^=$^I^$^I;s/\.|\0/substr$^I,pos,1or$&/ge
PHP> = 7.1, 58 Bytes
Online Version
quelle
q / kdb +
4340 BytesLösung:
Beispiel:
Erläuterung:
Anmerkungen: Ich nutze den Vorteil von "Bei zwei nicht leeren Zeichenfolgen " und gehe davon aus, dass Eingaben Zeichenfolgen sind. In kdb
"c"
ist ein Atom,(),"c"
ist ein String, sonst müssen 6 Bytes zum Score addiert werden, da wir kein Atom auffüllen können$
...quelle