Einführung
Wie einige von Ihnen vielleicht wissen, enthalten URLs tatsächlich eine Liste von Zeichen, die bestimmte Aufgaben ausführen. Zum Beispiel kann die /trennt Charakter Teile der URL, und die ?, &und =werden Zeichen verwendet , um Abfrageparameter an den Server übergeben. In der Tat gibt es eine Reihe von Zeichen mit Sonderfunktionen: $&+,/:;=?@. Wenn Sie diese Zeichen in der URL aus einem anderen Grund als den Sonderfunktionen verwenden müssen, müssen Sie eine sogenannte Prozentcodierung durchführen .
Prozentcodierung ist, wenn Sie den Hexadezimalwert eines Zeichens nehmen und ein %Zeichen an den Anfang des Zeichens stellen. Beispielsweise ?würde das Zeichen wie folgt codiert %3Fund das Zeichen &würde wie folgt codiert %26. In einer URL können Sie diese Zeichen als Daten über die URL senden, ohne dass Analyseprobleme auftreten. Ihre Herausforderung besteht darin, eine Zeichenfolge zu verwenden und alle Zeichen, die codiert werden müssen, in Prozent zu codieren.
Die Herausforderung
Sie müssen ein Programm oder eine Funktion schreiben, die eine einzelne Zeichenfolge enthält, die aus Zeichen mit den Codepunkten 00-FF (ASCII- und Extended ASCII-Zeichen) besteht. Sie müssen dann bei Bedarf für jedes Zeichen die gleiche Zeichenfolge in Prozent ausgeben oder zurückgeben. Built-Ins, die diese Aufgabe erfüllen, sind nicht zulässig, und es handelt sich auch nicht um Standardlücken. Als Referenz finden Sie hier eine Liste aller Zeichen, die in Prozent codiert werden müssen:
- Steuerzeichen (Codepunkte 00-1F und 7F)
- Erweiterte ASCII-Zeichen (Codepoints 80-FF)
- Reservierte Zeichen (
$&+,/:;=?@dh Codepunkte 24, 26, 2B, 2C, 2F, 3A, 3B, 3D, 3F, 40) - Unsichere Zeichen (
" <>#%{}|\^~[]`dh Codepunkte 20, 22, 3C, 3E, 23, 25, 7B, 7D, 7C, 5C, 5E, 7E, 5B, 5D, 60)
Hier ist die gleiche Liste, aber stattdessen als Liste der Dezimalcodepunkte:
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
Dies ist Codegolf, also gewinnt der kürzeste Code in Bytes (oder die genehmigte alternative Bewertungsmethode)!
Testfälle
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
EFenthält kein Fragezeichen.