функция для записи базовых 7 слов, как стиль двоичного счетчика - PullRequest
2 голосов
/ 25 ноября 2010

Мне нужна функция, аналогичная описанной здесь ...

JS-функция для записи слова, стиль двоичного счетчика

... но используя базу 7 (или другие) для генерации (подсчета) букв от A до G Вот так ...

---a  
---b  
---c  
---d  
---e  
---f  
---g  
--aa  
--ab  
--ac  
--ad  
--ae  
--af    

etc. up to gggg  

Есть ли простой способ изменить одну из этих функций, чтобы это произошло?

p.s. Это очень круто ...
Они использовали ...

var iterations = Math.pow(2,str.length)   
and Math.pow(string.length,2)  

Они оба работают, но только потому, что длина строки была 4, а основание было 2
непреднамеренно правильный

i.e 4^2=16 2^4=16   

Если была использована любая другая длина строки, одна из них становится неправильной.

i.e. 2^10=1024 10^2=100   

Ответы [ 2 ]

1 голос
/ 25 ноября 2010
function change_num(num,base) {
    var lets = 'abcdefghijklmnopqrstuvwxyz';
    lets = lets.split('');
    if (num / base < 1) {
        return lets[num];
    }
    if (num / (Math.pow(base,2)) < 1) {
        return lets[Math.floor(num/base)] + lets[(num % base)];
    }
    if (num / (Math.pow(base,3)) < 1) {
        var numreturn;
        numreturn = lets[Math.floor(num/(Math.pow(base,2)))];
        numreturn += lets[Math.floor((num%Math.pow(base,2))/base)];
        numreturn += lets[(num % base)];
        return  numreturn;
    }
    if (num / (Math.pow(base,4)) < 1) {
        var numreturn;
        numreturn =  lets[Math.floor(num/Math.pow(base,3))];
        numreturn += lets[Math.floor(num%Math.pow(base,3)/(Math.pow(base,2)))];
        numreturn += lets[Math.floor((num%Math.pow(base,2))/base)];
        numreturn += lets[(num % base)];
        return numreturn;
    }
    if (num / (Math.pow(base,5)) < 1) {
        var numreturn;
        numreturn = lets[Math.floor(num/Math.pow(base,4))];
        numreturn += lets[Math.floor(num%Math.pow(base,4)/(Math.pow(base,3)))];
        numreturn += lets[Math.floor(num%Math.pow(base,3)/(Math.pow(base,2)))];
        numreturn += lets[Math.floor((num%Math.pow(base,2))/base)];
        numreturn += lets[(num % base)];
        return numreturn;
    }

}

Работает на любой базе. Не мог бы потрудиться написать рекурсивную функцию, поэтому сделал это трудным путем, вы, вероятно, можете сделать вывод, что я делаю.

1 голос
/ 25 ноября 2010

Может быть, это дает первый старт: Рабочая демонстрация

В основном это просто берет число и преобразует его в число 7 базы:

var map = 'abcdefg';

var n = 13
var out = '';
if(n == 0) out = map.charAt(0) + out;
while (n > 0) {
    out = map.charAt(n % 7) + out;
    n = Math.floor(n / 7);    
}   
// gives "bg" for 13

Это подразумевает поддержание нормального счетчика в десятичной системе и преобразование каждого числа.

Обратите внимание, что aa в этой системе не завершается, так как a отображается на 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...