Lassen Sie uns die Schlüsselsprache analysieren und verarbeiten! Schreiben Sie bei Eingabe einer Folge von Tastaturtastendrücken und / oder Sondertasten ein Programm, eine Funktion usw., die das Produkt ausgibt, wenn alle Aktionen auf der folgenden Tastatur ausgeführt werden:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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 |
+-------------------------------------------------------+
Die Schlüssel, die tatsächliche Zeichen ausgeben, die nicht aus Leerzeichen bestehen und von anderen Schlüsseln geändert werden können, werden als "Zeichentasten" bezeichnet, und diejenigen, die die Ausgabe anderer Schlüssel oder Ausgabe-Leerzeichen ändern, werden als "Sonderschlüssel" bezeichnet. Die Alphabet-Zeichentasten, die in der Eingabe mit Großbuchstaben angezeigt werden, können entweder mit Shiftoder Caps Lockin Großbuchstaben geändert werden , und die übrigen Zeichentasten können nur mit geändert werden Shift, um ihre alternativen Zeichen zu erzeugen. Daher entspricht Ain der Eingabe die a AZeichentaste, deren normale Ausgabe ist aund deren modifizierte Ausgabe, die entweder mit der Taste Shiftoder erhältlich ist Caps Lock, ist A. Auf der anderen Seite,/, die der / ?Zeichentaste entspricht , hat eine normale Ausgabe von /und eine modifizierte Ausgabe von ?, die nur mit Shiftdieser Zeit erhältlich ist.
Regeln
Die Eingabe ist immer eine Zeichenfolge, die aus einer Folge von Zeichentasten und Sondertasten besteht. Der vollständige Spezialschlüssel für die Zeichenfolgenzuordnung für die Eingabe (dh das Format, in dem sie garantiert in der Eingabe enthalten sind) und die entsprechenden Aktionen / Ausgaben lauten wie folgt:
<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.
Als Eingabe ist auch eine leere Zeichenfolge möglich, für die die Ausgabe nichts sein sollte.
- Die Verwendung von jedem eingebauten dass löst dieses Problem direkt nicht zulässig ist.
- Die Verwendung von Standardlücken ist nicht zulässig.
Testfälle
Präsentiert im Format, Actual String Input -> Actual String Outputgefolgt von einer Erklärung für einige.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23Ausgabe,
1wenn die1Taste ohne Umschalten gedrückt wird, dann die Umschalttaste2gedrückt gehalten wird und die Taste gedrückt wird, was zur@Ausgabe führt. Dann wird die Umschalttaste losgelassen und die Tabulatortaste gedrückt, was zu einer Einrückung mit 4 Abständen führt. Nach oben wird die Caps - Lock - Taste gedrückt, wonach dasR,.,K,A,P, und.Tasten gedrückt werden , in der Ausgabe führtR.KAP.. Schließlich wird ein Leerzeichen gefolgt von Ausgabeverschiebung führt in!23ausgegeben wird, wenn das1,2, und3Tasten am Ende gedrückt werden.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890Die Umschalttaste wird gedrückt gehalten, gefolgt von der
ATaste. Dies führt zur Ausgabe,Agefolgt von der Ausgabe,bcdefgwenn dieB-GTasten gedrückt werden. Dann wird die Umschalttaste erneut gedrückt , gefolgt von derHTaste, woraufhin die Ausgabe erfolgtH, gefolgt vom DrückenijkderI-KTasten. Schließlich1-4werden alle Tasten geändert, wenn die Umschalttaste vor jedem Tastendruck gedrückt wird, was dazu führt, dass die Ausgabe!@#$beendet wird,567890wenn die5-0Tasten erneut gedrückt werden.<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)Die Löschtaste wird am Anfang gedrückt, danach passiert nichts mehr. Dann wird die Eingabetaste gedrückt, was zu einer neuen Zeile führt, die gelöscht wird, nachdem die Rücktaste erneut gedrückt wurde. Schließlich wird dieselbe Sequenz (neue Zeile gefolgt von Rücktaste) wiederholt. Nach all dem ist die Ausgabe eine leere Zeichenfolge.
<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>Die Zeichenfolge
<RET>sollte die tatsächliche Zeichenfolgenausgabe sein. Daher sollte dies keine neue Zeile ausgeben.<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)
Dies ist Codegolf, also gewinnt der kürzeste Code in Bytes!
AbcdefgHijk!@#$567890? Auch in Test Nr. 8 <SHFT>befindet sich am Ende der Zeichenfolge, aber die Regeln besagen: "Es ist garantiert, dass ein Zeichenschlüssel eine <SHFT> erfolgreich ist."