function countVariants(codeString)
{
//Нули могут быть только вторым знаком кода,
// поэтому разобьем кодовую строку на части с разделителем 0,
// посчитаем количество вариантов в каждой из них и перемножим
var parts = codeString.split('0');
var variants = 1;
for(var i = 0; i < parts.length; i++){
var part = parts[i];
//Уберем последнюю цифру перед нулем
if(i + 1 < parts.length){
//Если перед нулем ничего нет, или перед нулем цифра больше 2
// возвращаем нуль вариантов, то есть ошибку
if(!part.length){
return 0;
} else if (+part.substr(-1) > 2) {
return 0;
}
part = part.substr(0, part.length - 1);
}
var partVariants = 1;
//Считаем количество вариантов в части
if(part.length){
partVariants = 0;
//Смотрим кол-во возможных вариантов в начале строки,
//если первые две цифры составляют число меньшее 27, то варианта два
var startOptions = 1;
if(part.length > 1 && +part.substr(0, 2) < 27) startOptions = 2;
//Для каждого из вариантов рекурсивно вызываем функцию
for(var j = 1; j <= startOptions; j++){
partVariants += countVariants(part.substr(j));
}
}
variants = variants * partVariants;
}
return variants
}
document.write(countVariants('1231012'));
2 задача:
0 мин. Запускаем вместе 7 минутные и 4 минутные.
4 мин. 4-минутные кончатся, снова их запускаем
7 мин. 7 минутные кончатся снова их запускаем
8 мин. 4 минутные кончаются, переворачиваем 7-минутные и как раз они кончатся через 1 минуту
function getHelloWorld()
{
var codesStr = '.,,.... .,,. .,,........ .,,........ .,.,. ,...,.. .,.,.........';
var codes = codesStr.split(' ');
var word = '';
for(var k in codes){
var letters = codes[k].split(',');
var charCode = '' + letters.shift().length + letters.shift().length + letters.shift().length;
word += String.fromCharCode(charCode);
}
return word;
}
0 мин. Запускаем вместе 7 минутные и 4 минутные.
4 мин. 4-минутные кончатся, снова их запускаем
7 мин. 7 минутные кончатся снова их запускаем
8 мин. 4 минутные кончаются, переворачиваем 7-минутные и как раз они кончатся через 1 минуту
Вернет 'hello w', далее по аналогии…