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 Shift
ou Caps Lock
pour produire des lettres majuscules, et le reste des touches de caractères ne peut être modifié qu'avec Shift
pour produire leurs caractères alternatifs. Par conséquent, A
dans l'entrée correspond à la a A
clé de caractère, dont la sortie normale est a
et dont la sortie modifiée, pouvant être obtenue avec la touche Shift
ou 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 Shift
ce 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 Output
suivi d'une explication pour quelques-uns.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23
Appuyez
1
sur la1
touche sans basculer, puis2
appuyez 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
,2
et les3
touches sont enfoncées à la fin.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890
La touche Maj est maintenue enfoncée suivie de la
A
touche, ce qui entraîne la sortieA
suivie de la sortiebcdefg
lorsque lesB-G
touches sont enfoncées. Ensuite, la touche Shift est maintenue enfoncée , suivie de laH
touche, après quoi la sortie estH
, suivieijk
lorsque lesI-K
touches sont enfoncées. Enfin, les1-4
touches 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!@#$
au567890
moment où les5-0
touches 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>com
PROGRAMMING<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 -> A
RE<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>."