병합 충돌 실행


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 Theys"출력

마커는 kdiff3가 충돌을 인식하는 방식으로 소스 파일에 있어야합니다.

표준 허점 은 금지되어 있습니다.

가장 짧은 코드가 승리합니다.

점수는 상충되는 출처의 길이입니다


기능 제출이 가능합니까, 아니면 전체 프로그램입니까?
Jakob

@Jakob-실행 / 실행이 가능해야합니다. 따라서 함수 (또는 표현식 만)를 실행할 수있는 REPL이 있으면 반드시 확인하십시오.
Erno

답변:


2

젤리 , 51 바이트

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

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

온라인으로 사용해보십시오!

설명

여기서 충돌 마커는 충돌이 해결 된 후 세 줄 중 하나가 프로그램의 두 번째 줄이되도록 배치됩니다. 이것은 이름이 상수 입니다. 원래 프로그램의 두 번째 줄은 문자열을 인코딩합니다 " Conflict"(Jelly의 압축 표기법으로). 세 번째 줄은 문자열을 인코딩합니다 " Mine"(충돌이 내 것으로 해결되면 두 번째 줄이됩니다). 여섯 번째 줄은 문자열을 인코딩합니다 " Theirs"(그리고 충돌이 해결되면 두 번째 줄이됩니다).

메인 프로그램은 삭제되기 전에 몇 줄이든지 상관없이 항상 마지막 줄입니다. 압축 된 인코딩을 가져 와서 값을 "Hello"추가 ( ;) 하여 원하는 출력을 생성합니다.


13

자바 스크립트 (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

Brachylog , 68 67 66 바이트

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

온라인으로 사용해보십시오!

"Hello Mine"여기 에서 버전을 사용해보십시오

"Hello Theirs"여기 에서 버전을 사용해보십시오

설명

감사하게도 <<<<<<<, =======그리고 >>>>>>>Brachylog의 모든 유효한 규칙 정의입니다. 그들은 각각 다음을 의미합니다.

  • 입력은 암시 적 변수보다 작고 자체보다 작습니다.
  • 입력의 모든 요소가 같고 입력의 모든 요소가 같고 ... 및 입력 = 출력
  • 첫 번째와 동일하지만 대신보다 큽니다.

충돌을 제거 하면 두 번째 줄로 끝나 "Mine"거나 "Theirs"두 번째 줄에있게됩니다. 즉, 술어 번호 1이 ↰₁됩니다. 첫 번째 줄에서 와 함께 해당 술어를 호출하면 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의 결과는 다음 3 중 하나입니다.

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

조정

  • 문자열에 이진 논리를 사용하여 9 바이트 절약

언젠가 PHP는 =======연산자 를 갖게 될 것이고, 조금 더 쉬울 것입니다.
Jakob

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으로 해결하는 경우 고 토스는 효과가 없지만 마지막은 set더 이상 존재하지 않으므로 결과는 Mine입니다. 그것들로 해결하는 경우, 초기 goto는 나머지를 우회 set하므로 결과는 초기 값입니다. 편집 : @DLosc 덕분에 4 바이트가 절약되었습니다.


좋은! 제거 :c하고 @goto t대신 할 수 있습니까 ?
DLosc

@DLosc 아, Batch는 첫 번째 레이블이 아닌 다음 레이블로갑니다. 산뜻한!
Neil

잘 모르겠습니다. 테스트하지 않았습니다. 나는 완전히 틀렸을지도 모른다.
DLosc

4

파이썬 2, 88 87 바이트

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

여섯 번째 또는 현재 줄을 적절하게 인쇄합니다.


1
"Hello"부분을 인쇄하지 않습니다.
Erno

@ErnodeWeerd 죄송합니다. 다른 답변에서도 실수를 저질렀 으며이 문제를 해결하는 것을 잊었습니다.
Neil

Hello와 뒤에는 공백이 있습니까?
Erno

@ErnodeWeerd Python 2 print문은 항상 공백을 구분 기호로 사용합니다 (그리고 후행 줄 바꿈; Python 3의 print기능을 사용하면 구분 기호와 종결자를 선택할 수 있습니다).
Neil

3

.COM opcode, 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 

문자열에서 시작하여 이전과 동일합니다 Hello.

$
Mine

이제 대신 추가의 <<<<<<<Hello , 우리는 추가 Mine.

<+
Conflict

다음으로, 우리는 일련의 교체 <와를 Conflict. 그러나 <문자열에 s가 없으므로 아무 일도 일어나지 않습니다.

작업 문자열 Hello Mine은 암시 적으로 출력됩니다. "그들의"프로그램은 같은 방식으로 작동합니다.


1

오일 , 88 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 44 행 ( Conflict)을 인쇄합니다 . 그렇지 않은 경우 4 11인쇄 중 Mine또는 Theirs병합하고 있었는지에 따라 3종료됩니다.


1

자바 145 바이트

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

Java에는 여러 줄 문자열이 없으므로 일부 주석 트릭이 필요했습니다.


*세 번째 줄에 여분의 이유가 무엇입니까 ? 나는 그것이 효과가 있다고 생각할 것입니다 */s+="Mine";/*.
CAD97

주석 행이 동일한 행을 피하기 위해 별도의
행일

1

배쉬, 76 바이트

골프

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

작동 원리

here doc을 사용 하여 sed에 소스 텍스트를 공급하십시오 .

Sed 는 읽은 첫 번째 줄 앞에 "Hello"를 붙여서 <<<<<<<문자열을 "Conflict"로 바꾼 다음 종료합니다 ( q).

온라인으로 사용해보십시오!


1

ES6 (자바 스크립트) 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

C (GCC), 110 바이트

기능 제출.

f(){char*s[]={0,"Mine","Theirs","Conflict"};printf("Hello %s",s[/*
<<<<<<<
*/1/*
=======
*/+2/*
>>>>>>>
*/]);}

masterX244의 Java 솔루션 에서 영감을 얻은 접근 방식 .

TIO


좋은 것! 여러 줄 주석을 스마트하게 사용합니다.
Erno

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.