Saat menggunakan alat seperti git untuk menggabungkan dua file, konflik dapat dideteksi dan ditambahkan ke hasil gabungan.
Gabungan dari dua file ini:
file saya:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
file mereka:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
akan menghasilkan:
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
Lihat Garis Penanda Konflik
Mengatasi konflik dengan Tambang ini akan membuat file ini:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
Mengatasi konflik ini dengan Mereka akan membuat file ini:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
Tujuan dari tantangan ini adalah untuk menulis file sumber yang mengandung konflik dan masih mengkompilasi / mengeksekusi.
Tulis file sumber yang:
- berisi satu valid, dua arah, konflik ditandai dengan penanda konflik patch yang tepat (
<<<<<<<
,=======
,>>>>>>>
) Tambang dan deskriptor file milik mereka setelah penanda adalah opsional. - mengkompilasi / mengeksekusi tanpa kesalahan / peringatan jika marker tetap menjadi bagian dari sumber
- mengkompilasi / mengeksekusi tanpa kesalahan / peringatan jika konflik diselesaikan dengan menggunakan milik saya
- mengkompilasi / mengeksekusi tanpa kesalahan / peringatan jika konflik diselesaikan dengan menggunakan milik mereka
- menampilkan "Hello Conflict" saat mengkompilasi / mengeksekusi file yang konflik
- output "Hello Mine" saat mengkompilasi / mengeksekusi versi tambang
- output "Halo Mereka" ketika mengkompilasi / mengeksekusi versi mereka
Marker harus ditempatkan di file sumber sedemikian rupa sehingga kdiff3 mengenali konflik.
Celah standar dilarang.
Kode terpendek menang.
Skor adalah panjang dari sumber yang bertentangan
Jawaban:
Jelly , 51 byte
Cobalah online!
Penjelasan
Penanda konflik di sini diposisikan sehingga salah satu dari tiga baris menjadi baris kedua dari program setelah konflik diselesaikan; ini akan menjadi konstanta, bernama
2£
. Baris kedua dari program asli mengkodekan string" Conflict"
(dalam notasi terkompresi Jelly); baris ketiga mengkodekan string" Mine"
(ini akan menjadi baris kedua jika konflik diselesaikan sebagai milikku); baris keenam mengkodekan string" Theirs"
(dan akan menjadi baris kedua jika konflik diselesaikan sebagai milik mereka).Program utama selalu merupakan baris terakhir, tidak peduli berapa banyak baris sebelum dihapus. Dibutuhkan pengkodean terkompresi dari
"Hello"
, dan menambahkan (;
) nilai2£
untuk itu, sehingga menghasilkan output yang diinginkan.sumber
JavaScript (ES6),
102949390 byteJika konflik telah diselesaikan, maka tidak ada baris keenam, jadi ia mencetak baris pertama sekarang. Sunting: Disimpan 3 byte berkat @nderscore.
sumber
console.log('Hello',(a=`...`)[6]||a[1])
Brachylog ,
686766 byteCobalah online!
Coba
"Hello Mine"
versinya di siniCoba
"Hello Theirs"
versinya di siniPenjelasan
Syukurlah
<<<<<<<
,,=======
dan>>>>>>>
semua definisi aturan yang berlaku di Brachylog. Mereka masing-masing berarti:Jika kita menghapus konflik, kita berakhir dengan
"Mine"
atau"Theirs"
pada baris kedua, yang berarti mereka menjadi predikat nomor 1. Memanggil predikat dengan↰₁
pada baris pertama akan menyatukan input dan outputnya denganMine
/Theirs
, yang kemudian kita cetak denganw
.Jika kita memanggil
↰₁
file yang konflik, kita akhirnya memanggil<<<<<<<
. Karena itu kami menyebut predikat itu dengan string sebagai input (menggunakanċ₂
- memaksa ke string).<
akan gagal dengan string sebagai input. Kami kemudian menempatkan disjungsi∨"Conflict"w
dalam predikat utama yang menyatakan bahwa jika predikat 1 gagal, maka kami mencetakConflict
sebagai gantinya.↰₁
dengan string sebagai input tidak akan gagal untuk"Mine"
atau"Theirs"
baris karena mereka adalah string.sumber
PHP,
7465 byteCatatan: menggunakan pengkodean IBM-850
Simpan ke file dan jalankan seperti ini:
Penjelasan
Biner XOR menghasilkan salah satu dari 3 berikut ini:
Tweaks
sumber
=======
operator, dan ini akan menjadi sedikit lebih mudah.Pip , 61 byte
Cobalah online!
Semuanya
""
adalah string. Kami membagi string besar pada baris baru ("..."^n
) dan mengambil elemen ke-7 dengan pengindeksan siklus ((___7)
). Untuk versi yang konflik, ada tujuh baris, jadi indeks 7 setara dengan indeks 0 dan kita dapatkanConflict
. Untuk versi yang diselesaikan, ada tiga baris, jadi indeks 7 setara dengan indeks 1 dan kami mendapatkanMine
/Theirs
. Kemudian gabungkan"Hello "
ke depan dan cetak otomatis.sumber
Batch,
133129 bytePenjelasan:
goto
Pernyataan pergi ke label berikutnya yang dapat ditemukan. Dalam kasus konflik, ini hanya akan melewatkan penanda konflik, dans
mendapatkan nilai akhirnya. Dalam kasus penyelesaian dengan Milik saya, goto tidak memiliki efek, tetapi yang terakhirset
tidak ada lagi, sehingga hasilnya adalah Milik saya. Dalam kasus penyelesaian dengan milik mereka initalgoto
memotong sisanyaset
sehingga hasilnya adalah nilai awal. Sunting: Disimpan 4 byte berkat @DLosc.sumber
:c
dan melakukannya@goto t
?Python 2,
8887 byteMencetak baris pertama keenam atau (sekarang) yang sesuai.
sumber
print
selalu menggunakan spasi sebagai pemisah (dan baris baru;print
Fungsi Python 3 memungkinkan Anda untuk memilih pemisah dan terminator)..COM opcode, 77 byte
Jika spasi setelah
<<<<<<<
diizinkan, 75 bytesumber
Retina , 57 byte
Cobalah online!
Coba versi "Milikku"
Coba versi "Mereka"
Penjelasan program Konflik
Seperti yang sering terjadi dengan Retina, program ini mengandung banyak tahap penggantian.
Ganti input kosong / tidak ada dengan
Hello
.Ganti ujung string kerja dengan
<<<<<<<
Ganti
Mine
dengan=======
. KarenaMine
tidak muncul di manapun di string yang berfungsi, ini tidak melakukan apa-apa.Ganti
Theirs
dengan>>>>>>>
. Kesepakatan yang sama denganMine
;Theirs
tidak muncul, jadi penggantinya tidak melakukan apa-apa.Ganti urutan
<
denganConflict
. Kami menambahkan<<<<<<<
ke akhir string pada penggantian pertama, sehingga string yang bekerja menjadiHello Conflict
, yang secara implisit dihasilkan pada akhir program.Penjelasan program Saya / Mereka
Ketika konflik diselesaikan, kode akan terlihat seperti ini:
Sama seperti sebelumnya, dimulai dengan string
Hello
.Sekarang alih-alih menambahkan
<<<<<<<
keHello
, kami menambahkanMine
.Selanjutnya, kami mengganti urutan
<
denganConflict
. Tetapi tidak ada<
s dalam string, jadi tidak ada yang terjadi.String yang bekerja
Hello Mine
,, secara implisit menghasilkan. Program "Mereka" bekerja dengan cara yang sama.sumber
OIL ,
888077 byte4
2
adalah mencetak baris 2 (Hello
),10
menguji apakah baris 0 (4
) identik dengan baris 16 (baris yang berisi4
ketika konflik ada) dan melompat ke baris 16 atau baris 8 tergantung pada hasilnya. Jika ada,4
4
cetak baris 4 (Conflict
). Jika tidak,4
11
cetak salah satuMine
atauTheirs
, tergantung pada apa yang digabungkan, dan3
keluar.sumber
Java 145 Bytes
Java tidak memiliki string multiline sehingga diperlukan beberapa trik Komentar
sumber
*
di baris ketiga? Saya akan berpikir itu hanya*/s+="Mine";/*
akan berhasil.Bash, 76 byte
Golf
Bagaimana itu bekerja
Gunakan di sini doc , untuk memberi makan teks sumber ke sed .
Sed akan menambahkan awal baris yang dibacanya dengan "Hello", ganti
<<<<<<<
string dengan "Conflict" dan kemudian berhenti (q
).Cobalah secara Online!
sumber
ES6 (Javascript),
83, 82 byteGolf
Cobalah
sumber
Java 8, 108 byte
Ini adalah lambda menerima input kosong dan tidak mengembalikan apa pun.
Cobalah secara Online
Pendekatan yang terinspirasi oleh solusi Java masterX244 .
sumber
C (GCC), 110 byte
Pengiriman fungsi.
Pendekatan yang terinspirasi oleh solusi Java masterX244 .
TIO
sumber
Perl 5 , 68 byte
Diperbarui setelah menyadari bahwa versi dengan 6 masing-masing pembatas berfungsi sebagaimana dimaksud, tetapi dengan 7 pembatas yang sebenarnya, itu tidak ... Ups ...
Coba konflik online!
Coba milikku online!
Cobalah secara online!
sumber