Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- class CategoryNotFoundException extends Exception {
- private String category;
- public CategoryNotFoundException(String category) {
- this.category = category;
- }
- @Override
- public String getMessage() {
- return String.format("Category %s was not found", category);
- }
- }
- class Category {
- private String name;
- public Category(String name) {
- this.name = name;
- }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Category category = (Category) o;
- return name != null ? name.equals(category.name) : category.name == null;
- }
- @Override
- public int hashCode() {
- return name != null ? name.hashCode() : 0;
- }
- }
- abstract class NewsItem {
- protected String title;
- protected Date date;
- protected Category category;
- public NewsItem(String title, Date date, Category category) {
- this.title = title;
- this.date = date;
- this.category = category;
- }
- public String getType() {
- return getClass().toString();
- }
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public Date getDate() {
- return date;
- }
- public void setDate(Date date) {
- this.date = date;
- }
- public void setCategory(Category category) {
- this.category = category;
- }
- public Category getCategory() {
- return category;
- }
- public String getTeaser() {
- StringBuffer sb = new StringBuffer();
- /* Append title */
- sb.append(title);
- sb.append(System.lineSeparator());
- /* Append minutes */
- Date now = new Date();
- long minutes = (now.getTime() - getDate().getTime()) / 60000;
- sb.append(minutes);
- sb.append(System.lineSeparator());
- return sb.toString();
- }
- }
- class TextNewsItem extends NewsItem {
- private StringBuffer text;
- public TextNewsItem(String title, Date date, Category category, String text) {
- super(title, date, category);
- this.text = new StringBuffer(text);
- }
- public String getType() {
- return getClass().toString();
- }
- public String getTeaser() {
- StringBuffer sb = new StringBuffer();
- /* Append title and minutes */
- sb.append(super.getTeaser());
- /* Append teaser */
- if (text.length() > 80) {
- sb.append(text.subSequence(0, 80).toString());
- } else {
- sb.append(text.toString());
- }
- sb.append(System.lineSeparator());
- return sb.toString();
- }
- }
- class MediaNewsItem extends NewsItem {
- private String url;
- private int views;
- public MediaNewsItem(String title, Date date, Category category, String url, int views) {
- super(title, date, category);
- this.url = url;
- this.views = views;
- }
- public String getType() {
- return getClass().toString();
- }
- @Override
- public String getTeaser() {
- StringBuffer sb = new StringBuffer();
- /* Append title and minutes */
- sb.append(super.getTeaser());
- /* Append url */
- sb.append(url);
- sb.append(System.lineSeparator());
- /* Append visits */
- sb.append(views);
- sb.append(System.lineSeparator());
- return sb.toString();
- }
- }
- class FrontPage {
- ArrayList<NewsItem> items;
- Category categories[];
- public FrontPage(Category categories[]) {
- this.items = new ArrayList<>();
- this.categories = Arrays.copyOf(categories, categories.length);
- }
- public void addNewsItem(NewsItem newsItem) {
- items.add(newsItem);
- }
- public ArrayList<NewsItem> listByCategory(Category category) {
- ArrayList<NewsItem> select = new ArrayList<>();
- for (NewsItem item : items) {
- if (item.getCategory().equals(category)) {
- select.add(item);
- }
- }
- return select;
- }
- public ArrayList<NewsItem> listByCategoryName(String category) throws CategoryNotFoundException {
- Category temp = new Category(category);
- boolean exists = false;
- for (Category cat : categories) {
- if (cat.equals(temp)) {
- exists = true;
- }
- }
- if (!exists) {
- throw new CategoryNotFoundException(category);
- }
- /* Given that it exists */
- return listByCategory(temp);
- }
- @Override
- public String toString() {
- StringBuffer sb = new StringBuffer();
- for (NewsItem item : items) {
- sb.append(item.getTeaser());
- }
- return sb.toString();
- }
- }
- public class FrontPageTest {
- public static void main(String[] args) {
- // Reading
- Scanner scanner = new Scanner(System.in);
- String line = scanner.nextLine();
- String[] parts = line.split(" ");
- Category[] categories = new Category[parts.length];
- for (int i = 0; i < categories.length; ++i) {
- categories[i] = new Category(parts[i]);
- }
- int n = scanner.nextInt();
- scanner.nextLine();
- FrontPage frontPage = new FrontPage(categories);
- Calendar cal = Calendar.getInstance();
- for (int i = 0; i < n; ++i) {
- String title = scanner.nextLine();
- cal = Calendar.getInstance();
- int min = scanner.nextInt();
- cal.add(Calendar.MINUTE, -min);
- Date date = cal.getTime();
- scanner.nextLine();
- String text = scanner.nextLine();
- int categoryIndex = scanner.nextInt();
- scanner.nextLine();
- TextNewsItem tni = new TextNewsItem(title, date, categories[categoryIndex], text);
- frontPage.addNewsItem(tni);
- }
- n = scanner.nextInt();
- scanner.nextLine();
- for (int i = 0; i < n; ++i) {
- String title = scanner.nextLine();
- int min = scanner.nextInt();
- cal = Calendar.getInstance();
- cal.add(Calendar.MINUTE, -min);
- scanner.nextLine();
- Date date = cal.getTime();
- String url = scanner.nextLine();
- int views = scanner.nextInt();
- scanner.nextLine();
- int categoryIndex = scanner.nextInt();
- scanner.nextLine();
- MediaNewsItem mni = new MediaNewsItem(title, date, categories[categoryIndex], url, views);
- frontPage.addNewsItem(mni);
- }
- // Execution
- String category = scanner.nextLine();
- System.out.println(frontPage);
- for (Category c : categories) {
- System.out.println(frontPage.listByCategory(c).size());
- }
- try {
- System.out.println(frontPage.listByCategoryName(category).size());
- } catch (CategoryNotFoundException e) {
- System.out.println(e.getMessage());
- }
- }
- }
Add Comment
Please, Sign In to add comment