Давайте разберем и обработаем Key-Language! Учитывая ввод последовательности нажатий клавиш клавиатуры и / или специальных клавиш, напишите программу, функцию и т. Д., Которые выводят продукт, когда все действия обрабатываются на основе следующей клавиатуры:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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клавиша нажата без переключателя, затем удерживается Shift и2клавиша нажимается, что приводит к@выводу. Затем клавиша 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Клавиша «Shift» удерживается нажатой, а затем
Aклавиша, что приводит к выводу сAпоследующим выводомbcdefgприB-Gнажатии клавиш. Затем клавиша переключения удерживается в нажатом положении снова сменилаHключ, после чего выхода естьH, а затем ,ijkкогдаI-Kклавиши нажаты. Наконец, все1-4клавиши изменяются по мере того, как нажатие клавиши shift удерживается перед каждым нажатием клавиши, в результате чего вывод!@#$завершается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>comPROGRAMMING<CAPS><SPC>IS<SPC><CAPS>AWESOME -> programming IS awesome<DEL><RET><DEL><RET><DEL> -> "" (Empty String)Клавиша удаления нажимается в начале, после чего ничего не происходит. Затем нажимается клавиша возврата, в результате чего появляется новая строка, которая удаляется после повторного нажатия клавиши возврата. Наконец, та же самая последовательность (новая строка, сопровождаемая 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 -> ARE<DEL><DEL> -> "" (Empty String)U<RET><DEL><DEL>I -> i<DEL><DEL><DEL>5<DEL> -> "" (Empty string)"" (Empty String) -> "" (Empty String)
Это codegolf поэтому выигрывает самый короткий код в байтах!
AbcdefgHijk!@#$567890? Кроме того, в тесте № 8 <SHFT>находится в конце строки, но правила гласят: «Гарантируется, что символьная клавиша будет следовать за <SHFT>».