# Library Fine – HackerRank Solution

In this post, we will solve Library Fine HackerRank Solution. This problem (Library Fine) is a part of HackerRank Algorithms series.

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:

1. If the book is returned on or before the expected return date, no fine will be charged (i.e.: fine = 0).
2. If the book is returned after the expected return day but still within the same calendar month and year as the expected return date, fine = 15 Hackos x (the number of days late).
3. If the book is returned after the expected return month but still within the same calendar year as the expected return date, the fine = 500 Hackos x (the number of months late).
4. If the book is returned after the calendar year in which it was expected, there is a fixed fine of 10000 Hackos.

Charges are based only on the least precise measure of lateness. For example, whether a book is due January 1, 2017 or December 31, 2017, if it is returned January 1, 2018, that is a year late and the fine would be 10,000 Hackos.

Example
d1, m1, y1 = 14, 7, 2018
d2, m2, y2 = 5, 7, 2018

The first values are the return date and the second are the due date. The years are the same and the months are the same. The book is 14 – 5 = 9 days late. Return 9 * 15 = 135.

Function Description

Complete the libraryFine function in the editor below.

libraryFine has the following parameter(s):

• d1, m1, y1: returned date day, month and year, each an integer
• d2, m2, y2: due date day, month and year, each an integer

Returns

• int: the amount of the fine or 0 if there is none

## Input Format

The first line contains 3 space-separated integers, d1, m1, y1, denoting the respective daymonth, and year on which the book was returned.
The second line contains 3 space-separated integers, d2, m2, y2, denoting the respective daymonth, and year on which the book was due to be returned.

## Constraints

• 1 <= d1, d2 <= 31
• 1 <= m1, m2 <= 12
• 1 <= y1, y2 <= 3000
• It is guaranteed that the dates will be valid Gregorian calendar dates.

Sample Input

``````9 6 2015
6 6 2015``````

Sample Output

``45``

Explanation

Given the following dates:
Returned: d1 = 9, m1 = 6, y1 = 2015
Due: d2 = 6, m2 = 6, y2 = 2015

Because y2 = y1, we know it is less than a year late.
Because m2 = m1, we know it’s less than a month late.
Because d2 < d1, 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 15 Hackos x (# days late). We then print the result of 15 x (d1 – d2) = 15 x (9 – 6) = 45 as our output.

## Solution – Library Fine – HackerRank Solution

### C++

```#include<iostream>
using namespace std;
int main()
{
int actual[3],expected[3],i,j;
for(i=0;i<3;i++)
cin>>actual[i];
for(i=0;i<3;i++)
cin>>expected[i];

if(actual[2]-expected[2]<0)
cout<<0;
else if(actual[2]-expected[2]>0)
cout<<10000;
else if(actual[1]-expected[1]<0)
cout<<0;
else if(actual[1]-expected[1]>0)
cout<<500*(actual[1]-expected[1]);
else if(actual[0]-expected[0]>0)
cout<<15*(actual[0]-expected[0]);
else
cout<<0;

}
```

### Python

```#!/bin/python3

import sys

def libraryFine(d1, m1, y1, d2, m2, y2):
fine = 0

if y1 > y2:
fine = 10000
elif m1 > m2 and y1 == y2:
fine = 500 * (m1 - m2)
elif d1 > d2 and m1 == m2 and y1 == y2:
fine = 15 * (d1 - d2)

return fine

if __name__ == "__main__":
d1, m1, y1 = input().strip().split(' ')
d1, m1, y1 = [int(d1), int(m1), int(y1)]
d2, m2, y2 = input().strip().split(' ')
d2, m2, y2 = [int(d2), int(m2), int(y2)]
result = libraryFine(d1, m1, y1, d2, m2, y2)
print(result)
```

### Java

```import java.util.Scanner;

class Solution {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int d2 = sc.nextInt(), m2 = sc.nextInt(), y2 = sc.nextInt();
int d1 = sc.nextInt(), m1 = sc.nextInt(), y1 = sc.nextInt();
if (y2 > y1) {
System.out.println(10000);
} else if (y2 < y1 || m2 < m1 || m2 == m1 && d2 <= d1) {
System.out.println(0);
} else if (m1 == m2) {
System.out.println(15 * (d2 - d1));
} else {
System.out.println(500 * (m2 - m1));
}
}
}
```

Note: This problem (Library Fine) is generated by HackerRank but the solution is provided by CodingBroz. This tutorial is only for Educational and Learning purpose.