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. :)
Réponses:
Retina 0.8.2 ,
4350 octetsEssayez-le en ligne! L'E / S est une chaîne binaire. Encodez un nombre binaire
y
proche d'un autre nombre binairea
comme suit:a
ne contient pas de.
suffixe, un.a
contient un nombre impair de chiffres après le.
, suffixe a0
.y
est négatif, alors suffixe11
sinon suffixe10
.y
, suffixe0
suivi de ce chiffre.y
contient un.
suffixe11
à ce point, sinon suffixez-le après tous les chiffresy
.Explication:
Associez les chiffres commençant au point binaire. Si le nombre est un codage valide, décodez la dernière
1x
paire de chiffres en a.
et l'avant-dernier en-
signe facultatif . Les chiffres avant cela sont ignorés.Cela devrait simplement laisser des paires qui commencent par
0
, donc supprimez le0
s.la source
-.
. Est-ce que cela implique des zéros ou ne sont-ils pas censés être produits?*
s en+
s, ce qui garantirait au moins un chiffre avant et après le.
?.
. Je pense que je peux toujours garantir un chiffre avant le.
bien..
ne change pas sa valeur, mais un tel changement dans l'entrée de votre fonction change la sortie. Peut-être que vous êtes autorisé à résoudre ce problème en supposant que l'entrée n'a pas de tels 0. De plus, si vous groupez des paires à partir de la droite, comment cela "fonctionne-t-il théoriquement pour toute entrée réelle"?11
ajoutés à l'étape 2.)Gelée , 71 octets
Essayez-le en ligne!
Un programme complet qui prend un nombre de base 10 comme entrée et sortie et implémente la fonction Conway base 13 mais en utilisant les bases 7 et 10 plutôt que 10 et 13. Les entrées et les sorties utilisent des virgules comme séparateur décimal. La sortie aura un début - pour les nombres négatifs.
la source
Retina ,
28252628 octetsEssayez-le en ligne!
Explication
Il peut générer des zéros de début et de fin et des nombres sans partie entière.
Il pourrait être joué 2 ou 3 octets de plus si je pouvais l'utiliser
4+
. Mais je ne sais pas comment définir le résultat théorique si l'entrée a un flux sans fin de4
s.la source