1. Si vous venez d'arriver sur le forum et que vous êtes un peu perdus, cliquez ici !
    Rejeter la notice

Floodatorium

Discussion dans 'Discussions diverses' créé par Endy, 27 Mai 2012.

  1. SpookyPowa

    SpookyPowa Rédacteur en Chef
    Staff

    Inscrit:
    26 Mai 2013
    Messages:
    7 475
    Points:
    259
    Sexe:
    Homme
    Tu es sûr qu'il n'y a pas d'usines à côté ?
     
  2. tipigeon

    tipigeon That's just like...Your opinion man
    Membre Premium

    Inscrit:
    15 Mai 2012
    Messages:
    4 208
    Points:
    234
    Sexe:
    Homme
    Quand y a des mecs qui pleurent en PLS d'habitude c'est pas qu'ils jouent à BoI mais qu'ils viennent de sortir de partiels o/
     
  3. Malaysia

    Malaysia Mineur de Fer

    Inscrit:
    18 Juil 2016
    Messages:
    505
    Points:
    86
    Sexe:
    Homme
    C'est les reptiliens qui ont ouvert une usine sous-marine pour créer des soucoupes volantes à livrer à Tromp.

    Et ma bonne résolution est simple : bosser 1 ou 2 mois, et passer le reste de l'année au chômage et au repos.
     
    • J'aime J'aime x 2
  4. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 244
    Points:
    304
    Sexe:
    Homme
    les doués en java (genre @Seblor) j'ai besoin de votre aide pour un DM en info (en fait, mon problème relève plus de logique que de programmation).

    On doit programmer un mastermind (on entre un chiffre, l'ordinateur en propose un, on dit combien y'a de chiffres bons a la bonne place/bons a la mauvaise place, et l'ordi doit trouver le bon chiffre en le moins de tours possibles), et je n'arrive pas a trouver comment faire pour déterminer quels chiffres sont les bons. J'ai déjà essayé en isolant les chiffres du nombre dans des tableaux, mais ça ne marche que pour certains cas (quand y'a les 4 bons chiffres mais pas dans le bon ordre ...), et sinon je dois prendre un chiffre au hasard parmi les 4, et du coup ça ne sert plus a rien ...

    Merci d'avance ♥

    (mon code btw http://pastebin.com/UZ16Pra8 et ne me répondez pas qu'il est pas organisé avec des variables inutiles sinon je vous ban)
     
  5. Redz

    Redz Résident de l'End

    Inscrit:
    7 Sept 2014
    Messages:
    5 277
    Points:
    229
    j'allais dire un message qui disait que j'étais heureux car quelque chose ne s'est pas produit puis je me suis dit que les gens vont faire la chose just' après que je l'ai dite du coup j'ai effacé le message.

    toujours aussi chiant de s'auto-censurer
    rt
     
  6. Pumafi

    Pumafi Champion d'Odin

    Inscrit:
    24 Nov 2012
    Messages:
    4 221
    Points:
    214
    Sexe:
    Homme
    Je connais pas le JAVA alors j'ai test en C#.
    Ca marche pas, et j'ai très clairement la flemme d'utiliser le débogueur pour un truc même pas dans le bon langage...
    Donc bonne chance, parce que c'est chiant :D



    Code (cpp):
           static public void masterMind(int x)
            {
                int[] nbr = new int[4] { 0, 0, 0, 0, };
                int[] guess = new int[4] { 0, 0, 0, 0 };
                int[] acc = new int[4] { 0, 0, 0, 0 };
                int n, c, y;
                Random rnd = new Random();
                if (x < 0 || x > 9999)
                    Console.Error.WriteLine("Invalid Argument");
                else
                    nbr = toArray(x, nbr);
                    while (nbr != guess)
                {
                    acc = guess;
                    n = 0;
                    c = 0;
                    while (n < 4)
                    {
                        y = acc[n];
                        if (isPlaced(y, n, nbr))
                        {
                            guess[n] = y;
                            n++;
                        }
                        else if (isPresent(y, nbr))
                        {
                            while (isPlaced(guess[c], c, nbr))
                            {
                                c++;
                            }
                            guess[c] = y;
                            n++;
                        }
                        else
                        {
                            guess[n] = rnd.Next(0, 10);
                            n++;
                        }
                    }
                    Console.WriteLine("Found" + guess[0] + guess[1] + guess[2] + guess[3]));


                }

            }

            static public bool isPlaced(int x, int i, int[] nbr)
            {
                return x == nbr[i];

            }

            static public bool isPresent(int x, int[] nbr)
            {
                int i = 0;
                while ( i < nbr.Length)
                {
                    if (nbr[i] == x)
                        break;
                    i++;
                }
                return nbr[i] == x;
            }

            static public int[] toArray(int x, int[] nbr)
            {
                int i = 3;
                while(i >= 0)
                {
                    nbr[i] = x % 10 ;
                    x /= 10;
                    i--;
                }
                return nbr;
            }
     

    EDIT: Trouvé une erreur, mais flemme de corriger.
     
    #159411 Pumafi, 12 Déc 2016
    Dernière édition: 12 Déc 2016
  7. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 569
    Points:
    185
    Sexe:
    Homme
    Désolé pour le retard (demande sur discord la prochaine fois ^^)

    Pour ton mastermind, Pour chaque case, t'as 3 cas : "au bon endroit" "pas au bon endroit" et "faux"
    Pour déterminer chaque cas : une bonne vieille boucle for :
    Code (cpp):

    short[] results;
    for (int i=0 ; i<solution.length ; i++)
        results[i] = ( Arrays.asList(solution).contains(userInput[i]) ) ? ( (solution[i] == userInput[i]) ? (1) : (2) ) : (3)
     
    Voilà. Donc tu as ton tableau results avec des valeurs 1, 2, et 3 correspondant respectivement aux cas que j'ai cité au dessus

    Concrètement, j'ai fais 2 opérateurs ternaires imbriqués, mais tu peux faire des if else si tu veux.
     
  8. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 244
    Points:
    304
    Sexe:
    Homme
    Merci du coup de main, mais le problème c'est que le code que tu me donnes (si j'ai j'ai bien compris) me sert a faire ce que je déjà fait ... Ce que je cherche a faire, c'est justement dire a l'IA (en entrant manuellement les valeurs) combien y'a de bonnes valeurs/a la bonne place, et l'IA ressort un chiffre en fonction de ce que j'ai dit
     
  9. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    Ah tiens j'ai déjà codé ça.
    Tu as la méthode de bourrin, qui marche assez bien : tu mets tous les nombres possibles dans une liste.
    Tant que la taille de la liste est supérieure à 1 :
    - L'IA propose un nombre au hasard parmi la liste
    - Tu reçois la réponse de l'utilisateur, et tu supprimes de la liste tous les nombres qui sont incompatibles avec cette réponse

    Quand la liste est de taille 1, elle contient la solution.
     
  10. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 569
    Points:
    185
    Sexe:
    Homme
    Pour les intéressés, j'ai fait le truc en JS (parce que ça ressemble plus à du pseudo code)
    (cc @Nolan-XX & @pifou92000 )


    Code (cpp):
    var solution = [1, 5, 3, 3];
    var MAX = 4;

    var known = null;
    var numbers = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    var guess, correctGuess = [];


    /**
    * First tests
    */

    for (var number = 0; number <= 9; number++) {
        guess = [number, number, number, number];
        var res = checkGuess(guess);
        numbers[number] = res[0];
        console.log(JSON.stringify(guess) + " => " + JSON.stringify(res));
    }

    console.log(JSON.stringify(numbers));

    var wrongNumber = numbers.indexOf(0); // We need a wrong number to fill the guesses
    for (var numberAsKey in numbers) {
        number = Number(numberAsKey);
        if (numbers[number] != 0) {
            var currentCorrects = 0;
            var countOfGoodNumber = 0;
            do {
                for (var i = 0; i <= countOfGoodNumber; i++) {
                    guess[i] = number
                }
                guess.fill(wrongNumber, countOfGoodNumber);
                var res = checkGuess(guess);
                if (res[0] > currentCorrects) {
                    correctGuess[countOfGoodNumber - 1] = number;
                    currentCorrects++;
                }


                countOfGoodNumber++;
            } while (currentCorrects < numbers[number]);
        }
    }

    console.log("correct guess: " + JSON.stringify(correctGuess));


    function checkGuess(guess) {
        var results = [0, 0, 0];
        for (var i = 0; i < solution.length; i++) {
            if (solution.indexOf(guess[i]) != -1) {
                if (solution[i] == guess[i]) {
                    results[0]++; // Good position
                }
                else {
                    results[1]++; // Wrong position
                }
            }
            else {
                results[2]++; // Wrong number
            }
        }
        return results;
    }


    (ça tourne sur la console JS de Chrome ou avec NodeJS.)

    En fait, je fais les premiers tests pour savoir quels sont les nombres justes et combien il y en a.
    Après, je fais une boucle sur ces nombres, et je commence par tester [nombre juste, mauvais nombre, mauvais nombre, mauvais nombre].
    Et dès que le compte de nombre valide augmente, je sais qu'il est bien placé.
    Puis ça jusqu'à ce que le compte de nombre valide soit égal à celui que j'ai trouvé au début.
    Et je me retrouve avec la bonne solution.
     
  11. tipigeon

    tipigeon That's just like...Your opinion man
    Membre Premium

    Inscrit:
    15 Mai 2012
    Messages:
    4 208
    Points:
    234
    Sexe:
    Homme
    J'espère au moins que dans Mass Effect andromeda on vera enfin des putain de Quariens sans leurs casques :c
     
  12. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 244
    Points:
    304
    Sexe:
    Homme
    Dites, c'est moi où Blood and Wine fait 35 Go ?

    J'aimerais bien l'acheter tout de suite, mais avec une suite d’éventement inattendus (consanguins d'SFR), je dois me dépatouiller avec la 4G de mon portable ...
     
  13. Elliotau78

    Elliotau78 Résident du Nether

    Inscrit:
    8 Déc 2012
    Messages:
    4 614
    Points:
    184
    Sexe:
    Homme
    J'éspère surtout pouvoir le faire tourner :'(.
     
    • J'aime J'aime x 1
  14. pifou92000

    pifou92000 Mineur de Diamants

    Inscrit:
    23 Juin 2011
    Messages:
    2 690
    Points:
    195
    Sexe:
    Homme
    @Seblor je pense que ta solution demande beaucoup plus de tentatives que la mienne pour trouver la bonne réponse. Normalement au mastermind, il y a un nombre maximal de propositions, pour éviter ce genre de stratégie. :p
     
  15. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 569
    Points:
    185
    Sexe:
    Homme
    La solution que demandait @Nolan-XX n'a pas de limite (je lui ai demandé sur Discord), et le nombre maximal de tests au pire des cas est 20, mais je pourrait le faire un peu descendre avec quelques changements dans le code, donc franchement ça va.
     

Partager cette page