fun main( ) {
println( "Система расчёта штрафов Германии" )
val carSpeed = 90
val isTown = true
printFine( calculateFine( carSpeed, isTown) )
check( 60 , 30 , true )
check( 70 , 70 , true )
check( 80 , 180 , true )
check( 90 , 260 , true )
check( 100 , 400 , true )
check( 110 , 560 , true )
check( 120 , 700 , true )
check( 130 , 800 , true )
check( 140 , 800 , true )
check( 60 , 0 , false )
check( 70 , 0 , false )
check( 80 , 0 , false )
check( 90 , 0 , false )
check( 100 , 20 , false )
check( 110 , 60 , false )
check( 120 , 150 , false )
check( 130 , 200 , false )
check( 140 , 320 , false )
}
fun printFine( fine: Int) {
if ( fine == 0 ) {
println( "Скорость не превышена" )
} else {
println( "Штраф: $fine евро" )
}
}
fun check( carSpeed: Int, fine: Int, isTown: Boolean) {
if ( calculateFine( carSpeed, isTown) != fine) {
println(
"Неверный штраф $fine для скорости $carSpeed. " +
"Рассчитанный штраф ${calculateFine(carSpeed, isTown)}"
)
} else {
println( "Штраф $fine для скорости $carSpeed рассчитан верно" )
}
}
fun calculateFine( carSpeed: Int, isTown: Boolean) : Int {
val maxSpeed = if ( isTown) 50 else 90
val overSpeed = carSpeed - maxSpeed
if ( overSpeed <= 0 ) {
return 0
}
return when ( overSpeed) {
in 1 ..10 -> if ( isTown) 30 else 20
in 11 ..15 -> if ( isTown) 50 else 40
in 16 ..20 -> if ( isTown) 70 else 60
in 21 ..25 -> if ( isTown) 115 else 100
in 26 ..30 -> if ( isTown) 180 else 150
in 31 ..40 -> if ( isTown) 260 else 200
in 41 ..50 -> if ( isTown) 400 else 320
in 51 ..60 -> if ( isTown) 560 else 480
in 61 ..70 -> if ( isTown) 700 else 600
else -> if ( isTown) 800 else 700
}
}
ZnVuIG1haW4oKSB7CiAgICBwcmludGxuKCLQodC40YHRgtC10LzQsCDRgNCw0YHRh9GR0YLQsCDRiNGC0YDQsNGE0L7QsiDQk9C10YDQvNCw0L3QuNC4IikKCiAgICB2YWwgY2FyU3BlZWQgPSA5MAogICAgdmFsIGlzVG93biA9IHRydWUKCiAgICBwcmludEZpbmUoY2FsY3VsYXRlRmluZShjYXJTcGVlZCwgaXNUb3duKSkKCiAgICBjaGVjayg2MCwgMzAsIHRydWUpCiAgICBjaGVjayg3MCwgNzAsIHRydWUpCiAgICBjaGVjayg4MCwgMTgwLCB0cnVlKQogICAgY2hlY2soOTAsIDI2MCwgdHJ1ZSkKICAgIGNoZWNrKDEwMCwgNDAwLCB0cnVlKQogICAgY2hlY2soMTEwLCA1NjAsIHRydWUpCiAgICBjaGVjaygxMjAsIDcwMCwgdHJ1ZSkKICAgIGNoZWNrKDEzMCwgODAwLCB0cnVlKQogICAgY2hlY2soMTQwLCA4MDAsIHRydWUpCgogICAgY2hlY2soNjAsIDAsIGZhbHNlKQogICAgY2hlY2soNzAsIDAsIGZhbHNlKQogICAgY2hlY2soODAsIDAsIGZhbHNlKQogICAgY2hlY2soOTAsIDAsIGZhbHNlKQogICAgY2hlY2soMTAwLCAyMCwgZmFsc2UpCiAgICBjaGVjaygxMTAsIDYwLCBmYWxzZSkKICAgIGNoZWNrKDEyMCwgMTUwLCBmYWxzZSkKICAgIGNoZWNrKDEzMCwgMjAwLCBmYWxzZSkKICAgIGNoZWNrKDE0MCwgMzIwLCBmYWxzZSkKfQoKZnVuIHByaW50RmluZShmaW5lOiBJbnQpIHsKICAgIGlmIChmaW5lID09IDApIHsKICAgICAgICBwcmludGxuKCLQodC60L7RgNC+0YHRgtGMINC90LUg0L/RgNC10LLRi9GI0LXQvdCwIikKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRsbigi0KjRgtGA0LDRhDogJGZpbmUg0LXQstGA0L4iKQogICAgfQp9CgpmdW4gY2hlY2soY2FyU3BlZWQ6IEludCwgZmluZTogSW50LCBpc1Rvd246IEJvb2xlYW4pIHsKICAgIGlmIChjYWxjdWxhdGVGaW5lKGNhclNwZWVkLCBpc1Rvd24pICE9IGZpbmUpIHsKICAgICAgICBwcmludGxuKAogICAgICAgICAgICAi0J3QtdCy0LXRgNC90YvQuSDRiNGC0YDQsNGEICRmaW5lINC00LvRjyDRgdC60L7RgNC+0YHRgtC4ICRjYXJTcGVlZC4gIiArCiAgICAgICAgICAgICLQoNCw0YHRgdGH0LjRgtCw0L3QvdGL0Lkg0YjRgtGA0LDRhCAke2NhbGN1bGF0ZUZpbmUoY2FyU3BlZWQsIGlzVG93bil9IgogICAgICAgICkKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRsbigi0KjRgtGA0LDRhCAkZmluZSDQtNC70Y8g0YHQutC+0YDQvtGB0YLQuCAkY2FyU3BlZWQg0YDQsNGB0YHRh9C40YLQsNC9INCy0LXRgNC90L4iKQogICAgfQp9CgpmdW4gY2FsY3VsYXRlRmluZShjYXJTcGVlZDogSW50LCBpc1Rvd246IEJvb2xlYW4pOiBJbnQgewogICAgdmFsIG1heFNwZWVkID0gaWYgKGlzVG93bikgNTAgZWxzZSA5MAogICAgdmFsIG92ZXJTcGVlZCA9IGNhclNwZWVkIC0gbWF4U3BlZWQKCiAgICBpZiAob3ZlclNwZWVkIDw9IDApIHsKICAgICAgICByZXR1cm4gMAogICAgfQoKICAgIHJldHVybiB3aGVuIChvdmVyU3BlZWQpIHsKICAgICAgICBpbiAxLi4xMCAtPiBpZiAoaXNUb3duKSAzMCBlbHNlIDIwCiAgICAgICAgaW4gMTEuLjE1IC0+IGlmIChpc1Rvd24pIDUwIGVsc2UgNDAKICAgICAgICBpbiAxNi4uMjAgLT4gaWYgKGlzVG93bikgNzAgZWxzZSA2MAogICAgICAgIGluIDIxLi4yNSAtPiBpZiAoaXNUb3duKSAxMTUgZWxzZSAxMDAKICAgICAgICBpbiAyNi4uMzAgLT4gaWYgKGlzVG93bikgMTgwIGVsc2UgMTUwCiAgICAgICAgaW4gMzEuLjQwIC0+IGlmIChpc1Rvd24pIDI2MCBlbHNlIDIwMAogICAgICAgIGluIDQxLi41MCAtPiBpZiAoaXNUb3duKSA0MDAgZWxzZSAzMjAKICAgICAgICBpbiA1MS4uNjAgLT4gaWYgKGlzVG93bikgNTYwIGVsc2UgNDgwCiAgICAgICAgaW4gNjEuLjcwIC0+IGlmIChpc1Rvd24pIDcwMCBlbHNlIDYwMAogICAgICAgIGVsc2UgLT4gaWYgKGlzVG93bikgODAwIGVsc2UgNzAwCiAgICB9Cn0=