Wenn Sie ein Tool wie git zum Zusammenführen von zwei Dateien verwenden, kann ein Konflikt erkannt und dem Ergebnis der Zusammenführung hinzugefügt werden.
Eine Zusammenführung dieser beiden Dateien:
meine Datei:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
ihre Akte:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
würde ergeben:
Common line of code 1
Common line of code 2
<<<<<<< Mine
my lines
=======
their lines
>>>>>>> Theirs
Common line of code 3
Common line of code 4
Siehe Konfliktmarkierungslinien
Wenn Sie diesen Konflikt mit Mine lösen , wird folgende Datei erstellt:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
Wenn Sie diesen Konflikt mit Theirs lösen , wird die folgende Datei erstellt:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
Ziel dieser Herausforderung ist es, eine Quelldatei zu schreiben, die einen Konflikt enthält und dennoch kompiliert / ausgeführt wird.
Schreiben Sie eine Quelldatei, die:
- enthält eine gültige, Zwei-Wege, Konflikte durch den richtigen Patch Konfliktmarken markiert (
<<<<<<<
,=======
,>>>>>>>
) Meiner und Deren Filedeskriptoren nach den Markierungen sind optional. - Kompiliert / führt ohne Fehler / Warnungen aus, wenn die Markierungen ein Teil der Quelle bleiben
- kompiliert / führt ohne Fehler / Warnungen aus, wenn der Konflikt mit mine gelöst wird
- compiliert / ausführt ohne Fehler / Warnungen , wenn der Konflikt durch die Verwendung aufgelöst wird ihre
- gibt "Hello Conflict" aus, wenn die Konfliktdatei kompiliert / ausgeführt wird
- gibt "Hello Mine" aus, wenn die Minenversion kompiliert / ausgeführt wird
- gibt "Hallo ihr" aus, wenn die ihre Version kompiliert / ausgeführt wird
Die Marker sollten so in der Quelldatei liegen, dass kdiff3 den Konflikt erkennt.
Standardlücken sind verboten.
Der kürzeste Code gewinnt.
Punktzahl ist die Länge der in Konflikt stehenden Quelle
Antworten:
Jelly , 51 Bytes
Probieren Sie es online!
Erläuterung
Die Konfliktmarkierungen sind hier so positioniert, dass eine der drei Zeilen die zweite Zeile des Programms wird, nachdem der Konflikt gelöst wurde. Dies wird eine Konstante namens sein
2£
. Die zweite Zeile des ursprünglichen Programms codiert den String" Conflict"
(in Jellys komprimierter Notation). Die dritte Zeile kodiert die Zeichenkette" Mine"
(dies wird die zweite Zeile, wenn der Konflikt als meiner gelöst wird). Die sechste Zeile codiert die Zeichenfolge" Theirs"
(und wird zur zweiten Zeile, wenn der Konflikt wie folgt gelöst wird).Das Hauptprogramm ist immer die letzte Zeile, egal wie viele Zeilen zuvor gelöscht wurden. Es nimmt die komprimierte Codierung von
"Hello"
und hängt (;
) den Wert von2£
an, wodurch die gewünschte Ausgabe erzeugt wird.quelle
JavaScript (ES6),
102949390 ByteWenn der Konflikt behoben wurde, gibt es keine sechste Zeile, sodass stattdessen die jetzt erste Zeile gedruckt wird. Bearbeiten: 3 Bytes dank @nderscore gespeichert.
quelle
console.log('Hello',(a=`...`)[6]||a[1])
Brachylog ,
686766 BytesProbieren Sie es online!
Probieren Sie die
"Hello Mine"
Version hier ausProbieren Sie die
"Hello Theirs"
Version hier ausErläuterung
Zum Glück
<<<<<<<
,=======
und>>>>>>>
sind alle gültigen Regeldefinitionen in Brachylog. Sie bedeuten jeweils:Wenn wir Konflikte entfernen, landen wir in
"Mine"
oder"Theirs"
in der zweiten Zeile, was bedeutet, dass sie zu Prädikat Nummer 1 werden. Wenn Sie dieses Prädikat↰₁
in der ersten Zeile aufrufen, wird seine Eingabe und Ausgabe mitMine
/ vereinheitlichtTheirs
, mit dem wir dann druckenw
.Wenn wir
↰₁
die in Konflikt stehende Datei aufrufen, rufen wir am Ende an<<<<<<<
. Wir bezeichnen dieses Prädikat daher als Eingabe (mitċ₂
- coerce to string).<
schlägt mit einer Zeichenfolge als Eingabe fehl. Wir setzen dann eine Disjunktion∨"Conflict"w
in das Hauptprädikat, die besagt, dass wenn Prädikat 1 fehlschlägt, wirConflict
stattdessen drucken .↰₁
mit einer Zeichenfolge als Eingabe schlagen die Zeilen"Mine"
oder nicht fehl"Theirs"
, da es sich um Zeichenfolgen handelt.quelle
PHP,
7465 BytesAnmerkung: Verwendet die IBM-850-Codierung
In einer Datei speichern und wie folgt ausführen:
Erläuterung
Das binäre XOR führt zu einer der folgenden 3:
Optimierungen
quelle
=======
Operator haben, und das wird dann ein bisschen einfacher.Pip , 61 Bytes
Probieren Sie es online!
Alles dazwischen
""
ist eine Zeichenfolge. Wir teilen den großen String in Zeilenumbrüche ("..."^n
) und nehmen das 7. Element mit zyklischer Indizierung ((___7)
). Für die Konfliktversion gibt es sieben Zeilen, also entspricht Index 7 Index 0 und wir erhaltenConflict
. Für die aufgelösten Versionen gibt es drei Zeilen, also entspricht Index 7 Index 1 und wir erhaltenMine
/Theirs
. Dann"Hello "
nach vorne verketten und automatisch drucken.quelle
Batch,
133129 BytesErläuterung: Die
goto
Anweisung wechselt zum nächsten Label, das sie finden kann. Im Falle eines Konflikts werden lediglich die Konfliktmarkierungen übersprungen unds
der endgültige Wert abgerufen. Bei der Lösung mit Mine haben die Goto-Effekte keine Wirkung mehr, aber die letzteset
existiert nicht mehr. Das Ergebnis ist Meine. Bei der Lösung mit Ihnengoto
umgeht der Anfang den Rest,set
so dass das Ergebnis sein Anfangswert ist. Bearbeiten: 4 Bytes dank @DLosc gespeichert.quelle
:c
und@goto t
stattdessen tun ?Python 2,
8887 BytesGibt die sechste oder (jetzt) erste Zeile aus.
quelle
print
Anweisung verwendet immer ein Leerzeichen als Trennzeichen (und eine nachfolgende Newline; mit derprint
Funktion von Python 3 können Sie das Trennzeichen und das Abschlusszeichen auswählen)..COM Opcode, 77 Bytes
Wenn ein Leerzeichen danach
<<<<<<<
erlaubt ist, 75 Bytesquelle
Retina , 57 Bytes
Probieren Sie es online!
Probieren Sie die "Mine" -Version aus
Probieren Sie die "Theirs" -Version aus
Erklärung des Konfliktprogramms
Wie so oft bei Retina enthält dieses Programm viele Ersetzungsstufen.
Ersetzen Sie die leere / nicht vorhandene Eingabe durch
Hello
.Ersetzen Sie das Ende der Arbeitszeichenfolge durch
<<<<<<<
Ersetzen
Mine
durch=======
. DaMine
nirgendwo in der Arbeitszeichenfolge angezeigt wird, hat dies keine Auswirkungen.Ersetzen
Theirs
durch>>>>>>>
. Gleiches Angebot wie beiMine
;Theirs
wird nicht angezeigt, der Ersatz bewirkt also nichts.Ersetzen Sie eine Folge von
<
durchConflict
. Wir haben<<<<<<<
beim ersten Ersetzen das Ende der Zeichenfolge angehängt , damit die Arbeitszeichenfolge wirdHello Conflict
, die implizit am Ende des Programms ausgegeben wird.Erklärung meiner / ihrer Programme
Wenn der Konflikt gelöst ist, sieht der Code folgendermaßen aus:
Gleich wie zuvor, beginnend mit der Zeichenfolge
Hello
.Anstatt nun Anhängen
<<<<<<<
anHello
, hängen wirMine
.Als nächstes ersetzen wir eine Folge von
<
mitConflict
.<
Die Zeichenfolge enthält jedoch keine s, sodass nichts passiert.Die Arbeitszeichenfolge
Hello Mine
wird implizit ausgegeben. Das "ihnen" -Programm funktioniert genauso.quelle
OIL ,
888077 Bytes4
2
Gibt Zeile 2 (Hello
) aus,10
prüft, ob Zeile 0 (4
) mit Zeile 16 identisch ist (die Zeile, die einen enthält,4
wenn der Konflikt besteht) und springt je nach Ergebnis zu Zeile 16 oder Zeile 8. Falls vorhanden, wird4
4
Zeile 4 (Conflict
) gedruckt . Wenn dies nicht der4
11
Fall ist, wird entwederMine
oderTheirs
, je nachdem, was zusammengeführt wurde , gedruckt und beendet3
.quelle
Java 145 Bytes
Java hat keine mehrzeiligen Zeichenfolgen, sodass einige Tricks mit Kommentaren erforderlich waren
quelle
*
in der dritten Zeile? Ich würde denken, das*/s+="Mine";/*
würde einfach funktionieren.Bash, 76 Bytes
Golf gespielt
Wie es funktioniert
Verwendet hier doc , um den Quelltext an sed zu senden .
Sed stellt der ersten gelesenen Zeile "Hallo" voran, ersetzt den
<<<<<<<
String durch "Konflikt" und beendet dann (q
).Probieren Sie es online!
quelle
ES6 (Javascript),
8382 BytesGolf gespielt
Versuch es
quelle
Java 8, 108 Bytes
Dies ist ein Lambda, das leere Eingaben akzeptiert und nichts zurückgibt.
Probieren Sie es online
Ansatz inspiriert von der Java-Lösung von masterX244 .
quelle
C (GCC), 110 Bytes
Funktionsübergabe.
Ansatz inspiriert von der Java-Lösung von masterX244 .
TIOs
quelle
Perl 5 , 68 Bytes
Aktualisiert, nachdem festgestellt wurde, dass die Version mit 6 von jedem Begrenzer wie vorgesehen funktioniert, aber mit den tatsächlichen 7 Begrenzern nicht ... Ups ...
Versuchen Sie den Konflikt online!
Probieren Sie meins online!
Probieren Sie itheirs online!
quelle