マージ競合の実行


24

gitなどのツールを使用して2つのファイルをマージすると、競合が検出され、マージ結果に追加される可能性があります。

これら2つのファイルのマージ:

私のファイル:

Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4

それらのファイル:

Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4

結果として:

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

コンフリクトマーカーラインを参照

Mineとのこの競合を解決すると、次のファイルが作成されます。

Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4

Theirsとのこの競合を解決すると、このファイルが作成されます。

Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4

この課題の目的は、競合を含むソースファイルを作成し、それでもコンパイル/実行することです。

次のソースファイルを作成します。

  1. 適切なパッチの競合マーカーでマークつの有効な、双方向、競合が含まれています(<<<<<<<=======>>>>>>>)鉱山マーカーの後かれらファイルディスクリプタはオプションです。
  2. マーカーがソースの一部である場合、エラー/警告なしでコンパイル/実行します
  3. mineを使用して競合が解決された場合、エラー/警告なしでコンパイル/実行
  4. それらを使用して競合が解決された場合、エラー/警告なしでコンパイル/実行
  5. 競合するファイルをコンパイル/実行するときに「Hello Conflict」を出力します
  6. 鉱山バージョンのコンパイル/実行時に「Hello Mine」を出力します
  7. theirsバージョンのコンパイル/実行時に「Hello theirs」を出力します

kdiff3が競合を認識するように、マーカーをソースファイルに配置する必要があります。

標準的な抜け穴は禁止されています。

最短のコードが優先されます。

スコアは競合するソースの長さです


関数の提出は許可されていますか、それとも完全なプログラムのみですか?
ヤコブ

@Jakob-実行/実行できる必要があります。そのため、関数(または式のみ)を実行できるREPLがある場合は、確認してください。
エルノ

回答:


2

ゼリー、51バイト

<<<<<<<
“½&;»
“£<Ø»
=======

“8ẉI»
>>>>>>>
“¢5Ṛ»;2£

オンラインでお試しください!

説明

ここでの競合マーカーは、競合が解決された後、3行のうちの1行がプログラムの2行目になるように配置されています。これはという名前の定数になります。元のプログラムの2行目は文字列をエンコードします" Conflict"(Jellyの圧縮表記)。3行目は文字列をエンコードします" Mine"(競合が私のものとして解決された場合、これは2行目になります)。6行目は文字列をエンコードします" Theirs"(競合が解決された場合は2行目になります)。

メインプログラムは、削除される前の行数に関係なく、常に最後の行です。の圧縮されたエンコードを受け取り、の値を"Hello"追加(;して、目的の出力を生成します。


13

JavaScript(ES6)、102 94 93 90バイト

console.log('Hello',(a=`
<<<<<<<
Mine
=======
Theirs
>>>>>>>
Conflict`.split`
`)[6]||a[1])

競合が解決された場合、6行目がないため、代わりに現在の最初の行が出力されます。編集:@nderscoreのおかげで3バイトを保存しました。


正規表現の創造的な使用!
エルノ

@ErnodeWeerdおっと、私はちょうど...それを変更
ニール

:)心配ない、私はそれを見て幸せだった
ERNO

-3バイト:console.log('Hello',(a=`...`)[6]||a[1])
nderscore

10

Brachylog68 67 66バイト

"Hello "wċ₂↰₁w∨"Conflict"w
<<<<<<<
"Mine"
=======
"Theirs"
>>>>>>>

オンラインでお試しください!

"Hello Mine"こちらからバージョンをお試しください

"Hello Theirs"こちらからバージョンをお試しください

説明

ありがたいことに、<<<<<<<=======および>>>>>>>Brachylog内のすべての有効なルールの定義です。それぞれ意味します:

  • 入力は暗黙的な変数より小さく、それ自体は...より小さく、それ自体は出力より小さくなります。
  • 入力のすべての要素が等しく、入力のすべての要素が等しく、...、およびInput = Output
  • 最初と同じですが、代わりに大きいです。

競合を削除すると、2行目"Mine"または"Theirs"2行目で終了します。つまり↰₁、1行目で述部with を呼び出すと、入力と出力がMine/ Theirsで統一され、その後で印刷されwます。

↰₁競合するファイルを呼び出すと、最終的にを呼び出し<<<<<<<ます。したがって、入力として文字列を使用してその述部を呼び出します(ċ₂-強制的に文字列を使用)。<入力として文字列で失敗します。次に∨"Conflict"w、述語1が失敗した場合にConflict代わりに出力することを示す、主な述語に分離を置きます。↰₁文字列を入力として使用しても、"Mine"or "Theirs"行は文字列であるため失敗しません。


9

PHP、74 65バイト

注:IBM-850エンコードを使用

Hello<?='
<<<<<<<
2:<?PU_~
=======
+;73"&_~
>>>>>>>
'^~ıǼ¡Ñ»¬áü;

ファイルに保存し、次のように実行します。

php -nf conflict.php

説明

Hello       # Print "Hello"
<?='        # Print result of expression
<<<<<<<     # String with merge conflict
2:<?PU_~
=======
+;73"&_~
>>>>>>>
'
^           # XOR that string with...
~ıǼ¡Ñ»¬áü; # ... this string, negated.

バイナリXORの結果は、次のいずれかです:

'
<<<<<<<
' ^ ~'ıǼ¡Ñ»¬áü'
==> ' Conflict' 
--------------------------------------------------------------------------
'
2:<?PU_~' ^ ~'ıǼ¡Ñ»¬áü'
==> ' Mine' (right padded with nul bytes)
--------------------------------------------------------------------------
'
+;73"&_~' ^ ~'ıǼ¡Ñ»¬áü'
==> ' Theirs' (right padded with nul bytes)

微調整

  • 文字列にバイナリロジックを使用して9バイトを節約

いつかPHPに=======演算子があり、これは少し簡単になります。
ヤコブ

7

ピップ、61バイト

"Hello ".("Conflict
<<<<<<<
Mine
=======
Theirs
>>>>>>>
"^n7)

オンラインでお試しください!

間のすべて""は文字列です。大きな文字列を改行("..."^n)で分割し、循環インデックスを使用して7番目の要素()を取得し(___7)ます。競合するバージョンの場合、7行あるため、インデックス7はインデックス0と同等であり、を取得しConflictます。解決されたバージョンの場合、3行あるため、インデックス7はインデックス1と同等であり、Mine/ を取得しTheirsます。次に"Hello "、前面に連結して自動印刷します。


非常に創造的で、周期的なインデックス作成が好きです。
エルノ

6

バッチ、133 129バイト

@set s=Theirs
@goto t
<<<<<<<
:t
@set s=Mine
@goto m
=======
:m
@set s=Conflict
@goto t
>>>>>>>
:t
:m
echo Hello %s%

説明:gotoステートメントは、見つけることができる次のラベルに進みます。競合の場合、これは単に競合マーカーをスキップすることにsなり、最終的な値を取得します。Mineで解決する場合、gotoは効果がありsetませんが、最後のものはもはや存在しないため、結果はMineです。Theirsで解決する場合、初期値はgoto残りをバイパスするsetため、結果は初期値になります。編集:@DLoscのおかげで4バイトを保存しました。


いいね!代わりに削除:cして実行できます@goto tか?
DLosc

@DLoscああ、バッチは最初ではなく次のラベルに移動しますか?きちんとした!
ニール

わかりません。テストしていません。私は完全に間違っているかもしれません。
DLosc

4

Python 2、88 87バイト

print 'Hello','''
<<<<<<<
Mine
=======
Theirs
>>>>>>>
Conflict'''.split('\n')[1::5][-1]

必要に応じて、6行目または(現在の)最初の行を印刷します。


1
「Hello」の部分は印刷されません...
Erno

@ErnodeWeerd申し訳ありませんが、私は他の回答でもその間違いを犯し、この問題を修正するのを忘れていました。
ニール

Helloとそれに続くものの間にスペースがありますか?
エルノ

@ErnodeWeerd Python 2 printステートメントは常に区切り文字としてスペースを使用します(および末尾の改行。Python3 のprint関数では区切り文字と終了文字を選択できます)。
ニール

3

.COMオペコード、77バイト

0000h: B4 09 BA 17 01 CD 21 BA 1F 01 80 3E 1F 01 3C 75 ; ......!....>..<u
0010h: 03 BA 44 01 CD 21 C3 48 65 6C 6C 6F 20 24 0A 3C ; ..D..!.Hello $.<
0020h: 3C 3C 3C 3C 3C 3C 0A 4D 69 6E 65 24 0A 3D 3D 3D ; <<<<<<.Mine$.===
0030h: 3D 3D 3D 3D 0A 54 68 65 69 72 24 0A 3E 3E 3E 3E ; ====.Their$.>>>>
0040h: 3E 3E 3E 0A 43 6F 6E 66 6C 69 63 74 24          ; >>>.Conflict$

        org 100h
        mov ah, 9
        mov dx, str1
        int 21H
        mov dx, str2
        cmp [str2], byte '<'
        jne $+5
        mov dx, str3
        int 21H
        ret

str1    db 'Hello $', 10
str2    db '<<<<<<<', 10
        db 'Mine$', 10
        db '=======', 10
        db 'Their$', 10
        db '>>>>>>>', 10
str3    db 'Conflict$'

後にスペースが<<<<<<<許可されている場合、75バイト

0000h: B4 09 BA 0D 01 CD 21 BA 1E 01 CD 21 C3 48 65 6C ; ......!....!.Hel
0010h: 6C 6F 20 24 0A 3C 3C 3C 3C 3C 3C 3C 20 0A 43 6F ; lo $.<<<<<<< .Co
0020h: 6E 66 6C 69 63 74 24 4D 69 6E 65 24 0A 3D 3D 3D ; nflict$Mine$.===
0030h: 3D 3D 3D 3D 0A 2A 2A 2A 2A 2A 2A 2A 2A 54 68 65 ; ====.********The
0040h: 69 72 24 0A 3E 3E 3E 3E 3E 3E 3E                ; ir$.>>>>>>>

        org 100h
        mov ah, 9
        mov dx, str1
        int 21H
        mov dx, str2
        int 21H
        ret

str1    db 'Hello $', 10
        db '<<<<<<< ', 10
str2    db 'Conflict$'
        db 'Mine$', 10
        db '=======', 10
        db '********Their$', 10
        db '>>>>>>>'     

良いですね!アセンブリバージョンを追加できれば、説明を読むことができます:)。はい、スペースは許可されているようです(仕様は私が望んでいるほど明確ではありません)
Erno

2

網膜、57バイト


Hello 
$
<<<<<<<
Mine
=======
Theirs
>>>>>>>
<+
Conflict

オンラインでお試しください!

「鉱山」バージョンをお試しください

「Theirs」バージョンをお試しください

競合プログラムの説明

Retinaでよくあることですが、このプログラムには多くの置換ステージが含まれています。


Hello 

空/存在しない入力をに置き換えますHello 

$
<<<<<<<

作業文字列の終わりを <<<<<<<

Mine
=======

交換してくださいMine=======Mine作業文字列のどこにも現れないため、これは何もしません。

Theirs
>>>>>>>

交換してくださいTheirs>>>>>>>。と同じ取引MineTheirs表示されないため、置換は何も行いません。

<+
Conflict

一連の置き換え<としますConflict<<<<<<<最初の置換時に文字列の最後に追加したため、作業文字列はHello Conflict、プログラムの最後に暗黙的に出力されます。

Mine / Theirsプログラムの説明

競合が解決されると、コードは次のようになります。


Hello 
$
Mine
<+
Conflict

Hello 

前と同じ、文字列で始まりますHello

$
Mine

に追加<<<<<<<する代わりにHello 、を追加しますMine

<+
Conflict

次に、我々は、一連の置き換え<としますConflict。しかし<、文字列にはs がないため、何も起こりません。

作業文字列Hello Mineが暗黙的に出力されます。「Theirs」プログラムも同じように機能します。


1

OIL88 80 77バイト

4
2
Hello 
10
Conflict
16
16
8
4
11
3
<<<<<<<
Mine
=======
Theirs
>>>>>>>
4
4

4 2は、行2(Hello)を印刷し、10行0(4)が行16(4競合が存在する場合を含む行)と同一かどうかをテストし、結果に応じて行16または行8にジャンプします。存在した場合、4 4行4(Conflict)を印刷します。一致しなかった場合、マージされた内容に応じてまたはの4 11いずれMineかを出力Theirsし、3終了します。


1

Java 145バイト

()->{String s = "Hello ";/*
<<<<<<<
*/s+="Mine";/*
=======
*/s+="Theirs";/*
>>>>>>>
*/if(s.length()>15)s="Hello Conflict";System.out.println(s);}

Javaには複数行の文字列がないため、コメントのトリックが必要でした


*3行目の追加の理由は何ですか?私はそれ*/s+="Mine";/*がうまくいくと思うでしょう。
CAD97

コメント行が同
一行


1

ES6(Javascript)、 83、82バイト

ゴルフ

alert("Hello "+((T=`\
<<<<<<<
Mine
=======
Theirs
>>>>>>>
`)[1]>"<"?T:"Conflict"))

それを試してみてください

alert("Hello "+((T=`\
<<<<<<<
Mine
=======
Theirs
>>>>>>>
`)[1]>"<"?T:"Conflict"))

alert("Hello "+((T=`\
Mine
`)[1]>"<"?T:"Conflict"))

alert("Hello "+((T=`\
Theirs
`)[1]>"<"?T:"Conflict"))




1

Perl 5、68バイト

各区切り文字が6つあるバージョンが意図したとおりに動作することを認識した後に更新されましたが、実際の7つの区切り文字では動作しません...おっと...

say"Hello ",q
<<<<<<<
!Mine!;0
=======
!Theirs!;0
>>>>>>>
&&Conflict

オンラインで競合を試してください!

オンラインで試してみてください!

itheirsをオンラインでお試しください!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.