Sha256: 76e0fe3fc28796db8fd5187a04ff6b8a6080f7e5785e79e2c9bdb9226eb64eeb

Contents?: true

Size: 842 Bytes

Versions: 73

Compression:

Stored size: 842 Bytes

Contents

package NucleotideCount;

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

73 entries across 73 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.179 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.178 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.177 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.176 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.175 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.174 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.173 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.172 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.171 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.170 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.169 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.167 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.166 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.165 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.164 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.163 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.162 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.161 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm
trackler-2.2.1.160 tracks/perl5/exercises/nucleotide-count/.meta/solutions/NucleotideCount.pm