আবর্তনকারী আঙুলের ছাপ


15

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

উদাহরণস্বরূপ যদি আমাদের কাছে এল-টেট্রোমিনো থাকে

x
x
xx

আমরা এটির যে কোনওটির মতোই ফিঙ্গারপ্রিন্ট পেতে চাই:

         xx
  x       x      xxx
xxx  ,    x  or  x

দ্রষ্টব্য: আমরা কেবলমাত্র বিমানে ঘুরানোর অনুমতি দিই (যেমন তারা একতরফা পলিওমিনোস) এবং তাই নীচের পলিওমিনো অন্যরকম হবে:

 x
 x
xx 

চ্যালেঞ্জ

এই চ্যালেঞ্জটির জন্য কাজটি হল একটি ফিঙ্গারপ্রিন্টিং-ফাংশন / প্রোগ্রাম প্রয়োগ করা যা একটি মি×এন বুলিয়ান / 0,1 মূল্যবান ম্যাট্রিক্স / তালিকার তালিকা / স্ট্রিং / .. একটি পলিওমিনো এনকোডিং করে এবং একটি স্ট্রিং প্রদান করে - একটি পলিওমিনোর ফিঙ্গারপ্রিন্ট । সম্ভাব্য আবর্তনের সমস্তটির জন্য আঙুলের ছাপ সমান হতে হবে (সাধারণভাবে 4)।

ইনপুট আউটপুট

  • মি1 এবংএন1 (উদাঃ খালি পলিওমিনো নেই)
  • আপনি গ্যারান্টিযুক্ত যে মি,এন যতটা সম্ভব ছোট (যেমন সমস্ত 0মি এবং এন ফিট করার জন্য ছাঁটা হয়এন
  • আপনি গ্যারান্টিযুক্ত যে ইনপুট হয়
    • কেবল সংযুক্ত
    • কোন গর্ত নেই
  • আউটপুট অবশ্যই একটি স্ট্রিং হতে হবে যা পলিওমিনোগুলির প্রতিটি সম্ভাব্য ঘূর্ণনের জন্য একই

উদাহরণ

এখানে কিছু সমতুল্য ক্লাস রয়েছে, প্রতিটি শ্রেণীর জন্য আঙুলের ছাপ একই হতে হবে এবং দুটি স্বতন্ত্র শ্রেণীর যে কোনও দুটি পলিমিনোসের জন্য তাদের পৃথক হওয়া উচিত।

উদাহরণ থেকে এল-টেট্রোমিনোর আবর্তন:

[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]

জে-টেট্রোমিনো:

[[0,1],[0,1],[1,1]]
[[1,1,1],[0,0,1]]
[[1,1],[1,0],[1,0]]
[[1,0,0],[1,1,1]]

ইউনিট পলিমিনো:

[[1]]

একটি 5×1 বার:

[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]

একটি 2×2 কোণ:

[[1,1],[1,0]]
[[1,0],[1,1]]
[[0,1],[1,1]]
[[1,1],[0,1]]

ওয়াট-pentomino:

[[1,0,0],[1,1,0],[0,1,1]]
[[0,0,1],[0,1,1],[1,1,0]]
[[1,1,0],[0,1,1],[0,0,1]]
[[0,1,1],[1,1,0],[1,0,0]]


আমি যদি সর্বদা আউটপুট ""(খালি স্ট্রিং) করি তবে আমি কি সমস্ত প্রয়োজনীয়তা পূরণ করেছি?
ড্যানিয়েল ওয়াগনার

@ ড্যানিয়েল ওয়াগনার: "[..] দুটি স্বতন্ত্র শ্রেণীর যে কোনও দুটি পলিওমিনোর জন্য [আঙুলের ছাপ] অবশ্যই পৃথক হতে হবে " - তাই না, এটি অবৈধ।
5

ধারাবাহিকভাবে বাছাই করা একটি অ্যারের সমস্ত সম্ভাব্য আবর্তকে আউটপুট দেওয়া কি বৈধ? উদাহরণ
শেজি

1
@ শেগি: হ্যাঁ, এটি সমস্ত মানদণ্ড পূরণ করবে।
15

উত্তর:


7

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

f=lambda l,z=5:z and max(l,f(zip(*l)[::-1],z-1))

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

তালিকার তুলনার দিক থেকে চারটি ঘূর্ণনের মধ্যে সবচেয়ে বড় লাগে। ফ্লিপটকের সমাধানের ভিত্তিতে ।

কোডটি পাইথন 2 এর বিভিন্ন ধরণের অবজেক্টের তুলনা করার ক্ষমতা ব্যবহার করে। এর বেস কেস মানটি 0নিরীহ maxকারণ এটি কোনও তালিকার চেয়ে ছোট। এছাড়াও, zipইনপুট তালিকাগুলির তালিকাগুলির সময় টিপলগুলির একটি তালিকা তৈরি করে তবে তালিকার চেয়ে টিপলগুলি বড় হয় তাই ইনপুট তালিকা-তালিকাগুলি কখনই প্রতিযোগী হয় না। এই কারণেই আমরা 4 টির পরিবর্তে 5 বার ঘোরাই, যাতে আমরা প্রাথমিক তালিকার একটি tuplified সংস্করণে ফিরে আসি। (টিপলগুলির একটি তালিকা নেওয়াও কাজ করবে, যদি এটি কোনও ইনপুটের অনুমোদিত ফর্ম থাকে))


4

পাইথন 3 , 63 বাইট

def f(m):M=[];exec("m=[*zip(*m[::-1])];M+=m,;"*4);return min(M)

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

লেক্সোগ্রাফিকাল ন্যূনতম সহ আবর্তন সন্ধান করে এবং এটি মুদ্রণ করে।

একই বাইট গণনায় একটি ল্যাম্বদা ফর্ম আসে:

lambda m,M=[]:exec("m=[*zip(*m[::-1])];M+=m,;"*4)or min(M[-4:])

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


একটি হিসাবে পুনর্লিখন lambdaআপনাকে 58 এ পৌঁছে দিতে পারে lambda m,M=[]:exec("m=[*zip(*m[::-1])];M+=m,;"*4)or min(M)execসর্বদা ফিরে আসে বলে কাজ করে None
nedla2004

@ নেডলা ২০০৪ এটি কেবল একবার চালানো যেতে পারে, এবং Mইতিমধ্যে জনবহুল হিসাবে
অশুভ হয়ে যায়

@ নেডলা ২০০৪ ... তবে সমস্যাটির জন্য অ্যাকাউন্টিং M[-4:]আপনাকে একই বাইট কাউন্টে নিয়ে যেতে পারে।
ফ্লিপট্যাক

আমি দেখতে পাচ্ছি, আমি যে পরীক্ষাটি ব্যবহার করছিলাম সেটি হ'ল "হ্যাশ" দিয়ে ইনপুটগুলি পরীক্ষা করছিল, তাই আমি কখনই এটিতে প্রবেশ করি না। এটা বোধগম্য.
nedla2004

2

জেলি , 5 বাইট

ZU$ƬṂ

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

পুরো প্রোগ্রাম।

কেবলমাত্র সমস্ত সম্ভাব্য ঘূর্ণন উত্পন্ন করে এবং অভিধানের সর্বনিম্ন চয়ন করে।

মনে রাখবেন যে সিঙ্গেলটন তালিকাগুলি []আউটপুটটিতে মোড়ানো হয় না । কোনও ব্যাপার নয়, যেহেতু সিঙ্গেলটন তালিকাগুলি ইনপুটটিতে উপস্থিত থাকবে কেবলমাত্র একটি ক্ষেত্রে উল্লম্ব রেখা হবে (ইউনিট পলিমিনো সহ) যা একই আকারের সাথে একটি অনুভূমিক রেখার সমান (যেখানে এটি মোড়ানো নয়) )। একমাত্র ক্ষেত্রে যেখানে []বাহ্যিকের অস্তিত্ব থাকবে না তা হ'ল ইউনিট পলিমিনো।


আমি যখন চ্যালেঞ্জটি পড়ি তখন আমি জানতাম যে এটি ঘটবে :)
ngn


2

কে (এনএনজি / কে) , 16 বাইট

{a@*<a:3{+|x}\x}

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

ঘূর্ণন মিনিট

{ } যুক্তি দিয়ে ফাংশন x

{+|x}ঘোরান, অর্থাৎ বিপরীত ( |) এবং ট্রান্সপোজ ( +)

3{ }\অন্তর্বর্তী ফলাফল সংরক্ষণ 3 বার প্রয়োগ; এটি 4 টি ঘূর্ণনের একটি তালিকা প্রদান করে

a: ধার্য a

< আরোহণ (সাজান-ক্রমবর্ধমান অনুমানের গণনা)

* প্রথম

a@aযে সূচক


1

জাপট -g, 6 বাইট

4Æ=zÃñ

চেষ্টা করে দেখুন

           :Implicit input of 2d-array U
4Æ         :Map the range [0,4)
   z       :  Rotate U 90 degrees
  =        :  Reassign to U
    Ã      :End map
     ñ     :Sort
           :Implicit output of first element

-gপতাকা কি প্রয়োজনীয়? বাছাইয়ের অর্থ হওয়া উচিত যে সমস্ত প্রাথমিক ঘূর্ণন একই তালিকার সাথে সমাপ্ত হয় যাতে পুরো তালিকাটি আঙুলের ছাপ হিসাবে ঠিক কাজ করা উচিত যদি না আমি কিছু মিস করি।
কামিল দ্রাকারী

@ কামিলড্রাকারি, আপনি ঠিক মতো হতে পারেন - যেমন আমি বলেছিলাম, আমি নিশ্চিত নই যে আমি চ্যালেঞ্জটি পুরোপুরি বুঝতে পেরেছি । কোনও ক্ষতি এটি ছাড়তে হবে না, যদিও এটি কোনও বাইটের জন্য ব্যয় করে না।
শেগি

@ কামিলড্রাকারি: এটি প্রয়োজনীয় নয় তবে এটি কোনও ক্ষতি নয় কারণ এটি বাইট কাউন্টের হিসাবে গণনা করা হয়নি।
'17 :

1

জে , 16 বাইট

-২ বাইট শ্যাগিকে ধন্যবাদ

[:/:~|.@|:^:(<4)

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

জে , 18 বাইট

0{[:/:~|.@|:^:(<4)

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

পলিওমিনোতে অভিধানিকভাবে সাজানো আবর্তনের তালিকার প্রথম আইটেমটি ফেরত দেয়।

ব্যাখ্যা:

            ^:(<4)  - do the verb on the left 4 times, storing all the steps
       |.@|:        - tranpose and reverse
    /:~             - sort up the 4 matrices
  [:                - cap the fork
0{                  - take the first matrix  

@ শেগি ধন্যবাদ!
গ্যালেন ইভানভ

0

05 এ বি 1 ই , 10 8 বাইট

3FÂø})Σ˜

-২ বাইট @ শ্যাগি ধন্যবাদ ।

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

ব্যাখ্যা:

3F  }       # Loop 3 times
  Â         #  Bifurcate (short for Duplicate & Reverse) the top of the stack
            #  (which is the input-matrix implicitly the first iteration)
   ø        #  Transpose: swap rows/columns
     )      # After the loop, wrap everything on the stack in a list
      Σ˜    # Sort this list of matrices by their flattened array (and output implicitly)

দ্রষ্টব্য: ন্যূনতম গ্রহণের সাথে ßবা Wস্পষ্টতই সমতল হবে, ফলে আউটপুট হবে 0। এবং এর সাথে বাছাই করা {ম্যাট্রিকের তালিকার পক্ষে কাজ করছে বলে মনে হয় না, এজন্য আমি Σ˜পরিবর্তে ব্যবহার করি ।


1
@ শেগি ধন্যবাদ! :) সেক্ষেত্রে শেষ দুটি বাইটগুলি অপসারণ করা যেতে পারে, যেহেতু এর }পরে কিছুই না এলে তা স্পষ্টভাবে করা হয়।
কেভিন ক্রুইজসেন

1
আজ আমি 05AB1E সম্পর্কে কিছু শিখলাম! :) এটি জাপটেও একই রকম।
শেগি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.