আয়তক্ষেত্রাকার পার্থক্য


20

এই চ্যালেঞ্জে আপনাকে দুটি ওভারল্যাপিং আয়তক্ষেত্র দেওয়া হবে এবং অন্যটি অপসারণ করে আপনাকে তৈরি আয়তক্ষেত্রগুলি গণনা করতে হবে।

উদাহরণস্বরূপ, আপনি যদি কালো থেকে লাল আয়তক্ষেত্রটি সরিয়ে থাকেন:

আয়তক্ষেত্র

আপনি নিম্নলিখিত দুটি আয়তক্ষেত্র সেটগুলির মধ্যে একটি দিয়ে শেষ করেছেন:

বিভক্ত এক বিভক্ত দুটি

আপনাকে নিম্নলিখিতগুলি পরিচালনা করতে হবে:

সমস্ত পরীক্ষার কেস

আরও সুস্পষ্ট হতে:

  • আপনি দুটি এবং দুটি আয়তক্ষেত্রের স্থানাঙ্কগুলি ইনপুট করবেন will
  • আপনাকে বি ছাড়াই এ এর ​​সমস্ত অঞ্চল কভার করে এমন কয়েকটি অ-ওভারল্যাপিং আয়তক্ষেত্র আউটপুট করতে হবে যে কোনও সম্ভাব্য আচ্ছাদন অনুমোদিত
  • আয়তক্ষেত্রাকার স্থানাঙ্কগুলি 4 পূর্ণসংখ্যা হিসাবে পাস করা হয়। আপনি এগুলি দুটি জোড়ায় (দুটি কোণার পয়েন্টগুলি উপস্থাপন করে), বা 4 টি সংখ্যার টুপল / তালিকা হিসাবে পাস করতে পারেন। আপনার ইনপুট এবং আউটপুটগুলি সামঞ্জস্যপূর্ণ হওয়া দরকার।
  • A এবং B অগত্যা ওভারল্যাপ বা স্পর্শ করবে না এবং প্রত্যেকের কমপক্ষে 1 এর ক্ষেত্রফল থাকবে

পরীক্ষার কেস:

[(0 0) (5 5)] [(3 4) (8 7)]   -> [(0 0) (5 4)] [(0 4) (3 5)] # or [(0 0) (3 5)] [(3 0) (5 4)]
[(2 4) (10 11)] [(5 5) (6 6)]  -> [(2 4) (10 5)] [(2 5) (5 6)] [(6 5) (10 6)] [(2 6) (10 11)]    #Other sets of 4 rectangles are possible
[(3 3) (8 8)] [(0 1) (10 8)]   ->    #No rectangles should be output
[(0 0) (5 5)] [(1 1) (10 2)]   -> [(0 0) (1 5)] [(1 0) (2 1)] [(2 0) (5 5)]  #Other sets of 3 rectangles are possible
[(1 5) (7 8)] [(0 0) (1 10)]   -> [(1 5) (7 8)]  #Only possible output
[(4 1) (10 9)] [(2 5) (20 7)]   -> [(4 1) (10 5)] [(4 7) (10 9)]  #Only possible output
[(1 1) (8 8)] [(0 6) (9 9)]     -> [(1 1) (8 6)]   #Only possible output

এটি একটি , সুতরাং আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত করুন!



1
আমরা কি ধরে নিতে পারি যে প্রদত্ত ইনপুটটি {(x1, y1), (x2, y2)}ধরেছে x1 < x2এবং y1 < y2?
tsh

হাঁ। আয়তক্ষেত্রটির আয়তন 1 হবে এবং আপনি যে কোনও আদেশ পছন্দ হিসাবে স্থানাঙ্কগুলি অর্ডার করতে পারেন।
নাথান মেরিল

প্রান্তটি কি ঘন? যখন আয়তক্ষেত্রটি সংজ্ঞায়িত হয় তখন প্রান্তটি অন্তর্ভুক্ত থাকে?
Новиков

প্রান্তটির 0 বেধ রয়েছে।
নাথান মেরিল

উত্তর:


3

পাইথন 2 , 375 360 345 343 বাইট

from itertools import*;P=product
def f(S,M):(l,t),(r,b)=S;(L,T),(R,B)=M;u,v,x,y=(L>=r)+(l<L),(T>=b)+(t<T),(R>=r)+(l<R),(B>=b)+(t<B);return[S]if v==y!=1or u==x!=1else[list(p(p(*zip(*(S+M))),repeat=2))[[43,197,6,199,9,231,142,229,53,189,134,181][int(i,36)]]for i in '38,491,258,2058,8,4B,28,208,7,41,27,461,,4,2,4A'.split(',')[u+2*v+4*x+8*y-12]]

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

সম্পাদনা: @ নোটজাগানের পরামর্শ থেকে -15; আর -15 সমাধানের অ্যারেটিকে পুনরায় এনকোড করে ইনট 36 ফর্ম্যাট এবং একটি সংক্ষিপ্ত অনুসন্ধান টেবিলের আয়তক্ষেত্রগুলি; @ মিউজিকম্যান অনুসারে পি দিয়ে পণ্য প্রতিস্থাপন করে অন্য -2।

একটি ফাংশন যা দুটি আয়তক্ষেত্র নেয়, প্রতিটি আয়তক ((বাম, শীর্ষ), (ডান, নীচে)) এর টিপল হয়; ফলাফলের আয়তক্ষেত্রগুলির একটি তালিকা প্রদান করে।

প্রাথমিক কৌশল:

     |     |
 0,0 | 1,0 | 2,0
-----A-----+-----
     |     |
 0,1 | 1,1 | 2,1
-----+-----B-----
     |     |
 0,2 | 1,2 | 2,2
     |     |

উপরের চিত্রটিতে, 'উত্স' আয়তক্ষেত্রের (প্রথম আয়তক্ষেত্র) যথাক্রমে উপরের বাম এবং নীচের ডানগুলি A এবং B বিন্দুগুলি।

আমরা সেই গ্রিডে 'মাস্ক' আয়তক্ষেত্রের উপরের বাম (u,v)এবং নীচের ডানগুলির প্রত্যেকটির স্থান খুঁজে (x,y)পাই।

এই উভয় পয়েন্ট যদি প্রথম বা শেষ কলামে থাকে; বা প্রথম বা শেষ সারি; তারপরে কোনও ওভারল্যাপ নেই; এবং আমরা কেবল উত্স রেক্টর ফিরে আসতে পারি।

অন্যথায়, 16 টি মামলা বাকি আছে; উদাহরণস্বরূপ, ওপির প্রথম উদাহরণটি আমরা কেস লেবেল করতে পারি (1,1),(2,2)। প্রতিটি ক্ষেত্রে ফলাফল প্রাপ্ত আয়তক্ষেত্রগুলির একটি সেটে ম্যাপ করা যায় যার কোণগুলি সর্বদা বাম, ডান বা মাস্কের আয়তক্ষেত্র বাম, ডান উভয় ক্ষেত্রে অনুভূমিক মানের সাথে স্থায়ী হয়; এবং অনুরূপভাবে উল্লম্ব মানগুলির জন্য উত্সের শীর্ষ, নীচে বা মুখোশগুলি।

উদাহরণস্বরূপ, জন্য (1,1),(2,2)মামলা, আয়তক্ষেত্র হবে ((l,t),(T,r))এবং ((l,T),(R,b))সেখানে l,t,r,bএবং L,T,R,B, ফেলে রাখা হয় শীর্ষ, ডান এবং উৎস নীচে এবং যথাক্রমে আয়তক্ষেত্র মাস্ক।

সুতরাং আমরা একটি অনুসন্ধান সারণী তৈরি করতে পারি যা এই জাতীয় সম্ভাব্য সংমিশ্রণের product(product(*zip(*)))সেটগুলির স্থানাঙ্কগুলিকে মানচিত্র করে তোলে (যা কিছুটা প্রায় যা হয় ) প্রতিটি ক্ষেত্রে সরবরাহ করা উচিত এমন আয়তক্ষেত্রগুলির সেট (যা কিছু গল্ফ-ডিসকপ্রেশন পরে) , তালিকার বাকী জিনিসগুলি কী সে সম্পর্কে রয়েছে)।


-15 বাইট বিভিন্ন golfing উন্নতি করে, অথবা -18 বাইট পাইথন 3 স্ট্রিং ব্যবহার
notjagan

আপনি করছেন দ্বারা আরো দুটি বাইট বন্ধ স্নিপ করতে p=productএবং প্রতিস্থাপন product(productসঙ্গেp(p
musicman523

3

জাভাস্ক্রিপ্ট, 115 বাইট

f=a=>b=>b.some((n,i)=>(a[i^2]<n)^i/2)?[a]:b.map((n,i)=>a[i&1]<n&&n<a[i|2]&&(p=[...a],p[i^2]=a[i]=n,p)).filter(x=>x)

ওভারল্যাপিং সংস্করণ:

f=a=>b=>b.some((n,i)=>(a[i^2]<n)^i/2)?[a]:b.map((n,i)=>a[i&1]<n&&n<a[i|2]&&(p=[...a],p[i^2]=n,p)).filter(x=>x)

নিম্নলিখিত ফর্ম্যাট ইনপুট: f([1,1,8,8])([0,6,9,9])


((X1, y1), (x2, y2)), ((x3, y3), (x4, y4) হিসাবে ইনপুট চিহ্নিত করুন

নিম্নলিখিত শর্তগুলির যে কোনও একটি পূরণ হলে, প্রথম আয়তক্ষেত্রটি যেমনটি ফেরত দিন:

  • x3> এক্স 2
  • x4 <এক্স 1
  • y3> y2
  • y4 <y1

অন্যভাবে

  • যদি x1 <x3 <x2 তাহলে আমরা একটি আয়তক্ষেত্র তৈরি করি ((x1, y1), (x3, y2)); এবং x1: = x3 সেট করুন
  • যদি x1 <x4 <x2 হয় তবে আমরা একটি আয়তক্ষেত্র তৈরি করি ((x4, y1), (x2, y2)); এবং x2: = x4 সেট করুন
  • যদি y1 <y3 <y2 তবে আমরা একটি আয়তক্ষেত্র তৈরি করি ((x1, y1), (x2, y3)); এবং y1: = y3 সেট করুন
  • যদি y1 <y4 <y2 হয় তবে আমরা একটি আয়তক্ষেত্র তৈরি করি ((x1, y4), (x2, y2)); এবং y2: = y4 সেট করুন

এটি একটি প্রতিশ্রুতিবদ্ধ পদ্ধতির; তবে এটি বর্তমানে কখনও কখনও ব্যর্থ হয়, উদাহরণস্বরূপ, যখন মাস্কের আয়তক্ষেত্রটি উত্স আয়তক্ষেত্রের সাথে কোনও ওভারল্যাপ থাকে না; যেমন f([0, 30, 10, 40])([5, 1, 6, 2])ফিরে আসা উচিত [[0, 30, 10, 40]]তবে পরিবর্তে ফিরে আসবে[[0,30,5,40],[6,30,10,40]]
চ্যাস ব্রাউন

@ নাথানমিরিল ঠিক আছে, সম্পাদিত।
tsh

@ টিশ ভাল লাগছে!
নাথান মেরিল

1

জাভা, 268 বাইট

class W{public static void main(String[]z) {int a[]={0,0,0,0},i,j,y[]={0,1,4,3,6,1,2,3,4,1,6,5,4,7,6,3};for(i=0;i<4;i+=1){for(j=0;j<4;j+=1){a[j]=Integer.parseInt(z[y[i*4+j]]);}if(a[0]<a[2] && a[1]<a[3]){for(j=0;j<4;j+=1){System.out.println(String.valueOf(a[j]));}}}}}

Ungolfed

class W{
    public static void main(String[]z) {
        int a[]={0,0,0,0},i,j,y[]={0,1,4,3,6,1,2,3,4,1,6,5,4,7,6,3};

        for(i=0;i<4;i+=1){
            for(j=0;j<4;j+=1){
                a[j]=Integer.parseInt(z[y[i*4+j]]);
            }
            if(a[0]<a[2] && a[1]<a[3]){
                for(j=0;j<4;j+=1){
                    System.out.println(String.valueOf(a[j]));
                }
            }
        }
    }
}

যুক্তি হিসাবে ইনপুট পাস। উদাহরণ

java -jar W.jar 0 0 5 5 3 4 8 7

0

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

lambda((a,b),(c,d)),((e,f),(g,h)):[([([[(a,b),(e,min(h,d))]]+[[(g,max(b,f)),(c,d)]]*2+[[(max(a,e),b),(c,f)]]*4+[[(a,h),(min(c,g),d)]])[m-1]for m in M&{1,2,4,8}]if M&{0}else[(a,b),(c,d)])for M in[{(x<e)*1+(x>g)*2+(y<f)*4+(y>h)*8 for x in range(a,c)for y in range(b,d)}]][0]

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

এটি প্রথম আয়তক্ষেত্রের বামত্ব = 1, উচ্চতা = 4, ডানতা = 2 এবং অন্যদিকে = 8 ডাব্লু / আর এর জন্য নীচে এবং 8 টি ফলাফলের জন্য প্রতিটি কক্ষের পরীক্ষার মাধ্যমে কাজ করে। যদি অন্যটি প্রথমটির সাথে = 0 ছেদ করে না, তবে আসলটি ফিরে আসবে, অন্যথায় ওভারল্যাপের জন্য থাকার সাথে বাম স্লাইস, ডান স্লাইস, উপরের স্লাইস এবং নিম্ন স্লাইসের কিছু সংমিশ্রণ ফিরে আসে।

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