Giriş
Bazılarınızın bildiği gibi, URL'ler aslında özel şeyler yapan karakterlerin bir listesine sahiptir. Örneğin, /karakter URL parçalarını ayırır ve ?, &ve =karakterler sunucuya sorgu parametrelerini geçirmek için kullanılır. Aslında, özel işlevlere sahip karakterlerin bir demet vardır: $&+,/:;=?@. Özel işlevlerin yanı sıra URL'de bu karakterleri başka herhangi bir nedenle kullanmanız gerektiğinde, yüzde kodlama adı verilen bir şey yapmanız gerekir .
Kodlama yüzdesi, bir karakterin onaltılı değerini alıp başına bir %karakteri yerleştirdiğiniz zamandır . Örneğin, karakter ?olarak kodlanır %3Fve karakter &olarak kodlanır %26. Özellikle bir URL'de, bu, ayrıştırma sorunlarına neden olmadan bu karakterleri URL üzerinden veri olarak göndermenizi sağlar. Sizin meydan okuma bir dize almak ve kodlanması gereken tüm karakterlerin yüzde kodlamak olacaktır.
Meydan okuma
Kod noktaları 00-FF (ASCII ve Genişletilmiş ASCII karakterleri) olan karakterlerden oluşan tek bir dize alan bir program veya işlev yazmalısınız. Daha sonra, gerekiyorsa yüzde kodlu her karakterle aynı dizeyi çıktılamanız veya döndürmeniz gerekir. Bu görevi yerine getiren yerleşik öğelere ve standart boşluklara izin verilmez. Referans olarak, yüzde kodlanması gereken her karakterin bir listesi:
- Kontrol karakterleri (Kod noktaları 00-1F ve 7F)
- Genişletilmiş ASCII karakterleri (Kod noktaları 80-FF)
- Ayrılmış karakterler (
$&+,/:;=?@yani kod noktaları 24, 26, 2B, 2C, 2F, 3A, 3B, 3D, 3F, 40) - Güvenli olmayan karakterler (
" <>#%{}|\^~[]`ör. Kod noktaları 20, 22, 3C, 3E, 23, 25, 7B, 7D, 7C, 5C, 5E, 7E, 5B, 5D, 60)
İşte aynı liste, ancak ondalık kod noktalarının listesi olarak:
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
Bu kod golf, bayt (veya onaylı alternatif puanlama yöntemi) en kısa kod kazanır!
Test Durumları
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
EFsoru işareti içermiyor.