Tugas Anda adalah untuk menerima sebagai input dua urutan gen, dan urutan "cross over points", dan mengembalikan urutan gen yang dihasilkan dari cross over yang ditunjukkan.
Yang saya maksud dengan ini adalah, katakan Anda memiliki urutan [A, A, A, A, A, A, A]
dan [Z, Z, Z, Z, Z, Z, Z]
, dan lintas poin dari 2
dan 5
. Urutan yang dihasilkan adalah [A, A, Z, Z, Z, A, A]
, karena:
Silang Di Sini: VV Indeks: 0 1 2 3 4 5 6 Gen 1: AAAAAAA Gen 2: ZZZZZZZ Hasil: AAZZZAA ^ ^
Perhatikan bahwa saat saya menggunakan huruf di sini untuk kejelasan, tantangan sebenarnya menggunakan angka untuk gen.
Hasilnya adalah urutan pertama sampai titik lintas ditemui, maka hasilnya mengambil dari urutan kedua sampai titik lintas lainnya ditemui, kemudian hasilnya mengambil dari urutan pertama sampai titik persimpangan berakhir ...
Memasukkan:
Input dapat berupa bentuk apa pun yang masuk akal. Dua urutan bisa menjadi pasangan, dengan poin sebagai argumen kedua, ketiganya bisa menjadi argumen terpisah, triplet tunggal
(genes 1, genes 2, cross-points)
, peta dengan tombol bernama ...Poin silang akan selalu berurutan, dan akan selalu berada di dalam batas. Tidak akan ada duplikat poin, tetapi daftar lintas poin mungkin kosong.
Urutan gen akan selalu sama panjangnya, dan akan kosong.
Indeks dapat berbasis 0 atau 1.
Gen akan selalu menjadi angka di kisaran 0-255.
Tidak masalah argumen mana yang merupakan "gen 1" atau "gen 2". Dalam hal tidak ada titik lintas, hasilnya dapat berupa "gen 1" atau "gen 2".
Keluaran
Output dapat berupa bentuk yang wajar yang tidak ambigu. Ini bisa berupa array / daftar angka, array nomor string, string angka yang dibatasi (beberapa karakter non-numerik harus memisahkan angka) ...
Itu dapat dikembalikan atau dicetak ke std-out.
Entri dapat dengan program atau fungsi lengkap.
Kasus uji (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]
Ini Golf Code.
sumber
Jawaban:
Jelly ,
1210 byteCobalah online!
Argumen 1: seq1, seq2
Argumen 2: titik silang (0-diindeks)
sumber
;⁹ZL‘¤Ṭ+\ịŒDḢ
ini :(Haskell,
58535145 byteDua sekuens gen diambil sebagai pasangan daftar dan titik silang sebagai argumen kedua.
Cobalah online!
sumber
JavaScript (ES6),
4745 byteDisimpan 2 byte berkat produk @ETH
Mengambil input sebagai triplet [a, b, c] di mana a dan b adalah sekuens gen dan c adalah daftar titik-lintas terindeks 0.
Cobalah online!
Berkomentar
sumber
x[(j+=x[2][j]==i)%2][i++]
menyimpan beberapa byte.APL (Dyalog 16.0) , 26 byte
Cobalah online!
Input adalah a , c , lalu b . c adalah
1
diindeks.Bagaimana?
a←⎕
- mendapatkan sebuah .0⍴⍨≢
- buat array0
s pada panjangnya.1@⎕⊢
- ambil c dan ubah0
s ke1
s pada indeks.d←
- ditugaskan ke d .⊂≠\d
- perluas d dengan xor untuk membuat urutan pemilihan (0
untuk a ,1
untuk b ), dan melampirkan.(~,⊢)
- ambil d dan kebalikannya.a⎕×
- dan kalikan masing-masing dengan yang dimasukkan b dan a .+/
- jumlah setiap pasangan elemen, menghasilkan a s pada0
s dan b s pada1
s.sumber
⊢0⍴⍨≢
->≠⍨
( tip ),
vektor 1-elemen sebelum di inputPython 2 , 43 byte
Cobalah online!
Keluaran dengan memodifikasi argumen
a
. Alih-alih sebagai program:50 byte
Cobalah online!
sumber
Perl 5
-a
,4540 byteBerikan input dalam urutan "kontrol", "urutan kedua", "urutan pertama" sebagai baris terpisah pada STDIN
Cobalah online!
sumber
J , 24 byte
Cobalah online!
Saya tidak menghitung
f=:
karakter, karena berfungsi sama baiknya dengan fungsi anonim (seperti yang ditunjukkan dalam sampel TIO)Catatan: Itu tidak berfungsi untuk daftar kosong poin lintas!
Oneliner eksplisit,
x
adalah argumen kiri - daftar cross over points,y
adalah argumen kanan, tabel dua baris dari urutan.Penjelasan:
4 :' ... '
- kata kerja diad(...)}y
- Setiap atom operan (...) memilih atom dari posisi yang sesuai dari item y#{.y
- ambil urutan pertama dan temukan panjangnyaI.
membuat daftar nol dengan panjang argumen1 x}
mengubah item dari argumen rigth (daftar nol) menjadi 1 pada indeks yang ditunjukkan olehx
(daftar cors atas poin)+/\
menjalankan jumlah daftar2|
modulo 2Dirakit:
sumber
R ,
8479 byteCobalah online!
Mengambil input sebagai matriks 2 kolom dan a
vector
.sumber
Python 3,
6160 byteCobalah online!
-1 byte dari Jonathan Frech
Penjelasan:
sumber
a[d:c[0]]+f(b,a,c[1:],c[0])
tidak akan pernah salah.Jelly , 13 byte
Sebuah link diad yang menerima titik crossover (1-diindeks) di sebelah kiri dan daftar dari dua urutan di sebelah kanan yang mengembalikan daftar yang dihasilkan.
Cobalah online!
Bagaimana?
sumber
Ḃ
: Sungguh hal yang tidak berguna untuk pengindeksan ke daftar 2-elemen.ż/
: Betapa sia-sianya komplikasi, itu diratakan pergi dengan truk besar!Arang , 19 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Mengambil input sebagai pasangan urutan gen string dan daftar titik persimpangan 0-indeks. Penjelasan:
Atau,
⭆
bisa disubstitusikan untukE
mencetak hasilnya sebagai string. Cobalah online!sumber
SWI-Prolog, 78 byte
Penggunaan: Panggil "Genes1 / Genes2 / CrossoverPoints / X" di mana "Genes1", "Genes2", "CrossoverPoints" adalah daftar yang tertutup tanda kurung, dipisahkan koma.
sumber
C (dentang) , 79 byte
Cobalah online!
Input:
g[0]
adalah urutan gen 1,g[1]
urutan gen 2,c
adalah titik lintas.l
panjangg[0]
dang[1]
m
panjangc
Semua input array adalah array bilangan bulat dengan indeks berbasis 0.
Keluaran:
Keluaran disimpan di
g[0]
macro a () di footer melakukan pencetakan kasus dan hasil pengujian
sumber