Що на телевізорі?


11

Виклик

Напишіть програму, яка, використовуючи дані XML з веб-сайту тут , відображає назву програми, яка наразі відображається на BBC 1.

Інформація

Усі часи вказані в лондонський час (GMT + 1 під час публікації та GMT + 0 після 30 жовтня). Тому вам слід перетворити місцевий час на лондонський.

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

У вашому висновку має бути назва програми, наприклад:

BBC News

Однак якщо програма має підзаголовки (показано наявністю тегу субтитрів), вихід має бути таким:

Steptoe and Son: The Piano

Де Steptoe and Son - назва, а The Piano - підзаголовок. Приклад програми з підзаголовком:

<programme>
    <subtitle>Newcastle</subtitle>
    <title>Flog It!</title>
    <end>1710</end>
    <start>1610</start>
    <desc>
      Antiques series. Paul Martin presents from the Discovery Museum in Newcastle. The items uncovered include a book of autographs with a local connection. Also in HD. [S]
    </desc>
</programme>

Скорочувачі URL-адрес заборонені, але дозволяється аналізувати бібліотеки XML.

Перемога

Виграє найкоротший код у байтах.


Чи можете ви навести тестовий випадок із тегом субтитрів, оскільки там (на даний момент) у пов'язаному файлі XML немає жодного.
KarlKastor

@KarlKastor Там ви йдете
бета-розпад

Чи потрібно переводити місцевий час на лондонський час?
КарлКастор

2
Що саме робить цей «швидкий гольф»?
Мартін Ендер

1
@MartinEnder Я думаю, тому що я написав це швидко: D
Beta Decay

Відповіді:


2

Bash + curl + XMLStarlet, 166 символів

d=`TZ=Europe/London date +%H%M`
curl -s bleb.org/tv/data/listings/0/bbc1.xml|xmlstarlet sel -t -m "//programme[start<=$d and end>$d]" -v title -m subtitle -o :\  -v .

Проба зразка:

bash-4.3$ date 
Mon Aug 22 14:17:07 EEST 2016

bash-4.3$ bash bbc.sh 
Bargain Hunt: Carmarthen

Я не вмію керувати сценаріями, але чи можна створити адресу веб-сайту за допомогою декомпресії стислої версії адреси чи чогось подібного?

Не зовсім. Занадто короткий для стиснення. Некомпресований має 36 байт, стислий gzip - 56 байт. Інші інструменти, які я спробував, дали ще більший результат.
манатура

5

Пітона, 440 428 426 398 395 байт

-31 байт завдяки @Loovjo

Під час виявлення дати з’являється помилка.

import re,pytz,urllib
from datetime import*
x=urllib.urlopen("http://www.bleb.org/tv/data/listings/0/bbc1.xml").read().split("</p")[:-1]
for m,n in enumerate(re.search("\d*</s",i).group()for i in x):
 if n>datetime.strftime(datetime.now(pytz.utc).astimezone(pytz.timezone('Europe/London')),"%H%M"):print re.search(">.*?</t",x[m-1]).group()[1:-3],": "+re.search("e>.*?</s",x[m-1]).group()[2:-3],_

Будь ласка, не зашкодьте мені за розбір xml з регексом.

версія з використанням аналізатора xml, 398 байт

import re,pytz,urllib
import xml.etree.ElementTree as ET
from datetime import*
x=list(ET.parse(urllib.urlretrieve("http://www.bleb.org/tv/data/listings/0/bbc1.xml")[0]).getroot())
for m,n in enumerate(i.find("start").text for i in x):
 if n>datetime.strftime(datetime.now(pytz.utc).astimezone(pytz.timezone('Europe/London')),"%H%M"):print x[m-1].find("title").text,": "+x[0].find("subtitle").text,_

7
Це добре, у нас є лише проблеми з розбором HTML за допомогою regex;)
Beta Decay

1
Якщо я не помиляюся, я думаю, що ви можете замінити breakте, що спричиняє помилку (наприклад, 1/0(або, можливо, навіть _)). Я впевнений, що ваші повідомлення можуть вийти з помилкою.
Loovjo

Чи дозволені сторонні лайки? Якщо так, то ви міняєте urllibвикористовувати requestsв першому прикладі: x=requests.get(link).text.split("</p")[:-1]. Це заощадить 2 байти.
Zizouz212

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