Давайте розберемо і обробимо 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Перемикач утримується в натиснутому положенні з наступним
Aключем, в результаті чого на виході зAподальшим виходом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>comPROGRAMMING<CAPS><SPC>IS<SPC><CAPS>AWESOME -> programming IS awesome<DEL><RET><DEL><RET><DEL> -> "" (Empty String)Клавіша видалення натискається на початку, після чого нічого не відбувається. Потім натискається клавіша повернення, що призводить до появи нового рядка, який видаляється після натискання клавіші зворотної області. Нарешті, повторюється та сама послідовність (новий рядок, за яким слідує зворотний простір). Зрештою, вихід - порожній рядок.
<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>."