Znajdź losowe obrazy z http://i.imgur.com/

11

Logo Imgur

Imgur to darmowa usługa hostingu obrazów. Wiele osób z niego korzysta. Oto przykład linku imgur: http://i.imgur.com/T55muMD.png . Napisz program, który stale wyświetla losowe (prawidłowe) linki imgur. Na przykład, oto przykładowe wyjście z mojego programu (nie pokazano, ponieważ zawiera pewne sztuczki, które musisz sam wymyślić):

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

Pomocne wskazówki:

  • Kiedy imgur był nowy, zastosowano pięcioliterowe linki.
  • Kiedy imgur był nowy, liczby nie były używane.
  • Możesz to wykorzystać na swoją korzyść: znajduj tylko 5-literowe obrazy linków zawierające tylko litery. Tak właśnie robi mój program.
  • Ponadto wszystkie obrazy są zapisywane jako .png.

Wymagania:

  • Ciągłe wyświetlanie losowych linków imgur
  • Linki uważane za wystarczająco „losowe”, jeśli 50 jest generowanych bez powtórzeń
  • Po odwiedzeniu linki muszą być obrazem
  • Linki muszą zaczynać się http://i.imgur.com/i kończyć.png
  • Wynik to liczba znaków

Zrobiłem to w Javie (TERRIBLE do gry w golfa) w 452 znakach. Nie pokazano tutaj, ponieważ zawiera kilka sztuczek, które musisz sam wymyślić!)

Klamka
źródło
5
Czekaj, czy twoja definicja losowości nie zawiera powtórzeń?
Pan Lister,
7
Ostrzeżenie: obrazy pornograficzne mogą być obecne na imgur! =: o
Mr.Wizard
Czy wszystkie 5-literowe obrazy są prawidłowe?
l4m2

Odpowiedzi:

3

PHP 5.4, 76 znaków

Adresy URL są generowane w kolejności sekwencyjnej przy użyciu tylko wielkich liter i nigdy się nie powtarzają, zgodnie z literą specyfikacji.

<?for($t=@ZZZZ;$t++;)file($u="http://i.imgur.com/$t.png")[0]>@F&&print"$u
";
Proszę wstać
źródło
4

Perl (93 + 4 = 97)

Stosując własne Imgur za losowy mechanizm, aby uzyskać swoje adresy URL obrazu, które nie są PNG URL większość czasu:

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

(Potrzebujesz do tego Mojoliciousa .)

memowe
źródło
1
To wspaniałe, a więc niesprawiedliwe!
elssar
@elssar Zgadza się, przynajmniej twój drugi punkt. ;)
memowe
Och, to sprytne :)
Klamka
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()>

Rejestruje wszystkie znalezione obrazy w konsoli JavaScript za pomocą console.log(). Działa we wszystkich testowanych przeglądarkach (Firefox, Chrome, IE9, Safari i Opera).

Zabawne jest to, że w mgnieniu oka migają różne śmieszne zdjęcia.

Spróbuj! (jsFiddle pakuje to w bardziej kompletną stronę HTML, ale przeglądarki akceptują również pojedynczy element).

Rekwizyty do niesamowitej metody losowego ciągu przez doubleletap !

Gdzie mogę zobaczyć konsolę JavaScript i zarejestrowane obrazy?

  • Firefox: Naciśnij klawisze Control-Shift-K (Command-Option-K na komputerze Mac). Odznacz tam przyciski Net, CSS i JS, wybierz tylko przycisk Logowanie.
  • Opera: naciśnij klawisze Control + Shift + i, wybierz kartę Konsola.
  • Chrome: naciśnij klawisze Control + Shift + i, wybierz kartę Konsola. Na dole wybierz Dzienniki.
  • Safari: Zasadniczo jak Chrome, ale najpierw upewnij się, że narzędzia programistyczne Safari są aktywowane . Następnie naciśnij Control + Alt + C (w systemie Windows, a nie na Macu) zamiast Control + Shift + i, wybierz kartę Konsola. Na dole wybierz Dzienniki.
  • IE: Naciśnij klawisz F12, wybierz kartę konsoli.
Thomas W.
źródło
To nie spełnia wymagań. Wiele wyskakujących obrazów jest niepoprawnych.
Klamka
Co rozumiesz przez „nieważny”? W konsoli rejestrowane są tylko obrazy, które można pomyślnie wyświetlić (zobacz mój zaktualizowany opis).
Thomas W.,
W porządku Próbuję teraz. Edycja: Wygląda na to, że Chrome rejestruje również nieprawidłowe obrazy.
Klamka
Chrome domyślnie miesza komunikaty o błędach i dzienniki. U dołu karty konsoli znajdują się Wszystkie, Błędy, Ostrzeżenia, Dzienniki. Jeśli obrazu nie można załadować, wyświetla błąd 404 z adresem URL obrazu. Jeśli wybierzesz Dzienniki, powinny być wyświetlane tylko dane wyjściowe wygenerowane przez mój kod.
Thomas W.,
3
Wiele zarejestrowanych adresów URL obrazów po prostu zwraca standardowy obraz błędu imgur, który mówi: „ Żądany obraz nie istnieje lub nie jest już dostępny”. Przypuszczam, że można argumentować, że nadal są to prawidłowe wyniki zgodnie z podanymi regułami, ponieważ zwrócony dokument jest obrazem.
Ilmari Karonen,
3

Perl (87)

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

Znalezienie obrazów wielkimi, małymi i cyframi od 0 do dowolnych znaków, któregoś dnia.

Daniel
źródło
Hehehe, urandom
beary605
3

Mathematica , 108

Dodano białe spacje.

While[True,
 Import@# /. _Image :> Print@# &[
  "http://i.imgur.com/" <> "a" ~CharacterRange~ "z" ~RandomChoice~ 5 <> ".png"
 ]
]
Mr.Wizard
źródło
2

Python ( 174 158 156)

Chcę krótszych nazw modułów w Pythonie. Również łatwiejsza metoda uzyskiwania losowych liter. :)

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

Wyjaśnienie:

Operatorem modułu w łańcuchu jest polecenie formatowania, w tym przypadku zastępuje ono „% s” w łańcuchu 5 losowymi dużymi literami,
ajeśli nazwa strony internetowej (typ str)
('File'not in urllib.urlopen(a).read())ma wartość Prawda, gdy „Plik” (z „Nie znaleziono pliku!”) jest nie znaleźć w kodzie HTML URL. (type bool)
bool* str= strif bool= True, więc wyświetli się tylko awtedy, gdy „Kod” nie zostanie znaleziony w kodzie HTML.

beary605
źródło
Jaka część specyfikacji mówi, że musisz używać zarówno wielkich, jak i małych liter? chr(random.randint(65,90))
Peter Taylor
Uruchomiłem i nic nie wyszło. Fajna sztuczka 'File':)
Klamka
@PeterTaylor: :) Nie wiedziałem, że na imgur są jakieś linki zawierające tylko wielkie litery, ale myślę, że byłoby to dość oczywiste. Dzięki!
beary605
@Doorknob: Wyświetla nowy wiersz, chyba że zostanie znaleziony link, a następnie poda link.
beary605
1
Każda sekwencja o długości 5 będzie działać dla twoich 5 losowych postaci, więc możesz ogolić kilka postaci, używając czegoś podobnego 'XXXXX'niż range(5). Ma to również tę zaletę, że nie wymaga odstępu między nim a in.
Strigoides,
2

Unikalne podejście do Pythona. 361 355 334 332 322 314 znaków - trochę zaciemnionych, nic trudnego. Ostrzegamy, że może to spowodować wyjątkowo wysoką gęstość zdjęć kotów.

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)

Wynik:

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
Thomas O
źródło
3
Wszystkie obrazy ... są zwierzętami? Trwa tutaj podstęp: P +1, ponieważ lubię urocze zwierzęta: 3
Klamka
1

R, 182 znaków

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)}
Paolo
źródło
1

Python, 153 znaki

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

Chociaż to działa, jest cholernie wolne i może zająć wiele sekund, zanim zwróci jakiekolwiek wyjście.

Zainspirowany rozwiązaniem @ beary605 - uratował mi kilka znaków, gdy planowałem sprawdzić obraz według nagłówka typu zawartości.

Elssar
źródło
random.sample:) To znacznie lepszy sposób wybierania postaci.
beary605
Tak, niesamowite, co Code Golf zmusi cię do Google i uczyć się.
elssar
1

Bash (129, 121) (117, 109)

Mam dwie wersje: iteracyjną i nieskończoną rekurencyjną (która powoli pochłonie całą pamięć). Obie wersje sprawdzają, czy rzeczywiście istnieje plik PNG (pliki jpg, gif i inne typy są ignorowane).

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

Rekurencyjny (stary) (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;:;};:

Uwaga : Może występować problem ze zgodnością z grep. Mój podręcznik grep stwierdza, że -swycisza wyjście grep, ale nic nie robi. Jednak użycie --quiet, --silentlub -qzamiast działa.

EDYTOWAĆ:

Korzystanie z nagłówków treści teraz po przeczytaniu https://codegolf.stackexchange.com/a/10499/7195 :)

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

Rekurencyjny (109):

:(){ u=http://i.imgur.com/$(tr -dc a-zA-Z</dev/urandom|head -c5).png;curl $u -sI|grep image -q&&echo $u;:;};:
użytkownik701072
źródło
1

Rubinowy (103 znaki)

require"open-uri";loop{u="http://i.imgur.com/#{rand(1e9).to_s(36)[0,5]}.png";open u rescue next;puts u}
anonimowy tchórz
źródło
Musisz dodać a .pngna końcu adresu URL.
Klamka
@Doorknob: Ups, naprawiono
anonimowy tchórz
0

Narzędzia Bash / wiersza poleceń, 72 znaki

Sprytna technika pożyczania @ memowe :

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

Osiąga to ciągłą pętlę poprzez ponowne wykonanie się w tej samej przestrzeni procesu.

Cyfrowa trauma
źródło