Analizziamo ed elaboriamo Key-Language! Dato l'inserimento di una sequenza di tasti della tastiera e / o tasti speciali, scrivere un programma, una funzione, ecc. Che emetta il prodotto quando tutte le azioni vengono elaborate in base alla seguente tastiera:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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 |
+-------------------------------------------------------+
I tasti di uscita effettivi caratteri non rappresentati da spazi e sono in grado di essere modificata da altri tasti saranno chiamati "tasti carattere", e quelli che modificano la produzione di altre chiavi o uscita spazi saranno note come "chiavi speciali". I tasti dei caratteri alfabetici, che verranno visualizzati nell'input con lettere maiuscole, possono essere modificati con Shifto Caps Lockper produrre lettere maiuscole, e il resto dei tasti dei caratteri può essere modificato solo Shiftper produrre i loro caratteri alternativi. Pertanto, Anell'input corrisponde al a Atasto carattere, il cui output normale è ae il cui output modificato, ottenibile con il tasto Shifto Caps Lock, è A. D'altro canto,/, che corrisponde alla / ?chiave del carattere, ha un output normale di /e un output modificato di ?ottenibile solo con Shiftquesto tempo.
Regole
L'input sarà sempre una stringa costituita da una sequenza di tasti carattere e tasti speciali. La chiave speciale completa per la mappatura delle stringhe per l'input (ovvero il formato in cui è garantito che siano nell'input) e le azioni / output corrispondenti sono le seguenti:
<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.
Una stringa vuota è anche possibile come input, per cui l'output non dovrebbe essere nulla.
- L'uso di qualsiasi built-in che risolve direttamente questo problema non è consentito.
- L'uso di scappatoie standard è vietato.
Casi test
Presentato nel formato Actual String Input -> Actual String Outputseguito da una spiegazione per alcuni.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23Uscita
1quando il1tasto viene premuto senza attivare / disattivare, quindi Shift viene tenuto premuto e il2tasto viene premuto per@generare l' uscita. Quindi il tasto Maiusc viene rilasciato e Tab viene premuto, risultando in un rientro a 4 spaziature. In seguito, i Caps viene premuto il tasto di blocco, dopo di che ilR,.,K,A,P, e.si premono i tasti, con la conseguente uscitaR.KAP.. Infine, un singolo spazio è uscita seguita da spostamento conseguente!23essendo uscita quando i1,2e3vengono azionati al termine.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890Il tasto Maiusc viene tenuto premuto seguito dal
Atasto, risultando in uscitaAseguita dall'uscitabcdefgquandoB-Gvengono premuti i tasti. Quindi, il tasto Maiusc viene tenuto premuto nuovamente, seguito dalHtasto, dopo di che viene emesso l'outputH, seguito daijkquando iI-Ktasti vengono premuti. Infine, tutti i1-4tasti vengono modificati man mano che si tiene premuto il tasto shift prima di ogni pressione del tasto, per cui l'output!@#$termina567890quando i5-0tasti vengono nuovamente premuti.<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)Il tasto Elimina viene premuto all'inizio, dopo di che non accade nulla. Quindi, il tasto Invio viene premuto e si ottiene una nuova riga, che viene eliminata dopo aver premuto nuovamente il tasto Backspace. Infine, viene ripetuta la stessa sequenza (nuova riga seguita da backspace). Dopo tutto questo, l'output è una stringa vuota.
<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 stringa
<RET>dovrebbe essere l' output effettivo della stringa. Pertanto, ciò non dovrebbe generare una nuova riga.<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)
Questo è codegolf, quindi vince il codice più breve in byte!
AbcdefgHijk!@#$567890? Inoltre, nel test n. 8, si <SHFT>trova alla fine della stringa, ma le regole indicano: "È garantito che una chiave di carattere riesca un <SHFT>."