আমার ট্রিপ কুল রাখুন!


11

চ্যালেঞ্জ

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

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

মানচিত্র

মানচিত্রটি আপনার পছন্দ মতো এবং সরবরাহ করা যেতে পারে নীচের চিহ্নগুলি:

+ is a corner of a wall
| is a east/west facing wall
- is a north/south facing wall
X is an air conditioning unit
S is the start and end point

একটি উদাহরণ মানচিত্র হবে:

+------S---+
|   X      |
| ---+-+ X |
|    |X|   |
| ---+ +---+
|   X      |
+----------+

অথবা

+---+--+
| X |  |
|   |  +-----+------+
|   | X      | X    |
|     ---+       |  S
|   |    |  X    |  |
|   |  +-+-------+--+
| X    |
+------+

পুরো মানচিত্রের চারপাশে ভ্রমণ মানে প্রতিটি খালি জায়গা এবং এয়ার কন্ডিশনারটি পার হয়ে। আপনি কোনও প্রাচীরের মধ্য দিয়ে ভ্রমণ করতে পারবেন না এবং কেবলমাত্র orthogonally ভ্রমণ করতে পারেন। একটি মানচিত্র সবসময় আয়তক্ষেত্রাকার নাও হতে পারে।

এসি ইউনিট থেকে যতটা সম্ভব দূরত্ব রাখা সর্বকালের পদক্ষেপগুলির সমষ্টি।

প্রবেশ করা মানে প্রবেশ করা এবং চলে যাওয়া।

আপনি নিজের পছন্দ মতো কোনও পথে আউটপুট দিতে পারেন। উদাহরণ অন্তর্ভুক্ত:

  • পথটি অন্তর্ভুক্ত করে মানচিত্রকে আউটপুট করা
  • কম্পাস পয়েন্টগুলির উত্তরাধিকার হিসাবে পাথ আউটপুট করা (উদাহরণস্বরূপ NNSESW)

2
@ বেটাডেকে এবং কীভাবে এটি গণনা করা হয়? সময়ের যে কোনও সময় সর্বোচ্চ দূরত্ব? সর্বকালের পদক্ষেপের চেয়ে কত দূরত্বের গড় / গড়?
ইনগো বার্ক

5
এই সমস্যার লক্ষ্য কী তা বোঝা অসম্ভব। যদি আপনাকে অবশ্যই প্রতিটি স্কয়ারে যেতে হয় তবে সর্বাধিক দূরত্ব একটি ধ্রুবক।
শুক্রবার

1
@ ফেয়ারসাম কেন? মানচিত্রের বিন্যাসটি নির্দিষ্ট স্কোয়ারগুলিতে আবার ঘুরে দেখার এবং এভাবে পথের জন্য একাধিক সম্ভাব্য সংস্থান দেওয়া প্রয়োজনীয় করে তুলতে পারে নি?
অদৃশ্যপান্ডা

6
এটি কি একটি অপ্টিমাইজেশন সমস্যা? যদি তা না হয় তবে সঠিক ফলাফলের সাথে কিছু পরীক্ষার কেস থাকতে হবে should
mbomb007

2
আপনি কি প্রথম উদাহরণের জন্য আমাদের কেবল দুটি সম্ভাব্য ভ্রমণ পথের জন্য দূরত্ব দিতে পারেন?
mdahmoune

উত্তর:


1

উইন্ডোজ জন্য পাওয়ারশেল , 376 367 বাইট

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

$f={param($m,$d,$o=@{})$w=(($l=$m-split"
")|% le*|sort)[-1]
$m=($l|% *ht $w)-join"
"
if(!$o.$m-or$o.$m-ge$d-and$m-match'(?s)X.*S|S.*X'){$o.$m=$d++
$n=-split")X(S )X(.{$w}S S)X( S.{$w})X("|%{sls "(?s)^(.*$_.*)$" -inp $m -a|% m*|%{($_.Groups-replace'S',' ')[1,2]-join'S'}}
$d=(($n+,($m-replace"(?s)(?<=S(.{$w})?) | (?=(.{$w})?S)",'S')*!$n)|%{&$f $_ $d $o}|sort)[0]}+$d}

এটি অনলাইন চেষ্টা করুন!

Unrolled:

$f={
    param($map,$distance,$o=@{})
    $lines = $map-split"`n"
    $width = ($lines|% length|sort)[-1]
    $map = ($lines|% padRight $width)-join"`n"                              # to rectangle

    if(!$o.$map -or $o.$map-ge$distance -and $map-match'(?s)X.*S|S.*X'){
        $o.$map = $distance++                                               # store a map to avoid recalculations
        $n = -split")X(S )X(.{$width}S S)X( S.{$width})X("|%{               # search a nearest X in 4 directions
            select-string "(?s)^(.*$_.*)$" -InputObject $map -AllMatches|% Matches|%{
                ($_.Groups-replace'S',' ')[1,2]-join'S'                     # start a new segment (reset all S and replace the nearest X by S)
            }
        }
        $stepMore = $map-replace"(?s)(?<=S(.{$w})?) | (?=(.{$w})?S)",'S'
        $n += ,$stepMore*!$n                                                # add a step if X was not found
        $distance=($n|%{&$f $_ $distance $o}|sort)[0]                       # recursive repeat
    }

    +$distance
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.