Adresy URL stają się zbyt długie. Musisz więc zaimplementować algorytm, aby skrócić adres URL.
ja. Struktura adresu URL
Adres URL składa się z 2 głównych części: domeny i ścieżki . Domena jest częścią adresu URL przed pierwszym ukośnikiem. Możesz założyć, że adres URL nie zawiera protokołu. Ścieżka to wszystko inne.
ii. Domena
Domeną URL będzie coś takiego: xkcd.com
meta.codegolf.stackexcchhannnge.cooom
. Każda część jest oddzielona okresem, np. W blag.xkcd.com
części są „blag”, „xkcd” i „com”. Oto, co z tym zrobisz:
Jeśli zawiera więcej niż dwie części, odłóż dwie ostatnie na bok i połącz pierwszą literę pozostałych części.
Następnie połącz to z pierwszą literą do części od drugiej do ostatniej.
Dodaj kropkę oraz drugą i trzecią literę części od drugiej do ostatniej.
Odrzuć ostatnią część.
iii. Ścieżka
Ścieżka będzie jak: /questions/2140/
/1407/
. Tak jak poprzednio, „części” są oddzielone ukośnikami. Dla każdej części ścieżki wykonaj:
Dodaj ukośnik
Jeśli jest w całości wykonany z dziesięciu cyfr podstawy, zinterpretuj go jako liczbę i przekonwertuj na liczbę całkowitą base-36.
W przeciwnym razie dodaj pierwszą literę części.
Na końcu dodaj ukośnik.
iv. Misc.
- To jest golf golfowy , więc wygrywa najkrótszy kod.
- Ścieżka może być pusta, ale adres URL zawsze kończy się ukośnikiem.
- Nie będzie to protokół (np
http://
,file:///
) - W domenie nigdy nie będzie mniej niż dwie części.
- Obowiązują standardowe luki.
Przykłady
W: xkcd.com/72/
Out:x.kc/20/
W: math.stackexchange.com/a/2231/
Out:ms.ta/a/1pz/
W: hello.org/somecoolcodeintrepreteriijjkk?code=3g3fzsdg32,g2/
Out:h.el/s/
źródło
kk
a wszystko, co zaczyna się od,?
jest ciągiem zapytania, który nie powinien kończyć się ukośnikiem? Również nie wszystkie adresy URL kończą się ukośnikiem/
, npwww.something.com/path
. Czy jest to nieistotne dla celów tego wyzwania?Odpowiedzi:
Pyth,
9385 bajtówRęcznie skompilowany do pseudokodu pythonowego:
Wreszcie rozkosz kończy się ...
źródło
JavaScript (ES6), 149 bajtów
Wyjaśnienie
Uczyniłem to niezależnym od rozwiązania @ Neil, ale ostatecznie wyglądało to bardzo podobnie.
Test
Pokaż fragment kodu
źródło
JavaScript ES6, 157 bajtów
Edycja: Zapisano 4 bajty dzięki Doᴡɴɢᴏᴀᴛ.
źródło
.split('/')
i tworzyć.split('.')
szablony ciągówjoin
!Python 2,
378365 bajtówAktualizacja
Trochę zagrał w golfa. ~ 150 bajtów dla funkcji base36 jest denerwujące, ale nie mogę się tego pozbyć, dopóki Python nie ma wbudowanej funkcji ...
Stara wersja
Ponieważ Python nie ma wbudowanego sposobu konwersji ints na base36-String, wziąłem implementację z numpy i grałem w golfa. Odpoczynek jest dość prosty, po pracy będę grać w golfa. Tymczasem sugestie są zawsze mile widziane!
źródło
Pyhton 2,
336329 bajtówaktualizacja
naprawione i krótsze dzięki webwarrior
oryginał
Wersja DenkerAffe z niektórymi modami: poprawnie obsługuje schemat „foo / bar? Baz”, a ponadto nie ma potrzeby występowania ujemnego przypadku w funkcji konwersji base36.
źródło
r+=chr((range(48,58)+range(65,91))[a%36])