isPalindrom
Проверить, является ли массив палиндромом (при обходе с любого конца порядок элементов один и тот же)
by Kate Pshidatok
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.4.5/mocha.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.4.5/mocha.min.css">
<div id="mocha">
</div>
<script>
mocha.setup('bdd');
var assert = chai.assert;
var expect = chai.expect;
</script>
<script>
describe("rotate", function() {
before(function () {
chai.config.includeStack = false;
});
describe('формат', function(){
it("объявлена", function() {
assert.isFunction(window.isPalindrom);
});
it("принимает 1 аргумент", function() {
assert.equal(isPalindrom.length, 1);
});
});
describe('проверки', function(){
function suite(name, input, expected){
it(name, function(){
assert.equal(isPalindrom(input), expected);
})
}
suite('пустой массив', [], true);
suite('А роза упала на лапу Азора', 'арозаупаланалапуазора'.split(''), true);
suite('Аргентина манит негра', 'аргентинаманитнегра'.split(''), true);
suite('четная длина, ок', [1,3,6,6,3,1], true);
suite('нечетная длина, ок', [1,3,6,-5,6,3,1], true);
suite('четная длина, не ок', [1,3,6,1,3,6], false);
suite('нечетная длина, не ок', [1,3,6,1,3,6,1], false);
suite('ловушка на идентичность', [1,3,6,6,"3","1"], false);
suite('ловушка с NaN', [1,NaN,6,6,NaN,1], true);
});
});
mocha.run();
</script>
JavaScript
function isPalindrom(array){
var str = '',
reverseStr = '';
for( var i = 0; i < array.length; ++i){
if(typeof array[0]!== typeof array[i]) return false;
str = str + array[i];
}
for(i=array.length-1; i>=0; --i){
reverseStr= reverseStr + array[i];
}
return(str === reverseStr);
}