Cuando se utiliza una herramienta como git para fusionar dos archivos, se puede detectar un conflicto y agregarlo al resultado de la fusión.
Una fusión de estos dos archivos:
mi archivo:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
su archivo:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
daría como resultado:
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
Ver líneas de marcador de conflicto
Resolver este conflicto con Mine crearía este archivo:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
Resolver este conflicto con Theirs crearía este archivo:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
El objetivo de este desafío es escribir un archivo fuente que contenga un conflicto y que aún se compile / ejecute.
Escriba un archivo fuente que:
- contiene una válida, de dos vías, el conflicto marcado por los marcadores adecuados conflicto parche (
<<<<<<<
,=======
,>>>>>>>
) Mina y la de ellos descriptores de archivos después de que los marcadores son opcionales. - compila / ejecuta sin errores / advertencias si los marcadores siguen siendo parte de la fuente
- compila / ejecuta sin errores / advertencias si el conflicto se resuelve usando el mío
- compila / ejecuta sin errores / advertencias si el conflicto se resuelve usando los suyos
- genera "Hello Conflict" al compilar / ejecutar el archivo en conflicto
- genera "Hello Mine" al compilar / ejecutar la versión minera
- genera "Hello Theirs" al compilar / ejecutar la versión de ellos
Los marcadores deben ubicarse en el archivo fuente de manera que kdiff3 reconozca el conflicto.
Las lagunas estándar están prohibidas.
El código más corto gana.
La puntuación es la longitud de la fuente en conflicto
Respuestas:
Jalea , 51 bytes
Pruébalo en línea!
Explicación
Los marcadores de conflicto aquí se colocan de modo que una de tres líneas se convierta en la segunda línea del programa después de que se resuelva el conflicto; Esta será una constante, llamada
2£
. La segunda línea del programa original codifica la cadena" Conflict"
(en la notación comprimida de Jelly); la tercera línea codifica la cadena" Mine"
(esta se convertirá en la segunda línea si el conflicto se resuelve como mío); la sexta línea codifica la cadena" Theirs"
(y se convertirá en la segunda línea si el conflicto se resuelve como suyo).El programa principal siempre es la última línea, sin importar cuántas líneas se eliminen antes. Toma la codificación comprimida de
"Hello"
, y le agrega (;
) el valor de2£
, produciendo así la salida deseada.fuente
JavaScript (ES6),
102949390 bytesSi el conflicto se ha resuelto, entonces no hay una sexta línea, por lo que imprime la ahora primera línea. Editar: Guardado 3 bytes gracias a @nderscore.
fuente
console.log('Hello',(a=`...`)[6]||a[1])
Brachylog ,
686766 bytesPruébalo en línea!
Prueba la
"Hello Mine"
versión aquíPrueba la
"Hello Theirs"
versión aquíExplicación
Afortunadamente,
<<<<<<<
,=======
y>>>>>>>
son todas las definiciones de reglas válidas en Brachylog. Significan respectivamente:Si eliminamos conflictos, terminamos con
"Mine"
o"Theirs"
en la segunda línea, lo que significa que se convierten en el predicado número 1. Llamar a ese predicado con↰₁
en la primera línea unificará su entrada y salida conMine
/Theirs
, que luego imprimiremos conw
.Si llamamos
↰₁
al archivo en conflicto, terminamos llamando<<<<<<<
. Por lo tanto, llamamos a ese predicado con una cadena como entrada (usandoċ₂
- coerce a cadena).<
fallará con una cadena como entrada. Luego colocamos una disyunción∨"Conflict"w
en el predicado principal que establece que si el predicado 1 falla, imprimimos en suConflict
lugar.↰₁
con una cadena como entrada no fallará para las líneas"Mine"
o"Theirs"
porque son cadenas.fuente
PHP,
7465 bytesNota: utiliza la codificación IBM-850
Almacenar en un archivo y ejecutar así:
Explicación
El XOR binario da como resultado cualquiera de los siguientes 3:
Ajustes
fuente
=======
operador, y esto será un poco más fácil.Pip , 61 bytes
Pruébalo en línea!
Todo entre
""
es una cadena. Dividimos la cadena grande en las nuevas líneas ("..."^n
) y tomamos el séptimo elemento con indexación cíclica ((___7)
). Para la versión en conflicto, hay siete líneas, por lo que el índice 7 es equivalente al índice 0 y obtenemosConflict
. Para las versiones resueltas, hay tres líneas, por lo que el índice 7 es equivalente al índice 1 y obtenemosMine
/Theirs
. Luego se concatena"Hello "
al frente y se imprime automáticamente.fuente
Lote,
133129 bytesExplicación: La
goto
declaración va a la siguiente etiqueta que puede encontrar. En el caso del conflicto, esto simplemente termina omitiendo los marcadores de conflicto ys
obtiene su valor final. En el caso de resolver con Mine, los gotos no tienen efecto, pero el últimoset
ya no existe, por lo que el resultado es Mine. En el caso de resolver con Theirs, el iniciogoto
omite el resto,set
por lo que el resultado es su valor inicial. Editar: Guardado 4 bytes gracias a @DLosc.fuente
:c
y hacer en su@goto t
lugar?Python 2,
8887 bytesImprime la sexta o (ahora) primera línea según corresponda.
fuente
print
siempre usa un espacio como separador (y una nueva línea final; laprint
función de Python 3 le permite elegir el separador y el terminador)..COM código de operación, 77 bytes
Si un espacio después de
<<<<<<<
permitido, 75 bytesfuente
Retina , 57 bytes
Pruébalo en línea!
Prueba la versión "Mine"
Prueba la versión "Theirs"
Programa de explicación de conflictos
Como suele ser el caso con Retina, este programa contiene muchas etapas de reemplazo.
Reemplace la entrada vacía / inexistente con
Hello
.Reemplace el final de la cadena de trabajo con
<<<<<<<
Reemplazar
Mine
con=======
. ComoMine
no aparece en ninguna parte de la cadena de trabajo, esto no hace nada.Reemplazar
Theirs
con>>>>>>>
. El mismo trato que conMine
;Theirs
no aparece, por lo que el reemplazo no hace nada.Reemplace una secuencia de
<
conConflict
. Añadimos<<<<<<<
al final de la cadena en el primer reemplazo, por lo que la cadena de trabajo se convierte enHello Conflict
, que se emite implícitamente al final del programa.Explicación de los programas de Mine / Theirs
Cuando se resuelva el conflicto, el código se verá así:
Igual que antes, comenzando con la cadena
Hello
.Ahora, en lugar de agregar
<<<<<<<
aHello
, agregamosMine
.A continuación, reemplazamos una secuencia de
<
conConflict
. Pero no hay<
s en la cadena, por lo que no pasa nada.La cadena de trabajo,,
Hello Mine
se emite implícitamente. El programa "suyo" funciona de la misma manera.fuente
ACEITE ,
888077 bytes4
2
está imprimiendo la línea 2 (Hello
),10
prueba si la línea 0 (4
) es idéntica a la línea 16 (la que contiene un4
cuando existe el conflicto) y salta a la línea 16 o la línea 8 según el resultado. Si existiera,4
4
imprime la línea 4 (Conflict
). Si no fuera así4
11
imprime cualquieraMine
oTheirs
, según lo que se fusionó, y3
sale.fuente
Java 145 Bytes
Java no tiene cadenas multilínea, por lo que se necesita algún truco de comentarios
fuente
*
en la tercera línea? Creo que eso solo*/s+="Mine";/*
funcionaría.Bash, 76 bytes
Golfed
Cómo funciona
Utiliza aquí doc , para alimentar el texto fuente a sed .
Sed antepondrá la primera línea que lee con "Hola", reemplazará la
<<<<<<<
cadena por "Conflicto" y luego saldrá (q
).¡Pruébelo en línea!
fuente
ES6 (Javascript),
8382 bytesGolfed
Intentalo
fuente
Java 8, 108 bytes
Esta es una lambda que acepta entradas vacías y no devuelve nada.
Pruébalo en línea
Enfoque inspirado en la solución Java de masterX244 .
fuente
C (GCC), 110 bytes
Presentación de funciones.
Enfoque inspirado en la solución Java de masterX244 .
TIO
fuente
Perl 5 , 68 bytes
Actualizado después de darse cuenta de que la versión con 6 de cada delimitador funciona según lo previsto, pero con los 7 delimitadores reales, no ... Oops ...
¡Prueba el conflicto en línea!
¡Prueba el mío en línea!
¡Pruébelo en línea!
fuente