Skip to content

Instantly share code, notes, and snippets.

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 JoshCheek/680907cb93c12c8f7a1a022838982fde to your computer and use it in GitHub Desktop.
Save JoshCheek/680907cb93c12c8f7a1a022838982fde to your computer and use it in GitHub Desktop.
Palindromes in JavaScript
// https://www.freecodecamp.com/challenges/check-for-palindromes#?solution=function%20palindrome(str)%20%7B%0A%20%20str%20%3D%20str.toLowerCase().replace(%2F%5B%5Ea-z0-9%5D%2Fg%2C%20%22%22)%3B%0A%20%20for(var%20i%20%3D%200%3B%20i%20%3C%20str.length%2F2%3B%20%2B%2Bi)%20%0A%20%20%20%20if(str%5Bi%5D%20!%3D%3D%20str%5Bstr.length-i-1%5D)%0A%20%20%20%20%20%20return%20false%3B%0A%20%20return%20true%3B%0A%7D%0A%0A%0A%0Apalindrome(%22eye%22)%3B%0A
function palindrome(str) {
str = str.toLowerCase().replace(/[^a-z0-9]/g, "");
for(var i = 0; i < str.length/2; ++i) {
if(str[i] !== str[str.length-i-1]) {
return false;
}
}
return true;
}
console.log(palindrome("My age is 0, 0 si ega ym."));
// start
"My age is 0, 0 si ega ym."
// after toLowerCase
"my age is 0, 0 si ega ym."
// after after replace
"myageis00siegaym"
// i goes from 0 to 7
// m m
"myageis00siegaym"
// y y
"myageis00siegaym"
// a a
"myageis00siegaym"
// g g
"myageis00siegaym"
// ...
// 00
"myageis00siegaym"
function shouldCollapse(char) {
// if it's outside of a-z, A-Z, 0-9 then collapse it
return (char < "a" || "z" < char) &&
(char < "A" || "Z" < char) &&
(char < "0" || "9" < char);
}
function mismatch(char1, char2) {
return char1.toLowerCase() !== char2.toLowerCase();
}
function palindrome(str) {
var start = -1;
var end = str.length;
while(start < end) {
do { start += 1; } while (shouldCollapse(str[start]));
do { end -= 1; } while (shouldCollapse(str[end]));
if(mismatch(str[start], str[end])) {
return false;
}
}
return true;
}
function testPalindrome(expected, string) {
var pass = (expected === palindrome(string));
console.log(pass ? "pass" : "fail");
}
testPalindrome(true, "eye");
testPalindrome(true, "race car");
testPalindrome(false, "not a palindrome");
testPalindrome(true, "A man, a plan, a canal. Panama");
testPalindrome(true, "never odd or even");
testPalindrome(false, "nope");
testPalindrome(false, "almostomla");
testPalindrome(true, "My age is 0, 0 si ega ym.");
testPalindrome(false, "1 eye for of 1 eye.");
testPalindrome(true, "0_0 (: /-\ :) 0-0");
function palindrome(str) {
// instead of removing things we don't want, we'll find things we do want
collapsedStr = str.toLowerCase().match(/[a-z0-9]/g).join();
// is it the same as its reverse?
reversedStr = collapsedStr.split("").reverse().join("");
return collapsedStr === reversedStr;
}
function testPalindrome(expected, string) {
var pass = (expected === palindrome(string));
console.log(pass ? "pass" : "fail");
}
testPalindrome(true, "eye");
testPalindrome(true, "race car");
testPalindrome(false, "not a palindrome");
testPalindrome(true, "A man, a plan, a canal. Panama");
testPalindrome(true, "never odd or even");
testPalindrome(false, "nope");
testPalindrome(false, "almostomla");
testPalindrome(true, "My age is 0, 0 si ega ym.");
testPalindrome(false, "1 eye for of 1 eye.");
testPalindrome(true, "0_0 (: /-\ :) 0-0");
function palindrome(str) {
// instead of removing things we don't want, we'll find things we do want
collapsedStr = str.toLowerCase().match(/[a-z0-9]/g).join();
// is it the same as its reverse?
reversedStr = collapsedStr.split("").reverse().join("");
return collapsedStr === reversedStr;
}
function testPalindrome(expected, string) {
var pass = (expected === palindrome(string));
console.log(pass ? "pass" : "fail");
}
testPalindrome(true, "eye");
testPalindrome(true, "race car");
testPalindrome(false, "not a palindrome");
testPalindrome(true, "A man, a plan, a canal. Panama");
testPalindrome(true, "never odd or even");
testPalindrome(false, "nope");
testPalindrome(false, "almostomla");
testPalindrome(true, "My age is 0, 0 si ega ym.");
testPalindrome(false, "1 eye for of 1 eye.");
testPalindrome(true, "0_0 (: /-\ :) 0-0");
function palindrome(str) {
var isAlphaNum = function(char) {
return ("a" <= char && char <= "z") || ("0" <= char && char <= "9");
}
var filtered = str.toLowerCase().split("").filter(isAlphaNum).join("");
var reversed = filtered.split("").reverse().join("");
return filtered === reversed;
}
function testPalindrome(expected, string) {
var pass = (expected === palindrome(string));
console.log(pass ? "pass" : "fail");
}
testPalindrome(true, "eye");
testPalindrome(true, "race car");
testPalindrome(false, "not a palindrome");
testPalindrome(true, "A man, a plan, a canal. Panama");
testPalindrome(true, "never odd or even");
testPalindrome(false, "nope");
testPalindrome(false, "almostomla");
testPalindrome(true, "My age is 0, 0 si ega ym.");
testPalindrome(false, "1 eye for of 1 eye.");
testPalindrome(true, "0_0 (: /-\ :) 0-0");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment