рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!
рдЖрдЬ рд╣рдо EcmaScript рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░ рдЕрдкрдирд╛ рд╢реЛрдз рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА: рд╢реБрджреНрдз рдХрд╛рд░реНрдп, рд▓рдВрдмреЛрджрд░, рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ред рдЖрдЬ рд╣рдо рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ FP рддрдХрдиреАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ: рд╕рдВрд░рдЪрдирд╛, рдХрд░реА рдФрд░ рд╢реБрджреНрдз рдХрд╛рд░реНрдпред рд▓реЗрдЦ "рдЫрджреНрдо рдХреЛрдбрд░реЗрд╡реНрдпреВ" рдХреА рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЪрд░рдг рд╕рдВрдХреНрд░рдордгреЛрдВ рдФрд░ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХреЛрдб рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдмрд╛рдж рдХреЗ рдЪрд░рдг рдХреЗ рдЖрджрд░реНрд╢реЛрдВ рдХреЗ рдЖрджрд░реНрд╢реЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВрдЧреЗред
рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИ!
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ: palindromes рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╡рд┐рд▓реЛрдордкрдж
рдкреБрд░реБрд╖ рдХрд╛ рд▓рд┐рдВрдЧ
рдРрд╕рд╛ рд╢рдмреНрдж рдпрд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬреЛ рдмрд╛рдПрдБ рд╕реЗ рджрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рд╕реЗ рдмрд╛рдПрдБ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
"рдкреА "рдореИрдВ рдЬрдЬ рдХреА рддрд▓рд╡рд╛рд░ рдХреЗ рд╕рд╛рде рдЬрд╛рддрд╛ рд╣реВрдВ"
рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
function getPalindrom (str) { const regexp = /[\.,\/#!$%\^&\*;:{}=\-_`~()?\s]/g; str = str.replace(regexp, '').toLowerCase().split('').reverse().join('');
рдмреЗрд╢рдХ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рдПрдкреАрдЖрдИ рд╕рд╣реА рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рддреЛ рдЧреЗрдЯрдкрд╛рдЗрдВрдбреНрд░реЛрдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред IsPalindrom рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ ('рдореИрдВ рдПрдХ рддрд▓рд╡рд╛рд░ рдиреНрдпрд╛рдпрд╛рдзреАрд╢ рдХреЗ рд╕рд╛рде рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ') рд╕рд╣реА рд▓реМрдЯреЗрдЧрд╛, рдФрд░ isPalindrom ('рдирд╣реАрдВ рдПрдХ palindrome') рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдЭреВрдареА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рдХреНрдпрд╛ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдЖрджрд░реНрд╢реЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ!
рдЗрд╕
рд▓реЗрдЦ рд╕реЗ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░:
рд╢реБрджреНрдз рдХрд╛рд░реНрдп (рдкреАрдПрдл) - рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдиреБрдорд╛рдирд┐рдд рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
рдкреАрдПрдл рдЧреБрдг:
рдкреАрдПрдл рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдФрд░ рдкреАрдПрдл рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
рд╡реИрд╢реНрд╡рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ
рдмрд╛рд╣рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдпрд╛ рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рди рдХрд░реЗрдВ
рдбреЗрдЯрд╛ рдХреЛ рдлрд╛рдЗрд▓, рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдХрд╣реАрдВ рдФрд░ рди рд▓рд┐рдЦреЗрдВ
рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд▓рд┐рдВрдбреНрд░реЛрдорд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдб рдХрд╛ рджреЛрд╣рд░рд╛рд╡ рд╣реИ, рдЕрд░реНрдерд╛рддред
DRY рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреВрд╕рд░реЗ, getPalindrom рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИред рддреАрд╕рд░рд╛, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рд╕рд╛рдл рдирд╣реАрдВ рд╣реИрдВред
рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ: рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред
рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВ:
const allNotWordSymbolsRegexpGlobal = () => /[\.,\/#!$%\^&\*;:{}=\-_~()?\s]/g;//(1) const replace = (regexp, replacement, str) => str.replace(regexp, replacement);
) const allNotWordSymbolsRegexpGlobal = () => /[\.,\/#!$%\^&\*;:{}=\-_~()?\s]/g;//(1) const replace = (regexp, replacement, str) => str.replace(regexp, replacement);
рдкрдВрдХреНрддрд┐ 1 рдореЗрдВ, рд╣рдордиреЗ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ред рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдПрдлрдкреА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрдВрдХреНрддрд┐ 2 рдореЗрдВ, рд╣рдордиреЗ String.prototyp.replace рдкрджреНрдзрддрд┐ рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрд╢рди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛, рддрд╛рдХрд┐ рдпрд╣ (рдмрджрд▓рд╛ рд╣реБрдЖ рдХреЙрд▓) рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрдмрдВрдз рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛред рд▓рд╛рдЗрди 3 рдкрд░, String.prototype.toLowerCase рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдореВрд░реНрдд рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред 4 рд╡реЗрдВ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬреЛ рдкрд╛рд░рд┐рдд рдПрдХ рд╕реЗ рдПрдХ рдирдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛рддрд╛ рд╣реИред рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП 5 рд╡реАрдВ рдЬрд╛рдВрдЪред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдмреЗрд╣рдж рд╕рд╛рдл рд╣реИрдВ! рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ
рд▓реЗрдЦ рдореЗрдВ рд╢реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред
рдЕрдм рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рдкреИрд▓рд┐рдВрдбреНрд░реЛрдо рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрдПрдЧреАред
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рдгрд╛рдореА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЛ рдпрд╛ рдЕрдзрд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рд╕рдВрдШ рд╣реИ, рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреНрд░рдо рдореЗрдВ рд╕рдВрдпреБрдХреНрдд рд▓реЛрдЧреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рднрд╛рд╖рд╛ рдЬрдЯрд┐рд▓ рд▓рдЧ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐ рд╕реЗ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИред
рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
isStringsEqual(toLowerCase(replace(allNotWordSymbolsRegexpGlobal(), '', ' ')), stringReverse(toLowerCase(replace(allNotWordSymbolsRegexpGlobal(), '', ' '))));
рдпрд╛ рдЗрд╕ рддрд░рд╣:
const strA = toLowerCase(replace(allNotWordSymbolsRegexpGlobal(), '', ' ')); const strB = stringReverse(toLowerCase(replace(allNotWordSymbolsRegexpGlobal(), '', ' '))); console.log(isStringsEqual(strA, strB));
рдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдЪрд░ рдХрд╛ рдПрдХ рдФрд░ рдЧреБрдЪреНрдЫрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдЕрдХреНрд╕рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд░рдЪрдирд╛ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реИ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ред рдлрд┐рд░ рднреА, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬрдм рдХрдИ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЦрд░рд╛рдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдкрдардиреАрдп рдирд╣реАрдВ рд╣реИ! рддреЛ рдЕрдм рдХреНрдпрд╛? рдЦреИрд░, рдЗрд╕рдХреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рдХреНрдпрд╛ рд╣рдо рдЕрд╕рд╣рдордд рд╣реИрдВ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдмрд╕ рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
const compose = (...fns) => x => fns.reduce((acc, fn) => fn(acc), x);
рдХрдВрдкреЛрдЬрд╝ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реЗрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдПрдХ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, fns рд╕рд░рдгреА рд╕реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддрд░реНрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп x рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рднреА рдмрд╛рдж рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рддрд░реНрдХ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдВрдЧреЗред рддреЛ рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд░рдЪрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░рдЪрдирд╛рдПрдБ рдмрдирд╛рддреЗ рд╕рдордп, рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рди рд╣реЛрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдЧрд▓реЗ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрдВрдкреЛрдЬреАрд╢рди рддрдХрдиреАрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди
const replace = (regexp, replacement, str) => str.replace(regexp, replacement);
3 рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдФрд░ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рд░рдЪрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬрддреЗ рд╣реИрдВред рдПрдХ рдФрд░ рдПрдлрдкреА рддрдХрдиреАрдХ, рдХрд░реА, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧреАред
рдХреНрдпреВрд░рд┐рдВрдЧ рдПрдХ рддрд░реНрдХ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реНрдХреЛрдВ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рд╣реИред
рдкрд╣рд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╣рдорд╛рд░рд╛ рдРрдб рдлрдВрдХреНрд╢рди рдпрд╛рдж рд╣реИ?
const add = (x,y) => x+y;
рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
const add = x => y => x+y;
рдлрд╝рдВрдХреНрд╢рди x рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рдИ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИред
рдХрд░реА рд▓рд╛рдн:
- рдХреЛрдб рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИ;
- рдХрд░реА рдХрд╛рд░реНрдп рд╣рдореЗрд╢рд╛ рд╕рд╛рдл рд╣реЛрддреЗ рд╣реИрдВред
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдмрджрд▓реЗ рд╣реБрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рддрд░реНрдХ рд▓реЗред рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
const replaceAllNotWordSymbolsGlobal = replacement => str => replace(allNotWordSymbolsRegexpGlobal(), replacement, str);
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рдХреЗ рд╕рд╛рде рдПрдХ рддрд░реНрдХ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХрд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИред
рдПрдХ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЖрд╡рд░рдг рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрд╛рдХреА рддрд░реНрдХреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ ReplaceAllNotWordSymbolsGlobal рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛, рдЬреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдФрд░ рд╣рдо рдПрдХ рдирд┐рд░рдВрддрд░ рдХреЗ рд╕рд╛рде regexpред
рд╡рд╛рдкрд╕ рдкрд▓рд┐рдВрдбреЛрдореНрд╕ рдореЗрдВред рдкрд▓рд┐рдВрдбреНрд░реЛрдо рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд░рдЪрдирд╛ рдмрдирд╛рдПрдБ:
const processFormPalindrom = compose( replaceAllNotWordSymbolsGlobal(''), toLowerCase, stringReverse );
рдФрд░ рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рддрд╛рд▓рдореЗрд▓ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗ:
const processFormTestString = compose( replaceAllNotWordSymbolsGlobal(''), toLowerCase, );
рдЕрдм рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдХреНрдпрд╛ рдХрд╣рд╛ рдерд╛:
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЪрдирд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдФрд░ рдирд╛рдо:
const testString = ' ';
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ:
const allNotWordSymbolsRegexpGlobal = () => /[\.,\/#!$%\^&\*;:{}=\-_~()?\s]/g; const replace = (regexp, replacement, str) => str.replace(regexp, replacement); const toLowerCase = str => str.toLowerCase(); const stringReverse = str => str.split('').reverse().join(''); const isStringsEqual = (strA, strB) => strA === strB; const replaceAllNotWordSymbolsGlobal = replacement => str => replace(allNotWordSymbolsRegexpGlobal(), replacement, str); const compose = (...fns) => x => fns.reduce((acc, fn) => fn(acc), x); const processFormPalindrom = compose( replaceAllNotWordSymbolsGlobal(''), toLowerCase, stringReverse ); const processFormTestString = compose( replaceAllNotWordSymbolsGlobal(''), toLowerCase, ); const testString = ' '; const isPalindrom = isStringsEqual(processFormPalindrom(testString), processFormTestString(testString));
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рд╣рд░ рдмрд╛рд░ рдХрд░реА рдХрд░рдирд╛ рдпрд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрд▓рд╕реА рд▓реЛрдЧ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдо рддреМрд░ рдкрд░ рдПрдлрдкреА рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдХреБрдЫ рдФрд░ рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗрдВрдЧреЗ:
const curry = fn => (...args) => { if (fn.length > args.length) { const f = fn.bind(null, ...args); return curry(f); } else { return fn(...args) } }
рдХрд░реА рдлрдВрдХреНрд╢рди рдХрд░реАрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд▓реИрдВрдмрдбрд╛ рдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рдХреА рддрд░реНрдХреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рд╣реИред рд╣рд░ рдмрд╛рд░ рдПрдХ рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рднреА рдШреЛрд╖рд┐рдд рддрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдлрд┐рд░ рд╕реЗ рдХрд░реА рдЧрдИ рд╣реИред
рд╣рдо рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
const replaceAllNotWordSymbolsToEmpltyGlobal = curry(replace)(allNotWordSymbolsRegexpGlobal(), '');
рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдкреВрд░реНрдгрддрд╛рд╡рд╛рджреА рд╣реИрдВ рдФрд░ рд╣рдо рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрд╖реНрдардХреЛрдВ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реИрдВ, рд╣рдо рдФрд░ рднреА рдмреЗрд╣рддрд░ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рд╢рд╛рдпрдж рджреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ:
const party = (fn, x) => (...args) => fn(x, ...args);
рдпрд╣ рдЖрдВрд╢рд┐рдХ рд▓рд╛рдЧреВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдореВрд░реНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИ, рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдХреА рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдм рд╣рдо рдкрд╛рд░реНрдЯреА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдХрдИ рддрд░реНрдХреЛрдВ рдХреЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХреЗрдВ:
const party = (fn, ...args) => (...rest) => fn(...args.concat(rest));
рдпрд╣ рдЕрд▓рдЧ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд (fn.length) рд╕реЗ рдХрдо рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
const sum = (a,b,c,d) => a+b+c+d; const fn = curry(sum); const r1 = fn(1,2,3,4);
рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдкреИрд▓рд┐рдиреНрдбреНрд░реЛрдо рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрд╖реНрдардХ рдХреЗ рдмрд┐рдирд╛ рд╣рдорд╛рд░реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирдЕрдирд▓реЙрдЯреЙрд░реНрдб рд╡рд░реНрдбрдмреНрд▓рд╛рдореНрд╕рдЯреЛрдореЗрд▓реАрдЧреНрд▓рд┐рдЯ тАЛтАЛрдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
const replaceAllNotWordSymbolsToEmpltyGlobal = party(replace,allNotWordSymbolsRegexpGlobal(), '');
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдкреВрд░рд╛ рдХреЛрдб:
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд░рдгреА рдЖрдПрдЧреА? рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
const map = fn => (...args) => args.map(fn);
рдЕрдм рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рд╣реИ, рддреЛ:
const palindroms = [' ',' ',' '. ' '] map(checkPalindrom )(...palindroms );
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдордиреЗ рдлреАрдЪрд░ рд╕реЗрдЯ рд▓рд┐рдЦрдХрд░ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд▓реЗрдЦрди рдХреЛрдб рдХреА рд╡реНрдпрд░реНрде рд╢реИрд▓реА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдпрд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реБрджреНрдзрддрд╛ рдХрд╛ рд▓рд┐рдЯрдорд╕ рдкрд░реАрдХреНрд╖рдг рд╣реИред
рдЕрдм рдереЛрдбрд╝рд╛ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрддред рдХрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд░реАрдиреЗ рд╕реЗ рдЖрдк рдПрдХ рдирдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдореЛрд░реА рд╕реЗрд▓ рдЪреБрдиреЗрдВред рд▓реАрдХ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдЬреИрд╕реЗ ramda.js рдореЗрдВ рд░рдЪрдирд╛ рдФрд░ рдкрд╛рдЗрдк рдХрд╛рд░реНрдп рд╣реИрдВред рдХрдореНрдкреЛрдЬрд╝рд┐рд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рджрд╛рдПрдБ рд╕реЗ рдмрд╛рдПрдБ, рдФрд░ рдкрд╛рдЗрдк рд╕реЗ рдмрд╛рдПрдБ рд╕реЗ рджрд╛рдПрдБ рд▓рд┐рдЦреЗрдВред рд╣рдорд╛рд░реЗ рд░рдЪрдирд╛ рд╕рдорд╛рд░реЛрд╣ рд░рдореНрджрд╛ рд╕реЗ рдкрд╛рдЗрдк рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдЪрдирд╛ рдХрд╛рд░реНрдп рд╣реИрдВ рд░рдЪрдирд╛ рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рдФрд░ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдмрдВрдз рд╣реИрдВред рдпрджрд┐ рдкрд╛рдардХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдПрдХ рд▓реЗрдЦ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдПрдлрдкреА рдХреЗ рд╕рднреА рдореМрдЬреВрджрд╛ рдЕрдиреБрдмрдВрдзреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ, рдореИрдВ рдЗрд╕реЗ рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдкрдврд╝реВрдВрдЧрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдПрдХ рдкреНрд▓рд╕ рд▓рдЧрд╛рдКрдВрдЧрд╛!
рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ
рдПрд░рд┐рдЯреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЪрд░рдг рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рднреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ, рд╣рдордиреЗ рд░рдЪрдирд╛, рдХрд░реА рдФрд░ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдмреЗрд╢рдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░, рдЖрдк рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рджреЗрд╢реА рдЬреЗрдПрд╕ рдкрд░ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдПрдлрдкреА рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рд╡рд╛рд▓реЗ рдкрд╛рдардХреЛрдВ рдХреЛ рд╕рдордЭ рдореЗрдВ рди рдЖрдП рдХрд┐ рдпреЗ рддрдХрдиреАрдХ рд╣реБрдб рдХреЗ рддрд╣рдд рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред
рдореИрдВрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╢реБрджреНрдзрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрдерди - рдЫрджреНрдо рдХреЛрдбрд░реЗрд╡ рдХрд╛ рддрд░реАрдХрд╛ рдЪреБрдирд╛ред
рд╡реИрд╕реЗ, рдЖрдк palindromes рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЗрдиреЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ, рдкрддреНрд░ рд╕реЗрдЯ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреЗрдВ рдЬрд╣рд╛рдВ рд░реЗрдЦрд╛ рдкреИрд▓рд┐рдВрдбреНрд░реЛрдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдЖрдкрдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ред
рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:
replaceAllNotWordSymbolsToEmpltyGlobal, toLowerCase,
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдб рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ!
рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦ рддрдХред