Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 确定4个给定整数点是否创建一个正方形_Ruby - Fatal编程技术网

Ruby 确定4个给定整数点是否创建一个正方形

Ruby 确定4个给定整数点是否创建一个正方形,ruby,Ruby,我目前是一名程序员noob,我一直在解决CodeEval上的问题以供练习。现在,我正在研究CodeEval的“找到一个正方形”问题 我使用的方法是Joel Brown描述的方法: 在给出的10个测试用例中,我通过了9个。问题是,虽然CodeEval似乎没有给你他们的测试输入,所以我在瞎弄弄清楚我遗漏了什么案例。我假设一个假设测试为“true”的情况正在泄漏到else语句,这意味着我缺少给定点的一个可能的点赋值位置 def is_square? a, b, c, d #dista

我目前是一名程序员noob,我一直在解决CodeEval上的问题以供练习。现在,我正在研究CodeEval的“找到一个正方形”问题

我使用的方法是Joel Brown描述的方法:

在给出的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                         

看起来您可以在CodeEval系统中执行
puts
语句,因此在代码中添加一些调试打印,这样您就可以提取测试输入并在本地进行调试

另外,您正在使用
==
比较浮点值=。这往往会导致一些问题。例如,两条边可以计算为
4.000001
4.0
。这些并不平等,但事实上它们很可能是平等的,只是成为表述不精确的牺牲品

通常,浮点值的比较使用数字之间的可接受的差值来考虑它们相等。


祝你好运

看起来您可以在CodeEval系统中执行
puts
语句,因此在代码中添加一些调试打印,这样可以提取测试输入并在本地进行调试

另外,您正在使用
==
比较浮点值=。这往往会导致一些问题。例如,两条边可以计算为
4.000001
4.0
。这些并不平等,但事实上它们很可能是平等的,只是成为表述不精确的牺牲品

通常,浮点值的比较使用数字之间的可接受的差值来考虑它们相等。


祝你好运

感谢您提供有关使用puts in CodeEval的建议。我从来没想过。关于比较浮动的建议也是一样。发现了错误,这是由于浮动精度。谢谢Nick。谢谢你给我关于使用puts in CodeEval的建议。我从来没想过。关于比较浮动的建议也是一样。发现了错误,这是由于浮动精度。谢谢你,尼克。