URL становятся слишком длинными. Итак, вы должны реализовать алгоритм для сокращения URL.
я. Структура URL
URL состоит из 2 основных частей: домена и пути . Домен - это часть URL до первого слеша. Вы можете предположить, что URL не включает протокол. Путь это все остальное.
II. Домен
Домен URL будет что - то вроде: xkcd.com
meta.codegolf.stackexcchhannnge.cooom
. Каждая часть разделена периодом, например blag.xkcd.com
, в частях это «blag», «xkcd» и «com». Вот что вы будете делать с этим:
Если он содержит более двух частей, отложите последние две части в сторону и объедините первую букву остальных частей.
Затем соедините это с первым письмом до второй части.
Добавьте точку, а также вторую и третью букву от второй до последней части.
Откажитесь от последней части.
III. Тропинка
Путь будет так: /questions/2140/
/1407/
. Как и прежде, «части» разделяются косыми чертами. Для каждой части пути выполните:
Добавить косую черту
Если он полностью состоит из десятизначных цифр, интерпретируйте его как число и преобразуйте в целое число-36.
В противном случае добавьте первую букву детали.
В конце добавьте косую черту.
внутривенно Разный
- Это код-гольф , поэтому выигрывает самый короткий код.
- Путь может быть пустым, но URL всегда будет заканчиваться косой чертой.
- Там не будет протокола (например
http://
,file:///
) - В домене никогда не будет меньше двух частей.
- Применяются стандартные лазейки.
Примеры
In: xkcd.com/72/
Out:x.kc/20/
In: math.stackexchange.com/a/2231/
Out:ms.ta/a/1pz/
In: hello.org/somecoolcodeintrepreteriijjkk?code=3g3fzsdg32,g2/
Out:h.el/s/
источник
kk
и все, что начинается с,?
является строкой запроса, которая не должна заканчиваться косой чертой? Также не все URL будут заканчиваться косой чертой/
, какwww.something.com/path
. Или это не имеет отношения к цели этого вызова?Ответы:
Pyth,
9385 байтСобранный вручную в псевдокод Python:
Наконец мучение заканчивается ...
источник
JavaScript (ES6), 149 байт
объяснение
Я сделал это независимым от решения @ Neil, но в итоге оно выглядело очень похожим.
Тестовое задание
Показать фрагмент кода
источник
JavaScript ES6, 157 байт
Изменить: Сохранено 4 байта благодаря Doᴡɴɢᴏᴀᴛ.
источник
.split('/')
и.split('.')
в строковые шаблоныjoin
!Python 2,
378365 байтОбновить
Гольф немного вниз. ~ 150 байт для функции base36 раздражают, но я не могу избавиться от них, пока в python нет встроенной функции для этого ...
Старая версия
Поскольку в Python нет встроенного способа конвертировать целые числа в base36-String, я взял реализацию от numpy и проиграл ее. Отдых довольно прост, я буду играть в гольф больше после работы. Предложения всегда приветствуются!
источник
Pyhton 2,
336329 байтОбновить
исправлено и сокращено благодаря webwarrior
оригинал
Версия DenkerAffe с некоторыми модами: правильно обрабатывать схему "foo / bar? Baz", плюс, нет необходимости в отрицательном регистре в функции преобразования base36.
источник
r+=chr((range(48,58)+range(65,91))[a%36])