练习 - 使用维度数组和函数查找密码

Posted

技术标签:

【中文标题】练习 - 使用维度数组和函数查找密码【英文标题】:Exercise - find a passcode using dimensional arrays and function 【发布时间】:2022-01-19 19:52:21 【问题描述】:

我被困在这个问题上:

编写一个名为 getValidPassword 的函数,它接受一个二维数组作为参数。

第一个数组中的每个条目代表一个密码。您需要找到没有奇数的密码并从您的函数中返回该密码。 这是一个例子:

var loggedPasscodes =[
[1, 4, 4, 1],
[1, 2, 3, 1],
[2, 6, 0, 8],
[5, 5, 5, 5],
[4, 3, 4, 3]
];
getValidPassword(loggedPasscodes) // returns the array: [2, 6, 0, 8]

尝试过这种方式,但错误消息显示:>>>>代码不正确 Function getValidPassword is not working as required." [2,6,0,8].

`var loggedPasscodes=[
    [1, 4, 4, 1],
[1, 2, 3, 1],
[2, 6, 0, 8],
[5, 5, 5, 5],
[4, 3, 4, 3],
];
var getValidPassword = function(getPassword)
var passcode = [];
var cache = [];
for (var i = 0; i < getPassword.length; i++)
for (var j = 0; j < getPassword[i].length; j++)
if(getPassword[i][j] % 2 === 0)           cache.push(getPassword[i][j]);

else break;

if(getPassword[i].length === cache.length)
passcode= cache.slice();



return passcode;
;
console.log('[' + getValidPassword(loggedPasscodes) + ('') + ']');`

还有这个:

function getValidPassword(loggedPasscodes) 
    return loggedPasscodes.filter(passcode => passcode.every(n => n % 2 === 0));
;

let loggedPasscodes =[
    [1, 4, 4, 1],
    [1, 2, 3, 1],
    [2, 6, 0, 8],
    [5, 5, 5, 5],
    [10, 2, 4, 42],
    [4, 3, 4, 3]
];

console.log(getValidPassword(loggedPasscodes));
and


function getValidPassword(loggedPasscodes) 
    for (let i = 0; loggedPasscodes.length > i; i++) 
        let passcode = loggedPasscodes[i];
        let temImpar = false;
        for (let j = 0; passcode.length > j; j++) 
            if (passcode[j] % 2 !== 0)   // ímpar
                temImpar = true;
                 números)
                break;
            
        
        if (! temImpar) 
            return passcode; 
    
;



 let loggedPasscodes =[
        [1, 4, 4, 1],
        [1, 2, 3, 1],
        [2, 6, 0, 8],
        [5, 5, 5, 5],
        [4, 3, 4, 3]
    ];
    
    console.log(getValidPassword(loggedPasscodes)); // [2, 6, 0, 8

]

还有这个:

function getValidPassword(loggedPasscodes) 
let codes = [];
for (let i = 0; loggedPasscodes.length > i; i++) 
    let passcode = loggedPasscodes[i];
    let temImpar = false;
    for (let j = 0; passcode.length > j; j++) 
        if (passcode[j] % 2 !== 0)   // ímpar
            temImpar = true;
           
            break;
        
    
    if (! temImpar) 
        codes.push(passcode); 
    

return codes;
;

let loggedPasscodes =[
    [1, 4, 4, 1],
    [1, 2, 3, 1],
    [2, 6, 0, 8],
    [5, 5, 5, 5],
    [4, 3, 4, 3]
];

console.log(getValidPassword(loggedPasscodes))

这个:

function getValidPassword(loggedPasscodes) 
    return loggedPasscodes.find(passcode => passcode.every(n => n % 2 === 0));
;

let loggedPasscodes =[
    [1, 4, 4, 1],
    [1, 2, 3, 1],
    [2, 6, 0, 8],
    [5, 5, 5, 5],
    [4, 3, 4, 3]
];

console.log(getValidPassword(loggedPasscodes)); // [2, 6, 0, 8]

还可以尝试复制类似以下示例的内容:

function retornaNNumerosPares(n) 
let numerosPares = [];
for (let i = 0; numerosPares.length < n; i++) 
    if (i % 2 == 0) 
        numerosPares.push(i);
    

return numerosPares;

console.log(retornaNNumerosPares(5));

但以上都不起作用。你能帮帮我吗,我几乎完成了所有的练习。

你能帮忙吗?

【问题讨论】:

第一个正在工作,最短的也是。问题是什么? 问题是“编写一个名为 getValidPassword 的函数,它以一个二维数组作为参数。第一个数组中的每个条目代表一个密码。您需要找到没有奇数的密码并返回该密码从你的函数。这是一个例子: var loggedPasscodes =[ [1, 4, 4, 1], [1, 2, 3, 1], [2, 6, 0, 8], [5, 5, 5, 5 ], [4, 3, 4, 3] ]; getValidPassword(loggedPasscodes) // 返回数组:[2, 6, 0, 8] 是的,但您的代码有效。也许通过创建一个新数组而不是采用给定数组之一是一个问题,谁知道呢, 【参考方案1】:

我首先检查每个数组的第一个值以剔除不感兴趣的值。任何匹配都会执行我的第二个循环,一旦检测到它甚至会被取消。

如果完全匹配,您将返回结果显示在评论中或推送它并继续查找更多代码。

let loggedPasscodes = [
  [1, 4, 4, 1],
  [1, 2, 3, 1],
  [2, 6, 0, 8],
  [5, 5, 5, 5],
  [4, 3, 4, 3]
];

function getValidPassword(loggedPasscodes) 
  let Codes = [];
  for (let i = 0; i < loggedPasscodes.length; i++) 
    console.log("Read Array:", i);
    if (loggedPasscodes[i][0] % 2 == 0)  // Check if first value is even
      let GoodCode = true;
      for (let x = 1; x < 4; x++)  // Let's fast check the array now
        if (loggedPasscodes[i][x] % 2 != 0) 
          GoodCode = false;
          break; // Break if it's a waste of time (odds)
        
      
      //if (GoodCode == true) Codes.push(loggedPasscodes[i]); // Build our array if there's more codes even.
      if (GoodCode == true) return loggedPasscodes[i];
    
  
  return Codes;
;
console.log(getValidPassword(loggedPasscodes)); // [2, 6, 0, 8]

【讨论】:

【参考方案2】:

快速的方法会抓住一切机会结束不必要的循环。

这种方法迭代代码数组并通过检查不需要的数字来迭代代码,然后执行外循环的继续,否则在内循环结束时返回找到的数组。

const
    getValidPassword = codes => 
        outer: for (const code of codes) 
            for (const value of code) if (value % 2) continue outer;
            return code;
        
    ,
    loggedPasscodes = [[1, 4, 4, 1], [1, 2, 3, 1], [2, 6, 0, 8], [5, 5, 5, 5], [4, 3, 4, 3]];

console.log(getValidPassword(loggedPasscodes));

【讨论】:

这个终于成功了!非常感谢您的帮助!

以上是关于练习 - 使用维度数组和函数查找密码的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助编写一个函数来查找 N 维数组 C++ 中的最大值和最小值

Python - cdist 函数中数组的维度问题

剑指offer-3.二维数组中查找

Numpy 数组:连接展平和添加维度

Numpy,沿数组维度应用函数列表

数组扩张一个维度 python