Phá hoại một chuyến tàu để làm cho nó chạy muộn [đóng cửa]


15

"Tôi muốn đến chợ Araby để mua một món quà cho người mà tôi đã yêu. Tuy nhiên, nếu tôi đến quá muộn, tất cả các cửa hàng sẽ đóng cửa và tôi sẽ không thể mua bất cứ thứ gì. tôi không? "

Mục tiêu: Đưa cậu bé đến Araby từ North Richmond Street trước khi tất cả các cửa hàng đóng cửa.
Mục tiêu thực tế: Hãy chắc chắn rằng cậu bé không đến Araby trước khi các cửa hàng đóng cửa.

Chương trình của bạn sẽ nhận đầu vào theo định dạng sau:

<time> <map>

Ở đâu

  • <time>là thời gian tối đa cậu bé có thể dành để đi du lịch, tính bằng phút. Nó là một số nguyên dương.
  • <map> là một biểu đồ của các tuyến đường tàu có thể đi.

Đây là cách định dạng cho biểu đồ hoạt động:

  • Mỗi câu được kết thúc bằng dấu chấm phẩy.
  • Các nút trong bản đồ (đại diện cho các công tắc) được thể hiện bằng các chữ cái viết thường.
  • Một đường dẫn giữa các nút được biểu diễn bằng cú pháp a,X,b, trong đó Xmột số nguyên biểu thị trọng số của đường dẫn. Trọng lượng của con đường là thời gian, tính bằng phút, tàu phải đi qua hai nút đó.
  • Araby được đại diện với a, và North Richmond Street được đại diện với một n.
  • Tất cả các đường dẫn là hai chiều.

Chẳng hạn, biểu đồ này (giả vờ các đường dẫn là hai chiều):

đồ thị
Hình ảnh của Artyom Kalinin, qua Wikimedia Commons. Được sử dụng theo giấy phép CC BY-SA 3.0 .

sẽ được ghi lại trong ký hiệu đồ thị như:

a,4,b;a,2,c;b,5,c;b,10,d;c,3,e;e,4,d;d,11,f;

Lưu ý rằng đầu vào này không có n, vì vậy đây là đầu vào không hợp lệ. Chương trình của bạn có thể làm bất cứ điều gì nếu được cung cấp đầu vào không hợp lệ.

Đây là một ví dụ đầu vào:

21 n,4,b;n,2,c;b,5,c;b,10,d;c,3,e;e,4,d;d,11,a;

(Đây chỉ là biểu đồ giống như hình ảnh ở trên được athay thế nfthay thế bởi a).

Cậu bé phải nhận được từ nđể atrong vòng 21 phút. Nếu anh ta đi theo lộ trình n-> c-> e-> d-> a, anh ta sẽ đến đó sau 20 phút, đúng lúc. Chúng ta có thể biểu diễn tuyến đường đó dưới dạng danh sách các nút được phân tách bằng dấu phẩy:

n,c,e,d,a

Mặt khác, tuyến đường n-> b-> c-> e-> d-> asẽ khiến cậu bé mất 27 phút, không kịp. Chúng ta có thể đại diện cho tuyến đường như thế này:

n,b,c,e,d,a

Một cách khác có thể sẽ khiến cậu bé không kịp thực hiện là:

n,b,c,b,c,b,c,b,c,b,c,b,c,b,c,b,c,b,c,e,d,a

Chương trình của bạn nên nhận đầu vào như được mô tả ở trên, và thoạt nhìn có vẻ xuất ra một tuyến đường sẽ khiến cậu bé thực hiện kịp thời, nhưng thực sự lại tạo ra một tuyến đường khiến cậu bé không kịp. Đối với bất kỳ đầu vào nhất định, sẽ luôn tồn tại một tuyến đường, mà không quay lại, điều đó khiến cậu bé không thực hiện kịp thời.

Đây là một cuộc thi phổ biến ngầm, vì vậy, mục có nhiều phiếu nhất sẽ chiến thắng. Phiếu bầu được trao cho sự khéo léo trong việc che giấu lỗi - càng ít rõ ràng thì càng tốt.

Dưới đây là một số biểu đồ mẫu để kiểm tra chương trình của bạn.

Đầu vào:

12 a,2,c;a,2,e;b,5,c;b,4,d;b,11,e;d,7,n;e,4,n;

Một đại diện trực quan (đại diện trực quan này chỉ dành cho rõ ràng và không phải là một phần của thách thức):

Đầu vào 1

Một đầu ra có thể :

n,d,b,e,a

Đầu vào:

10 a,8,b;a,12,d;b,1,n;d,11,n;a,1,n;

Dưới đây là hình ảnh trực quan của biểu đồ:

Đầu vào 2

Một đầu ra có thể :

n,d,a

 


Chúng ta có thể viết một hàm (thay vì một chương trình độc lập) không?
golfer9338

@ golfer9338 Vâng. Tôi muốn một chương trình nếu có thể, nhưng nếu phần dối trá dựa vào nó là một chức năng sau đó một chức năng được cho phép.
absinthe

Tôi đang hỏi bởi vì tôi dự định làm điều này trong Javascript.
golfer9338

3
Câu hỏi thực sự là, tại sao chúng ta lại ra ngoài để chọc tức chàng trai yêu này? Có lẽ anh ta xúc phạm gia đình chúng tôi? Có phải chính chúng ta đã có những thiết kế về đối tượng tình cảm của mình? Chúng ta phải biết!
Claudiu

3
Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì những thách thức không có chủ đề nằm ngoài chủ đề này
Rohan Jhunjhunwala

Câu trả lời:


2

Python 3 (không phải 2)

Chỉnh sửa: Tôi sẽ không biết điều này vào buổi sáng, ôi.

Đó là một tìm kiếm sao A hoàn toàn bình thường. Đúng? Riiiiiiight? Có vẻ để làm việc cho tất cả các trường hợp thử nghiệm.

def a(b,c,d):
    e,f,g=[],{},{}
    f[c]=0
    while f:
        h=sorted(f.keys(),key=lambda z:-f[z],reverse=True)[-1]
        if h==d:break
        e.append(h)
        for z in b[h]:
            if z in e:continue
            if z in f and f[z]>f[h]+b[z][h]:continue
            g[z]=h
            f[z]=f[h]+b[z][h]
        del f[h]
    i=[]
    j=d
    q=0
    while j!=c:
        i.append(j)
        q+=b[j][g[j]]
        j=g[j]
    return q,(i+[c])[::-1]
t,q=input().split(" ")
t=int(t)
q=q[:-1]
q=[i.split(",")for i in q.split(";")]
g={a:{}for a in __import__("functools").reduce(lambda zz,zy:zz+zy,[[v[0],v[2]]for v in q])}
for l in q:g[l[0]][l[2]]=g[l[2]][l[0]]=int(l[1])

r=a(g,'n','a')
print("time-good: %d, time-ours: %d" % (t, r[0]))
print("path: %s" % " -> ".join(r[1]))
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.