using System.Collections.Generic;
public static void Main()
int result = steadyGene("ACAAAAATAAACAAAAACAAAAAAAAAATAAATACAATAAAAAAAAAAAATGAAATACAACAACAAATAAAATAAAAACGACTAAAAAATAAAAAAAAAAAAAAAAAGAGTACTAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAACACAATCAAAATAAACAAAAAAAAAAAAACCAAAATAATCAACAAAAAAAAAAAAAACAAAAACAACAACAAACAAAAAAAAACACAAACAAAAAAAAAAAAAAAACAAAACAAACAAAAAAAAAAAAACAAAAAAACAAAAAAAAAAAAAAAAACAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAAAAAAAATACAAAAAGCTATAAAAAAAAAAAAATTAAAAAACAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAAAAATAAAAAAAAAAAAAAAAAAGAAAAACAAAAAAAAAAAAAAAAACAACCAAAAAACAAAAAAAAACTAAAAAAAAAAAAAAAAAAAAAAAAAAATAACAAAAAACACAAAAAAAAAAAAGAAAGAAAAAAAACACAAAAAAAAACAAACAAAAAAAAAAAAAAAAAAAGAAAACAAAAAAACAAAAAAAACAAAAAAAAAACAAAAATTGGACAAAAAAAAACAAAAAAAAAAAACAAAAAAAGTAAAACAAATAAAAAAACAAAAAAAACAAAAAAAAAAAAAAAAAACAAAAAAGAAACAAAAAACAAAAAAAAATAACAAAACCAAAAAACAAATAAAAAACAAAAAAAATAACACAAAAAAAAAAAGAAACAAAAAAAAAAAAAAAAAAAAAAATTATAAAAAAAAAAAAAAAACAAAAAAAAAAAAAACAAAAAAAAAAGGAAAAAAAAAAAAAAAAAAAAAAAAAAATAACTAAACAAAAAAAAACAAACAAAAAATCAAAAAAAAAAAAGAAAAAAGAATAAGCAACAAAAACACAAAAAAAAAAAAAAAAAAAAAAAACATAAACAATAATAAAAAAAAAACAAAAAAAACAAAAGAACAACAAAAAACAAAACTAAACAAATAAAAAAAAAAAAACAAAAACTACAAAAAAAAAAAGAAAAAAAAAGAAAAAAAAACAAATAAAAGAAAAAAAAAAAAAAAAAAAACACAAAAAAAAAAATAAAAAAAAAAAAAAAAACAAAATAAACAAAAACAAAGAAAAAAACAAACAAAAAAAAAAAACAAAAAACTAAAAACAAAAAAAAAACAAAACACAAAAAAAAAAAAAAATAAAAAAAAAACAAAAAAACAAAAAGGAAAAAAAAAAAAGAACAAAAAAAAAAACAACAGAAAAAAGAAAAGAAAAAAAAAAAAAGACCACAAAATAAAAAAAAACAACAAACAAAAAAAAACAAAACAAAAAAACGAACAAAAAAAACAAAAACAAAAAAAAAAAAAAAAAAAAAAAGGCAAAAACAAAAAAAACAAAACAAAACAAAAAAACAAAAAAAAATTAAGATAAAGAACAAAAAAAGAAGAGAAAAAATTAACAAAAAAAAAAAAATAAAAAATACAAAAAGAAATAAAAAATACAACACACAACAAAAACGAAAAAAAAAAAAAAAACACAAAATAGAAAAAAAAAAAAAACAAAAAAAAAAAAAAGAAAAAAACAAAAAAAAAAAAATAAAAAAAAACGACACAGAAACAAAAAATAACAAAAAAAAAAAAAATAAAAAAAAAACAAAAAAAAAACAAAAAATAAAAAAAAAAACAAACAAAAAAAAAAAAAAAATAAAAAAAAAAAAAGCAAAACATAAACAAGAAAAAAAAAAAAAGTACAAATAACAAAACAAAAAAGACACTAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAACCACAAAACAAAAAAATAAAGCAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAATGAAAAAAAAAAGAAAACCAAAAAAATAAAAGA");
Console.WriteLine("Result is {0}", result);
static Dictionary<char,int> count(string s) {
var dictionary = new Dictionary<char, int>() {
var chars = s.ToCharArray();
foreach(char item in chars) {
static bool compare(int[] lettersToReplace, int[] lettersToCompare) {
for(int i = 0; i < lettersToReplace.Length; i++) {
if(lettersToReplace[i]>0) {
if(lettersToReplace[i]>lettersToCompare[i]) {
static int steadyGene(string gene) {
var nonSteadyGeneDic = count(gene);
var nonSteadyGene = new int[] {nonSteadyGeneDic['A'], nonSteadyGeneDic['C'], nonSteadyGeneDic['G'], nonSteadyGeneDic['T']};
for(int k = 0; k < nonSteadyGene.Length; k++) {
nonSteadyGene[k] = nonSteadyGene[k] - gene.Length/4;
minLength += nonSteadyGene[k];
foreach(int item in nonSteadyGene) {
Console.Write("{0}|", item);
Console.WriteLine("minLength = {0}", minLength);
Console.WriteLine("gene.Length = {0}", gene.Length);
if(minLength==0) return result;
int i = (gene.Length-minLength)/2+minLength;
while(i <= gene.Length && min != max && i>=minLength) {
Console.WriteLine("i = {0}", i);
bool containsAllLetters = false;
Dictionary<char, int> lettersToCompareDic = new Dictionary<char, int>();
for(int j = 0; j <= gene.Length - i; j++) {
string substring = gene.Substring(j,i);
if(lettersToCompareDic.Count == 0) {
lettersToCompareDic = count(substring);
firstChar = substring[0];
lettersToCompareDic[substring[substring.Length-1]]++;
lettersToCompareDic[firstChar]--;
firstChar = substring[0];
var lettersToCompare = new int[] {lettersToCompareDic['A'], lettersToCompareDic['C'], lettersToCompareDic['G'], lettersToCompareDic['T']};
Console.Write("{0}|",lettersToCompareDic['A']);
Console.Write("{0}|",lettersToCompareDic['C']);
Console.Write("{0}|",lettersToCompareDic['G']);
Console.Write("{0}|",lettersToCompareDic['T']);
Console.Write("{0}|",lettersToCompareDic['A']+lettersToCompareDic['C']+lettersToCompareDic['G']+lettersToCompareDic['T']);
containsAllLetters = compare(nonSteadyGene, lettersToCompare);
Console.WriteLine("tru");
i = (i-minLength)/2+minLength;
if(!containsAllLetters && i!=gene.Length) {
Console.WriteLine("zvetsene i = {0}",i);