이 질문을하기 위해 몇 번의 이전 시도 가 있었지만이 사이트의 현대 표준에 부합하지는 않습니다. 당 메타에 대한 논의 , 나는 우리의 현대 규칙 세트에서 공정 경쟁을 허용하는 방법으로 그것을 다시 게시하고 있습니다.
배경
회문은 문자열의 반대 문자열 자체와 동일합니다 즉, "이전 버전과 같은 전달과를 읽고"하는 문자열입니다. 우리는 여기서 "편리한 회문"에 대해 이야기하는 것이 아니라 엄격한 문자 별 반전을 말합니다. 예를 들어 ()()
회문은 아니지만 그렇습니다 ())(
.
작업
문자열 S (또는 해당 언어의 해당 항목)를 입력으로 사용하고 하나의 출력 Q (선택한 유형)가 있는 프로그램 또는 함수를 작성 하십시오. 당신이 사용할 수있는 합리적인 수단을 입력을 받아 출력을 제공합니다.
- 입력 S 가 회 문인 경우, 출력 Q 는 값 A를 가져야합니다 (즉, 회문 S 와 동일 함 ).
- 입력 S 가 회문이 아닌 경우, 출력 Q 는 값 B를 가져야합니다 (비 회문 S에 대해 동일 함 ).
- A 와 B 는 서로 구별되어야합니다.
즉, 모든 회문을 하나의 값에 매핑하고 모든 비 회문을 다른 값에 매핑하십시오.
또한 작성하는 프로그램이나 함수는 회문 자체 여야합니다 (즉, 소스 코드는 회 문식이어야 함). 이는 제한된 소스 문제입니다.
설명
- 하지만
true
및false
대한 분명한 선택입니다 와 B는 , 당신은 당신의 "회문이다"에 대한 임의의 두 가지 값을 사용할 수 있습니다 및 부울 일 필요는 없다 출력, "회문 아니다". - 여기서 캐릭터 레벨 에서 문자열 반전을 정의하고 있습니다.
éé
프로그램이 UTF-8 인코딩 후 팔린 트로의 옥텟 시퀀스가 아니더라도 프로그램이 UTF-8 또는 Latin-1로 인코딩되는지 여부에 관계없이 palindromic입니다. - 그러나 프로그램에 ASCII가 아닌 문자가 포함되어 있어도 ASCII 입력에 대해서만 작동하면됩니다. 특히 입력 S 에는 인쇄 가능한 ASCII 문자 만 포함됩니다 (공백은 포함하지만 개행은 포함하지 않음). 무엇보다도 이것은 입력을 문자 시퀀스가 아닌 바이트 시퀀스로 취급하더라도 프로그램이 스펙을 준수 할 가능성이 높다는 것을 의미합니다 (언어의 I / O 인코딩이 매우 이상 하지 않은 경우 ). 따라서 이전 글 머리 기호에서 회문 정의는 프로그램이 올바른 형식인지 확인하는 경우에만 중요합니다.
- 독창적이지만 주석이나 문자열 리터럴로 프로그램의 절반을 숨기는 것은 합법적입니다. 창의성이 아니라 길이에 따라 점수를 받고 있으므로 프로그램이 회문이되도록 "지루한"방법을 사용하십시오. 물론, 당신은 길이에 점수를 받고 있기 때문에, 아무것도하지 않는 프로그램의 일부는 점수를 떨어 뜨릴 것이므로, 프로그램의 두 부분을 모두 사용할 수 있다면 그것을 관리 할 수 있다면 도움이 될 것입니다 .
- 승리 기준은 바이트 단위로 측정되므로 프로그램이 점수를 매길 수 있도록 작성된 인코딩을 지정해야합니다 (많은 경우에 어떤 인코딩을 사용하고 있는지는 분명합니다).
승리 기준
프로그램은 캐릭터 레벨에서 회문이되어야하지만, 누가이기는지를보기 위해 바이트를 사용하고 있습니다. 특히, 프로그램이 짧을수록 바이트 단위로 측정할수록 좋습니다. 이것은 코드 골프 도전입니다. 제출 (특히 동일한 언어로 제출)을 비교하려면 제출 헤더에 프로그램의 바이트 수 (바이트 수와 다른 경우 문자 수)를 추가하십시오.
(
로 a
와 )
함께 b
. 가 abab
회문은? 아니요,이어야 abba
합니다. 그렇다면 ()()
회문도 아닙니다. 그럴 것 ())(
입니다.
()() is not a palindrome, but ())( is.
축하합니다, 당신은 레딧에 만들었습니다!