ลองแยกและประมวลผล Key-Language! เมื่อกำหนดอินพุตของลำดับของการกดแป้นคีย์บอร์ดและ / หรือปุ่มพิเศษเขียนโปรแกรมฟังก์ชั่น ฯลฯ ที่ส่งออกผลิตภัณฑ์เมื่อการดำเนินการทั้งหมดถูกประมวลผลตามคีย์บอร์ดต่อไปนี้:
+-------------------------------------------------------+
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | - | + | |
| ` | 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 |
+-------------------------------------------------------+
คีย์ว่าตัวละครที่เกิดขึ้นจริงเอาท์พุทไม่ประกอบด้วยช่องว่างและมีความสามารถที่จะแก้ไขได้โดยปุ่มอื่น ๆ จะเป็นที่รู้จักในฐานะ "คีย์ตัวอักษร" และผู้ที่ปรับเปลี่ยนการส่งออกของปุ่มอื่น ๆ หรือเอาท์พุทช่องว่างจะเป็นที่รู้จักในฐานะ "ปุ่มพิเศษที่" คีย์อักขระตัวอักษรซึ่งจะแสดงในอินพุตด้วยตัวอักษรตัวพิมพ์ใหญ่สามารถแก้ไขได้ด้วยShiftหรือCaps Lockเพื่อสร้างตัวอักษรตัวพิมพ์ใหญ่และส่วนที่เหลือของคีย์อักขระสามารถแก้ไขได้ด้วยShiftเพื่อสร้างอักขระสำรองเท่านั้น ดังนั้นAในการป้อนข้อมูลที่สอดคล้องกับa Aคีย์ตัวอักษรซึ่งปกติการส่งออกเป็นaและมีการปรับเปลี่ยนการส่งออกจะได้รับกับทั้งShiftหรือที่สำคัญคือCaps Lock Aในทางกลับกัน,/ซึ่งสอดคล้องกับ/ ?คีย์อักขระมีเอาต์พุตปกติ/และเอาต์พุตที่แก้ไขซึ่ง?สามารถขอรับได้ด้วยShiftเวลานี้เท่านั้น
กฎระเบียบ
การป้อนข้อมูลจะเสมอเป็นสตริงประกอบด้วยลำดับของคีย์ตัวอักษรและปุ่มพิเศษ คีย์พิเศษแบบเต็มเพื่อการจับคู่สตริงสำหรับอินพุต (เช่นรูปแบบที่รับประกันว่าจะอยู่ในอินพุต) และแอ็คชัน / เอาต์พุตที่สอดคล้องกันมีดังนี้:
<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.
สตริงว่างยังสามารถเป็นอินพุตซึ่งเอาต์พุตไม่ควรเป็นอะไร
- การใช้ใด ๆในตัวแก้ว่าปัญหานี้โดยตรงไม่ได้รับอนุญาต
- ไม่อนุญาตให้ใช้ช่องโหว่มาตรฐาน
กรณีทดสอบ
นำเสนอในรูปแบบActual String Input -> Actual String Outputตามด้วยคำอธิบายไม่กี่
1<SHFT>2<TAB><CAPS>R.KAP.<SPC><SHFT>123 -> 1@ R.KAP. !23เอาท์พุท
1เมื่อ1กดปุ่มโดยไม่ต้องสลับจากนั้นกด Shift ค้างไว้และ2กดปุ่มผลลัพธ์จะเกิด@ขึ้น จากนั้นแป้น Shift จะถูกปล่อยและกด Tab ทำให้เกิดการเว้นระยะห่าง 4 อัน ต่อไปนี้ขึ้น Caps Lock กดแป้นหลังจากที่R,.,K,A,Pและปุ่มกดที่มีผลในการส่งออก.R.KAP.สุดท้ายพื้นที่เดียวคือการส่งออกตามมาด้วยการเปลี่ยนแปลงที่เกิดขึ้นใน!23การเป็นเอาท์พุทเมื่อ1,2และ3ปุ่มกดที่สิ้นสุด<SHFT>ABCDEFG<SHFT>HIJK<SHFT>1<SHFT>2<SHFT>3<SHFT>4567890 -> AbcdefgHijk!@#$567890ปุ่ม Shift ค้างไว้ตามด้วย
Aปุ่มส่งผลให้เกิดผลลัพธ์Aตามด้วยเอาต์พุตbcdefgเมื่อB-Gกดปุ่ม จากนั้นกดปุ่ม Shift ค้างไว้อีกครั้งโดยประสบความสำเร็จHหลังจากที่มีการส่งออกHตามด้วยijkเมื่อI-Kมีการกดปุ่ม ในที่สุด1-4ปุ่มจะถูกปรับเปลี่ยนทั้งหมดเมื่อกดปุ่ม shift ค้างไว้ก่อนที่จะกดแต่ละครั้งทำให้การส่งออก!@#$เสร็จสิ้น567890เมื่อ5-0กดปุ่มอีกครั้ง<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)ปุ่มลบถูกกดในการเริ่มต้นหลังจากที่ไม่มีอะไรเกิดขึ้น จากนั้นกดปุ่ม Return จะส่งผลให้มีบรรทัดใหม่ซึ่งจะถูกลบหลังจากกดปุ่ม Backspace อีกครั้ง ในที่สุดลำดับเดียวกัน (บรรทัดใหม่ตามด้วย backspace) จะถูกทำซ้ำ หลังจากทั้งหมดนี้ผลลัพธ์เป็นสตริงว่าง
<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>สตริง
<RET>ควรเป็นเอาต์พุตสตริงที่แท้จริง ดังนั้นสิ่งนี้ไม่ควรส่งออกบรรทัดใหม่<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)
นี่คือ codegolf ดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ชนะ!
AbcdefgHijk!@#$567890อย่างไร นอกจากนี้ในการทดสอบ # 8 <SHFT>อยู่ที่จุดสิ้นสุดของสตริง แต่สถานะของกฎ: "มันรับประกันว่าคีย์อักขระจะประสบความสำเร็จ <SHFT>"