Ao usar uma ferramenta como o git para mesclar dois arquivos, um conflito pode ser detectado e adicionado ao resultado da mesclagem.
Uma mesclagem desses dois arquivos:
meu arquivo:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
o arquivo deles:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
resultaria em:
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
Consulte Linhas de Marcador de Conflito
Resolver esse conflito com o Mine criaria este arquivo:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
Resolver esse conflito com os deles criaria este arquivo:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
O objetivo deste desafio é escrever um arquivo de origem que contenha um conflito e ainda compile / execute.
Escreva um arquivo de origem que:
- contém um válido, nos dois sentidos, o conflito marcado pelos marcadores remendo de conflito adequadas (
<<<<<<<
,=======
,>>>>>>>
) Meu e Deles descritores de arquivos após os marcadores são opcionais. - compila / executa sem erros / avisos se os marcadores permanecerem parte da fonte
- compila / executa sem erros / avisos se o conflito for resolvido usando o meu
- compila / executa sem erros / avisos se o conflito for resolvido usando o deles
- gera "Hello Conflict" ao compilar / executar o arquivo em conflito
- produz "Hello Mine" ao compilar / executar a versão mine
- produz "Olá!" ao compilar / executar a versão deles
Os marcadores devem estar localizados no arquivo de origem de forma que o kdiff3 reconheça o conflito.
As brechas padrão são proibidas.
O código mais curto vence.
Pontuação é o comprimento da fonte em conflito
Respostas:
Geléia , 51 bytes
Experimente online!
Explicação
Os marcadores de conflito aqui são posicionados para que uma das três linhas se torne a segunda linha do programa após a resolução do conflito; isso será uma constante, nomeado
2£
. A segunda linha do programa original codifica a string" Conflict"
(na notação compactada de Jelly); a terceira linha codifica a string" Mine"
(esta se tornará a segunda linha se o conflito for resolvido como meu); a sexta linha codifica a string" Theirs"
(e se tornará a segunda linha se o conflito for resolvido como deles).O programa principal é sempre a última linha, não importa quantas linhas sejam excluídas. Ele pega a codificação compactada
"Hello"
e acrescenta (;
) o valor2£
dela, produzindo assim a saída desejada.fonte
JavaScript (ES6),
102949390 bytesSe o conflito tiver sido resolvido, não haverá sexta linha; portanto, a primeira linha será impressa. Editar: salvou 3 bytes graças a @nderscore.
fonte
console.log('Hello',(a=`...`)[6]||a[1])
Braquilog ,
686766 bytesExperimente online!
Experimente a
"Hello Mine"
versão aquiExperimente a
"Hello Theirs"
versão aquiExplicação
Felizmente,
<<<<<<<
,=======
e>>>>>>>
são todas as definições de regras válidas em Brachylog. Eles significam respectivamente:Se removermos conflitos, terminamos com
"Mine"
ou"Theirs"
na segunda linha, o que significa que eles se tornam o predicado número 1. Chamar esse predicado com↰₁
na primeira linha unificará sua entrada e saída comMine
/Theirs
, com a qual imprimiremosw
.Se chamarmos
↰₁
o arquivo em conflito, acabamos ligando<<<<<<<
. Portanto, chamamos esse predicado com uma string como entrada (usandoċ₂
- coerce to string).<
falhará com uma string como entrada. Em seguida, colocamos uma disjunção∨"Conflict"w
no predicado principal, que afirma que, se o predicado 1 falhar, imprimiremosConflict
.↰₁
com uma string como input não falhará nas linhas"Mine"
ou"Theirs"
porque são strings.fonte
PHP,
7465 bytesNota: usa codificação IBM-850
Armazene em um arquivo e execute assim:
Explicação
O XOR binário resulta em um dos seguintes 3:
Tweaks
fonte
=======
operador, e isso será um pouco mais fácil.Pip , 61 bytes
Experimente online!
Tudo entre
""
é uma corda. Dividimos a string grande em novas linhas ("..."^n
) e pegamos o sétimo elemento com indexação cíclica ((___7)
). Para a versão em conflito, existem sete linhas, portanto o índice 7 é equivalente ao índice 0 e obtemosConflict
. Para as versões resolvidas, existem três linhas; portanto, o índice 7 é equivalente ao índice 1 e obtemosMine
/Theirs
. Em seguida, concatene"Hello "
para a frente e imprima automaticamente.fonte
Lote,
133129 bytesExplicação: A
goto
instrução vai para o próximo rótulo que pode encontrar. No caso do conflito, isso acaba pulando os marcadores de conflito es
obtendo seu valor final. No caso de resolver com o Mine, os gotos não têm efeito, mas o últimoset
não existe mais, então o resultado é Mine. No caso de resolver com eles, o inicialgoto
ignora o restante, deset
modo que o resultado é seu valor inicial. Editar: salvou 4 bytes graças ao @DLosc.fonte
:c
e fazer@goto t
?Python 2,
8887 bytesImprime a sexta ou (agora) primeira linha, conforme apropriado.
fonte
print
instrução Python 2 sempre usa um espaço como separador (e uma nova linha à direita; aprint
função do Python 3 permite escolher o separador e o terminador)..COM opcode, 77 bytes
Se um espaço depois do
<<<<<<<
permitido, 75 bytesfonte
Retina , 57 bytes
Experimente online!
Experimente a versão "Mine"
Experimente a versão "Deles"
Explicação do programa Conflito
Como geralmente ocorre com o Retina, este programa contém muitos estágios de substituição.
Substitua a entrada vazia / inexistente por
Hello
.Substitua o final da cadeia de trabalho por
<<<<<<<
Substitua
Mine
por=======
. ComoMine
não aparece em nenhum lugar da string de trabalho, isso não faz nada.Substitua
Theirs
por>>>>>>>
. O mesmo negócio que comMine
;Theirs
não aparece, então a substituição não faz nada.Substitua uma sequência de
<
porConflict
. Nós adicionamos<<<<<<<
o final da string na primeira substituição, para que a string de trabalho se torneHello Conflict
, o que é implicitamente produzido no final do programa.Explicação dos meus / seus programas
Quando o conflito for resolvido, o código ficará assim:
O mesmo de antes, começando com a sequência
Hello
.Agora, em vez de anexar
<<<<<<<
aHello
, anexamosMine
.Em seguida, substituímos uma sequência de
<
porConflict
. Mas não há<
s na string, então nada acontece.A sequência de trabalho,,
Hello Mine
é implicitamente emitida. O programa "Deles" funciona da mesma maneira.fonte
ÓLEO ,
888077 bytes4
2
está imprimindo a linha 2 (Hello
),10
testa se a linha 0 (4
) é idêntica à linha 16 (a que contém a4
quando o conflito existe) e salta para a linha 16 ou 8, dependendo do resultado. Se existir,4
4
imprime a linha 4 (Conflict
). Se não,4
11
imprime umMine
ouTheirs
, dependendo do que foi mesclado, e3
sai.fonte
Java 145 bytes
O Java não possui seqüências de linhas múltiplas, portanto, foram necessários alguns truques para comentários
fonte
*
na terceira linha? Eu acho que*/s+="Mine";/*
isso funcionaria.Bash, 76 bytes
Golfe
Como funciona
Usa aqui doc , para alimentar o texto fonte para sed .
O Sed irá anexar a primeira linha lida com "Hello", substituir a
<<<<<<<
string por "Conflict" e sair (q
).Experimente Online!
fonte
ES6 (Javascript),
83, 82 bytesGolfe
Tente
fonte
Java 8, 108 bytes
Este é um lambda que aceita entrada vazia e não retorna nada.
Experimente Online
Abordagem inspirada na solução Java da masterX244 .
fonte
C (GCC), 110 bytes
Envio de função.
Abordagem inspirada na solução Java da masterX244 .
TIOs
fonte
Perl 5 , 68 bytes
Atualizado depois de perceber que a versão com 6 de cada delimitador funciona conforme o esperado, mas com os 7 delimitadores reais, não funciona ... Opa ...
Experimente o conflito online!
Experimente o meu online!
Experimente online!
fonte