পারমিটেশন কবুতর-গর্ত নীতি


25

সুডোকু খেলায়, অনেক খেলোয়াড় প্রতিটি স্কোয়ারে যেতে পারে এমন সম্ভাব্য সংখ্যাকে "পেন্সিল ইন" করতে পছন্দ করে:

সুডোকু সারি

উপরের সারিটি অ্যারে হিসাবে উপস্থাপন করা যেতে পারে:

[[1,2,9], [6], [5], [7], [1,2,9], [1,2,9], [3], [1,2,4], [8]]

এখন, লক্ষ্য করুন যে যেখানে 4যেতে পারে সেখানে কেবল 1 জায়গা রয়েছে can এটি কার্যকরভাবে আমাদের উপরের তালিকাটিকে সহজ করতে দেয়:

[[1,2,9], [6], [5], [7], [1,2,9], [1,2,9], [3], [4], [8]]

এই চ্যালেঞ্জের লক্ষ্য হ'ল একটি অনুমানের সম্ভাব্য সংখ্যার একটি তালিকা গ্রহণ করা এবং কোন সম্ভাবনাগুলি বাদ দেওয়া যায় তা হ্রাস করা

অন্য উদাহরণ হিসাবে, আসুন আপনাকে বলুন যে আপনার কাছে সম্ভাবনার নীচের অ্যারে রয়েছে:

[[0,1,3], [0,2,3], [1,2], [1,2]]

শেষ দুটি স্থান অবশ্যই 1 এবং 2 দিয়ে পূরণ করা উচিত Therefore সুতরাং, আমরা অ্যারেতে প্রথম দুটি উপাদান থেকে সেই সম্ভাবনাগুলি সরাতে পারি:

[[0,3], [0,3], [1,2], [1,2]]

অন্য উদাহরণ হিসাবে:

[[0,1,2,3], [0,2], [0,2], [0,2]]

তার অসম্ভব , উপরোক্ত সম্ভাবনার থেকে একটি বিন্যাস গঠন করা সেখানে উভয়ের জন্য শুধুমাত্র 1 টি অবস্থান হিসাবে 1এবং 3, এবং আপনি একটি খালি অ্যারে ফিরে যেতে চাই যাবে।

আপনার সম্ভাবনার একটি তালিকা ইনপুট করতে হবে এবং সর্বাধিক সংখ্যার সম্ভাবনা বাদ দেওয়ার পরে অবশিষ্ট সম্ভাবনাগুলি আউটপুট করতে হবে।

  • যদি কোনও নির্দিষ্ট অ্যারে অসম্ভব হয়ে থাকে তবে আপনাকে একটি ফাঁকা অ্যারে, বা এমন একটি অ্যারে ফেরত পাঠাতে হবে যেখানে সাবহারিগুলির একটি ফাঁকা।
  • আপনি ধরে নিতে পারেন যে অ্যারেরটি সুগঠিত হবে এবং কমপক্ষে 1 টি উপাদান রয়েছে।
  • আকারের একটি অ্যারে দেওয়া N, আপনি ধরে নিতে পারেন সাবহারে নম্বরগুলি সর্বদা সীমার মধ্যে থাকবে [0:N), এবং এটিN <= 10
  • আপনি অনুমান করতে পারেন না যে থেকে যে সংখ্যা 0থেকে N-1উপস্থিত থাকবেন
  • আপনি ধরে নিতে পারেন যে একটি একক সুব্ররের মধ্যে নম্বরগুলি অনন্য।
  • যদি সাবহারে কেবলমাত্র একটিমাত্র সম্ভাবনা থাকে তবে আপনি সম্ভাবনাটি একটি অ্যারে বা নিজেই উপস্থাপন করতে পারেন। [[1],[2],[0]], [1,2,0], [[1,2],0,[1,2]]সব বৈধ।
  • আপনি যুক্তিসঙ্গত স্ট্রিং ফর্ম্যাটে বা তালিকা / অ্যারে বিন্যাসে অ্যারে গ্রহণ করতে পারেন।
  • সুব্রেরিগুলি যে কোনও ক্রমে থাকতে পারে।
  • র‌্যাগড অ্যারেগুলি ব্যবহার করার পরিবর্তে, আপনি খালি জায়গাগুলি দিয়ে প্যাড করতে পারেন -1

পরীক্ষার মামলা

[[0]]                                         -> [[0]]
[[1],[0]]                                     -> [[1],[0]]
[[1],[1]]                                     -> []
[[1],[0,1]]                                   -> [[1],[0]]
[[0,1,2],[1,2],[1,2]]                         -> [[0],[1,2],[1,2]]
[[0,1],[1,2],[0,2]]                           -> [[0,1],[1,2],[0,2]]
[[2,1],[1,2],[1,2]]                           -> []
[[0,3],[2,1],[3,0],[3,2]]                     -> [[0,3],[1],[0,3],[2]]
[[0,1],[0,1],[2,3],[2,3,0]]                   -> [[0,1],[0,1],[2,3],[2,3]]
[[0,1],[0,3],[3,2],[0]]                       -> [[1],[3],[2],[0]]
[[3,5,2],[0,2,4],[4,0],[0,1,3,5],[2,1],[2,4]] -> [[3,5],[0,2,4],[4,0],[3,5],[1],[2,4]]
[[6,9,8,4],[4,5],[5,3,6],[3,8,6,1,4],[3,1,9,6],[3,7,0,2,4,5],[9,5,6,8],[6,5,8,1,3,7],[8],[8,0,6,2,5,6,3]] -> [[6,9,4],[4,5],[5,3,6],[3,6,1,4],[3,1,9,6],[0,2],[9,5,6],[7],[8],[0,2]]
[[3,5,0],[5,7],[5,1,2],[1,3,0],[5,3],[5,0],[5,3,7,8,0,6],[7,5,0,1,8],[1,0,8],[0,6]] -> []
[[9,0,2,3,7],[0,7,6,5],[6,9,4,7],[9,1,2,3,0,5],[2,8,5,7,4,6],[6,5,7,1],[5,9,4],[5,9,3,8,1],[5,0,6,4],[0,7,2,1,3,4,8]] -> [[9,0,2,3,7],[0,7,6,5],[6,9,4,7],[9,1,2,3,0,5],[2,8,5,7,4,6],[6,5,7,1],[5,9,4],[5,9,3,8,1],[5,0,6,4],[0,7,2,1,3,4,8]]
[[2,6,0],[0,4,3],[0,6,2],[0,7],[0,9,2,3,6,1,4],[1,7,2],[2,7,8],[8,6,7],[6,5,2,8,0],[5,8,1,4]] -> [[2,6,0],[3],[0,6,2],[0,7],[9],[1],[2,7,8],[8,6,7],[5],[4]]
[[8],[8,0,6,5,7,2,4,1],[8,6,9,3,5,0,7],[3,9,1,0],[9],[9,2,6],[2,8,3],[3,1,6,8,2],[6],[6,4,5,3,0,7]] -> [[8],[5,7,4],[5,7],[0],[9],[2],[3],[1],[6],[4,5,7]]
[[8,1,0],[5,8,7,6,2,0],[6,8,2],[2,4,0,9],[4,1,7,3,6,8],[8,1],[8,0,3],[0,8,2],[0,8,3],[1,8,0]] -> []

এটি একটি তাই আপনার উত্তরগুলি যত তাড়াতাড়ি সংক্ষিপ্ত করুন!


9 এর চেয়ে বড় কোন সংখ্যা?
লিকি নুন

আপনি 9 এর চেয়ে বেশি সংখ্যার সমর্থন করার দরকার নেই
নাথন মেরিল

আমি কি সাবহারে সদৃশ নিয়ে ফিরতে পারি?
লিকি নুন

নিবন্ধন করুন সুবারে শুধুমাত্র অনন্য উপাদান থাকতে পারে।
নাথান মেরিল

আমি মনে করি আপনার চতুর্থ পরীক্ষার ক্ষেত্রে কিছু ভুল হয়েছে; সাবলিস্টগুলির মধ্যে একটি হ'ল ডাবল-বন্ধনীযুক্ত।
দ্য বাইকিংভিকিং

উত্তর:


17

ব্র্যাচল্যাগ , 21 বাইট

:1fz:da|,[]
:2a#d
:Am

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

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

পূর্বাভাস 0 (প্রধান ভবিষ্যদ্বাণী)

:1fz:da|,[]
:1f            Find all solutions of Predicate 1 using Input as Input.
   z           Transpose
    :da        Deduplicate each.
       |,[]    If there is no solution, return [] instead.

ভবিষ্যদ্বাণী 1 (সহায়িকা পূর্বে 1)

:2a#d
:2a     Each element of Output satisfies Predicate 2 with each element of Input as Input
   #d   Each element is different

ভবিষ্যদ্বাণী 2 (সহায়ক প্রিডিকেট 2)

:Am     Output is member of Input

8

জেলি , 10 বাইট

Œp⁼Q$ÐfZQ€

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

Œp⁼Q$ÐfZQ€   Main chain, argument: z

Œp           Cartesian product
  ⁼Q$Ðf      Filter for those that remain unchanged when uniquified
       Z     Transpose
        Q€   Uniquify each subarray

জেলি যখন ল্যাটিন 1 এর বাইরে অক্ষর ব্যবহার করে তখন 10 বাইট দাবি করা কিছুটা বেআইনী বলে মনে হয়। UTF-8 হিসাবে উপস্থাপিত উপরের ক্রমটির জন্য 16 বাইট প্রয়োজন।
ক্রিস বেক

1
@ ক্রিসবেক জেলির নিজস্ব চরসেট রয়েছে
রবিন গের্টেনবাচ

এবং এখনও - যদি আমি এটি অনলাইনে চেষ্টা করি! - আমাকে 16 বাইট প্রেরণ করতে হবে।
ক্রিস বেক 25:30

@ ক্রিসবেক হ্যাঁ তবে আপনি যদি জেলি ডাউনলোড করেন তবে আপনাকে কেবল একটি 10-বাইট প্রোগ্রাম লিখতে হবে।
ফাঁস নুন

এবং এটি একটি পাঠ্য ফাইলে সংরক্ষণ করুন আমি জেলি ব্যতীত অন্য কোনও কিছুতে সম্পাদনা করতে পারি না? এই যুক্তি অনুসারে যদি জেলি এর প্রোগ্রামটি সংকুচিত করে তবে আমাদের কেবল সংক্ষেপিত বাইটগুলি গণনা করা উচিত?
ক্রিস বেক




2

পাইথন 3, 101 99 বাইট

-২ বাইটের জন্য @ টিএলডব্লুকে ধন্যবাদ

from itertools import*
lambda x:list(map(set,zip(*[i for i in product(*x)if len(i)==len(set(i))])))

একটি অনামী ফাংশন যা তালিকার তালিকার যুক্তির মাধ্যমে ইনপুট নেয় এবং সেটগুলির একটি তালিকা প্রদান করে।

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

from itertools import*        Import Python's library for iterator generation
lambda x                      Anonymous function with input possibilities x as a
                              list of lists
...for i in product(*x)...    For i in the Cartesian product of x, ie all candidate
                              arrangements:
[...if len(i)==len(set(i))]    Filter into list by non-duplicity (set removes
                               duplicates, so there are no duplicates if the length
                               of i is the same as the length of the set of
                               the elements of i)
zip(*...)                     Unpack and take the transpose, leaving the modified
                              possibilities with duplicates
map(set,...)                  Remove duplicates
:list(...)                    Return the modified possibilities as a list of sets

আইডিয়নে চেষ্টা করে দেখুন


list(map(set,সংক্ষিপ্ত, আমি মনে করি
TLW


0

পিএইচপি, 245 231 বাইট

কারটিশিয়ান পণ্য ফাংশনের জন্য 131 117, অন্যান্য স্টাফের জন্য 114

function c($a){if ($a){if($u=array_pop($a))foreach(c($a)as$p)foreach($u as$v)yield $p+[count($p)=>$v];}else yield[];}
function p($a){foreach(c($a)as$i)if(max(array_count_values($i))<2)foreach($i as$k=>$v)$r[$k][$v]=$v;return$r?:[];}

কার্টেসিয়ান পণ্যটির জন্য পুনরাবৃত্ত ফাংশন সহ আমি কয়েকটি পরীক্ষার ক্ষেত্রে মেমরির সমস্যার মধ্যে পড়েছিলাম। এই জেনারেটর শ্রেণীর সাথে আরও ভাল কাজ করেছেন এবং function c($a){$b=[];foreach($a as$i)$b[]=new \ArrayIterator($i);return new CartesianProductIterator($b);}
তবে আমার জেনারেটর খাটো এবং একই কাজ করে।

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

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