সর্বাধিক পথ সন্ধান করা


12

ধনাত্মক, প্রাকৃতিক সংখ্যার একটি বর্গ দেওয়া একটি প্রোগ্রাম লিখুন একটি সংখ্যা অনুপাতের সাথে সংখ্যার যোগফল সহ একটি অনুভূমিক এবং একটি উল্লম্ব পথ সন্ধান করুন। একটি অনুভূমিক পাথ প্রথম কলাম থেকে শেষ পর্যন্ত যায় এবং প্রতিটি স্তরে তার কলামের অবস্থান এক করে বাড়িয়ে দিতে হয়। একটি উল্লম্ব পথটি প্রথম সারি থেকে শেষের দিকে যায় এবং প্রতিটি ধাপে একটি করে তার সারির অবস্থান বাড়াতে হয়। তদুপরি অনুভূমিক পথে সারি অবস্থান একই অবস্থায় থাকতে পারে বা উভয় দিকের একের সাথে একইভাবে উলম্ব পথের জন্য পরিবর্তিত হতে পারে।

উদাহরণস্বরূপ, নিম্নলিখিতটি একটি বৈধ পথ হতে পারে:

একটি বৈধ পথের উদাহরণ

নিম্নলিখিত পাথটি অবৈধ হবে, যেহেতু এটি পিছনের দিকে ধাপে (এবং কিছু জায়গায় একই সারিতে থাকবে):

একটি অবৈধ পথের উদাহরণ

নিম্নলিখিত পাথটি সমানভাবে অবৈধ হবে, যেহেতু এটি একক পদক্ষেপে একের অধিক দ্বারা সারি অবস্থান পরিবর্তন করে:

একটি অবৈধ পথের আরও একটি চিত্রণ

দ্রষ্টব্য: সমাধানটি গ্রহণযোগ্য পরিমাণে চালানো উচিত।

ইনপুট

এন ইনপুট লাইনের এন শূণ্যস্থান দ্বারা বিভাজিত, ধনাত্মক পূর্ণসংখ্যা প্রতিটি মান ইনপুটের দেওয়া হয়। 2 ≤ n ≤ 40. প্রতিটি লাইন একটি লাইন ব্রেক দ্বারা শেষ হয়। সংখ্যাগুলি যথেষ্ট ছোট যে সর্বাধিক যোগফল 32-বিট স্বাক্ষরিত পূর্ণসংখ্যায় ফিট করে।

আউটপুট

একক স্থান দ্বারা পৃথক অনুভূমিক এবং উল্লম্ব পাথের সর্বাধিক যোগফল (সেই ক্রমে)।

নমুনা ইনপুট 1

1 2
1 2

নমুনা আউটপুট 1

3 4

নমুনা ইনপুট 2

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2 1 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 4 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 4 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

নমুনা আউটপুট 2

37 35

নমুনা ইনপুট 3

683 671 420 311 800 936
815 816 123 142 19 831
715 588 622 491 95 166
885 126 262 900 393 898
701 618 956 865 199 537
226 116 313 822 661 214

নমুনা আউটপুট 3

4650 4799

আপনার সুবিধার জন্য আমরা ব্যাশ ( ভেন্টোরোর ধন্যবাদ ) এবং পাওয়ারশেলের কয়েকটি পরীক্ষার কেস প্রস্তুত করেছি যার মাধ্যমে আপনি আপনার প্রোগ্রামটি চালাতে পারেন। অনুরোধটি হ'ল: <test> <command line>সুতরাং এর মতো কিছু ./test python paths.pyবা ./test.ps1 paths.exe। আনন্দ কর :-)


@ জোয়াই: আমরা আমাদের প্রতিযোগিতায় গত বছর যে কোনওটি ব্যবহার করেছি তার থেকে সামান্য পরিবর্তিত টাস্ক :)
জোয়ি

bashপরীক্ষার স্ক্রিপ্টের জন্য ১০০ ! আমি চাই সমস্ত কোড গল্ফ এর সাথে আসে।
এমটিএনভিউমার্ক

@ এমটিএনভিউমার্ক: আমরা চেষ্টা করি :-) ব্যক্তিগতভাবে আমি এমন কাজগুলি ঘৃণা করি যা পোস্ট হওয়ার পরে খুব বেশি স্পষ্টতার প্রয়োজন হয় এবং আমি সাধারণত আমার নিজের পরীক্ষা স্ক্রিপ্টগুলি যেভাবেই লিখি যখন গল্ফের চেষ্টা আরও একটি রিগ্রেশন প্রবর্তন করে তখন আমার জানা দরকার। এছাড়াও আমি লক্ষ্য করেছি যে কিছু লোকের স্পষ্টতই ভুল উত্তর পোস্ট করার ঝোঁক। পরীক্ষার কেসগুলি একই লাইনে প্রত্যেককে পেতে সহায়তা করে। এমন একটি সুবিধা রয়েছে যা প্রতিটি কাজের জন্য কেবল এক-অফ হ্যাকজবসের পরিবর্তে প্রতিটি কাজের জন্য কাজ করে স্পষ্টভাবে আরও ভাল হবে, তবে আমরা এখনও সেখানে যথেষ্ট নেই ;-)
জয়ে

উত্তর:


6

গল্ফস্ক্রিপ্ট - 49 নাব উন্নত অক্ষর


৫০ টি অক্ষর কঠোরভাবে এবং সম্পূর্ণ প্রয়োজনীয় অক্ষর + 3 টি স্ল্যাকার যা কেবল 1
56 এর বেশিরভাগ অনর্থক চরিত্রের কাজ করে

n%{~]}%.zip{{0@+\{\.1>\3<$-1=@+}%\;}*$-1=\}2*' '@

51 সমাধান:

n%{~]}%.zip{(\{0@+\{\.1>\3<$-1=@+}%\}%;$-1=\}2*' '@

53 সমাধান:

n/{~]}%);.zip{(\{0@+\{\.1>\3<$-1=@+}%\}%;$-1=\}2*' '@
             a8_b9___c10___11______12 13      14_

পদ্ধতিটি একবারে দুটি লাইনে কাজ করে, প্রতিটি বিন্দুতে সর্বাধিক পরিমাণ যোগ করে একটি এবং পরের রেখায় থাকা একটি।

a / 14: প্রতিটি ফলাফলের জন্য একবার, দু'বার পুনরাবৃত্তি করুন।
8: ইনপুট থেকে প্রথম লাইনটি নিয়ে ইনপুট অ্যারের পিছনে স্যুইচ করুন, এটি এখন সর্বাধিক অঙ্কের প্রথম সেট in
b / 13: অ্যারেতে প্রতিটি অবশিষ্ট রেখার উপরে আইট্রেট করুন।
9: সর্বাধিক অঙ্কের শুরুতে 0 রাখুন।
সি / 12: রেখার প্রতিটি উপাদানকে ধরে ফেলুন।
10: প্রথম উপাদানটি সরিয়ে সর্বাধিক অঙ্কের একটি অনুলিপি তৈরি করুন।
11: সর্বাধিক অঙ্কের প্রথম 3 টি উপাদান নিন, তাদের বাছাই করুন এবং লাইনের বর্তমান উপাদানটির সাথে বৃহত্তম যোগ করুন।

56 সমাধান:

n/{~]}%);.zip{1,99*\{{\.1>\3<$-1=@+}%0\+\}%;$-1=\}2*' '@
1________2___ 3____ 4______________________5_____ 6_7___

1: ইনপুট থেকে 9 টি অক্ষরে অ্যারের অ্যারে পর্যন্ত, এটি কেবল 1 দিয়ে করা যেতে পারে তবে আমি সেই কীটি ভেঙে ফেলেছি তাই এটি করতে হবে।
2: 4 অক্ষর কেবল স্থানান্তরিত অনুলিপি তৈরি করতে।
3: 5 টি অক্ষরে 99 0 এর অ্যারে, এটি সম্ভবত একটি স্মার্ট ফ্যাশনে করা যেতে পারে, তবে আমি কীভাবে চিত্রিত করতে খুব বেশি আগাছা ধূমপান করি।
4: অতিরিক্ত জটিল ডাবল লুপ যা ইনপুটটির প্রতিটি একক উপাদানের উপর পুনরাবৃত্তি করে এবং ফলাফলটি তৈরি করার জন্য কিছু अस्पष्ट যুক্তি বা এমন কিছু করে। ন্যাব সম্ভবত প্রায় 3½ টি অক্ষরের সমতুল্য কিছু তৈরি করবে।
5: এখন ফলস্বরূপ ফলাফল রয়েছে, একটি অ্যারের অভ্যন্তরে কোডটি এই নির্বোধ টুকরোটি বাইরে বেরিয়ে আসার জন্য ঠিক আছে (এবং বাম টুকরো টুকরো টুকরো করে (এবং ফলাফলটি স্থানে স্যুইচ করুন))।
6: এটি একটি কমান্ড এত সহজ যে এর চরিত্রের গণনাটি সম্ভবত কোনও অনুকূল সমাধানে নেতিবাচক হতে পারে। :: এই মুহুর্তে প্রোগ্রামটি সত্যই সম্পন্ন হয়েছে তবে পূর্ববর্তী কোডে opালু কারণে আউটপুটটি ভুল ক্রমে রয়েছে এবং এতে একটি জায়গার অভাব রয়েছে, তাই এখানে ড্রেনের নিচে আরও কয়েকটি বিট চলে।


আহ, আমি দুর্ঘটনাবশত ইনপুটটিকে নতুন লাইনের সাথে শেষ না করেই ধরে নিয়েছি। আমি আশ্চর্য হয়েছি যে এটি আসলে আংশিকভাবে কাজ করেছে, এই জাতীয় জিনিসগুলি সাধারণত একটি গল্ফস্ক্রিপ্ট প্রোগ্রামকে পুরোপুরি জড়িয়ে দেয়।
আআআআআআআআআআআআআআআআআআআআআআআআআআআআআ

1
দেখতে ঠিক আছে, যদিও এর {}*পরিবর্তে আপনার ব্যবহার করা উচিত (\{}%
নাব্ব

হ্যাঁ এটি উপলব্ধি করে, ধন্যবাদ।
আআআআআআআআআআআআআআআআআআআআআআআআআআআ

3

জে, 91 95

a=:".;._2(1!:1)3
c=:4 :'>./x+"1|:y,.(1|.!.0 y),._1|.!.0 y'
p=:[:>./c/
(":(p|:a),p a)1!:2(4)

আমি আইও করতে প্রত্যাখ্যান করছি, নাটকীয়ভাবে আমার স্কোর কমিয়ে আনছি। পরীক্ষার জোরে সমস্ত পরীক্ষায় উত্তীর্ণ হয় (যদিও এটি কেবল তখনই কাজ করে যদি ইনপুটটি কোনও লাইনের সমাপ্তির সাথে শেষ হয়, যেমন পরীক্ষার জোয়ারের মতো)।

আমি উইন্ডোজ লাইনের শেষের জন্য হ্যান্ডলিংটি সরিয়েছি, যেহেতু ক্রিস পরামর্শ দিয়েছিলেন যে এটি প্রয়োজনীয় নয়। মাল্টি প্ল্যাটফর্ম সংস্করণে a=:".;._2 toJ(1!:1)3প্রথম লাইন থাকবে।

ব্যাখ্যা:

  • fসাধারণত পি কল করে এবং ইনপুট ট্রান্সপোজড ( |:) সহ সমাধান জোড় দেয় ।
  • pপ্রতিটি সারি ( ) এর মধ্যে >./প্রয়োগ থেকে সারি-মোটের সর্বোচ্চ ( ) নেয়cc/
  • cদুটি সারি লাগে (x এবং y)। এটি y এর প্রত্যেকটির সাথে এক্স যোগ করে, y 1 টি সেল ( 1|.!.0 y) উপরে স্থানান্তরিত করেছে , এবং y 1 কক্ষ ( _1|.!.0 y) নীচে স্থানান্তরিত হয়েছে । তারপরে এটি প্রতিটি সারির জন্য তিনটি বিকল্পের সর্বাধিক গ্রহণ করে। ( >./)। বাকিটি র‌্যাঙ্ক [sic] - আমি ঠিক করছি না আমি এটি সঠিকভাবে করছি কিনা তা নিশ্চিত।

4
হুবহু, আপনার স্কোর হ্রাস। -1
আআআআআআআআআআআআআআআআআআআআআ।

@ ই বিজনেস: আপনি কি নিশ্চিত যে ডাউনওটিং একটি অসম্পূর্ণ সমাধানের সঠিক প্রতিক্রিয়া?
জেসি মিলিকান

1
@ জোয়াই: আপত্তি না করা অন্য বিকল্প। আমি তখন আইও করতে খুব ক্লান্ত হয়ে পড়েছিলাম, তবে আমার সমাধান অন্যান্য জে সমাধান থেকে এতটাই আলাদা যে আমি সত্যিই এটি পোস্ট করতে চেয়েছিলাম। যদি উত্তরটিকে "অংশবিহীন" হিসাবে চিহ্নিত করার কোনও সুস্পষ্ট উপায় বা অন্য কিছু ছিল তবে আমার কাছে তা ছিল।
জেসি মিলিকান

@ জোয়াই: আরেকটি কারণ হ'ল সমাধান স্থির হয়ে গেলেও ডাউন-ভোটের বিপরীত সম্ভাবনা নেই; আসল ব্যবহারকারীর ফিরে আসতে হবে এবং তাদের ভোট পরিবর্তন করতে হবে। (মুছে ফেলা, অনুধাবন করা হয়েছে যে আলোচনাটি সংক্ষিপ্ত-প্রচারিত হয়েছে, এবং মুছে ফেলা হয়েছে I আমি অনুমান করি পরিবর্তে আমি "শৃঙ্খলাবদ্ধ" ব্যাজটির জন্য শুটিং করব))
জেসি মিলিকান ২২'১১

@ জেসি মিলিকান: আমরা এটি করি। কোনও গ্যারান্টি নেই, তবে আপনি যদি যথাযথ সময়ের মধ্যে সমস্যাটি ঠিক করেন তবে বেশিরভাগ ডাউনভোটারদের তাদের ভোট প্রত্যাহার করা উচিত।
আআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআআড়ক্ষেড়ম্বন

3

হাস্কেল: 314 প্রয়োজনীয় অক্ষর

import Data.Vector(fromList,generate,(!))
import List
l=fromList
x=maximum
g=generate
p a=show$x[m!i!0|i<-[0..h-1]]where{
w=length$head a;h=length$a;n=l$map l a;
m=g h$ \i->g w$ \j->n!i!j+x[k#(j+1)|k<-[i-1..i+1]];
i#j|i<0||i>=h||j>=w=0|1>0=m!i!j;}
q a=p a++' ':(p.transpose)a
main=interact$q.map(map read.words).lines

দ্রষ্টব্য: এটির জন্য মডিউল ডেটা.ভেক্টর প্রয়োজন । আমি নিশ্চিত না যে এটি হাস্কেল প্ল্যাটফর্মের অন্তর্ভুক্ত কিনা।

অবরুদ্ধ সংস্করণ:

import Data.Vector(fromList,generate,(!))
import Data.List

-- horizontal; we use transpose for the vertical case
max_path :: [[Integer]] -> Integer
max_path numbers = maximum [m ! i ! 0 | i <- [0..h-1]] where
    w = length (head numbers)
    h = length numbers
    n = fromList $ map fromList numbers
    m = generate h $ \i -> generate w $ \j ->
        n ! i ! j + maximum [f i' (j+1) | i' <- [i-1..i+1]]
    f i j | i < 0 || i >= h || j >= w = 0
    f i j = m ! i ! j

max_paths :: [[Integer]] -> String
max_paths numbers = (show . max_path) numbers ++ " " ++
                    (show . max_path . transpose) numbers

main = interact $ max_paths . map (map read . words) . lines

এই সমাধানটি স্মৃতিচারণের জন্য ডেটা.ভেক্টরের সাথে তাল মিলিয়ে অলসতা ব্যবহার করে। প্রতিটি পয়েন্টের জন্য, এটি থেকে শেষ অবধি সর্বাধিক পাথের সমাধান গণনা করা হয়, তারপরে ভেক্টরের ঘরে সংরক্ষণ করা হয় mএবং প্রয়োজনে পুনরায় ব্যবহার করা হয়।


আমার ধারণা, আপনার কোথাও বিবৃতি দেওয়ার পরে আপনি কোঁকড়া ধনুর্বন্ধনীগুলি ছাঁটাতে পারেন, যদি আপনি সমস্ত সংজ্ঞাটিকে একটি এক লাইনে ভেঙে দেন।
FUZxxl

2

রুবি 1.9, 155 টি অক্ষর

f=->t{(1...l=t.size).map{|a|l.times{|b|t[a][b]+=t[a-1][(b>0?b-1:0)..b+1].max}};t[-1].max};q=[*$<].map{|a|a.split.map &:to_i};puts [f[q.transpose],f[q]]*" ""

সোজা সমাধান যা সমস্ত টেস্টকেসগুলিতে পাস করে।


2

হাস্কেল, 154 টি অক্ষর

import List
z=zipWith
f=show.maximum.foldl1(\a->z(+)$z max(tail a++[0])$z max(0:a)a)
q a=f(transpose a)++' ':f a
main=interact$q.map(map read.words).lines

  • সম্পাদনা করুন: (155 -> 154) কাজটি ভাঁজ করে in

zipWith3কোডটি সংক্ষিপ্ত করে ব্যবহার করবেন ?
গর্বিত হাসেলেলার

আমি মনে করি আপনি এর সাথে সর্বাধিক প্রতিস্থাপন foldl1 maxকরতে পারবেন যা অক্ষর যুক্ত করে তবে আপনাকে ভাঁজ 1 এবং সর্বাধিক ফ্যাক্টর করতে দেয় যা অক্ষর সংরক্ষণ করতে পারে।
গর্বিত হাসেলেলার

maximum.foldl1, max, এবং max--vs-- f=foldl1;m=max;, f m.f, m, এবং m। - বা 20 বনাম 22. সুতরাং, না, এটি সংরক্ষণ করে না।
এমটিএনভিউমার্ক

ঠিক। এবং আমি কেবল মনে করেছি মনমর্ফিজম সীমাবদ্ধতা লেখা বন্ধ করবে m=max। জিপউইথ 3 সম্পর্কে কী?
গর্বিত হাসেলেলার

1

জে, 109 + 10 = 119 টি অক্ষর

y=:0".(1!:1)3
N=:%:#y
y=:y$~N,N
r=:(((1&{)(+(3>./\0,0,~]))(0&{)),2&}.)^:(<:N)
(":([:>./"1([:r|:),r)y)(1!:2)4

সাথে চালান tr:

cat << EOF | tr \\n ' ' | ./maxpath.ijs

জে হিসাবে যথারীতি, বেশিরভাগ কোড ইনপুট / আউটপুট জন্য। "আসল" কোডটি 65 টি অক্ষর:

r=:(((1&{)(+(3>./\0,0,~]))(0&{)),2&}.)^:(<:#y)
([:>./"1([:r|:),r)y

সমস্ত পরীক্ষার কেস পাস করে


সুতরাং আমাদের আবারও একটি সমাধানের সাথে জেবি দরকার যা দশ অক্ষরের পার্সিং হ্রাস করে? ;-)
জোয়

@ জোয়ি আমি ছুটিতে আছি, আমার কাছে সবেমাত্র ইন্টারনেট অ্যাক্সেস আছে; গল্ফ করার জন্য খুব বেশি সময় নেই ;-)
জেবি

আপনি কীভাবে সরাসরি ম্যাকপথ.আইজি চালাচ্ছেন তা সম্পর্কে আমাকে ক্লু করতে পারেন?
জেসি মিলিকান

@ জেসি: * নিক্সে #!/usr/bin/env jconsoleফাইলের উপরে কিছু রাখুন এবং সম্পাদনযোগ্য পতাকা নির্ধারণ করুন।
এভেলেক্স

1

পাইথন, 149

import sys
def f(g,t=[]):
 for r in g:t=[int(e)+max(t[i-1:i+2]+[0])for i,e in enumerate(r)]
 print max(t),
g=map(str.split,sys.stdin)
f(zip(*g)),f(g)

আমি যদি কেবল একটি উল্লম্ব বা অনুভূমিকতম সংক্ষিপ্ততম পাথ গণনা করি তবে
এটি বাইটের প্রায় এক তৃতীয়াংশ সাশ্রয় করে পরিবর্তে স্থানটিতে করা যেতে পারে।


1

পাইথন, 204 টি অক্ষর

import sys
I=sys.stdin.read()
n=I.count('\n')
A=map(int,I.split())
R=range(n)
X=lambda h,a:[a[i]+max(([0]+h)[i:i+3])for i in R]
h=v=[0]*n
for i in R:h=X(h,A[i*n:i*n+n]);v=X(v,A[i::n])
print max(v),max(h)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.