Course de tortue

Source : https://www.google.com/imgres?imgurl=https%3A%2F%2Fimg.maxisciences.com%2Farticle%2F1280%2Frecord%2Fbertie-est-devenue-la-tortue-la-plus-rapide-du-monde-en-atteignant-la-vitesse-de-0-28-metre-par-seconde_09de39ff993a85f49c756577c012d153d2cdec4a.jpg&imgrefurl=https%3A%2F%2Fwww.maxisciences.com%2Ftortue%2Fvoici-bertie-la-tortue-la-plus-rapide-du-monde_art35903.html&tbnid=BW2e7uVZMJZPTM&vet=12ahUKEwjl-ZDTj4P6AhXHQcAKHXuvBnEQMygBegUIARDKAQ..i&docid=_sEeG-tGvKS2OM&w=560&h=315&q=course%20de%20tortue&client=firefox-b-d&ved=2ahUKEwjl-ZDTj4P6AhXHQcAKHXuvBnEQMygBegUIARDKAQ

Cette semaine, c'est Quentin Ginot qui nous propose un kata sur le sujet suivant : Course de tortue

Briefing du Kata :

Deux tortues nommées Albert et Bérangère doivent faire une course. Albert part avec une vitesse moyenne de 720 km/h. La jeune Bérangère sait qu'elle court plus vite que Albert et, de plus, elle n'a pas fini son chou.

Lorsqu'elle prend enfin le départ, elle peut constater que Albert a une avance de 70 pieds, cependant, sa vitesse est de 850 pieds par heure. Combien de temps lui faudra-t-il pour rattraper Albert ?

Plus généralement, étant donné deux vitesses v1 (vitesse de Albert, nombre entier > 0) et v2 (vitesse de Bérangère, nombre entier > 0) et une avance g (nombre entier > 0), combien de temps faudra-t-il à Bérangère pour rattraper Albert ?

Le résultat sera un tableau [hour, min, sec] qui représente le temps nécessaire en heures, minutes et secondes (arrondi à la seconde inférieure) ou une chaîne de caractères dans certains langages.

Si v1 >= v2, il faudra retourner un tableau vide.

Exemples :

race(720, 850, 70) => [0, 32, 18] race(80, 91, 37) => [3, 21, 49]

Bon courage !


Et sinon, voici une solution proposée par l'auteur en Kotlin :

package tortoise

import kotlin.math.absoluteValue

fun race(v1:Int, v2:Int, g:Int):IntArray {
    return if (v1 >= v2)
        intArrayOf()
    else {
        val speedDifference = v2 - v1
        val timeToCatch = (g / speedDifference.toDouble() * 3600).toInt()        

        val hoursToCatch = timeToCatch / 3600
        val minutesToCatch = (timeToCatch - hoursToCatch*3600) / 60
        val secondsToCatch = timeToCatch - hoursToCatch*3600 - minutesToCatch*60

        intArrayOf(hoursToCatch, minutesToCatch, secondsToCatch)
    }
}

Votre équipe TakiVeille

TakiVeille

TakiVeille