运行合并冲突


24

当使用git之类的工具合并两个文件时,可能会检测到冲突并将其添加到合并结果中。

这两个文件的合并:

我的档案:

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

解决与他们的冲突将创建以下文件:

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. 如果使用我的方法解决了冲突,则编译/执行时不会出现错误/警告
  4. 编译/执行没有错误/警告,如果冲突是由使用解决他们的
  5. 编译/执行冲突文件时输出“ Hello Conflict”
  6. 编译/执行地雷版本时输出“ Hello Mine”
  7. 在编译/执行他们的版本时输出“ Hello他们的”

标记应以kdiff3识别冲突的方式位于源文件中。

禁止出现标准漏洞

最短的代码获胜。

分数是冲突源的长度


是否允许提交功能,还是只允许完整程序?
雅各布

@Jakob-必须可以执行/运行它。因此,如果有可以执行功能(或仅执行表达式)的REPL,请确定。
Erno

Answers:


2

果冻,51字节

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

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

在线尝试!

说明

定位冲突标记,以便在解决冲突后,三行之一成为程序的第二行;这将是一个常量,名为。原始程序的第二行对字符串进行编码" Conflict"(以Jelly的压缩符号表示)。第三行编码字符串" Mine"(如果将冲突解决为我的,它将成为第二行);第六行编码字符串" Theirs"(如果将冲突解决为字符串,则将成为第二行)。

无论删除多少行,主程序始终是最后一行。它采用的压缩编码"Hello",并将;其值附加(),从而产生所需的输出。


13

JavaScript(ES6),102 94 93 90字节

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

如果冲突已解决,则没有第六行,因此它将打印第一行。编辑:由于@nderscore,节省了3个字节。


创造性地使用正则表达式!
Erno

@ErnodeWeerd糟糕,我刚刚更改了它
Neil

:)不用担心,我很高兴看到它
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
  • 与第一个相同,但大于。

如果消除冲突,我们将在第二行以"Mine"或结束"Theirs",这意味着它们成为谓词编号1。↰₁在第一行调用谓词with 将用Mine/ 统一其输入和输出,Theirs然后使用进行打印w

如果调用↰₁冲突的文件,则最终调用<<<<<<<。因此,我们以字符串作为输入来调用谓词(使用ċ₂-强制转换为字符串)。<将失败,并以字符串作为输入。然后,我们∨"Conflict"w在主谓词中放置一个析取符,该谓词表明如果谓词1失败,则将其打印Conflict↰₁输入的字符串不会因为"Mine""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。对于已解析的版本,共有三行,因此索引7等于索引1,我们得到Mine/ Theirs。然后连接"Hello "到前面并自动打印。


非常有创意,我喜欢周期性索引。
Erno

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解决的情况下,gotos无效,但最后一个set不再存在,因此结果是Mine。如果使用“他们的”来解决,则初始值会goto绕过其余值,set因此结果是其初始值。编辑:由于@DLosc,节省了4个字节。


真好!您可以删除:c@goto t代替吗?
DLosc

@DLosc哦,所以Batch转到下一个标签,而不是第一个?整齐!
尼尔

我不知道-我还没有测试过。我可能完全错了。
DLosc

4

Python 2,88 87字节

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

根据需要打印第六行或(现在)第一行。


1
它不会打印“ Hello”部分...
Erno

@ErnodeWeerd对不起,我在另一个答案中也犯了那个错误,却忘记修复此错误。
尼尔

您好和后面的内容之间是否有空格?
Erno

@ErnodeWeerd Python 2 print语句始终使用空格作为分隔符(以及结尾的换行符; Python 3的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

在线尝试!

尝试“矿山”版本

尝试“他们的”版本

冲突程序说明

与Retina一样,该程序包含许多替换阶段。


Hello 

用替换空/不存在的输入Hello 

$
<<<<<<<

将工作字符串的结尾替换为 <<<<<<<

Mine
=======

替换Mine=======。由于Mine它没有出现在工作字符串的任何位置,因此不会执行任何操作。

Theirs
>>>>>>>

替换Theirs>>>>>>>。与...相同Mine; Theirs不会出现,因此替换操作无效。

<+
Conflict

替换的序列<Conflict。我们<<<<<<<在第一个替换项的末尾添加了字符串,因此工作字符串变为Hello Conflict,它在程序末尾隐式输出。

矿山/他们的计划的说明

解决冲突后,代码将如下所示:


Hello 
$
Mine
<+
Conflict

Hello 

与之前相同,从string开始Hello

$
Mine

现在,而不是追加<<<<<<<Hello ,我们追加Mine

<+
Conflict

接下来,我们替换的序列<Conflict。但是<字符串中没有,因此什么也没有发生。

工作字符串Hello Mine隐式输出。“他们的”程序的工作方式相同。


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存在冲突时包含a)相同,并根据结果跳转到第16行或第8行。如果存在,则4 4打印第4行(Conflict)。如果不是,则根据合并的内容4 11打印MineTheirs,然后3退出。


1

Java 145个字节

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

Java没有多行字符串,因此需要一些注释技巧


*第三行出现额外费用的原因是什么?我认为那*/s+="Mine";/*会起作用。
CAD97

注释行为单独行以避免相同行(在发布之前已重构并忘记该行)时
剩下的内容

1

Bash,76个字节

打高尔夫球

sed 's/^/Hello /;s/<\+/Conflict/;q'<<E
<<<<<<<
Mine
=======
Theirs
>>>>>>>
E

怎么运行的

在此处使用doc,将源文本输入sed

Sed将在读取的第一行之前添加“ Hello”,将<<<<<<<字符串替换为“ Conflict”,然后退出(q)。

在线尝试!


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"))




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.