চক্র মধ্যে একটি ক্রম বিরতি


15

একটি সুপরিচিত উপপাদ্য রয়েছে যে কোনও ক্রম ছাড়াকে চক্রের সেটগুলিতে বিভক্ত করা যায় । আপনার কাজটি এটি করার জন্য স্বল্পতম সম্ভাব্য প্রোগ্রামটি লেখা write

ইনপুট:

দুটি লাইন। প্রথমটিতে একটি সংখ্যা রয়েছে N, দ্বিতীয়টিতে স্পেস দ্বারা বিভাজিত পৃথক পৃথক Nপূর্ণসংখ্যা রয়েছে [0,N-1]। এই পূর্ণসংখ্যা Nউপাদানগুলির একটি ক্রমবিন্যাসকে উপস্থাপন করে।

আউটপুট:

অনুক্রমের প্রতিটি চক্রের জন্য একটি লাইন। প্রতিটি লাইনটি চক্র ক্রমের পূর্ণসংখ্যার স্থান-বিভাজিত তালিকা হওয়া উচিত।

চক্রগুলি যে কোনও ক্রমে আউটপুট হতে পারে এবং প্রতিটি চক্র যে কোনও অবস্থাতেই আউটপুট হতে পারে।

উদাহরণ 1:

8
2 3 4 5 6 7 0 1

এই ইনপুটটি 0-> 2, 1-> 3, 2-> 4, 3-> 5, 4-> 6, 5-> 7, 6-> 0, 7-> 1 এর অনুক্রমকে এনকোড করে। এটি এই জাতীয় চক্রের মধ্যে পচে যায়:

0 2 4 6
1 3 5 7

একটি সমানভাবে বৈধ আউটপুট হবে

5 7 1 3
2 4 6 0

উদাহরণ 2:

8
0 1 3 4 5 6 7 2

বৈধ আউটপুট:

0
1
4 5 6 7 2 3

@ কিথ এন এর সর্বোচ্চ মূল্য কত?
fR0DDY

3
জেতে 3 টি চর:>C.
ইলেভেক্স

এন <1000 বলুন।
কিথ র্যান্ডাল

পারমুটেশনগুলি সাধারণত 1 থেকে গণনা করা হয়, 0 থেকে নয়
ডাঃ বেলিসারিয়াস

6
গণিতবিদগণ 1 থেকে গণনা করেন, কম্পিউটার বিজ্ঞানীরা 0 :) থেকে গণনা করেন
কেথ র্যান্ডাল

উত্তর:


4

সি 145 134 অক্ষর

N,A[999],i,j,f;main(){gets(&i);for(;~scanf("%d",A+N);)N++;for(;j<N;j++,f=f&&!puts(""))while(i=A[j]+1)f=printf("%d ",j),A[j]=-1,j=--i;}

http://www.ideone.com/BrWJT


সুস্পষ্টভাবে ঘোষিত বৈকল্পিক ফাংশনগুলি কল করা কি আইনী? প্রথমে বাদ দেওয়া কি বৈধ int?
6502

কোড যতক্ষণ কাজ করে আইনত আইনত আইনানুগ হয়। যদিও এটি সতর্কতা দিতে পারে, যতক্ষণ না এটি ত্রুটি দেয় না ততক্ষণ ঠিক আছে।
fR0DDY

একেবারে পয়েন্টটি "কাজগুলি" এর অর্থ। যাইহোক আমি একটি উত্তর যুক্ত করেছি (১৩৯ টি অক্ষর) যা এই নিয়মটি ব্যবহার করে (যেমন "" কাজ করে "তার অর্থ" সেখানে কমপক্ষে একটি স্ব-ঘোষিত সি সংকলক রয়েছে, সম্ভবত, উত্পন্ন যন্ত্রের কোডটি কাজ করে ")
6502

+1: আমি gets(&i)এই অযথা প্রথম লাইনের হাত থেকে মুক্তি পাওয়ার ধারণাটি পছন্দ করি , তবে 10 টিরও বেশি উপাদান পাস হলে এটি 16-বিট সিস্টেমে পরিষ্কারভাবে কাজ করবে না। তবে আবার যদি নিয়মগুলি "কমপক্ষে কোনও প্রোগ্রামে নির্ধারিত একটি সিগাইলার হিসাবে দাবি করে এমন একটি প্রোগ্রাম সন্ধান করে যা একটি এক্সিকিউটেবল তৈরি করে যেখানে কমপক্ষে একটি ক্ষেত্রে মনে হয় - কমপক্ষে আমার কাছে - বৈধ প্রতিক্রিয়া জানাতে" তবে এটি একটি উন্নতি: - )
6502

2

পাইথন 131 অক্ষর

input();d=dict((i,int(x))for i,x in enumerate(raw_input().split()))
while d:
 x=list(d)[0]
 while x in d:print x,;x=d.pop(x)
 print

শেষ নিউলাইন প্রয়োজন হয় না


1

হাস্কেল, ১৩১ টি অক্ষর

n%l|all(>n)l=(n:l>>=(++" ").show)++"\n"|1<3=""
c(_:a)=a>>=(\n->n%(takeWhile(/=n)$iterate(a!!)$a!!n))
main=interact$c.map read.words
  • সম্পাদনা করুন: (135 -> 131) >=হয়ে গেছে >, tailপ্যাটার্ন মেলানো এবং প্রাক-প্রয়োগের পরে দুটি কল মুছে ফেলা হয়েছে a!!

1

সি (সাজানো), 139 টি অক্ষর

n,j,t,a[999];main(){scanf("%*i");for(;scanf("%i",a+n)>0;)n++;while(n--)if(a[j=n]+1){for(;t=a[j]+1;a[j]=-1,j=t)printf("%i ",--t);puts("");}}

চূড়ান্ত নিউলাইন অন্তর্ভুক্ত করা হয় না।

আমি বলেছি "সাজানো" কারণ উদাহরণস্বরূপ এএফআইএকে

  1. বৈকল্পিক ফাংশনগুলির জন্য ঘোষণা বাদ দেওয়া বৈধ নয় (এএনএসআই সি 89: 3.3.2.2)
  2. intভেরিয়েবল ঘোষণার জন্য বাদ দেওয়া যায় না (এটি যেখানে খুঁজে পাওয়া যায়নি যেখানে এটি বাদ দেওয়া যেতে পারে এবং অন্তর্নিহিত ধরণের ঘোষণাপত্রটি কেবল ফাংশনগুলির জন্য বর্ণিত হয় the স্ট্যান্ডার্ডে ব্যাকরণের স্পেসিফিকেশন মূলত অকেজো কারণ বৈধ সি ঘোষণার চেয়ে অনেক বেশি গ্রহণ করে double double void volatile x;)
  3. একটি খালি খালি উত্স ফাইলটির শেষে একটি নতুন লাইন বাধ্যতামূলক (এএনএসআই C89: A.6.2)

তবে উপরের কোডটি সংকলিত gcc -ocycles cycles.cআপাতদৃষ্টিতে যাইহোক কাজ করে।


এটি একটি বৈধ সি প্রোগ্রাম, তবে এটি C99 নয়।
কুইসোটিক

@ দেবানজান: না এটি এএনএসআই সি নয় (89 টিও নয়)। উদাহরণস্বরূপ মান বলছেন (3.3.2.2) যে একটি ফাংশন (আর্গুমেন্ট তারপর এটি ফাংশন কল সাইট এ পরোক্ষভাবে বলা যায় না পরিবর্তনশীল সংখ্যা ব্যবহার করে অন্য কথায় আপনি কল করতে পারবেন না scanfথাকলে #include <stdio.h>ধর্মান্তর প্রয়োজন হয় না এমনকি যদি পরামিতি সঠিক কি ):<<If the function is defined with a type that includes a prototype, and the types of the arguments after promotion are not compatible with the types of the parameters, or if the prototype ends with an ellipsis ( ", ..." ), the behavior is undefined.>>
6502

1

জে (2 থেকে 32 এর মধ্যে)

আমি আই / ও ফর্ম্যাটে পুরোপুরি পরিষ্কার নই, তবে আমি মনে করি C.যে যদি নিম্নলিখিত ফলাফলটি গৃহীত হয়:

   C. 0 1 3 4 5 6 7 2
┌─┬─┬───────────┐
│0│1│7 2 3 4 5 6│
└─┴─┴───────────┘

(এটি জে টার্মিনালে আরও ভাল দেখাচ্ছে।)

যদি এটির একটি নামকৃত ফাংশন হওয়া দরকার যা আই / ও ফর্ম্যাটটি সম্পর্কে আমার সেরা বোঝার সাথে সামঞ্জস্য করে তবে তা 32 টি অক্ষর হতে পারে যার মধ্যে 30 টি আউটপুট ফর্ম্যাট রূপান্তরের জন্য ...

g=:>@(":L:0)@(C.@".@}.~>:@i.&LF)

কর্মে:

   g=:>@(":L:0)@(C.@".@}.~>:@i.&LF)
   g
>@(":L:0)@(C.@".@}.~ >:@i.&(10{a.))
   t
8
0 1 3 4 5 6 7 2
   g t
0          
1          
7 2 3 4 5 6

ব্যাখ্যা:

ডান থেকে বামে কার্যত কার্যকর করা হয় (কার্যতঃ) @ফাংশন একত্রিত করার জন্য একটি 'ফাংশন' (প্রযুক্তিগতভাবে কোনও ফাংশন নয়, তবে এটি যথেষ্ট নিকটে)।

  • i.&LF- এর প্রথম সূচকটি দেখুন LF, একটি পূর্বনির্ধারিত পরিবর্তনশীল যা ASCII অক্ষর নম্বর 10, লাইন ফিডযুক্ত।
  • >:- প্রথমটি অনুসন্ধান করুন LFএবং এটি একের পর এক সূচক বৃদ্ধি করুন। আমরা আসলে লাইনফিডটি চাই না, আমরা এটির অনুসরণ করে এমন অ্যারে চাই।
  • }.~ - আমরা যে ইনপুটটি চাই তার অংশটি নির্বাচন করে।
  • ".- যেহেতু ইনপুট ফর্ম্যাটটি বৈধ জে ( * \ õ / * ) তাই আমরা evalক্রিয়াটি ব্যবহার করতে পারি (আমি জানি এটি আসলে বলা হয় না eval)) এটিকে অ্যারেতে পরিণত করতে
  • C.- খাঁটি যাদু এটি কী করে তা আমার সত্যিই কোনও ধারণা নেই তবে এটি কাজ করে বলে মনে হচ্ছে!
  • ":L:0- প্রতিনিধিত্ব। আউটপুটটিকে C.স্ট্রিংয়ের একটি বক্সযুক্ত ক্রমে পরিণত করে
  • >- আনবক্স। আসল আউটপুট আসলে একটি স্ট্রিং অ্যারে (উদাহরণের প্রথম থেকে সংখ্যার পিছনে ফাঁকা স্থান রয়েছে)।

0

ক্লোজার, 145

(let[v(vec(repeatedly(read)read))](loop[a(set v)b 0](cond(a(v b))(do(print" "b)(recur(disj a(v b))(v b)))(seq a)(do(prn)(recur a(first a)))1"")))

কিছুটা দোষহীন, এবং কোনও ফাংশনে বিভক্ত হওয়া (ইনপুট অবশ্যই ভেক্টর হতে হবে, যা উপরেরটি থেকে (বারবার (পড়ুন)) পড়তে পারে:

(defn p [v]
  (loop [a (set v) b 0]
    (cond
     (a (v b)) (do (print" "b) (recur (disj a (v b)) (v b)))
     (seq a) (do (prn) (recur a (first a)))
     1 "")))

(বাহ, কেবলমাত্র লক্ষ্য করা গেছে যে এই চ্যালেঞ্জটি 3 বছরেরও বেশি পুরানো Oh

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