키 언어를 구문 분석하고 처리합시다! 일련의 키보드 키 누르기 및 / 또는 특수 키를 입력하면 다음 키보드를 기반으로 모든 작업이 처리 될 때 제품을 출력하는 프로그램, 기능 등을 작성하십시오.
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ | = |Del|
+-------------------------------------------------------+
|TAB| q | w | e | r | t | y | u | i | o | p | [ | ] | \ |
| | Q | W | E | R | T | Y | U | I | O | P | { | } | | |
+-------------------------------------------------------+
|CAPS | a | s | d | f | g | h | j | k | l | ; | ' | RET |
| | A | S | D | F | G | H | J | K | L | : | " | |
+-------------------------------------------------------+
| SHIFT | z | x | c | v | b | n | m | , | . | / | SHIFT |
| | Z | X | C | V | B | N | M | < | > | ? | |
+-------------------------------------------------------+
| |
| SPACEBAR |
+-------------------------------------------------------+
출력 실제 문자가 키 하지 공백으로 구성하고 있습니다 "문자 키"로 알려진됩니다 다른 키에 의해 수정 될 수 및 "특수 키"로 알려진됩니다 공백 다른 키 또는 출력의 출력을 수정하는 것이다. 대문자로 입력에 표시되는 알파벳 문자 키는 Shift또는 Caps Lock을 사용하여 대문자를 생성 하도록 수정 될 수 있으며 나머지 문자 키는 Shift대체 문자를 생성하기 위해 만 수정 될 수 있습니다 . 따라서 A입력에서 a A문자 키에 해당합니다. 문자 키는 일반 출력이며 a수정 된 출력은 Shift또는 Caps Lock키로 얻을 수 있습니다 A. 반면에// ?문자 키에 해당하는 ,는 이 시간 으로 만 정상 출력 /과 ?획득 가능한 수정 출력을 갖 Shift습니다.
규칙
입력이됩니다 항상 될 문자열 의 문자 키와 특수 키의 순서로 구성. 입력에 대한 완전한 특수 키-문자열 매핑 (즉, 입력이 보장되는 형식) 및 해당 동작 / 출력은 다음과 같습니다.
<DEL> -> Delete the previous character (including whitespace). If called when string is empty, nothing happens. If called 2 or more times in a row, 2 consecutive deletes happen. For instance, "RE<DEL><DEL>" should return an empty string ("") and also "R<RET><DEL><DEL>E" should return just "E".<CAPS> -> Enable Caps Lock until <CAPS> appears again, upon which it is disabled, although it is not guaranteed to be disabled by the end of the input. Enabling this only modifies the upcoming alphabet keys resulting in them outputting only uppercase letters. For instance, "<CAPS>RE<CAPS>" results in the output "RE", but <CAPS>.<CAPS> would still result in a ".".<RET> -> Add a new line.<SPC> -> Add a single blank space.<TAB> -> Add 4 spaces.<SHFT> -> Shift is held down resulting in the alternate character of the upcoming keypress to be output, after which the key is released. For instance, "<SHFT>A" results in the output "A", "<SHFT>1" results in the output "!", and "<SHFT>1234" results in the output "!234" as only the first upcoming keypress is modified and nothing else. It is guaranteed that a character key will succeed a <SHFT>. Therefore, <SHFT><SPC> is not a possible input.
빈 문자열도 입력으로 가능하며 출력은 아무 것도 없어야합니다.
- 를 사용하는 모든 내장이이 문제를 해결합니다 직접 허용되지 않습니다.
- 표준 허점의 사용은 허용되지 않습니다.
테스트 사례
형식으로 제시된 Actual String Input -> Actual String Output다음 몇 가지에 대한 설명이 제공됩니다.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23토글없이 키를 눌렀을 때 출력
1된1다음 Shift2키를 누른 상태 에서 키를 누르면@출력됩니다. 그런 다음 Shift 키를 놓고 Tab 키를 누르면 4 칸의 들여 쓰기가 발생합니다. 최대 다음, 잠금 키를 누를 때 캡은, 그 후에R,.,K,A,P, 및.키는 출력 결과를 누르면된다R.KAP.. 마지막으로, 하나의 공간은 출력 결과 시프트 뒤에!23때 출력되고1,2그리고3키 끝에 가압된다.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890시프트 키는 다음 누르고
A출력 결과 키A출력 하였다bcdefg때B-G키를 누르면된다. 그런 다음 Shift 키를 누른 상태 에서 키를 다시 누른 다음H출력 을 누른 다음 키를 누를 때마다H계속됩니다 . 마지막으로, 모든 시프트로 수정 키는 출력 결과 각 누르기 전에 누르고 의해 마무리 때 키를 누르면 다시.ijkI-K1-4!@#$5678905-0<CAPS>THIS<SPC>IS<SPC>IN<SPC>ALL<SPC>CAPS<CAPS><SPC>NOW<SPC>THIS<SPC>IS<SPC>IN<SPC>ALL<SPC>LOWERCASE -> THIS IS IN ALL CAPS now this is in all lowercase<TAB><SPC><TAB><SHFT>1 -> !<CAPS>WWW<CAPS>.CODEGOLF.STACKEXCHANGE<SHFT>.COM -> WWW.codegolf.stackexchange>comPROGRAMMING<CAPS><SPC>IS<SPC><CAPS>AWESOME -> programming IS awesome<DEL><RET><DEL><RET><DEL> -> "" (Empty String)아무 것도 발생하지 않으면 처음에 삭제 키를 누릅니다. 그런 다음 Return 키를 누르면 새 줄이 생겨 백 스페이스 키를 다시 누르면 삭제됩니다. 마지막으로 동일한 순서 (새 줄 뒤에 백 스페이스)가 반복됩니다. 이 모든 결과는 빈 문자열입니다.
<SHFT>HI<SPC>HOW<SPC>ARE<SPC>YOU<SHFT>/<RET><SHFT>I<SPC><SHFT>AM<SPC>O<DEL><SHFT>GOOD<SHFT>1 -> Hi how are you?\nI Am Good!<SHFT>,<CAPS>RET<CAPS><SHFT>. -> <RET>문자열
<RET>은 실제 문자열 출력 이어야합니다 . 따라서 이것은 새로운 줄을 출력 해서는 안됩니다 .<CAPS>67890,.;'[]<CAPS> -> 67890,.;'[]<CAPS><SHFT>A -> ARE<DEL><DEL> -> "" (Empty String)U<RET><DEL><DEL>I -> i<DEL><DEL><DEL>5<DEL> -> "" (Empty string)"" (Empty String) -> "" (Empty String)
이것은 코드 골프 바이트 단위의 가장 짧은 코드가 이깁니다!
AbcdefgHijk!@#$567890? 또한 테스트 # 8 <SHFT>에서 문자열의 끝에 있지만 규칙 상태는 "문자 키가 <SHFT>에 성공한다는 것을 보장합니다."