रेल की पटरी बनाएं और सरकार को धोखा दें


30

आप 19 वीं शताब्दी के संयुक्त राज्य अमेरिका में एक रेल उद्यमी हैं, जब ट्रेनें लोकप्रिय हो जाती हैं, क्योंकि वे भूमि पर बड़ी मात्रा में सामग्रियों के परिवहन का सबसे कुशल साधन हैं। पश्चिम में कुछ हाल ही में उपनिवेशित भूमि के माध्यम से पूर्वी तट से रेल की पटरियों की एक राष्ट्रीय आवश्यकता है।

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

  • फ्लैट भूमि में रखी ट्रैक की प्रति मील $ 5,000
  • पहाड़ी भूमि में रखी ट्रैक की प्रति मील $ 12,500
  • पहाड़ों में रखी प्रति ट्रैक $ 20,000 मील।

बेशक, यह योजना सही रूप से प्रतिबिंबित नहीं करती है कि पटरियों को बिछाने में वास्तव में कितना खर्च होता है।

आपने उन क्षेत्रों के राहत मानचित्र तैयार करने के लिए कुछ कार्टोग्राफर को काम पर रखा है, जहां आप ऊंचाई का विश्लेषण करने के लिए ट्रैक बिछाएंगे। यहाँ एक ऐसा नक्शा है:

S12321
121234
348E96

प्रत्येक अंक एक वर्ग मील भूमि का प्रतिनिधित्व करता है। Sप्रारंभिक बिंदु Eहै, अंतिम बिंदु है। प्रत्येक संख्या उस क्षेत्र में उन्नयन परिवर्तनों की तीव्रता का प्रतिनिधित्व करती है।

  • भूमि की संख्या 1-3 समतल भूमि का गठन करती है।
  • 4-6 की संख्या वाली भूमि पहाड़ी भूमि है।
  • 7-9 की संख्या में पर्वत श्रृंखला का निर्माण होता है।

आपके पास रेल निर्माण पटरियों के अनुभव के वर्षों के माध्यम से, मूल्यांकन किया गया है कि ट्रैक बिल्डिंग की लागत (डॉलर में) इस सूत्र को संतुष्ट करती है:

Cost_Per_Mile = 5000 + (1500 * (Elevation_Rating - 1))

इसका मतलब यह है कि कुछ उन्नयन ग्रेडों पर निर्माण करने से आपको सरकार द्वारा दिए गए धन की तुलना में अधिक पैसा खर्च करना होगा, कभी-कभी यह लाभदायक होगा, और कभी-कभी आप बस तोड़ भी देंगे।

उदाहरण के लिए, 3 की ऊंचाई पर ट्रैक के एक मील के निर्माण के लिए $ 8,000 का खर्च आता है, लेकिन आपको इसके लिए केवल $ 5,000 का भुगतान मिलता है, इसलिए आप $ 3000 खो देते हैं। इसके विपरीत, 7 की ऊंचाई ढाल पर ट्रैक का एक मील का निर्माण $ 14,000 की लागत है, लेकिन आपको इसके लिए $ 20,000 का भुगतान मिलता है: $ 6,000 का लाभ!

यहां एक उदाहरण मानचित्र है, साथ ही साथ दो अलग-अलग संभावित मार्ग भी हैं।

S29    S#9    S##
134    1#4    1##
28E    2#E    2#E

पहले ट्रैक का निर्माण करने में $ 30,000 डॉलर का खर्च आता है, लेकिन सरकार आपको इसके लिए $ 30,000 का भुगतान करती है। आप इस ट्रैक से कोई लाभ नहीं कमाते हैं।

दूसरी ओर, दूसरा निर्माण करने के लिए $ 56,500 की लागत आती है, लेकिन आपको इसके लिए $ 62,500 का भुगतान किया जाता है। इस ट्रैक से आपको $ 6,000 का लाभ होता है।

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

कार्यक्रम का विवरण

आपको संख्याओं के आयताकार मानचित्र और एक प्रारंभ और अंत बिंदु के साथ अलग किए गए पाठ इनपुट दिए जाते हैं। प्रत्येक संख्या 1 और 9 के बीच एक पूर्णांक होगी। इसके अलावा, इनपुट आपको कारण के अनुसार प्रदान किया जा सकता है।

आउटपुट इनपुट के समान प्रारूप में होना चाहिए, उन संख्याओं के साथ जहां ट्रैक को हैश ( #) द्वारा प्रतिस्थापित किया गया है । कुछ राजनेताओं द्वारा लगाए गए मनमाने नियमों के कारण, ट्रैक केवल क्षैतिज या ऊर्ध्वाधर पथों में जा सकते हैं। दूसरे शब्दों में, आप तिरछे या पीछे नहीं जा सकते।

6 पंक्तियों और 6 स्तंभों के नक्शे के लिए कार्यक्रम उचित समय (अर्थात <10 मिनट) में हल करने में सक्षम होना चाहिए।

यह एक कोड गोल्फ चुनौती है, इसलिए सबसे छोटा कार्यक्रम जीत जाता है।

मेरे पास एक उदाहरण (गैर-गोल्फ) कार्यान्वयन है

नमूना I / O

S12321
121234
348E96

S12321
######
3##E##



S73891
121234
348453
231654
97856E

S#3###
1###3#
3#####
######
#####E

यदि उत्पादन अस्पष्ट है, तो क्या है?
फ़ूजएक्सएक्स

2
आउटपुट अस्पष्ट हो सकता है, लेकिन अस्पष्ट तरीके से जहां लाभ समान है, भले ही आप इसे ट्रेस कैसे करें।
पीटर ओल्सन

मुझे लगता है कि छोटी सी गलती है। चाहिए 4में 134उदाहरण के मानचित्र में हो 6?
JiminP

@JiminP हाँ, कि एक स्थान पर संख्याओं को बदलने से एक गलती हुई थी, लेकिन दूसरे में नहीं। इसे अब ठीक किया जाना चाहिए।
पीटर ओल्सन

3
तीन साल बाद, सरकार चारों ओर देखती है और सोचने लगती है कि सभी * रेल की पटरियों पर पहाड़ और पहाड़ क्यों ढके हुए हैं। लेकिन हे, स्थानीय पारगमन उपयोगकर्ताओं को एक अच्छा रोलर कोस्टर / टूर की सवारी मिली --- मुफ्त में --- शासन द्वारा वित्त पोषित, लोगों को खुश करने के लिए, तो क्यों परवाह है? (* कुछ ग्रेड -6 पहाड़ियों को छोड़कर)
जॉन ड्वोरक

जवाबों:


5

अजगर, 307 चरस

import os
I=os.read(0,99)
n=I.find('\n')+1
I='\0'*n+I+'\0'*n
def P(p):
 S=[]
 for d in(-n,-1,1,n):
  y=p[-1]+d
  if'E'==I[y]:S+=[(sum((int(I[v])-1)/3*75-15*int(I[v])+15for v in p[1:]),p)]
  if'0'<I[y]<':'and y not in p:S+=P(p+[y])
 return S
for i in max(P([I.find('S')]))[1][1:]:I=I[:i]+'#'+I[i+1:]
print I,

Pएक आंशिक रास्ता लेता है pऔर उस तक पहुंचने के सभी तरीकों को वापस करता है E। प्रत्येक लौटे पथ को अपने स्कोर के साथ जोड़ा जाता है ताकि maxसबसे अच्छा मिल सके।

एक 6x6 मानचित्र पर लगभग 80 सेकंड लेता है।



4

पायथन: 529 482 460 बाइट्स

मेरा समाधान कोई पुरस्कार नहीं जीतेगा। हालांकि, चूंकि केवल दो समाधान पोस्ट किए गए हैं और मुझे समस्या दिलचस्प लगी, मैंने अपने उत्तर को वैसे भी पोस्ट करने का फैसला किया।

संपादित करें: हावर्ड को उसकी सिफारिशों के लिए धन्यवाद। मैं अपने स्कोर का एक बहुत दाढ़ी बनाने में कामयाब रहा हूँ!

import sys
N=len
def S(m,c,p=0):
 if m[c]=='E':return m,p
 if m[c]<'S':
    b=list(m);b[c]='#';m=''.join(b)
 b=[],-float('inf')
 for z in(1,-1,w,-w):
    n=c+z
    if 0<=n<N(m)and m[n]not in('S','#')and(-2<z<2)^(n/w!=c/w):
     r=S(m,n,p+(0if m[n]=='E'else(int(m[n])-1)/3*5-int(m[n])+1))
     if b[1]<r[1]:b=r
 return b
m=''
while 1:
 l=sys.stdin.readline().strip()
 if l=='':break
 w=N(l);m+=l
b,_=S(m,m.index('S'))
for i in range(0,N(b),w):print b[i:i+w]

ऐसे ही शुरू होता है। :)
जोनाथन वान माट्रे

1
कुछ मामूली सुधार: Pऔर Mकेवल एक बार उपयोग किया जाता है तो यह इनलाइन के लिए एक अच्छा विचार है (एक ही मंगलाचरण के लिए यह कभी-कभी दो के लिए लगभग सभी मामलों में काम करता है)। m[c]!='S'को छोटा किया जा सकता m[c]<'S'है, यह भी abs(z)==1करने के लिए abs(z)<2या यहां तक कि -2<z<2
हावर्ड

आपके "मामूली सुधार" मुझे 47 बाइट बचाते हैं। मैं अपना उत्तर संपादित कर रहा हूं।
सादाकुत्सु

3

रूबी, 233 वर्ण

R=->s{o=s=~/S/m
s=~/E/m?(q=[-1,1,-N,N].map{|t|s[f=o+t]>'0'?(n=s*1
n[o]='#'
n[f]='S'
a=R[n]
a&&[a[0]-(e=s[f].to_i-1)/3*5+e,a[1]]):nil}-[nil]
q.sort!&&q[0]):[0,(n=s*1;n[o]='E'
n[$_=~/S/m]='S'
n)]}
N=1+(gets(nil)=~/$/)
$><<R[$_+$/*N][1]

एक रूबी ब्रूट-बल दृष्टिकोण जो 6x6 बोर्ड पर समय की कमी के अंदर अच्छी तरह से चलता है। इनपुट STDIN पर दिया जाना चाहिए।

उदाहरण:

S12321
121234
348E96

S#2321
1#####
3##E##    
--    
S73891
121234
348453
231654
97856E

S#####
1212##
#####3
#3####
#####E

@PeterOlson मैंने आपकी चुनौती पर कम से कम थोड़ा ध्यान देने की कोशिश की ;-)
हावर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.