Défi : recréer les opérateurs de base (+, -, *, %, ...)

Fermé
Tim - Modifié le 28 juil. 2021 à 12:33
 Tim - 28 juil. 2021 à 18:14
Bonjour à tous !

Alors voilà, je me suis lancé le petit défis en C# (mais il peut être fait avec n'importe quel langage) :

Réaliser une classe qui permet de recréer l'ensemble des opérateurs, mais en utilisant le moins d'opérateur possibles !

Exemple pour bien me faire comprendre :

public static class Operateur
{
    public static int soutraction(int a, int b)
    {
        return a - b;
    }

    public static int addition(int a, int b)
    {
        return a - (-b);
    }
}


On a recréer l'opérateur + et -, mais en utilisant uniquement un seul opérateur ! (ici l'opérateur -).

La classe devra ainsi permettre de recréer tous les opérateurs suivant:
+, -, *, /, %, >, <, ~, |, &, ^, >>, <<, ==, !=, &&, ||, !

Tous les opérateur "redondant" ne sont pas nécessaire, comme :
>=, <=, +=, -=, *=, ++, --, etc...

Le seul opérateur ne comptant pas est celui d'affectation =.


Petites règles complémentaires :

Les opérateurs ne sont à recréer que pour les bool et les int, et doivent gérer les cas où ceux-ci sont négatifs.

Les opérateurs recréés doivent avoir EXACTEMENT le même comportement que s'ils étaient simplement utilisés.

L'utilisation d'une méthode externe à la classe est interdit, même avec les classe de base comme string ou int.
(Exemple, pas le droit de faire string.Concat(...))

En revanche, tous les types de bases sont autorisées (int, string, double, char, bool, etc...), ainsi que toutes les instructions (if/else, switch, for, do/while, try/catch, etc...)



Alors voilà, après un peu de temps, j'ai réussi à recréer tous les opérateurs en en utilisant qu'un seul !

(Je met une balise spoiler au cas-où vous voudriez faire l’exercice par vous même)




Ma question est donc la suivante, pensez vous qu'il est possible de réussir ce défi en utilisant un autre opérateur ?
Car j'ai essayez, mais à chaque fois, j'ai l'impression de tomber dans un cul de sac :/

Merci d'avance à tous ceux qui essayeront de répondre à la question !
Et bonne chance à ceux qui essayeront le défi ! :)

2 réponses

yg_be Messages postés 22673 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 avril 2024 1 465
28 juil. 2021 à 14:32
bonjour,
tu te simplifies fortement la vie en considérant que la division ne retourne que la partie entière du résultat.
je pense qu'il est utile de le préciser dans l'énoncé.
0
yg_be Messages postés 22673 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 11 avril 2024 1 465
28 juil. 2021 à 14:40
par ailleurs, je pense que ta solution ne tient pas compte des différentes représentations utilisées pour les nombres signés.
0
Bonjour, merci pour ta réponse !
Désolé je n'ai peut être pas assez mis l'accent dessus, mais il s'agit de ne gérer que les int, donc pour le C#, que des entiers de 32 bits, avec le 32e bit représentant le signe ! :)
0