এই স্কোয়ারগুলি কি ওভারল্যাপ হয়?


11

দুটি বর্গক্ষেত্রের উপরের বাম কোণগুলির স্থানাঙ্ক এবং তাদের পাশের দৈর্ঘ্যগুলি দেওয়া, স্কোয়ারগুলি ওভারল্যাপ হয় কিনা তা নির্ধারণ করুন। একটি বর্গক্ষেত্রে উপরের এবং বাম রেখাগুলি অন্তর্ভুক্ত থাকে তবে নীচের এবং ডান রেখাগুলি নয়। অর্থাৎ, একটি বিন্দুটি (a,b)বর্গাকার অভ্যন্তরের পাশের দৈর্ঘ্যের সাথে থাকে kযা শুরু হয় (x,y)যদি কেবল x <= a < x+kএবং যদি হয় y <= b < y+k। পাশের দৈর্ঘ্য 0 সহ একটি বর্গটি হ্রাসযুক্ত এবং এখানে বিবেচনা করা হবে না, সুতরাং kএটি ইতিবাচক হবে।

যথারীতি সকল মানক বিধি প্রযোজ্য। ইনপুট এবং আউটপুট যেকোন ফর্মের পক্ষে সুবিধাজনক হতে পারে, যতক্ষণ না এটি মানুষের পাঠযোগ্য এবং কোনও প্রাক-গুণ নেই। আপনি কোন ইনপুট ফর্ম্যাটটি ব্যবহার করছেন তা নিশ্চিত করে নিন। স্কোয়ারগুলি ওভারল্যাপ হয়ে যায় এবং অন্যথায় মিথ্যা হয়ে থাকে যদি আপনার কোডটি ছয়টি সংখ্যা এবং আউটপুট সত্যবাদি গ্রহণ করে।

পরীক্ষার কেস

x1 y1 k1  x2 y2 k2  overlap?
 1  1  1   0  1  1  false
 0  0  3   1  1  1  true
 1  1  1   0  0  3  true
 0  0  3   2  1  2  true
 0  0  2   1  1  2  true
 1  1  2   0  0  2  true
 0  1  2   1  0  2  true
 1  0  2   0  1  2  true
 2  0  2   0  2  2  false
 1  0  3   0  1  1  false
 0  2  3   0  0  2  false

সমস্ত ইনপুট অ-নেতিবাচক পূর্ণসংখ্যার হবে। এটি বলেছিল, আমি প্রত্যাশা করি যে অনেকগুলি বা সর্বাধিক সমাধানগুলি নেতিবাচক এবং ফ্লোটগুলি পরিচালনা করতে সক্ষম হবে।


উত্তর:


22

পাইথন, 33 বাইট

lambda x,y,k,X,Y,K:k>X-x>-K<Y-y<k

পাইথন অসম্পূর্ণতার শিকলগুলিকে সমর্থন করে এমনকি তারা বিপরীত দিক নির্দেশ করে।

এক্স-স্থানাঙ্ক অন্তরগুলি [x,x+k)এবং [X,X+K)ততক্ষণ ওভারল্যাপ হয় যতক্ষণ না কোনও একটিই একে অপরের ডানদিকে পুরোপুরি না থাকে যার অর্থ প্রতিটি বিরতির বাম প্রান্তটি অন্য বিরতির ডান প্রান্তভাগের বাম হয়।

x<X+K
X<x+k

একটি যৌথ বৈষম্য মধ্যে মিলিত হতে পারে -K<X-x<k। ওয়াই-কোঅর্ডিনেটের জন্য একই লেখা এবং এগুলিকে স্প্লিক করে -Kদেওয়া এক্সপ্রেশন দেয়

k>X-x>-K<Y-y<k

10

এমএটিএল, 14 11 10 5 4 বাইট

tP->

এই দ্রবণটি দুটি অ্যারে আকারে ইনপুট গ্রহণ করে:

  1. একটি 2 x 2 ম্যাট্রিক্স যা কোণার স্থানাঙ্কগুলি ধারণ করে [x1, y1; x2, y2]
  2. বর্গ মাত্রা সহ একটি 2 x 1 অ্যারে [k2; k1]

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

সমস্ত পরীক্ষার কেস চালানোর জন্য সামান্য সংশোধিত সংস্করণ

ব্যাখ্যা

        % Implicitly grab the first input
t       % Duplicate the input
P       % Flip along the first dimension (columns)
-       % Subtract the two to yield [x1-x2, y1-y2; x2-x1, y2-y1]
        % Implicitly grab the second input
>       % Compare with [k2, k1] (automatically broadcasts)
        % Implicitly display the truthy/falsey result

5

ম্যাটল্যাব, 36 21 বাইট

@(a,b)a-flip(a)<[b,b]

একটি বেনামি ফাংশন তৈরি করে যা হিসাবে মূল্যায়ন করা যায় ans(a,b)। নিম্নলিখিত বিন্যাসের দুটি ইনপুট গ্রহণ করে:

  1. একটি সারিতে হিসাবে প্রতিটি বর্গ কোণে ধারণকারী 2 এক্স 2 ম্যাট্রিক্স: [x1, y1; x2, y2]
  2. দুটি স্কোয়ারের আকার সহ 2 x 1 অ্যারে: [k2; k1]

সমস্ত পরীক্ষার কেস এখানে

ব্যাখ্যা

এখানে একটি মন্তব্যবিহীন গল্ফযুক্ত সমাধান রয়েছে

%// Example input
a = [1 1;
     0 1];

b = [1; 1];

%// Flip a along the first dimension and subtract from a to yield:
%// 
%// [x1-x2   y1-y2]
%// [x2-x1   y2-y1]
d = a - flip(a);

%// Compare this matrix element-wise with two horizontally concatenated copies 
%// of the second input [k2; k1]
result = d < [b,b];

%// Truthy values have all ones in the result and falsey values have at
%// least one 0 in the result.

আমি ম্যাটল্যাব জানি না, সুতরাং ব্যাখ্যাটি যুক্ত করে মনে করবেন?
এল'েন্দিয়া স্টারম্যান

@ এল'এন্ডিয়াস্টারম্যান একটি ব্যাখ্যা যুক্ত করেছেন।
Suever

4

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

(a,b,c,d,e,f)=>d-a<c&a-d<f&e-b<c&b-e<f

যদি d - ac হয় তবে দ্বিতীয় বর্গটি প্রথমটির ডানদিকে। একইভাবে অন্যান্য শর্তাবলী এটি নীচে বা উপরে বাম দিকে নয় তা পরীক্ষা করে।


3

জেলি , 8 বাইট

Ṫṗ2+µ€f/

ইনপুট হল নেস্টেড তালিকা [[x1, y1, কে 1], [x2, y2, কে 2]] , আউটপুট হল উভয় বর্গের জন্য সাধারণ যে পূর্ণসংখ্য স্থানাঙ্কের সাথে পয়েন্টগুলির সমস্ত বর্ধিত স্থানাঙ্কের তালিকা (ফাঁকা থাকলে খালি, সত্য না হলে সত্য) )।

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

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

Ṫṗ2+µ€f/  Main link. Argument: [[x1, y1, k1], [x2, y2, k2]]

    µ     Combine the chain to the left into a link.
     €    Apply it to each list [xi, yi, ki].
Ṫ           Tail; pop and yield ki.
 ṗ2         Second Cartesian power; yield the list of all pairs [a, b] such that
            1 ≤ a ≤ ki and 1 ≤ b ≤ ki.
   +        Add [xi, yi] to each pair, yielding the list of all pairs [c, d] such
            that xi + 1 ≤ c ≤ xi + ki and yi + 1 ≤ d ≤ yi + ki.
      f/  Reduce by filter, intersecting the resulting lists of pairs.

2

টিআই বেসিক, 36 বাইট

Prompt X,Y,K,Z,θ,L:Z-X<K and X-Z<L and θ-Y<K and Y-θ<L

1

জাভা, 78 বাইট

Object o(int a,int b,int c,int d,int e,int f){return d-a<c&a-d<f&e-b<c&b-e<f;}

1
@ নীল থেকে "অ্যালগরিদম"?
বিলিন্ট

1
Object-1 বাইটের জন্য ফেরতের প্রকার
মার্ভ

@ মারভ কি কোড গল্ফের পক্ষে আইনী?
সুপারজেডি ২২৪

@ সুপারজেডি ২২৪ কেন এটি হবে না?
মার্ভ

যদি তাই বলে থাকো ঠিক আছে.
সুপারজেডি ২২৪

1

অক্টাভা, 17 বাইট

@(a,b)a-flip(a)<b

উপরের আমার ম্যাটল্যাব উত্তর হিসাবে একই যুক্তি ব্যতীত, অষ্টাভ মাত্রার স্বয়ংক্রিয় সম্প্রচারকে সমর্থন করে যাতে আমরা [b,b]সহজভাবে প্রতিস্থাপন করতে পারি b

সমস্ত পরীক্ষার কেস এখানে


1

স্মাইলব্যাসিক, 76 57 বাইট

INPUT X,Y,W,S,T,U
SPSET.,X,Y,W,W
SPCOL.?!SPHITRC(S,T,U,U)

প্রথম বর্গের আকার / অবস্থানের সাথে একটি স্প্রিট তৈরি করে, তারপরে এটি দ্বিতীয় বর্গের সাথে সংঘর্ষিত হয়েছে কিনা তা পরীক্ষা করে।


1

x86-64 মেশিন কোড, উইন্ডোজ 22 বাইট

সি ++ স্বাক্ষর:

extern "C" uint32_t __vectorcall squareOverlap(__m128i x, __m128i y, __m128i k);

স্কোয়ারগুলি ওভারল্যাপ না করে এবং -1 (0xFFFFFFFF) অন্যথায় 0 টি ফিরে আসে। ইনপুটগুলি এক্স, ওয়াই এবং কে ( _mm_set_epi64x(x1, x2)ইত্যাদি) এর জন্য 2 64-বিট পূর্ণসংখ্যার ভেক্টর ।

squareOverlap@@48 proc
66 0F FB C8          psubq       xmm1,xmm0
0F 16 D2             movlhps     xmm2,xmm2
66 0F 38 37 D1       pcmpgtq     xmm2,xmm1
0F 12 CA             movhlps     xmm1,xmm2
0F 54 CA             andps       xmm1,xmm2
66 0F 7E C8          movd        eax,xmm1 
C3                   ret  
squareOverlap@@48 endp

1

05 এ বি 1 ই , 5 বাইট

Â-›˜P

পোর্ট অফ @Suever এর MATL উত্তর , একটি truthy / falsey ফলাফলের অতিরিক্ত রূপান্তর সঙ্গে। ইনপুট-ফর্ম্যাটটিও তাই একই:
প্রথম ইনপুট হিসাবে [[x1,y1],[x2,y2]]এবং দ্বিতীয় ইনপুট হিসাবে[k2,k1]

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

ব্যাখ্যা:

       # Bifurcate (short for Duplicate & Reverse copy) the (implicit) input-matrix
 -      # Subtract each value (vectorized) from the input-matrix we duplicated
       # Check for both values (vectorized) if it's larger than the (implicit) input-list
        # (We now have the same result as the MATL answer. In MATL a matrix/list consisting
        #  of only 1s is truthy. In 05AB1E this isn't the case however, so:)
    ˜   # Flatten the matrix to a single list
     P  # And take the product to check if all are truthy
        # (after which the result is output implicitly)  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.