Как многие гики могут знать, большинство страниц (я думаю, 95%) википедии в конечном итоге ведут к философии, например так:
Нажмите на первую не курсивную или в скобках ссылку, которая относится к другой обычной статье: (т.е. не File: или Special:, но такие вещи, как Wikipedia: все в порядке), и повторяйте эту ссылку, пока не дойдете до философии.
Сценарий должен:
- Возьмите первую страницу в качестве ввода
- Напечатайте название каждой статьи, к которой оно относится
- И напечатать, сколько статей потребовалось, чтобы добраться до Философии, и если это не так.
Вы начинаете с 1000 очков и теряете по одному за каждого персонажа в коде. Бонусные очки за:
Обнаружение зацикливания статей и остановка: +50
Обнаружение зацикливания статей и запрос на переход пользователя к следующей ссылке на статью: +170
Разрешение по умолчанию для первой проверки в качестве аргумента командной строки или аналогичного: +140
Самый высокий балл выигрывает.
code-challenge
AlphaModder
источник
источник
Ответы:
Рубин, 1000 -
303299337 - 50373 - 170382 - 170 - 140379 - 170 - 140 символов =697701713797928931Я уверен, что есть много улучшений.
(Это требует Нокогири)
Пример выполнения:
Пример того, где я должен был перейти на другую ссылку
Трюки, которые я использовал:
p a
только для получения не курсивных ссылок, потому что все ссылки в реальной статье, которые не являются курсивом, всегда находятся в элементах абзаца в Википедии.источник
«BASH » - (Если не ошибаюсь: 1000 - 397 + 170 + 140 = 913 баллов)«BASH» - (Если не ошибаюсь: 1000 - 386 + 170 + 140 = 924 балла)"BASH" - (Если не ошибаюсь: 1000 - 381 + 170 + 140 = 929 баллов)
BASH специально указан в кавычках, поскольку представляет собой набор инструментов, используемых в оболочках * nix, но заключенных в сценарий bash.
Изменить 1:
http://
поcurl
умолчанию для этого.href=
соответствие для якорей, такf=
как<a>
оно не имеет других нормальных атрибутов, заканчивающихся наf
. (Это возможность пользовательских тегов. Пока не видел.)!Phil
вместоNoPhil
. Это один немного изворотливый , как можно было бы также сказать , например!
,0
,N
,!P
или аналогичный.-s
наcurl
может быть удален , чтобы уменьшить еще три байта, но это дало бы грязный выход. Не уверен, что это проблема.Используя причуды, код получился бы в 379 байтах, 931 балле.
Я также мог бы реализовать @plannapus с использованием соответствующего (надеюсь) навигационного блока , добавив
(p|ul).*?<(\1)
добавление шести байтов (вычитая шесть точек).Изменить 2:
Используется
${#c[@]}
для печати степеней разделения вместо$i
счетчика.Используя причуды, код получился бы в 374 байтах, 936 пунктах.
Я вызываю Ктулху и выбираю решение regexp + bash / shell / * nix.
Stolen:
<p>
трюк из @Doorknob of Snow .Реализовано:
Требования:
bash
v.?grep
с поддержкой-P
(PCRE).sed
curl
cut
Использование:
Встроенный код Скопировать в файл.
chmod +x filename
, Запустите./script /wiki/…
из оболочки Bash.Расширенный и объясненный код:
источник
JavaScript 726 (444 символа [556] + 170)
Теперь я ценю, что это может быть недействительным как букмарклет, но я все равно с удовольствием возился с ним.
Использование: перейдите на страницу, с которой вы хотите начать, и запустите в консоли следующее:
Для JavaScript вывод выглядит следующим образом:
В этом решении предполагается, что вы хотите перейти к следующей ссылке в обнаруживаемом цикле, но если вы
true
в концеfalse
измените на нее, вместо этого появится всплывающее окно подтверждения (довольно раздражающее ...), не уверенное, подходит ли это для вторичный бонус или нет. Я предполагаю, что нет.Отступ:
Поэтому я изначально пропустил часть про игнорирование предметов в паренсе, добавив, что это сделало его намного более многословным, поэтому я надеюсь, что этот фильтр отключится (или, надеюсь, заменит его полностью).
Работает как в Chrome, так и в Firefox (протестировано в Firefox 26)
источник
C # - 813 символов
Оценка: 1000-813 + 50 + 170 + 140 = 547 :(
Нет внешних библиотек. Обнаружение петли .
Первый аргумент - исходная статья, второй - целевая статья.
Гольф версия:
Разумная версия:
Пример прогона от «Скай» до «Философия»:
источник
Скала (294 символа => 1000-294 + 140 = 846 баллов)
Обновленное решение, которое автоматически берет следующую ссылку, если она уже была использована. Спасибо за 140 бонусных баллов.
Логика: выберите первую ссылку "/ wiki", в которой нет символа ":" (поэтому она игнорирует ссылки "File:"). Промойте и повторите с рекурсией, возвращая счетчик + 1 каждый раз. Я держу список всех предыдущих выводов под рукой, чтобы программа не входила в бесконечный цикл.
Регулярное выражение: у меня есть 2 формы регулярного выражения.
"<p>.*?\"/wiki/([^:]*?)\".*?/p>"
который находит ссылки в<p>
тегах"p>.*?/wiki/([^:]*?)\""
Это немного более экспериментальный тег, который доказал свою работоспособность, но дает другие результаты, потому что иногда он выбирает ссылки с правой панели информации. Это регулярные статьи, поэтому я считаю, что это все еще актуально. Если будет объявлено, что это не так, ОП (или кто-то еще) может оставить мне комментарий, и я смогу обновить свое решение до лучшего уровня.Я собираюсь использовать второе регулярное выражение до тех пор, пока не найду тестовый пример, где он не работает или OP не упоминает, что поиск ссылок из боковой панели не разрешен (по моему мнению, информационные панели все еще являются частью сама статья; больше резюме).
Минифицированный источник:
Читаемый Источник:
Пример вывода:
вход
Выход
источник
args(0)
чтобы получить первый аргумент, избавиться от своегоobject
иmain
определения, и я думаю, что вы можете удалить:Int
тоже. pastebin.com/YqywKcG8: Int
. Не понял, что вы делаете рекурсивный вызов. Также мой pastebin был взят из вашего старого читаемого источника, но применяются те же понятия.:Int
туда. Позже сегодня я также добавлю удобочитаемую форму имеющегося у меня решения на 333 символа. Спасибо за предложения @KChalouxobject Q extends App { ... }
абсолютно ненужна, если вы запускаете код с интерпретатором, а не компилируете с помощью scalac. Просто беги сscala <filename> [args..]
R 379 символов; 1000-379 + 170 = 791 баллов
Версия, которая спрашивает пользователей, как действовать при обнаружении зацикливания
С отступами и комментариями:
Пример выполнения:
R 325 знаков; ??? точки
Версия, которая по умолчанию принимает первую не избыточную ссылку (т.е. не зацикливающуюся).
источник