function getPINs(observed) {
let objPin = new GetPin(observed),
_getVal= objPin.value
if(objPin.observedLength <= 1) return objPin.kuNum[observed === '0'? 10 : observed]
observed.split('').map(val => {
val = val === '0' ? 10 : val
_getVal.key.leng.push(objPin.kuNum[val].length)
_getVal.key.nums.push(objPin.kuNum[val])
})
let vals = _getVal.max()
let dygx = []
let resArr = [[],[],[],[],[],[],[],[]]
_getVal.key.leng.map((res,index) => {
objPin.vs.push([])
vals = vals/_getVal.key.leng[index]
objPin.vs[index] = vals
})
let arr = Array.from(objPin.vs).reverse()
_getVal.key.nums.map((val, index)=>{
dygx.push({name:'',int:[]})
val.map((oVal,oIndex) =>{
// console.log(`${oVal}+${index}+${oIndex}`)
for(let i = 0; i<objPin.vs[index]; i++){
dygx[index].name = arr[index]
dygx[index].int.push(oVal)
}
})
})
console.log(resArr)
dygx.map((res,index) => {
for(let i = 0; i<res.name; i++){
resArr[index] = resArr[index].concat(res.int)
}
})
let values = []
for(let i = 0; i< resArr[0].length; i++){
switch(objPin.observedLength){
case 2:
values.push(resArr[0][i]+resArr[1][i])
break
case 3:
values.push(resArr[0][i]+resArr[1][i]+resArr[2][i])
break
case 4:
values.push(resArr[0][i]+resArr[1][i]+resArr[2][i]+resArr[3][i])
break
case 8:
values.push(resArr[0][i]+resArr[1][i]+resArr[2][i]+resArr[3][i]+resArr[4][i]+resArr[5][i]+resArr[6][i]+resArr[7][i])
break
}
}
// console.log(values)
return values
}
function GetPin(observed){
this.observed = String(observed);
this.observedLength = observed.length;
this.vs = [];
this.value = {
key:{
leng:[],
nums:[]
},
whileNum:[],
isNum:[],
max:() => this.value.key.leng.reduce((a,b) => a * b),
results:[]
}
this.kuNum = [
[],
["1","2","4"],
["1","2","3","5"],
["2","3","6"],
["1","4","5","7"],
["2","4","5","6","8"],
["3","5","6","9"],
["4","7","8"],
["5","7","8","9","0"],
["6","8","9"],
["0","8"]
]
}
//专家解法
// function getPINs(observed) {
// var adjacent = [
// /* 0 */ [0, 8],
// /* 1 */ [1, 2, 4],
// /* 2 */ [1, 2, 3, 5],
// /* 3 */ [2, 3, 6],
// /* 4 */ [1, 4, 5, 7],
// /* 5 */ [2, 4, 5, 6, 8],
// /* 6 */ [3, 5, 6, 9],
// /* 7 */ [4, 7, 8],
// /* 8 */ [5, 7, 8, 9, 0],
// /* 9 */ [6, 8, 9]
// ];
// //[[2, 3, 6], [3, 5, 6, 9], [6, 8, 9]] adjacent[d][0] [2,3,6]
// return observed
// .split('')
// .map(function(d) { console.error(`${d}-----DDDDD`);return adjacent[d|0]; })
// .reduce(function(pa, da) {
// console.log(`${pa}-------<pa`)
// console.log(`${da}--------<da`)
// return da.reduce(function(pv, d) {
// console.error(`${pv}---------<pv`)
// console.error(`${d}----------<d`)
// return pv.concat(pa.map(function(p) {
// console.info(`${p}-----------<p`)
// console.info(`${'' + p + d}------------<++++++`)
// return '' + p + d;
// }));
// }, []);
// }, ['']);
// }
console.log(getPINs('007').sort())
console