1

我已經在JavaScript中解決了以下測驗,並在下面附加了測驗和我的解決方案。 我不覺得正確解決問題,因爲我知道我錯過了如何調用功能! 任何人都可以幫助我更簡單的方式使用調用函數的方法重寫代碼?或者任何一種最簡單的方式都歡迎!測驗:轉換爲二進制數字,用JavaScript重疊數組

測驗:

鑑於三個輸入:兩個陣列與包含的十進制數和它們的長度的數目相同的長度, 轉換在兩個陣列的數字爲二進制數,像這樣:

01001 
10100 
11100 
10010 
01011 

11110 
00001 
10101 
10001 
11100 

然後,通過重疊在彼此之上,使得具有從每個陣列1S一個新的數組結合兩個陣列, (1個覆蓋0),像這樣:

11111 
10101 
11101 
10011 
11111 

作爲最後的步驟中,轉換該陣列爲具有#S-和的條件下空格的格式(#= 1,空間= 0) 最後,你應該得到這作爲輸出>

[ '#####', '# # #', '### #', '# ##', '#####' ] 

我的解決方案:

function solution(n, arr1, arr2) { 
    var convArr1 = arr1.map(function(numten) {  
     return numten.toString(2); 
    }) 
    var convArr2 = arr2.map(function(numten) { 
     return numten.toString(2); 
    }) 
    var newArr1 = convArr1.map(function(binNum) { 
     if (binNum.length != n) { 
      let zero = '0'; 
      for (let i = 1; i < n - binNum.length; i++) { 
       zero = zero + 0; 
      } 
      binNum = zero + binNum; 
      return binNum; 
     } else { 
      return binNum; 
     }  
    }) 
    var newArr2 = convArr2.map(function(biNum) { 
     if (biNum.length != n) { 
      var zero = '0'; 
      for (let i = 1; i < n - biNum.length; i++) { 
       zero = zero + '0'; 
      } 
      biNum = zero + biNum; 
      return biNum; 
     } else { 
      return biNum; 
     }  
    }) 
    // console.log(newArr1, newArr2); 
    var answer = ["", "", "", "", ""]; 
    var element = ""; 
    function compare(a, b) { 
     for (var i = 0; i < a.length; i++) { 
      if (a[i] === '1' || b[i] === '1') { 
       answer[i] = answer[i] + '#'; 
      } else { 
       answer[i] = answer[i] + ' '; 
      } 
     } 
    } 
    var compareArr = []; 

    for (var i = 0; i < n; i++) { 
     var numInArr1 = newArr1[i]; 
     var numInArr2 = newArr2[i]; 
     compare(numInArr1, numInArr2); 
    } 
    return answer; 
} 

console.log(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])); 

回答

0

你所說的 '1個覆蓋0' 什麼是二元運算符。 | operator (pronounce 'OR')取2個十進制數的二進制表示,然後比較每個二進制數(=每個位),以產生一個1,如果其中一個位或它們兩者都等於1的話。

您正在詢問一種方法'召回'或重新使用用於轉換arr1的功能來轉換arr2。但是這兩種轉換並不是真的需要。使用|操作員不需要轉換十進制數字,因爲這是計算機內部使用的。

你可以試試這個...

function solution (n, arr1, arr2) { 

    result = arr1.map(function (element, index) { 
     // take the element and the relative element of the other array 
     // and use the binary OR operator 
     return element | arr2[index]; 
    }).map(function (element) { 
     // make a string of the required number of spaces ... 
     // and add our binary pattern of replacements for 1's and 0's 
     binary = " ".repeat(n) + element.toString(2).replace(/1/g,'#').replace(/0/g,' '); 

     // truncate to return only the last n bits 
     return binary.slice(-n); 

    }); 
    return result; 
} 

console.log(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])); 

很多發生在同一arr1陣列。這就是爲什麼我一個接一個地寫了.map。這被稱爲方法鏈接。第一個映射方法需要arr1,然後生成一個新的數組。當然,該數組也有我們可以調用的.map方法。第一張地圖用於組合arr1和arr2。第二個地圖調用用於將結果轉換爲數組,其模式爲#SPACE

在第一張地圖調用回調函數需要一個額外的參數:

arr1.map(function (element, index) { 
     // take the element and the relative element of the other array 
     // and use the binary OR operator 
     return element | arr2[index]; 
}) 

我們需要一個映射過去,因爲我們需要arr2陣列內的相同元素每個元素的索引號。

0

在JavaScript中,我們可以在小數使用位操作,然後通過.toString(2)功能解析這些回二進制:

function solution(n, arr1, arr2) { 
 
    return Array.from(arr1.keys()) 
 
     .map(i => { 
 
      const num = arr1[i] | arr2[i]; 
 
      const padded = "0".repeat(n) + num.toString(2); 
 
      const binary = padded.substr(padded.length - n); 
 
      return binary.split("") 
 
       .map(c => c === "0" ? " " : "#") 
 
       .join(""); 
 
     }); 
 
} 
 
console.log(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28])); 
 
// Out: 
 
// ["#####", "# # #", "### #", "# ##", "#####"]

1

這裏是一個容易解決的問題:)

function solution(num, inputOne, inputTwo) { 
 
    return Array(num).fill(0).map(function(un, index) { 
 
    return (inputOne[index] | inputTwo[index]).toString(2).replace(/0/g, ' ').replace(/1/g, '#'); 
 
    }); 
 
} 
 

 
console.log(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]));

+0

爲了簡單起見,我提高了您的解決方案,但我鼓勵您將'function solution(){...}'完全封閉,這意味着您應該在函數內部進行字符串替換。 –

+1

謝謝!我已更新您的建議:) – Eladian

相關問題