기존 키보드가없는 최신 게임 콘솔 및 기타 장치에서 텍스트 입력은 악몽입니다. 가상 키보드에서 몇 개의 버튼과 조이스틱으로 입력 해야하는 것은 성가신 일이며 가능한 한 적은 움직임 / 버튼 누름을 만들고 싶습니다.
사용할 키보드는 다음과 같습니다.
+---+---+---+---+---+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+---+---+---+---+---+---+---+---+---+---+
| q | w | e | r | t | y | u | i | o | p |
+---+---+---+---+---+---+---+---+---+---+
| a | s | d | f | g | h | j | k | l | - |
+---+---+---+---+---+---+---+---+---+---+
| z | x | c | v | b | n | m | _ | @ | . |
+---+---+---+---+---+---+---+---+---+---+
다음과 같은 작업을 사용할 수 있습니다.
L
: 키보드에서 왼쪽으로 한 칸 이동 (랩)R
: 키보드에서 오른쪽으로 한 칸 이동 (포장)U
: 키보드에서 한 칸 위로 이동 (랩)D
: 키보드에서 한 칸 아래로 이동 (랩)Y
: 공백을 삽입B
: 삽입 포인터를 한 칸 왼쪽으로 이동합니다 (포인터가 시작 부분에 있으면 아무 것도 수행하지 않음).F
: 삽입 포인터를 한 칸 오른쪽으로 이동합니다 (포인터가 끝에 있으면 아무 것도 수행하지 않음).C
: 토글 캡 잠금A
: 선택한 문자를 삽입 포인터의 위치에 삽입
위의 키보드와 명령 (일치 [a-zA-Z0-9 _@.-]*
)을 사용하여 입력 할 수있는 ASCII 문자 만 포함 된 입력 문자열이 제공되면 출력 문자열을 생성하는 일련의 명령을 출력합니다. 커서의 초기 위치는 1
키 (왼쪽 상단)에 있으며 Caps Lock은 처음에는 꺼져 있습니다.
채점
주어진 문자열에 대해 순진한 접근 방식은 문자열의 각 문자에 대해 가장 짧은 경로로 키보드의 문자를 탐색하고 필요한 경우 대문자 잠금을 토글하고 문자를 선택하는 것입니다. 이러한 순진한 접근 방식은 length 명령을 생성합니다 (length of input string) + (sum of Manhattan distances on keyboard between consecutive non-space characters) + (number of times the string alternates between lowercase and uppercase characters) + (1 if string starts with an uppercase letter else 0)
. 예를 들어,의 순진한 접근 101
초래 ALARA
길이 5 명령 및 Noob 5
초래 DDDRRRRRCAUURRRCAADDLLLLAYUUUA
, 길이 30 명령을 사용합니다.
그러나 귀하의 제출물은 순진한 접근법보다 더 나은 일을 추구합니다. 각 입력 문자열에 대해 제출물은 순진한 접근 방식이 제출 한 명령 수에서 제출물로 출력되는 명령 수와 동일한 점수를받습니다. 전체 점수는 개별 점수의 합계입니다.
규칙
- 제출은 Cloud9 무료 가상 작업 공간 에서 실행됩니다 . 작업 공간에는 512MB의 RAM, 2GB의 디스크 공간, 2.50GHz에서 Intel (R) Xeon (R) CPU 8 개 (전체 CPU 정보, 여기서 실행 가능
cat /proc/cpuinfo
, 여기 에서 찾을 수 있음 )가 있으며 64 비트 Ubuntu 14.04가 실행 중입니다. 신뢰할 수 있는. 제출을 실행하고 점수를 매기기 위해 테스트 작업 영역 에 대한 액세스를 요청 하거나 점수를 매길 수 있습니다. - 제출은 테스트 사례마다 한 번씩 실행됩니다. 실행 사이의 저장 상태는 금지되어 있습니다. 제출은 필요한 경우 입력 파일을 읽는 것을 제외하고 소스 파일 이외의 파일 (실행간에 수정 될 수 없음)을 쓰거나 읽을 수 없습니다.
- 제출은 각 테스트 사례에 대해 1 분의 런타임으로 제한됩니다. 제출물은 여러 솔루션을 출력 할 수 있지만 할당 된 시간 내에 마지막으로 유효한 솔루션 만 스코어링에 사용됩니다. 할당 된 시간 내에 유효한 솔루션을 출력하지 않으면 해당 테스트 케이스에서 점수가 0이됩니다.
- 제출을 호출하는 방법과 표준 Ubuntu 14.04 설치에 포함되어 있지 않은 설치해야하는 도구 / 라이브러리에 대한 지침을 포함하십시오.
- 승자가 가장 큰 점수로 제출됩니다. 동점 일 경우 알고리즘 복잡성이 더 우수한 제출물이 이길 수 있습니다. 동점이 여전히 해결되지 않으면 점수 및 알고리즘 복잡성에 도달 한 첫 번째 제출물이 승리합니다.
- 제출물이 테스트 사례에 맞게 최적화되지 않을 수 있습니다. 필요하다고 생각되면 테스트 케이스를 변경할 권리가 있습니다.
테스트 사례
체재: input string => naive score
(이들에 오류가 있으면 정정 사항을 적어주십시오)
101 => 5
quip => 12
PPCG => 15
Mego => 25
Noob 5 => 26
penguin => 27
867-5309 => 32
2_sPoOkY_4_mE => 60
The Nineteenth Byte => 76
penguins@SouthPole.org => 95
8xM3R__5ltZgrkJ.-W b => 98
correcthorsebatterystaple => 104
verylongRUNSOFCAPSandnocaps => 118
This is an English sentence. => 122
WNtza.akjzSP2GI0V9X .0epmUQ-mo => 131
Programming Puzzles and Code Golf => 140