Julia'yı öğreniyorum, fakat R dışında nispeten az programlama deneyimi var. Bu sorunu doğrudan rosalind.info'dan alıyorum ve biraz daha fazla ayrıntı istiyorsanız here'u bulabilirsiniz.Bir sıradaki çoklu 'motiflerin' ilk endeksini nasıl buluyorsunuz?
İki dizeyi verdim: bir motif ve dizinin dizinin bir alt dizesi olduğu bir sıra ve alt dizenin başlangıç konumunun dizinini bulmakla görevlendirildim, ancak birçok kez sıra. Örneğin
:
Sıra: "GATATATGCATATACTT"
Motif: "ATAT"
ATAT endeksinde seferde bir kez bir kez indeksi 4'te, endeks 2 başlayarak, üç kez bulundu ve edilir 10. Bu, 1 tabanlı endeksleme varsayılmaktadır. Yani son çıkış olacaktır:
İşte ben bugüne kadar ne var:
f = open("motifs.txt")
stream = readlines(f)
sequence = chomp(stream[1])
motif = chomp(stream[2])
println("Sequence: $sequence")
println("Motif: $motif")
result = searchindex(sequence, motif)
println("$result")
close(f)
Benim asıl sorun searchindexall seçenek olmadığını gibi görünüyor. Mevcut betik bana, motifin karşılaştığı ilk zamanın ilk indeksini verir (index 2), çok fazla başarı göstermeyen döngüler için çeşitli denemeler yaptım, böylece birinin bana biraz bilgi vermesini umuyordum bu konuda.
Bu harika çalıştı. Bu nedenle, arama indeksini farklı dizinlerde başlatırsınız, böylece her zaman indeks 1'e geri dönmez. Bu mantıklı. Teşekkür ederim! – System
@System, evet. Tam olarak ne iş yapıyor. Sevindim, senin için çalıştı. – niczky12
İşlev, "searchindex" in 3 argüman formunu kullanarak daha basit ve hızlı yapılabilir, böylece dilimleme gerekmez. Yani 'searchindex (dizi, motif, start_at)' Ayrıca, tipik bir Julia deyimine sahip olmak result sonuç == 0 && break'. While döngüsü sadece “true” iken ve döngüden önce “sonuç” ayarlamaya gerek yoktur. Artış, "start_at + = sonuç + 1" olabilir. Stilistik bir sorun, normalde sadece 'found_indices' son satırı veya 'return found_indices 'i döndürür, ekstra parenler gerekli değildir. Yine de, bu değerli bir cevaptır. –