При использовании инструмента, такого как 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
Разрешение этого конфликта с Theirs создаст этот файл:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
Целью этой задачи является написание исходного файла, который содержит конфликт и все еще компилируется / выполняется.
Напишите исходный файл, который:
- содержит один действительный, двусторонний, конфликт , отмеченный соответствующих маркера патча конфликтов (
<<<<<<<
,=======
,>>>>>>>
) Шахтные и ихние дескрипторы после маркеров являются необязательными. - компилирует / выполняет без ошибок / предупреждений, если маркеры остаются частью источника
- компилирует / выполняет без ошибок / предупреждений, если конфликт разрешен с помощью шахты
- компилирует / выполняет без ошибок / предупреждений, если конфликт разрешается с помощью их
- выводит "Hello Conflict" при компиляции / исполнении конфликтующего файла
- выводит "Hello Mine" при компиляции / выполнении моей версии
- выводит "Hello Theirs" при компиляции / исполнении их версии
Маркеры должны быть расположены в исходном файле таким образом, чтобы kdiff3 распознал конфликт.
Стандартные лазейки запрещены.
Самый короткий код выигрывает.
Оценка - длина конфликтующего источника
Ответы:
Желе , 51 байт
Попробуйте онлайн!
объяснение
Маркеры конфликта здесь расположены таким образом, что одна из трех строк становится второй строкой программы после разрешения конфликта; это будет константа с именем
2£
. Вторая строка оригинальной программы кодирует строку" Conflict"
(в сжатой записи Jelly); третья строка кодирует строку" Mine"
(она станет второй строкой, если конфликт разрешен как мой); шестая строка кодирует строку" Theirs"
(и станет второй строкой, если конфликт разрешен как их).Основная программа всегда является последней строкой, независимо от того, сколько строк перед ней удалено. Он принимает сжатое кодирование
"Hello"
и добавляет;
к нему значение ( )2£
, создавая тем самым желаемый результат.источник
JavaScript (ES6),
102949390 байтЕсли конфликт разрешен, шестой строки нет, поэтому вместо нее выводится первая строка. Редактировать: 3 байта сохранены благодаря @nderscore.
источник
console.log('Hello',(a=`...`)[6]||a[1])
Brachylog ,
686766 байтПопробуйте онлайн!
Попробуйте
"Hello Mine"
версию здесьПопробуйте
"Hello Theirs"
версию здесьобъяснение
К счастью,
<<<<<<<
,=======
и>>>>>>>
все действительные определения правил в Brachylog. Они соответственно означают:Если мы удаляем конфликты, мы в конечном итоге получаем
"Mine"
или"Theirs"
во второй строке, что означает, что они становятся предикатом номер 1. Вызов этого предиката с↰₁
первой строкой объединит его ввод и вывод сMine
/Theirs
, который мы затем напечатаемw
.Если мы вызываем
↰₁
конфликтующий файл, мы в конечном итоге вызываем<<<<<<<
. Поэтому мы вызываем этот предикат со строкой в качестве входных данных (используяċ₂
- coerce to string).<
потерпит неудачу со строкой в качестве ввода. Затем мы помещаем дизъюнкцию∨"Conflict"w
в основной предикат, которая гласит, что если предикат 1 не работает, тоConflict
вместо этого мы печатаем .↰₁
со строкой в качестве входных данных не будет ошибкой для строк"Mine"
или,"Theirs"
потому что они являются строками.источник
PHP,
7465 байтПримечание: используется кодировка IBM-850
Сохраните в файл и запустите так:
объяснение
Двоичный XOR приводит к одному из следующих 3:
Tweaks
источник
=======
оператор, и тогда это будет немного проще.Пип , 61 байт
Попробуйте онлайн!
Все, что между,
""
является строкой. Разобьем большую строку на newlines ("..."^n
) и возьмем 7-й элемент с циклическим индексированием ((___7)
). Для конфликтующей версии есть семь строк, поэтому индекс 7 эквивалентен индексу 0, и мы получаемConflict
. Для разрешенных версий есть три строки, поэтому индекс 7 эквивалентен индексу 1, и мы получаемMine
/Theirs
. Затем конкатенация"Hello "
к передней части и автопечать.источник
Пакет,
133129 байтОбъяснение:
goto
Оператор переходит к следующей метке, которую он может найти. В случае конфликта это просто приводит к пропуску маркеров конфликта иs
его окончательному значению. В случае разрешения с помощью Mine, gotos не имеют никакого эффекта, но последнийset
больше не существует, поэтому результатом является Mine. В случае разрешения с их помощью начальныйgoto
обходит оставшееся,set
поэтому результатом является его первоначальное значение. Редактировать: 4 байта сохранены благодаря @DLosc.источник
:c
и сделать@goto t
вместо этого?Python 2,
8887 байтПечатает шестую или (сейчас) первую строку в зависимости от ситуации.
источник
print
всегда использует пробел в качестве разделителя (и завершающий символ новой строки;print
функция Python 3 позволяет выбирать разделитель и терминатор)..COM код операции, 77 байт
Если пробел после
<<<<<<<
допустимого, 75 байтовисточник
Сетчатка , 57 байт
Попробуйте онлайн!
Попробуйте версию "Моя"
Попробуйте версию "Их"
Объяснение программы Конфликт
Как это часто бывает с Retina, эта программа содержит множество этапов замены.
Замените пустой / несуществующий вход на
Hello
.Заменить конец рабочей строки на
<<<<<<<
Заменить
Mine
на=======
. ТакMine
как нигде в рабочей строке не появляется, это ничего не делает.Заменить
Theirs
на>>>>>>>
. Та же сделка, что и сMine
;Theirs
не появляется, поэтому замена ничего не делает.Заменить последовательность
<
сConflict
. Мы добавили<<<<<<<
в конец строки при первой замене, чтобыHello Conflict
получилась рабочая строка , которая неявно выводится в конце программы.Объяснение моих / их программ
Когда конфликт разрешен, код будет выглядеть так:
То же, что и раньше, начиная со строки
Hello
.Теперь вместо добавления
<<<<<<<
кHello
, мы добавляемMine
.Далее мы заменим последовательность
<
сConflict
. Но<
в строке нет s, поэтому ничего не происходит.Рабочая строка,
Hello Mine
неявно выводится. Программа «Их» работает так же.источник
НЕФТЬ ,
888077 байт4
2
печатает строку 2 (Hello
),10
проверяет,4
совпадает ли строка 0 ( ) со строкой 16 (той, которая содержит,4
когда существует конфликт) и переходит к строке 16 или строке 8 в зависимости от результата. Если он существовал,4
4
печатает строку 4 (Conflict
). Если это не так,4
11
печатает либо,Mine
либоTheirs
, в зависимости от того, что было объединено, и3
выходит.источник
Java 145 байт
В Java нет многострочных строк, поэтому понадобился трюк с комментариями
источник
*
на третьей строчке? Я думаю, что*/s+="Mine";/*
это сработает.Баш, 76 байт
Golfed
Как это работает
Использует здесь документ , чтобы подать исходный текст в sed .
Sed добавит к первой строке, которую он прочитал, «Hello», заменит
<<<<<<<
строку на «Conflict» и выйдет (q
).Попробуйте онлайн!
источник
ES6 (Javascript),
83, 82 байтаGolfed
Попытайся
источник
Java 8, 108 байт
Это лямбда, принимающая пустой ввод и ничего не возвращающая.
Попробуйте онлайн
Подход, основанный на Java-решении masterX244 .
источник
C (GCC), 110 байтов
Функция представления.
Подход, основанный на Java-решении masterX244 .
TIOS
источник
Perl 5 , 68 байт
Обновляется после понимания того, что версия с 6 каждым разделителем работает, как и предполагалось, но с фактическими 7 разделителями это не ... Ой ...
Попробуйте конфликт в Интернете!
Попробуйте мой онлайн!
Попробуйте онлайн!
источник