진공 상태의 완벽한 구형 주택
코드 출현 2015 3일 차
1 부
Set()
마지막 4방향 퍼즐
N
, E
, S
, W
네 방향 중 하나를 나타냅니다.X
및 Y
축모든 준비가 된 것 같습니다()
Set()
를 사용하여 방문한 고유한 X|Y
위치Set()
의 항목 수를 확인합니다.자바스크립트 내 알고리즘:
let directions = { '^': [-1,0], '>': [0,1], 'v': [1,0], '<': [0,-1] }
let houses = new Set()
let location = [0,0]
houses.add(location.join('|'))
input.forEach(char => {
location = [
location[0] + directions[char][0],
location[1] + directions[char][1],
]
houses.add(location.join('|'))
})
return houses.size
정답을 생성했습니다!
파트 1, 1년 전
이것은 처음에 이 퍼즐을 풀었을 때 JavaScript에서 작동하는 전체 알고리즘이었습니다.
let houses = { '0,0': 1 }
let x = 0, y = 0
input.split("").forEach(dir => {
if (dir == "^") {
y -= 1
} else if (dir == ">") {
x += 1
} else if (dir == "v") {
y += 1
} else if (dir == "<") {
x -= 1
}
if (!houses.hasOwnProperty(`${x},${y}`)) {
houses[`${x},${y}`] = 0
}
houses[`${x},${y}`] += 1;
})
return Object.values(houses).length
Set()
s 내, 내가 얼마나 멀리 왔는지!
2 부
모듈로는 이것을 쉽게 만듭니다
modulo
를 사용하면 짝수는 다음과 같습니다.Number % 2 == 0
홀수는 다음과 같습니다.
Number % 2 == 1
따라서:
[0,1]
Set()
를 사용하여 [0,0]부터 시작하여 결과 절반 크기 목록을 처리합니다.자바스크립트 내 알고리즘:
let directions = { '^': [-1,0], '>': [0,1], 'v': [1,0], '<': [0,-1] }
let houses = new Set()
let paths = [0,1]
paths.forEach(i => {
let location = [0,0]
houses.add(location.join('|'))
input
.filter((_, index) => index % 2 == i)
.forEach(char => {
location = [
location[0] + directions[char][0],
location[1] + directions[char][1],
]
houses.add(location.join('|')
)
})
})
return houses.size
정답을 생성했습니다!
파트 2, 1년 전
이것은 처음에 이 퍼즐을 풀었을 때 JavaScript에서 작동하는 전체 알고리즘이었습니다.
let houses = { '0,0': 2 }
let x1 = 0, y1 = 0, x2 = 0, y2 = 0;
input.split("").forEach((dir, idx) => {
if (idx % 2 == 1) {
if (dir == "^") {
y2 -= 1
} else if (dir == ">") {
x2 += 1
} else if (dir == "v") {
y2 += 1
} else if (dir == "<") {
x2 -= 1
}
if (!houses.hasOwnProperty(`${x2},${y2}`)) {
houses[`${x2},${y2}`] = 0
}
houses[`${x2},${y2}`] += 1;
} else {
if (dir == "^") {
y1 -= 1
} else if (dir == ">") {
x1 += 1
} else if (dir == "v") {
y1 += 1
} else if (dir == "<") {
x1 -= 1
}
if (!houses.hasOwnProperty(`${x1},${y1}`)) {
houses[`${x1},${y1}`] = 0
}
houses[`${x1},${y1}`] += 1;
}
})
return Object.values(houses).length
modulo
를 사용할 만큼 요령이 있었습니다! forEach()
코드의 중복을 줄일 수 있을 만큼 충분히 정통하지 않습니다실력의 증명, 지식의 축적, 알고리즘의 성장!
해냈어!!
뒤를 돌아보고 아마추어 코드처럼 느껴지는 것을 보는 것만큼 보람 있는 일은 거의 없었습니다.
Reference
이 문제에 관하여(진공 상태의 완벽한 구형 주택), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/perfectly-spherical-houses-in-a-vacuum-1bc7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)