Advertisement
Guest User

Untitled

a guest
Mar 7th, 2018
436
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.40 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.*;
  5. import java.util.stream.Collectors;
  6.  
  7. public class Ex02KaminoFactory {
  8.     static class Sequence {
  9.         private Integer sequenceNumber;
  10.         private Integer startIndex;
  11.         private Integer length;
  12.         private Integer sum;
  13.         private Integer[] sequence;
  14.  
  15.         public Sequence(Integer sequenceNumber, Integer startIndex, Integer length, Integer sum, Integer[] sequence) {
  16.             this.sequenceNumber = sequenceNumber;
  17.             this.startIndex = startIndex;
  18.             this.length = length;
  19.             this.sum = sum;
  20.             this.sequence = sequence;
  21.         }
  22.  
  23.         public Integer getStartIndex() {
  24.             return startIndex;
  25.         }
  26.  
  27.         public Integer getLength() {
  28.             return length;
  29.         }
  30.  
  31.         public Integer getSum() {
  32.             return sum;
  33.         }
  34.  
  35.         @Override
  36.         public String toString() {
  37.             StringBuilder output = new StringBuilder();
  38.             output.append(String.format("Best DNA sample %d with sum: %d.%n",this.sequenceNumber,this.sum));
  39.             output.append(Arrays.stream(this.sequence).map(String::valueOf).collect(Collectors.joining(" ")));
  40.             return output.toString();
  41.         }
  42.     }
  43.  
  44.     private static List<Sequence> sequences = new ArrayList<>();
  45.  
  46.     public static void main(String[] args) throws IOException {
  47.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  48.         Integer length = Integer.valueOf(reader.readLine());
  49.  
  50.  
  51.         Integer sequenceCount = 1;
  52.  
  53.         String input;
  54.         while (! "Clone them!".equals(input = reader.readLine())) {
  55.             Integer[] numbers = Arrays.stream(input.split("!"))
  56.                     .filter(e -> ! e.equals("")).map(Integer::valueOf).toArray(Integer[]::new);
  57.  
  58.             Integer startIndex = 0;
  59.             Integer bestLength = 1;
  60.             Integer currentLength = 1;
  61.  
  62.             for (int i = 0; i < numbers.length - 1; i++) {
  63.                 if (Objects.equals(numbers[i], 1) && Objects.equals(numbers[i + 1], 1)) {
  64.                     currentLength++;
  65.                     if (i == numbers.length - 2 && currentLength > bestLength) {
  66.                         bestLength = currentLength;
  67.                         startIndex = i - currentLength + 2;
  68.                     }
  69.                 } else if (currentLength > bestLength) {
  70.                     bestLength = currentLength;
  71.                     startIndex = i - currentLength + 1;
  72.                     currentLength = 1;
  73.                 } else {
  74.                     currentLength = 1;
  75.                 }
  76.  
  77.             }
  78.  
  79.             Integer sum = Arrays.stream(numbers).reduce(0, (a, b) -> a + b);
  80.             sequences.add(new Sequence(sequenceCount, startIndex, length, sum, numbers));
  81.  
  82.             sequenceCount++;
  83.         }
  84.  
  85.  
  86.         Optional<Sequence> best = sequences.stream()
  87.                 .sorted((a, b) -> {
  88.                     int index = Integer.compare(b.getLength(),a.getLength());
  89.                     index = (index != 0) ? index : Integer.compare(a.getStartIndex(),b.getStartIndex());
  90.                     return (index != 0) ? index : Integer.compare(b.getSum(),a.getSum());
  91.                 }).findAny();
  92.  
  93.         best.ifPresent(sequence -> System.out.println(sequence.toString()));
  94.  
  95.  
  96.  
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement