Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.stream.Collectors;
- enum PageType{
- BW,
- RGB
- }
- class Printer{
- private String name;
- private double speed;
- private List<Integer> workingTime;
- private PageType type;
- public Printer(String name, double speed, List<Integer> workingTime, PageType type) {
- this.name = name;
- this.speed = speed;
- this.workingTime = workingTime;
- this.type = type;
- }
- public String canPrintAllBooks(List<Book> books){
- int totalPages = 0;
- for(Book book : books){
- totalPages+=book.getPages();
- if(this.type == PageType.BW && book.getType() == PageType.RGB)
- return "No";
- }
- if((double)totalPages/speed > (workingTime.getLast()-workingTime.getFirst())*60*60)
- return "No";
- return "Yes";
- }
- public String getName() {
- return name;
- }
- public double getSpeed() {
- return speed;
- }
- public List<Integer> getWorkingTime() {
- return workingTime;
- }
- public PageType getType() {
- return type;
- }
- @Override
- public String toString() {
- return name;
- }
- }
- class Book{
- private String name;
- private int pages;
- private PageType type;
- public Book(String name, int pages, PageType type) {
- this.name = name;
- this.pages = pages;
- this.type = type;
- }
- public String getName() {
- return name;
- }
- public int getPages() {
- return pages;
- }
- public PageType getType() {
- return type;
- }
- @Override
- public String toString() {
- return name;
- }
- }
- public class Main {
- public static List<String> readInput() {
- final Scanner scan = new Scanner(System.in);
- final List<String> items = new ArrayList<>();
- while (scan.hasNextLine()) {
- items.add(scan.nextLine());
- }
- return items;
- }
- public static void main(String[] args) {
- final List<String> lines = readInput();
- List<Printer> printers = new ArrayList<>();
- List<Book> books = new ArrayList<>();
- String allPrinters = lines.getFirst();
- String[] parts = allPrinters.split(", ");
- for(String part : parts){
- String[] printerData = part.split("\\s+");
- String name = printerData[0];
- float speed = Float.parseFloat(printerData[1]);
- List<Integer> workingHours = new ArrayList<>();
- String[] workingHoursData = printerData[2].split("-");
- workingHours.add(Integer.parseInt(workingHoursData[0]));
- workingHours.add(Integer.parseInt(workingHoursData[1]));
- PageType type = PageType.valueOf(printerData[3]);
- printers.add(new Printer(name.trim(),speed,workingHours,type));
- }
- String allBooks = lines.getLast();
- parts = allBooks.split(", ");
- for(String part : parts){
- String[] bookData = part.split("-");
- String name = bookData[0].trim();
- int pages = Integer.parseInt(bookData[1].trim());
- PageType type = PageType.BW;
- if(bookData.length>2)
- type = PageType.valueOf(bookData[2].trim());
- books.add(new Book(name,pages,type));
- }
- List<Printer> powerfulPrinters = new ArrayList<>();
- //CAN EACH PRINTER PRINT ALL BOOKS?
- System.out.println("===CAN EACH PRINTER PRINT ALL BOOKS?===");
- for(Printer printer : printers){
- System.out.println(String.format("%s : %s",printer.getName(),
- printer.canPrintAllBooks(books)));
- if(printer.canPrintAllBooks(books).equals("Yes"))
- powerfulPrinters.add(printer);
- }
- //FOR EACH POWERFUL PRINTER TOTAL MINUTES TO PRINT ALL BOOKS
- System.out.println("===FOR EACH POWERFUL PRINTER TOTAL MINUTES TO PRINT ALL BOOKS===");
- for(Printer printer : powerfulPrinters){
- System.out.println(String.format("%s : %.2f minutes; %.2f pages per minute",printer.getName(),
- books.stream().mapToInt(i->i.getPages()).sum()/(printer.getSpeed()),
- books.stream().mapToInt(i->i.getPages()).sum()/
- (books.stream().mapToInt(i->i.getPages()).sum()/(printer.getSpeed()))
- ));
- }
- //THREE LARGEST BOOKS NOT IN COLOR
- System.out.println("===THREE LARGEST BOOKS NOT IN COLOR===");
- books.stream().filter(i->i.getType().equals(PageType.BW))
- .sorted(Comparator.comparing(Book::getPages).reversed())
- .limit(3).forEach(System.out::println);
- //THREE SLOWEST PRINTERS
- System.out.println("===THREE SLOWEST PRINTERS===");
- printers.stream()
- .sorted(Comparator.comparing(Printer::getSpeed))
- .limit(3).forEach(System.out::println);
- //THREE SLOWEST PRINTERS THAT CAN PRINT ALL BOOKS
- System.out.println("===THREE SLOWEST PRINTERS THAT CAN PRINT ALL BOOKS===");
- powerfulPrinters.stream()
- .sorted(Comparator.comparing(Printer::getSpeed))
- .limit(3).forEach(System.out::println);
- }
- }
- /**
- input:
- 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
- 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
- **/
Add Comment
Please, Sign In to add comment