11485 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

J'essaye de générer une équation aléatoire. Imaginons une fonction rdm_eq(n) qui prend en argument un entier et retourne une fonction qui prend en argument n entiers avec une opération aléatoire effectuées entre eux. Par exemple rdm_eq(3)(x, y, z) retournerais x * y.

Je suis parvenu à arriver jusqu'ici mais j'ai besoins d'aller plus loins: rajouter un second argument k à ma fonction rdm_eq(n, k) et qui représenterais lui le nombre d'opérations compté sur les symboles (+,.,-). Par exemple, rdm_eq(2, 4)(a, b) pourrait être "a * b + a - b * b" qui prend donc bien deux argument et effectue 4 opérations.

Voici pour l'instant mon avancée:


// rdm_op retourne de manière aléatoire une fonction
// qui effectue une opération entre deux arguments.
// ( ici rdm_i est juste une fonction qui retourne un indice aléatoire)
function rdm_op() {
    let ops = Array(
        (x, y) => x * y,
        (x, y) => x + y,
        (x, y) => x - y
    );
    return ops[rdm_i(ops)];
}

// retourne un argument aléatoire
function rdm_arg(...args) {
    return args[rdm_i(args)];
}

// construit l'équation (ops est le nombre d'opérations)
function rdm_eq(ops, ...args) {
    if (ops == 0) {
        return rdm_arg(...args);
    }

    return rdm_op(rdm_eq(ops - 1, ...args), rdm_arg(...args));
}


Le problème étant bien sur que ma fonction rdm_eq demande une liste d'augments
pré-défini.
J'espère avoir été assez claire et que mon problème ai une solution!
Je vous souhaite un bon week-end à tous (:
Modifié par vzytoi (29 Oct 2022 - 16:56)