// Path: src/ch/epfl/bigdata/ts/dataparser/Tick.java
// public class Tick implements Comparable<Tick> {
// 
//     long orderID;
//     long timestamp;
//     char type;
//     long numberShares;
//     double price;
// 
//     public long getOrderID() {
//         return orderID;
//     }
// 
//     public long getTimestamp() {
//         return timestamp;
//     }
// 
//     public char getType() {
//         return type;
//     }
// 
//     public long getNumberShares() {
//         return numberShares;
//     }
// 
//     public double getPrice() {
//         return price;
//     }
// 
//     public Tick(long orderID, long timestamp, char type, long numberShares, long price) {
//         this.orderID = orderID;
//         this.timestamp = timestamp;
//         this.type = type;
//         this.numberShares = numberShares;
//         this.price = price / 10000;
//     }
// 
//     public Tick(long orderID, long timestamp, long numberShares, long price) {
//         this.orderID = orderID;
//         this.timestamp = timestamp;
//         this.numberShares = numberShares;
//         this.price = price / 10000.0;
//     }
// 
// 
//     @Override
//     public int compareTo(Tick o) {
//         if (this.timestamp < o.timestamp)
//             return -1;
//         else if (this.timestamp==o.timestamp)
//              return  0;
// 
//         return 1;
//     }
// 
//     @Override
//     public String toString() {
//         return timestamp +
//                 "," + type +
//                 "," + numberShares +
//                 "," + price;
//     }
// }
// 
// Path: src/ch/epfl/bigdata/ts/ga/Chromosome.java
// public class Chromosome {
// 
// 	private List<Gene> genes; //TODO: check if HashMap of genes would be more suitable
// 	private double fitness = 0, fitnessSelection = 0;
//     private int numberOfTransactions=0;
// 
// 	public Chromosome(List<Gene> genes) { //TODO: organize Gene and Chromosome
// 		this.genes = genes;
// 	}
// 
// 	public Chromosome(Chromosome chr) {
// 		genes = new ArrayList<Gene>();
// 		for(int i = 0; i < chr.genes.size(); i++) {
// 			genes.add(new Gene(chr.genes.get(i)));
// 		}
// 	}
// 
// 	public double getFitness() {
// 		return fitness;
// 	}
// 
// 	public void setFitness(double fitness) {
// 		this.fitness = fitness;
// 	}
// 
// 	public double getFitnessSelection() {
// 		return fitnessSelection;
// 	}
// 
// 	public void setFitnessSelection(double fitnessSelection) {
// 		this.fitnessSelection = fitnessSelection;
// 	}
// 
// 	public int getNumGenes() {
// 		return genes.size();
// 	}
// 
// 	public List<Gene> getGenes() {
// 		return genes;
// 	}
// 
//     public int getNumberOfTransactions() {
//         return numberOfTransactions;
//     }
// 
//     public void setNumberOfTransactions(int numberOfTransactions) {
//         this.numberOfTransactions = numberOfTransactions;
//     }
// 
// 
// 	public void copyGenes(int startPoint, int endPoint, Chromosome child) {
// 		for(int i = startPoint; i < endPoint; i++) {
// 			child.genes.add(genes.get(i));
// 		}
// 	}
// 
// 	public void addGene(Gene gene) {
// 		genes.add(gene);
// 	}
// 
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder();
// 		for(int i = 0; i < genes.size(); i++) {
// 			sb.append(genes.get(i));
// 		}
// 		return sb.toString();
// 	}
// }
// 
// Path: src/ch/epfl/bigdata/ts/ga/util/Range.java
// public class Range {
// 	public static Random R = new Random(System.currentTimeMillis());
//     private double upper, lower;
// 
//     public Range(double lower, double upper) {
//         this.upper = upper;
//         this.lower = lower;
//     }
// 
//     public double getLower() {
//         return lower;
//     }
// 
//     public double getUpper() {
//         return upper;
//     }
// 
// }


import ch.epfl.bigdata.ts.dataparser.Tick;
import ch.epfl.bigdata.ts.ga.Chromosome;
import ch.epfl.bigdata.ts.ga.util.Range;
import java.util.*;
    }

    private void initPattern() {
        bottom1 = bottom2 = -1;
        top1 = top2 = -1;
    }

    protected void init() {
        initPattern();

        openPosition = false;
        lastPrice = 0;
        amount = startingAmountOfMoney;
        numOfShares = 0;
    }


    private void sell() {
        openPosition = false;
        amount += numOfShares * lastPrice;
        numOfShares = 0;
        initPattern();
    }

    public static List<Range> getGeneRanges() {
        List<Range> ranges = new LinkedList<Range>();

        ranges.add(new Range(0.2, 0.4));
        ranges.add(new Range(0.3, 0.6));
        ranges.add(new Range(0.5, 1));
// Path: src/ch/epfl/bigdata/ts/dataparser/Tick.java
// public class Tick implements Comparable<Tick> {
// 
//     long orderID;
//     long timestamp;
//     char type;
//     long numberShares;
//     double price;
// 
//     public long getOrderID() {
//         return orderID;
//     }
// 
//     public long getTimestamp() {
//         return timestamp;
//     }
// 
//     public char getType() {
//         return type;
//     }
// 
//     public long getNumberShares() {
//         return numberShares;
//     }
// 
//     public double getPrice() {
//         return price;
//     }
// 
//     public Tick(long orderID, long timestamp, char type, long numberShares, long price) {
//         this.orderID = orderID;
//         this.timestamp = timestamp;
//         this.type = type;
//         this.numberShares = numberShares;
//         this.price = price / 10000;
//     }
// 
//     public Tick(long orderID, long timestamp, long numberShares, long price) {
//         this.orderID = orderID;
//         this.timestamp = timestamp;
//         this.numberShares = numberShares;
//         this.price = price / 10000.0;
//     }
// 
// 
//     @Override
//     public int compareTo(Tick o) {
//         if (this.timestamp < o.timestamp)
//             return -1;
//         else if (this.timestamp==o.timestamp)
//              return  0;
// 
//         return 1;
//     }
// 
//     @Override
//     public String toString() {
//         return timestamp +
//                 "," + type +
//                 "," + numberShares +
//                 "," + price;
//     }
// }
// 
// Path: src/ch/epfl/bigdata/ts/ga/Chromosome.java
// public class Chromosome {
// 
// 	private List<Gene> genes; //TODO: check if HashMap of genes would be more suitable
// 	private double fitness = 0, fitnessSelection = 0;
//     private int numberOfTransactions=0;
// 
// 	public Chromosome(List<Gene> genes) { //TODO: organize Gene and Chromosome
// 		this.genes = genes;
// 	}
// 
// 	public Chromosome(Chromosome chr) {
// 		genes = new ArrayList<Gene>();
// 		for(int i = 0; i < chr.genes.size(); i++) {
// 			genes.add(new Gene(chr.genes.get(i)));
// 		}
// 	}
// 
// 	public double getFitness() {
// 		return fitness;
// 	}
// 
// 	public void setFitness(double fitness) {
// 		this.fitness = fitness;
// 	}
// 
// 	public double getFitnessSelection() {
// 		return fitnessSelection;
// 	}
// 
// 	public void setFitnessSelection(double fitnessSelection) {
// 		this.fitnessSelection = fitnessSelection;
// 	}
// 
// 	public int getNumGenes() {
// 		return genes.size();
// 	}
// 
// 	public List<Gene> getGenes() {
// 		return genes;
// 	}
// 
//     public int getNumberOfTransactions() {
//         return numberOfTransactions;
//     }
// 
//     public void setNumberOfTransactions(int numberOfTransactions) {
//         this.numberOfTransactions = numberOfTransactions;
//     }
// 
// 
// 	public void copyGenes(int startPoint, int endPoint, Chromosome child) {
// 		for(int i = startPoint; i < endPoint; i++) {
// 			child.genes.add(genes.get(i));
// 		}
// 	}
// 
// 	public void addGene(Gene gene) {
// 		genes.add(gene);
// 	}
// 
// 	public String toString() {
// 		StringBuilder sb = new StringBuilder();
// 		for(int i = 0; i < genes.size(); i++) {
// 			sb.append(genes.get(i));
// 		}
// 		return sb.toString();
// 	}
// }
// 
// Path: src/ch/epfl/bigdata/ts/ga/util/Range.java
// public class Range {
// 	public static Random R = new Random(System.currentTimeMillis());
//     private double upper, lower;
// 
//     public Range(double lower, double upper) {
//         this.upper = upper;
//         this.lower = lower;
//     }
// 
//     public double getLower() {
//         return lower;
//     }
// 
//     public double getUpper() {
//         return upper;
//     }
// 
// }


// Path: src/ch/epfl/bigdata/ts/pattern/fitness/Rectangle.java
import ch.epfl.bigdata.ts.dataparser.Tick;
import ch.epfl.bigdata.ts.ga.Chromosome;
import ch.epfl.bigdata.ts.ga.util.Range;
import java.util.*;

    }

    private void initPattern() {
        bottom1 = bottom2 = -1;
        top1 = top2 = -1;
    }

    protected void init() {
        initPattern();

        openPosition = false;
        lastPrice = 0;
        amount = startingAmountOfMoney;
        numOfShares = 0;
    }


    private void sell() {
        openPosition = false;
        amount += numOfShares * lastPrice;
        numOfShares = 0;
        initPattern();
    }

    public static List<Range> getGeneRanges() {
        List<Range> ranges = new LinkedList<Range>();

        ranges.add(new Range(0.2, 0.4));
        ranges.add(new Range(0.3, 0.6));
        ranges.add(new Range(0.5, 1));
        ranges.add(new Range(0.1, 0.4));