196040

NP vezbi Canvas 1

Nov 29th, 2021
935
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //package naprednolabs;
  2.  
  3. import java.io.*;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.stream.Collectors;
  7.  
  8. public class Shapes1Test {
  9.  
  10.     public static void main(String[] args) {
  11.         ShapesApplication shapesApplication = new ShapesApplication();
  12.  
  13.         System.out.println("===READING SQUARES FROM INPUT STREAM===");
  14.         System.out.println(shapesApplication.readCanvases(System.in));
  15.         System.out.println("===PRINTING LARGEST CANVAS TO OUTPUT STREAM===");
  16.         shapesApplication.printLargestCanvasTo(System.out);
  17.  
  18.     }
  19. }
  20.  
  21. class Canvas {
  22.     private String id;
  23.     private List<Integer> niza;
  24.  
  25.     public Canvas() {
  26.         id = "empty";
  27.         niza = new ArrayList<>();
  28.     }
  29.  
  30.     public Canvas(String idcopy, ArrayList<Integer> nizacopy) {
  31.         id = idcopy;
  32.         niza = new ArrayList<>();
  33.         for (int i = 0; i < nizacopy.size(); i++) {
  34.             niza.add(nizacopy.get(i));
  35.         }
  36.     }
  37.  
  38.     public static Canvas createCanvas(String line) {
  39.         String[] help = line.split("\\s+");
  40.         ArrayList<Integer> novo = new ArrayList<>();
  41.         for (int i = 1; i < help.length; i++) {
  42.             novo.add(Integer.parseInt(help[i]));
  43.         }
  44.         return new Canvas(help[0], novo);
  45.     }
  46.  
  47.     public int getSize() {
  48.         return niza.size();
  49.     }
  50.  
  51.     @Override
  52.     public String toString() {
  53.         return String.format("%s %d %d", id, getSize(), getPerimeter());
  54.     }
  55.  
  56.     public int getPerimeter() {
  57.         int suma = 0;
  58.         for (int i = 0; i < niza.size(); i++) {
  59.             suma += niza.get(i);
  60.         }
  61.         return suma * 4;
  62.     }
  63. }
  64.  
  65. class ShapesApplication {
  66.     private List<Canvas> niza;
  67.  
  68.     public ShapesApplication() {
  69.         this.niza = new ArrayList<>();
  70.     }
  71.  
  72.     public int readCanvases(InputStream inputStream) {
  73.         BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
  74.         this.niza = br.lines()
  75.                 .map(Canvas::createCanvas)
  76.                 .collect(Collectors.toList());
  77.         int suma = 0;
  78.         for (int i = 0; i < this.niza.size(); i++) {
  79.             suma += niza.get(i).getSize();
  80.         }
  81.         return suma;
  82.     }
  83.  
  84.     public void printLargestCanvasTo(OutputStream outputStream) {
  85.         PrintWriter pw = new PrintWriter(outputStream);
  86.         Canvas comp = niza.get(0);
  87.         for(int i=0; i<niza.size(); i++) {
  88.             if(niza.get(i).getPerimeter() > comp.getPerimeter())
  89.                 comp = niza.get(i);
  90.         }
  91.         pw.println(comp);
  92.         pw.flush();
  93.     }
  94. }
  95. /*
  96. Да се дефинира класа ShapesApplication во која се чуваат
  97. податоци за повеќе прозорци на кои се исцртуваат геометриски
  98. слики во форма на квадрат.
  99. За класата да се дефинира:
  100.     ShapesApplication() - конструктор
  101.     int readCanvases (InputStream inputStream) - метод којшто
  102.     од влезен поток на податоци ќе прочита информации за повеќе
  103.     прозорци на кои се исцртуваат квадрати. Во секој ред од
  104.     потокот е дадена информација за еден прозорец во формат:
  105.     canvas_id size_1 size_2 size_3 …. size_n, каде што canvas_id
  106.     е ИД-то на прозорецот, а после него следуваат големините
  107.     на страните на квадратите што се исцртуваат во прозорецот.
  108.     Методот треба да врати цел број што означува колку квадрати
  109.     за сите прозорци се успешно прочитани.
  110.     void printLargestCanvasTo (OutputStream outputStream) - метод
  111.     којшто на излезен поток ќе го испечати прозорецот чии квадрати
  112.     имаат најголем периметар. Печатењето да се изврши во форматот
  113.     canvas_id squares_count total_squares_perimeter.
  114. */
RAW Paste Data