Salutations, golfeurs de code noble. Aujourd'hui, vous allez résoudre le débat le plus ancien et le plus distingué - Emacs ou Vim?
Votre défi consiste à prendre deux termes de recherche en entrée et à produire lequel de ces termes a le plus de résultats de recherche Google. (C'est évidemment tout à fait juste. Que voulez-vous dire, biaisé?)
Voici quelques exemples d'entrées et de sorties:
Input: emacs
and vim
Output: vim
(totalement pas de création de guerres de flammes dans les commentaires)
Entrée: google
et microsoft
sortie:google
Entrée: code golf stack exchange
et code review stack exchange
sortie: code golf stack exchange
(ouais!)
Et voici quelques cas de pointe juste pour le plaisir (et pour tester vos solutions):
Entrée: About 1,000,000 results
et About 100,000 results
sortie:About 100,000 results
Input: This will autocotrect
and Another testcase
Output: Another testcase
(si vous ne pensez pas à la correction automatique, alors le premier gagnera)
Pour les cas de test suivants, vous devez d'abord supprimer les #
signes dans les termes de recherche, car ils reposent sur le terme ayant un nombre spécifique de résultats et le publier ici ruinerait cela.
Entrée: Thissear#chter#mhasno#results
et Another testcase
sortie: Another testcase
(juste un test pour aucun résultat)
Entrée: "These exact wo#rds do#n't exi#st# on the Internet"
et Another testcase
sortie: Another testcase
(test "
s)
Entrée: Abo#ut 1,65#2,85#3,2#86 re#sults
et Another testcase
sortie: Another testcase
(celle-ci est délicate - le terme de recherche ci-dessus a un résultat)
Entrée: "Abo#ut 4#8,234,8#75,14#7 res#ults"
et Another testcase
sortie: Another testcase
(également délicat - aucun résultat, il affiche donc le terme de recherche)
Vous n'avez pas besoin de gérer le cas du coin des "quoted"
recherches qui renvoient "Aucun résultat, affichant des résultats sans guillemets à la place" car cela serait tout simplement trop compliqué. Vous n'avez pas non plus besoin de gérer les entrées avec le même nombre de résultats.
Il s'agit de code-golf , donc le code le plus court en octets gagnera!
Réponses:
Facteur ,
305201196200201188184182179169178171165199171170165163 octetsUn langage presque aussi verbeux que Java, battant Ruby ... et Powershell! :RÉ
Mieux regex, maintenant. Merci à @fede s. pour 5 octets de moins!
Ou
159157 si la sortie peut être comme{ "vim" 9782948234 }
:En revanche, si nous voulons être non éliminables, pour
199196193 octets :Unkillable car il analyse HTML, donc beaucoup plus robuste que les réponses utilisant regex.
la source
unkillable
méthode. Il est en fait plus court en PowerShell que d'utiliser une expression régulière. (Pourtant, encore 2 octets de plus que votre réponse regex). Je n'appellerais pas cependant powershell succint, ses noms de commande sont rarement courts (iwr
il se trouve que c'est un alias par défaut pourinvoke-webrequest
etsort
poursort-object
, sinon ce serait beaucoup plus long)Rubis,
203180 octets+11 octets pour l'
-ropen-uri
indicateur (plus l'espace).L'entrée est considérée comme deux arguments.
Explication de l'URL:
?nord=1
: empêcher la redirection automatique de HTTP vers HTTPS&q=#{URI.escape x}
: échapper à la requête pour que"
le travail fonctionne&nfpr=1
: pas de correction automatiqueLe tout
map
se transforme['emacs','vim']
en[[2150000, 'emacs'], [14900000, 'vim']]
. (Vous pouvez voir cela en changeant le.max[1]
à la fin en.inspect
.) Ensuite, lemax
est pris, qui saisira celui avec le plus de résultats, et[1]
est utilisé pour obtenir le terme de recherche.la source
Thissear#chter#mhasno#results
affichera maintenant cette question sur Google :) Il est intéressant de voir 2 résultats (pour moi au moins!) - google.com/… NB. Tout regex correspondant à "About * results" manquera le résultat trouvé sur cette page :(ruby -ropen-uri
plutôt que dans le fichier.Parmi les éditeurs de texte mentionnés dans le problème, un seul d'entre eux peut résoudre ce problème par lui-même ...
Emacs: 137 frappes
Il s'attend à ce que les premiers termes de recherche soient sur la première ligne et les seconds termes de recherche sur la deuxième ligne, avec le curseur au début du tampon.
Pour ceux qui ne connaissent pas Emacs,
C-s
signifieCtrl-S
.M-z
signifieAlt-Z
(Alt
est probablement votre méta-clé)M-<
signifieAlt-<
ouAlt-Shift-,
C-S-e
veux direCtrl-Shift-e
Pour ceux qui connaissent Emacs,
emacs -q
. Cela ne charge pas votre.emacs
fichier, donc aucun paquet sophistiqué n'interfère avec cela.Explication
Écrivez le début de la coquille de statment elisp
<C-o><C-u><C-k>
Enregistre les arguments avec une nouvelle ligne(if(<<C-y><C-y>
Écrivez le début de l'instruction if et place 2 copies des arguments<M-<><C-n>
Passer à la deuxième ligneDéfinissez la macro HTTP. Cela convertit l'argument en URL de recherche Google, puis renvoie le nombre de résultats de recherche.
<F3>
Commencez à définir la macro du clavier<C-a>
Passez au début du terme de recherche.http://google.com/search?nfpr=1&q=
Ajout de l'URL de recherche<C-S-e><M-x>r-st<RET> <RET>+<RET>
Remplacez tous les espaces par des signes +.<C-a><C-k><M-x>b-em<RET><C-y><RET>
Emacs récupère le HTML brut (b-em
est l'abréviation debrowse-url-emacs
)<C-x><C-q>
Rendre le fichier accessible en écriture (requis pour que la macro ne fasse pas d'erreur ou t)<C-s><RET>ts"><RET>
Déplacer vers le nombre de résultats div (besoin de faire une recherche régulière car les macros emacs reposent sur isearch pour fonctionner)<M-z><
Coupez le texte du diff (c'est pourquoi il était nécessaire)<C-x>0
Revenir au tampon d'origine<C-y>0 r
;; Remettez les résultats sur la ligne ('0 r' ne gère aucun résultat)<C-a><C-M-s><RET>[0-9]<RET><C-b><M-z> <C-a><C-y><C-k>
;; Extrayez le numéro de la chaîne.<C-S-a><M-x><up><up><RET>,<RET><RET>
Supprime les virgules du nombre<F4>
Terminer la macro du clavierDescendez et exécutez la macro du clavier sur la ligne suivante.
<C-n>
Va à la ligne suivante<F4>
Répétez la macro une fois.Terminez l'instruction elisp et exécutez-la
<C-e>)(next-line)())
Terminez la déclaration elisp<C-x><C-e>
Évaluez la commande elisp<C-n><C-a><C-k>
Tuez l'argument gagnant<C-x>h<DEL>
Supprimer tout le reste<C-y>
Collez l'argument gagnantCourir vous-même
Heureusement, vous n'avez pas besoin de saisir parfaitement toutes ces touches! La viande et les pommes de terre sont toutes dans une macro que vous pouvez simplement copier et coller. La macro peut être copiée et collée dans emacs!
1.Modifiez la macro du clavier
<C-x><C-k><C-e>
2. Collez-la dans tout le tampon (la pâte devrait être
<C-y>
)<C-c><C-c>
pour enregistrer la macro.<F4>
pour exécuter la macro (ou exécutez-la simplement pour essayer)Avertissements
<C-x><k> search<TAB>
<input type="submit" name="submit" value="Submit"...>
, cela s'est probablement produit.<C-x><C-b>
et choisissez le tampon contenant le terme de recherche).la source
Of the text editors mentioned in the problem, only one of them can solve this on its own...
est-ce même vrai? n'y a-t-il vraiment pas de bibliothèques HTTP pour vimscript?curl
et obtenir le même effet. (mais alors votre réponse devrait indiquer que c'est vim + curl).Java,
828800783744739687 octetsla source
args
lieu de StdIn?Python 3,
227226208213226220221206202200198 octetsAssignez le lambda à quelque chose pour l'appeler.
Utilise la bibliothèque de requêtes .
Non golfé:
la source
NameError: name 'quote' is not defined
quote
revenir àurllib.parse.quote
après une importation absolue.Powershell,
175, 172 octetsAfficher le score ainsi que le nom réduirait 2 octets supplémentaires.
Cela utilise la même
unkillable
fonctionnalité que la réponse196 Byte
Factor (HTML analysé) et réduit la réponse regex précédente.la source
Raquette,
360337 octets0.o
Il y a une raison pour laquelle ils l'appellent Perdu dans une mer de parenthèses.
Non golfé:
la source