บทนำ
อย่างที่คุณบางคนอาจทราบ URL มีรายการอักขระที่ทำสิ่งพิเศษ ยกตัวอย่างเช่น/ตัวอักษรแยกชิ้นส่วนของ URL และ?, &และ=ตัวอักษรที่ใช้ในการส่งผ่านพารามิเตอร์แบบสอบถามไปยังเซิร์ฟเวอร์ อันที่จริงมีตัวละครมากมายที่มีฟังก์ชั่นพิเศษ: $&+,/:;=?@. เมื่อคุณจำเป็นต้องใช้ตัวอักษรเหล่านี้ใน URL สำหรับเหตุผลอื่นใดนอกเหนือจากฟังก์ชั่นพิเศษที่คุณต้องทำสิ่งที่เรียกว่าการเข้ารหัสเปอร์เซ็นต์
การเข้ารหัสเป็นเปอร์เซ็นต์คือเมื่อคุณใช้ค่าเลขฐานสิบหกของตัวละครและเติม%อักขระไปที่จุดเริ่มต้นของอักขระ ยกตัวอย่างเช่นตัวละคร?จะถูกเข้ารหัสเป็น%3Fและตัวละครจะถูกเข้ารหัสเป็น& %26ใน URL โดยเฉพาะสิ่งนี้จะช่วยให้คุณสามารถส่งอักขระเหล่านี้เป็นข้อมูลผ่าน URL โดยไม่ทำให้เกิดปัญหาในการแยกวิเคราะห์ ความท้าทายของคุณคือการใช้สายอักขระและเข้ารหัสเปอร์เซ็นต์อักขระทั้งหมดที่จำเป็นต้องเข้ารหัส
ความท้าทาย
คุณจะต้องเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในสายอักขระเดียวซึ่งประกอบด้วยอักขระที่มี codepoints 00-FF (ASCII และอักขระ ASCII เพิ่มเติม) จากนั้นคุณจะต้องส่งออกหรือส่งกลับสตริงเดียวกันโดยมีการเข้ารหัสเปอร์เซ็นต์อักขระแต่ละตัวหากจำเป็น บิวด์อินที่ทำให้งานนี้สำเร็จไม่ได้รับอนุญาตและไม่เป็นช่องโหว่มาตรฐาน สำหรับการอ้างอิงนี่คือรายการของตัวละครทุกตัวที่ต้องเข้ารหัสเป็นเปอร์เซ็นต์:
- อักขระควบคุม (Codepoints 00-1F และ 7F)
- อักขระ ASCII เพิ่มเติม (Codepoints 80-FF)
- อักขระที่จองไว้ (
$&+,/:;=?@เช่น codepoints 24, 26, 2B, 2C, 2F, 3A, 3B, 3D, 3F, 40) - อักขระที่ไม่ปลอดภัย (
" <>#%{}|\^~[]`เช่น codepoints 20, 22, 3C, 3E, 23, 25, 7B, 7D, 7C, 5C, 5E, 7E, 5B, 5D, 60)
นี่คือรายการเดียวกัน แต่เป็นรายการของ codepoints ทศนิยม:
0-31, 32, 34, 35, 36, 37, 38, 43, 44, 47, 58, 59, 60, 62, 61, 63, 64, 91, 92, 93, 94, 96, 123, 124, 125, 126, 127, 128-255
นี่คือโค้ดกอล์ฟดังนั้นรหัสที่สั้นที่สุดในหน่วยไบต์ (หรือวิธีการให้คะแนนทางเลือกที่ได้รับอนุมัติ) ชนะ!
กรณีทดสอบ
http://codegolf.stackexchange.com/ => http%3A%2F%2Fcodegolf.stackexchange.com%2F
[@=>]{#} => %5B%40%3D%3E%5D%7B%23%7D
Test String => Test%20String
ÑÉÐÔ® => %D1%C9%D0%D4%AE
=> %0F%16%7F (Control characters 0F, 16, and 7F)
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ => %80%81%82%83%84%85%86%87%88%89%8A%8B%8C%8D%8E%8F%90%91%92%93%94%95%96%97%98%99%9A%9B%9C%9D%9E%9F%A0%A1%A2%A3%A4%A5%A6%A7%A8%A9%AA%AB%AC%AD%AE%AF%B0%B1%B2%B3%B4%B5%B6%B7%B8%B9%BA%BB%BC%BD%BE%BF%C0%C1%C2%C3%C4%C5%C6%C7%C8%C9%CA%CB%CC%CD%CE%CF%D0%D1%D2%D3%D4%D5%D6%D7%D8%D9%DA%DB%DC%DD%DE%DF%E0%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%EB%EC%ED%EE%EF%F0%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FB%FC%FD%FE%FF (Extended ASCII characters 80-FF)
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ => %20!%22%23%24%25%26'()*%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
EFไม่มีเครื่องหมายคำถาม