기권
이 특정 관련 질문이 있다는 것을 알고 있지만 내 질문은 무작위 구성 요소 인 두 개의 차고 문을 사용하며 실제 사건을 기반으로하고 있습니다. 지난주에 차고 ... 창의적인 주스를 흘리기 위해 머리에 타격을주는 것만 큼 좋은 것은 없습니다! ;)
배경
루카스 (15 개월 된 아들)는 차고 리모컨을 가지고 노는 것을 좋아합니다. 이 리모컨에는 왼쪽 차고 도어 용 버튼과 오른쪽 차고 도어 용 버튼이 있습니다. 두 버튼 모두 같은 방식으로 작동합니다. 한 번 누르면 도어가 열리고, 다시 누르면 중지되고, 다시 누르면 닫히고, 다시 누르면 중지됩니다.
루카스는이 리모컨을 좋아합니다. 그는 버튼 중 하나를 무작위로 누르거나 전혀 누르지 않을 것입니다. 둘 다 누르면 신호가 전송되지 않지만 하나의 버튼을 누르면 신호가 전송됩니다.
따라서 코드 골프 챌린지는 두 부분으로 나뉩니다.
1 부
1 분 동안 Lucas 임의 버튼 누름을 나타내는 60 자 길이의 문자열을 생성하십시오. 이 경우 "임의"는 "각 틱에서 각 입력의 기회가 동일 함"을 의미합니다. 문자는 다음과 같습니다.
- 0 : Lucas가 아무 버튼도 누르지 않았거나 두 버튼을 눌렀습니다. 어느 쪽이든, 신호가 전송되지 않았습니다.
- 1 : Lucas가 왼쪽 차고 문의 버튼을 눌렀습니다.
- 2 : 루카스가 오른쪽 차 고문 버튼을 눌렀습니다.
두 번째 부분
Part One에서 생성 된 스트링을 사용하여 문을 열고, 멈추고 닫는 트리거로 숫자를 사용하여 2 대의 차고를 열고 닫는 것을 시뮬레이션합니다.
내 차고 문은 매우 빠릅니다 (위의 면책 사항 참조). 버튼을 누르면 완전히 열리거나 닫히는 데 4 초가 걸립니다.
따라서 닫힌 경우 :
- 0 초 : 0 % 개방 (폐쇄); 버튼을 누르면 도어가 열리기 시작합니다
- 1 초 : 25 % 개방
- 2 초 : 50 % 개방
- 3 초 : 75 % 개방
- 4 초 : 100 % 개방, 도어 스톱
따라서 열려있는 경우 :
- 0 초 : 100 % 개방; 버튼을 누르면 도어가 닫히기 시작합니다
- 1 초 : 75 % 개방
- 2 초 : 50 % 개방
- 3 초 : 25 % 개방
- 4 초 : 0 % 열림 (닫힘), 문 정지
특정 문이 움직이면 같은 문에 대한 신호로 문이 멈 춥니 다. 그 다음에 같은 문으로 보내진 다음 신호는 반대 방향으로 움직입니다. 이전에 작동 중일 때 문이 정지되고 "정지"신호가 수신 될 때 문이 완전히 열리거나 완전히 닫히면 문은 완전 열림 또는 완전 닫힘 상태에서 "중지됨"으로 등록됩니다. 새로운 신호를 받으면 반대 방향으로 움직입니다.
이 시뮬레이션을 사용하면 두 차고 문이 처음에는 닫힌 위치에있게됩니다. 따라서 10 초의 명령 목록을보고 Lucas가 원격에서 명령을 수행하는 경우 어떻게되는지 살펴 보겠습니다.
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
산출
출력의 첫 번째 부분에는 60 부 길이의 임의의 "0", "1"및 "2"문자가 1 부에서 생성되어 표시되어야합니다. 예.
212022112021202211202120221120212022112021202211202120221120
이 문자열 아래에는 차고 문이 각 문자별로 어떻게 작동하는지에 대한 위에서 언급 한 규칙에 따라 이러한 "신호"를 처리하는 방법이 있습니다 (초마다). 초기 표시 문자열 아래에 60 개의 줄이 있어야합니다.
이러한 처리 된 각 라인은 다음과 같은 형식입니다
N: (L:X% XXXXXXX, R:Y% YYYYYYY).
- N은 각각의 임의 문자열에서 n 번째 문자이며 0, 1 또는 2 형식입니다.
- X %는 왼쪽 문을 여는 비율입니다 (패딩 없음)
- XXXXXXX는 왼쪽 문의 상태입니다. 문이 움직이지 않는 경우 (즉, 열리지 않거나 닫히지 않은 경우) "중지됨"상태가 적용됩니다. 즉, 문이 움직이지 않거나 (25 %, 50 % 또는 75 %에서만 가능) 완전히 열렸을 때 멈추었습니다 (100 % ) 또는 완전 폐쇄 (0 %)입니다. 그렇지 않으면 문이 "열림"또는 "닫음"중 하나가됩니다.
- Y %는 오른쪽 문을 여는 비율입니다 (패딩 없음)
- YYYYYYY는 오른쪽 문의 상태입니다. 문이 움직이지 않는 경우 (즉, 열리지 않거나 닫히지 않은 경우) "중지됨"상태가 적용됩니다. 즉, 문이 움직이지 않거나 (25 %, 50 % 또는 75 %에서만 가능) 완전히 열렸을 때 멈추었습니다 (100 % ) 또는 완전 폐쇄 (0 %)입니다. 그렇지 않으면 문이 "열림"또는 "닫음"중 하나가됩니다.
10 개의 "신호"및 10 개의 처리 된 라인을 사용하는 아래의 예
2120221120
2: (L:0% stopped, R:0% opening)
1: (L:0% opening, R:25% opening)
2: (L:25% opening, R:50% stopped)
0: (L:50% opening, R:50% stopped)
2: (L:75% opening, R:50% closing)
2: (L:100% stopped, R:25% stopped)
1: (L:100% closing, R:25% stopped)
1: (L:75% stopped, R:25% stopped)
2: (L:75% stopped, R:25% opening)
0: (L:75% stopped, R:50% opening)
이것은 코드 골프이므로 가장 짧은 코드가 확실한 승자가 될 것입니다. "열기", "중지됨"및 "닫기"와 같은 문구를 모두 사용하여 7 가지 문자를 사용하여이 작업을 약간 쉽게 만들었습니다.
행운을 빌어 요!
1예제에서 마지막 명령이 왼쪽 문을 75 %로 멈추지 않는 이유는 무엇 입니까?