মাতালদের জার্নি হোম


23

মাতালদের জার্নি হোম

এই চ্যালেঞ্জে আপনাকে এমন একটি প্রোগ্রাম লিখতে হবে যা মাতাল বার থেকে বাড়ি ফেরার পথে হোঁচট খাচ্ছে sim

ইনপুট:

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

ধরে নিন যে মাতাল সর্বদা বারে শুরু হয় (সংলগ্ন ম্যাট্রিক্সের প্রথম সারিতে)।

মাতাল যদি কোনও শেষের দিকে প্রবেশ করে তবে এটি ধরে নেওয়া যেতে পারে যে সে হয় নিজের বাড়িতে চলে গেছে বা পাবলিক নেশার জন্য তাকে গ্রেপ্তার করা হয়েছে এবং প্রোগ্রামটির উচিত তার পথ ফিরে আসা।

ধারণা করা যেতে পারে যে গ্রাফটিতে সর্বদা কমপক্ষে একটি ডেড-এন্ড থাকবে।

এটিও ধরে নেওয়া যেতে পারে যে মাতাল সর্বদা বার থেকে বেরিয়ে যেতে সক্ষম হবে (প্রথম সারিতে সমস্ত জিরো হবে না) এবং মাতালটি যদি কোনও স্থানে আটকে থাকে তবে সারিটি সমস্ত শূন্য দ্বারা প্রতিনিধিত্ব করা হবে।

আউটপুট:

মাতাল তার বাড়িতে যাওয়ার চেষ্টা করে আউটপুটটি সেই পথ হবে। অবস্থানগুলির মানগুলি শূন্য বা এক সূচকযুক্ত হতে পারে।

উদাহরণ:

Input
[1,0,1,1]
[0,0,0,0]
[1,0,0,0]
[1,1,1,1]

Possible Outputs
[0,2,0,3,2,0,0,3,1]
[0,3,0,3,1]


Input
[0,1,1,1,0,1]
[1,0,1,0,1,1]
[0,0,0,0,0,0]
[0,0,0,0,0,1]
[1,0,0,0,0,0]
[0,0,0,0,0,0]

Possible outputs
[0,1,5]
[0,5]
[0,1,4,0,2]
[0,3,5]
[0,3,0,1,4,0,5]

Deterministic path:

Input
[0,0,1,0]
[0,0,0,1]
[0,1,0,0]
[0,0,0,0]

Output
[0,2,1,3]

12
এটি কিছু শিক্ষার্থীর স্মৃতি ফিরিয়ে এনেছে ... এর অর্থ আমি ভুল করছি, অবশ্যই আমি নির্দেশিত গ্রাফগুলির বিষয়ে কথা বলছি! ও :-)
আর্নল্ড

আমরা কি স্ট্রিংগুলির অ্যারের হিসাবে ইনপুট নিতে পারি [ '1011', '0000', '1000', '1111' ]?
আর্নল্ড

দণ্ডটি কি মৃতপ্রায় হতে পারে? অন্য কথায়, প্রথম সারিতে কি সব শূন্য হবে? এছাড়াও, কখনও কি এমন কোনও সারি থাকবে যা কেবল নিজের দিকে নিয়ে যায় এবং আমরা কি শেষ শর্ত হিসাবে এটি সনাক্ত করতে পারি? অন্য কথায়, iকলাম ব্যতীত সব শূন্যের সাথে কি কখনও সারি থাকবে i?
kamoroso94

5
আমি কেবল ট্যাক্সিটিতে কারও উত্তর লেখার অপেক্ষায়
রয়েছি

২ য় উদাহরণে আপনি শেষের পথটি কীভাবে পাবেন? আমার বোঝার থেকে 0লিঙ্ক 1,2,3,5, কিন্তু শেষ আউটপুট তা থেকে যাচ্ছে করেছে 0করার4
phflack

উত্তর:


7

গণিত, 72 বাইট

{1}//.{r___,x_}:>{r,x,n=1;Check[RandomChoice[#[[x]]->(n++&/@#)],##&[]]}&

এটি একটি ফাংশন ম্যাট্রিক্সকে একটি আর্গুমেন্ট হিসাবে গ্রহণ করে এবং একটি তালিকা দেয় এবং এটি 1-সূচি ব্যবহার করে।

প্রাথমিক ধারণাটি দিয়ে শুরু করা

{1}//.

যা বারবার তালিকার নীচে অনুসরণ করা নিয়মটি {1}পরিবর্তন হওয়া বন্ধ না করে প্রয়োগ করে । নিয়মটি প্যাটার্নের সাথে মেলে

{r___,x_}:>

যার অর্থ "শূন্য বা আরও বেশি উপাদানগুলির একটি তালিকা যার rপরে নামক একটি উপাদান রয়েছে x" " এটি xবর্তমান তালিকার শেষ উপাদান হিসাবে দেয় এবং আমরা তালিকাটি এর সাথে প্রতিস্থাপন করি

{r,x,<stuff>}

<stuff>সংযুক্ত সঙ্গে মূল তালিকা যা । প্রশ্নে স্টাফ হয়

RandomChoice[#[[x]]->(n++&/@#)]

যা #[[x]]( xইনপুট ম্যাট্রিক্সের th তম উপাদান) ওজনের একটি তালিকা হিসাবে গ্রহণ করে এবং এগুলিতে মানচিত্র করে n++&/@#, যা সংক্ষিপ্ত Range@Length@#(যেমন {1,2,3,...}উপযুক্ত দৈর্ঘ্যের সাথে)। ওজনগুলি সমস্ত শূন্য হলে এটি একটি ত্রুটি ফেলবে, এ কারণেই এটি একটিতে আবৃত in

Check[...,##&[]]

যা ##&[]কোনও ত্রুটি বার্তা উত্পন্ন হলে ফিরে আসবে । এটি কেবল লেখার এক অভিনব উপায় Sequence[], যা "কিছুই না" উপাদান হিসাবে কাজ করে ( {1,2,Sequence[],3}মূল্যায়ণ করে {1,2,3}) এবং তাই তালিকাটি অপরিবর্তিত রেখে দেয় যার ফলে //.প্রতিস্থাপন বন্ধ করা যায়।



3

পার্ল 5 -a0 , 53 51 বাইট

STDIN- এ আলাদা টাইট স্ট্রিং হিসাবে ইনপুট ম্যাট্রিক্স দিন

$!/usr/bin/perl -a0
$n=!say$%;$F[$%]=~s:1:($%)=@-if 1>rand++$n:eg&&redo

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

@Fলুপ বডি চলাকালীন ক্ষয়ক্ষতিগুলি তবে এটি মেরামত করেredo


3

এমএটিএল , 15 বাইট

1`GyY)ft?th1ZrT

আউটপুটটি 1-ভিত্তিক।

এটি অনলাইন চেষ্টা করুন! প্রথম ইনপুটদ্বিতীয় ইনপুটতৃতীয় ইনপুট

ব্যাখ্যা

1          % Push 1: initial value of current row index
`          % Do...while
  G        %   Push input matrix
  y        %   Duplicate from below: pushes copy of current row index
  Y)       %   Get that row
  f        %   Find: push (possibly empty) array of indices of non-zero entries
  t        %   Duplicate
  ?        %   If non-empty
    th     %     Attach a copy of itself. This is needed in case the array
           %     contains a single number n, because then the randsample
           %     function would incorrectly treat that as the array [1 2 ... n]
    1Zr    %     Randsample: pick 1 entry at random with uniform probability
    T      %     Push true
           %   End (implicit)
           % End (implicit). Proceed with a new iteration if the top of the
           % stack is truthy. This happens if the current row had some
           % non-zero entry, in which case true was pushed (and is now
           % consumed). If the current row was all zeros, the top of the stack
           % is an empty array that was produced by the find function, which is
           % falsy (and is also consumed now). In that case the loop is exited,
           % and then the stack contains a collection of numbers which
           % collectively describe the path
           % Implicit display


2

পাইথন, 136 বাইট

শূন্য সূচী ব্যবহার করে, রেন্ডার্জ আমদানি করা হয়েছে বলে ধরে নেওয়া। সংলগ্ন ম্যাট্রিক্স হিসাবে একটি ইনপুট মি নেয়

113 কোনও আমদানি নেই

s=lambda m,c=0,p=[0],x=0:1 in m[c]and(m[c][x]and s(m,x,p+[x],randrange(len(m)))or s(m,c,p,randrange(len(m))))or p

136 আমদানি সহ

import random as r;s=lambda m,c=0,p=[0],x=0:1 in m[c]and(m[c][x]and s(m,x,p+[x],r.randrange(len(m)))or s(m,c,p,r.randrange(len(m))))or p


3
আমি 136 আপনার প্রধান বাইট গণনা হিসাবে ব্যবহার করার পরামর্শ দিচ্ছি, con ক্যমত্য আমদানির বিবৃতি অনুসারে এর দিকে গণনা করা হবে।
জোনাথন ফ্রেচ

2

রুবি , 70 67 65 বাইট

f=->m,i=0{m[i].sum<1?[]:m[i][x=rand(m.size)]<1?f[m,i]:[x]+f[m,x]}

2 বাইট সংরক্ষণের জন্য বেনজ 2240 কে ধন্যবাদ !

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


আপনি একটি দম্পতি বাইট সংরক্ষণ করতে পারেনm[i].sum<1?:[]
বেনজ 2240

@ বেঞ্জ 2240 বাহ, আমি কখনই জানতাম না যে এটি সম্ভব ছিল। এখন বুঝতে পারলাম .sum২.৪-এ প্রবর্তিত হয়েছিল। আমি করতাম .reduce(0, :+)...
ক্রিশ্চিয়ান লুপাস্কু

2

জাভাস্ক্রিপ্ট (ES6), 87 বাইট

f=(a,y=0)=>[y,.../1/.test(r=a[y])?f(a,(g=_=>r[k=Math.random()*r.length|0]?k:g())()):[]]

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


বিকল্প সংস্করণ, 81 বাইট

বাইনারি স্ট্রিংগুলির একটি অ্যারে হিসাবে ইনপুট নেয়। সর্বাধিক সমর্থিত আকার 16x16।

f=(a,y=0)=>[y,...+(r=a[y])?f(a,(g=_=>+r[k=Math.random()*r.length|0]?k:g())()):[]]

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


1

জাভা 10, 135 বাইট

m->{var R="0 ";for(int r=0,c,t;;R+=(r=c)+" "){t=0;for(int x:m[r])t+=x;if(t<1)return R;for(t=c=m.length;m[r][c*=Math.random()]<1;)c=t;}}

0-ইন্ডেক্স

ব্যাখ্যা:

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

m->{                   // Method with integer-matrix parameter and String return-type
  var R="0 ";          //  Result-String, starting at "0 "
  for(int r=0,         //  Row-integer, starting at 0
          c,           //  Column-integer
          t;           //  Temp-integer
      ;                //  Loop indefinitely
       R+=             //    After every iteration: Append the result with:
          (r=c)+" "){  //     The current column and a delimiter-space,
                       //     And set the current row to this column at the same time
    t=0;               //   (Re-)set `t` to 0
    for(int x:m[r])    //   Loop over the values of the current row
      t+=x;            //    And add them to `t`
    if(t<1)            //   If the entire row only contained zeroes:
      return R;        //    Return the result
    for(t=c=m.length;  //   Set `t` (and `c`) to the size of the matrix
        m[r][c*=Math.random()]<1;)
                       //   Loop until we've found a 1,
                       //   picking a random column in the range [0,`c`)
      c=t;}}           //    Reset the range of `c` to `t` (the size of the matrix)


1

এপিএল (ডায়ালগ ইউনিকোড) , 32 34 বাইট

t←⎕
{}{s[?≢s←⍸⍵⊃t]}⍣{~0t⊃⍨⎕←⍵}1

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

ইনপুট হিসাবে নেস্টেড বাইনারি অ্যারে নেয়। প্রতিটি পুনরাবৃত্তি পৃথক লাইনে আউটপুট দেয়।


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