Selon Wikipédia , une fonction fortement Darboux est
celui pour lequel l'image de chaque intervalle ouvert (non vide) est la ligne réelle entière
En d'autres termes, une fonction est fortement Darboux si on lui donne 3 nombres réels arbitraires , et , il est toujours possible de trouver un entre (distinct) et tel que .
Aux fins de ce défi, nous considérerons plutôt les fonctions de Darboux plutôt que les logiques.
Votre défi consiste à écrire un programme ou une fonction qui:
- donne un nombre rationnel en sortie pour chaque entrée de nombre rationnel,
- donne toujours la même sortie pour une entrée donnée, et
- a la propriété fortement Darboux.
L'entrée et la sortie peuvent être l'une des suivantes:
- un type de nombre à précision arbitraire, si votre langue en possède un (ou possède une bibliothèque pour un, par exemple GMP).
- une représentation sous forme de chaîne du nombre, que vous pouvez supposer, contiendra toujours un point décimal et au moins un chiffre de chaque côté. Il peut être dans n'importe quelle base , mais l'entrée et la sortie doivent être dans la même base. Vous pouvez utiliser n'importe quel jeu de caractères pour les chiffres et le point décimal (mais encore une fois, ils doivent être cohérents entre l'entrée et la sortie).
L'entrée aura toujours une extension de base terminale . En ce qui concerne la sortie, qui peut avoir une expansion de base théoriquement non terminale en fonction de votre choix de fonction, vous pouvez choisir l'une des options suivantes:
- chiffres de sortie pour toujours.
- prendre un entier supplémentaire en entrée et en sortie au moins autant de chiffres.
- afficher au moins autant de chiffres que l'entrée (qui peut contenir des zéros de fin).
Notez que par la nature de ce défi, la convention selon laquelle les nombres peuvent être supposés être représentables par des types de nombres standard ne s'applique pas , sauf pour la deuxième entrée décrite dans l'option 2 ci-dessus.
Pour éviter les failles avec des fonctions qui ne sont définies que sur des justifications sans terminaison, votre soumission doit être capable de produire une sortie arbitrairement proche d'une valeur souhaitée dans la pratique . Formellement, compte tenu des nombres rationnels , , et , il doit y avoir un nombre rationnel qui se termine dans votre base choisie de telle sorte que et .
Pour vous donner quelques idées, voici une description de la fonction Conway base 13 :
- Convertissez en base 13 et supprimez le séparateur décimal.
- Si le résultat est de la forme , où et sont constitués uniquement de chiffres de 0 à 9, alors .
Votre soumission peut être une implémentation de cette fonction, bien que je soupçonne qu'il existe d'autres fonctions fortement Darboux qui sont beaucoup plus courtes à implémenter. :)