Hãy phân tích và xử lý Ngôn ngữ chính! Đưa ra đầu vào của một chuỗi các phím bấm và / hoặc các phím đặc biệt, hãy viết chương trình, chức năng, v.v. để xuất sản phẩm khi tất cả các hành động được xử lý dựa trên bàn phím sau:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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 |
+-------------------------------------------------------+
Các khóa xuất ra các ký tự thực tế không bao gồm khoảng trắng và có thể được sửa đổi bởi các khóa khác sẽ được gọi là "khóa ký tự" và các khóa sửa đổi đầu ra của các khóa khác hoặc khoảng trắng đầu ra sẽ được gọi là "các phím đặc biệt". Các phím ký tự bảng chữ cái, sẽ được hiển thị trong đầu vào bằng chữ in hoa, có thể được sửa đổi bằng Shift
hoặc Caps Lock
để tạo chữ cái in hoa và phần còn lại của các phím ký tự chỉ có thể được sửa đổi Shift
để tạo ra các ký tự thay thế của chúng. Do đó, A
trong đầu vào tương ứng với a A
khóa ký tự, có đầu ra bình thường và đầu ra được a
sửa đổi, có thể lấy được bằng hoặc Shift
hoặc là Caps Lock
khóa A
. Mặt khác,/
, tương ứng với / ?
khóa ký tự, có đầu ra bình thường /
và đầu ra được sửa đổi ?
có thể đạt được chỉ với Shift
thời gian này.
Quy tắc
Đầu vào sẽ luôn là một chuỗi bao gồm một chuỗi các phím ký tự và các phím đặc biệt. Khóa đặc biệt đầy đủ để ánh xạ chuỗi cho đầu vào (nghĩa là định dạng mà chúng được đảm bảo ở đầu vào) và các hành động / đầu ra tương ứng của chúng như sau:
<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.
Một chuỗi rỗng cũng có thể là đầu vào, mà đầu ra sẽ không là gì.
- Việc sử dụng bất kỳ tích hợp nào giải quyết vấn đề này trực tiếp đều không được phép.
- Việc sử dụng sơ hở tiêu chuẩn là không được phép.
Các trường hợp thử nghiệm
Trình bày ở định dạng Actual String Input -> Actual String Output
theo sau là một lời giải thích cho một vài.
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23
Đầu ra
1
khi1
phím được nhấn mà không có chuyển đổi, sau đó Shift được giữ và2
phím được nhấn dẫn đến@
đầu ra. Sau đó, phím Shift được giải phóng và Tab được nhấn, dẫn đến thụt 4 khoảng cách. Theo dõi, các Caps Lock phím được nhấn, sau đóR
,.
,K
,A
,P
, và.
bấm phím nào, kết quả đầu raR.KAP.
. Cuối cùng, một không gian duy nhất là đầu ra tiếp theo sự thay đổi dẫn đến!23
đang được đầu ra khi1
,2
và3
bấm phím nào ở cuối.<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890
Phím Shift được giữ và theo sau là
A
phím, dẫn đến đầu raA
theo sau là đầu rabcdefg
khiB-G
nhấn phím. Sau đó, phím Shift được giữ lại thành công bởiH
phím, sau đó là đầu raH
, tiếp theo làijk
khiI-K
nhấn phím. Cuối cùng, các1-4
phím đều được sửa đổi như thay đổi được tổ chức xuống trước mỗi bấm phím kết quả đầu ra!@#$
kết thúc bởi567890
khi5-0
phím đang nhấn.<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)
Phím xóa được nhấn vào đầu sau đó không có gì xảy ra. Sau đó, phím Return được nhấn dẫn đến một dòng mới, nó sẽ bị xóa sau khi nhấn phím backspace. Cuối cùng, trình tự tương tự (dòng mới theo sau là backspace) được lặp lại. Sau tất cả, đầu ra là một chuỗi rỗng.
<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>
Chuỗi
<RET>
phải là đầu ra chuỗi thực tế . Vì vậy, điều này không nên xuất ra một dòng mới.<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)
Đây là codegolf nên mã ngắn nhất tính bằng byte sẽ thắng!
AbcdefgHijk!@#$567890
không? Ngoài ra, trong thử nghiệm # 8, <SHFT>
ở cuối chuỗi, nhưng quy tắc nêu rõ: "Đảm bảo rằng khóa ký tự sẽ thành công <SHFT>."