In this Prime Dates HackerRank solution, the task is to debug the existing code to successfully execute all provided test files.
Given two dates each in the format dd-mm-yyyy, you have to find the number of lucky dates between them (inclusive). To see if a date is lucky,
- Firstly, sequentially concatinate the date, month and year, into a new integer erasing the leading zeroes.
- Now if is divisible by either or , then we call the date a lucky date.
For example, let’s take the date “02-08-2024”. After concatinating the day, month and year, we get = 2082024. As is divisible by so the date “02-08-2024” is called a lucky date.
Debug the given function findPrimeDates
and/or other lines of code, to find the correct lucky dates from the given input.
Note: You can modify at most five lines in the given code and you cannot add or remove lines to the code.
To restore the original code, click on the icon to the right of the language selector.
Input Format
The only line of the input contains two strings and denoting the two dates following the format dd-mm-yyyy. Consider, is the day number, is the month number and is the year number.
Note: Here means January, means February, means March and so on and all the dates follow the standard structure of English calender including the leap year.
Constraints
Output Format
For each test cases, print a single integer the number of lucky dates between and in a single line.
Prime Dates HackerRank Solution
I will Provide solution in Multiple programming languages for you. If you are not able to find the code in required language then please share in comments so that our team can help you.
Problem Solution in Python
import re
month = []
def updateLeapYear(year):
if year % 400 == 0:
month[2] = 29
elif year % 100 == 0:
month[2] = 28
elif year % 4 == 0:
month[2] = 29
else:
month[2] = 28
def storeMonth():
month[1] = 31
month[2] = 28
month[3] = 31
month[4] = 30
month[5] = 31
month[6] = 30
month[7] = 31
month[8] = 31
month[9] = 30
month[10] = 31
month[11] = 30
month[12] = 31
def findPrimeDates(d1, m1, y1, d2, m2, y2):
storeMonth()
result = 0
while(True):
x = d1
x = x * 100 + m1
x = x * 10000 + y1
if x % 4 == 0 or x % 7 == 0:
result = result + 1
if d1 == d2 and m1 == m2 and y1 == y2:
break
updateLeapYear(y1)
d1 = d1 + 1
if d1 > month[m1]:
m1 = m1 + 1
d1 = 1
if m1 > 12:
y1 = y1 + 1
m1 = 1
return result;
for i in range(1, 15):
month.append(31)
line = input()
date = re.split('-| ', line)
d1 = int(date[0])
m1 = int(date[1])
y1 = int(date[2])
d2 = int(date[3])
m2 = int(date[4])
y2 = int(date[5])
result = findPrimeDates(d1, m1, y1, d2, m2, y2)
print(result)
Problem Solution in C++
#include <bits/stdc++.h>
using namespace std;
int month[15];
void updateLeapYear(int year) {
if(year % 400 == 0) {
month[2] = 29; // There is a change here from month[2] = 28;
} else if(year % 100 == 0) {
month[2] = 28; // There is a change here from month[2] = 29;
} else if(year % 4 == 0) {
month[2] = 29;
} else {
month[2] = 28;
}
}
void storeMonth() {
month[1] = 31;
month[2] = 28;
month[3] = 31;
month[4] = 30;
month[5] = 31;
month[6] = 30;
month[7] = 31;
month[8] = 31;
month[9] = 30;
month[10] = 31;
month[11] = 30;
month[12] = 31;
}
int findLuckyDates(int d1, int m1, int y1, int d2, int m2, int y2) {
storeMonth();
int result = 0;
while(true) {
int x = d1;
x = x * 100 + m1;
x = x * 10000 + y1; // There is a change here from x = x * 1000 + y1;
if(x % 4 == 0 || x % 7 == 0) { // There is a change here x % 4 == 0 && x % 7 == 0
result = result + 1;
}
if(d1 == d2 && m1 == m2 && y1 == y2) {
break;
}
updateLeapYear(y1);
d1 = d1 + 1;
if(d1 > month[m1]) {
m1 = m1 + 1;
d1 = 1;
if(m1 > 12) {
y1 = y1 + 1;
m1 = 1; // There is a change here from m1 = m1 + 1;
}
}
}
return result;
}
int main() {
string str;
int d1, m1, y1, d2, m2, y2;
getline(cin, str);
for(int i = 0; i < str.size(); i++) {
if(str[i] == '-') {
str[i] = ' ';
}
}
stringstream ss;
ss << str;
ss >> d1 >> m1 >> y1 >> d2 >> m2 >> y2;
int result = findLuckyDates(d1, m1, y1, d2, m2, y2);
cout << result << endl;
}
Leave a Reply