아마도 화재 위험
코드 출현 2015 6일차
18일이 아닌 이유는 무엇입니까?
1 부
라이트 그리드 퍼즐? 그게 무슨 뜻인지 알잖아!
for
예상치 못한 규칙 변형의 경우 규칙을 다시 확인합니다.
예상치 못한 사항:
이 퍼즐을 풀기 위해 사용할 도구
다음 도구를 사용하여 이 프로그램을 작성할 시간입니다.
Array
명령 유형을 결정하는 방법regex
각 직사각형 경계new Array()
1000x1000 그리드 생성for
각 명령에 대한 루프가 표시등을 조작합니다작동하는 알고리즘 작성
1000x1000 그리드 생성:
let grid = new Array(1000)
.fill(null)
.map(
el => new Array(1000)
.fill(null)
.map(el => 0)
)
지침 목록을 통한 각 반복 내에서 각 영역의 네 모서리를 추출합니다.
let [minX, minY, maxX, maxY] = [
...instruction.matchAll(/\d+/g)
].map(el => +el[0])
명령 유형에 따른 제어 흐름:
switch (instruction.split(' ')[1]) {
case 'on':
// turn on
break;
case 'off':
// turn off
break;
default:
// toggle
}
각 셀의 값 변경:
for (let row = minY; row <= maxY; row++) {
for (let col = minX; col <= maxX; col++) {
// turn on
grid[row][col] = 1
// turn off
grid[row][col] = 0
// toggle
grid[row][col] = 1 - grid[row][col]
}
}
켜져 있는 모든 표시등 계산:
return [
...grid.map(row => row.join('')).join('').matchAll(/1/g)
].length
모두 실행하면 정답이 생성되었습니다!
2 부
약간 실망한 느낌
네 줄의 코드 업데이트
각 셀의 값 변경:
for (let row = minY; row <= maxY; row++) {
for (let col = minX; col <= maxX; col++) {
// turn on
grid[row][col]++
// turn off
grid[row][col] = grid[row][col] == 0 ? 0 : grid[row][col] - 1
// toggle
grid[row][col] += 2
}
}
켜져 있는 모든 표시등 계산:
return grid.reduce(
(total, row) => total += row.reduce(
(sum, brightness) => sum + brightness, 0
), 0
)
예상대로 정답을 생성했습니다!
해냈어!!
나는 이미 18일차가 좀 더 어렵다는 것을 알고 있습니다.
나는 여전히 이 이틀 동안 별 4개를 모두 얻을 수 있기를 희망합니다!
Reference
이 문제에 관하여(아마도 화재 위험), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/probably-a-fire-hazard-2a8b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)