2014-02-26 32 views
1

我正在接受一個網站的培訓,該網站要求我製作一個程序,該程序將要求兩個長方形的座標並檢查長方形是否相交。然後,當我發送該程序時,該網站會對其進行幾次測試。它要求A矩形的x min,x max,y min和y max,然後是B矩形。檢查長方形座標是否與python相交

這是我做的:

xmin_a = int(input()) 
xmax_a = int(input()) 
ymin_a = int(input()) 
ymax_a = int(input()) 

xmin_b = int(input()) 
xmax_b = int(input()) 
ymin_b = int(input()) 
ymax_b = int(input()) 

if xmin_a < xmax_b <= xmax_a and (ymin_a < ymax_b <= ymax_a or ymin_a <= ymin_b < ymax_a): 
    print('YES') 
elif xmin_a <= xmin_b < xmax_a and (ymin_a < ymax_b <= ymax_a or ymin_a <= ymin_b < ymax_a): 
    print('YES') 
elif xmin_b < xmax_a <= xmax_b and (ymin_b < ymax_a <= ymax_b or ymin_b <= ymin_a < ymax_b): 
    print('YES') 
elif xmin_b <= xmin_a < xmax_b and (ymin_b < ymax_a <= ymax_b or ymin_b <= ymin_a < ymax_b): 
    print('YES') 
else: 
    print('NO') 

不幸的是,它不工作,我不知道爲什麼。任何想法?

PS:http://data.france-ioi.org/Task/7b0ee4fb57949c3db1f694afcef9d1a1//exemple.png

+0

這甚至法律'xmin_a luk32

+0

是的,它工作正常。實際上,該程序有時有時候並且有時不起作用。 – user3356177

+0

呃,好吧,這是很奇怪的形式,至少對我來說。然而,如果你說「它有時候有效」,那麼它有望指定輸入,實際產出和預期產出。如果知道失敗的測試,發現錯誤更容易。 – luk32

回答

1

我寫了一個小程序,產生隨機廣場,並與您的功能測試它們。按下控制鍵可以生成新的方塊,直到看到失敗的東西。我做了一些快速測試,發現一些案例失敗。如果它們的邊界完全相同,則需要考慮它們是否被視爲相交。

像這樣的例子: enter image description here

import numpy as np 
import matplotlib.pyplot as plt 
from random import randint 


def caseTest(xmin_a, xmax_a, ymin_a, ymax_a, xmin_b, xmax_b, ymin_b, ymax_b): 

    if xmin_a < xmax_b <= xmax_a and (ymin_a < ymax_b <= ymax_a or ymin_a <= ymin_b < ymax_a): 
     print('YES'), 
    elif xmin_a <= xmin_b < xmax_a and (ymin_a < ymax_b <= ymax_a or ymin_a <= ymin_b < ymax_a): 
     print('YES'), 
    elif xmin_b < xmax_a <= xmax_b and (ymin_b < ymax_a <= ymax_b or ymin_b <= ymin_a < ymax_b): 
     print('YES'), 
    elif xmin_b <= xmin_a < xmax_b and (ymin_b < ymax_a <= ymax_b or ymin_b <= ymin_a < ymax_b): 
     print('YES'), 
    else: 
     print('NO'), 

    print(xmin_a, xmax_a, ymin_a, ymax_a, xmin_b, xmax_b, ymin_b, ymax_b) 


def createRandomSquares(): 
    fig = plt.gcf() 
    fig.clf() 

    xmin_a = randint(0, 9) 
    xmax_a = randint(xmin_a + 1, 10) 
    ymin_a = randint(0, 9) 
    ymax_a = randint(ymin_a + 1, 10) 

    xmin_b = randint(0, 9) 
    xmax_b = randint(xmin_b + 1, 10) 
    ymin_b = randint(0, 9) 
    ymax_b = randint(ymin_b + 1, 10) 

    caseTest(xmin_a, xmax_a, ymin_a, ymax_a, xmin_b, xmax_b, ymin_b, ymax_b) 

    sqr1_x = [xmin_a, xmax_a, xmax_a, xmin_a, xmin_a] 
    sqr1_y = [ymin_a, ymin_a, ymax_a, ymax_a, ymin_a] 
    sqr2_x = [xmin_b, xmax_b, xmax_b, xmin_b, xmin_b] 
    sqr2_y = [ymin_b, ymin_b, ymax_b, ymax_b, ymin_b] 

    plt.plot(sqr1_x, sqr1_y) 
    plt.plot(sqr2_x, sqr2_y) 

    ax = plt.gca() 

    ax.set_ylim(min([ymin_b, ymin_a]) - 1, max([ymax_a, ymax_b]) + 1) 
    ax.set_xlim(min([xmin_b, xmin_a]) - 1, max([xmax_a, xmax_b]) + 1) 

    fig.canvas.draw() 


def key_event(event): 
    if (event.key == 'control'): 
     createRandomSquares() 

fig = plt.figure() 
fig.canvas.mpl_connect('key_press_event', key_event) 

plt.show() 

這一次沒有給出 - 顯然不應該是肯定的。

enter image description here

  • 難道他們認爲如果相交一個完全包含在其他?
    這一個給予是 - 我會說這可能是沒有。

enter image description here