Pour ce défi, vous devez implémenter deux fonctions, f et g , sur les entiers, telles que f ∘ g est une fonction strictement décroissante tandis que g ∘ f est une fonction strictement croissante. En d'autres termes, si vous prenez deux entiers quelconques a <b , alors f (g (a))> f (g (b)) et g (f (a)) <g (f (b)) . Il n'y a pas de restrictions sur f et g individuellement, sauf qu'ils doivent mapper un entier à un autre.
Veuillez inclure une courte description de f et g et un argument pour expliquer pourquoi ils possèdent la propriété requise.
Crédit: Ce défi a été inspiré par un problème rencontré lors du concours de maîtrise en mathématiques roumain de 2011 (qui demande la même chose, mais sur des nombres réels au lieu d'entiers). Si vous voulez vraiment des spoilers, vous savez maintenant quoi chercher.
Règles
Le mot "fonction" dans ce défi doit être pris dans le sens mathématique du mappage d'un entier à un autre: vous pouvez écrire deux programmes ou deux fonctions et utiliser l'une des méthodes standard de réception et de sortie, comme d'habitude. Vous pouvez utiliser des représentations sous forme de chaînes d'entiers au lieu de variables entières réelles, mais les types d'entrée et de sortie doivent être identiques, de sorte que les fonctions puissent être composées sans conversion manuelle des types entre les deux. Rappelez-vous que, f et g doivent toujours être des fonctions sur, vous ne pouvez donc pas tricher en utilisant deux représentations de chaîne différentes du même nombre ou quelque chose du genre.
Rappelez-vous que les fonctions peuvent ne pas être nommées , tant que leur nom n'est pas utilisé par lui-même ou par une autre fonction que vous définissez. Si vous nommez une ou les deux fonctions, vous pouvez supposer qu’elles existent dans le même programme, afin qu’elles puissent se référer les unes aux autres dans leur implémentation (par exemple,
def f(x): return -g(x)
en Python).Les règles habituelles de dépassement d'entier s'appliquent: votre solution doit pouvoir fonctionner avec des entiers arbitrairement grands dans une version hypothétique (ou peut-être réelle) de votre langage dans laquelle tous les entiers sont non liés par défaut, mais si votre programme échoue dans la pratique en raison de la mise en œuvre ne supportant pas des entiers de cette taille, cela n'invalide pas la solution.
Vous pouvez utiliser n'importe quel langage de programmation , mais notez que ces failles sont interdites par défaut.
Il s'agit d'un code-golf . Votre score est donc la somme du nombre d'octets des deux fonctions et la réponse la plus courte valide l'emporte.