Statistics

Problem Statement for "DNAsynth"

Problem Statement

Dr. Ford of TC Laboratories has discovered a new way of synthesizing DNA sequences from shorter DNA sequences. DNA sequences are composed of nucleotides, A, G, C, and T

He's discovered a miracle catalyst that enables certain sequences of DNA to append to other certain sequences of nucleotides. A catalyzation represented by the notation "<SEQ1>:<SEQ2>" means that any sequence starting in <SEQ2> may be appended to any sequence ending in <SEQ1>.

For example, "GCT:AGG" means that any sequence starting with AGG may be appended to any sequence ending in GCT. Thus, by this rule, AGGCGACG may be appended to CATGCT to produce the sequence CATGCTAGGCGACG.

Also, since a DNA sequence is identical to its reverse, "<SEQ1>:<SEQ2>" implies "<reverse(SEQ2)>:<reverse(SEQ1)>". For example, "GCT:AGG" is the same as "GGA:TCG". Note, however, "GCT:AGG" is NOT the same as "AGG:GCT".

Given a set of possible catalyzations determine the length of the longest DNA sequence which can be constructed, starting with an unlimited supply of the sequences <SEQ1> and <SEQ2> in the list of catalyzations. If sequences of unlimited length are possible, return -1.

Definition

Class:
DNAsynth
Method:
longest
Parameters:
String[]
Returns:
int
Method signature:
int longest(String[] reactivity)
(be sure your method is public)

Notes

  • Assume that Dr. Ford has an unlimited starting supply of all the strands represented by SEQ1 and SEQ2 in each element of reactivity.

Constraints

  • reactivity will contain between 1 and 50 elements, inclusive.
  • each element of reactivity will contain between 5 and 9 characters, inclusive.
  • each element of reactivity will be formatted as (quotes added for clarity) "SEQ1:SEQ2" with SEQ1 and SEQ2 both being of length between 2 and 4 characters, inclusive, and separated by a single colon (':').
  • SEQ1 and SEQ2 may only contain the capital letters 'A', 'G', 'C', and 'T'.

Examples

  1. {"TTA:AGG"}

    Returns: 6

    The longest possible strand is "TTAAGG" (or "GGAATT", which is the same thing backwards--these will no longer be mentioned).

  2. {"TTA:AGG","AGG:CCC"}

    Returns: 15

    The longest possible strand is "TTAAGGCCCGGAATT"

  3. {"ATTA:AGG"}

    Returns: 10

  4. {"CCC:AAA","AAA:CCC"}

    Returns: -1

  5. {"CCC:AAA","TTT:GGG","GGG:CCC"}

    Returns: -1

  6. {"AG:AC","AT:GC","GC:AG"}

    Returns: 8

  7. {"AG:AC","AT:AA","AA:AG"}

    Returns: 10

  8. {"ACG:GCTG","GG:GCC","GCTC:GTAC","CT:AC","ACC:TA","GAGC:CT","AACG:TG","TG:TCC","CG:AGA","GC:TCCG","ACTT:CTG","TAT:TC","TG:GCGC","CTTG:GCT","TTG:AA","GCG:ATG","AA:TC","ATGG:TT","CGCG:CAC","ATGG:TCT","AC:TCTC","TTTC:CT","TAT:TCGG","CAT:GCG","AGT:GA","CT:GGC","AGA:GTG","TT:GGT","AGG:TCC","CTG:AC","AG:CTC","CT:AA","CGA:GCAC","AAGG:AGT","AG:GA","GTAG:GAAG","ACT:ATG","CGCC:TT","TAG:ATC","GAG:ATCG","ACC:CT","TG:GAGT","TCC:CGTC","ATC:TAA","ACAA:TG","TAGG:AT","TC:CTTG","CCTC:TCG","GAAG:AGTC","TCAC:CCC"}

    Returns: -1

  9. {"AT:CCCC","AG:GCGG","CCT:TCCC","ATTC:CCTA","TGA:CGAT","CCGG:GA","GGG:CTCT","TAA:ACCT"}

    Returns: 26

    CCCTTCCAAATCCCCTAAACCTTCCC 2b = CCCT:TCC 7b = TCCA:AAT 0 = AT:CCCC 0b = CCCC:TA 7 = TAA:ACCT 2 = TCC:TCCC

  10. {"TAG:ATC","GCA:CCCT","GAT:AC"}

    Returns: 9

    Notice that since he has "ACG" ("GCA" backwards) in supply, and it begins with "AC", it can be added to "GAT". This gives the sequence "GATACG". Adding "ATC" on the front end gives the longest possible strand, which is "CTAGATACG".

  11. {"CGTC:ATTG","CTG:TTAC","CTGC:AAG","CAAG:TAC","TC:TTAT","AC:GATA","GGC:TTA","TAAA:CTAG","CAT:ATCC","AGG:CTT","GA:TTCT","ACC:TCTG","ATAT:CTAT","CA:GT","TGTA:TTA","TTC:TAG","AGG:TCC","GC:CTT","CG:TGC","TCC:ATCA","CGTA:TA","TA:AG","CTA:GGGA","TC:TGC","TTTC:GATT","ATCG:GTC","CTA:ACG","CG:TGG","TGTT:TTTG","GT:TTAC","TAAA:TGCT","GCTG:CGAA","GCAA:TG","TA:GTAT","GT:CTCG"}

    Returns: -1

  12. {"AC:CCGG","GAC:TA","TTGG:AGTA","GT:TCC","CG:CAA","CA:GT","GGA:TTGT","TG:ACGA","GC:TA","AC:TTGG","CA:AAG","GGGT:TTTA","TTCC:TTAG","AT:CG","TACC:ACG","TTG:TA","TTGA:ACT","TAC:AC","GA:GCAC","TAG:GCCC","TAG:AGCG","CA:CT","GCC:ATCG","TCA:ATC","AATG:ACG","TTC:GTC","GC:TGCC","TA:CTT","CAAG:GTAG","TTC:TCCG","GATC:CCGT","AGAG:GCAC"}

    Returns: -1

  13. {"GCA:ACAG","AACA:TCC","AGC:TGAG","CT:GCC","GC:CGCC","GTGT:GCA","TAC:TGC","GAGT:ATT","TAC:CGG","TTG:AGGC","CCA:TA","CT:GCA","GGGA:AT","ACG:TG","AAT:TATA","TGG:AT","TA:AG","TA:TAG","CCTG:ACCC","TGTA:ACGA","CT:CCTT","TTGA:TCAC","AC:CTG","CGGA:GCA","AT:TGC","AAT:GAT","CGGA:CA","ATTC:AGAA","GT:ATT","CAG:AGG","TTAT:TAC"}

    Returns: -1

  14. {"TGAG:AAC","CT:AAT","TTGT:CG","CGGG:GT","TACC:GGC","AGG:AGC","AAAG:GC","CACA:TG","CCT:GTGC","AAC:AT","GAGT:CTT","CGA:GGC","TCGT:GT","CCAA:GGCA","AC:GTAT","TGCC:AAG","CCAA:GGT","ATCC:CT","CAAA:TG","GAA:GGT","TCA:TGC","TG:TAAA","CG:TG","CTG:CGTA","CCA:ATG","CAG:GCTT","CGT:GTA","ATAG:CTCG","GT:CAT","ACGA:TCA"}

    Returns: -1

  15. {"GACC:TG","GC:AAAG","CTTG:TCAC","GCC:ATAA","GACG:AG","CTTT:TGTC","CG:TTGG","CAGA:CT","CAT:GAAC","GT:TCA","CTT:TACA","CAGA:CCG","GACC:TCGA","GGGC:TTCT","TAG:GGGC","GACT:GC","ACCG:CG","GGA:CACA","GTAG:CTAT","TG:GAAT","GGT:TACC","CT:TC","CCTC:GCT","CACA:CCG","ACAC:CTCA","GC:TGCG","AAAC:TATG","AACC:GACT","TAGA:CTGC","CAAT:ACC","AG:ATCC","AATT:CTG","GA:CTA","CT:GGT","CCAC:ACGT","TG:GGT"}

    Returns: -1

  16. {"GTCA:AT","CA:GTA"}

    Returns: 11

  17. {"AT:CCCC","AG:GCGG","CCT:TCCC","ATTC:CCTA","TGA:CGAT","CCGG:GA","GGG:CTCT","TA:ACCT"}

    Returns: 24

  18. {"AT:CCCC","AG:GCGG","CCT:TCCC","ATTC:CCTA","TGA:CGAT","CCGG:GA","GGG:CTCT","TA:ACCT"}

    Returns: 24

  19. {"AGAG:ATC","ACGT:GT","CT:GTGT","TTCT:AATG","TTAT:AAT","TCC:CT","GA:TGCG","AGC:TGA","CTTG:CTAC","GAGA:GTA","CTAC:CAA","TGG:CAGG","AG:GT","GAA:CA"}

    Returns: 29

  20. {"TGCC:CT","CA:CG","TTG:ATT","CG:CTA","GCTA:GT","CAAA:GCA","AACG:TA","CA:TC","ATTC:TA","TGA:TTC","GCAG:AG"}

    Returns: -1

  21. {"TCC:TG","CAGA:TC","AAAG:TC","TGCG:TGCA","CCAT:AAGC","TTAT:AGC","AGAA:AC","AT:TCAG","GT:GCT","CAGG:TGGC","ACT:ACTG","GT:GGTA","GGCT:CAG","CCGT:TCTA","TAA:ACG","CTA:TTAT","GTAC:GGC"}

    Returns: 30

  22. {"CG:CT","ACT:GT","TGA:GA","TA:AT","CT:ACTT","TA:CCGA","TTCC:TTAG","AGG:GT","CACG:CGTT","AC:ACCG","CGG:GC","TAC:TAAG","CTAG:TC","GTCG:GGC","CA:AC","TC:CATA"}

    Returns: -1

  23. {"CG:CT","ACT:GT","TGA:GA","TA:AT","CT:ACTT","TA:CCGA","TTCC:TTAG","AGG:GT","CACG:CGTT","AC:ACCG","CGG:GC","TAC:TAAG","CTAG:TC","GTCG:GGC","CA:AC","TC:CATA"}

    Returns: -1

  24. {"CG:CT","ACT:GT","TGA:GA","TA:AT","CT:ACTT","TA:CCGA","TTCC:TTAG","AGG:GT","CACG:CGTT","AC:ACCG","CGG:GC","TAC:TAAG","CTAG:TC","GTCG:GGC","CA:AC","TC:CATA"}

    Returns: -1

  25. {"CT:CG"}

    Returns: 4

  26. {"TC:TCCA","CCT:AGG","GT:GC","CG:TTTA","GCT:GCAC","ATGG:GA","AC:CGA","AAG:CG","CCTT:GGCT","TGC:GTA","TGAT:AGCG","TGAA:ACT","CAA:AC","ATGG:CT","AT:GCAG","GTGT:ACGG","GAC:CTAA","GAT:GT","TTG:GC","TG:CCAG","CA:TA","GC:GCA","AT:ATG","ATTC:GCC","ATAA:CATG","TGGC:ACT","GTGA:TAG","TTAC:GCCA","GAGC:TG","GAC:TTC"}

    Returns: -1

  27. {"ATAC:AGAT","GACA:ATCG","CTGG:CCT","GT:ACAG","GCTG:GGCT","GCA:CGA","TCGT:TATT","AGTG:TAA","CG:AGG","CACG:ACC","AT:GA","AAT:CCA","TACA:AGCG","AG:CTCT","CTG:AT","AGTT:TCA","GGGC:TG","CTCC:TCAT","CTG:TTC","AT:AATT","GGTT:AG","CAA:TAGT","CTAC:AT","AG:TA","CAT:CGA","GT:TCC","GCAT:GTA","CGA:ATTG","AG:TAC","GTT:GGT","TTTG:ACAG","AACT:CAAT"}

    Returns: -1

  28. {"GT:TGTG","AGGT:AC","TCGC:CT","AGTG:AGAT","TC:GGA","AAGT:ATAC","CTT:TAGC","AAAG:AT","TC:ACT","CTT:GAGG","CGAC:GTA","GC:AAG","TAA:TGGA","CG:GAGT","TAAG:TAGT","GT:CTA","GT:AC","CGGT:AC","TG:CTA","TGG:CCT","ACT:CAGG","AGAT:GGCG","GACA:GCCC","TAG:ATAC","TAGC:GC","CCGA:GA","CAGG:AAAT","CA:TAG","TTTC:GCGT","CCA:TA","CCA:ACT"}

    Returns: -1

  29. {"CCA:GGTG","GGC:CTA","ACTG:TA","CGGA:GGT","TGC:AC","ATCT:GCGC","CG:GGAC","CCG:GC","ATG:GCA","CTAT:TCCC","AAT:CG","TC:AGAT","CCAA:AATG","AGGG:GC","AGT:TGCC","TC:TCA","AGAG:TCAT","AGGT:AAG","ACT:TGTT","ACCC:TA","GA:ACTA","CATT:CGCT","TAC:GCC","GCTA:ACAG","AG:CCAC","CT:CTCA","GTA:ACT","TCG:CCA","TC:CTT","CGAG:ACG","AC:CGTA","AAAC:TGA","AGG:GC"}

    Returns: -1

  30. {"ACTT:TA","AC:TTCA","GA:GGT","CCTT:GTGC","GTGG:CAGA","AGC:AATC","TAAA:AG","AC:GCC","ACT:GA","TA:TC","CAT:GT","AAG:CT","CTAA:GATT","AAAT:CCGC","ACG:AGTG","GTAC:CG","GA:CAGG","CCA:AGG","TGTT:GCC","GCTC:CGA","TTCT:GA","GCTA:AT","CTTT:GAGC","CT:TAA","CCAC:CTTT","AC:GGAG","GAGA:CG","ATC:GTAC","CA:GGT","AGAG:CGT"}

    Returns: -1

  31. {"GGA:AG","GGA:TATC","TC:CCGT","TC:AGCG","AG:TCTT","TGAA:GGGT","GA:ACG","GTCA:TA","CCAT:CT","TGAG:TGGA","GACA:TAGC","CCGT:AT","GTC:TC","GC:CTAA","TCG:GAGG","CCG:CTT","TAGA:TTA","TC:CGTT","TTCG:AAG","GTC:TC","CAA:GT","AT:ACG","CGG:GAAT","TGCG:CCAC","ACAG:GTAT","GCAG:ATC","AGGC:ACT","TGCT:GT","CT:TAC","ATC:GGCT","ACTA:GCC","GA:CACC","CAG:TAAA","TC:ATG","CTTG:AACC","GAA:CG","CTTG:TC","AG:GATG","TGTG:GA","GCTC:CTTA","TA:GTCT","GCA:TC","GC:CTCC","ATTC:AG","GTA:TC","TTTC:AC","AACC:GTAG","CG:GAC","TGC:TTCG"}

    Returns: -1

  32. {"AG:TGCC","TTTG:TGTC","TTGT:CA","GGA:CAG","TATA:AGGC","CGCC:GGAG","GCCA:CGTC","AT:GGA","ACGC:CAA","GC:CGGT","AGG:CCT","GAC:TCTG","GTA:TC","GTAG:CCTA","GACA:GGT","TA:TAAA","TACA:AT","AC:CTA","TG:TCC","GCAC:CCGT","TATC:CCT","TACC:CAGT","CG:CA","TATG:TG","AT:GTGA","CTA:CGT","GT:CCAA","TA:ATCC","AGTT:GAC","TC:ATCA","TTC:GAC","GC:GTT","ATCA:ACAA","GC:GA","GTT:ATG","TTGT:CGT","GCA:GA","ATC:TAG","TC:GGC","CTG:GGC","GTC:TTCT","TAC:AACT","CT:TTA","CCG:TAGA","ACT:AG","TTC:CA"}

    Returns: -1

  33. {"AAAG:AAAC","AAAT:AAAG","AACC:AAAT","AACG:AACC","AACT:AACG","AAGC:AACT","AAGG:AAGC","AAGT:AAGG","AATC:AAGT","AATG:AATC","AATT:AATG","AACA:AATT","AAGA:AACA","AATA:AAGA","ACGT:AATA","ACTG:ACGT","AGCT:ACTG","AGTC:AGCT","ATCG:AGTC","ATGC:ATCG","ACGA:ATGC","ACTA:ACGA","AGTA:ACTA","GGAC:AGTA","GGCA:GGAC","GGAT:GGCA","GGTA:GGAT","GGCT:GGTA","GGTC:GGCT","GGAG:GGTC","GGGA:GGAG","GGCG:GGGA","GGGC:GGCG","GGTG:GGGC","GGGT:GGTG","CCAC:GGGT","CCCA:CCAC","CCAG:CCCA","CCGA:CCAG","CCAT:CCGA","CCTA:CCAT","CCCG:CCTA","CCGC:CCCG","CCCT:CCGC","CCTC:CCCT","CCGT:CCTC","CCTG:CCGT","TTAC:CCTG","TTCA:TTAC","TTAG:TTCA"}

    Returns: 204

  34. {"AAAG:AAAA","AAAT:AAAG","AACC:AAAT","AACG:AACC","AACT:AACG","AAGC:AACT","AAGG:AAGC","AAGT:AAGG","AATC:AAGT","AATG:AATC","AATT:AATG","AACA:AATT","AAGA:AACA","AATA:AAGA","ACGT:AATA","ACTG:ACGT","AGCT:ACTG","AGTC:AGCT","ATCG:AGTC","ATGC:ATCG","ACGA:ATGC","ACTA:ACGA","AGTA:ACTA","GGAC:AGTA","GGCA:GGAC","GGAT:GGCA","GGTA:GGAT","GGCT:GGTA","GGTC:GGCT","GGAG:GGTC","GGGA:GGAG","GGCG:GGGA","GGGC:GGCG","GGTG:GGGC","GGGT:GGTG","CCAC:GGGT","CCCA:CCAC","CCAG:CCCA","CCGA:CCAG","CCAT:CCGA","CCTA:CCAT","CCCG:CCTA","CCGC:CCCG","CCCT:CCGC","CCTC:CCCT","CCGT:CCTC","CCTG:CCGT","TTAC:CCTG","TTCA:TTAC","TTAG:TTCA"}

    Returns: 404

  35. {"TG:GA","CGGG:TGG","GGA:AAAC"}

    Returns: 12

    The longest sequence here is CGGGTGGAAAAC. First, we form TGGA from the first rule. Since this starts with TGG, we can append it to CGGG to get CGGGTGGA, which ends with GGA. So we can append AAAC to the end and get CGGGTGGAAAAC

  36. {"AAGT:AAGC", "AAGC:AATG", "AATG:AATT", "AATT:AATC", "AATC:AACG", "AACG:AACT", "AACT:AACC", "AACC:AGAG", "AGAG:AGAT", "AGAT:AGAC", "AGAC:AGTG", "AGTG:AGTT", "AGTT:AGTC", "AGTC:AGCG", "AGCG:AGCT", "AGCT:AGCC", "AGCC:ATAG", "ATAG:ATAT", "ATAT:ATAC", "ATAC:ATGG", "ATGG:ATGT", "ATGT:ATGC", "ATGC:ATCG", "ATCG:ATCT", "ATCT:ATCC", "ATCC:ACAG", "ACAG:ACAT", "ACAT:ACAC", "ACAC:ACGG", "ACGG:ACGT", "ACGT:ACGC", "ACGC:ACTG", "ACTG:ACTT", "ACTT:ACTC", "ACTC:GAGT", "GAGT:GAGC", "GAGC:GATT", "GATT:GATC", "GATC:GACT", "GACT:GACC", "GACC:GGAT", "GGAT:GGAC", "GGAC:GGTT", "GGTT:GGTC", "GGTC:GGCT", "GGCT:GGCC", "GGCC:GTAT", "GTAT:GTAC", "GTAC:GTGT", "GTGT:GTTG"}

    Returns: 404

  37. {"AAAA:AAGC", "AAGC:AATG", "AATG:AATT", "AATT:AATC", "AATC:AACG", "AACG:AACT", "AACT:AACC", "AACC:AGAG", "AGAG:AGAT", "AGAT:AGAC", "AGAC:AGTG", "AGTG:AGTT", "AGTT:AGTC", "AGTC:AGCG", "AGCG:AGCT", "AGCT:AGCC", "AGCC:ATAG", "ATAG:ATAT", "ATAT:ATAC", "ATAC:ATGG", "ATGG:ATGT", "ATGT:ATGC", "ATGC:ATCG", "ATCG:ATCT", "ATCT:ATCC", "ATCC:ACAG", "ACAG:ACAT", "ACAT:ACAC", "ACAC:ACGG", "ACGG:ACGT", "ACGT:ACGC", "ACGC:ACTG", "ACTG:ACTT", "ACTT:ACTC", "ACTC:GAGT", "GAGT:GAGC", "GAGC:GATT", "GATT:GATC", "GATC:GACT", "GACT:GACC", "GACC:GGAT", "GGAT:GGAC", "GGAC:GGTT", "GGTT:GGTC", "GGTC:GGCT", "GGCT:GGCC", "GGCC:GTAT", "GTAT:GTAC", "GTAC:GTGT", "GTGT:GTTG"}

    Returns: -1

  38. {"TG:GA","GGGG:TGG","GGA:AAAA"}

    Returns: -1

  39. {"CCCA:TGGG","TGG:GGA","GGGA:CCCA"}

    Returns: -1

  40. {"CCAA:TGGG","TGG:GGA","GGGA:CCCA"}

    Returns: 14


This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2024, TopCoder, Inc. All rights reserved.
This problem was used for: