배경
인시던트 는 토큰 목록이 미리 결정되지 않고 입력에서 유추된다는 점에서 상당히 특이한 프로그래밍 언어입니다. 따라서 인시던트 프로그램을 토큰 화하는 것은 특히 어려울 수 있습니다. 이 작업은 직접 수행하는 것입니다.
작업
프로그램에 문자열이 입력됩니다. 사건이이를 토큰 화하는 데 사용하는 알고리즘은 다음과 같습니다.
- 입력의 하위 문자열로 발생하는 모든 문자열을 정확히 세 가지 방법으로 식별하십시오 (예 : 입력 내에 해당 문자열이 정확히 3 개 발생 함).
- 이러한 다른 스트링의 스트링 이들 문자열 중 하나를 폐기 (예 : 입력
ababab
유일한 잔여 문자열 것이ab
아니라a
나b
때문에,a
그리고b
두 문자열이다ab
). - 입력 내에서 겹치는 문자열을 버리십시오. (예를 들어,
aaaa
정확히 세 개의 사본이 포함되어aa
있지만이 사본은 두 번째와 세 번째 문자에서 겹치므로 폐기됩니다. 마찬가지로에서의abababa
세 개의 사본ab
과 세 개의 사본이ba
있지만 두 번째에서 여섯 번째 문자는 각각 의 오버랩ab
하고ba
, 모두 너무ab
하고ba
) 폐기 될 것이다. - 이 시점에 남아있는 문자열은 프로그램에서 사용하는 토큰입니다. 원래 입력을 이러한 토큰의 순서로 토큰 화하십시오 (이전 단계에서의 폐기로 인해 한 가지 방법 만있을 수 있습니다). 입력에 토큰의 일부가 아닌 문자는 주석으로 처리되어 버려집니다.
프로그램은 문자열을 입력으로 취하고 문자열의 해당 토큰 화 (각각 문자열로 표시되는 토큰 목록)를 출력으로 리턴해야합니다. 또한, 이것은 적어도 적당히 효율적으로 수행되어야합니다. 특히 프로그램은 2 차 시간 ( "O (n²)") 이상 으로 실행해야합니다 . ( 실수로 2 차보다 빠를 가능성이 거의 있지만 이것이 가장 빠른 알고리즘 은 아니므로 복잡성 범위에 맞는 가장 정확한 알고리즘을 자유롭게 사용하십시오.)
설명
- 이론적으로 인시던트 프로그램에는 256 옥텟이 포함될 수 있지만 프로그램이 인쇄 가능한 ASCII (공백 포함)로 구성된 입력과 줄 바꿈 및 탭만 처리하는 것은 이러한 과제의 목적으로 허용됩니다. 알려진 모든 인시던트 프로그램은이 하위 집합으로 제한됩니다. space / newline / tab은 특별하지 않으며 토큰 중간에 나타날 수 있습니다. 인시던트는 모든 256 옥텟을 불투명으로 처리합니다.
- "이차 시간"의 정의는 "입력의 크기가 두 배가되면, 프로그램은 상수에 4를 더한 값만큼 느리게 실행됩니다", 즉 t ( x )가 프로그램에 걸리는 최대 시간 인 경우 크기 x 의 입력을 처리하면 t (2 x ) <4 t ( x ) + k 와 같은 일정한 k 가 있어야합니다. 모든 X . 줄을 비교하는 것은 줄의 길이에 비례하여 시간이 걸린다는 것을 명심하십시오.
- 메모리가 무제한이고 무제한 정수를 사용하는 언어의 (가상적인) 변형 언어로 실행하는 경우 이론적으로 프로그램은 길이에 상관없이 입력 프로그램을 처리 할 수 있어야합니다 (실제로 실행할 때 프로그램이이 목표를 달성하지 못하면 괜찮습니다) 언어의 정수 또는 메모리가 실제로 유한하게 크다). 입력의 길이보다 크지 않은 정수는 일정한 시간에 비교할 수 있다고 (복잡도 계산을 위해) 가정 할 수 있습니다 (물론 큰 값을 사용하면 입력을 단일 정수의 경우 자릿수에 비례하여 비교하는 데 시간이 걸립니다).
- 동일한 결과를 생성하는 한 위에 게시 된 알고리즘과 동일한 단계를 따르지 않더라도 복잡성 범위 내에 맞는 알고리즘을 사용할 수 있습니다.
- 이 퍼즐은 실제로 출력 형식을 지정하는 것이 아니라 입력을 토큰 화하는 것에 관한 것입니다. 언어로 목록을 출력하는 가장 자연스러운 방법이 모호한 형식 (예 : 문자열에 리터럴 개행 문자가 있거나 문자열 사이에 구분자가없는 경우 줄 바꿈으로 구분됨)이있는 경우 출력이 모호하다는 사실에 대해 걱정하지 마십시오 ( 목록이 실제로 구성된 한). 테스트를 돕기 위해 모호하지 않은 결과물을 생성하는 두 번째 버전의 제출물을 만들 수 있지만 원래 버전은 점수를 계산하는 버전입니다.
테스트 사례
다음 입력 문자열의 경우 :
aaabcbcbcdefdfefedghijghighjkllkklmmmmonono-nonppqpq-pqprsrsrstststuvuvu
프로그램은 다음과 같은 출력 목록을 생성해야합니다.
a a a bc bc bc d e f d f e f e d gh gh gh k l l k k l pq pq pq u u u
승리 조건
이것은 code-golf 이므로 바이트 단위로 측정 된 가장 짧은 유효한 (즉, 올바른 입력 / 출력 동작 및 충분히 빠른 실행) 프로그램이 승리합니다.