Sha256: 2f3788f16d00be2aeb15f6d241583e34d9581f88863d1fd22fb093fa6d16ceb7

Contents?: true

Size: 834 Bytes

Versions: 323

Compression:

Stored size: 834 Bytes

Contents

package Example;

use strict;
use warnings;

use Carp 'croak';

our @_NUCLEOTIDES = qw(G C A T);
our $_VALIDATION = qr/^[@_NUCLEOTIDES]*$/;

sub new {
  my ($class, $sequence) = @_;

  croak 'Invalid DNA sequence' unless $sequence =~ $_VALIDATION;

  bless { sequence => $sequence }, $class;
}

sub count {
  my ($self, $nucleotide) = @_;

  croak 'Invalid nucleotide' unless $nucleotide =~ $_VALIDATION and length $nucleotide == 1;

  unless (exists $self->{$nucleotide}) {
    # there is probably a cleaner way to do this
    my @matches = ($self->{sequence} =~ /$nucleotide/g);
    $self->{$nucleotide} = @matches;
  }

  $self->{$nucleotide} ||= $self->{sequence} =~ tr/$nucleotide//d;
}

sub nucleotide_counts {
  my ($self) = @_;

  my $counts = {};
  $counts->{$_} = $self->count($_) for @_NUCLEOTIDES;
  return $counts;
}

1;

Version data entries

323 entries across 323 versions & 1 rubygems

Version Path
trackler-2.2.1.105 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.104 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.103 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.102 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.101 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.100 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.99 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.98 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.97 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.96 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.95 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.94 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.93 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.92 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.91 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.90 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.89 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.88 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.87 tracks/perl5/exercises/nucleotide-count/Example.pm
trackler-2.2.1.86 tracks/perl5/exercises/nucleotide-count/Example.pm