নির্ভরতার ভিত্তিতে আইটেমগুলি বাছাই করুন


12

লক্ষ্য

প্রতিটি আইটেম তার নির্দিষ্ট নির্ভরতার পরে তালিকাভুক্ত হয়েছে তা নিশ্চিত করে আইটেমের একটি তালিকা সাজান।

ইনপুট

পূর্ণসংখ্যার অ্যারেগুলির একটি অ্যারে, যেখানে প্রতিটি পূর্ণসংখ্যার অন্য আইটেমটির 0-ভিত্তিক বা 1-ভিত্তিক সূচক নির্দিষ্ট করে যা এই আইটেমটির পরে আসতে হবে। ইনপুটটি অ্যারে বা স্ট্রিং বা অন্য যে কোনও কিছুই মানব পাঠযোগ্য।

উদাহরণস্বরূপ, 0-ভিত্তিক ইনপুট:

[
  [ 2 ],    // item 0 comes after item 2
  [ 0, 3 ], // item 1 comes after item 0 and 3
  [ ],      // item 2 comes anywhere
  [ 2 ]     // item 3 comes after item 2
]

ধরুন কোনও বিজ্ঞপ্তি নির্ভরতা নেই, সর্বদা কমপক্ষে একটি বৈধ অর্ডার থাকে।

আউটপুট

নির্ভরতার ক্রমে সংখ্যাগুলি। একটি দ্ব্যর্থহীন আদেশ আদেশবিরোধী হতে হবে না ic আউটপুট একটি অ্যারে বা পাঠ্য বা অন্য কিছু যা মানব পাঠযোগ্য।

একাধিক বৈধ অর্ডার থাকা সত্ত্বেও আউটপুটে কেবল একটি আদেশ দেওয়া উচিত।

উপরের ইনপুটটির সম্ভাব্য আউটপুটগুলির মধ্যে রয়েছে:

[ 2, 3, 0, 1 ]
[ 2, 0, 3, 1 ]

স্কোরিং

কোনও ফাংশন বা প্রোগ্রাম যা এটি সর্বনিম্ন সংখ্যক বাইটে পূরণ করে গ্রহণযোগ্যতার গৌরব অর্জন করে। সময়সীমা 6 দিনের মধ্যে।



ইনপুটটি অ্যারে বা স্ট্রিং বা অন্য যে কোনও পাঠ্যযোগ্য মানব পাঠযোগ্য হতে পারে কেবল তা নিশ্চিত করার জন্য: এটি কি শূন্য এবংগুলি সহ 2 ডি অ্যারে হতে পারে, যেখানে একটি নির্ভরতা এবং শূন্য কোনও নির্ভরতা নির্দেশ করে না?
লুইস মেন্ডো

@ ডোনমুসলি, দেরিতে জবাবের জন্য দুঃখিত, তবে না। কোড নির্ভরতা থেকে ধারণাটি এসেছিল। আপনি যদি অন্য কোনও কোড মডিউল যুক্ত করেন, তবে তারা এই নতুন মডিউলের উপর নির্ভরশীল নয় তা ঘোষণা করার জন্য অপ্রাসঙ্গিক কোড মডিউলগুলি সংশোধন করা দায়বদ্ধ হবে না।
হ্যান্ড-ই-ফুড 13

এটি পুরোপুরি অর্থবোধ করে। ডেনিসের বিজয়ী হওয়া উচিত নয়?
লুইস মেন্ডো

হ্যাঁ, সেই. দুঃখিত, দেরিতে চাপের রাত হয়েছে এবং অনুমানের উপর ভিত্তি করে ছুটে চলেছে।
হ্যান্ড-ই-ফুড 21

উত্তর:


3

জেলি, 8 বাইট

ịÐL³ŒḊ€Ụ

এটি @ xnor এর পাইথন উত্তর থেকে গভীর ( অবৈধ ) গভীরতার পদ্ধতির উপর ভিত্তি করে ।

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

কিভাবে এটা কাজ করে

ịÐL³ŒḊ€Ụ  Main link. Input: A (list of dependencies)

 ÐL       Apply the atom to the left until a loop is reached, updating the left
          argument with the last result, and the right argument with the previous
          left argument.
ị         For each number in the left argument, replace it with the item at that
          index in the right argument.
   ³      Call the loop with left arg. A (implicit) and right arg. A (³).
    ŒḊ€   Compute the depth of each resulting, nested list.
       Ụ  Sort the indices of the list according to their values.

এই 8 টি অক্ষর আসলে 19 বাইট হবে?
হ্যান্ড-ই-ফুড

@ হ্যান্ড-ই-ফুড জেলি কাস্টম এনকোডিং ব্যবহার করে (ইউটিএফ 8 নয়), তাই প্রতিটি অক্ষর একটি বাইট
লুইস মেন্ডো ২

@ হ্যান্ড-ই-ফুড ডন মুসেলি সঠিক। জেলি এই কোড পৃষ্ঠাটি ডিফল্টরূপে ব্যবহার করে, যা এটি প্রতিটি বাইট হিসাবে বোঝে এমন সমস্ত অক্ষরকে এনকোড করে।
ডেনিস

7

পাইথ, 21 বাইট

hf.A.e!f>xYTxkTbQ.plQ
                    Q  input
                   l   length of input array
                 .p    all permutations of [0, 1, ..., lQ-2, lQ-1]
hf                     find the first permutation for which...
    .e          Q        map over the input array with indices...
       f       b           find all elements in each input subarray where...
        >xYT                 index of dependency is greater than...
            xkT              index of item
      !                    check whether resulting array is falsy (empty)
  .A                     is the not-found check true for [.A]ll elements?

টেস্ট:

llama@llama:~$ echo '[[2],[0,3],[],[2]]' | pyth -c 'hf.A.e!f>xYTxkTbQ.plQ' 
[2, 0, 3, 1]

7

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

l=input()
f=lambda n:1+sum(map(f,l[n]))
print sorted(range(len(l)),key=f)

তাদের উত্তরসূরি গণনা অনুসারে শীর্ষে বাছাই করে, যা fপুনরাবৃত্তির সাথে গণনা করে। যদি একটি শীর্ষবিন্দু অন্য একটি শীর্ষবিন্দুতে নির্দেশ করে, এর বংশধরগুলিতে বিন্দু মেরুদণ্ড এবং সেই শীর্ষবিন্দুর সমস্ত বংশধরকে অন্তর্ভুক্ত করা হয়েছে, সুতরাং এর কঠোরভাবে আরও বংশধর রয়েছে। সুতরাং, এটি পছন্দসই অনুসারে ক্রমবিন্দুযুক্ত বিন্দুগুলির চেয়ে পরে স্থাপন করা হয়েছে।

একটি শীর্ষবিন্দুর বংশধর গণনা নিজের জন্য এক, এবং এর প্রতিটি সন্তানের বংশধর গণনা। নোট করুন যে কোনও বংশধর যদি এর দিকে পরিচালিত একাধিক পথ থাকে তবে একাধিকবার গণনা করা যায়।

এটি বংশোদ্ভূত গণনার চেয়ে গভীরতা ব্যবহারেও কাজ করবে

f=lambda n:1+max(map(f,l[n]))

খালি তালিকায় maxদেওয়ার প্রয়োজন ছাড়া 0


2
সুন্দর অ্যালগরিদম। এটি পাইথ এবং জেলি উভয়ই 12 বাইট স্কোর করবে।
ডেনিস

4

পাইথ, 19 বাইট

hf!s-V@LQT+k._T.plQ

অনলাইনে চেষ্টা করুন: বিক্ষোভ

ব্যাখ্যা:

hf!s-V@LQT+k._T.plQ   implicit: Q = input list
               .plQ   all permutations of [0, 1, ..., len(Q)-1]
 f                    filter for permutations T, which satisfy:
      @LQT               apply the permutation T to Q
                         (this are the dependencies)
            ._T          prefixes of T
          +k             insert a dummy object at the beginning
                         (these are the already used elements)
    -V                   vectorized subtraction of these lists
   s                     take all dependencies that survived
  !                      and check if none of them survived
h                    print the first filtered permutation

4

বাশ, 35 বাইট

perl -pe's/^$/ /;s/\s/ $. /g'|tsort

উদাহরণ রান

আই / ও হ'ল 1-সূচকযুক্ত। প্রতিটি অ্যারে আইটেম বিভাজক হিসাবে সাদা স্থান সহ পৃথক রেখায় যায়।

$ echo $'4\n1\n\n3\n1 3 2' # [[4], [1], [], [3], [1, 3, 2]]
4
1

3
1 3 2
$ bash tsort <<< $'4\n1\n\n3\n1 3 2'
3
4
1
2
5

কিভাবে এটা কাজ করে

tsort- যা আমি @ ডিজিটালট্রামার জবাব সম্পর্কে জানতে পেরেছি - হোয়াইটস্পেসে পৃথক পৃথক টোকেনের জোড়া পড়ি , যা আংশিক ক্রম নির্দেশ করে এবং মোট অর্ডারিং (সমস্ত অনন্য টোকেনের সাজানো তালিকার আকারে) যা পূর্বোক্ত আংশিক ক্রমকে প্রসারিত করে।

একটি নির্দিষ্ট লাইনের সমস্ত সংখ্যা একটি স্থান বা একটি লাইনফিড দ্বারা অনুসরণ করা হয়। s/\s/ $. /gপার্ল কমান্ডের অংশ একটি স্থান, লাইন সংখ্যা, এবং অন্য স্থান যাদের হোয়াইটস্পেস অক্ষর প্রতিস্থাপন, এইভাবে নিশ্চিত প্রতিটি এন লাইনে তার আগে বসেছে

অবশেষে, যদি লাইনটি খালি থাকে (যেমন, কেবল একটি লাইনফিড থাকে), s/^$/ /এটিতে একটি স্থান প্রিন্ট করে। এইভাবে, দ্বিতীয় প্রতিস্থাপনটি খালি লাইন কে কে পরিণত করে k k, এটি নিশ্চিত করে যে প্রতিটি স্ট্রিংটি পাইপযুক্ত স্ট্রিংয়ে কমপক্ষে একবার ঘটে tsort


ঠিক আছে, ঠিক আছে। আমি মনে করি আপনি tsortআমার চেয়ে আরও ভাল / দ্রুত ছাঁটাই করেছেন :) অতিরিক্ত ব্যাখ্যার জন্য ধন্যবাদ।
ডিজিটাল ট্রমা

3

বাশ + কোর্টিলস, 20 80

nl -v0 -ba|sed -r ':;s/(\S+\s+)(\S+) /\1\2\n\1 /;t;s/^\s*\S+\s*$/& &/'|tsort|tac

স্থান-বিভাজিত রেখা হিসাবে ইনপুট, যেমন:

2
0 3

2
  • nl সমস্ত লাইনে শূন্য-ভিত্তিক সূচকগুলি যুক্ত করে
  • sed ডিপেন্ডেন্সি তালিকাগুলিকে সাধারণ নির্ভরতা জোড়াগুলিতে বিভক্ত করে এবং অসম্পূর্ণ নির্ভরতা তাদের নিজের উপর নির্ভর করে।
  • tsort প্রয়োজনীয় টপোলজিকাল সাজান না
  • tac আউটপুট বিপরীত অর্ডার রাখে

Ideone। @ ডেনিসের টেস্টকেস সহ আদর্শ one


2

পাইথন 2, 143 118 116 বাইট

কিছুটা বেশি এলোমেলো অ্যাপ্রোচ।

from random import*
l=input()
R=range(len(l))
a=R[:]
while any(set(l[a[i]])-set(a[:i])for i in R):shuffle(a)
print a

সম্পাদনা:

  • এটি স্থির করে, এবং আসলে কিছু বাইটও সংরক্ষণ করে।
  • 2 টি বাইট সংরক্ষণ করা হয়েছে (ধন্যবাদ @ ডেনিস)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.