fork download
  1. import sys
  2. from enum import Enum
  3.  
  4. class TringleSideTypes (Enum) :
  5. Invalid = 0
  6. Equilateral = 1
  7. Isosceles = 2
  8. Scalene = 3
  9.  
  10. class TringleAngleTypes (Enum) :
  11. Invalid = 0
  12. Right = 1
  13. Obtuse = 2
  14. Acute = 3
  15.  
  16. def tringleType(a, b, c) :
  17. if c<a :
  18. (a, c) = (c, a)
  19. if c<b :
  20. (c, b) = (b, c)
  21. if b<a :
  22. (b, a) = (a, b)
  23.  
  24. sideResult = TringleSideTypes.Invalid
  25. angleResult = TringleAngleTypes.Invalid
  26. if c >= a + b :
  27. return sideResult, angleResult
  28.  
  29. epsilon = abs(b) * 2*sys.float_info.epsilon
  30. if abs(a-b)<epsilon or abs(c-b)<epsilon :
  31. sideResult = TringleSideTypes.Isosceles
  32. if abs(a-c)<=epsilon :
  33. sideResult = TringleSideTypes.Equilateral
  34. angleResult = TringleAngleTypes.Acute
  35. return sideResult, angleResult
  36. else :
  37. sideResult = TringleSideTypes.Scalene
  38.  
  39. pitagoras = a*a + b*b - c*c
  40. epsilon = c*c * 6*sys.float_info.epsilon
  41. if abs(pitagoras)<=epsilon :
  42. angleResult = TringleAngleTypes.Right
  43. else :
  44. angleResult = (pitagoras>0) and TringleAngleTypes.Acute or TringleAngleTypes.Obtuse
  45.  
  46. return sideResult, angleResult
  47.  
  48. def brokenTringleType(a, b, c) :
  49. if c<a :
  50. (a, c) = (c, a)
  51. if c<b :
  52. (c, b) = (b, c)
  53. if b<a :
  54. (b, a) = (a, b)
  55.  
  56. sideResult = TringleSideTypes.Invalid
  57. angleResult = TringleAngleTypes.Invalid
  58. if c >= a + b :
  59. return sideResult, angleResult
  60.  
  61. if a==b or c==b :
  62. sideResult = TringleSideTypes.Isosceles
  63. if a==c :
  64. sideResult = TringleSideTypes.Equilateral
  65. angleResult = TringleAngleTypes.Acute
  66. return sideResult, angleResult
  67. else :
  68. sideResult = TringleSideTypes.Scalene
  69.  
  70. if a*a + b*b == c*c :
  71. angleResult = TringleAngleTypes.Right
  72. else :
  73. angleResult = (a*a + b*b > c*c) and TringleAngleTypes.Acute or TringleAngleTypes.Obtuse
  74.  
  75. return sideResult, angleResult
  76.  
  77.  
  78. for data in sys.stdin:
  79. data = data.split()
  80. a = float(data[0])
  81. b = float(data[1])
  82. c = float(data[2])
  83. result = tringleType(a, b, c)
  84. brokenResult = brokenTringleType(a, b, c)
  85. if result[0]!=brokenResult[0] or result[1]!=brokenResult[1] :
  86. print(a, b, c, result[0], result[1], brokenResult[0], brokenResult[1])
  87.  
Success #stdin #stdout 0.04s 10368KB
stdin
4 5 3
0.5 0.4 0.3
0.05 0.04 0.03
5 12 13
1.3 0.5 1.2
1.0 0.4 0.55
3.0 3.0 3.0
5 3 5
7 7 13
7 7.1 13
stdout
0.05 0.04 0.03 TringleSideTypes.Scalene TringleAngleTypes.Right TringleSideTypes.Scalene TringleAngleTypes.Obtuse
1.3 0.5 1.2 TringleSideTypes.Scalene TringleAngleTypes.Right TringleSideTypes.Scalene TringleAngleTypes.Obtuse