আদেশের সংমিশ্রণ - গ্রুপ পণ্য


12

দ্বিখণ্ডিত চক্র আকারে দুটি ক্রিয়াকলাপ দেওয়া হয়েছে , তাদের পণ্য / রচনাটি অসন্তুষ্ট চক্র আকারে আউটপুট দেয়।

প্রশ্ন · পি = (1 5) (2 4) · (1 2 4 3) = (1 4 3 5)।

রচনাটি সন্ধান করতে, বিচ্ছিন্ন চক্রগুলিকে দ্বি-রেখার স্বরলিপিতে রূপান্তরিত করুন। একটি চক্রের বিরক্তিকর অংশে প্রতিটি সংখ্যা একই অংশে অনুসরণ করা সংখ্যায় ম্যাপ করা হয়। এটি চারপাশে মোড়ানো। সুতরাং 1 -> 5, 5 -> 1, 2 -> 4, 4 -> 2। যদি কোনও নম্বর না পাওয়া যায় 3 -> 3তবে তা নিজেরাই ম্যাপ করা হয়। প্রথম বিচ্ছিন্ন চক্রটিও লেখা যেতে পারে (1 5)(2 4)(3)। এই ম্যাপিংগুলি দুটি লাইনে রূপান্তরিত হয়, এর মতো (নোট করুন যে পি এবং কিউ এর ক্রমটি বিপরীত হয়েছে):

বাহ, এই চিত্রটি বিশাল!

[টি] তিনি দুটি ক্রমানুসারের পণ্য দ্বিতীয় (বামতম) অনুক্রমের কলামগুলি পুনরায় সাজানোর মাধ্যমে প্রাপ্ত হন যাতে এর প্রথম সারিটি প্রথম (ডানদিকের) অনুক্রমের দ্বিতীয় সারির সাথে সমান হয়। এরপরে পণ্যটি পরিবর্তিত দ্বিতীয় অনুচ্ছেদের দ্বিতীয় সারিতে প্রথম সারির প্রথম সারি হিসাবে লেখা যেতে পারে।

এখানে চিত্র বর্ণনা লিখুন

উইকিপিডিয়া নিবন্ধ


নিয়মাবলী:

  • ইনপুট তালিকা বা অনুরূপ বিন্যাসের তালিকা হিসাবে দেওয়া হবে
  • আপনি পারে না মত কিছু নিতে (1 5)(2 4)হিসাবে [5, 4, 3, 2, 1](ম্যাপিং মান INDEX) দুই লাইনের আকারে ইতিমধ্যে
  • সমস্ত সংখ্যার প্রতিটি গ্রুপে সংঘটিত হতে হয় না (1 5)·(1 2), ফলে আপনি এটি করতে পারেন (2 5 1)
  • আপনার আউটপুট আপনার ইনপুট হিসাবে ব্যবহার করতে সক্ষম হওয়া উচিত।
  • খালি চক্র সহ আপনার ইনপুট সমর্থন করার দরকার নেই (1 5)·()। পরিবর্তে হিসাবে দেওয়া হবে (1 5)·(1)বা সমতুল্য কিছু।
  • যেহেতু চক্রটি চারপাশে মোড়ানো থাকে, ফলাফলটি সঠিক হওয়া পর্যন্ত অর্ডারটি কোনও বিষয় নয়।
  • আপনি শূন্য বা এক থেকে শুরু করতে পারেন। এটি কোনও বিষয় নয়, কারণ ফলাফলগুলি একই।
  • সংখ্যাটি এর চেয়ে বড় হতে পারে 9
  • আপনি আউটপুটে একই সংখ্যাকে একাধিকবার অন্তর্ভুক্ত করতে পারবেন না। সুতরাং [[1],[1]]অনুমোদিত নয়।
  • মনে রাখবেন এই অপারেশনটি কমচটিভ নয় ! আমি পি এর আগে কিউ রেখেছি, কারণ উইকিপিডিয়া এটি করেছিল। আপনি যে কোনও অর্ডার চয়ন করতে পারেন, তবে এটির থেকে আলাদা হলে নির্দিষ্ট করুন।
  • সংক্ষিপ্ততম কোড জিতেছে
  • বিল্ট-ইনগুলি অনুমোদিত, তবে আপনি যদি এটি ব্যবহার করেন তবে এটি ব্যবহার না করেই কোনও সমাধান দেখান।

উদাহরণ:

সমস্ত সমতুল্য আউটপুট সম্ভাবনা দেখানো হয় না

Input
Output

[[1, 5], [2, 4]], [[1, 2, 4, 3]]
[[1, 4, 3, 5]] (or [[4, 3, 5, 1]] or ...)

[[1, 5]], [[1, 2]]
[[2, 5, 1]]

[[10, 2, 3]], [[2]]
[[3, 10, 2]]

[[1]], [[3]]
[[]] (or [[1]] or something equivalent)

[[10,2,3,15],[1,7],[5,6],[14,4,13,11,12]], [[5,6,7,9,14],[2,8,3,10],[1,11]]
[[12, 14, 6, 1], [8, 15, 10, 3, 2], [13, 11, 7, 9, 4]]

(arguments in reverse order from above gives a different answer)
[[5,6,7,9,14],[2,8,3,10],[1,11]], [[10,2,3,15],[1,7],[5,6],[14,4,13,11,12]]
[[9, 14, 4, 13, 1], [10, 8, 3, 15, 2], [7, 11, 12, 5]]

আমার কাছে এগুলি ক্রমশক্তি নয়, অনুগামী দল নয় । একটি ক্রমশক্তি গ্রুপ হ'ল একটি সংগ্রহ যা এই রচনা ক্রিয়াকলাপের অধীনে পৃথক অনুমতিগুলির একগুচ্ছ বন্ধ।
গ্রেগ মার্টিন

@ গ্রেগমার্টিন স্থির পরিভাষা
mbomb007

উত্তর:


2

আপনার আউটপুট আপনার ইনপুট হিসাবে ব্যবহার করতে সক্ষম হওয়া উচিত।
mbomb007

@ mbomb007 আউটপুটটি ইনপুট হিসাবে ব্যবহারযোগ্য। প্রতিটি চক্রের তালিকাতে বাক্সযুক্ত অ্যারে 0-সূচকযুক্ত অ্যারে হতে হবে।
মাইল

নাকি এই জেটির ডিফল্ট মুদ্রণ আচরণ? আমি কেবল নিশ্চিত করতে চাই যে ফাংশনটি শৃঙ্খলাবদ্ধ হতে পারে।
mbomb007

@ mbomb007 হ্যাঁ এটি এর চাক্ষুষ প্রতিনিধিত্ব মাত্র। এটি 0-সূচিযুক্ত হতে হবে, তবে আমি এটিকে 1-সূচকযুক্ত হিসাবে তালিকাভুক্ত করেছি এবং ফাংশনে যাওয়ার জন্য ভেরিয়েবলগুলিতে সঞ্চিত হওয়ার আগে সেগুলি 0-সূচকগুলিতে রূপান্তর করব। তারপরে, আমি এটিকে আউটপুট দেওয়ার আগে 0-সূচিযুক্ত থেকে 1-সূচকে আবার রূপান্তর করি।
মাইল 21

3

গণিত, 15 বাইট

##⊙Cycles@{}&

হ্যাঁ ভার্জিনিয়া, একটি অন্তর্নির্মিত আছে .... ম্যাথমেটিকা ​​একটি ক্রম ডেটা টাইপ সমর্থন করে যা ইতিমধ্যে বিরক্তিহীন চক্র নোটেশনে রয়েছে: এই খাঁটি ফাংশনটি ফর্মের যে কোনও সংখ্যক আর্গুমেন্টকে ইনপুট হিসাবে গ্রহণ করে Cycles[{{1, 5}, {2, 4}}]এবং পুনরায় Cycles[]আকারে পণ্য ক্রয়ের আউটপুট দেয় । এটি ওপি হিসাবে বিপরীত অর্ডারিং কনভেনশন ব্যবহার করে, উদাহরণস্বরূপ,

##⊙Cycles@{}&[Cycles[{{1, 2, 4, 3}}], Cycles[{{1, 5}, {2, 4}}]]

আয় Cycles[{{1, 4, 3, 5}}]আমি উপরে যে চিহ্নটি ব্যবহার করেছি তা হ'ল ম্যাথমেটিকায় কাজ করার জন্য 3-বাইটের ব্যক্তিগত-ইউনিকোড প্রতীক ইউ + এফ 3 ইডি হওয়া উচিত। নোট করুন যে এই অপারেশনের জন্য ম্যাথামেটিকার একটি বিল্টিন রয়েছে PermutationProduct, তবে এটি তিন বাইট বেশি দীর্ঘ।


3

হাস্কেল , 157 148 বাইট

সম্পাদনা করুন:

  • -9 বাইট: এটি আরও গল্ফ করা যেতে পারে। চারপাশে অপ্রয়োজনীয় বন্ধনী সরানো হয়েছে p++q। অদলবদলের অর্ডার অদলবদল করুন g। পেয়েছেন পরিত্রাণ dশুরু করে iterateদিয়ে p x, যার পরে takeWhileআর এনাদের সাথে বাঁধা fst+ + spaniterateইনফিক্স তৈরি ।

আমার দেরি হয়ে যাওয়ার পরে এটি করা ... সম্ভবত আরও কিছু গল্ফ করতে পারে।

এটি সহজ ছিল, এবং এটি অনুমোদিত হতে পারে বলে মনে হয়েছিল, সুতরাং আউটপুটটিতে একক-উপাদান চক্র অন্তর্ভুক্ত রয়েছে।

q#p=g(p++q>>=id)$f q.f p
f p a=last$a:[y|c<-p,(x,y)<-zip(0:c)(c++c),x==a]
g(x:l)p|c<-x:fst(span(/=x)$p`iterate`p x)=c:g[x|x<-l,x`notElem`c]p
g[]p=[]

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

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

  • #প্রধান কাজ। q#pসংখ্যার তালিকার দুটি তালিকা নেয় এবং অনুরূপ তালিকা প্রদান করে। পরীক্ষাগুলিতে পি এর আগে Q মনে হয় তাই আমি একই ক্রমটি ব্যবহার করেছি।
  • f ppবিভাজন চক্র ফর্ম থেকে ক্রিয়াকলাপটিকে কোনও ফাংশনে রূপান্তর করে , এর পরে f qএবং f pসাধারণ রচনা অপারেটরের সাথে রচনা করা যায় .
    • তালিকা ধী মাধ্যমে চক্র iterates c, অনুসন্ধানের জন্য aএবং তার উত্তরাধিকারী খোঁজার। যদি বোধগম্য কিছু না পায় aতবে স্রেফ ফিরে আসবে।
    • zip(0:c)(c++c)উপাদান cএবং তাদের উত্তরসূরিদের জোড়গুলির তালিকা। যেহেতু প্রশ্ন আমাদের "এক সাথে শুরু করতে দেয়" আমরা 0একটি ডামি মান হিসাবে ব্যবহার করতে পারি ; এটি দ্বিতীয়টি zipব্যবহার tailকরার চেয়ে প্রথম যুক্তিতে প্রিপেন্ড করা সস্তা ।
  • g l plউপাদানগুলির একটি তালিকা এবং একটি ক্রিয়াকলাপ ক্রিয়াকলাপ গ্রহণ করে pএবং উপাদানগুলির সাথে স্পর্শকারী চক্রগুলির তালিকা প্রদান করে।
    • এখানে cতালিকার প্রথম উপাদানটি অন্তর্ভুক্ত চক্রটি রয়েছে x, অন্য উপাদানগুলি আবার খুঁজে না পাওয়া পর্যন্ত cপুনরাবৃত্তি করে পাওয়া যায়। বাকি চক্রগুলি অনুসন্ধান করার জন্য পুনরাবৃত্তি করার সময়, সমস্ত উপাদানগুলি প্রথমে একটি তালিকা বোঝার সাথে সরানো হয়।p xxc

ফলাফলটি গণনা করার সময় এই আদেশটি বিবেচনার জন্য ধন্যবাদ। আমি একটি উদাহরণ যোগ করতে বা এটি সম্পর্কে মন্তব্য করতে ভুলে গেছি। তা সংশোধন করা হয়েছে।
mbomb007

1

পাইথন, 220 বাইট

a,b=eval(input())
p,o=a+b,[]
for i in range(1,1+max(map(max,p))):
 if not any(i in t for t in o):
  u,m=(i,),i
  while 1:
   for t in p[::-1]:
    if m in t:m=t[(t.index(m)+1)%len(t)]
   if m==i:o+=[u];break
   u+=(m,)
o

2
সাইটে স্বাগতম। আমি বেশ কয়েকটি উপায় দেখতে পাচ্ছি যে আপনি এটি সংক্ষিপ্ত করতে পারেন। অজগর জন্য টিপস পৃষ্ঠা পরীক্ষা করে দেখুন ।
অ্যাডহক গার্ফ হান্টার

0

পাইথন 3.8 , 187 বাইট

q,p=eval(input())
g=lambda p,i:[*(c[c.index(i)-1]for c in p if i in c),i][0]
h=lambda*c:(x:=g(p,g(q,c[0])))in c and(*c[(m:=c.index(min(c))):],*c[:m])or h(x,*c)
exit({*map(h,sum(p|q,()))})

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস পরীক্ষা করে দেখুন!

ইনপুট : qএবং pসেই ক্রমে, প্রতিটি হ'ল টিপলসের একটি সেট STDIN
আউটপুট : টিউপসগুলির Q·Pএকটি সেট হিসাবে পণ্য ক্রমবর্ধমান STDERR

ব্যাখ্যা

ফাংশন gখুঁজে বের করে সংখ্যা নম্বরে মানচিত্র যা iবিন্যাস মধ্যে p(ওরফে gবিপরীত বিন্যাস হয় p)।

g=lambda p,i:        
[                   # creates a list
  *(                # containing the following
    c[c.index(i)-1] #   the number before i in cycle c
    for c in p      #   for all cycles in permutation
    if i in c       #   if i is in that cycle
  )                 #
  ,i                # adds i to the end of that list
                    #   (in case i is not in any cycle)
][0]                # returns the first element of the list

ফাংশনটি hএকটি সংখ্যায় নেয় এবং চক্রটি Q·Pসেই সংখ্যায় অন্তর্ভুক্ত করে returns ফিরে আসা চক্রটি একটি টিউপল হবে, এমনভাবে ফর্ম্যাট হবে যাতে ক্ষুদ্রতম উপাদান সূচক 0 হয়।

h=lambda*c:                   # input: an incomplete cycle c, as a list
(x:=g(p,g(q,c[0])))           # finds the number x before the first number in c
in c                          # if x is also in c (aka the cycle is complete)
and                           # then returns the following:
(                             #   c as a tuple with min element at index 0
  *c[(m:=c.index(min(c))):],  #   (c, from the min element to the end)
  *c[:m]                      #   (c, from start to the min element)
)
or                            # else (cycle is incomplete) returns the following
h(x,*c)                       #   recursive result when after prepending x to c

hসমস্ত সংখ্যায় আবেদন করে, আমরা সমস্ত চক্রটি পেতে পারি Q·P। আমাদের ফলাফলটিতে সদৃশ চক্র প্রতিরোধ করতে, আমরা কেবল সমস্ত চক্রকে একটি সেটে রেখেছি। এটি কাজ করে যেহেতু প্রত্যাবর্তিত অনুরূপ চক্রগুলি hএকই টিউপলে ফর্ম্যাট হবে (সূচক 0-এ ক্ষুদ্রতম উপাদান সহ)।
আমাদের কেবলমাত্র সংখ্যাগুলি প্রদর্শিত হবে Pবা Qযেমন অন্যান্য সমস্ত সংখ্যা নিজেরাই মানচিত্র করবে সেগুলি বিবেচনা করা উচিত।

exit(              # returns through STDERR
  {                # create a set from the followings
    *map(h,        #   map function h to
      sum(p|q,())  #   all numbers in P or Q
    )
  }
)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.