Vamos analisar e processar o idioma-chave! Dada a entrada de uma sequência de pressionamentos de tecla do teclado e / ou teclas especiais, escreva um programa, função etc. que produza o produto quando todas as ações forem processadas com base no seguinte teclado:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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 |
+-------------------------------------------------------+
As chaves que saída personagens reais não consistem de espaços em branco e são capazes de ser modificado por outras chaves serão conhecidas como "teclas de caracteres", e aqueles que modificam a saída de outras chaves ou saída de espaços em branco serão conhecidas como "teclas especiais". As teclas de caracteres do alfabeto, que serão mostradas na entrada com letras maiúsculas, podem ser modificadas com Shiftou Caps Lockpara produzir letras maiúsculas, e o restante das teclas de caracteres só pode ser modificado com Shiftpara produzir seus caracteres alternativos. Portanto, Ana entrada corresponde à a Achave de caractere, cuja saída normal é ae cuja saída modificada, obtida com a tecla Shiftou Caps Lock, é A. Por outro lado,/, que corresponde à / ?chave de caractere, possui uma saída normal de /e uma saída modificada de ?obtenível somente com Shiftesse tempo.
Regras
A entrada sempre será uma sequência que consiste em uma sequência de teclas de caracteres e teclas especiais. A chave especial completa para o mapeamento de strings da entrada (ou seja, o formato que eles garantem estar na entrada) e suas ações / saídas correspondentes são as seguintes:
<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.
Uma string vazia também é possível como entrada, para a qual a saída não deve ser nada.
- O uso de qualquer built-in que resolva esse problema diretamente não é permitido.
- O uso de brechas padrão não é permitido.
Casos de teste
Apresentado no formato Actual String Input -> Actual String Outputseguido de uma explicação para alguns.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23Saída
1como a1tecla é pressionada sem alternar, então Shift é mantido pressionado e a2tecla é pressionada, resultando na@saída. Em seguida, a tecla Shift é liberada e a tecla Tab é pressionada, resultando em um recuo com 4 espaços. Na sequência, a tecla Caps Lock está pressionado, após o qual oR,.,K,A,P, e.teclas são pressionadas, resultando na saídaR.KAP.. Finalmente, um único espaço de saída, seguido por deslocamento, resultando em!23ser emitidos quando as1,2e3as teclas são pressionadas no final.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890A tecla Shift é mantida pressionada, seguida pela
Atecla, resultando na saídaAseguida pela saídabcdefgquando asB-Gteclas são pressionadas. Em seguida, a tecla Shift é pressionada novamente , seguida pelaHtecla, após a qual a saída éH, seguida porijkquando asI-Kteclas são pressionadas. Finalmente, todas as1-4teclas são modificadas à medida que a tecla Shift é mantida pressionada antes de cada pressionamento de tecla, resultando na saída!@#$final567890quando as5-0teclas são pressionadas.<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)A tecla Delete é pressionada no começo, após o que nada acontece. Em seguida, a tecla Return é pressionada, resultando em uma nova linha, que é excluída após a tecla backspace ser pressionada novamente. Finalmente, a mesma sequência (nova linha seguida por backspace) é repetida. Depois de tudo isso, a saída é uma string vazia.
<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>A string
<RET>deve ser a saída real da string. Portanto, isso não deve gerar uma nova linha.<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)
Este é um codegolf, e o código mais curto em bytes vence!
AbcdefgHijk!@#$567890? Além disso, no teste 8, <SHFT>está no final da cadeia, mas as regras declaram: "É garantido que uma chave de caractere terá êxito em <SHFT>."