Trouvez des images aléatoires sur http://i.imgur.com/


11

Logo Imgur

Imgur est un service d'hébergement d'images gratuit. Beaucoup de gens l'utilisent. Voici un exemple de lien imgur: http://i.imgur.com/T55muMD.png . Écrivez un programme qui génère continuellement des liens imgur aléatoires (valides). Par exemple, voici un exemple de sortie de mon programme (non affiché car il contient quelques astuces que vous devrez comprendre vous-même):

http://i.imgur.com/uFmsA.png
http://i.imgur.com/FlpHS.png
http://i.imgur.com/eAbsZ.png
http://i.imgur.com/lEUsq.png
http://i.imgur.com/RuveH.png
http://i.imgur.com/BoEwB.png
http://i.imgur.com/HVFGQ.png
http://i.imgur.com/PZpMg.png
http://i.imgur.com/DezCY.png

Astuces utiles:

  • Lorsque imgur était nouveau, des liens à 5 lettres ont été utilisés.
  • Quand imgur était nouveau, les chiffres n'étaient pas utilisés.
  • Vous pouvez l'utiliser à votre avantage: ne trouvez que des images de liens à 5 lettres avec uniquement des lettres. C'est ce que fait mon programme.
  • De plus, toutes les images sont enregistrées sous .png.

Exigences:

  • Produire en continu des liens aléatoires imgur
  • Liens considérés comme suffisamment "aléatoires" si 50 sont sortis sans répétition
  • Lorsqu'ils sont visités, les liens doivent être une image
  • Les liens doivent commencer par http://i.imgur.com/et se terminer par.png
  • Le score est le nombre de caractères

Je l'ai fait à Java (TERRIBLE pour le golf) en 452 caractères. Non affiché ici car il contient des astuces que vous devrez découvrir par vous-même!)


5
Attendez, votre définition du hasard est-elle que la sortie ne doit pas contenir de répétitions?
M. Lister

7
Attention: des images pornographiques peuvent être présentes sur imgur! =: o
Mr.Wizard

Les images à 5 lettres sont-elles toutes valides?
l4m2

Réponses:


3

PHP 5.4, 76 caractères

Les URL sont générées dans un ordre séquentiel en utilisant uniquement des lettres majuscules et ne se répètent jamais, en respectant la lettre de la spécification.

<?for($t=@ZZZZ;$t++;)file($u="http://i.imgur.com/$t.png")[0]>@F&&print"$u
";

4

Perl (93 + 4 = 97)

Utilisation du mécanisme aléatoire imgur pour obtenir leurs URL d'image, qui ne sont pas la plupart du temps des URL png:

$ perl -Mojo -E 'say+g("http://imgur.com/gallery/random")->dom->at("[rel=image_src]")->attrs("href")for+1..50'
http://i.imgur.com/7cNoA.jpg
...

(Vous avez besoin de Mojolicious pour cela.)


1
C'est génial, et donc pas juste!
elssar

@elssar C'est vrai, au moins votre deuxième point. ;)
memowe

Oh, c'est intelligent :)
Poignée de porte

4

HTML (152)

<img src=x
onload=console.log(s);g()
onerror=g=function(){s='http://i.imgur.com/'+Math.random().toString(36).substr(2,6)+'.png';event.target.src=s};g()>

Cela enregistre toutes les images trouvées sur la console JavaScript à l'aide de console.log(). Fonctionne dans tous les navigateurs testés (Firefox, Chrome, IE9, Safari et Opera).

La partie amusante est que toutes sortes d'images drôles clignotent pour un clin d'œil :).

Essayez! (jsFiddle encapsule cela dans une page HTML plus complète, mais les navigateurs acceptent également l'élément unique.)

Props à l' incroyable méthode de chaîne aléatoire par doubletap !

Où puis-je voir la console JavaScript et les images enregistrées?

  • Firefox: appuyez sur Ctrl-Maj-K (Commande-Option-K sur Mac). Désélectionnez-y les boutons Net, CSS et JS, sélectionnez uniquement le bouton Logging.
  • Opera: appuyez sur Ctrl + Maj + i, sélectionnez l'onglet Console.
  • Chrome: appuyez sur Ctrl + Maj + i, sélectionnez l'onglet Console. En bas, sélectionnez Journaux.
  • Safari: Fondamentalement, comme Chrome, mais assurez-vous d'abord que les outils de développement de Safari sont activés . Appuyez ensuite sur Ctrl + Alt + C (sous Windows, pas sûr sur Mac) au lieu de Ctrl + Maj + i, sélectionnez l'onglet Console. En bas, sélectionnez Journaux.
  • IE: Appuyez sur F12, sélectionnez l'onglet console.

Cela ne répond pas aux exigences. De nombreuses images qui apparaissent ne sont pas valides.
Poignée de porte

Qu'entendez-vous par «non valide»? Dans la console, seules les images pouvant être affichées avec succès sont enregistrées (voir ma description mise à jour).
Thomas

Ah d'accord. Réessayer maintenant. Modifier: Chrome semble également enregistrer les images non valides.
Poignée de porte

Chrome par défaut mélange les messages d'erreur et les journaux. Au bas de l'onglet de la console, vous avez Tous, Erreurs, Avertissements, Journaux. Si une image n'a pas pu être chargée, elle affiche une erreur 404 avec l'URL de l'image. Si vous sélectionnez Journaux, seule la sortie générée par mon code devrait s'afficher.
Thomas

3
Beaucoup d'URL d'images enregistrées renvoient simplement l' image d'erreur d'imgur standard qui dit "L'image que vous demandez n'existe pas ou n'est plus disponible." Je suppose que l'on pourrait faire valoir que ce sont toujours des résultats valides selon les règles données, car le document retourné est une image.
Ilmari Karonen

3

Perl (87)

perl -pe's/\W//g;$_="http://i.imgur.com/$_.png\n";$_=""if`curl $_`=~/^</'</dev/urandom

Recherche d'images en majuscules, minuscules et chiffres de 0 à n'importe quel caractère, un jour.


Hehehe, urandom
beary605

3

Mathematica , 108

Espace blanc ajouté.

While[True,
 Import@# /. _Image :> Print@# &[
  "http://i.imgur.com/" <> "a" ~CharacterRange~ "z" ~RandomChoice~ 5 <> ".png"
 ]
]

2

Python ( 174 158 156)

Je veux des noms de modules plus courts en Python. Aussi une méthode plus simple pour obtenir des lettres aléatoires. :)

import urllib,random
while 1:a='http://i.imgur.com/%s.png'%''.join(chr(random.randint(65,90))for i in'AAAAA');print('File'not in urllib.urlopen(a).read())*a

Explication:

L'opérateur de module sur une chaîne est la commande de formatage, dans ce cas, il remplace '% s' dans la chaîne par 5 lettres majuscules aléatoires
aest le nom du site Web (type str)
('File'not in urllib.urlopen(a).read())est True lorsque 'File' (de 'File not found!') est pas trouvé dans le code HTML de l'URL. (type bool)
bool* str= strif bool= True, donc il ne sortira que asi "Fichier" n'est pas trouvé dans le code HTML.


Quelle partie de la spécification indique que vous devez utiliser les majuscules et les minuscules? chr(random.randint(65,90))
Peter Taylor

Je l'ai exécuté et il n'a rien produit. Belle astuce avec 'File'
quand

@PeterTaylor: :) Je ne savais pas qu'il y avait des liens sur imgur avec uniquement des lettres majuscules, mais je suppose que ce serait assez évident. Merci!
beary605

@ Doorknob: Il génère une nouvelle ligne à moins qu'un lien ne soit trouvé, puis il donnera un lien.
beary605

1
Toute séquence de longueur 5 fonctionnera pour vos 5 personnages aléatoires, vous pouvez donc raser quelques caractères en utilisant quelque chose comme 'XXXXX'plutôt que range(5). Cela a également l'avantage de ne pas nécessiter d'espace entre lui et le in.
Strigoides

2

Approche Python unique. 361 355 334 332 322 314 caractères - un peu obscurcis, rien de trop difficile. Cela peut entraîner une densité inhabituellement élevée d'images de chats, vous a-t-on prévenu.

import json as j,urllib as o,time as t;a=0
while 1:
 q="i.imgur";y,p=('data','children');r="njj";h="erqqvg.pbz/";u="uggc://"+h+"e/"+r;c=j.loads(o.urlopen(u.decode('rot13')+".json?sorted=new&after=%s"%a).read())[y]
 for s in c[p]:
  f=s[y];w=f['url'].strip('?1')
  if w.find(q)!=-1:print w
 a=c['after'];t.sleep(3)

Production:

http://i.imgur.com/u3vyMCW.jpg
http://i.imgur.com/zF7rPAf.jpg
http://i.imgur.com/aDTl7OM.jpg
http://i.imgur.com/KONVsYw.jpg
http://i.imgur.com/RVM2pYi.png
http://i.imgur.com/tkMhc9T.jpg
http://i.imgur.com/KxUrZkp.gif
http://i.imgur.com/mnDTovy.jpg
http://i.imgur.com/WpuXbHb.jpg
http://i.imgur.com/qZA3mCR.jpg
http://i.imgur.com/AxMS1Fs.png
http://i.imgur.com/TLSd571.jpg
http://i.imgur.com/VfMhLIQ.jpg
http://i.imgur.com/Wu32582.jpg
http://i.imgur.com/hrmQL2F.jpg
http://i.imgur.com/Clg8N.jpg
http://i.imgur.com/7Wsko.jpg
http://i.imgur.com/Rhb0UNx.jpg
http://i.imgur.com/LAXAf45.gif
http://i.imgur.com/jhOLJ9B.jpg
http://i.imgur.com/FQ9NeAl.jpg
http://i.imgur.com/oqzf6tE.jpg
http://i.imgur.com/rnpXs1A.jpg
http://i.imgur.com/DfUIz6k.jpg
http://i.imgur.com/orfGA5I.jpg
http://i.imgur.com/wBT7JNt.jpg
http://i.imgur.com/RycK1m2.jpg
http://i.imgur.com/7j21FIR.jpg
http://i.imgur.com/z2tVnNC.jpg
http://i.imgur.com/mnsAGuF.jpg
http://i.imgur.com/vIZM1NY.jpg
http://i.imgur.com/JT3XRI4.jpg
http://i.imgur.com/SNpwTmp.jpg
http://i.imgur.com/u9ynLb9.jpg
http://i.imgur.com/DrFWsBP.jpg
http://i.imgur.com/rU6oyup.jpg
http://i.imgur.com/XxBD5nl.jpg
http://i.imgur.com/d09qQzP.jpg
http://i.imgur.com/vvPSbqI.jpg
http://i.imgur.com/1hdfobQ.jpg
http://i.imgur.com/4LLC6Vs.jpg
http://i.imgur.com/RfasxO2.jpg
http://i.imgur.com/BBcpOos.jpg
http://i.imgur.com/zMH8mgG.jpg
http://i.imgur.com/7g8k2Ww.jpg

3
Toutes les images ... sont des animaux? Il y a une supercherie ici: P +1 parce que j'aime les animaux mignons: 3
Poignée de porte

1

R, 182 caractères

library(httr);while(0<1){s=paste("http://i.imgur.com/",paste(sample(c(LETTERS,letters),5),collapse=""),".png",sep="");if(HEAD(s)$headers$'content-type'=='text/html')'' else print(s)}

1

Python, 153 caractères

import string as s,random as w,requests as r
while 1:
 t='http://i.imgur.com/%s.png'%''.join(w.sample(s.letters,5))
 if'not'not in r.get(t).text:print t

Bien que cela fonctionne, il est extrêmement lent et peut prendre plusieurs secondes avant de retourner une sortie.

Inspiré par la solution de @ beary605 - il m'a sauvé un tas de caractères alors que je prévoyais de vérifier l'image par en-tête de type de contenu.


random.sample:) C'est une bien meilleure façon de choisir des personnages.
beary605

Oui, incroyable ce que le golf de code vous forcera à Google et apprenez.
elssar

1

Bash (129, 121) (117, 109)

J'ai deux versions: une itérative et une infinie récursive (qui va lentement manger toute la mémoire). Les deux versions vérifient s'il existe réellement un fichier PNG (les fichiers jpg, gif et autres sont ignorés).

Itératif (ancien) (129):

while true;do u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -s 2>&1|head -c4|grep PNG$ -q&&echo $u;done

Récursif (ancien) (121):

:(){ u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -s 2>&1|head -c4|grep PNG$ -q&&echo $u;:;};:

Remarque : il peut y avoir un problème de compatibilité avec grep. Mon manuel de grep indique que -sla sortie de grep est silencieuse mais cela ne fait rien. Cependant, en utilisant --quiet, --silentou à la -qplace fonctionne.

ÉDITER:

Utiliser les en-têtes de contenu maintenant après avoir lu /codegolf//a/10499/7195 :)

Itératif (117):

while true;do u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -sI|grep image -q&&echo $u;done

Récursif (109):

:(){ u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -sI|grep image -q&&echo $u;:;};:


0

Outils Bash / ligne de commande, 72 caractères

Emprunter la technique astucieuse de @ memowe :

curl -sL http://imgur.com/gallery/random|grep e_sr|cut -d\" -f4;exec $0

Cela permet d'obtenir une boucle continue en se réexécutant dans le même espace de processus.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.