পয়েন্টার জাম্পিং


21

মনে করুন আমাদের অ্যারেতে কিছু অবস্থানের দিকে নির্দেশিত পয়েন্টার সহ দৈর্ঘ্য এর একটি অ্যারে রয়েছে : " পয়েন্টার জাম্পিং " প্রক্রিয়াটি প্রতিটি পয়েন্টারটিকে পয়েন্টারটি নির্দেশ করে সেই অবস্থানের দিকে সেট করবে।psn

এই চ্যালেঞ্জের উদ্দেশ্যে একটি পয়েন্টার হ'ল অ্যারের উপাদানের (শূন্য-ভিত্তিক) সূচক, এটি সূচিত করে যে অ্যারের প্রতিটি উপাদান সমান বা সমান এবং চেয়ে কম হবে । এই স্বরলিপিটি ব্যবহার করে প্রক্রিয়াটি নীচে হিসাবে তৈরি করা যেতে পারে:0n

for i = 0..(n-1) {
  ps[i] = ps[ps[i]]
}

এর অর্থ (এই চ্যালেঞ্জের জন্য) যে পয়েন্টারগুলি যথাক্রমে ক্রমে (যেমন, নিম্ন সূচকগুলি প্রথমে) আপডেট করা হয়।

উদাহরণ

আসুন একটি উদাহরণ দিয়ে কাজ করুন, :ps = [2,1,4,1,3,2]

i = 0:the element at position ps[0] = 2 points to 4ps = [4,1,4,1,3,2]i = 1:the element at position ps[1] = 1 points to 1ps = [4,1,4,1,3,2]i = 2:the element at position ps[2] = 4 points to 3ps = [4,1,3,1,3,2]i = 3:the element at position ps[3] = 1 points to 1ps = [4,1,3,1,3,2]i = 4:the element at position ps[4] = 3 points to 1ps = [4,1,3,1,1,2]i = 5:the element at position ps[5] = 2 points to 3ps = [4,1,3,1,1,3]

সুতরাং " পয়েন্টার জাম্পিং " এর এক পুনরাবৃত্তির পরে আমরা অ্যারে [4,1,3,1,1,3] পাই[4,1,3,1,1,3]

চ্যালেঞ্জ

সূচকগুলি আউটপুট সহ একটি অ্যারে দেওয়া উপরের বর্ণিত পয়েন্টার জাম্পিং পুনরাবৃত্তি করে অ্যারেটি প্রাপ্ত করা হবে যতক্ষণ না অ্যারে আর পরিবর্তন হয় না।

বিধি

আপনার প্রোগ্রাম / ফাংশন একই ধরণের, একটি তালিকা / ভেক্টর / অ্যারে ইত্যাদি গ্রহণ করবে এবং ফেরত দেবে

  • খালি খালি থাকার গ্যারান্টিযুক্ত এবং
  • কেবলমাত্র এন্ট্রি রাখার গ্যারান্টিযুক্ত ।0p<n

বৈকল্পিক: আপনি চয়ন করতে পারেন

  • 1-ভিত্তিক সূচক বা ব্যবহার করতে
  • প্রকৃত পয়েন্টার ব্যবহার করুন,

তবে আপনার জমা দেওয়ার ক্ষেত্রে এটি উল্লেখ করা উচিত।

পরীক্ষার মামলা

[0]  [0]
[1,0]  [0,0]
[1,2,3,4,0]  [2,2,2,2,2]
[0,1,1,1,0,3]  [0,1,1,1,0,1]
[4,1,3,0,3,2]  [3,1,3,3,3,3]
[5,1,2,0,4,5,6]  [5,1,2,5,4,5,6]
[9,9,9,2,5,4,4,5,8,1,0,0]  [1,1,1,1,4,4,4,4,8,1,1,1]


আমাদের nঅতিরিক্ত ইনপুট হিসাবে দৈর্ঘ্য নিতে অনুমতি দেওয়া হয় ?
কেভিন ক্রুইজসেন

2
কেভিন ক্রুইজসেন, এই মেটা আলোচনাটি দেখুন
শেগি

এটি খুব খারাপ এন্ট্রি ক্রমাগত আপডেট করা প্রয়োজন; যদি সেগুলি একই সাথে আপডেট করা যায় তবে ম্যাথমেটিকায় 21-অক্ষরের সমাধান পাওয়া যায় #[[#]]&~FixedPoint~#&
গ্রেগ মার্টিন

উত্তর:






5

সুইফ্ট , 68 53 বাইট

{a in for _ in a{var i=0;a.forEach{a[i]=a[$0];i+=1}}}

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

-15 বিএমও ধন্যবাদ


2
পিপিসিজিতে আপনাকে স্বাগতম! আমি সুইফটকে চিনি না, তবে কোডগল্ফ.এসইতে ডিফল্টটি হ'ল টাইপ করা ল্যাম্বডা-ফাংশন গ্রহণ করা হয় যা আমি অনুমান করি যে এটি একটি বন্ধ হিসাবে গণ্য হবে। সুতরাং এটি 53 বাইট হতে পারে (আপনার গণনা করার দরকার নেই f=)। এখানে আপনার থাকার উপভোগ করুন!
ბიმო

আমি আমার উত্তর আপডেট করার জন্য যে স্বাগত এবং পরামর্শ ব্যবহার করেছি তার জন্য আপনাকে ধন্যবাদ।
শান

এটি সংক্ষিপ্ত করার mapপরিবর্তে ব্যবহার সম্পর্কে কীভাবে forEach?
জায়েং

4

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

f=a=>a+''==a.map((x,i)=>a[i]=a[x])?a:f(a)

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


গাহ! আমি এই চ্যালেঞ্জটি পোস্ট হওয়ার অপেক্ষায় ছিলাম যাতে ঠিক একই সমাধানটি পোস্ট করতে পারি: your আপনার নিঞ্জার দক্ষতা হতাশ! : পি
শেগি

2
@ শাগি 🐱‍👤 (এটি একটি নিনজা বিড়াল বলে মনে করা হচ্ছে ... তবে এটি সম্ভবত সর্বত্র সমর্থিত নয়)
আর্নল্ড

4

05 এ বি 1 ই (উত্তরাধিকার) , 8 বাইট

ΔDvDyèNǝ

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

ব্যাখ্যা

Δ          # apply until the top of the stack stops changing
 D         # duplicate current list
  v        # for each (element y, index N) in the list
   Dyè     # get the element at index y
      Nǝ   # and insert it at index N

05 এ বি 1 ই , 14 বাইট

[D©vDyèNǝ}D®Q#

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


4

জাপট, 15 13 7 বাইট

মূল ইনপুট অ্যারে সংশোধন করে।

££hYXgU

এটি ব্যবহার করে দেখুন (অতিরিক্ত বাইটগুলি কনসোলে পরিবর্তিত ইনপুট লিখতে হবে)

££hYXgU
£           :Map
 £          :  Map each X at index Y
  hY        :    Replace the element at index Y
    XgU     :    With the element at index X

4

জাভা 8, 105 54 বাইট

a->{for(int l=a.length,i=0;i<l*l;)a[i%l]=a[a[i++%l]];}

বাইটগুলি সংরক্ষণ করতে কোনও নতুন ফেরতের পরিবর্তে ইনপুট-অ্যারে পরিবর্তন করে।

এনটি2

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

ব্যাখ্যা:

a->{                // Method with integer-array parameter and no return-type
  int l=a.length,   //  Length of the input-array
  i=0;i<l*l;)       //  Loop `i` in the range [0, length squared):
    a[i%l]=         //   Set the (`i` modulo-length)'th item in the array to:
      a[            //    The `p`'th value of the input-array,
        a[i++%l]];} //    where `p` is the (`i` modulo-length)'th value of the array

3

জাপট , 17 বাইট


®
£hYUgX
eV ?U:ß

সমস্ত পরীক্ষার কেস চেষ্টা করে দেখুন

এটি আরও ছোট হওয়া উচিত বলে মনে হয় তবে দুর্ভাগ্যক্রমে আমার প্রাথমিক চিন্তাটি UmgUকাজ করে না কারণ প্রতিটি পদক্ষেপে পরিবর্তনের পরিবর্তে প্রতিটি gআসলটিতে প্রবেশ করে U। বিভিন্ন উপাদান সংরক্ষণ করার জন্য যথাযথভাবে কয়েক হাত বাইট খরচ করতে হবে।

ব্যাখ্যা:

           #Blank line preserves input in U long enough for the next line

®          #Copy U into V to preserve its original value

£hY        #Modify U in-place by replacing each element X with...
   UgX     #The value from the current U at the index X

eV ?U      #If the modified U is identical to the copy V, output it
     :ß    #Otherwise start again with the modified U as the new input




2

আর , 60 58 বাইট

-২ বাইটগুলি নিয়মগুলি পড়ার জন্য @ ডিজিএমএলকে ধন্যবাদ।

function(x,n=sum(x|1)){for(i in rep(1:n,n))x[i]=x[x[i]];x}

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

1-ইন্ডেক্স।

n ইনপুট অ্যারের দৈর্ঘ্য।

rep(1:n,n)1:n nবার প্রতিলিপি (যেমন n=3 => 1,2,3,1,2,3,1,2,3)

অ্যারের nসময়ের মধ্যে লুপ । অবিচলিত রাষ্ট্রটি ততক্ষণে নিশ্চিত হয়ে যাবে, বাস্তবে আমি মনে করি এন -1 ম বারের শেষের দিকে। প্রমাণ পাঠক ছেড়ে দেওয়া হয়।


1
আমি মনে করি আপনি মুছে ফেলতে পারবেন +1এবং কেবল 1-ভিত্তিক ইনপুট নিতে পারেন, পোস্টটিতে বলা হয়েছে: আপনি 1-ভিত্তিক সূচক ব্যবহার করতে বেছে নিতে পারেন
digEmAll

scan()ইনপুট জন্য স্যুইচ করে -4 । আমি সবসময় আমার scan()সমাধানগুলিকে সাবুপটিমাল বলে মনে করি , তাই নির্ধারিত করার জন্য xএবং nএকসাথে আরও খাটো উপায় রাখুন : n=length(x<-scan());for(i in rep(1:n,n))x[i]=x[x[i]];x অনলাইনে চেষ্টা করুন!
অপরাধমূলকভাবে



2

ক্লোজার , 136 বাইট

(defn j[a](let[f(fn[a](loop[i 0 a a](if(= i(count a))a(recur(inc i)(assoc a i(a(a i)))))))](loop[p nil a a](if(= p a)a(recur a(f a))))))

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


হ্যালো এবং পিপিসিজিতে আপনাকে স্বাগতম। আপনার পক্ষে কোনও অনলাইন দোভাষীকে এমন কোনও লিঙ্ক সরবরাহ করা সম্ভব হবে যে কোনও সহজেই আপনার সমাধানটি যাচাই করতে পারে? তদুপরি, loop [হয়ে উঠতে পারে না loop[?
জোনাথন ফ্রেচ

1
সর্বাধিক সাম্প্রতিক সম্পাদনার পরীক্ষার ব্যর্থতাগুলি ঠিক করা উচিত । সবার অসুবিধার জন্য দুঃখিত
ইথান ম্যাককিউ



1

কাঠকয়লা , 16 বাইট

FθFLθ§≔θκ§θ§θκIθ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। দুঃখের বিষয় হল সমস্ত স্বাভাবিক ম্যাপিং ফাংশন কেবল অ্যারের অনুলিপিটিতেই কাজ করে যার ফলস্বরূপ যে তারা উপাদানগুলিকে ঝাঁপিয়ে না দিয়ে কেবল তাদের অনুমতি দেয়, তাই কোডটি ম্যানুয়ালি করতে হয়। ব্যাখ্যা:

Fθ

প্রতিটি উপাদান জন্য একবার অভ্যন্তরীণ লুপ পুনরাবৃত্তি। এটি কেবল নিশ্চিত করে যে ফলাফল স্থিতিশীল হয়।

FLθ

অ্যারে সূচকগুলির উপর লুপ করুন।

§≔θκ§θ§θκ

বর্তমান সূচকে অ্যারের উপাদান পান, অ্যারেতে সূচিতে এটি ব্যবহার করুন এবং বর্তমান মানটিকে সেই মান দিয়ে প্রতিস্থাপন করুন।

Iθ

উপাদানগুলিকে স্ট্রিংয়ে কাস্ট করুন এবং প্রত্যেকে তাদের নিজস্ব লাইনে মুদ্রিত করুন।


1

এফ #, 74 73 বাইট

fun(c:'a[])->let l=c.Length in(for i in 0..l*l do c.[i%l]<-c.[c.[i%l]]);c

বিশেষ কিছু না. অন্যান্য উত্তরে দেখা মডুলাস ধারণা ব্যবহার করে।


1

কে, 27 বাইট

{{@[x;y;:;x x y]}/[x;!#x]}/
  • {..}/ ল্যাম্বদা {..} আর্গের উপর প্রয়োগ হয় (একীকরণ পর্যন্ত)

  • বাইরের ল্যাম্বদা ভিতরে:

    • {..}/[x;y]এক্সের উপর ল্যাম্বদা পুনরাবৃত্তভাবে প্রয়োগ করা হয় (প্রতিটি পুনরাবৃত্তিতে আপডেট হওয়া) এবং y এর একটি আইটেম (y মানগুলির একটি তালিকা এবং প্রতিটি পুনরাবৃত্তিতে একটি আইটেম ব্যবহার করে)। এই ক্ষেত্রে আরগ y হল !#x(টিল কাউন্ট এক্স, অর্থাৎ অ্যারের সূচকগুলি)

    • @[x;y;:;x x y] অ্যারে এক্স সংশোধন করুন (সূচীতে y নির্ধারিত x [x [y]])


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