1+ // A Positive number and ad reverse together => palindrome
2+ // 139 + 931 = 1070 => 1070 + 0701 = 1771
3+
4+ const reverseNumber = ( number ) => {
5+ return parseInt ( number . toString ( ) . split ( "" ) . reverse ( ) . join ( "" ) ) ;
6+ }
7+
8+ const isOdd = ( length ) => {
9+ if ( length % 2 >= 1 ) return true ;
10+ else return false ;
11+ }
12+ // 7 - 1 =6 /2 = 3
13+ // 1234321
14+ const editOddLengths = ( num ) => {
15+ const splitted = String ( num ) . split ( "" ) ;
16+ const length = splitted . length ;
17+
18+ if ( length == 1 ) throw new Error ( 'Error while parsing the number' )
19+
20+ if ( isOdd ( length ) ) {
21+ // deleting middle one and converting to even length
22+ splitted . splice ( ( length - 1 ) / 2 , 1 )
23+ return splitted ;
24+ }
25+ }
26+
27+ function getCopyOfArray ( arr ) {
28+ return [ ...arr ]
29+ }
30+
31+ const isPalindromeNumber = ( number ) => {
32+ let splitted = String ( number ) . split ( "" ) ;
33+ let sumLength = splitted . length ;
34+
35+ if ( isOdd ( sumLength ) ) splitted = editOddLengths ( number ) ;
36+
37+ let part1 = getCopyOfArray ( splitted ) . splice ( 0 , ( sumLength / 2 ) ) . join ( "" )
38+ let part2 = reverseNumber ( getCopyOfArray ( splitted ) . splice ( sumLength / 2 , sumLength ) . join ( "" ) )
39+
40+ if ( part1 == part2 ) return true ;
41+ }
42+
43+ const calculateNumber = ( num ) => {
44+ let result ;
45+ let reverse ;
46+
47+ reverse = reverseNumber ( num ) ;
48+ result = num + reverse ;
49+
50+ let steps = 1 ;
51+
52+ while ( ! isPalindromeNumber ( result ) ) {
53+ result = result + reverseNumber ( result ) ;
54+ steps ++ ;
55+ console . log ( `${ num } : | steps: ${ steps } | result: ${ result } ` ) // can be removed to having less logs
56+ }
57+
58+ return console . log ( `${ num } took ${ steps } steps to reach ${ result } and be knows as a palindrome` ) ;
59+ }
60+
61+ console . log ( calculateNumber ( 89 ) ) // if you need your CPU, don't run this code and change the input 🐢!
0 commit comments