Вызов
Получив действительную goo.gl
сокращенную ссылку, выведите исходный URL.
пример
goo.gl/qIwi3N
дал бы что-то вроде https://codegolf.stackexchange.com/
. Для ввода вы можете выбрать иметь https?://
в начале, вы можете иметь www.
до goo.gl
, и вы также можете избавиться от, goo.gl
если вы хотите только конец URL. Косая черта в конце необязательна для ввода и вывода. Таким образом, ваш ввод будет соответствовать регулярному выражению (https?://)?(www\.)?(goo\.gl/)?[A-Za-z0-9]+/?
. Для вывода вы можете выбрать, выводить или нет, выводить https?://
или нет www.
, а также выводить косую черту или нет. Однако вы должны соответствовать форматированию ввода-вывода .
Я скажу, что вам не нужно согласовываться с « https
против» http
для выходных данных (но вы должны быть согласованными для входных данных), если вы согласны с тем, включаете ли вы всю https?://
часть или нет .
Тестовые случаи
Они написаны без https://
, нет www.
, без косой черты на входе; да https://
, нет www.
, и да косая черта в выводе.
input -> output
goo.gl/HaE8Au -> https://codegolf.stackexchange.com/
goo.gl/IfZMwe -> https://stackoverflow.com/
goo.gl/JUdmxL -> https://chat.stackexchange.com/rooms/240/the-nineteenth-byte
Предположения
- Вы можете предположить, что сокращенная ссылка не будет указывать на другую сокращенную ссылку и что целевой сайт вернет код состояния
2xx
или4xx
(без перенаправлений).
Вы можете перейти сюда и ввести URL-адрес, чтобы применить обратную операцию: https://goo.gl/
www.
имеет значение. Это просто в большинстве случаев тот же сервер, к которому он относится. Попробуйте напримерhttp://pks.mpg.de
иhttp://www.pks.mpg.de
. Первый не может быть решен, в то время как последний может.Ответы:
CJam , 7 байтов
Тестовый забег
Как это работает
lg
читает строку из STDIN и делает запрос GET к этому URL. Сокращенный URL-адрес вызывает перенаправление 301, которое CJam не выполняет. Для первого теста, это подталкиваетв стеке. Наконец,
'"/
разделяется на двойные кавычки и5=
получает шестой кусок. Вывод неявный.источник
Python 2 + запросы, 44 байта
requests.get(URL)
выдает запрос GET на указанный URL. Поле объекта ответаurl
содержит окончательный URL после любых перенаправлений. Протокол (напримерhttp://
) требуется для ввода, и ожидается, что ввод будет в кавычках.источник
requests
не является встроенным, поэтому его необходимо добавить в заголовок языка.lambda
выражение для -3 байтБаш ,
2824 байтаВывод заканчивается переводом строки в стиле Windows, что, я полагаю, приемлемо.
Тестовый забег
Как это работает
curl -I
отправляет запрос HEAD, поэтому он выбирает только заголовки HTTP указанного URL. Для первого теста, он печатаетили похожие. Выходные данные передаются по конвейеру
grep -oehtt.*
, который отображает только те части, которые соответствуют указанному регулярному выражению, т. Е. Строка htt, за которой следует любое количество символов до конца строки.источник
htt.*
поэтому предполагается, что в текущем каталоге не существует файлов, соответствующих ему. Для большинства регулярных выражений я бы согласился на этом сайте, что вероятность совпадения файла достаточно мала, и это нормально, но в этом случае я сам так не думаю. Исходный код ядра Linux включает, например, файлы с именамиhtt.c
иhtt.h
. Изменение его наgrep -oehtt.*
не увеличивает число байтов, но значительно снижает вероятность возникновения проблем.-oehtt.*
это хороший способ сделать ее более надежной.PHP, 36 байт
Ввод с
https://
get_headers
25 байт, если
Location:
в начале не должны быть удаленыесли Google меняет заголовок HTTP, здесь более безопасная версия
источник
Python 2 , 43 байта
Не имеет зависимостей и в настоящее время короче, чем другой ответ Python. пожимают плечами вход должен соответствовать
https?://goo\.gl/.*?/?
источник
NodeJS, 60 байт
Ввод в формате
http://goo.gl/<id>
.источник