キー言語を解析して処理してみましょう!一連のキーボードのキープレスや特殊キーの入力を前提として、すべてのアクションが次のキーボードに基づいて処理されたときに製品を出力するプログラム、関数などを記述します。
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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字の字下げが行われます。フォローアップ、Lockキーが押されるキャップは、その後R
、.
、K
、A
、P
、および.
キーは出力が得られ、押されていますR.KAP.
。最後に、単一のスペースを出力し、その結果シフトが続いている!23
場合に出力され1
、2
および3
キーが端部に押圧されます。<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890
Shiftキーを押した後にキーを押すと、キーが押されたときに
A
出力がA
続き、その後に出力が続きます。次に、Shift キーを押したままキーを押し続けます。その後、出力がになり、続いてキーが押されます。最後に、各キーを押す前にシフトが押されると、キーがすべて変更され、キーが再度押されたときに出力が終了します。bcdefg
B-G
H
H
ijk
I-K
1-4
!@#$
567890
5-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>com
PROGRAMMING<CAPS><SPC>IS<SPC><CAPS>AWESOME -> programming IS awesome
<DEL><RET><DEL><RET><DEL> -> "" (Empty String)
最初は削除キーが押された後、何も起こりません。次に、Returnキーを押すと新しい行が生成され、Backspaceキーをもう一度押すと削除されます。最後に、同じシーケンス(改行の後にバックスペースが続く)が繰り返されます。このすべての後、出力は空の文字列になります。
<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 -> A
RE<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>に続くことが保証されている」と述べています。