Ngày 2 Loops giải pháp hackerrank javascript

Nhiệm vụ. Về cơ bản, hãy học mọi thứ đã học cho đến thời điểm này trong #30daysofcode để hoàn thành bài tập. Mục tiêu yêu cầu các chuỗi đi qua các hàm và kết thúc xuất ra dưới dạng một chuỗi trong đó các chữ cái chẵn của chuỗi (bắt đầu bằng 0) được in trước, sau đó là ký tự khoảng trắng và sau đó là các chữ cái lẻ của chuỗi. Vì vậy, “Hacker” (012345) xuất hiện dưới dạng “Hce akr” trong đó các chữ cái bên trái là số chẵn và bên phải là số lẻ

Quá trình. Lấy các chuỗi đã cho (đầu vào) và biến chúng thành một mảng. Bản trình diễn được cung cấp trong chuỗi “2 Hacker Rank” (mỗi từ được phân tách bằng \n dòng mới). Sau đó, đẩy từng ký tự thành một chuỗi chẵn hoặc lẻ tùy thuộc vào số của nó (bắt đầu từ 0). Toàn bộ vấn đề này khó khăn hơn nhiều so với tôi nghĩ

Đầu tiên, đây là mã của tôi sẽ được giải thích chi tiết bên dưới

function processData(input) {
    //Ie: "Hacker" and  "Rank" becomes:
    //"Hce akr" even values - odd values [H, a, c, k, e, r] equals [0, 1, 2, 3, 4, 5]
    //"Rn ak" even values - odd values [R, a, n, k] equals [0, 1, 2, 3]
    var myArray = input.split("\n"); //Splitting string between each newline into myArray values.
    //input is: "2\nHacker\nRank". myArray = [[2], ["Hacker"], ["Rank"]], [[0], [1], [2]]
    var evenChar = "";
    var oddChar = "";

    for (var i = 1; i < myArray.length; i++){ //Starting from 1 (Hacker) to length of array (3 values) & incrementing by 1.
        for (var j = 0; j < myArray[i].length; j++) {//j is counting but array is already set to start at "Hacker" element.
            if (j%2 == 0) { //If j mod 2 equals 0, that means it's an even number.
                evenChar += myArray[i][j]; //Therefore, add value to evenChar string.
            } else {
                oddChar += myArray[i][j]; //If odd, add value to oddChar string.
            }
        }
        console.log(evenChar + " " + oddChar);
        evenChar = "";
        oddChar = "";
    }
}

Bắt đầu từ đâu… Mảng là một điểm yếu của tôi và do đó, tôi đã phải tự giải thích rất nhiều về mã để nắm bắt cách thức hoạt động của nó. Điều tôi thấy tốt nhất là chỉ cần viết ra rất nhiều bình luận (đã xem ở trên) cũng như một lời giải thích khác thực sự liệt kê ra kết quả của những vòng lặp for này

Đây là một dòng phân tích cho dòng

Để tham khảo, “đầu vào” được điền bằng “2\nHacker\nRank” cho trường hợp thử nghiệm mặc định trên HackerRank

var myArray = input.split("\n"); 

myArray được khởi tạo với sự phân tách đầu vào ở mỗi \n
myArray do đó trông như thế này [“2”, “Hacker”, “Rank”]. Nó có thuộc tính độ dài là 3. “2” là phần tử 0, “Hacker” là 1 và “Xếp hạng” là 2 hoặc [0, 1, 2]

    var evenChar = "";
    var oddChar = "";

Khởi tạo evenChar và OddChar mà chúng ta sẽ sử dụng để xuất các chuỗi chẵn và lẻ sau này

for (var i = 1; i < myArray.length; i++){ 

Bắt đầu từ i = 1, lặp lại cho đến khi tôi không còn nhỏ hơn myArray. Chiều dài là 3. Điều này có nghĩa là chúng tôi sẽ lặp qua hai lần. Một lần khi i = 1 và sau đó khi i = 2. Xem phần “Đầu ra” để biết thêm chi tiết về kết quả của các vòng lặp này

Ghi chú. i được đặt thành 1 vì chúng tôi không muốn truy cập mục đầu tiên trong mảng (mục 0) là “2” cho mục đích của vấn đề này. Họ chỉ muốn đầu ra cho văn bản Hacker Rank

for (var j = 0; j < myArray[i].length; j++) {

Bây giờ, khi tôi đang ngồi ở vị trí 1 (hoặc 2 trong vòng lặp tiếp theo), bắt đầu j ở 0 và tiếp tục vòng lặp for cho đến khi j không nhỏ hơn myArray[i]. chiều dài. Ví dụ: myArray[i]. độ dài đầu tiên sẽ kết thúc dưới dạng myArray[1]. độ dài và đó là 6 vì myArray[1] là “Hacker” và độ dài của chuỗi đó là 6 ký tự

if (j%2 == 0) { 

Khi chúng ta đếm qua các ký tự của “Hacker” (và sau này là “Rank”), chúng ta phải kiểm tra xem chúng là chẵn hay lẻ. Điều này được thực hiện với câu lệnh if này. Nếu j%2 = 0 thì là số chẵn. Nếu j%2. = 0 thì là số lẻ

evenChar += myArray[i][j]; 

Nếu đúng, myArray[i][j] được thêm vào chuỗi evenChar. Chúng tôi đặc biệt thêm một chữ cái tại một thời điểm từ phần tử mảng đã cho. Ví dụ: trong lần chạy đầu tiên, myArray[1][0], cung cấp cho chúng tôi cụ thể “H” trong “Hacker”. 1%1 == 0 kiểm xuất

Ghi chú. Đếm bắt đầu bằng 0. Ban đầu tôi đã bối rối vì tôi muốn gắn thẻ H là một giá trị lẻ, nhưng nó lại là 0

else oddChar += myArray[i][j];{

Nếu không đúng, thì chúng ta có một giá trị lẻ trong tay và do đó cần thêm ký tự đó vào chuỗi OddChar. Ví dụ: trong lần chạy thứ hai của vòng lặp for lồng nhau, myArray[1][1], vòng lặp này cung cấp cụ thể cho chúng tôi “a” trong “Hacker”. 1%2. ==0

________số 8_______

Cuối cùng, phần dễ nhất. In ra chẵnChar, dấu cách, lẻChar. Điều này sẽ cho chúng tôi thấy “Hck akr” cho đầu vào ban đầu của “Hacker” và sau đó là “Rn ak” cho “Rank”

        evenChar = "";
        oddChar = "";

evenChar và lẻChar phải được xóa vì chúng vẫn nằm trong mệnh đề for lớn hơn. Sau khi đánh giá bên trong, tôi tăng thêm 1 và chúng tôi lại tiếp tục. Nếu chúng tôi không xóa các chuỗi, chúng sẽ giữ các giá trị trước đó và thêm các chuỗi tiếp theo vào chúng

đầu ra

Bây giờ đây là những ghi chú tôi đã ghi về những gì xảy ra cụ thể với việc chạy các vòng lặp for vì nó giúp tôi hình dung ra điều gì đang xảy ra khi bắt đầu

Lần chạy đầu tiên của vòng lặp for
tôi = 1, j = 0
Chúng tôi xem myArray[1]. length và myArray[1] là “Hacker” có 6 ký tự
Nếu chúng ta ở giá trị chẵn (j%2==0 xác định xem số đó là số chẵn hay lẻ) thì… evenChar sẽ đặt myArray[i][j] vào đó

  • myArray[1][0] là chẵn (j%2 ước tính là 0), vì vậy chúng tôi thu thập “H” từ “Hacker” và thêm vào evenChar
  • myArray[1][1] là số lẻ (j%2 không đánh giá bằng 0), vì vậy chúng tôi thu thập “a” từ “Hacker” và thêm vào OddChar
  • myArray[1][2] là chẵn, vì vậy chúng tôi thu thập “c” từ “Hacker” và thêm vào evenChar
  • myArray[1][3] là số lẻ, vì vậy chúng tôi thu thập “k” từ “Hacker” và thêm vào OddChar
  • myArray[1][4] là số chẵn, vì vậy chúng tôi thu thập “e” từ “Hacker” và thêm vào evenChar
  • myArray[1][5] là số lẻ, vì vậy chúng tôi thu thập “r” từ “Hacker” và thêm vào OddChar

6 không nhỏ hơn myArray[6]. độ dài để vòng lặp for này kết thúc. Chúng tôi nhận được một bản in của chẵnChar lẻChar. evenChar và OddChar bị xóa vì chúng sẽ cần giữ các giá trị cho "Xếp hạng" tiếp theo

Lần chạy thứ 2 của vòng lặp for (i = 2; 2 < myArray. Chiều dài (là 3);
j (0) < myArray[2]. chiều dài trong đó chiều dài hiện là 4, đại diện cho "Xếp hạng"

  • myArray[2][0] là chẵn, vì vậy chúng tôi thu thập “R” từ “Rank” và thêm vào evenChar
  • myArray[2][1] là số lẻ, vì vậy chúng tôi thu thập "a" từ "Xếp hạng" và thêm vào OddChar
  • myArray[2][2] là chẵn, vì vậy chúng tôi thu thập “n” từ “Rank” và thêm vào evenChar
  • myArray[2][3] là số lẻ, vì vậy chúng tôi thu thập “k” từ “Rank” và thêm vào OddChar

Câu lệnh for ban đầu cũng không chạy lại, vì i (hiện đã tăng lên 3) không phải < myArray. chiều dài (là 3)