Знайдіть випадкові зображення з http://i.imgur.com/


11

Imgur логотип

Imgur - це безкоштовний сервіс розміщення зображень. Багато людей ним користуються. Ось приклад посилання на imgur: http://i.imgur.com/T55muMD.png . Напишіть програму, яка постійно виводить випадкові (дійсні) посилання на imgur. Наприклад, ось деякий зразок виводу моєї програми (не показаний, оскільки він містить деякі хитрощі, які вам доведеться з'ясувати самостійно):

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

Корисні підказки:

  • Коли imgur був новим, використовувались 5-літерні посилання.
  • Коли imgur був новим, цифри не використовувалися.
  • Ви можете використовувати це на свою користь: знаходити лише зображення з 5-літерних посилань лише з літер. Це те, що робить моя програма.
  • Також усі зображення зберігаються як .png.

Вимоги:

  • Постійно виводить випадкові посилання imgur
  • Посилання вважаються достатньо "випадковими", якщо 50 виводиться без повторів
  • При відвідуванні посилання повинні бути зображеннями
  • Посилання повинні починатися http://i.imgur.com/і закінчуватися.png
  • Оцінка - кількість символів

Я зробив це на Яві (ГОЛОВНО для гольфу) у 452 символах. Тут не показано, оскільки він містить деякі хитрощі, які вам доведеться з’ясувати для себе!)


5
Зачекайте, чи є ваше визначення випадковим, що висновок не повинен містити повторів?
Містер Лістер

7
Попередження: порнографічні зображення можуть бути присутніми на imgur! =: o
Mr.Wizard

Чи всі 5-літерні зображення дійсні?
l4m2

Відповіді:


3

PHP 5,4, 76 символів

URL-адреси генеруються в послідовному порядку, використовуючи лише великі літери та ніколи не повторюючись, відповідаючи букві специфікації.

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

4

Perl (93 + 4 = 97)

Використовуючи власний випадковий механізм imgur, щоб отримати їх 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
...

(Для цього вам потрібна Мооліція .)


1
Це геніально, і так не чесно!
elssar

@elssar Правильно, принаймні ваш другий пункт. ;)
memowe

О, це розумно :)
Doorknob

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

Цей журнал записує всі знайдені зображення на консолі JavaScript за допомогою console.log(). Працює у всіх перевірених браузерах (Firefox, Chrome, IE9, Safari та Opera).

Найцікавіша частина полягає в тому, що всілякі смішні образи спалахують на мить ока :).

Спробуй це! (jsFiddle перетворює це на більш повну сторінку HTML, але браузери також приймають один елемент.)

Реквізит до дивовижного методу випадкового струнного по DoubleTap !

Де я можу побачити консоль JavaScript та записані зображення?

  • Firefox: натисніть Control-Shift-K (Command-Option-K на Mac). Зніміть виділені там кнопки Net, CSS та JS, виберіть лише кнопку Logging.
  • Опера: Натисніть кнопку Control + Shift + i, виберіть вкладку Консоль.
  • Chrome: Натисніть Control + Shift + i, виберіть вкладку Console. Унизу виберіть Журнали.
  • Safari: По суті, як Chrome, але переконайтеся, що активовано інструменти для розробників Safari . Потім натисніть Control + Alt + C (у Windows, не впевнений, що на Mac) замість Control + Shift + i виберіть вкладку Консоль. Унизу виберіть Журнали.
  • IE: Натисніть F12, виберіть вкладку консолі.

Це не відповідає вимогам. Багато зображень, які вони спливають, недійсні.
Дверна ручка

Що ви маєте на увазі під "недійсним"? У консолі записуються лише зображення, які можна було б успішно відображати (див. Мій оновлений опис).
Thomas W.

О, гаразд. Повторна спроба зараз. Редагувати: Схоже, Chrome також реєструє недійсні зображення.
Дверна ручка

Chrome за замовчуванням змішує повідомлення про помилки та журнали. У нижній частині вкладки консолі розміщено Усі, Помилки, Попередження, Журнали. Якщо зображення не вдалося завантажити, воно відображає помилку 404 з URL-адресою зображення. Якщо ви вибрали Журнали, тоді повинен відображатися лише результат, створений моїм кодом.
Thomas W.

3
Дуже багато зареєстрованих URL-адрес зображень просто повертають стандартне зображення помилки imgur, яке говорить "Образ, який ви запитуєте, не існує або більше недоступний." Я припускаю, що можна стверджувати, що це як і раніше дійсні результати згідно наведених правил, оскільки повернений документ є зображенням.
Ільмарі Каронен

3

Perl (87)

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

Пошук зображень з великих, малих та цифр від 0 до будь-яких символів, якийсь день.


Hehehe, urandom
beary605

3

Математика , 108

Додано пробіл.

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

2

Пітон ( 174 158 156)

Я хочу коротші назви модулів в Python. Також простіший спосіб отримання випадкових букв. :)

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

Пояснення:

Оператор модуля в рядку - це команда форматування, в цьому випадку він замінює '% s' у рядку 5 випадковими великими літерами
a- це ім'я веб-сайту (тип str)
('File'not in urllib.urlopen(a).read()), якщо «Файл» (з «Файл не знайдено!»). це НЕ знаходиться в HTML , в URL. (type bool)
bool* str= strif bool= True, тому він виводиться лише aтоді, коли у файлі HTML не знайдено "File".


Яка частина специфікації говорить про те, що ви повинні використовувати як великі, так і малі літери? chr(random.randint(65,90))
Пітер Тейлор

Я запустив це, і нічого не вийшло. Хороший трюк з 'File'хоч :)
Doorknob

@PeterTaylor: :) Я не знав, що на imgur є посилання з великими літерами, але я думаю, що це було б досить очевидно. Дякую!
beary605

@Doorknob: Виводить новий рядок, якщо посилання не знайдено, то воно дасть посилання.
beary605

1
Будь-яка послідовність довжиною 5 підійде для ваших 5 випадкових символів, тому ви можете поголити кілька символів, використовуючи щось на кшталт, 'XXXXX'а не range(5). Це також має перевагу в тому, що не потрібно пробілу між ним і in.
Strigoides

2

Унікальний підхід Python. 361 355 334 332 322 314 символів - трохи затуманено, нічого надто складного. Це може призвести до незвично високої щільності зображень котів, вас попередили.

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)

Вихід:

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
Усі зображення ... це тварини? Тут відбувається якась хитрість: P +1, тому що мені подобаються милі тварини: 3
Doorknob

1

R, 182 символи

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

Пітон, 153 символів

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

Хоча це працює, він криваво повільний і може зайняти багато секунд, перш ніж повернути будь-який вихід.

Натхненний рішенням @ beary605 - він врятував мені купу символів, коли я планував перевірити наявність зображення заголовок типу вмісту.


random.sample:) Це набагато кращий спосіб вибору персонажів.
beary605

Так, дивовижно, що Code Golf примусить вас до Google, і навчіться.
elssar

1

Баш (129, 121) (117, 109)

У мене є дві версії: ітеративна та нескінченна рекурсивна (яка повільно з'їсть всю пам'ять). Обидві версії перевіряють, чи дійсно присутній файл PNG (jpg, gif та інші типи файлів ігноруються).

Ітеративний (старий) (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

Рекурсивний (старий) (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;:;};:

Примітка . Може виникнути проблема сумісності з грепом. У моєму посібнику з grep зазначено, що -sзамовчує вихід grep, але він нічого не робить. Однак використання --quiet, --silentабо -qзамість цього працює.

Редагувати:

Використовуйте заголовки вмісту після прочитання https://codegolf.stackexchange.com/a/10499/7195 :)

Ітеративний (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

Рекурсивна (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

Інструменти Bash / командного рядка, 72 символи

Розумна техніка запозичення @ memowe :

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

Це досягає безперервного циклу шляхом повторної дії в одному і тому ж просторі процесу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.