투명 종이 접기
코드 2021의 출현 13일차
시뮬레이터를 사용해보십시오
X에 대해 풉니다. 여기서:
X = an eight-letter code
입력:
그것은 나타낸다
x,y
좌표 목록 접는 요령?
...#..#..#. #.##.|#..#. ##### O
....#...... #...#|..... #...#
........... .....|#...# #...#
#.......... #...#|..... #...#
...#....#.# .#.#.|#.### #####
........... .....|..... .....
........... ^ .....|..... .....
----------- |
........... | <<---
........... |
.#....#.##.
....#......
......#...#
#..........
#.#........
초기 알고리즘 과제
너비와 높이
2 * 2 + 1 = 5
; 끔찍한 시간 및 공간 복잡성으로 각 '접기' 수행
Setup:
Create a 2D array
Fill it with `.` to indicate transparent cells
For each coordinate, update the corresponding cell's value in the array to `#` to indicate a dot
Fold:
If instruction is to fold vertically, bottom-over-top:
For each row in the array (below the fold line)
For each cell in the row
If the value in the cell equally far from - and on the opposite side of - the fold line has a #:
Continue
Else if it has a . and the value in this cell has a #:
Replace the cell's value with this one's
Copy the array, including only the first half of rows
If instruction is to fold horizontally, right-over-left:
For each row in the array
For each cell in the row (right of the fold line)
If the value in the cell equally far from - and on the opposite side of - the fold line has a #:
Continue
Else if it has a . and the value in this cell has a #:
Replace the cell's value with this one's
Copy the array, including only the first half of cells in each row
이것은 내 입력에 대한 정답을 생성하지 못했습니다.
나는 파트 1에 대한 답을 생성하는 다른 알고리즘을 생각할 수 없었습니다. 한 번 접은 후 페이지의 점 수를 결정합니다.
웅변적인 솔루션에 대한 간략한 검색
너비와 높이를 잊어 버리십시오.
이 문제를 풀기 위해 용지의 너비와 높이를 알 필요는 없습니다!
2D 배열 추적은 잊어라
명령 축을 기반으로 각 쌍에서 올바른 좌표의 제자리 업데이트를 수행할 수 있습니다!
fold
는 가상의 종이의 너비와 길이에 관계없이 동일한 N 연산입니다 fold
이후에 용지 크기는 일련의 점으로 구성된 8개의 대문자를 포함할 만큼 충분히 작아서 렌더링하는 데 전혀 '비용'이 들지 않습니다현명한 방법으로 접기 수행
If the fold is along the x axis (right over left):
If the x coordinate is greater than the midpoint's value:
Update the x coordinate's value to the difference of:
The midpoint's value and
The absolute value of the result from subtracting:
The x coordinate's value from the midpoint's value
If the fold is along the y axis (bottom over top):
If the y coordinate is greater than the midpoint's value:
Update the y coordinate's value to the difference of:
The midpoint's value and
The absolute value of the result from subtracting:
The y coordinate's value from the midpoint's value
복잡해 보이지만 간단하게 표현하면 다음과 같다.
target_xy = (this_xy > coord) ? coord - Math.abs(coord - this_xy) : target_xy
종이 접기를 실시간으로 관찰
#
접기dots
가 나타납니다.시뮬레이터를 사용해보십시오
교훈
Reference
이 문제에 관하여(투명 종이 접기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/transparent-origami-29k5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)