Introducción
Como algunos de ustedes saben, las URL realmente tienen una lista de caracteres que hacen cosas especiales. Por ejemplo, el /carácter separa las partes de la URL, y el ?, &y =los personajes se utiliza para pasar parámetros de consulta al servidor. De hecho, hay un montón de personajes con funciones especiales $&+,/:;=?@. Cuando necesite usar estos caracteres en la URL por cualquier otro motivo además de las funciones especiales, debe hacer algo llamado codificación porcentual .
La codificación porcentual es cuando tomas el valor hexadecimal de un %personaje y antepones un carácter al comienzo del mismo. Por ejemplo, el carácter ?se codificaría como %3F, y el carácter &se codificaría como %26. En una URL específicamente, esto le permite enviar estos caracteres como datos a través de la URL sin causar problemas de análisis. Su desafío será tomar una cadena y codificar en porcentaje todos los caracteres que deben codificarse.
El reto
Deberá escribir un programa o función que tome una sola cadena que consta de caracteres con puntos de código 00-FF (caracteres ASCII y ASCII extendido). Luego tendrá que generar o devolver la misma cadena con cada carácter codificado porcentual si es necesario. Los elementos integrados que realizan esta tarea no están permitidos, ni las lagunas estándar. Como referencia, aquí hay una lista de todos los caracteres que deben codificarse en porcentaje:
- Caracteres de control (puntos de código 00-1F y 7F)
- Caracteres ASCII extendidos (puntos de código 80-FF)
- Caracteres reservados (
$&+,/:;=?@es decir, puntos de código 24, 26, 2B, 2C, 2F, 3A, 3B, 3D, 3F, 40) - Caracteres inseguros (
" <>#%{}|\^~[]`es decir, puntos de código 20, 22, 3C, 3E, 23, 25, 7B, 7D, 7C, 5C, 5E, 7E, 5B, 5D, 60)
Aquí hay una misma lista, pero en cambio como una lista de puntos de código decimales:
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
Este es el código de golf, por lo que gana el código más corto en bytes (o método de puntuación alternativo aprobado).
Casos de prueba
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
EFno contiene el signo de interrogación.