2 ডি বিমানে দীর্ঘতম পথ


14

আপনাকে সালিসি, অনন্য, 2 ডি, পূর্ণসংখ্যার কার্তেসিয়ান স্থানাঙ্কের একটি সেট সরবরাহ করা হয়েছে: যেমন [[(0,0), (0,1), (1,0)]

এই স্থানাঙ্কগুলির সেট থেকে দীর্ঘতম পথটি সন্ধান করুন, এই সীমাবদ্ধতার সাথে যে কোনও স্থানাংক কেবল একবার "পরিদর্শন" করা যায়। (এবং আপনি যে সমন্বয় শুরু করেছিলেন তাতে আপনি "ফিরে" আসবেন না)।

গুরুত্বপূর্ণ:

আপনি কোনও স্থানাঙ্ক বা এর আশেপাশে "পার" করতে পারবেন না। উদাহরণস্বরূপ, সর্বশেষ নোট উদাহরণে (আয়তক্ষেত্র), আপনি সি না গিয়ে ডি থেকে ক এ স্থানান্তর করতে পারবেন না (যা কোনও পুনর্বিবেচনা হতে পারে, এটি পাওয়া দৈর্ঘ্যকে অকার্যকর করে)। এটি @ ফ্রাইআমডেজিমন দ্বারা চিহ্নিত করা হয়েছিল।

ফাংশন ইনপুট: 2d কার্টিজিয়ান স্থানাঙ্ক অ্যারে
: ফাংশন আউটপুট সর্বাধিক দৈর্ঘ্য শুধুমাত্র
বিজয়ী: সংক্ষিপ্ততম কোড জয়ী, কোন নিষেধাজ্ঞা জারি করা ঝুলিতে (না অধিকাংশ দেশকাল দক্ষ)


উদাহরণ

মূল ত্রিভুজ

1 : উপরে দেখানো এই ক্ষেত্রে, দু'বার কোনও স্থানাঙ্কিত "পরিদর্শন করা" না থাকা দীর্ঘতম পথটি হ'ল A -> বি -> ও (বা ওবিএ, বা বিএও), এবং পথের দৈর্ঘ্য বর্গ (2) + 1 = 2.414




বর্গক্ষেত্র

2 : উপরে প্রদর্শিত এই ক্ষেত্রে, দু'বার কোনও স্থানাঙ্কিত "পরিদর্শন করা" না থাকা দীর্ঘতম পথ হ'ল ABOC (এবং স্পষ্টতই সিওবিএ, ওসিএবি ইত্যাদি), এবং দেখানো ইউনিট বর্গের জন্য, এটি বর্গক্ষেত্র (2) + বর্গ (2) + গণনা করে 1 = 3.828।


দ্রষ্টব্য: এখানে একটি অতিরিক্ত পরীক্ষার কেস যা পূর্ববর্তী দুটি উদাহরণের মতো তুচ্ছ নয়। এটি 6 টি স্থানাঙ্ক থেকে গঠিত একটি আয়তক্ষেত্র:

এখানে চিত্র বর্ণনা লিখুন

এখানে, দীর্ঘতম পথটি হল: এ -> ই -> সি -> ও -> ডি -> বি, যা 8.7147 হয়
(সর্বাধিক সম্ভাব্য ত্রিভুজগুলি চলত এবং কোনও কিনারাও বিভ্রান্ত হয়নি)


বিভিন্ন স্কোরিং সত্ত্বেও এখানে একটি খুব অনুরূপ প্রশ্ন
জিওবিটস

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

@ ফ্যাটালাইজ সম্পন্ন এটি 8.7147।
ব্লুপিল

যাইহোক: পিপিসিজিতে আপনাকে স্বাগতম!
ফ্যাটালাইজ করুন

@ ফ্যাটালাইজ ধন্যবাদ! (আসলে আমি এখানে কিছুক্ষণ পর্যবেক্ষক হয়েছি, সবেমাত্র সক্রিয় হয়েছি এবং আজ থেকে শুরু করা পুরো জিনিসটিতে)। :)
ব্লুপিল

উত্তর:


3

পাইথ, 105 103 100 92 86 বাইট

V.pQK0FktlNJ.a[@Nk@Nhk)FdlNI&!qdk&!qdhkq+.a[@Nk@Nd).a[@Nd@Nhk)J=K.n5B)=K+KJ)IgKZ=ZK))Z

              Z = 0 - value of longest path
              Q = eval(input())

V.pQ         for N in permutations(Q):
  K0           K = 0 - value of current path
  FktlN        for k in len(N) - 1:
    J.a          set J = distance of
    [@Nk                 Q[k] and Q[k+1]
    @Nhk)    
    FdlN         for d in len(N):
I&                 if d != k && d != (k + 1)
!qdk
&!qdhk
q+                and if sum of
.a                   distance Q[k] and Q[d]
 [@Nk                
 @Nd)                
.a                   distance Q[d] and Q[k+1]
 [@Nd
 @Nhk)
J                    are equal to J then
  =K.n5              set K to -Infinity
  B                  and break loop
                     ( it means that we passed over point )
  )                   end of two if statements
=K+KJ                  K+=J add distance to our length
)                      end of for
IgKZ                   if K >= Z - if we found same or better path
  =ZK                  Z = K       set it to out max variable
))                     end of two for statements
Z                      output value of longest path 

এখানে চেষ্টা করুন!


2

গণিত, 139 বাইট

Max[Tr@BlockMap[If[1##&@@(Im[#/#2]&@@@Outer[#/Abs@#&[#-#2]&,l~Complement~#,#])==0,-∞,Abs[{1,-1}.#]]&,#,2,1]&/@Permutations[l=#+I#2&@@@#]]&

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

%[{{0,0},{0,1},{1,0},{1,1},{2,0},{2,1}}]
(* 3 Sqrt[2]+2 Sqrt[5] *)

%//N
(* 8.71478 *)

1

পার্ল, 341 322 318 বাইট

sub f{@g=map{$_<10?"0$_":$_}0..$#_;$"=',';@l=grep{"@g"eq join$",sort/../g}glob"{@g}"x(@i=@_);map{@c=/../g;$s=0;$v=1;for$k(1..$#c){$s+=$D=d($k-1,$k);$_!=$k&&$_!=$k-1&&$D==d($_,$k)+d($_,$k-1)and$v=0 for 0..$#c}$m=$s if$m<$s&&$v}@l;$m}sub d{@a=@{$i[$c[$_[0]]]};@b=@{$i[$c[$_[1]]]};sqrt(($a[0]-$b[0])**2+($a[1]-$b[1])**2)}

কোডটি 100 পয়েন্ট পর্যন্ত সমর্থন করে। যেহেতু এটি সমস্ত সম্ভাব্য পয়েন্ট ক্রমশক্তি তৈরি করে, তাই 100 পয়েন্টের জন্য কমপক্ষে 3.7 × 10 134 ইয়টবাইট মেমরির প্রয়োজন হবে (12 পয়েন্টগুলি 1.8Gb ব্যবহার করবে)।

মন্তব্য করেছে:

sub f {
    @g = map { $_<10 ? "0$_" : $_ } 0..$#_; # generate fixed-width path indices
    $" = ',';                               # set $LIST_SEPARATOR to comma for glob
    @l = grep {                             # only iterate paths with unique points
        "@g" eq join $", sort /../g         # compare sorted indices with unique indices
    } glob "{@g}" x (@i=@_);                # produce all permutations of path indices
                                            # and save @_ in @i for sub d
    map {
        @c = /../g;                         # unpack the path indices
        $s=0;                               # total path length
        $v=1;                               # validity flag
        for $k (1..$#c) {                   # iterate path
            $s +=                           # sum path length
                $D = d( $k-1, $k );         # line distance 

              $_!=$k && $_!=$k-1            # except for the current line,
              && $D == d( $_, $k )          # if the point is on the line,
                     + d( $_, $k-1 )
              and $v = 0                    # then reset it's validity
            for 0 .. $#c                    # iterate path again to check all points
        }
        $m=$s if $m<$s && $v                # update maximum path length
    } @l;
    $m                                      # return the max
}

sub d {                                     
    @a = @{ $i[$c[$_[0]]] };                # resolve the index $_[0] to the first coord
    @b = @{ $i[$c[$_[1]]] };                # idem for $_[1]
    sqrt( ($a[0] - $b[0])**2       
        + ($a[1] - $b[1])**2 )      
}

TestCases:

print f( [0,1], [0,0], [1,0] ), $/;        $m=0; # reset max for next call
print f( [0,0], [0,1], [1,0], [1,1] ), $/; $m=0;
print f( [0,0], [0,1], [0,2] ), $/;        $m=0;
print f( [0,0], [0,1], [0,2], 
         [1,0], [1,1], [1,2]),$/;          $m=0;
  • 322 বাইট: পুনরায় সেট না করে 19 $"এবং কিছু ইনলাইনিং করে সংরক্ষণ করুন
  • 318 বাইট: কর্ডের সর্বাধিক NR হ্রাস করে 4 এ সংরক্ষণ করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.