Analysons et traitons le langage clé! Étant donné l'entrée d'une séquence de touches clavier et / ou de touches spéciales, écrivez un programme, une fonction, etc. qui génère le produit lorsque toutes les actions sont traitées sur la base du clavier suivant:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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 |
+-------------------------------------------------------+
Les clés qui génèrent des caractères réels non constitués d'espaces et qui peuvent être modifiées par d'autres clés seront appelées "clés de caractères", et celles qui modifient la sortie d'autres clés ou les espaces de sortie seront appelées "clés spéciales". Les touches de caractères alphabétiques, qui seront affichées dans l'entrée avec des lettres majuscules, peuvent être modifiées avec Shiftou Caps Lockpour produire des lettres majuscules, et le reste des touches de caractères ne peut être modifié qu'avec Shiftpour produire leurs caractères alternatifs. Par conséquent, Adans l'entrée correspond à la a Aclé de caractère, dont la sortie normale est aet dont la sortie modifiée, pouvant être obtenue avec la touche Shiftou Caps Lock, est A. D'autre part,/, qui correspond à la / ?touche de caractère, a une sortie normale de /et une sortie modifiée de ?pouvant être obtenue avec uniquement avec Shiftce temps.
Règles
L'entrée sera toujours une chaîne composée d'une séquence de touches de caractères et de touches spéciales. La clé spéciale complète pour le mappage de chaîne pour l'entrée (c'est-à-dire le format dans lequel ils sont garantis) et leurs actions / sorties correspondantes sont les suivantes:
<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.
Une chaîne vide est également possible en entrée, pour laquelle la sortie ne doit être rien.
- L'utilisation de tout intégré qui résout directement ce problème est interdite.
- L'utilisation de failles standard est interdite.
Cas de test
Présenté dans le format Actual String Input -> Actual String Outputsuivi d'une explication pour quelques-uns.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23Appuyez
1sur la1touche sans basculer, puis2appuyez sur la touche Maj et maintenez la touche enfoncée, ce qui donne la@sortie. Ensuite, la touche Maj est relâchée et Tab est enfoncée, ce qui entraîne une indentation espacée de 4. Faisant suite, la touche Verr Maj est pressée, après quoi leR,.,K,A,P, et les.touches sont enfoncées, entraînant la sortieR.KAP.. Enfin, un seul espace est sortie suivi par décalage résultant en!23étant émis lorsque les1,2et les3touches sont enfoncées à la fin.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890La touche Maj est maintenue enfoncée suivie de la
Atouche, ce qui entraîne la sortieAsuivie de la sortiebcdefglorsque lesB-Gtouches sont enfoncées. Ensuite, la touche Shift est maintenue enfoncée , suivie de laHtouche, après quoi la sortie estH, suivieijklorsque lesI-Ktouches sont enfoncées. Enfin, les1-4touches sont toutes modifiées lorsque la touche Maj est maintenue enfoncée avant chaque pression de touche, ce qui entraîne la fin de la sortie!@#$au567890moment où les5-0touches sont enfoncées.<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)La touche de suppression est pressée au début, après quoi rien ne se passe. Ensuite, la touche Retour est enfoncée, ce qui entraîne une nouvelle ligne, qui est supprimée après avoir appuyé à nouveau sur la touche Retour arrière. Enfin, la même séquence (nouvelle ligne suivie d'un retour arrière) est répétée. Après tout cela, la sortie est une chaîne vide.
<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>La chaîne
<RET>doit être la sortie de chaîne réelle . Ainsi, cela ne devrait pas produire une nouvelle ligne.<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)
C'est codegolf donc le code le plus court en octets gagne!
AbcdefgHijk!@#$567890? En outre, dans le test # 8, se <SHFT>trouve à la fin de la chaîne, mais les règles stipulent: "Il est garanti qu'une clé de caractère réussira un <SHFT>."