দ্বিগুণভাবে সংযুক্ত ডেটা বিচ্ছিন্ন করুন


12

দ্বিগুণ সংযুক্ত তালিকাটি এমন একটি ডেটা স্ট্রাকচার যা প্রতিটি নোডের valueপাশাপাশি তালিকার উভয় previousএবং পরবর্তী উভয়টিতে "লিঙ্কগুলি" থাকে nodes। উদাহরণস্বরূপ, 12, 99 এবং 37 মান সহ নিম্নলিখিত নোডগুলি বিবেচনা করুন:

এখানে, 12 এবং 99 এর মানযুক্ত nextনোডগুলি 99 এবং 37 এর মান সহ তাদের নিজ নিজ নোডগুলিতে নির্দেশ করে । 37 মান সহ নোডের কোনও nextপয়েন্টার নেই কারণ এটি তালিকার শেষ নোড। একইভাবে, 99 এবং 37 মানের মানের নোডগুলি তাদের নিজ নিজ previousনোডগুলিতে নির্দেশ করে, 12 এবং 99 , তবে 12 এর কোনও previousপয়েন্টার নেই কারণ এটি তালিকার প্রথম নোড।

সেটআপ

অনুশীলনে, কোনও নোডের "লিঙ্কগুলি" স্মৃতিতে পূর্ববর্তী এবং পরবর্তী নোডের অবস্থানগুলি নির্দেশক হিসাবে প্রয়োগ করা হয়। আমাদের উদ্দেশ্যে, "মেমরি" নোডের একটি অ্যারে হবে এবং অ্যারে নোডের অবস্থানটি এর সূচক হবে। কোনও নোডকে ফর্মের 3-টিপল হিসাবে ভাবা যেতে পারে ( prev value next )। উপরের উদাহরণটি, তাহলে, এর মতো দেখতে পারা যায়:

তবে এটি পরিবর্তে এর মতো দেখাবে:

যে কোনও নোড থেকে শুরু করে, আপনি নোডগুলির সমস্ত মানগুলি যথাযথভাবে পাওয়ার জন্য পরবর্তী নোডগুলি সন্ধান করার জন্য লিংকগুলি ( previousলাল তীরগুলির উত্স হিসাবে দেখানো হয়েছে) এর পূর্ববর্তী নোডগুলিতে এবং nextলিংকগুলি (সবুজ তীরগুলি) অনুসরণ করতে পারেন: [12, 99, 37]

উপরের প্রথম চিত্রটি একটি অ্যারে হিসাবে প্রতিনিধিত্ব করতে পারে [[null, 12, 1], [0, 99, 2], [1, 37, null]]। দ্বিতীয়, তারপর, হবে [[2, 99, 1], [0, 37, null], [null, 12, 0]]

চ্যালেঞ্জ

একটি প্রোগ্রাম লিখুন যা নোডের একটি অ্যারে এবং নোডের সূচি হিসাবে ইনপুট হিসাবে নেয় এবং তালিকার ক্রমে একই দ্বিগুণ লিঙ্কযুক্ত তালিকার নোডের মান।

একটি জটিলতা

"স্মৃতি" সর্বদা কেবল একটি তালিকার নোড ধারণ করে না। এটিতে বেশ কয়েকটি তালিকা থাকতে পারে:

উপরের অ্যারেটিতে তিনটি দ্বিগুণ লিঙ্কযুক্ত তালিকাগুলি রয়েছে, আপনার সুবিধার জন্য রঙিন কোডেড:

  1. ইনডেক্স এ নোড 7, 10, 1, 4, 3, 12(শুধুমাত্র দেখাচ্ছে nextগোলমাল কমাতে সংযোগগুলি; বিবর্ধন ক্লিক করুন):

    এই অ্যারে এবং এই সূচকের যে কোনও একটি দেওয়া, আপনার প্রোগ্রামটি মান হিসাবে, ফিরে আসা উচিত [0, 1, 1, 2, 3, 5, 8]

  2. সূচকের নোড 9:

    সূচকে দেওয়া 9, আপনার প্রোগ্রামটি ফিরে আসা উচিত [99]

  3. ইনডেক্স এ নোড 11, 8, 0, 6, 2:

    এর মধ্যে একটি সূচকে দেওয়া, এটি ফিরে আসা উচিত [2, 3, 5, 7, 11]

বিধি

ইনপুট

আপনার প্রোগ্রাম ইনপুট হিসাবে পাবেন:

  1. Above নোডের একটি তালিকা (উপরে বর্ণিত হিসাবে 3-টিউপলস), যেখানে 1 ≤ 𝒏, 1000, কোনও সুবিধাজনক বিন্যাসে, যেমন অ্যারেগুলির একটি অ্যারে, দৈর্ঘ্য 3𝒏 সহ পূর্ণসংখ্যার "সমতল" অ্যারে ইত্যাদি

    3-tuples 'এর উপাদানগুলির কোনো আদেশ থাকতে পারে: ( prev value next ), ( next prev value ), ইত্যাদি প্রতিটি নোডের জন্য, prevএবং nextহতে হবে null(অথবা অন্য সুবিধাজনক মান, যেমন -1), একটি দোকর লিঙ্ক তালিকায় প্রথম অথবা শেষ নোড, অথবা একটি বৈধ সূচক ইঙ্গিত তালিকা, হয় 0- বা 1-ভিত্তিক হিসাবে সুবিধাজনক। valueএকটি স্বাক্ষরিত 32-বিট পূর্ণসংখ্যা বা আপনার ভাষা সমর্থন করে এমন বৃহত্তম সংখ্যার টাইপ হবে, যেটি ছোট হোক।

  2. তালিকার একটি নোডের সূচক ((1)। নির্দেশিত নোড দ্বিগুণ সংযুক্ত তালিকার প্রথম নোড, শেষ নোড, একটি মাঝারি নোড বা এমনকি একমাত্র নোড হতে পারে।

ইনপুট তালিকায় (1) প্যাথলজিকাল ডেটা থাকতে পারে (যেমন চক্র, একাধিক অন্যান্য নোড দ্বারা চিহ্নিত নোড ইত্যাদি) তবে ইনপুট সূচী (2) সর্বদা নোডের দিকে নির্দেশ করবে যেখানে থেকে একক, সুগঠিত আউটপুট হতে পারে অনুমিত।

আউটপুট

আপনার প্রোগ্রামের দ্বিগুণ লিঙ্কযুক্ত তালিকার নোডের মান আউটপুট করা উচিত যার তালিকার ক্রমে সূচক নোড একটি সদস্য। আউটপুট যে কোনও সুবিধাজনক বিন্যাসে হতে পারে তবে এর ডেটাতে কেবল নোড অন্তর্ভুক্ত থাকতে হবেvalue

জয়লাভ

এটি । বাইট জিতে সংক্ষিপ্ত উত্তর। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।

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

নীচে, প্রতিটি পরীক্ষার কেস ফর্মের হয়:

X)
prev value next, prev value next, ...
index
value value value ...

... Xপরীক্ষার কেস সনাক্ত করার জন্য একটি চিঠি কোথায় , দ্বিতীয় লাইনটি ইনপুট তালিকা, তৃতীয় লাইনটি 0-ভিত্তিক ইনপুট সূচক এবং চতুর্থ লাইনটি আউটপুট।

A) null 12 1, 0 99 2, 1 37 null
   1
   12 99 37

B) 2 99 1, 0 37 null, null 12 0
   1
   12 99 37

C) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
   4
   0 1 1 2 3 5 8

D) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
   0
   2 3 5 7 11

E) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
   9
   99

F) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
   18
   80 80 67 71

G) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
   8
   1 -1 1 -1 1 -1 1

H) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
   4
   1 3 6 10 15 21

I) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
   14
   3 1 4 1 5 9 2 6 5 3

J) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
   17
   8 6 7 5 3 0 9

K) 4 11 0, null 22 3, null 33 3, 1 44 4, 3 55 null, 7 66 7, 6 77 6
   3
   22 44 55

L) null -123 null
   0
   -123

স্যান্ডবক্স লিংক: কোড golf.meta.stackexchange.com/a/14451/11261
জর্ডান


তিনটি অ্যারে হিসাবে ইনপুটটি (সমস্ত পূর্বসূরী নোডগুলি ক্রমে, একটি মান এবং একটি উত্তরসূরি নোড সমন্বিত) হিসাবে অনুমোদিত বা এটি টিউপসগুলির ধারণা থেকে খুব দূরে?
Sanchises

@ সাঞ্চাইজস দুঃখিত, আমার পক্ষে খুব দূরে।
জর্দান

ঠিক আছে! আমি ভেবেছিলাম, তবে আমি আমার উত্তরের যে কোনও মন্তব্যে এগিয়ে থাকতে চেয়েছি পৃথক অ্যারে করে দুটি বাইট ছাঁটাই করতে পারি।
Sanchises

উত্তর:


1

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

è[¬D0‹#Isè]\[`sˆD0‹#Isè]¯

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

ব্যাখ্যা

è[¬D0‹#Isè]\[`sˆD0‹#Isè]¯   # Arguments n, a
è                           # Get element at index n in a
 [¬D0‹#Isè]                 # Find the first element in the list
 [                          # While true, do
  ¬                         #   Head (get index of previous element)
   D0‹#                     #   Break if lower than 0
       Isè                  #   Get the element at that index
          ]                 # End loop
           \                # Delete top element of stack
            [`sˆD0‹#Isè]    # Iterate through list
            [               # While true, do
             `sˆ            #   Add value to global array and keep next index on stack
                D0‹#Isè     #   Same as above
                       ]    # End loop
                        ¯   # Push global array

3

হাস্কেল , 79 65 59 55 বাইট

-6 ধন্যবাদ বাইট পাশব বল

x#i|let-1!d=[];i!d=i:x!!i!!d!d=[x!!i!!1|i<-last(i!0)!2]

ক্রিয়া সংজ্ঞায়িত করে #যা পূর্ণসংখ্যার তালিকার একটি তালিকা গ্রহণ করে, যেখানে nullহিসাবে উপস্থাপিত হয় -1এবং নোড মানগুলির তালিকা ফেরত দেয়।

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

ব্যাখ্যা

let-1!d=[];i!d=i:x!!i!!d!d

!নোড থেকে শুরু করে নোডগুলির মাধ্যমে পুনরাবৃত্তি করে এমন ফাংশনটি সংজ্ঞায়িত করুন iএবং পরিদর্শন করা সূচীগুলির তালিকাগুলি ফেরান। এটি দ্বিতীয় যুক্তি গ্রহণ করে dযা "টিপল" এর কোন সূচকটি পরবর্তী নোডের সূচক হিসাবে ব্যবহার করে ( সম্মুখের দিকে পুনরাবৃত্তি করতে d==2, d==0পিছনে পুনরাবৃত্তি করতে) নির্দিষ্ট করে।

(i!0)

প্রদত্ত সূচক থেকে শুরু করে পিছনের দিকে ইটারেট করুন এবং পরিদর্শন করা সূচকগুলি ফিরে পান।

last(i!0)

সর্বশেষ পরিদর্শন করা সূচকটি নিন, যা তালিকার শুরু।

last(i!0)!2

তালিকার শুরু থেকেই ইটারেট করুন।

[x!!i!!1|i<-last(i!0)!2]

নোডের মান সহ প্রতিটি পরিদর্শন করা সূচী প্রতিস্থাপন করুন।


আপনি প্রায়x!!i!!1 হিসাবে লিখতে পারে i!1!!1, কিন্তু ফলাফল -1আউটপুট কারণে এটি বিরতি । যদি আপনি উপস্থাপনের জন্য কেবলমাত্র অন্য সেন্ডিনেল মানটি চয়ন করেন null(বলুন -9), এটি কাজ করবে তবে এটি কিছুটা ইনপুট জন্য সর্বদা বিরতি করবে যা বেশ বিরক্তিকর।
লিন

3

পাইথন 2 , 60 বাইট

l,n=input()
while~n:m=n;n=l[n][0]
while~m:p,v,m=l[m];print v

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

এটি চাস ব্রাউন এর উত্তর, এই গল্ফগুলি বিয়োগ:

  • আমি এন ব্যবহার করি, একটি অ্যাসাইনমেন্ট সংরক্ষণ করে
  • আমি সর্বশেষ বৈধ এনটি আমার কাছে রেখে অনুমতি দিচ্ছি in
  • অ্যাসাইনমেন্টের পরে মুদ্রণটি 3 লাইনে রাখুন, আমাকে চূড়ান্ত মুদ্রণ সংরক্ষণ করে
  • আমি - ~ n এর পরিবর্তে কেবল ~ n ব্যবহার করি কারণ নেতিবাচক মানগুলি ইতিবাচক মানের মতোই সত্যবাদী, আমাকে 2 টি অক্ষর সংরক্ষণ করে।


2

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

XHx`HwI3$)t]x6Mt`Hwl3$)tbhwt]x4L)Hw2I$)

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

আমার অক্টাভা উত্তরের প্রায় প্রত্যক্ষ প্রত্যক্ষ বন্দর, তবে এই সংস্করণটি প্রথমে শেষটি খুঁজে পায় এবং তারপরে এটি আবার কাজ করে, অন্য রাস্তায় নয়, যা একটি বাইট সংরক্ষণ করে।

XHx           % Store array in H.
`HwI3$)t]     % Work to the end of the array
x6Mt          % Delete the end of array delimiter, and push the array end index twice
`Hwl3$)    t] % Work to the beginning of the array
       tbhw   % Append all indices found.
Hw2I$)        % Index into original array.

1

পিএইচপি, 132 বাইট

<?list(,$x,$y)=$argv;parse_str($x);while(($q=$x[$y*3+1])>=0)$y=$q;do{$n[]=$x[$y*3+2];$y=$x[$y*3];}while($x[$y*3]);echo join(' ',$n);

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

ইনপুট একটি querystring হিসাবে নেওয়া হয় x[]=-1&x[]=1&x[]=1...ক্রমানুসারে (ক ফ্ল্যাট অ্যারের মধ্যে সব নোড) next, prevতারপর, valueনোড শেষ করার জন্য ব্যবহৃত -1 প্রতিটি নোডের জন্য।


1

পাইথন 2 , 81 77 বাইট

a,n=input()
u=a[n][0]
while-~u:u,v,w=a[u]
while-~w:print v;u,v,w=a[w]
print v

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

সম্পাদনা: মিঃ এক্সকোডারকে 4 বাইটের জন্য থেক্স থেকে ...

লিঙ্কযুক্ত তালিকার বিভাগটির শুরু / শেষের প্রতিনিধিত্ব করার জন্য [u, v, w] টিপলগুলির একটি তালিকা নিয়ে আসে যেখানে ইউ এবং ডাব্লু -1 হয়।


অনলাইনে 77 বাইট ব্যবহার করে দেখুন! । বুলিয়ানগুলি 0অন্তর্নিহিত সাবক্লাস হয় তাই কেবল ফালসি হয়, এবং তাই এতে u>=0গল্ফ করা যায় u+1এবং এটি আরও -~uসাদা করা যেতে পারে যাতে শ্বেত স্থানটি অপসারণ করা যায়।
মিঃ এক্সকোডার

@জনাব. এক্সকোডার - হ্যাঁ, বেশ!
চ্যাস ব্রাউন

1

অক্টাভা , 81 78 76 বাইট

function o=f(a,n)while q=a(n,1)o=a(n=q,2);end
while n=a(n,3)o=[o a(n,2)];end

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

বরং সোজা সংস্করণ। ব্যাখ্যা পাঠকের কাছে অনুশীলন হিসাবে রেখে গেছে। আরও অনেক মজাদার সংস্করণ নীচে উপস্থাপন করা হয়েছে:

অক্টাভা , 142 99 92 বাইট

@(a,n)[(p=@(b,c,z){q=a(z,2),@()[b(b,c,a(z,c)),q]}{2-~a(z,c)}())(p,1,n),p(p,3,n)(end-1:-1:1)]

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

হ্যাঁ, আমি শুনেছি আপনি বেনামে ফাংশন পছন্দ করেছেন ...

nx3প্রথম কলামটি পূর্বসূরীর সাথে, দ্বিতীয় কলামটির মান এবং তৃতীয় মান উত্তরসূরি নোড সহ একটি অ্যারে নেয় । সমস্ত নোড সূচকগুলি 1-ভিত্তিক, যা অক্টোভায় ডিফল্ট।

% Create an anonymous function, taking an array a and first node n
@(a,n)
% Returns an array containing the predecessor and sucessor nodes
      [                                                                     ,                     ]
% Defines an recursive anonymous function (by supplying itself to the local namespace)
% which looks at the first column (c=1) or last column (c=3) of the input array to get the next nodes
       (p=@(p,c,z)                                                   )(p,1,n)
% Create a cell array, either containing the end node,
                    {q=a(z,2),                       
% ...or an array with all next  next nodes and the current node
% (note the use of an anonymous function taking no parameters to defer array access, in case of the last node)                
                              @()[p(p,c,a(z,c)),q]}
% depending whether the next node number is nonzero (followed by () to execute the deferred array access)
                                                    {2-~a(z,c)}()
% Do the same with c=3, reverse (function p builds the array right-to-left) and drop the current node to prevent a duplicate.                                                                             
                                                                             p(p,3,n)(end-1:-1:1)

1

কোটলিন , 85 বাইট

{g,S->generateSequence(generateSequence(S){g[it][0]}.last()){g[it][2]}.map{g[it][1]}}

শোভিত

{g,S->
    generateSequence(generateSequence(S){g[it][0]}.last()){ g[it][2]}.map { g[it][1] }
}

পরীক্ষা

typealias Node=Triple<Int?,Int?,Int?>
data class Test(val input: List<Node>, val start:Int, val result: List<Int>)
val TEST = listOf<Test>(
Test(
listOf(Node(null, 12, 1), Node(0, 99, 2), Node(1, 37, null)),
1,
listOf(12, 99, 37)
),
Test(listOf(
Node(2, 99, 1), Node(0, 37, null), Node(null, 12, 0)),
1,
listOf(12, 99, 37)
),
Test(
listOf(Node(8, 5, 6), Node(10, 1, 4), Node(6, 11, null), Node(4, 3, 12), Node(1, 2, 3), Node(12, 8, null), Node(0, 7, 2), Node(null, 0, 10), Node(11, 3, 0), Node(null, 99, null), Node(7, 1, 1), Node(null, 2, 8), Node(3, 5, 5)),
4,
listOf(0, 1, 1, 2, 3, 5, 8)
),
Test(
listOf(Node(8, 5, 6), Node(10, 1, 4), Node(6, 11, null), Node(4, 3, 12), Node(1, 2, 3), Node(12, 8, null), Node(0, 7, 2), Node(null, 0, 10), Node(11, 3, 0), Node(null, 99, null), Node(7, 1, 1), Node(null, 2, 8), Node(3, 5, 5)),
0,
listOf(2, 3, 5, 7, 11)
),
Test(
listOf(Node(8, 5, 6), Node(10, 1, 4), Node(6, 11, null), Node(4, 3, 12), Node(1, 2, 3), Node(12, 8, null), Node(0, 7, 2), Node(null, 0, 10), Node(11, 3, 0), Node(null, 99, null), Node(7, 1, 1), Node(null, 2, 8), Node(3, 5, 5)),
9,
listOf(99)
),
Test(
listOf(Node(13, 80, 18), Node(18, 71, null), Node(5, 10, 19), Node(12, 1, 8), Node(19, 21, null), Node(31, 6, 2), Node(17, 5, 26), Node(26, 0, 30), Node(3, -1, 25), Node(null, 1, 23), Node(27, 6, 17), Node(14, 1, 24), Node(28, -1, 3), Node(null, 80, 0), Node(20, 4, 11), Node(33, 6, 29), Node(24, 9, 33), Node(10, 7, 6), Node(0, 67, 1), Node(2, 15, 4), Node(32, 1, 14), Node(null, 1, 31), Node(29, 3, null), Node(9, -1, 28), Node(11, 5, 16), Node(8, 1, null), Node(6, 3, 7), Node(null, 8, 10), Node(23, 1, 12), Node(15, 5, 22), Node(7, 9, null), Node(21, 3, 5), Node(null, 3, 20), Node(16, 2, 15)),
18,
listOf(80, 80, 67, 71)
),
Test(
listOf(Node(13, 80, 18), Node(18, 71, null), Node(5, 10, 19), Node(12, 1, 8), Node(19, 21, null), Node(31, 6, 2), Node(17, 5, 26), Node(26, 0, 30), Node(3, -1, 25), Node(null, 1, 23), Node(27, 6, 17), Node(14, 1, 24), Node(28, -1, 3), Node(null, 80, 0), Node(20, 4, 11), Node(33, 6, 29), Node(24, 9, 33), Node(10, 7, 6), Node(0, 67, 1), Node(2, 15, 4), Node(32, 1, 14), Node(null, 1, 31), Node(29, 3, null), Node(9, -1, 28), Node(11, 5, 16), Node(8, 1, null), Node(6, 3, 7), Node(null, 8, 10), Node(23, 1, 12), Node(15, 5, 22), Node(7, 9, null), Node(21, 3, 5), Node(null, 3, 20), Node(16, 2, 15)),
8,
listOf(1, -1, 1, -1, 1, -1, 1)
),
Test(
listOf(Node(13, 80, 18), Node(18, 71, null), Node(5, 10, 19), Node(12, 1, 8), Node(19, 21, null), Node(31, 6, 2), Node(17, 5, 26), Node(26, 0, 30), Node(3, -1, 25), Node(null, 1, 23), Node(27, 6, 17), Node(14, 1, 24), Node(28, -1, 3), Node(null, 80, 0), Node(20, 4, 11), Node(33, 6, 29), Node(24, 9, 33), Node(10, 7, 6), Node(0, 67, 1), Node(2, 15, 4), Node(32, 1, 14), Node(null, 1, 31), Node(29, 3, null), Node(9, -1, 28), Node(11, 5, 16), Node(8, 1, null), Node(6, 3, 7), Node(null, 8, 10), Node(23, 1, 12), Node(15, 5, 22), Node(7, 9, null), Node(21, 3, 5), Node(null, 3, 20), Node(16, 2, 15)),
4,
listOf(1, 3, 6, 10, 15, 21)
),
Test(
listOf(Node(13, 80, 18), Node(18, 71, null), Node(5, 10, 19), Node(12, 1, 8), Node(19, 21, null), Node(31, 6, 2), Node(17, 5, 26), Node(26, 0, 30), Node(3, -1, 25), Node(null, 1, 23), Node(27, 6, 17), Node(14, 1, 24), Node(28, -1, 3), Node(null, 80, 0), Node(20, 4, 11), Node(33, 6, 29), Node(24, 9, 33), Node(10, 7, 6), Node(0, 67, 1), Node(2, 15, 4), Node(32, 1, 14), Node(null, 1, 31), Node(29, 3, null), Node(9, -1, 28), Node(11, 5, 16), Node(8, 1, null), Node(6, 3, 7), Node(null, 8, 10), Node(23, 1, 12), Node(15, 5, 22), Node(7, 9, null), Node(21, 3, 5), Node(null, 3, 20), Node(16, 2, 15)),
14,
listOf(3, 1, 4, 1, 5, 9, 2, 6, 5, 3)
),
Test(
listOf(Node(13, 80, 18), Node(18, 71, null), Node(5, 10, 19), Node(12, 1, 8), Node(19, 21, null), Node(31, 6, 2), Node(17, 5, 26), Node(26, 0, 30), Node(3, -1, 25), Node(null, 1, 23), Node(27, 6, 17), Node(14, 1, 24), Node(28, -1, 3), Node(null, 80, 0), Node(20, 4, 11), Node(33, 6, 29), Node(24, 9, 33), Node(10, 7, 6), Node(0, 67, 1), Node(2, 15, 4), Node(32, 1, 14), Node(null, 1, 31), Node(29, 3, null), Node(9, -1, 28), Node(11, 5, 16), Node(8, 1, null), Node(6, 3, 7), Node(null, 8, 10), Node(23, 1, 12), Node(15, 5, 22), Node(7, 9, null), Node(21, 3, 5), Node(null, 3, 20), Node(16, 2, 15)),
17,
listOf(8, 6, 7, 5, 3, 0, 9)
),
Test(
listOf(Node(4, 11, 0), Node(null, 22, 3), Node(null, 33, 3), Node(1, 44, 4), Node(3, 55, null), Node(7, 66, 7), Node(6, 77, 6)),
3,
listOf(22, 44, 55)
),
Test(
listOf(Node(null, -123, null)),
0,
listOf(-123)
)
)

var f:(List<List<Int?>>,Int)-> Sequence<Int?> =
{g,S->generateSequence(generateSequence(S){g[it][0]}.last()){g[it][2]}.map{g[it][1]}}

fun main(args: Array<String>) {
    for ((input, start, result) in TEST) {
        val out = f(input.map { it.toList() }, start).toList()
        if (out != result) {
            throw AssertionError("$input $start $result $out")
        }
    }
}

Tio

TryItOnline



0

জাভাস্ক্রিপ্ট ES6, 70 63 বাইট

(x,i,a)=>(h=_=>i&&h(a(x[i].v),i=x[i].n))(x.map(_=>i=x[i].p||i))

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

F([undefined,{p:0,v:12,n:2},{p:1,v:99,n:3},{p:2,v:37,n:0}],1,alert)

alertচাহিদা আপনার ফাংশনের প্রধান শরীরের হতে হবে এবং আপনার বাইট মোট দিকে গণনা করা হয়।
শেগি


+10 / -9 কোনও sensকমত্য নয়।
শেগি

আমি সঠিক + এবং - গুলি দেখতে পাচ্ছি না। এছাড়াও, এটি জাভাস্ক্রিপ্টের উদ্দেশ্যযুক্ত আউটপুট উপায় এবং কেবলমাত্র যখন আউটপুটটিতে কিছু বিলম্ব হয়
l4m2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.