Votre tâche consiste à accepter en entrée deux séquences de gènes et une séquence de «points de croisement» et à renvoyer la séquence de gènes résultant des croisements indiqués.
Ce que je veux dire par là, c'est que vous avez les séquences [A, A, A, A, A, A, A]
et [Z, Z, Z, Z, Z, Z, Z]
, et traversez les points de 2
et 5
. La séquence résultante serait[A, A, Z, Z, Z, A, A]
, car:
Traverser ici: VV Indices: 0 1 2 3 4 5 6 Gènes 1: AAAAAAA Gènes 2: ZZZZZZZ Résultat: AAZZZAA ^ ^
Notez que pendant que j'utilise des lettres ici pour plus de clarté, le défi réel utilise des nombres pour les gènes.
Le résultat est la première séquence jusqu'à ce qu'un point de croisement soit rencontré, puis le résultat prend de la deuxième séquence jusqu'à ce qu'un autre point de croisement soit rencontré, puis le résultat prend de la première séquence jusqu'à ce qu'un point de croisement soit rencontré ...
Contribution:
L'entrée peut prendre toute forme raisonnable. Les deux séquences peuvent être une paire, avec les points comme deuxième argument, les trois peuvent être des arguments séparés, un seul triplet de
(genes 1, genes 2, cross-points)
, une carte avec des clés nommées ...Les points de croisement seront toujours en ordre et seront toujours dans les limites. Il n'y aura pas de points en double, mais la liste des points de croisement peut être vide.
Les séquences de gènes auront toujours la même longueur et ne seront pas vides.
Les indices peuvent être basés sur 0 ou 1.
Les gènes seront toujours des nombres compris entre 0 et 255.
Peu importe quel argument est "gènes 1" ou "gènes 2". En cas d'absence de points de croisement, le résultat peut être soit entièrement "gènes 1" soit "gènes 2".
Production
La sortie peut être toute forme raisonnable qui n'est pas ambiguë. Il peut s'agir d'un tableau / liste de nombres, d'un tableau de nombres de chaînes, d'une chaîne de nombres délimitée (certains caractères non numériques doivent séparer les nombres) ...
Il peut être retourné ou imprimé à la sortie standard.
Les entrées peuvent être effectuées par des programmes ou des fonctions complets.
Cas de test (genes 1, genes 2, cross points) => result
:
[0], [1], [0] => [1]
[0, 1], [9, 8], [1] => [0, 8]
[0, 2, 4, 6, 8, 0], [1, 3, 5, 7, 9, 1], [1, 3, 5] => [0, 3, 5, 6, 8, 1]
[1, 2, 3, 4], [5, 6, 7, 8], [] => [1, 2, 3, 4]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 2, 3, 6, 8] => [1, 1, 0, 1, 1, 1, 0, 0, 1, 1]
C'est Code Golf.
la source
Réponses:
Gelée ,
1210 octetsEssayez-le en ligne!
Argument 1: seq1, seq2
Argument 2: points de croisement (indexés 0)
la source
;⁹ZL‘¤Ṭ+\ịŒDḢ
serait nécessaire :(Haskell,
58535145 octetsLes deux séquences de gènes sont considérées comme une paire de listes et les points de croisement comme un deuxième argument.
Essayez-le en ligne!
la source
JavaScript (ES6),
4745 octetsEnregistré 2 octets grâce à @ETHproductions
Prend l'entrée sous la forme d'un triplet [a, b, c] où a et b sont les séquences de gènes et c est la liste des points de croisement indexés sur 0.
Essayez-le en ligne!
Commenté
la source
x[(j+=x[2][j]==i)%2][i++]
pour économiser quelques octets.APL (Dyalog 16.0) , 26 octets
Essayez-le en ligne!
L'entrée est a , c , puis b . c est
1
indexé.Comment?
a←⎕
- obtenez un .0⍴⍨≢
- créer un tableau de0
s à sa longueur.1@⎕⊢
- prendre c et changer le0
s en1
s sur les indices.d←
- attribuer à d .⊂≠\d
- développez d avec xor pour créer la séquence de sélection (0
pour a ,1
pour b ), et fermez.(~,⊢)
- prendre d et son inverse.a⎕×
- et multiplier respectivement entré est b et a .+/
- additionner chaque paire d'éléments, donnant les a s sur0
s et b s sur1
s.la source
⊢0⍴⍨≢
->≠⍨
( astuce ),
vecteur avant à 1 élément dans l'entréePython 2 , 43 octets
Essayez-le en ligne!
Sorties en modifiant l'argument
a
. Au lieu de cela en tant que programme:50 octets
Essayez-le en ligne!
la source
Perl 5
-a
,4540 octetsDonnez une entrée dans l'ordre "contrôle", "deuxième séquence", "première séquence" comme lignes distinctes sur STDIN
Essayez-le en ligne!
la source
J , 24 octets
Essayez-le en ligne!
Je ne compte pas le
f=:
caractères, car cela fonctionne aussi bien qu'une fonction anonyme (comme démontré dans un exemple TIO)Remarque: Cela ne fonctionne pas pour une liste vide de points de croisement!
Un oneliner explicite,
x
est l'argument de gauche - la liste des points de croisement,y
est l'argument de droite, un tableau à deux lignes des séquences.Explication:
4 :' ... '
- un verbe dyadique(...)}y
- Chaque atome d'opérande (...) sélectionne un atome parmi les positions correspondantes des éléments de y#{.y
- prend la première séquence et trouve sa longueurI.
crée une liste de zéros avec la longueur de l'argument1 x}
change les éléments de l'argument rigth (une liste de zéros) à 1 aux indices indiqués parx
(la liste des cors sur les points)+/\
exécution de sommes d'une liste2|
modulo 2Assemblé:
la source
R ,
8479 octetsEssayez-le en ligne!
Prend l'entrée comme une matrice de 2 colonnes et a
vector
.la source
Python 3,
6160 octetsEssayez-le en ligne!
-1 octet de Jonathan Frech
Explication:
la source
a[d:c[0]]+f(b,a,c[1:],c[0])
ce ne sera jamais faux.Gelée , 13 octets
Un lien dyadique acceptant les points de croisement (indexés 1) à gauche et une liste des deux séquences à droite qui renvoie la liste résultante.
Essayez-le en ligne!
Comment?
la source
Ḃ
: Quelle chose inutile pour l'indexation dans une liste à 2 éléments.ż/
: Quelle complication inutile, c'est quand même cruellement aplati par un gros camion!Fusain , 19 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend les entrées sous la forme d'une paire de séquences de gènes de chaîne et d'une liste indexée de 0 de points de croisement. Explication:
Alternativement,
⭆
pourrait être substitué pourE
imprimer le résultat sous forme de chaîne. Essayez-le en ligne!la source
SWI-Prolog, 78 octets
Utilisation: Appelez "Genes1 / Genes2 / CrossoverPoints / X" où "Genes1", "Genes2", "CrossoverPoints" sont des listes entre crochets et séparées par des virgules.
la source
C (clang) , 79 octets
Essayez-le en ligne!
Entrées:
g[0]
est la séquence de gènes 1,g[1]
est la séquence de gènes 2,c
est des points de croisement.l
est la longueur deg[0]
etg[1]
m
est la longueur dec
Toutes les entrées du tableau sont des tableaux d'entiers avec un index basé sur 0.
Les sorties:
sortie est stockée dans
g[0]
la macro a () dans le pied de page fait une jolie impression des cas de test et du résultat
la source