- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
@lib_001=('A','G','C','T','A');
@lib_002=('C','T','A','A','G');
@lib_003=('T','G','C','A','T');
$string=<FILE>;
@sequence=split("",$string);
@code=@sequence[-7..-3];
if((join('',@lib_001) eq join('',@code)) or
(join('',@lib_001[0..3]) eq join('',@code[0..3])) or
(join('',@lib_001[1..4]) eq join('',@code[1..4])) or
(join('',@lib_001[0,1,2,4]) eq join('',@code[0,1,2,4])) or
(join('',@lib_001[0,2,3,4]) eq join('',@code[0,2,3,4])) or
(join('',@lib_001[0,1,3,4]) eq join('',@code[0,1,3,4])))
{$tag=join('',@code);
$closest_tag=join('',@lib_001);}
elsif((join('',@lib_002) eq join('',@code)) or
(join('',@lib_002[0..3]) eq join('',@code[0..3])) or
(join('',@lib_002[1..4]) eq join('',@code[1..4])) or
(join('',@lib_002[0,1,2,4]) eq join('',@code[0,1,2,4])) or
(join('',@lib_002[0,2,3,4]) eq join('',@code[0,2,3,4])) or
(join('',@lib_002[0,1,3,4]) eq join('',@code[0,1,3,4])))
{$tag=join('',@code);
$closest_tag=join('',@lib_002);}
elsif((join('',@lib_003) eq join('',@code)) or
(join('',@lib_003[0..3]) eq join('',@code[0..3])) or
(join('',@lib_003[1..4]) eq join('',@code[1..4])) or
(join('',@lib_003[0,1,2,4]) eq join('',@code[0,1,2,4])) or
(join('',@lib_003[0,2,3,4]) eq join('',@code[0,2,3,4])) or
(join('',@lib_003[0,1,3,4]) eq join('',@code[0,1,3,4])))
{$tag=join('',@code);
$closest_tag=join('',@lib_003);}
else
{$tag=join('',@code);
$closest_tag='NONE';}
guest 11.12.2008 02:33 # 0
Юбилейный сотый!
Гратз :-)
guest 11.12.2008 04:23 # 0
спасибо! :)
guest8 22.05.2018 20:40 # −999
guest8 25.09.2019 15:50 # −999
gost 02.11.2020 14:05 # 0
Всё хорошо?
j123123 02.11.2020 19:16 # +2
guest 11.12.2008 16:55 # −3
именно изза таких кусков кода я и ненавижу перл.
guest 12.12.2008 23:17 # 0
и в цикле проверять.
или другой вариант, регуляркой заменить все joinы
guest 15.12.2008 12:43 # 0
if ($mismatches <=1) ....
guest 23.12.2008 22:03 # 0
Биология какая-то? :)
guest 23.12.2008 22:03 # 0
Вот тебе на - имя обрезает :( Что за говнокод?
guest 23.02.2009 15:56 # 0
Не говонокод. Алгоритм не продуман просто.
guest 11.08.2009 12:22 # 0
ненавидеть Perl из-за таких кусков глупо, потому, что писал явно не пёрл-программист, скорее какой-нибудь джавер
guest 19.09.2009 00:50 # +1
# Является ли набор тэгов @$tag_ref ближайшим к последовательности символов @$chars_ref?
sub is_closest {
my ($tag_ref, $chars_ref) = @_;
# возможные варианты комбинаций индексов
my @index_variants = (
[0 .. 5], [0 .. 3], [1 .. 4],
[0, 1, 2, 4], [0, 2, 3, 4], [0, 1, 3, 4],
);
# поиск совпадений. при нахождении совпадения возвращаем 1
for my $indexes ( @index_variants ) {
if ( join(\'\', @$tag_ref[ @$indexes ]) eq join(\'\', @$chars_ref[ @$indexes ]) ) {
return 1;
}
}
}
# Варианты наборов тэгов
my @tags_variants = (
[qw/ A G C T A /],
[qw/ C N A A G /],
[qw/ T G C A T /],
)
# Читаем строку из файла
my $string = <FILE>;
# Выбираем идущие подряд 5 символов за два до конца строки
my @sequence = ( split(\"\",$string) )[-7 .. -3];
# Сюда будет записан результат поиска
my $closest_tag;
FIND_CLOSEST:
for my $tag_ref ( @tags_variants ) {
if is_closest( $tag_ref, \\@test_chars ) {
$closest_tag = join(\'\', @$tag_ref);
last FIND_CLOSEST;
}
}
$closest_tag ||= \'NONE\';
guest 19.09.2009 00:51 # 0
guest 13.07.2012 20:13 # 0
gost 21.08.2014 13:59 # 0