Ayo parsing dan proses Key-Language! Diberikan input dari urutan penekanan tombol keyboard dan / atau tombol khusus, tulis program, fungsi, dll. Yang menghasilkan produk ketika semua tindakan diproses berdasarkan keyboard berikut:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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 |
+-------------------------------------------------------+
Kunci bahwa output karakter yang sebenarnya tidak terdiri dari spasi dan yang dapat dimodifikasi oleh kunci lainnya akan dikenal sebagai "kunci karakter", dan orang-orang yang memodifikasi output kunci lainnya atau output spasi akan dikenal sebagai "tombol khusus". Tombol karakter alfabet, yang akan ditampilkan pada input dengan huruf besar, dapat dimodifikasi dengan salah satu Shiftatau Caps Lockuntuk menghasilkan huruf besar, dan sisa tombol karakter hanya dapat dimodifikasi dengan Shiftuntuk menghasilkan karakter alternatif mereka. Oleh karena itu Adalam input sesuai dengan a Akunci karakter, yang output normalnya adan output modifikasinya, dapat diperoleh dengan tombol Shiftatau Caps Lock, adalah A. Di samping itu,/, yang sesuai dengan tombol / ?karakter, memiliki output normal /dan output yang dimodifikasi ?hanya dapat diperoleh dengan Shiftwaktu ini.
Aturan
Input akan selalu berupa string yang terdiri dari urutan tombol karakter dan tombol khusus. Kunci khusus penuh untuk pemetaan string untuk input (yaitu format mereka dijamin berada di input) dan tindakan / output yang sesuai adalah sebagai berikut:
<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.
String kosong juga dimungkinkan sebagai input, yang outputnya seharusnya tidak ada.
- Penggunaan bawaan apa pun yang memecahkan masalah ini secara langsung dilarang.
- Penggunaan celah standar tidak diizinkan.
Uji Kasus
Disajikan dalam format yang Actual String Input -> Actual String Outputdiikuti oleh penjelasan untuk beberapa orang.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23Keluaran
1saat1tombol ditekan tanpa beralih, lalu Shift ditekan dan2tombol ditekan menghasilkan@output. Kemudian tombol Shift dilepaskan dan Tab ditekan, menghasilkan lekukan 4 spasi. Menindaklanjuti, Caps Lock kunci ditekan, setelah ituR,.,K,A,P, dan.tombol yang ditekan, menghasilkan outputR.KAP.. Akhirnya, satu ruang yang keluaran diikuti dengan pergeseran sehingga!23menjadi output ketika1,2dan3tombol yang ditekan di akhir.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890Tombol Shift ditekan terus diikuti oleh
Atombol, menghasilkan outputAdiikuti oleh outputbcdefgketikaB-Gtombol ditekan. Kemudian, tombol Shift ditekan lagi digantikan olehHtombol, setelah itu outputH, diikuti olehijkketikaI-Ktombol ditekan. Akhirnya, semua1-4tombol dimodifikasi karena shift ditekan sebelum setiap penekanan tombol yang menghasilkan output!@#$selesai567890ketika5-0tombol ditekan kembali.<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)Tombol hapus ditekan di awal dan setelah itu tidak ada yang terjadi. Kemudian, tombol Return ditekan sehingga menghasilkan baris baru, yang dihapus setelah tombol backspace ditekan lagi. Akhirnya, urutan yang sama (baris baru diikuti oleh backspace) diulang. Setelah semua ini, outputnya adalah string kosong.
<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>String
<RET>harus berupa output string yang sebenarnya . Jadi, ini seharusnya tidak menghasilkan baris baru.<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)
Ini adalah codegolf sehingga kode terpendek dalam byte menang!
AbcdefgHijk!@#$567890? Juga, dalam pengujian # 8, <SHFT>adalah di akhir string, tetapi aturan menyatakan: "Dijamin bahwa kunci karakter akan berhasil <SHFT>."