রেলপথ ট্র্যাক তৈরি এবং সরকারকে প্রতারণা করুন


30

19 শতকের মার্কিন যুক্তরাষ্ট্রে আপনি রেলপথের উদ্যোক্তা যখন ট্রেনগুলি জনপ্রিয় হয়ে ওঠে কারণ তারা স্থল দ্বারা বড় পরিমাণে উপকরণ পরিবহনের সবচেয়ে কার্যকর মাধ্যম। পশ্চিমে কিছু সম্প্রতি colonপনিবেশিক জমি দিয়ে পূর্ব উপকূল থেকে রেলপথ ট্র্যাকের জাতীয় প্রয়োজন রয়েছে।

এই প্রয়োজনকে সামঞ্জস্য করার জন্য, মার্কিন সরকার রেলপথগুলিকে ভর্তুকি দেওয়ার জন্য একটি শুল্ক আদায় করতে যাচ্ছে। তারা প্রতি মাইল ট্র্যাকের জন্য আপনার রেলপথ সংস্থাকে অর্থ প্রদানের প্রতিশ্রুতি দিয়েছে। যেহেতু পার্বত্য ও পার্বত্য অঞ্চলে ট্র্যাকগুলি রাখা সমতল জমিতে ট্র্যাকগুলি রাখার চেয়ে ব্যয়বহুল, তাই তারা সে অনুযায়ী তাদের পরিমাণটি সামঞ্জস্য করে। অর্থাত্ সরকার দেবে

  • সমতল জমিতে ট্র্যাক মাইল প্রতি $ 5,000
  • পার্বত্য জমিতে পাথরের প্রতি মাইল 12,500 ডলার
  • পাহাড়ে পাথরের প্রতি মাইল 20,000 ডলার track

অবশ্যই, এই পরিকল্পনাটি সঠিকভাবে প্রতিফলিত করে না যে ট্র্যাকগুলি লাগাতে আসলে এটি কতটা ব্যয় করে।

আপনি যে অঞ্চলে উচ্চতা বিশ্লেষণের জন্য ট্র্যাক স্থাপন করবেন সে অঞ্চলের ত্রাণ মানচিত্রগুলি আঁকতে আপনি কিছু কার্টোগ্রাফার নিয়োগ করেছেন। এই জাতীয় একটি মানচিত্র এখানে:

S12321
121234
348E96

প্রতিটি অঙ্ক এক বর্গ মাইল জমি প্রতিনিধিত্ব করে। Sপ্রারম্ভিক বিন্দু, Eশেষ পয়েন্ট হয়। প্রতিটি সংখ্যা সেই অঞ্চলে উচ্চতার পরিবর্তনের তীব্রতার প্রতিনিধিত্ব করে।

  • ২-৩ নম্বরযুক্ত জমি সমতল জমি গঠন করে।
  • 4-6 নম্বরযুক্ত জমিটি পার্বত্য জমি গঠন করে।
  • 7-9 নম্বরযুক্ত জমিটি একটি পর্বতমালার গঠন করে।

রেলরোড ট্র্যাকগুলি নির্মাণের অভিজ্ঞতার কয়েক বছর আপনি মূল্যায়ন করেছেন যে ট্র্যাক বিল্ডিংয়ের ব্যয় (ডলারে) এই সূত্রটিকে সন্তুষ্ট করে:

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

এর অর্থ কিছু উচ্চতর গ্রেডিয়েন্ট তৈরি করা আপনার সরকারের চেয়ে বেশি অর্থ ব্যয় করতে পারে, কখনও কখনও এটি লাভজনক হবে এবং কখনও কখনও আপনি কেবল সামর্থ্যও ভেঙে ফেলবেন।

উদাহরণস্বরূপ, একটি উচ্চতা গ্রেডিয়েন্টে একটি মাইল ট্র্যাকের নির্মাণের জন্য 8,000 ডলার ব্যয় হয় তবে আপনি কেবল এটির জন্য 5000 ডলার পান, তাই আপনি $ 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 ডলার দেয়। আপনি এই ট্র্যাক থেকে কোনও লাভ করেন না।

অন্যদিকে, দ্বিতীয়টি তৈরি করতে costs 56,500 খরচ হয় তবে এর জন্য আপনাকে $ 62,500 দেওয়া হয়। আপনি এই ট্র্যাক থেকে 6,000 ডলার লাভ করেন।

আপনার লক্ষ্য: একটি ত্রাণ মানচিত্র দেওয়া, শুরু থেকে শেষ পর্যন্ত সর্বাধিক লাভজনক (বা সম্ভবত নিছক ব্যয়বহুল) পথ সন্ধান করুন। যদি একাধিক পথ বেঁধে দেয় তবে এর মধ্যে যে কোনও একটি গ্রহণযোগ্য সমাধান।

প্রোগ্রামের বিশদ

আপনাকে সংখ্যার আয়তক্ষেত্রাকার মানচিত্র এবং একটি শুরু এবং শেষ পয়েন্ট দিয়ে পৃথক পাঠ্য ইনপুট দেওয়া হবে। প্রতিটি সংখ্যা 1 এবং 9 এর মধ্যে সমষ্টিগতভাবে পূর্ণসংখ্যার হবে that এগুলি ছাড়াও, ইনপুটটি আপনার পছন্দ মতো যুক্তিসঙ্গতভাবে সরবরাহ করা যেতে পারে।

আউটপুটটি ইনপুটটির মতো একই ফর্ম্যাটে হওয়া উচিত, যেখানে ট্র্যাকটি হ্যাশ ( #) দ্বারা প্রতিস্থাপন করা হয়েছে তার সংখ্যার সাথে । কিছু কৌতূহলী রাজনীতিবিদদের দ্বারা নির্ধারিত স্বেচ্ছাসেবী বিধিমালার কারণে, ট্র্যাকগুলি কেবল অনুভূমিক বা উল্লম্ব পথে যেতে পারে। অন্য কথায়, আপনি ব্যাকট্র্যাক করতে বা তির্যকভাবে যেতে পারবেন না।

প্রোগ্রামটি 6 টি সারি এবং 6 কলাম পর্যন্ত মানচিত্রের জন্য যুক্তিসঙ্গত সময়ে (অর্থাত্ <10 মিনিট) সমাধান করতে সক্ষম হওয়া উচিত।

এটি একটি কোড গল্ফ চ্যালেঞ্জ, তাই সংক্ষিপ্ততম প্রোগ্রামটি জয়ী।

আমার একটি উদাহরণ রয়েছে (গল্ফবিহীন) বাস্তবায়ন

নমুনা I / O

S12321
121234
348E96

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



S73891
121234
348453
231654
97856E

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

আউটপুট দ্বিধাগ্রস্থ হলে কী হবে?
FUZxxl

2
আউটপুটটি দ্ব্যর্থহীন হতে পারে তবে দ্বিপাক্ষিক এমন উপায়ে হতে পারে যেখানে লাভটি একই হয় আপনি এটি কীভাবে আবিষ্কার করেন তা নির্বিশেষে।
পিটার ওলসন

আমার মনে হয় ছোট্ট ভুল আছে। করা উচিত 4মধ্যে 134উদাহরণস্বরূপ মানচিত্র হতে 6?
জিমিনপি

@ জিমিনপি হ্যাঁ, এটি অন্য জায়গায় নয় বরং এক জায়গায় নম্বর পরিবর্তন করা ভুল ছিল। এটা এখন সংশোধন করা উচিত।
পিটার ওলসন

3
তিন বছর পরে, সরকার চারপাশে তাকিয়ে ভাবতে শুরু করে যে সমস্ত * পাহাড় এবং পর্বতগুলি রেলপথের ট্র্যাকগুলিতে coveredাকা কেন? তবে ওহে, স্থানীয় ট্রানজিট ব্যবহারকারীরা একটি দুর্দান্ত রোলার কোস্টার / ট্যুর রাইড পেয়েছেন --- নিখরচায় - সরকার কর্তৃক অর্থায়িত, জনগণকে আরও সুখী করে তুলছে, তবে কেন যত্ন? (* কিছু গ্রেড -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 সেকেন্ড সময় নেয়।


1
আপনি 3 টি অক্ষর সংরক্ষণের জন্য দ্বিতীয় স্তরের
ইনডেন্টগুলি

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 বোর্ডের সময় সীমাবদ্ধতার মধ্যে ভালভাবে চলে runs ইনপুটটি অবশ্যই STDIN এ দেওয়া উচিত।

উদাহরণ:

S12321
121234
348E96

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

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

@ পিটারলসন আমি আপনার চ্যালেঞ্জের দিকে কমপক্ষে কিছুটা মনোযোগ দেওয়ার চেষ্টা করেছি ;-)
হাওয়ার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.