क्या ये वर्ग ओवरलैप होते हैं?


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। Y- निर्देशांक के लिए समान लिखने और उन्हें -Kअभिव्यक्ति देने पर अभिव्यक्ति मिलती है

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

10

MATL, 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

MATLAB, 36 21 बाइट्स

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

एक अनाम फ़ंक्शन बनाता है जिसका मूल्यांकन किया जा सकता है ans(a,b)। निम्नलिखित प्रारूप के दो इनपुट स्वीकार करता है:

  1. पंक्ति के रूप में प्रत्येक वर्ग के कोने वाले 2 x 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.

मैं MATLAB नहीं जानता, इसलिए मन एक स्पष्टीकरण जोड़ रहा है?
एलेंडिया स्ट्रोमैन

@ El'endiaStarman ने एक स्पष्टीकरण जोड़ा।
स्वेअर

4

जावास्क्रिप्ट (ईएस 6), 38 बाइट्स

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

यदि - एक तो दूसरा वर्ग पहले के अधिकार के लिए है। इसी प्रकार अन्य स्थितियां जांचती हैं कि यह बाईं ओर, नीचे या ऊपर नहीं है।


3

जेली , 8 बाइट्स

Ṫṗ2+µ€f/

इनपुट नेस्टेड सूची है [[X1, y1, k1], [x2, y2, k2]] , आउटपुट पूर्णांक निर्देशांक के साथ अंकों के सभी बढ़े हुए निर्देशांक की सूची है जो दोनों वर्गों के लिए सामान्य हैं (यदि खाली, सत्य नहीं तो सत्य है )।

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

यह काम किस प्रकार करता है

Ṫṗ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
@Neil से "एल्गोरिथ्म" है?
बैलिंट

1
Objectवापसी के लिए टाइप -1 बाइट
मार्व

@Marv कोड गोल्फ के लिए कानूनी है?
सुपरजेडी २२४

@ SuperJedi224 ऐसा क्यों नहीं होगा?
मार्व

ठीक है अगर तुम ऐसा कहते हो।
सुपरजेडी २२२४

1

ऑक्टेव, 17 बाइट्स

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

उपरोक्त मेरे MATLAB जवाब के रूप में एक ही तर्क , सिवाय इसके कि ओक्टेव आयामों के स्वत: प्रसारण का समर्थन करता है ताकि हम [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 बाइट्स

C ++ हस्ताक्षर:

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

यदि वर्ग ओवरलैप नहीं करता है तो 0 रिटर्न देता है और -1 (0xFFFFFFFF) अन्यथा। इनपुट्स x, y और k ( _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

05AB1E , 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)  
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.