Source : https://www.hackerrank.com/challenges/30-nested-logic
Objective
Today's challenge puts your understanding of nested conditional statements to the test. You already have the knowledge to complete this challenge, but check out the Tutorial tab for a video on testing!
Task
Your local library needs your help! Given the expected and actual return dates for a library book, create a program that calculates the fine (if any). The fee structure is as follows:
- If the book is returned on or before the expected return date, no fine will be charged (i.e.: .
- If the book is returned after the expected return day but still within the same calendar month and year as the expected return date, .
- If the book is returned after the expected return month but still within the same calendar year as the expected return date, the .
- If the book is returned after the calendar year in which it was expected, there is a fixed fine of .
Input Format
The first line contains space-separated integers denoting the respective , , and on which the book was actually returned.
The second line contains space-separated integers denoting the respective , , and on which the book was expected to be returned (due date).
Constraints
Output Format
Print a single integer denoting the library fine for the book received as input.
Sample Input
9 6 2015
6 6 2015
Sample Output
45Explanation
Given the following return dates:
Actual:
Expected:
Because , we know it is less than a year late.
Because , we know it's less than a month late.
Because , we know that it was returned late (but still within the same month and year).
Per the library's fee structure, we know that our fine will be . We then print the result of as our output.
Source : https://www.hackerrank.com/challenges/30-nested-logic
Solution
| // Karthikalapati.blogspot.com | |
| import java.util.Scanner; | |
| import java.time.LocalDate; | |
| public class Solution { | |
| public static void main(String[] args) { | |
| /* Read and save input as LocalDates */ | |
| Scanner scan = new Scanner(System.in); | |
| LocalDate returnDate = readDate(scan); | |
| LocalDate expectDate = readDate(scan); | |
| scan.close(); | |
| /* Calculate fine */ | |
| int fine; | |
| if (returnDate.isEqual(expectDate) || returnDate.isBefore(expectDate)) { | |
| fine = 0; | |
| } else if (returnDate.getMonth() == expectDate.getMonth() && returnDate.getYear() == expectDate.getYear()) { | |
| fine = 15 * (returnDate.getDayOfMonth() - expectDate.getDayOfMonth()); | |
| } else if (returnDate.getYear() == expectDate.getYear()) { | |
| fine = 500 * (returnDate.getMonthValue() - expectDate.getMonthValue()); | |
| } else { | |
| fine = 10000; | |
| } | |
| System.out.println(fine); | |
| } | |
| private static LocalDate readDate(Scanner scan) { | |
| int day = scan.nextInt(); | |
| int month = scan.nextInt(); | |
| int year = scan.nextInt(); | |
| return LocalDate.of(year, month, day); | |
| } | |
| } |
No comments:
Post a Comment