Код гольфу: результати розбиття Google


16

Коли ви шукаєте щось у Google, на сторінці результатів користувач може побачити зелені посилання для першої сторінки результатів.

У найкоротшій формі, в байтах, використовуючи будь-яку мову, відображайте ці посилання на stdout у вигляді списку. Ось приклад для перших результатів запиту обміну стеками:

Зйомка екрана

Вхід:

ви вибираєте: URL ( www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8) або простоstackexchange

Вихід:

french.stackexchange.com/, stackoverflow.com/, fr.wikipedia.org/wiki/Stack_Exchange_Network, en.wikipedia.org/wiki/Stack_Exchange,...

Правила:

  • Ви можете використовувати скорочувачі URL-адрес чи інші інструменти пошуку / API, якщо результати будуть такими ж, як пошук https://www.google.com .

  • Це нормально, якщо у вашій програмі є такі побічні ефекти, як відкриття веб-браузера, тож криптичні сторінки html / js Google можуть читатися під час їх відображення.

  • Ви можете використовувати плагіни браузера, сценарії користувачів ...

  • Якщо ви не можете використовувати stdout, надрукуйте його на екрані, наприклад, спливаюче або javascript-попередження!

  • Вам не потрібно закінчення / або початкові http (и): //

  • Ви не повинні показувати жодне інше посилання

  • Найкоротший код виграє!

  • Удачі !

EDIT: Цей гольф закінчується 07/08/15.


Оскільки ви користуєтесь google.fr, чи потрібно це використовувати і ми?
Бета-розпад

Ви можете використовувати будь-який Google, який хочете. Я французький, тому я використав .fr, але ви можете використовувати .com чи .що все :) Неважливо
WayToDoor

І скорочені URL-адреси, такі, як gogle.deдобре, також?
Бета-розпад

Ви можете використовувати скорочувачі URL-адрес або інші інструменти пошуку / API, якщо результати будуть такими ж, як пошук на google.com , так що так
WayToDoor

6
У випадку, якщо вас спокушає: пам’ятайте, що ви не можете розібрати HTML з regex
Луїс Мендо,

Відповіді:


17

Баш + греп + рись, 38

Оскільки ми можемо відкрити веб-браузер, то я буду використовувати lynx:

lynx -dump $1|grep -Po '(?<=d:)[^&]+'

(Завдяки @manatwork за grepвикористання замість sed)

Ми передаємо всю URL-адресу в якості параметра:

$ ./gr.sh "www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8"
http://stackexchange.com/
https://en.wikipedia.org/wiki/Stack_Exchange
https://twitter.com/stackexchange
https://play.google.com/store/apps/details?id=com.stackexchange.marvin
https://github.com/StackExchange/StackExchange.Redis
https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md
https://www.crunchbase.com/organization/stack-exchange
$ 

Що дає той самий список, що і:

введіть тут опис зображення


Ну, це зручно: D
бета-розпад

3
sedдобре. sedдовго. Спробуйте GNU grep:grep -Po '(?<=d:)[^&]+'
manatwork

@manatwork Так, звичайно, дякую!
Цифрова травма

1
Чи було скопійовано назву відповіді? ;) Жоден з bash, lynxабо sed(і зараз grep) не є частиною Coreutils.
манатура

3
Я вірю, що ви також можете зробити: lynx -dump $1|grep -Po 'd:\K[^&]+'(неперевірено)
Jarmex

4

Рубі, 91 77 байт

require'open-uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

Був би коротшим без усіх requires. ARGH !!! EDIT : Отже, виявляється, мені не потрібно другого вимагати! Дякуємо @manatwork за те, що вказав на це.

Старіша версія (з марною require):

require'open-uri';require 'uri';open(gets).read.scan(/ed:(.*?)\+/){|x|puts URI.decode x[0]}

Правила дозволяють використовувати параметри командного рядка до тих пір, поки ви їх також порахуєте : pastebin.com/PnpjnXji (Якщо ви вважаєте, що це несправедливий стиль,
сміливо

Ви впевнені, що вам потрібно явно require'uri'? У 2.1.2 я використовую URIмодуль стає доступним після того, як вимагають відкритих урі.
манатура

@manatwork Дякую! Оновлено.
kirbyfan64sos

Тільки для моєї цікавості: будь-яка причина, щоб не змінити блок коду, як у моїй альтернативній пастелі? (Звичайно, мені цікаво з технічних причин, а не з особистих причин, якщо це вас стримує.)
manatwork

@manatwork мені потрібно, але мені було занадто ледаче, щоб з’ясувати кількість байтів на даний момент. :)
kirbyfan64sos

4

Мова Вольфрама (Mathematica), 135

StringJoin/@(Cases[URLExecute["www.google.com/search",{"q"->#},"XMLObject"],XMLElement["cite",_,l_]:>l,-1]/.XMLElement["b",_,{s_}]:>s)&

більш читабельний:

StringJoin/@(Cases[
    URLExecute["www.google.com/search",{"q"->#},"XMLObject"], 
    XMLElement["cite",_,l_]:>l,-1] /. 
    XMLElement["b",_,{s_}]:>s)

Чи потрібні простори? Без них я отримую 136 байт .
kirbyfan64sos

зовсім не потрібно ... Я дійсно повинен підтягнути це ..
Чуй

Ви можете зробити що - щось на зразок цієї відповіді , щоб скоротити це?
Цифрова травма

3

Python 3, 141 байт

Ніде не було відповіді Digital Trauma, але розробити регулярний вираз було весело: D

import re
print('\n'.join(map(lambda x:x[3:],re.findall('te>http[s]?://\w+\.[a-z]+[](/a-z\.)?]+',__import__("requests").get(input()).text))))

Для введення http://www.google.com/search?q=stackexchange&ie=utf-8&oe=utf-8програмні виходи:

https://en.wikipedia.org/wiki/
https://twitter.com/
https://play.google.com/store/apps/details?id...
https://www.crunchbase.com/organization/
https://www.facebook.com/
https://github.com/

Реалізує підказки grc


Вам справді потрібно користуватися __import__?
ckjbgames

Також використовуйте [x for x in spam]конструкцію замість map. Це заощадить вам велику кількість байт.
ckjbgames

2

Фактор, 31 байт

Для цього, можливо, є бібліотека.

[ google-search [ url>> ] map ]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.