我目前是程序员菜鸟,我一直在努力解决CodeEval的问题。现在,我正在研究CodeEval的“寻找广场”问题。 https://www.codeeval.com/open_challenges/101/
我正在使用的方法是Joel Brown描述的方法:https://softwareengineering.stackexchange.com/questions/176938/how-to-check-if-4-points-form-a-square
我在10个测试用例中通过了9个。事情是虽然CodeEval似乎没有给你他们的测试输入,所以我盲目地弄清楚我错过了什么案例。我假设一个案例,假设测试为“true”正在泄漏到else语句,这意味着我错过了给定点的一个可能的点分配位置。
def is_square? a, b, c, d
#distances between all points
ab = Math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2)
ac = Math.sqrt((a[0] - c[0])**2 + (a[1] - c[1])**2)
ad = Math.sqrt((a[0] - d[0])**2 + (a[1] - d[1])**2)
cd = Math.sqrt((c[0] - d[0])**2 + (c[1] - d[1])**2)
bc = Math.sqrt((b[0] - c[0])**2 + (b[1] - c[1])**2)
bd = Math.sqrt((b[0] - d[0])**2 + (b[1] - d[1])**2)
ba = ab, ca = ac, da = ad, dc = cd, cb = bc, db = bd
#possible point positions
if ab == ac
return false if bc != Math.sqrt(ab**2 + ac**2) #check if right triangle
return false if bd != cd #check if other sides equal each other
return false if bc != ad #check diagonals
return false if ab != bd #check if all sides are equal
elsif ab == ad
return false if bd != Math.sqrt(ab**2 + ad**2) #check if right triangle
return false if bc != dc #check if other sides equal each other
return false if ac != bd #check diagonals
return false if ab != bc #check if all sides are equal
elsif ac == ad
return false if cd != Math.sqrt(ac**2 + ad**2) #check if right triangle
return false if cb != db #check if other sides equal each other
return false if ab != cd #check diagonals
return false if ac != cb #check if all sides are equal
else
return false
end
return true
end
File.open(ARGV[0]).each_line do |line|
a, b, c, d = line.strip.split(" ")
a = a.scan(/\d+/).map(&:to_i)
b = b.scan(/\d+/).map(&:to_i)
c = c.scan(/\d+/).map(&:to_i)
d = d.scan(/\d+/).map(&:to_i)
puts is_square?(a, b, c, d)
end
答案 0 :(得分:1)
看起来您可以在CodeEval系统中执行puts
语句,因此在代码中添加一些调试打印,这样您就可以提取测试输入并让您在本地调试它。
另外,您使用==
和!=
比较浮点值。这通常会导致问题。可以将两个边缘计算为例如4.000001
和4.0
。这些不会是平等的,但事实上它们可能是,并且只是表达不精确的受害者。
通常,浮点值的比较使用数字之间可接受的差异来认为它们相等。 Here is a question regarding that with Ruby code
祝你好运!