introduzione
Come alcuni di voi sanno, gli URL in realtà hanno un elenco di caratteri che fanno cose speciali. Ad esempio, il /carattere separa parti dell'URL, e ?, &e =caratteri vengono utilizzati per passare di query parametri al server. In realtà, v'è un gruppo di caratteri con funzioni speciali: $&+,/:;=?@. Quando devi utilizzare questi caratteri nell'URL per qualsiasi altro motivo oltre alle funzioni speciali, devi fare qualcosa chiamato codifica percentuale .
La codifica percentuale avviene quando si prende il valore esadecimale di un %personaggio e si antepone un carattere all'inizio di esso. Ad esempio, il personaggio ?verrebbe codificato come %3Fe il personaggio &verrebbe codificato come %26. In un URL in particolare, ciò consente di inviare questi caratteri come dati tramite l'URL senza causare problemi di analisi. La tua sfida sarà quella di prendere una stringa e codificare in percentuale tutti i caratteri che devono essere codificati.
La sfida
Dovresti scrivere un programma o una funzione che accetta una singola stringa composta da caratteri con punti di codice 00-FF (caratteri ASCII ed ASCII estesi). Dovrai quindi generare o restituire la stessa stringa con ogni carattere codificato in percentuale, se necessario. Non sono consentiti built-in che svolgono questo compito, né scappatoie standard. Per riferimento, ecco un elenco di tutti i caratteri che devono essere codificati in percentuale:
- Caratteri di controllo (Codepoints 00-1F e 7F)
- Caratteri ASCII estesi (Codepoints 80-FF)
- Caratteri riservati (
$&+,/:;=?@ovvero codici di riferimento 24, 26, 2B, 2C, 2F, 3A, 3B, 3D, 3F, 40) - Caratteri non sicuri (
" <>#%{}|\^~[]`ovvero punti di codice 20, 22, 3C, 3E, 23, 25, 7B, 7D, 7C, 5C, 5E, 7E, 5B, 5D, 60)
Ecco uno stesso elenco, ma invece come un elenco di punti decimali:
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
Questo è il codice golf, quindi vince il codice più breve in byte (o metodo di punteggio alternativo approvato)!
Casi test
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
EFnon contenga il punto interrogativo.