Computing GC Content

AUTHOR

gerdr

http://rosalind.info/problems/gc/

Sample input

>Rosalind_6404
    CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
    TCCCACTAATAATTCTGAGG
    >Rosalind_5959
    CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
    ATATCCATTTGTCAGCAGACACGC
    >Rosalind_0808
    CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
    TGGGAACCTGCGGGCAGTAGGTGGAAT

Sample output

Rosalind_0808
    60.919540
use v6;



grammar FASTA {
    token TOP { ^ \n* <DNA-string>+ }
    token DNA-string { '>' (\N+) \n (<[ACGT\n]>+) }
}

my $actions = class {
    method TOP($/) {
        make $<DNA-string>>>.ast
    }

    method DNA-string($/) {
        make [~$0, 100 * +.comb(/<[GC]>/) / +.comb(/<[ACGT]>/)]
        given ~$1
    }
};

my $default-input = q:to/END/;
    >Rosalind_6404
    CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
    TCCCACTAATAATTCTGAGG
    >Rosalind_5959
    CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
    ATATCCATTTGTCAGCAGACACGC
    >Rosalind_0808
    CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
    TGGGAACCTGCGGGCAGTAGGTGGAAT
    END

sub MAIN($input-file = Nil) {
    my $input = $input-file ?? $input-file.IO.slurp !! $default-input;

    FASTA.parse($_, :$actions).ast.sort(*.[1]).[*-1] ~ '%' ==> say()
        given $input;
}

# vim: expandtab shiftwidth=4 ft=perl6

See Also

afrq-grondilu.raku

Counting Disease Carriers

aspc-grondilu.raku

Introduction to Alternative Splicing

cons-grondilu.raku

Consensus and Profile

conv-grondilu.raku

Comparing Spectra with the Spectral Convolution

cstr-grondilu.raku

Creating a Character Table from Genetic Strings

ctbl-grondilu.raku

Creating a Character Table

dbpr-grondilu.raku

Introduction to Protein Databases

dna-gerdr.raku

Counting DNA Nucleotides

dna-grondilu.raku

Counting DNA Nucleotides

eubt-grondilu.raku

Enumerating Unrooted Binary Trees

eval-grondilu.raku

Expected Number of Restriction Sites

fib-grondilu.raku

Rabbits and Recurrence Relations

fibd-grondilu.raku

Mortal Fibonacci Rabbits

grph-grondilu.raku

Overlap Graphs

hamm-grondilu.raku

Counting Point Mutations

iev-grondilu.raku

Calculating Expected Offspring

indc-grondilu.raku

Independent Segregation of Chromosomes

iprb-grondilu.raku

Mendel's First Law

itwv-grondilu.raku

Finding Disjoint Motifs in a Gene

lcsq-grondilu.raku

Finding a Shared Spliced Motif

lia-grondilu.raku

Independent Alleles

lrep-grondilu-p5.raku

mmch-grondilu.raku

Maximum Matchings and RNA Secondary Structures

mprt-grondilu.raku

Finding a Protein Motif

mrna-grondilu.raku

Inferring mRNA from Protein

nwck-grondilu.raku

Distances in Trees

orf-grondilu.raku

Open Reading Frames

pmch-grondilu.raku

Perfect Matchings and RNA Secondary Structures

pper-grondilu.raku

Partial Permutations

prob-grondilu.raku

Introduction to Random Strings

qrt-grondilu.raku

Quartets

README.md

revc-gerdr.raku

Complementing a Strand of DNA

rna-gerdr.raku

Transcribing DNA into RNA

rstr-grondilu.raku

Matching Random Motifs

sexl-grondilu.raku

Sex-Linked Inheritance

sgra-grondilu.raku

Using the Spectrum Graph to Infer Peptides

spec-grondilu.raku

Inferring Protein from Spectrum

sseq-grondilu.raku

Finding a Spliced Motif

subs-grondilu.raku

Finding a Motif in DNA

suff-grondilu.raku

Encoding Suffix Trees

tran-grondilu.raku

Transitions and Transversions

trie-grondilu.raku

Introduction to Pattern Matching

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.

Built with Podlite — the markup and publishing tools behind this site.