URL terlalu panjang. Jadi, Anda harus menerapkan algoritma untuk mempersingkat URL.
saya. Struktur URL
URL memiliki 2 bagian utama: domain dan jalur . Domain adalah bagian dari URL sebelum garis miring pertama. Anda dapat berasumsi bahwa URL tidak termasuk protokol. Jalan adalah segalanya.
ii. Domain
Domain dari URL akan menjadi sesuatu seperti: xkcd.com
meta.codegolf.stackexcchhannnge.cooom
. Setiap bagian dipisahkan periode, misalnya dalam blag.xkcd.com
, bagian-bagiannya adalah "blag", "xkcd", dan "com". Inilah yang akan Anda lakukan dengannya:
Jika berisi lebih dari dua bagian, sisihkan dua yang terakhir dan gabungkan huruf pertama dari sisa bagian tersebut.
Kemudian, gabungkan itu ke huruf pertama ke bagian kedua hingga terakhir.
Tambahkan titik dan huruf kedua dan ketiga dari bagian kedua hingga terakhir.
Buang bagian terakhir.
aku aku aku. Jalan
Jalan itu akan menjadi seperti: /questions/2140/
/1407/
. Seperti sebelumnya, "bagian-bagian" dipisahkan oleh garis miring. Untuk setiap bagian di jalan, lakukan:
Tambahkan garis miring
Jika benar-benar terbuat dari basis-sepuluh digit, tafsirkan sebagai angka dan konversikan ke basis-36 integer.
Kalau tidak, tambahkan huruf pertama bagian itu.
Pada akhirnya, tambahkan garis miring.
iv. Lain-lain
- Ini kode-golf , jadi kode terpendek menang.
- Path bisa kosong, tetapi URL akan selalu diakhiri dengan garis miring.
- Tidak akan ada protokol (misalnya
http://
,file:///
) - Tidak akan pernah ada kurang dari dua bagian dalam domain.
- Celah standar berlaku.
Contohnya
Masuk: xkcd.com/72/
Keluar:x.kc/20/
Masuk: math.stackexchange.com/a/2231/
Keluar:ms.ta/a/1pz/
Masuk: hello.org/somecoolcodeintrepreteriijjkk?code=3g3fzsdg32,g2/
Keluar:h.el/s/
sumber
kk
dan semuanya dimulai dengan?
string kueri, yang seharusnya tidak diakhiri dengan garis miring? Juga tidak semua URL akan berakhir dengan garis miring/
, sepertiwww.something.com/path
. Atau apakah ini tidak relevan dengan tujuan tantangan ini?Jawaban:
Pyth,
9385 byteDikompilasi dengan tangan ke pseudocode pythonic:
Akhirnya, penyiksaan berakhir ...
sumber
JavaScript (ES6), 149 byte
Penjelasan
Saya membuat ini independen dari solusi @ Neil tetapi akhirnya tampak sangat mirip.
Uji
Tampilkan cuplikan kode
sumber
JavaScript ES6, 157 byte
Sunting: Disimpan 4 byte berkat Doᴡɴɢᴏᴀᴛ.
sumber
.split('/')
dan.split('.')
menjadi templat stringjoin
juga!Python 2,
378365 BytesMemperbarui
Golf turun sedikit. ~ 150 Bytes untuk fungsi dasar36 mengganggu, tapi saya tidak bisa menghilangkannya sampai python memiliki builtin untuk itu ...
Versi lama
Karena Python tidak memiliki cara builtin untuk mengkonversi ints menjadi base36-String, saya mengambil implementasinya dari numpy dan menurunkannya. Istirahat cukup mudah, saya akan menurunkannya setelah bekerja. Sementara itu, saran selalu dihargai!
sumber
Pyhton 2,
336329 bytememperbarui
diperbaiki dan terima kasih lebih pendek untuk webwarrior
asli
Versi DenkerAffe dengan beberapa mods: menangani skema "foo / bar? Baz" dengan benar, plus, tidak perlu untuk case negatif dalam fungsi konversi base36.
sumber
r+=chr((range(48,58)+range(65,91))[a%36])