वन-वे सिस्टम के माध्यम से सबसे छोटा मार्ग


9

मेरे घर शहर, Rhyl , में एक-तरफ़ा ट्रैफ़िक सिस्टम है जो लगता है कि लोगों को अपने गंतव्य से यथासंभव लंबे समय तक दूर रखने के लिए डिज़ाइन किया गया है। आपका कार्य, क्या आपको इसे चुनने का प्रयास करना चाहिए, ऐसी यातायात प्रणाली के माध्यम से सबसे छोटा मार्ग देने के लिए एक कार्यक्रम का निर्माण करना है।

इनपुट

इनपुट चालू होगा STDIN, और प्रारंभ और अंत बिंदुओं की एक सूची होगी, जिसके बाद एक खाली लाइन होगी, जिसके बाद प्रश्नों की सूची होगी, इस प्रकार है:

A B
B A
B C
C D
D C

A D
C A
B A

प्रत्येक सड़क को केवल दिए गए दिशा (ओं) में यात्रा की जा सकती है, इसलिए, ऊपर के उदाहरण में सड़क A - B एक दो तरफ़ा सड़क है जबकि B - C, B से C की एक-तरफ़ा सड़क है, C से B तक की यात्रा। प्रतिबंधित हैं।

प्रारंभ और अंत अंक सभी एक एकल ऊपरी मामले पत्र द्वारा दर्शाए जाएंगे।

उत्पादन

प्रत्येक प्राप्त क्वेरी के लिए दिए गए आरंभ बिंदु से दिए गए आरंभ बिंदु से आउटपुट सबसे छोटा मार्ग (अंकों की संख्या द्वारा मापा गया) होना चाहिए। यदि ऐसा कोई मार्ग मौजूद नहीं है, तो एक रिक्त पंक्ति आउटपुट करें। यदि एक से अधिक छोटे मार्ग मौजूद हैं, तो सबसे पहले सभी छोटे मार्गों को क्रमबद्ध रूप से क्रमबद्ध करते हुए आउटपुट दें।

उपरोक्त उदाहरण के लिए आउटपुट होगा:

A B C D

B A

टेस्ट लिपियों

इससे पहले कि मैं जॉय और वेंटरो द्वारा लिखित लिपियों के आधार पर इस कार्य के लिए परीक्षण प्रदान कर रहा हूँ : -

और उपरोक्त स्क्रिप्ट्स का उपयोग नहीं कर सकने वाले किसी भी व्यक्ति के लिए परीक्षण और अपेक्षित आउटपुट भी

उपयोग: ./test [your program and its arguments]

पुरस्कार

सभी उत्तरों में स्पष्ट रूप से गोल्फिंग के कुछ प्रयास थे जो कल्पना को पूरा करते हैं और सभी परीक्षणों को पास कर लेते हैं। 26/01/2012 तक सबसे छोटा काम करने वाला उत्तर स्वीकार किया जाएगा।


output the first when sorting all shortest routes lexicographically- तो अगर A B Dऔर A C Dदोनों के A B Dबजाय वैध समाधान, उत्पादन कर रहे हैं ?
श्री लामा

@ गीगावाट हाँ, यह सही है।
गारेथ


1
@PeterTaylor आपने प्रश्न सैंडबॉक्स में रहते हुए उसे क्यों नहीं उठाया? आपकी क्या सलाह है? मैं इसे हटा सकता हूं जबकि इस पर कोई जवाब नहीं है, मुझे लगता है?
गारेथ

@ गैरेथ, क्योंकि एक बार के लिए मेटा पर कुछ थ्रेड्स पर एक ही समय में गतिविधि थी, और मैंने ध्यान नहीं दिया कि प्रश्न सैंडबॉक्स में एक नया उत्तर था। विलोपन एक संभावना है; या आप इसे किनारों पर वजन करने के लिए बढ़ा सकते हैं - हमारे पास अभी तक एक दिक्जस्त्र प्रश्न का निर्देश नहीं था।
पीटर टेलर

जवाबों:


3

हास्केल, 223 207 अक्षर

main=interact$unlines.f.break null.map words.lines
s%[f,t]=[[f]]#t where[]#_="";x#t|y@(_:_)<-[z|z<-x,last z==t]=unwords$minimum y|1<3=s&x#t
s&z=[x++[b]|x<-z,[a,b]<-s,last x==a,notElem b x];f(s,_:q)=map(s%)q

2

पायथन (2.x), 382 369 358 338 323 318 वर्ण

सभी सुझावों और टिप्पणियों का स्वागत करते हैं!

import os;u=str.split;l=u(os.read(0,1e9),'\n')
p,g,c=l.index(''),{},map;o=g.setdefault
def f(g,s,e,q=[]):q=q+[s];y=([],[q])[s==e];[c(y.append,f(g,n,e,q))for n in set(o(s,[]))-set(q)];return y
for k,v in c(u,l[:p]):o(k,[]);g[k]+=v
for w,e in c(u,l[p+1:]):h=sorted(f(g,w,e));print''if not h else' '.join(min(h,key=len))

इस रूप में परीक्षणों को पास करना चाहिए। स्टड के माध्यम से इनपुट फ़ीड, जैसे python shortestroute.py < test.txt


परीक्षा के प्रश्न 2 को विफल करने के लिए लगता है । के A B I J Mबजाय 4. लौटाता है A B G J M
गारेथ

@ गैरेथ: वास्तव में समान लंबाई के समाधानों के लेक्सोग्राफिक प्रकार पर विचार करने वाला एक छोटा सा बग था, जिसे अब ठीक किया जाना चाहिए ...
क्रिस्टोफ डी

1

C: 450 , 437 , 404 , 390 अक्षर

#include<stdio.h>
#include <string.h>
r[99][99],p[99],q[99],m[99],i,j,x,y,s;
char t[9],e[9999];
F(k)
{
    m[k]^s?r[p[k]=q[i]][k]?m[q[j++]=k]=s:0:0;
    if(++k<99)F(k);
}
f()
{
    F(0);
    if(++i^j)f();
}
P(o)
{
    if(p[o])P(p[o]);
    *t=m[o]^s?0:o;
    strcat(e,t);
}
w()
{
    gets(t);
    r[*t][t[2]]=*t?w():0;
}
W()
{
    gets(t);
    x=*t,x?y=t[j=2],s=x+y*99,m[q[t[2]=i=p[x]=0]=x]=s,f(),P(y),strcat(e,"\n"),W():0; 
}
main()
{
    w();
    W();
    puts(e);
}

puts("\n")दो newlines प्रिंट। puts()स्वचालित रूप से यह प्रिंट करता है तार के लिए एक अंत में लाइन टर्मिनेटर कहते हैं। उस व्यवहार से बचने के लिए, उपयोग fputs(str, stdout)या बस printf(str)
JB

नियमों को थोड़ा झुकता है - सभी इनपुट को एक बार में लेना चाहिए और फिर सभी उत्तरों को एक बार में आउटपुट करना चाहिए। मैं इसे +1 करूँगा क्योंकि यह ठीक काम करता है (और परीक्षणों में गलतियाँ मिली), लेकिन मैं इसे एक लंबे प्रोग्राम पर स्वीकार नहीं कर पाऊंगा जो पूरी तरह से इनपुट / आउटपुट आवश्यकताओं का अनुपालन करता है।
गारेथ

@ गारेथ: फिक्स्ड। हालाँकि, उत्तर आउटपुट 9999 वर्णों से अधिक नहीं होना चाहिए!
अली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.