1. 程式人生 > >嘔心瀝血演算法題——密碼發生器

嘔心瀝血演算法題——密碼發生器

// 在對銀行賬戶等重要許可權設定密碼的時候,我們常常遇到這樣的煩惱:如果為了好記用生日吧,
// 容易被破解,不安全;如果設定不好記的密碼,又擔心自己也會忘記;如果寫在紙上,擔心紙張被別人發現或弄丟了...
// 這個程式的任務就是把一串拼音字母轉換為6位數字(密碼)。
// 我們可以使用任何好記的拼音串(比如名字,王喜明,就寫:wangximing)作為輸入,程式輸出6位數字。
// 變換的過程如下:
// 第一步.把字串6個一組摺疊起來,比如wangximing則變為:
// wangxi
// ming
// 第二步.把所有垂直在同一個位置的字元的ascii碼值相加,得出6個數字,如上面的例子,則得出:
// 228 202 220 206 120 105
// 第三步.再把每個數字“縮位”處理:就是把每個位的數字相加,得出的數字如果不是一位數字,
// 就再縮位,直到變成一位數字為止。例如: 228 => 2 + 2 + 8=12 => 1 + 2=3
// 上面的數字縮位後變為:344836, 這就是程式最終的輸出結果!

function f1(str) {
   let arr = [0, 0, 0, 0, 0, 0];
   for (let i = 0; i < 6; i++) {
      for (let j = i; j < str.length; j += 6) {
         arr[i] += str.charAt(j).charCodeAt();
      }
   }
   console.log(arr);
   return arr;
}

function f2(arr) {
   let result = '';
   for (let i = 0; i < arr.length; i++) {
      let temp;
      let tempStr = arr[i] + '';
      do {
         temp = 0;
         for (let j = 0; j < tempStr.length; j++) {
            temp += parseInt(tempStr.charAt(j));
         }
         tempStr = temp + '';
      } while (temp > 9);
      result += temp;
   }
   return result;
}

let arr = f1("wangximing");
let mima = f2(arr);
console.log(mima);