Fand dieses Bild heute im Web. Als fauler Programmierer möchte ich Google nicht öffnen und ein paar Zeichen eingeben. Viel zu viel Arbeit! Dies ist eine so wichtige Aufgabe, dass sie automatisiert werden sollte.
Herausforderung
Jeder weiß, dass das erste Bild in einem Google-Suchergebnis immer das beste ist. Daher sollte es dem Benutzer präsentiert werden.
Sie müssen ein Programm oder eine Funktion schreiben, die eine Zeichenfolge als Parameter verwendet und das erste Bild anzeigt, das bei Google gefunden wird, wenn Sie nach diesem Namen + den Wörtern glamour shot
dahinter suchen .
Google-Suchanfragen
Um bei Google nach Bildern zu suchen, sollte die URL den Abfrageparameter tbm=isch
und den Namen enthalten q=query
, query
nach dem Sie suchen möchten.
Eine gültige Abfragezeichenfolge für meinen Namen Bas
wärewww.google.com/search?tbm=isch&q=Bas
Eingang
Ihr Programm oder Ihre Funktion verwendet einen einzelnen Eingabeparameter. Dies ist der Name, nach dem Sie bei Google suchen möchten. Diese Zeichenkette wird aus den Zeichen [a-z]
, [A-Z]
, [0-9]
und (Raum). Diese Zeichenfolge kann durch Leerzeichen getrennt werden. Um bei Google nach einer durch Leerzeichen getrennten Zeichenfolge zu suchen, sollten die Leerzeichen durch ersetzt werden
+
. Dies ist beispielsweise eine gültige Abfrage:
www.google.com/search?tbm=isch&q=Bassdrop+Cumberwubwubwub+glamour+shot
Ausgabe
Das Bild kann entweder auf den Bildschirm gezeichnet oder in einer Datei (in einem beliebigen Format) gespeichert werden.
Wenn das erste Suchergebnis bei Google eine GIF-Datei ist, können Sie entweder das GIF oder einen beliebigen Frame dieses Gifs anzeigen.
Testfälle
Führen Sie dieses Snippet aus, um die erwarteten Ergebnisse anzuzeigen
Dies ist Code-Golf , kürzester Code in Bytes gewinnt!
quelle
[a-z0-9]
, hat meinen Beitrag bearbeitet. Die URLs sehen aus wie die Beispiele, die ich bereitgestellt habe, keine Codierung erforderlich, nur Platz für+
A-Z
kann auch erscheinen, nach Ihrem Beispiel zu urteilen?Antworten:
PowerShell v4 +, 160 Byte
Nimmt die Eingabe
$a
als Zeichenfolge auf. Führt einInvoke-WebRequest
(iwr
) zum entsprechenden Google-Speicherort aus, indem ein Skriptblock mit innerer Zeichenfolge für-replace
Leerzeichen+
in der Eingabezeichenfolge verwendet wird. Wir nehmen das ,.links
dass, wo das.innerhtml
ist-like
unser Eingabestring. Das ergibt die Links mit der richtigen Thumbnail-Beschreibung. Nehmen Sie die erste[0]
einer von denen, nehmen seine.innerhtml
und-split
es auf Zitate. Das vierte[3]
Element ist der Text innerhalb desimg src="
Abschnitts, also machen wir einen andereniwr
, indem wir-outf
angeben , dass sich die Datei$a.jpg
im lokalen Ordner befindet. Da dies nur die von Google generierten Miniaturansichten sind, handelt es sich garantiert um JPG.quelle
google.com
mitgoogle.nl
für -1 Byte wechselnExcel VBA + ,
465332 BytesGolf:
Vollständige
Sub
Routine, die Eingabenn
(kurz für Name) des erwarteten Typs verwendetVariant/String
und das erste Google-Bildsuchergebnis für die Abfrage dieses Namens undglamour shot
in ein Internet Explorer-Fenster ausgibt .-2 Bytes zum Entfernen von Leerzeichen in
If InStr(1, a.href, "imgres") Then
-2 Bytes zum Wechseln
.navigate (a.href)
zu.navigate a.href
-27 Bytes zum Reduzieren der
for each a in ... if (...) then ... end if .. next
Schleife aufdo until ... loop
-10 Bytes für die Kondensation
imgres
nachres
undencrypted
nachyp
-8 Bytes für initalizers zum Entfernen
j
,k
und unter der Annahme sauber Modul-1 Byte zum Wechseln
google.com
zugoogle.nl
-3 Bytes zum Ersetzen
Dim i as New ...
durchSet i=New ...
-8 Bytes zum Entfernen der
SHDocVw.
Klassenreferenz-12 Bytes zum Entfernen des
with i
Blocks-7 Bytes zum Entfernen
i.quit
- Dies führt zu einem Speicherverlust, indem der Internet Explorer im Hintergrund geöffnet bleibt. Daher wird empfohlen, stattdessen entweder die vollständige ungolfed-Version zu verwenden oder die Internet Explorer-Aufgabe nach der Verwendung über den Task-Manager zu beenden-6 Bytes zum Verschieben
i.navigate
in die Hilfsunterroutineh
-13 Bytes zum Verschieben
Do Until ... Loop
in die Hilfsunterroutine-2 Bytes , die durch Bewegen
j=0
in der Helfer- und Entfernen,j
,,0
(x2)-11 Bytes für die Konvertierung in eine anonyme Sofortfensterfunktion
-8 Bytes zum Reduzieren von Hilfsfunktionsaufrufen in
for .. next
Schleife-16 Bytes zum Ändern der Ausgabe vom
Sheets(1)
Bildobjekt zur Anzeige über dasInternetExplorer
ObjektUngolfed, 1304 Bytes
Verwendung gif
quelle
Vimperator , 30 Tastenanschläge
Alternativ 27 Tastenanschläge, wenn Sie nicht das Bild mit der höchsten Auflösung benötigen:
Video: https://youtu.be/t8824UjlYt8
Glücklicherweise ist die Standardsuchmaschine in Firefox Google, und mit Vimperator können Sie standardmäßig Hinweise eingeben. Dies ist länger als nötig, um sicherzustellen, dass es immer funktioniert, unabhängig davon, wonach Sie suchen.
Nimmt Eingaben über die Zwischenablage vor.
Erläuterung:
Vielen Dank an @TaylorScott für die Suche nach einem Edge Case.
quelle
Python 3.6,
247242232 vielleicht 224 BytesDies ist ein süßer Versuch, dieses Problem zu lösen. Die Datei wird wie
p.png
im aktuellen Verzeichnis gespeichert .Um es mit Leichtigkeit von der Kommandozeile ausgeführt wird , legen Sie einfach den obigen Inhalt in einer Datei, wie
glamour.py
und Lauf:Update 1: Bessere Version mit neuer Google URL
Update 2:
Ich habe ein paar Bytes gespeichert:
f
ohne dassys.argv
einer Variablen zuzuweisenBeautifulSoup
AufrufDer letzte ist umstritten, da er zu einer Standardausgabemeldung führt, in der der Programmierer aufgefordert wird, den Parser für die plattformübergreifende Kompatibilität anzugeben, sodass er möglicherweise als unerwünschte Ausgabe angesehen wird.
Hier ist die 224-Byte-Version:
Hier ist die 232-Byte-Version:
Die kürzere Version kann jedoch verwendet werden, wenn std.out umgeleitet wird
/dev/null
oder so: D.quelle
www.google.nl/
oder sogar,google.nl
anstatthttps://www.google.com.br/
einige Bytes zu speichernhttp://
damit es mit Anfragen funktioniert. Aber die brasilianische Google gab mir lustigere Ergebnisse, so dass ich auf lustige Punkten = 'something'; f'{n}_here'
anstelle vonn = 'something'; '{n}_here'.format(n = n)
odern = 'something'; '{}_here'.format(n)
Schläger, 284 Byes
Bildschirmfoto:
quelle