토폴로지 표면을 표현하는 편리하고 유용한 방법은 기본 다각형을 사용하는 것 입니다. 다각형의 각면은 다른면과 일치하며 평행 또는 반 평행 일 수 있습니다. 예를 들어 다음은 원환 체 의 기본 다각형입니다 .
이것이 왜 원환 체인지 알아 내기 위해 다각형이 한 장의 종이라고 상상할 수 있습니다. 적절한 표면을 만들기 위해 해당 가장자리가 화살표와 같은 방향으로 정렬되도록 용지를 구부리고 싶습니다. 원환 체 예제의 경우, 두 개의 파란색 가장자리 (b로 표시)가 연결되도록 용지를 실린더에 넣는 것으로 시작합니다. 이제 우리는 튜브를 가져 와서 두 개의 빨간 가장자리 (a로 표시)가 서로 연결되도록 구부립니다. 우리는 원환 체라고도 불리는 도넛 모양을 가져야합니다.
조금 까다로울 수 있습니다. 모서리 중 하나가 반대 방향으로 진행되는 다음 다각형으로 동일한 작업을 시도하는 경우 :
문제가 생길 수도 있습니다. 이것은이 다각형이 3 차원으로 삽입 될 수없는 클라인 병 을 나타 내기 때문 입니다. 다음은이 다각형을 클라인 병에 접는 방법을 보여주는 위키 백과의 다이어그램입니다.
여기서 추측 할 수 있듯이 기본 다각형을 취하고 표면을 결정하는 것입니다. 4면 다각형 (처리해야하는 유일한 표면)의 경우 4 개의 서로 다른 표면이 있습니다.
그들은
큰 쇠시리
클라인 병
구체
프로젝션 비행기
이제 이것은 아닙니다 이미지 처리 가 아니므로 이미지를 입력으로 사용하지 않을 것이라고 생각합니다. 대신 기본 다각형을 나타내는 편리한 표기법을 사용합니다. 위의 두 예에서 동일한 문자 (a 또는 b)로 해당 모서리의 이름을 지정했으며 꼬인 모서리에 꼬임을 표시하기 위해 추가 표시를 주었다는 것을 알 수 있습니다. 위쪽 가장자리에서 시작하여 시계 방향으로 갈 때 각 가장자리의 레이블을 적어두면 각 기본 다각형을 나타내는 표기법을 얻을 수 있습니다.
예를 들어 제공된 원환 체는 abab 이되고 Klein Bottle은 ab - ab가됩니다. 됩니다. 우리의 도전을 위해 우리는 꼬인 가장자리를 음수로 표시하는 대신 더 간단하게 만들 것입니다. 대신 글자를 대문자로 만듭니다.
직무
주어진 문자열이 기본 다각형을 나타내는 지 확인하고 적절한 표면에 해당하는 값을 출력합니다. 표면의 이름을 정확하게 지정할 필요는 없습니다. 각각 4 개의 표면 중 하나를 나타내는 4 개의 출력 고유 값이 필요합니다. 모든 기본 사례는 간단한 테스트 에서 다룹니다. 섹션 , 모든 차량은 차량 중 하나에 동종 또는 동종입니다.
규칙
변에는 항상 a와 b가 표시되지 않지만 항상 문자로 표시됩니다.
유효한 입력은 4 가지 문자, 두 가지 유형 및 두 가지 유형으로 구성됩니다. 유효한 입력을 위해서는 항상 올바른 표면을 출력해야합니다.
유효하지 않은 입력을 거부 (표면을 나타내는 4 개의 값 중 어느 것도 출력하지 않아야 함)해야합니다. 4 개의 표면과 구별되는 한 입력을 거부 할 때 무엇이든 할 수 있습니다.
이것은 코드 골프 이므로 목표는 소스 코드의 바이트 수를 최소화하는 것입니다.
테스트
간단한 테스트
abab Torus
abAb Klein Bottle
abaB Klein Bottle
abAB Projective Plane
aabb Klein Bottle
aAbb Projective Plane
aabB Projective Plane
aAbB Sphere
abba Klein Bottle
abBa Projective Plane
abbA Projective Plane
abBA Sphere
사기꾼 테스트
ABAB Torus
acAc Klein Bottle
Emme Projective Plane
zxXZ Sphere
aaab Bad input
abca Bad input
abbaa Bad input
ab1a Bad input
abab
원환 체와aabb
클라인 병이 있습니까?