fork download
  1. fun main() {
  2. println("Система расчёта штрафов Германии")
  3.  
  4. val carSpeed = 90
  5. val isTown = true
  6.  
  7. printFine(calculateFine(carSpeed, isTown))
  8.  
  9. check(60, 30, true)
  10. check(70, 70, true)
  11. check(80, 180, true)
  12. check(90, 260, true)
  13. check(100, 400, true)
  14. check(110, 560, true)
  15. check(120, 700, true)
  16. check(130, 800, true)
  17. check(140, 800, true)
  18.  
  19. check(60, 0, false)
  20. check(70, 0, false)
  21. check(80, 0, false)
  22. check(90, 0, false)
  23. check(100, 20, false)
  24. check(110, 60, false)
  25. check(120, 150, false)
  26. check(130, 200, false)
  27. check(140, 320, false)
  28. }
  29.  
  30. fun printFine(fine: Int) {
  31. if (fine == 0) {
  32. println("Скорость не превышена")
  33. } else {
  34. println("Штраф: $fine евро")
  35. }
  36. }
  37.  
  38. fun check(carSpeed: Int, fine: Int, isTown: Boolean) {
  39. if (calculateFine(carSpeed, isTown) != fine) {
  40. println(
  41. "Неверный штраф $fine для скорости $carSpeed. " +
  42. "Рассчитанный штраф ${calculateFine(carSpeed, isTown)}"
  43. )
  44. } else {
  45. println("Штраф $fine для скорости $carSpeed рассчитан верно")
  46. }
  47. }
  48.  
  49. fun calculateFine(carSpeed: Int, isTown: Boolean): Int {
  50. val maxSpeed = if (isTown) 50 else 90
  51. val overSpeed = carSpeed - maxSpeed
  52.  
  53. if (overSpeed <= 0) {
  54. return 0
  55. }
  56.  
  57. return when (overSpeed) {
  58. in 1..10 -> if (isTown) 30 else 20
  59. in 11..15 -> if (isTown) 50 else 40
  60. in 16..20 -> if (isTown) 70 else 60
  61. in 21..25 -> if (isTown) 115 else 100
  62. in 26..30 -> if (isTown) 180 else 150
  63. in 31..40 -> if (isTown) 260 else 200
  64. in 41..50 -> if (isTown) 400 else 320
  65. in 51..60 -> if (isTown) 560 else 480
  66. in 61..70 -> if (isTown) 700 else 600
  67. else -> if (isTown) 800 else 700
  68. }
  69. }
Success #stdin #stdout 0.07s 39852KB
stdin
Standard input is empty
stdout
Система расчёта штрафов Германии
Штраф: 260 евро
Штраф 30 для скорости 60 рассчитан верно
Штраф 70 для скорости 70 рассчитан верно
Штраф 180 для скорости 80 рассчитан верно
Штраф 260 для скорости 90 рассчитан верно
Штраф 400 для скорости 100 рассчитан верно
Штраф 560 для скорости 110 рассчитан верно
Штраф 700 для скорости 120 рассчитан верно
Штраф 800 для скорости 130 рассчитан верно
Штраф 800 для скорости 140 рассчитан верно
Штраф 0 для скорости 60 рассчитан верно
Штраф 0 для скорости 70 рассчитан верно
Штраф 0 для скорости 80 рассчитан верно
Штраф 0 для скорости 90 рассчитан верно
Штраф 20 для скорости 100 рассчитан верно
Штраф 60 для скорости 110 рассчитан верно
Штраф 150 для скорости 120 рассчитан верно
Штраф 200 для скорости 130 рассчитан верно
Штраф 320 для скорости 140 рассчитан верно