Podczas używania narzędzia takiego jak git do scalania dwóch plików można wykryć konflikt i dodać go do wyniku scalania.
Scalenie tych dwóch plików:
mój plik:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
ich plik:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
spowodowałoby:
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
Zobacz linie znaczników konfliktów
Rozwiązanie tego konfliktu z Mine spowoduje utworzenie tego pliku:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
Rozwiązanie tego konfliktu z Ich spowodowałoby utworzenie tego pliku:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
Celem tego wyzwania jest napisanie pliku źródłowego, który zawiera konflikt i nadal kompiluje / wykonuje.
Napisz plik źródłowy, który:
- zawiera jedną ważną, dwukierunkową, konflikty oznaczone odpowiednimi markerami konfliktowych łata (
<<<<<<<
,=======
,>>>>>>>
) Kopalnia i ich deskryptory plików po markerów są opcjonalne. - kompiluje / wykonuje bez błędów / ostrzeżeń, jeśli znaczniki pozostają częścią źródła
- kompiluje / wykonuje bez błędów / ostrzeżeń, jeśli konflikt zostanie rozwiązany przy użyciu mojego
- kompiluje / wykonuje bez błędów / ostrzeżeń, jeśli konflikt zostanie rozwiązany za pomocą ich
- wyprowadza „Hello Conflict” podczas kompilacji / wykonywania konfliktu pliku
- wyświetla „Hello Mine” podczas kompilacji / wykonywania wersji kopalni
- wypisuje „Hello Ich” podczas kompilacji / wykonywania ich wersji
Znaczniki powinny znajdować się w pliku źródłowym w taki sposób, aby kdiff3 rozpoznał konflikt.
Standardowe luki są zabronione.
Najkrótszy kod wygrywa.
Wynik to długość konfliktu źródła
Odpowiedzi:
Galaretka , 51 bajtów
Wypróbuj online!
Wyjaśnienie
Znaczniki konfliktu są tutaj ustawione tak, że jeden z trzech wierszy staje się drugim wierszem programu po rozwiązaniu konfliktu; będzie to stała o nazwie
2£
. Drugi wiersz oryginalnego programu koduje ciąg znaków" Conflict"
(w skompresowanej notacji Jelly); trzecia linia koduje ciąg" Mine"
(stanie się drugą linią, jeśli konflikt zostanie rozwiązany jako mój); szósta linia koduje ciąg" Theirs"
(i stanie się drugą linią, jeśli konflikt zostanie rozwiązany jako ich).Główny program jest zawsze ostatnim wierszem, bez względu na to, ile wierszy przed nim zostanie usuniętych. Bierze skompresowane kodowanie
"Hello"
i dołącza;
do niego wartość ( )2£
, tworząc w ten sposób pożądany wynik.źródło
JavaScript (ES6),
102949390 bajtówJeśli konflikt został rozwiązany, to nie ma szóstej linii, więc wypisuje teraz pierwszą linię. Edycja: Zapisano 3 bajty dzięki @nderscore.
źródło
console.log('Hello',(a=`...`)[6]||a[1])
Brachylog ,
686766 bajtówWypróbuj online!
Wypróbuj
"Hello Mine"
wersję tutajWypróbuj
"Hello Theirs"
wersję tutajWyjaśnienie
Na szczęście
<<<<<<<
,=======
i>>>>>>>
to wszystkie ważne definicje reguły w Brachylog. Oznacza to odpowiednio:Jeśli usuniemy konflikty, skończymy z drugą linią
"Mine"
lub"Theirs"
w drugiej linii, co oznacza, że staną się predykatem numer 1. Wywołanie tego predykatu↰₁
w pierwszej linii zunifikuje jego dane wejściowe i wyjściowe za pomocąMine
/Theirs
, z którym następnie drukujemyw
.Jeśli
↰₁
wywołamy plik będący w konflikcie, ostatecznie zadzwonimy<<<<<<<
. Dlatego nazywamy ten predykat ciągiem wejściowym (używającċ₂
- coerce to string).<
zakończy się niepowodzeniem z ciągiem jako wejściem. Następnie umieszczamy rozłączenie∨"Conflict"w
w głównym predykacie, który stwierdza, że jeśli predykat 1 nie powiedzie się, wówczas drukujemyConflict
.↰₁
z ciągiem jako wejściem nie zawiedzie dla linii"Mine"
lub"Theirs"
, ponieważ są łańcuchami.źródło
PHP,
7465 bajtówUwaga: używa kodowania IBM-850
Zapisz do pliku i uruchom w następujący sposób:
Wyjaśnienie
Binarny XOR daje jeden z następujących 3:
Poprawki
źródło
=======
operatora, a wtedy będzie to trochę łatwiejsze.Pip , 61 bajtów
Wypróbuj online!
Wszystko pomiędzy
""
jest sznurkiem. Dzielimy duży ciąg znaków na newlines ("..."^n
) i bierzemy siódmy element za pomocą cyklicznego indeksowania ((___7)
). W przypadku wersji będącej w konflikcie jest siedem linii, więc indeks 7 jest równoważny indeksowi 0 i otrzymujemyConflict
. W wersjach rozwiązanych są trzy linie, więc indeks 7 jest równoważny indeksowi 1 i otrzymujemyMine
/Theirs
. Następnie połącz"Hello "
z przodu i wydrukuj automatycznie.źródło
Partia,
133129 bajtówObjaśnienie:
goto
Instrukcja przechodzi do następnej etykiety, którą może znaleźć. W przypadku konfliktu kończy się to pomijaniem znaczników konfliktu is
otrzymuje jego ostateczną wartość. W przypadku rozpatrywania za pomocą Mojego, gotos nie mają żadnego efektu, ale ostatniset
już nie istnieje, więc wynikiem jest Mój. W przypadku rozwiązania razem z nimi początkowygoto
omija pozostałe,set
więc wynikiem jest jego wartość początkowa. Edycja: Zapisano 4 bajty dzięki @DLosc.źródło
:c
i zrobić@goto t
zamiast tego?Python 2,
8887 bajtówDrukuje odpowiednio szósty lub (teraz) pierwszy wiersz.
źródło
print
zawsze używa spacji jako separatora (i końcowego nowego wiersza;print
funkcja Python 3 pozwala wybrać separator i terminator)..COM opcode, 77 bajtów
Jeśli odstęp po jest
<<<<<<<
dozwolony, 75 bajtówźródło
Siatkówka , 57 bajtów
Wypróbuj online!
Wypróbuj wersję „Mine”
Wypróbuj wersję „Ich”
Wyjaśnienie programu konfliktu
Jak to często bywa w przypadku Retina, ten program zawiera wiele etapów wymiany.
Zamień puste / nieistniejące dane wejściowe na
Hello
.Zamień koniec ciągu roboczego na
<<<<<<<
Wymień
Mine
się=======
. PonieważMine
nie pojawia się nigdzie w ciągu roboczym, nic to nie robi.Wymień
Theirs
się>>>>>>>
. Ta sama oferta jak zMine
;Theirs
nie pojawia się, więc zamiana nic nie robi.Zastąpić sekwencję
<
zConflict
. Dodaliśmy<<<<<<<
na końcu łańcucha przy pierwszej zamianie, więc łańcuch roboczy staje sięHello Conflict
, który jest domyślnie wyprowadzany na końcu programu.Wyjaśnienie programów Moje / Ich
Po rozwiązaniu konfliktu kod będzie wyglądał następująco:
Tak jak poprzednio, zaczynając od łańcucha
Hello
.Teraz zamiast dołączania
<<<<<<<
doHello
, możemy dołączyćMine
.Następnie zamieniamy ciąg
<
zConflict
. Ale nie ma<
sznurka, więc nic się nie dzieje.Ciąg roboczy,,
Hello Mine
jest domyślnie wyprowadzany. Program „Ich” działa w ten sam sposób.źródło
OLEJ ,
888077 bajtów4
2
wypisuje wiersz 2 (Hello
),10
sprawdza, czy wiersz 0 (4
) jest identyczny z wierszem 16 (tym, który zawiera a,4
gdy istnieje konflikt) i przeskakuje do wiersza 16 lub wiersza 8 w zależności od wyniku. Jeśli istnieje,4
4
drukuje wiersz 4 (Conflict
). Jeśli nie,4
11
drukuje albo,Mine
alboTheirs
w zależności od tego, co zostało scalone, i3
wychodzi.źródło
Java 145 bajtów
Java nie ma ciągów wielowierszowych, więc potrzebna była sztuczka związana z komentowaniem
źródło
*
w trzeciej linii? Myślałem, że to po prostu*/s+="Mine";/*
zadziała.Bash, 76 bajtów
Grał w golfa
Jak to działa
Używa tutaj doc , aby podać tekst źródłowy do sed .
Sed wstawi pierwszy odczytany wiersz słowem „Hello”, zastąpi
<<<<<<<
ciąg „Conflict”, a następnie quit (q
).Wypróbuj online!
źródło
ES6 (JavaScript),
83, 82 bajtyGrał w golfa
Spróbuj
źródło
Java 8, 108 bajtów
To lambda akceptuje puste dane wejściowe i nic nie zwraca.
Wypróbuj online
Podejście zainspirowane rozwiązaniem Java masterX244 .
źródło
C (GCC), 110 bajtów
Podanie funkcji.
Podejście zainspirowane rozwiązaniem Java masterX244 .
TIO
źródło
Perl 5 , 68 bajtów
Zaktualizowano po uświadomieniu sobie, że wersja z 6 każdym separatorem działa zgodnie z przeznaczeniem, ale z rzeczywistymi 7 separatorami nie działa ... Ups ...
Spróbuj konfliktu online!
Wypróbuj mój online!
Wypróbuj itheirs online!
źródło