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 Shift
ou Caps Lock
para produzir letras maiúsculas, e o restante das teclas de caracteres só pode ser modificado com Shift
para produzir seus caracteres alternativos. Portanto, A
na entrada corresponde à a A
chave de caractere, cuja saída normal é a
e cuja saída modificada, obtida com a tecla Shift
ou 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 Shift
esse 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 Output
seguido de uma explicação para alguns.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23
Saída
1
como a1
tecla é pressionada sem alternar, então Shift é mantido pressionado e a2
tecla é 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!23
ser emitidos quando as1
,2
e3
as teclas são pressionadas no final.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890
A tecla Shift é mantida pressionada, seguida pela
A
tecla, resultando na saídaA
seguida pela saídabcdefg
quando asB-G
teclas são pressionadas. Em seguida, a tecla Shift é pressionada novamente , seguida pelaH
tecla, após a qual a saída éH
, seguida porijk
quando asI-K
teclas são pressionadas. Finalmente, todas as1-4
teclas são modificadas à medida que a tecla Shift é mantida pressionada antes de cada pressionamento de tecla, resultando na saída!@#$
final567890
quando as5-0
teclas 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>com
PROGRAMMING<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 -> A
RE<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>."