Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: find the coverage of sequence in a particular range

by choroba (Cardinal)
on May 20, 2016 at 12:47 UTC ( [id://1163626]=note: print w/replies, xml ) Need Help??


in reply to find the coverage of sequence in a particular range

The following script gives the output you want. I'm not sure it does it in the desired way, though, as you haven't described how exactly to get the value.

#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; my ($START, $END, $SIZE) = (1, 1524, 150); my @range; while (my $line = <DATA>) { my ($pos, $from, $to) = split / |\.\./, $line; if ($START == $from && $END == $to) { @range[$pos .. $SIZE + $pos - 1] = (1) x $SIZE; } } say scalar grep $_, @range; __DATA__ 46 1..1524 832 1..1524 1008 1..1524 1407 1..1524 2360 2052..3260 2967 2052..3260 403 1..1524 800 1..1524 2986 2052..3260 3170 2052..3260

UPDATE Moreover, it seems your description ("Making the array 1 if it contains the position+150 else the array is set to 0") should produce a different output, as you only want to count the part of the 1407 that overlaps 1..1524. The following code does that, and show an alternative approach, without using the array - it uses a hash to remember the positions where the state of the element would change.

#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; use Syntax::Construct qw{ // }; my ($START, $END, $SIZE) = (1, 1524, 150); my %borders; while (my $line = <DATA>) { my ($pos, $from, $to) = split / |\.\./, $line; if ($START == $from && $END == $to) { $borders{$pos}++; $borders{ $pos + $SIZE + 1 }--; } } my ($sum, $step) = (0, 0); for my $i ($START .. $END) { $step += $borders{$i} // 0; $sum++ if $step; } say $sum; __DATA__ 46 1..1524 832 1..1524 1008 1..1524 1407 1..1524 2360 2052..3260 2967 2052..3260 403 1..1524 800 1..1524 2986 2052..3260 3170 2052..3260

($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1163626]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (3)
As of 2024-04-25 23:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found