Trova immagini casuali da http://i.imgur.com/


11

Logo Imgur

Imgur è un servizio di hosting di immagini gratuito. Molte persone lo usano. Ecco un esempio di un link imgur: http://i.imgur.com/T55muMD.png . Scrivi un programma che genera continuamente collegamenti imgur casuali (validi). Ad esempio, ecco alcuni esempi di output del mio programma (non mostrato perché contiene alcuni trucchi che dovrai capire tu stesso):

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

Suggerimenti utili:

  • Quando imgur era nuovo, venivano usati collegamenti di 5 lettere.
  • Quando imgur era nuovo, i numeri non venivano utilizzati.
  • Puoi usarlo a tuo vantaggio: trova solo immagini di link di 5 lettere con solo lettere. Questo è ciò che fa il mio programma.
  • Inoltre, tutte le immagini vengono salvate come .png.

Requisiti:

  • Emetti continuamente collegamenti imgur casuali
  • Collegamenti considerati sufficientemente "casuali" se 50 vengono emessi senza ripetizioni
  • Quando visitati, i collegamenti devono essere un'immagine
  • I collegamenti devono iniziare con http://i.imgur.com/e terminare con.png
  • Il punteggio è la quantità di caratteri

L'ho fatto a Java (TERRIBILE per giocare a golf) a 452 caratteri. Non mostrato qui perché contiene alcuni trucchi che dovrai capire da solo!)


5
Aspetta, la tua definizione di casuale è che l'output non dovrebbe contenere ripetizioni?
Lister,

7
Attenzione: le immagini pornografiche potrebbero essere presenti su imgur! =: o
Mr.Wizard,

Sono valide tutte le immagini di 5 lettere?
l4m2

Risposte:


3

PHP 5.4, 76 caratteri

Gli URL vengono generati in ordine sequenziale utilizzando solo lettere maiuscole e non si ripetono mai, rispettando la lettera della specifica.

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

4

Perl (93 + 4 = 97)

Usando il meccanismo casuale di imgur per ottenere i loro URL di immagini, che non sono URL png per la maggior parte del tempo:

$ 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
...

(Hai bisogno di Mojolicious per questo.)


1
È geniale, e quindi non è giusto!
elssar,

@elssar Esatto, almeno il tuo secondo punto. ;)
ricorda il

Oh, è intelligente :)
Maniglia della porta

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()>

Questo registra tutte le immagini trovate sulla console JavaScript utilizzando console.log(). Funziona con tutti i browser testati (Firefox, Chrome, IE9, Safari e Opera).

La parte divertente è che tutti i tipi di immagini divertenti lampeggiano in un batter d'occhio :).

Provalo! (jsFiddle lo avvolge in una pagina HTML più completa, ma i browser accettano anche il singolo elemento.)

Propaga al fantastico metodo di stringa casuale di doubletap !

Dove posso vedere la console JavaScript e le immagini registrate?

  • Firefox: premi Control-Shift-K (Comando-Opzione-K sul Mac). Deseleziona i pulsanti Net, CSS e JS lì, seleziona solo il pulsante Registrazione.
  • Opera: premi Ctrl + Maiusc + i, seleziona la scheda Console.
  • Chrome: premi Control + Shift + i, seleziona la scheda Console. In basso, seleziona Registri.
  • Safari: fondamentalmente come Chrome, ma assicurati prima che gli strumenti di sviluppo di Safari siano attivati . Quindi premi Control + Alt + C (su Windows, non sicuro su Mac) invece di Control + Shift + i, seleziona la scheda Console. In basso, seleziona Registri.
  • IE: premere F12, selezionare la scheda della console.

Questo non soddisfa i requisiti. Molte delle immagini che appare non sono valide.
Maniglia della porta

Cosa intendi con "non valido"? Nella console vengono registrate solo le immagini che potrebbero essere visualizzate correttamente (vedere la mia descrizione aggiornata).
Thomas W.

Oh ok. Nuovo tentativo ora. Modifica: Chrome sembra registrare anche le immagini non valide.
Maniglia della porta

Chrome per impostazione predefinita mescola messaggi di errore e registri. Nella parte inferiore della scheda della console sono presenti Tutti, Errori, Avvertenze, Registri. Se non è stato possibile caricare un'immagine, viene visualizzato un errore 404 con l'URL dell'immagine. Se si seleziona Log, dovrebbe essere visualizzato solo l'output generato dal mio codice.
Thomas W.

3
Molti URL delle immagini registrate restituiscono semplicemente l' immagine di errore imgur standard che dice "L'immagine che stai richiedendo non esiste o non è più disponibile." Suppongo che si possa sostenere che quelli sono ancora risultati validi secondo le regole date, dato che il documento restituito è un'immagine.
Ilmari Karonen,

3

Perl (87)

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

Trovare immagini con lettere maiuscole, minuscole e cifre comprese tra 0 e qualsiasi carattere, un giorno.


Hehehe, urandom
beary605

3

Mathematica , 108

Spazio bianco aggiunto.

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

2

Python ( 174 158 156)

Voglio nomi di moduli più brevi in ​​Python. Anche un metodo più semplice per ottenere lettere casuali. :)

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

Spiegazione:

L'operatore modulo su una stringa è il comando di formattazione, in questo caso sostituisce '% s' nella stringa con 5 lettere maiuscole casuali
ase il nome del sito Web (tipo str)
('File'not in urllib.urlopen(a).read())è True quando 'File' (da 'File non trovato!') è non trovato nel codice HTML della URL. (tipo bool)
bool* str= strif bool= True, quindi verrà generato solo ase 'File' non viene trovato nel codice HTML.


Quale parte delle specifiche dice che devi usare sia lettere maiuscole che minuscole? chr(random.randint(65,90))
Peter Taylor,

L'ho eseguito e non ha prodotto nulla. Bel trucco 'File'però :)
Maniglia

@PeterTaylor: :) Non sapevo che ci fossero collegamenti su imgur con solo lettere maiuscole, ma immagino che sarebbe abbastanza ovvio. Grazie!
beary605,

@Doorknob: genera una nuova riga a meno che non venga trovato un collegamento, quindi fornirà un collegamento.
beary605,

1
Qualsiasi sequenza di lunghezza 5 funzionerà per i tuoi 5 caratteri casuali, quindi puoi radere alcuni caratteri usando qualcosa come 'XXXXX'piuttosto che range(5). Ciò ha anche il vantaggio di non richiedere spazi bianchi tra esso e il in.
Strigoides,

2

Approccio Python unico. 361 355 334 332 322 314 caratteri - un po 'offuscata, niente di troppo difficile. Può comportare una densità insolitamente alta di immagini di gatti, sei stato avvisato.

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)

Produzione:

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
Tutte le immagini ... sono animali? C'è qualche trucco in corso qui: P +1 perché mi piacciono i simpatici animali: 3
Maniglia della porta

1

R, 182 caratteri

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 caratteri

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

Mentre funziona, è dannatamente lento e potrebbe richiedere molti secondi prima di restituire qualsiasi output.

Ispirato dalla soluzione di @ beary605, mi ha salvato un sacco di personaggi mentre stavo pianificando di controllare l'immagine per intestazione del tipo di contenuto.


random.sample:) Questo è un modo molto migliore di scegliere i personaggi.
beary605,

Sì, fantastico quale codice golf ti costringerà a Google e impara.
elssar,

1

Bash (129, 121) (117, 109)

Ho due versioni: una iterativa e una ricorsiva senza fine (che lentamente consumerà tutta la memoria). Entrambe le versioni verificano se è effettivamente presente un file PNG (i file jpg, gif e altri tipi di file vengono ignorati).

Iterativo (vecchio) (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

Ricorsivo (vecchio) (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;:;};:

Nota : potrebbe esserci un problema di compatibilità con grep. Il mio manuale di grep afferma che -ssilenzia l'output di grep ma non fa nulla. Tuttavia, utilizzando --quiet, --silento -qinvece funziona.

MODIFICARE:

Utilizzo delle intestazioni dei contenuti ora dopo aver letto /codegolf//a/10499/7195 :)

Iterativo (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

Ricorsivo (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

Strumenti Bash / riga di comando, 72 caratteri

Prendendo in prestito la tecnica intelligente di @ memowe :

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

Ciò consente di ottenere un ciclo continuo rieseguendo se stesso all'interno dello stesso spazio di processo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.