[checkio] Network Attack

14828 단어 JavaScript
생기도 있고 기운도 있고!
나는 반드시 해낼 수 있다!!!!!
그래서 오늘도 체크키오.
이번 문제는 인터넷에 연결된 컴퓨터 바이러스를 유출시켜 모든 컴퓨터를 손에 넣기 전의 시간을 돌려주는 것이다.원래부터 문제의 뜻을 이해하지 못했다
더욱 구체적인 설명은 다음과 같은 형식의 2차원 진열을 매개 변수로 전달하는 것이다

먼저 [0][0]의 위치에서 오른쪽 아래의 수치는 컴퓨터를 나타낸다.이번[0,8,2,1,3,2]이 컴퓨터들이란 얘기다.각 수치는 안전성의 강도를 나타내며 몇 분 안에 떨어질 수 있는 지표다.
그렇다면 다른 수치는 무엇일까, 그 컴퓨터가 다른 어느 컴퓨터와 연결되어 있는지 나타낸다.예를 들어 첫 번째 줄에서 첫 번째 컴퓨터가 인덱스 1, 3, 5의 컴퓨터와 연결되고 첫 번째 컴퓨터가 함몰되었을 때 이 연결된 컴퓨터에 대해 침략하기 시작했다.
그리고 최종적으로 완전히 공략한 수치를 돌려주면 끝이야.머리가 어지럽다.

자신의 대답

function capture(data) {

    //variables
    let tarPC = [];
    let infecteds = data[0];
    let prcsTime = 0;

    /* blueprint
    make use of kidNapper and take out the target numbers.
    checkout the index of infected computer.
    decrease the security one by one according to indexes.
    checking to see if infection completed respectively, if so, check out the infections again.
    checking to see if there are only 0s.
    */

    kidNapper(data, tarPC);
    while(notCompleted(tarPC)) {
        for (let i=0; i<tarPC.length; i++) {
            if (infecteds[i]==1 && tarPC[i]>0) {
                tarPC[i] -= 1;
            }
        }
        for (let i=0; i<tarPC.length; i++) {
            if (tarPC[i]==0) {
                infectionSeeker(data[i], infecteds);
                console.log(`here is the new infecteds -- ${infecteds}`);
            }
        }
        prcsTime+=1;
        console.log(`okay here we go again man -- ${prcsTime} times`);
    }


    //kidnapping the target numbers
    function kidNapper(tarArray, empArray) {
        for (let i=0; i<tarArray.length; i++) {
            empArray.push(tarArray[i][i]);
        }
    }

    //see if poor kid is infected 
    function infectionSeeker(tarArray, infArray) {
        for (let i=0; i<tarArray.length; i++) {
            if (tarArray[i]==1 && infArray[i]==0) {
                infArray[i] = 1;
            }
        }
    }        

    //see if completed
    function notCompleted(array) {
        for (let i of array) {
            if (i!=0) {
                return true;
            }
        }
        return false;
    }

    console.log(`${prcsTime} here is the time!`);
    return prcsTime;
}
while 내의 두 번째 for 블록은 낭비가 많습니다.
나는 몇 가지 간단하고 알기 쉬운 함수를 만드는 습관이 있는데, 이것이 도대체 좋은지 나쁜지.
이외에도 checkkio는 템플릿 소양을 지원한다.이거 편해요.

놀라운 성과

function nextStep(matrix, possible, current, infected)
{
    infected.push(current.index);

    possible.forEach(el => el.time -= current.time );

    let neighbours = matrix[current.index]
        .map((el, i) => {
            if (el) return { index: i, time: matrix[i][i] };
            return;})
        .filter(el => el);

    possible = possible.concat(neighbours).filter(el => infected.indexOf(el.index) == -1);

    if (possible.length){
        let nearest = possible.sort((a, b) => b.time - a.time).pop();

        return nearest.time + nextStep(matrix, possible, nearest, infected);
    }
    return 0;
}

function capture(data) {
    let current = {index: 0, time: 0},
        possible = [],
        infected = [];

    return nextStep(data, possible, current, infected);
}
못 보던 방법이라 데리러 왔어요.
네, 카페..filter(el=>el)브릴 값에 진짜 물건만 배열해 놓은 것 같아.

배우다


pop()
  • 매개변수를 지정하지 않으면 패턴의 마지막 요소를 추출하여 반환합니다.
  • sort((a,b)=>b-a)
  • 만약에 b-a의 값이 1 이상이면 b는 a보다 작은 부가자이고 0 이하의 b는 a보다 작으면 원형을 유지한다.
  • 반성하다.


    나는 함수에서 나를 호출해서 순환하는 것에 익숙하지 않다.며칠 후에 다시 문제를 토론합시다.

    좋은 웹페이지 즐겨찾기