পুনরাবৃত্তি হওয়া পর্যন্ত রূপান্তরের সংখ্যা


12

পূর্ণসংখ্যার ক্রম দেওয়া হয়েছে বা 0..N এই সিকোয়েন্সটি নীচে রূপান্তর করার আরও নির্দিষ্ট নির্দিষ্ট হতে হবে :

  • আউটপুট [এক্স] = বিপরীত (ইনপুট [ইনপুট [এক্স]])
  • পুনরাবৃত্তি

উদাহরণস্বরূপ: [2,1,0]হয়ে যায় [0,1,2]এবং বিপরীত হয় [2,1,0][0,2,1]হয়ে যায় [0,1,2]এবং বিপরীত হয় [2,1,0]

উদাহরণ 1

In:   0 1 2
S#1:  2 1 0
S#2:  2 1 0
Output: 1

উদাহরণ 2

In:   2 1 0
S#1:  2 1 0
Output: 0

উদাহরণ 3

In:   3 0 1 2
S#1:  1 0 3 2
S#2:  3 2 1 0
S#3:  3 2 1 0
Output: 2

উদাহরণ 4

In:   3 0 2 1
S#1:  0 2 3 1
S#2:  2 1 3 0
S#3:  2 0 1 3
S#4:  3 0 2 1
Output: 3

আপনার কাজটি এমন কোনও ফাংশন (বা প্রোগ্রাম) সংজ্ঞায়িত করা 0..Nহয় যা ইতিমধ্যে ঘটে যাওয়া কোনও ক্রমবিকাশ ঘটে না হওয়া অবধি পূর্ণসংখ্যা এবং রিটার্নের সংখ্যা (বা আউটপুট) নেয় steps তাহলে Xরূপান্তরগুলির করতে Xতারপর আউটপুট শূন্য, হওয়া উচিত এমন Xকরতে রূপান্তরগুলির Yএবং Yকরতে X(বা Y) তাহলে আউটপুট 1 হতে হবে।

Y -> Y: 0 steps
Y -> X -> X: 1 step
Y -> X -> Y: 1 step
A -> B -> C -> D -> C: 3 steps
A -> B -> C -> D -> A: 3 steps
A -> B -> C -> A: 2 steps
A -> B -> C -> C: 2 steps
A -> B -> C -> B: also 2 steps

Testcases:

4 3 0 1 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps 
4 3 2 1 0 -> 4 3 2 1 0: 0 steps
4 3 1 2 0 -> 4 1 3 2 0 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
1 2 3 0 4 -> 4 1 0 3 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 3 steps
5 1 2 3 0 4 -> 0 5 3 2 1 4 -> 1 5 3 2 4 0 -> 1 4 3 2 0 5 -> 
  5 1 3 2 0 4 -> 0 5 3 2 1 4: 4 steps

যদি আপনার ভাষা "ফাংশনগুলি" সমর্থন করে না তবে আপনি ধরে নিতে পারেন যে অনুক্রমটি একটি একক লাইনের মতো 0 1 2বা পূর্ণসংখ্যার গোপন স্পেস বিচ্ছিন্ন তালিকা হিসাবে দেওয়া হয়েছে 3 1 0 2

মজার ঘটনা:

  • ক্রম 0,1,2,3, .., এন সর্বদা N, ..., 3,2,1,0 তে রূপান্তরিত হবে
  • ক্রম N, .., 3,2,1,0 সর্বদা N, .., 3,2,1,0 তে রূপান্তরিত হবে
  • অনুক্রম 0,1,3,2, ..., এন + 1, এন সর্বদা N তে রূপান্তরিত হবে ..., 3,2,1,0

বোনাস টাস্ক : একটি গাণিতিক সূত্র বের করুন।

Rulesচ্ছিক নিয়ম :

  • যদি আপনার ভাষার প্রথম সূচক 0 এর পরিবর্তে 1 হয় তবে আপনি আদেশ ব্যবহার করতে পারেন 1..N(উদাহরণ এবং টেস্টকেসগুলিতে আপনি প্রতিটি পূর্ণসংখ্যার সাথে একটি যোগ করতে পারেন)।

আমি "বদ্ধ সূত্রে" যেমন $ f (a_ {0}, a_ {1}, a _ {...}} = a_ {0} _ a_ {1} + ... $ যেখানে $ a_ like i
sequ

আপনি কি নিশ্চিত যে এই জাতীয় "বদ্ধ সূত্র" বিদ্যমান?
টড সেলাই

" ইতিমধ্যে ঘটে যাওয়া ক্রমুটিশন না হওয়া পর্যন্ত পদক্ষেপের সংখ্যা (বা আউটপুটস) প্রদান করে " "এটি অনুসরণ করা সমস্ত কিছু নিয়েই এটি বেমানান। শুরু করার জন্য, এটি 0 টির একটি রিটার্ন মানকে অসম্ভব করে তোলে ...
পিটার টেলর

তৃতীয় উদাহরণটি কি সঠিক? আমি দেখতে পাচ্ছি3,0,1,22,3,0,1
ফায়ারকিউজ

এটি পুনরাবৃত্তি করার আগে রূপান্তর সংখ্যা।
ম্রোমান

উত্তর:


4

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

a=>~(g=a=>g[a]||~-g(g[a]=a.map(i=>a[i]).reverse()))(a)

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


কোন []ফাংশনে কী করে ?
mroman

একটি ফাংশন একটি বস্তু হয়। সুতরাং, g[a]সম্পত্তি অ্যাক্সেস করতে এটিতে ব্যবহার করা যেতে পারে a
আর্নল্ড

আহ আমি দেখি. আপনি gরাজ্যটি সঞ্চয় করতে ব্যবহার করছেন
ম্রোমান


3

পাইথ, 10 9 8 বাইট

tl.u@LN_

ব্যাখ্যা:

t               One less than
 l              the number of values achieved by
  .u            repeating the following lambda N until already seen value:
    @LN_N         composing permutation N with its reverse
         Q      starting with the input.

টেস্ট স্যুট


3

হাস্কেল, 52 বাইট

([]#)
a#x|elem x a= -1|n<-x:a=1+n#reverse(map(x!!)x)

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

a # x                -- function '#' takes a list of all permutations
                     -- seen so far (-> 'a') and the current p. (-> 'x')
  | elem x a = -1    -- if x has been seen before, return -1 
  | n<-x:a =         -- else let 'n' be the new list of seen p.s and return
    1 +              -- 1 plus
       n #           -- a recursive call of '#' with the 'n' and
        reverse ...  -- the new p.

([]#)                -- start with an empty list of seen p.s 

3

পার্ল 6 , 44 35 বাইট

-9 বাইটস nwellnhof ধন্যবাদ

{($_,{.[[R,] |$_]}...{%.{$_}++})-2}

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

ব্যাখ্যা:

{                              }  # Anonymous code block
                  ...    # Create a sequence where:
  $_,  # The first element is the input list
     {.[[R,] |$_]} # Subsequent elements are the previous element reverse indexed into itself
                     {        }    # Until
                      %.{$_}       # The index of the listt in an anonymous hash is non-zero
                            ++     # Then post increment it
 (                            )-2  # Return the length of the sequence minus 2

2

জে, 33 27 26 বাইট

-7 বুবলার ধন্যবাদ

_1(+~:i.0:)|.@C.~^:(<@!@#)

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

কিভাবে

মূল ব্যাখ্যা। আমার শেষ উন্নতি কেবলমাত্র সেই টুকরো পরিবর্তন করে যা "ইতিমধ্যে আমরা দেখেছি প্রথম উপাদানটির সূচক" সন্ধান করে। কম বাইটে এটি করতে এখন এটি "নুব চালুনি" ব্যবহার করে।

1 <:@i.~ [: ({: e. }:)\ |.@C.~^:(<@!@#)
                        |.@C.~          NB. self-apply permutation and reverse
                              ^:        NB. this many times:
                                (<@!@#) NB. the box of the factorial of the
                                        NB. the list len.  this guarantees
                                        NB. we terminate, and the box means
                                        NB. we collect all the results
         [: ({: e. }:)\                 NB. apply this to those results:
                      \                 NB. for each prefix
             {: e. }:                   NB. is the last item contained in 
                                        NB. the list of previous items?
1 <:@i.~                                NB. in that result find:
1    i.~                                NB. the index of the first 1
  <:@                                   NB. and subtract 1

নোট করুন পুরো চূড়ান্ত বাক্যাংশটি 1<:@i.~[:({:e.}:)\"প্রথম উপাদানটির সূচক যা ইতিমধ্যে দেখা গেছে" অনুসন্ধানে উত্সর্গীকৃত। এটি পাওয়ার জন্য এটি অত্যন্ত ভয়ঙ্কর মনে হচ্ছে, তবে আমি এটি আরও গল্ফ করতে পারিনি। পরামর্শ স্বাগত জানাই।




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