Skip to content

Instantly share code, notes, and snippets.

@westc
Last active November 2, 2022 16:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save westc/1fabd9a1e4744acae646f4d3f52695e3 to your computer and use it in GitHub Desktop.
Save westc/1fabd9a1e4744acae646f4d3f52695e3 to your computer and use it in GitHub Desktop.
Palindrome Chain Length

These are different solutions that I wrote for a problem that I was originally asked on an interview.

Recursive Solutions

Sequential Solutions

  • Advantages
  • Disadvantage
    • Longer
function detailedPalChain(input, stepLimit=100) {
function helper(input) {
const revInput = +`${input}`.split("").reverse().join("");
steps.push({input, number: steps.length + 1, reverse: revInput});
if (stepLimit < steps.length) {
throw new Error(`Exceeded step limit: ${stepLimit}`);
}
return revInput === input ? steps : helper(input + revInput);
}
const steps = [];
return helper(input);
}
def palindrome_chain_length(n):
revN = int(str(n)[::-1])
return 0 if revN == n else palindrome_chain_length(n + revN)
function palindromeChainLength(n) {
var revN = +(n + '').split('').reverse().join('');
return revN !== n ? palindromeChainLength(revN + n) + 1 : 0;
}
def palindrome_chain_length(n):
steps = 0
while steps <= 1000:
revN = int(str(n)[::-1])
if revN == n:
return steps
steps += 1
n += revN
return 'Unknown'
function palindromeChainLength(n) {
for (var revN, steps = 0; (revN = +(n + '').split('').reverse().join('')) !== n && steps <= 1000; steps++, n += revN);
return steps <= 1000 ? steps : 'Unknown';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment