Skip to content

Nucleotide Count

Intro

Each of us inherits from our biological parents a set of chemical instructions known as DNA that influence how our bodies are constructed. All known life depends on DNA!

Note: You do not need to understand anything about nucleotides or DNA to complete this exercise.

DNA is a long chain of other chemicals and the most important are the four nucleotides, adenine, cytosine, guanine and thymine. A single DNA chain can contain billions of these four nucleotides and the order in which they occur is important! We call the order of these nucleotides in a bit of DNA a "DNA sequence".

We represent a DNA sequence as an ordered collection of these four nucleotides and a common way to do that is with a string of characters such as "ATTACG" for a DNA sequence of 6 nucleotides. 'A' for adenine, 'C' for cytosine, 'G' for guanine, and 'T' for thymine.

Task

Given a string representing a DNA sequence, count how many of each nucleotide is present. If the string contains characters that aren't A, C, G, or T then it is invalid and you should signal an error.

For example:

1
2
"GATTACA" -> 'A': 3, 'C': 1, 'G': 1, 'T': 2
"INVALID" -> error

The Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
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
39
40
#include "nucleotide_count.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// A C G T

char *count(const char *dna_strand) {
  char *var=malloc(50);
  memset(var, 0, 50);

  int a = 0;
  int c = 0;
  int g = 0;
  int t = 0;
  int i;
  for (i = 0; i < (int)strlen(dna_strand); i++) {
    switch (dna_strand[i]) {
    case 'A':
      a++;
      break;
    case 'C':
      c++;
      break;
    case 'G':
      g++;
      break;
    case 'T':
      t++;
      break;
    default:
      strcpy(var, "");
      return var;
    }
  }

  sprintf(var, "A:%d C:%d G:%d T:%d", a, c, g, t);

  return var;
}
1
2
3
4
5
6
#ifndef _NUCLEOTIDE_COUNT_H
#define _NUCLEOTIDE_COUNT_H

char *count(const char *dna_strand);

#endif

Last update: February 8, 2021

Comments