다른 날, 우리 팀은 탈출 실로 갔다. 퍼즐 중 하나는 6 개의 기계식 스위치 보드로 구성되어 있으며 상자를 잠금 해제하기 위해 켜기 및 끄기의 올바른 조합을 찾아야합니다.
-v-v-v-
-v-v-v-
개발자이기 때문에 실제로 퍼즐을 푸는 것보다 2 ^ 6 = 64 조합 중 하나를 시도하는 것이 더 효율적이라고 결정했습니다. 그래서 우리는 이진 계산을 수행하기 위해 가난한 사람을 할당했습니다.
-v-v-v-
-v-v-v-
-v-v-v-
-v-v-^-
-v-v-v-
-v-^-v-
-v-v-v-
-v-^-^-
등등.
과제
위와 같이 형식이 지정된 문자열로 스위치가 모두 꺼져있는 경우 순서에 상관없이 모든 켜기 및 끄기 조합을 생성하는 프로그램을 작성하십시오.
전체 프로그램이나 함수를 작성할 수 있습니다. 따라서 프로그램은 stdin, 파일 또는 단일 문자열 인수를 통해 입력을 받아 출력을 리턴하거나 인쇄 할 수 있습니다. 리턴되면 출력이 목록 / 배열 등일 수 있습니다. 단일 문자열이 아닌. 출력이 단일 문자열 인 경우 보드는 개행으로 분리해야합니다 (트레일 개행이 허용됨).
입력 문자열은 정규식 r'((-v)+-)(\n(-v)+-)*'
과 일치하며 모든 스위치가 꺼진 보드 하나를 나타냅니다. 이는 0이 아니며 스위치가 왼쪽 정렬됨을 의미합니다. 각 행에는 같은 수의 스위치가 없을 수 있습니다.
각 출력 보드는 v가 필요에 따라 ^로 대체 될 수 있다는 점을 제외하고 입력과 정확히 동일한 형식이어야합니다. 출력 보드는 여러 줄 바꿈으로 분리 할 수 있습니다.
스위치 수는 런타임이 당연히 O (2 ^ n)이므로 코드는 어떤 배열로도 10 개 이상의 스위치에서 테스트되지 않습니다.
이것은 코드 골프이므로 바이트 수에서 가장 짧은 코드가 승리합니다.
샘플 입력 및 출력
입력:
-v-
가능한 출력 :
-v-
-^-
입력:
-v-
-v-
가능한 출력 :
-^-
-^-
-^-
-v-
-v-
-^-
-v-
-v-
더 많은 수의 스위치에 대한 답변을 확인하는 것이 매우 지루하기 때문에 여기 에 위생 검사 도구 인 Python 스크립트가 있습니다. (더 많은 테스트 사례를 원할 경우 주어진 입력 파일에서 예상되는 출력을 생성하기 위해 현재 주석 처리 된 스 니펫을 포함 시켰습니다.) 불행히도 스펙보다 입력 및 출력 측면에서 약간 덜 유연합니다. 입력 문자열을 'input'이라는 파일에 넣고 줄 바꾸기로 구분 된 출력 (죄송합니다. 목록 형식 없음)을 동일한 디렉토리의 'output'파일에 넣고 실행하십시오 python3 sanitycheck.py
.