Lorsque vous utilisez un outil tel que git pour fusionner deux fichiers, un conflit peut être détecté et ajouté au résultat de la fusion.
Une fusion de ces deux fichiers:
mon fichier:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
leur dossier:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
entraînerait:
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
Voir Lignes de marqueur de conflit
La résolution de ce conflit avec le mien créerait ce fichier:
Common line of code 1
Common line of code 2
my lines
Common line of code 3
Common line of code 4
La résolution de ce conflit avec la leur créerait ce fichier:
Common line of code 1
Common line of code 2
their lines
Common line of code 3
Common line of code 4
L'objectif de ce défi est d'écrire un fichier source qui contient un conflit et qui se compile / s'exécute toujours.
Écrivez un fichier source qui:
- contient une valide, dans les deux sens, conflit marqué par les marqueurs appropriés de conflit de patch (
<<<<<<<
,=======
,>>>>>>>
) de la mine et leurs descripteurs de fichiers après que les marqueurs sont facultatifs. - compile / s'exécute sans erreurs / avertissements si les marqueurs restent une partie de la source
- compile / exécute sans erreurs / avertissements si le conflit est résolu en utilisant le mien
- compile / s'exécute sans erreurs / avertissements si le conflit est résolu en utilisant les leurs
- affiche "Hello Conflict" lors de la compilation / exécution du fichier en conflit
- affiche "Hello Mine" lors de la compilation / exécution de la version mine
- affiche "Hello Theirs" lors de la compilation / exécution de la leur
Les marqueurs doivent être situés dans le fichier source de manière à ce que kdiff3 reconnaisse le conflit.
Les failles standard sont interdites.
Le code le plus court gagne.
Le score est la longueur de la source en conflit
Réponses:
Gelée , 51 octets
Essayez-le en ligne!
Explication
Les marqueurs de conflit ici sont positionnés de sorte que l'une des trois lignes devienne la deuxième ligne du programme après la résolution du conflit; ce sera une constante, nommée
2£
. La deuxième ligne du programme d'origine code la chaîne" Conflict"
(dans la notation compressée de Jelly); la troisième ligne encode la chaîne" Mine"
(cela deviendra la deuxième ligne si le conflit est résolu comme le mien); la sixième ligne code la chaîne" Theirs"
(et deviendra la deuxième ligne si le conflit est résolu comme le leur).Le programme principal est toujours la dernière ligne, quel que soit le nombre de lignes avant sa suppression. Il prend l'encodage compressé de
"Hello"
, et y ajoute (;
) la valeur de2£
, produisant ainsi la sortie souhaitée.la source
JavaScript (ES6),
102949390 octetsSi le conflit a été résolu, il n'y a pas de sixième ligne, il imprime donc la première ligne à la place. Edit: enregistré 3 octets grâce à @nderscore.
la source
console.log('Hello',(a=`...`)[6]||a[1])
Brachylog ,
686766 octetsEssayez-le en ligne!
Essayez la
"Hello Mine"
version iciEssayez la
"Hello Theirs"
version iciExplication
Heureusement,
<<<<<<<
,=======
et>>>>>>>
sont toutes les définitions de règles valables dans Brachylog. Ils signifient respectivement:Si nous supprimons les conflits, nous nous retrouvons avec
"Mine"
ou"Theirs"
sur la deuxième ligne, ce qui signifie qu'ils deviennent le prédicat numéro 1. L'appel de ce prédicat avec↰₁
sur la première ligne unifiera son entrée et sa sortie avecMine
/Theirs
, avec lequel nous imprimerons ensuitew
.Si nous appelons
↰₁
le fichier en conflit, nous finissons par appeler<<<<<<<
. Nous appelons donc ce prédicat avec une chaîne en entrée (en utilisantċ₂
- coerce pour chaîne).<
échouera avec une chaîne en entrée. Nous mettons ensuite une disjonction∨"Conflict"w
dans le prédicat principal qui indique que si le prédicat 1 échoue, nous imprimons à laConflict
place.↰₁
avec une chaîne en entrée n'échouera pas pour les lignes"Mine"
ou"Theirs"
car ce sont des chaînes.la source
PHP,
7465 octetsRemarque: utilise le codage IBM-850
Stockez dans un fichier et exécutez comme ceci:
Explication
Le XOR binaire se traduit par l'un des 3 suivants:
Tweaks
la source
=======
opérateur, puis ce sera un peu plus facile.Pip , 61 octets
Essayez-le en ligne!
Tout entre les deux
""
est une chaîne. Nous séparons la grande chaîne sur newlines ("..."^n
) et prenons le 7ème élément avec l'indexation cyclique ((___7)
). Pour la version en conflit, il y a sept lignes, donc l'index 7 est équivalent à l'index 0 et nous obtenonsConflict
. Pour les versions résolues, il y a trois lignes, donc l'index 7 est équivalent à l'index 1 et nous obtenonsMine
/Theirs
. Concaténer ensuite"Hello "
au recto et imprimer automatiquement.la source
Lot,
133129 octetsExplication: L'
goto
instruction passe à l'étiquette suivante qu'elle peut trouver. Dans le cas du conflit, cela finit simplement par sauter les marqueurs de conflit ets
obtient sa valeur finale. Dans le cas d'une résolution avec Mine, les gotos n'ont aucun effet, mais le dernierset
n'existe plus, donc le résultat est Mine. Dans le cas d'une résolution avec le leur, l'initialegoto
contourne le reste, deset
sorte que le résultat est sa valeur initiale. Edit: 4 octets enregistrés grâce à @DLosc.la source
:c
et faire à la@goto t
place?Python 2,
8887 octetsImprime la sixième ou (maintenant) première ligne selon le cas.
la source
print
utilise toujours un espace comme séparateur (et une nouvelle ligne de fin; laprint
fonction de Python 3 vous permet de choisir le séparateur et le terminateur).Opcode .COM, 77 octets
Si un espace après
<<<<<<<
autorisé, 75 octetsla source
Rétine , 57 octets
Essayez-le en ligne!
Essayez la version "Mine"
Essayez la version "Theirs"
Explication du programme Conflit
Comme c'est souvent le cas avec Retina, ce programme contient de nombreuses étapes de remplacement.
Remplacez l'entrée vide / inexistante par
Hello
.Remplacez l'extrémité de la chaîne de travail par
<<<<<<<
Remplacez
Mine
par=======
. PuisqueMine
n'apparaît nulle part dans la chaîne de travail, cela ne fait rien.Remplacer
Theirs
par>>>>>>>
. Même affaire qu'avecMine
;Theirs
n'apparaît pas, donc le remplacement ne fait rien.Remplacer une séquence de
<
parConflict
. Nous avons ajouté<<<<<<<
à la fin de la chaîne lors du premier remplacement, ainsi la chaîne de travail devientHello Conflict
, qui est implicitement sortie à la fin du programme.Explication des programmes Mine / Theirs
Une fois le conflit résolu, le code ressemblera à ceci:
Comme avant, en commençant par la chaîne
Hello
.Maintenant, au lieu d'ajouter
<<<<<<<
àHello
, nous ajoutonsMine
.Ensuite, nous remplaçons une séquence de
<
avecConflict
. Mais il n'y a pas de<
s dans la chaîne, donc rien ne se passe.La chaîne de travail,,
Hello Mine
est implicitement sortie. Le programme "Theirs" fonctionne de la même manière.la source
HUILE ,
888077 octets4
2
imprime la ligne 2 (Hello
),10
teste si la ligne 0 (4
) est identique à la ligne 16 (celle qui contient un4
lorsque le conflit existe) et passe à la ligne 16 ou à la ligne 8 selon le résultat. S'il existait,4
4
imprime la ligne 4 (Conflict
). Si ce n'est pas le cas,4
11
imprime soitMine
ouTheirs
, selon ce qui a été fusionné, puis3
quitte.la source
Java 145 octets
Java n'a pas de chaînes multilignes, donc une supercherie de commentaires était nécessaire
la source
*
sur la troisième ligne? Je pense que*/s+="Mine";/*
cela fonctionnerait.Bash, 76 octets
Golfé
Comment ça marche
Utilise ici doc , pour alimenter le texte source en sed .
Sed ajoutera la première ligne lue avec "Hello", remplacera la
<<<<<<<
chaîne par "Conflict" puis quittera (q
).Essayez-le en ligne!
la source
ES6 (Javascript),
83, 82 octetsGolfé
Essayez-le
la source
Java 8, 108 octets
Il s'agit d'un lambda acceptant une entrée vide et ne retournant rien.
Essayez-le en ligne
Approche inspirée de la solution Java de masterX244 .
la source
C (GCC), 110 octets
Soumission de fonction.
Approche inspirée de la solution Java de masterX244 .
TIOs
la source
Perl 5 , 68 octets
Mis à jour après avoir réalisé que la version avec 6 de chaque délimiteur fonctionne comme prévu, mais avec les 7 délimiteurs réels, cela ne fonctionne pas ... Oups ...
Essayez le conflit en ligne!
Essayez le mien en ligne!
Essayez itheirs en ligne!
la source