Skip to content

Instantly share code, notes, and snippets.

@wvanlit
Created October 1, 2019 11:13
Show Gist options
  • Save wvanlit/5786caf4f72b8315ad959c9b5ba98ed1 to your computer and use it in GitHub Desktop.
Save wvanlit/5786caf4f72b8315ad959c9b5ba98ed1 to your computer and use it in GitHub Desktop.
A python script for discovering if a date is a palindromic date, when the next palindromic date is and when this date will be planidromic next.
from datetime import datetime, timedelta
import datedelta
def checkIfPalindrome(string):
length = len(string)
even = length%2==0
for i in range(int(length/2)):
if string[i] != string[length-1 - i]:
return False
return True
def checkIfNumericPalindrome(number):
return checkIfPalindrome(str(number))
def checkIfDateIsPalindrome(date):
# day - month - year, no 0 padding
if checkIfPalindrome('{d.day}{d.month}{d.year}'.format(d=date)):
return True, '{d.day}/{d.month}/{d.year}'
# day - month - year, only month 0 padding
elif checkIfPalindrome('{d.day}{d.month:02}{d.year}'.format(d=date)):
return True, '{d.day}/{d.month:02}/{d.year}'
# day - month - year, both 0 padding
elif checkIfPalindrome('{d.day:02}{d.month:02}{d.year}'.format(d=date)):
return True, '{d.day:02}/{d.month:02}/{d.year}'
# month - day - year, no 0 padding
elif checkIfPalindrome('{d.month}{d.day}{d.year}'.format(d=date)):
return True, '{d.month}/{d.day}/{d.year}'
# month - day - year, only day 0 padding
elif checkIfPalindrome('{d.month}{d.day:02}{d.year}'.format(d=date)):
return True, '{d.month}/{d.day:02}/{d.year}'
# month - day - year, both 0 padding
elif checkIfPalindrome('{d.month:02}{d.day:02}{d.year}'.format(d=date)):
return True, '{d.month:02}/{d.day:02}/{d.year}'
else:
return False, ''
# Returns the next date that is a palindrome
def getNextPalindromeDate(date):
isPalindrome = False
while not isPalindrome:
date += timedelta(days=1)
isPalindrome, dateformat = checkIfDateIsPalindrome(date)
return dateformat.format(d=date), dateformat
# Returns the year when the date is a palindrome next
def getNextPalindromeYear(date):
isPalindrome = False
while not isPalindrome:
date += datedelta.YEAR
isPalindrome, dateformat = checkIfDateIsPalindrome(date)
return dateformat.format(d=date), dateformat
# Testing
date = datetime.strptime(input("Date (d/m/y):"),'%d/%m/%Y')
print('Is palindrome?:', checkIfDateIsPalindrome(date))
print('Next palindrome date:', getNextPalindromeDate(date))
print('Next time this date is a palindrome:', getNextPalindromeYear(date))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment