2021-03-17 09:32:45 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
class Transform(object):
|
|
|
|
"""Class to transform a given integer into a palindrome"""
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
super(Transform, self).__init__()
|
|
|
|
|
2021-03-17 11:37:54 +00:00
|
|
|
def palindrome(self, int):
|
|
|
|
'''
|
|
|
|
Kind of the main function. Checks if input int is already a palindrome
|
|
|
|
and trys calculation one if input integer is not already a palindrome.
|
|
|
|
'''
|
|
|
|
self.input_int = int
|
|
|
|
if self.__is_palindrome(self.input_int):
|
|
|
|
print('Integer {} is a palindrome'.format(self.input_int))
|
|
|
|
return self.input_int
|
|
|
|
else:
|
|
|
|
print('Integer {} is not a palindrome'.format(self.input_int))
|
|
|
|
print('Calculating the palindrome for input {}'.format(self.input_int))
|
|
|
|
palindrome = self.__calculate_palindrome()
|
|
|
|
return palindrome
|
|
|
|
|
|
|
|
# The following methods are private. Signaled by the leading __
|
|
|
|
def __is_palindrome(self, int_to_check):
|
|
|
|
reversed = self.__reverese_int(int_to_check)
|
|
|
|
if self.input_int == reversed:
|
|
|
|
return True
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
|
|
|
|
def __reverese_int(self, int_to_reverse):
|
|
|
|
reversed = 0
|
|
|
|
int_to_check = int_to_reverse
|
|
|
|
while int_to_check > 0:
|
|
|
|
reminder = int_to_check % 10
|
|
|
|
reversed = (reversed * 10) + reminder
|
|
|
|
int_to_check = int_to_check // 10
|
|
|
|
return reversed
|
|
|
|
|
|
|
|
def __calculate_palindrome(self):
|
|
|
|
reversed = self.__reverese_int(self.input_int)
|
|
|
|
self.input_int = self.input_int + reversed
|
|
|
|
print('Possible palindrome is {}'.format(self.input_int))
|
|
|
|
|
|
|
|
if self.__is_palindrome(self.input_int) is True:
|
|
|
|
return self.input_int
|
|
|
|
|
|
|
|
if self.__is_palindrome(self.input_int) is False:
|
|
|
|
return self.__try_again()
|
|
|
|
|
|
|
|
def __try_again(self):
|
|
|
|
while self.input_int <= 1000000000:
|
|
|
|
self.__calculate_palindrome()
|
|
|
|
if self.input_int >= 1000000000:
|
|
|
|
print('Palindrome to be calculated is to big. Abort!')
|
|
|
|
return -1
|