[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()
반성하다.
나는 함수에서 나를 호출해서 순환하는 것에 익숙하지 않다.며칠 후에 다시 문제를 토론합시다.
Reference
이 문제에 관하여([checkio] Network Attack), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eiji03aero/items/60fe9bd3b640c0338613텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)