dzocesrce

[Sorsix] Printers and Books

May 25th, 2025
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.74 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.stream.Collectors;
  3.  
  4. enum PageType{
  5.     BW,
  6.     RGB
  7. }
  8.  
  9. class Printer{
  10.     private String name;
  11.     private double speed;
  12.     private List<Integer> workingTime;
  13.     private PageType type;
  14.  
  15.     public Printer(String name, double speed, List<Integer> workingTime, PageType type) {
  16.         this.name = name;
  17.         this.speed = speed;
  18.         this.workingTime = workingTime;
  19.         this.type = type;
  20.     }
  21.  
  22.     public String canPrintAllBooks(List<Book> books){
  23.  
  24.         int totalPages = 0;
  25.         for(Book book : books){
  26.             totalPages+=book.getPages();
  27.             if(this.type == PageType.BW && book.getType() == PageType.RGB)
  28.                 return "No";
  29.         }
  30.         if((double)totalPages/speed > (workingTime.getLast()-workingTime.getFirst())*60*60)
  31.             return "No";
  32.         return "Yes";
  33.     }
  34.  
  35.     public String getName() {
  36.         return name;
  37.     }
  38.  
  39.     public double getSpeed() {
  40.         return speed;
  41.     }
  42.  
  43.     public List<Integer> getWorkingTime() {
  44.         return workingTime;
  45.     }
  46.  
  47.     public PageType getType() {
  48.         return type;
  49.     }
  50.  
  51.     @Override
  52.     public String toString() {
  53.         return name;
  54.     }
  55. }
  56.  
  57. class Book{
  58.     private String name;
  59.     private int pages;
  60.     private PageType type;
  61.  
  62.     public Book(String name, int pages, PageType type) {
  63.         this.name = name;
  64.         this.pages = pages;
  65.         this.type = type;
  66.     }
  67.  
  68.     public String getName() {
  69.         return name;
  70.     }
  71.  
  72.     public int getPages() {
  73.         return pages;
  74.     }
  75.  
  76.     public PageType getType() {
  77.         return type;
  78.     }
  79.  
  80.     @Override
  81.     public String toString() {
  82.         return name;
  83.     }
  84. }
  85. public class Main {
  86.     public static List<String> readInput() {
  87.         final Scanner scan = new Scanner(System.in);
  88.         final List<String> items = new ArrayList<>();
  89.         while (scan.hasNextLine()) {
  90.             items.add(scan.nextLine());
  91.         }
  92.         return items;
  93.     }
  94.  
  95.     public static void main(String[] args) {
  96.         final List<String> lines = readInput();
  97.  
  98.         List<Printer> printers = new ArrayList<>();
  99.         List<Book> books = new ArrayList<>();
  100.  
  101.         String allPrinters = lines.getFirst();
  102.         String[] parts = allPrinters.split(", ");
  103.         for(String part : parts){
  104.             String[] printerData = part.split("\\s+");
  105.             String name = printerData[0];
  106.             float speed = Float.parseFloat(printerData[1]);
  107.             List<Integer> workingHours = new ArrayList<>();
  108.             String[] workingHoursData = printerData[2].split("-");
  109.             workingHours.add(Integer.parseInt(workingHoursData[0]));
  110.             workingHours.add(Integer.parseInt(workingHoursData[1]));
  111.             PageType type = PageType.valueOf(printerData[3]);
  112.             printers.add(new Printer(name.trim(),speed,workingHours,type));
  113.         }
  114.  
  115.         String allBooks = lines.getLast();
  116.         parts = allBooks.split(", ");
  117.         for(String part : parts){
  118.             String[] bookData = part.split("-");
  119.             String name = bookData[0].trim();
  120.             int pages = Integer.parseInt(bookData[1].trim());
  121.             PageType type = PageType.BW;
  122.             if(bookData.length>2)
  123.                 type = PageType.valueOf(bookData[2].trim());
  124.             books.add(new Book(name,pages,type));
  125.         }
  126.  
  127.         List<Printer> powerfulPrinters = new ArrayList<>();
  128.  
  129.         //CAN EACH PRINTER PRINT ALL BOOKS?
  130.         System.out.println("===CAN EACH PRINTER PRINT ALL BOOKS?===");
  131.         for(Printer printer : printers){
  132.             System.out.println(String.format("%s : %s",printer.getName(),
  133.                     printer.canPrintAllBooks(books)));
  134.             if(printer.canPrintAllBooks(books).equals("Yes"))
  135.                 powerfulPrinters.add(printer);
  136.         }
  137.  
  138.         //FOR EACH POWERFUL PRINTER TOTAL MINUTES TO PRINT ALL BOOKS
  139.         System.out.println("===FOR EACH POWERFUL PRINTER TOTAL MINUTES TO PRINT ALL BOOKS===");
  140.         for(Printer printer : powerfulPrinters){
  141.             System.out.println(String.format("%s : %.2f minutes; %.2f pages per minute",printer.getName(),
  142.                     books.stream().mapToInt(i->i.getPages()).sum()/(printer.getSpeed()),
  143.                     books.stream().mapToInt(i->i.getPages()).sum()/
  144.                             (books.stream().mapToInt(i->i.getPages()).sum()/(printer.getSpeed()))
  145.                     ));
  146.         }
  147.  
  148.         //THREE LARGEST BOOKS NOT IN COLOR
  149.         System.out.println("===THREE LARGEST BOOKS NOT IN COLOR===");
  150.         books.stream().filter(i->i.getType().equals(PageType.BW))
  151.                 .sorted(Comparator.comparing(Book::getPages).reversed())
  152.                         .limit(3).forEach(System.out::println);
  153.  
  154.         //THREE SLOWEST PRINTERS
  155.         System.out.println("===THREE SLOWEST PRINTERS===");
  156.         printers.stream()
  157.                 .sorted(Comparator.comparing(Printer::getSpeed))
  158.                 .limit(3).forEach(System.out::println);
  159.  
  160.         //THREE SLOWEST PRINTERS THAT CAN PRINT ALL BOOKS
  161.         System.out.println("===THREE SLOWEST PRINTERS THAT CAN PRINT ALL BOOKS===");
  162.         powerfulPrinters.stream()
  163.                 .sorted(Comparator.comparing(Printer::getSpeed))
  164.                 .limit(3).forEach(System.out::println);
  165.  
  166.     }
  167.  
  168. }
  169. /**
  170. input:
  171. P1 1 8-16 BW, P2 0.5 8-12 BW, P3 5.578 8-9 RGB, P4 12 8-9 BW, P5 15 9-9 RGB, P6 0.001 8-9 RGB, P7 1 8-16 RGB, P8 5.578 8-9 RGB, P9 12 8-9 RGB
  172. Encyclopaedia Britannica - 400 - BW, Moby Dick - 720, Game of Thrones - 864 - RGB, In Search of Lost Time - 3616 - RGB, David Copperfield - 1057, Les MisΓ©rables - 1456, War and Peace - 1440, The Odyssey - 384, Hamlet - 342 - BW, Pride and Prejudice - 432, The Little Prince - 96 - RGB
  173. **/
Add Comment
Please, Sign In to add comment