Có gì trên TV?


11

Thử thách

Viết chương trình, sử dụng dữ liệu XML từ trang web ở đây , hiển thị tên của chương trình hiện đang hiển thị trên BBC 1.

Thông tin

Tất cả thời gian được đưa ra vào thời gian Luân Đôn (GMT + 1 tại thời điểm đăng và GMT + 0 sau ngày 30 tháng 10). Do đó, bạn nên chuyển đổi giờ địa phương sang giờ Luân Đôn.

Mỗi chương trình được đưa ra một thời gian bắt đầu và kết thúc. Nếu thời gian hiện tại là sau thời gian bắt đầu và trước thời gian kết thúc của một chương trình, chương trình đó hiện đang hiển thị. Chương trình của bạn có thể xử lý chồng chéo trong bất cứ cách nào bạn muốn.

Đầu ra của bạn phải là tiêu đề chương trình, như vậy:

BBC News

Tuy nhiên, nếu chương trình có phụ đề (được hiển thị bằng sự hiện diện của thẻ phụ đề), thì đầu ra sẽ như vậy:

Steptoe and Son: The Piano

Trong đó Steptoe and Son là tiêu đề và The Piano là phụ đề. Một chương trình ví dụ với phụ đề như sau:

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

Các trình rút ngắn URL không được phép nhưng các thư viện phân tích cú pháp XML được cho phép.

Chiến thắng

Mã ngắn nhất tính bằng byte thắng.


Bạn có thể đưa ra một trường hợp thử nghiệm với thẻ phụ đề không, vì hiện tại (không có) trong tệp xml được liên kết.
KarlKastor

@KarlKastor Bạn đi
Beta Decay

Chúng ta có phải chuyển đổi giờ địa phương sang giờ Luân Đôn không?
KarlKastor

2
Chính xác thì điều gì làm cho "golf nhanh" này?
Martin Ender

1
@MartinEnder Tôi cho rằng vì tôi đã viết nó một cách nhanh chóng: D
Beta Decay

Câu trả lời:


2

Bash + curl + XMLStarlet, 166 ký tự

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 .

Chạy mẫu:

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

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

Tôi không giỏi bash scripting, nhưng có thể tạo địa chỉ trang web thông qua giải nén phiên bản nén của địa chỉ hoặc một cái gì đó tương tự không?

Không hẳn vậy. Quá ngắn để nén. Không nén có 36 byte, được nén bằng gzip có 56 byte. Các công cụ khác tôi đã thử tạo ra kết quả thậm chí còn lớn hơn.
manatwork

5

Python, 440 428 426 398 395 byte

-31 Byte nhờ @Loovjo

Ném một lỗi khi nó tìm thấy ngày.

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],_

Xin đừng làm tổn thương tôi vì đã phân tích xml bằng regex.

phiên bản sử dụng trình phân tích cú pháp xml, 398 Byte

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
Không sao, chúng tôi chỉ gặp vấn đề với việc phân tích cú pháp HTML bằng regex;)
Beta Decay

1
Nếu tôi không nhầm, tôi nghĩ bạn có thể thay thế breakbằng một cái gì đó gây ra lỗi (chẳng hạn như 1/0(hoặc thậm chí _)). Tôi khá chắc chắn rằng bài nộp của bạn có thể thoát với một lỗi.
Loovjo

Libs bên thứ ba được phép? Nếu có, thì bạn thay đổi urllibđể sử dụng requeststrong ví dụ đầu tiên của bạn : x=requests.get(link).text.split("</p")[:-1]. Điều đó sẽ giúp bạn tiết kiệm 2 byte.
Zizouz212

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.