Ce défi a été inspiré par un blog de programmation que je fréquente. S'il vous plaît voir le post original ici: Un puzzle de programmation
Défi
Définissez une fonction f:Q->Q
telle que f(f(n)) = -n
pour tous les entiers non nuls n
, et où Q
est l'ensemble des nombres rationnels.
Détails
Quelle que soit la langue que vous préférez, s'il vous plaît définir une fonction ou d'un programme f
qui accepte comme paramètre un nombre n
et retourne ou émet un numéro f(n)
.
Les entrées peuvent être fournies par le mécanisme le plus naturel pour votre langage: argument de fonction, lecture depuis STDIN, argument de ligne de commande, position de la pile, entrée vocale, signes de groupe, etc.
La sortie doit être une valeur renvoyée par une fonction / un programme ou imprimée sur STDOUT.
J'aimerais limiter les réponses aux fonctions qui ne tirent pas parti de l'état du programme ou de la mémoire globale / des données visibles de l'extérieur de la fonction f
. Par exemple, garder un compteur en dehors de f
cela compte combien de fois a f
été appelé et faire une négation basée sur ce compte n'est pas très difficile ou intéressant pour personne. Les décisions prises f
ne doivent s’appuyer que sur des données f
comprises dans la portée lexicale.
Cependant, cette restriction est probablement inappropriée pour certains langages orientés pile ou d'autres types de langages qui ne distinguent pas ces types de données ou de portées. S'il vous plaît utilisez votre meilleur jugement pour rester dans l'esprit de ce défi.
Notation
Les règles de golf communes au code s'appliquent - votre score est le nombre d' octets dans votre code source.
La réponse minimale nécessite que le domaine et le codomaine de f
soient un sous-ensemble des rationnels Q
. Si vous limitez votre domaine et votre codomaine f
aux entiers Z
, votre score correspond au plafond de 90% du nombre d' octets de votre code source.
Jeu décisif
En cas d'égalité, les éléments suivants seront utilisés dans l'ordre:
- Le plus petit nombre de symboles imprimables non-d'espaces blancs dans votre code source
- Date et heure de soumission de la réponse au plus tôt
modifier
Vous n'êtes pas obligé de prendre en charge des nombres de taille arbitraire. Veuillez interpréter les ensembles Z
et Q
les types de données dans la langue de votre choix (généralement des nombres entiers et des nombres à virgule flottante, respectivement).
Si votre solution repose entièrement sur la structure sous-jacente ou le modèle de bits d'un type de données, décrivez-en les limites et son utilisation.
f:Q->Q
signifie?
f
est une fonction mappant les membres de Q
(nombres rationnels) sur les autres membres (éventuellement les mêmes) de Q
. voir en.wikipedia.org/wiki/Function_(mathematics)#Notation