পারমুটেশন নম্বর


9

চ্যালেঞ্জ

প্রদত্ত এন পূর্ণসংখ্যার সেটগুলির জন্য, এমন একটি প্রোগ্রাম লিখুন যা এর অভিধানিক সূচককে আউটপুট করবে।

নিয়ম

  • ইনপুটটি অবশ্যই ফাঁকা দ্বারা পৃথক পৃথক অনন্য-নেতিবাচক পূর্ণসংখ্যার একটি সেট হতে হবে।
  • আপনার অনুমানের লেক্সিকোগ্রাফিক সূচক (0 থেকে n! -1 অন্তর্ভুক্ত) আউটপুট করা উচিত।
  • কোনও ক্রমবর্ধমান গ্রন্থাগার বা অন্তর্নির্মিত বিল্ট-ইন ব্যবহার করা যাবে না।
  • আপনাকে সূচি খুঁজে পেতে সহায়তা করার জন্য আউটপুটটির ক্রমের অনুমতি বা কোনও উপসেট সেট তৈরি করতে পারে না।
  • আপনি পরবর্তী / পূর্ববর্তী (অভিধানে) অনুমানের প্রদত্ত অনুমানটিকে বৃদ্ধি বা হ্রাস করতে পারবেন না।
  • বোনাস পয়েন্টস (-10 বাইট) যদি আপনি ফ্যাকটোরিয়ালগুলি ব্যবহার না করে এটি সম্পূর্ণ করার কোনও উপায় খুঁজে পান।
  • রানটাইম n = 100 এর জন্য 1 মিনিটের কম হওয়া উচিত
  • বাইট গণনা দ্বারা সংক্ষিপ্ততম কোড জয়
  • বিজয়ী মঙ্গলবার (জুলাই 22, 2014) নির্বাচিত

অনুমতি সম্পর্কে আরও

উদাহরণ

0 1 2 --> 0
0 2 1 --> 1
1 0 2 --> 2
1 2 0 --> 3
2 0 1 --> 4
2 1 0 --> 5
0 1 2 3 4 5 6 7 --> 0
0 1 2 3 4 5 7 6 --> 1
0 1 2 3 4 6 5 7 --> 2
1 3 5 17        --> 0
781 780 779 13  --> 23
81 62 19 12 11 8 2 0 --> 40319
195 124 719 1 51 6 3 --> 4181

1
বিজয়ী বাছাই করা অবধি আমাদের আরও সময় থাকতে পারে? তিন দিন খুব অল্প সময় হয়।
xnor

উত্তর:


4

গল্ফস্ক্রিপ্ট, 12 (22 টি অক্ষর - 10 বোনাস)

~]0\.,{.,@*\.(@$?@+\}*

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


আমি যখন "ফ্যাক্টরিওালগুলি ব্যবহার না করে" বলেছিলাম তখন হাহা আমি যা খুঁজছিলাম তা ঠিক নয় তবে আমি মনে করি এটি গণনা করা হয়েছে। কুডোস
কাইল ম্যাককর্মিক 18

4

সিজাম, 31, ফ্যাক্টরিওরিয়াল সহ

q~]{__(f<0+:+\,,(;1+:**\(;}h]:+

কেন আমি এখনও উপচে পড়ছি? গল্ফস্ক্রিপ্ট উত্তরটি সিজেলে কেবল মাত্র 23 টি অক্ষর দিয়ে আবার লেখা যেতে পারে।
জিমি 23013

6
কারণ আপনার উত্তরটি লোকেরা পছন্দ করে।
seequ

1

পাইথন 2 (77 = 87-10)

p=map(int,raw_input().split())
s=0
while p:s=s*len(p)+sorted(p).index(p.pop(0))
print s

যেমন পাঠযোগ্য। অনেকটা অন্তর্নির্মিত। কি দারুন.

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

তারপরে অ্যারে সূচকগুলি লুপ করে, আমরা বারবার তালিকার প্রথম উপাদানটি সরিয়ে ফেলি এবং বাকী উপাদানগুলি প্রক্রিয়া করি। এখনও বিক্রয়ের জন্যsorted(p).index(p.pop(0)) , সাজানো তালিকার তার অবস্থান গ্রহণ একই সাথে অপসারণ করে গত প্রথম সূচক inversions সংখ্যা গণনা করে।

দুঃখজনকভাবে, আমাকে পাইথন 2 ব্যবহার করতে হয়েছিল এবং আরও 4 টি চরিত্র নিতে হয়েছিল raw_input(যদিও -1 এর জন্য print) কারণ পাইথন 3 এ map(int,...)একটি মানচিত্রের অবজেক্ট তৈরি করে, যা তালিকার ক্রিয়াকলাপ সমর্থন করে না,


1

পাইথ (13 = 23-10)

JVPwdWJ=Z+*ZlJXovNJ;J)Z

আমার পাইথন উত্তরের একটি বন্দর

পাইথনের একটি অনুবাদ (কিছু অপ্রাসঙ্গিক জিনিস ফিল্টার আউট সহ):

Z=0
J=rev(split(input()," "))
while J:
 Z=plus(times(Z,len(J)),index(order(lambda N:eval(N),J),J.pop()))
print(Z)

ইনপুট নম্বরগুলি স্ট্রিং থাকে তবে কী হিসাবে ইওল ব্যবহার করে ইনট হিসাবে সাজানো হয়। তালিকাটি বিপরীত হয় যাতে popপিছনের চেয়ে সামনের অংশটি নেয়।


1

কোবরা - 202

স্পষ্টতই কোবরা আসলে এই প্রতিযোগিতা করছে না।

class P
    var n=0
    var t=CobraCore.commandLineArgs[1:]
    def main
        .f(.t[0:0])
    def f(l as List<of String>)
        if.t.count==l.count,print if(.t<>l,'',.n+=1)
        else,for i in.t.sorted,if i not in l,.f(l+[i])

0

জে, 5 বাইট (15 - 10)

#\.#.+/@(<{.)\.

এটি ( এন 2 ) সময়ে চলে এবং এন = 100 সহজেই পরিচালনা করতে সক্ষম ।

ব্যবহার

   f =: #\.#.+/@(<{.)\.
   f 0 1 2
0
   f 0 2 1
1
   f 1 0 2
2
   f 1 2 0
3
   f 2 0 1
4
   f 2 1 0
5
   f 0 1 2 3 4 5 6 7
0
   f 0 1 2 3 4 5 7 6
1
   f 0 1 2 3 4 6 5 7
2
   f 1 3 5 17
0
   f 781 780 779 13
23
   f 81 62 19 12 11 8 2 0
40319
   f 195 124 719 1 51 6 3
4181
   NB. A. is the builtin for permutation indexing
   timex 'r =: f 927 A. i. 100'
0.000161
   r
927

ব্যাখ্যা

#\.#.+/@(<{.)\.  Input: array P
             \.  For each suffix of P
          {.       Take the head
         <         Test if it is greater than each of that suffix
     +/@           Sum, count the number of times it is greater
#\.              Get the length of each suffix of P
   #.            Convert to decimal using a mixed radix
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.