IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

[Défi] Le Défi Delphi n°5 : Le Sudoku solver


Sujet :

Delphi

  1. #101
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    Citation Envoyé par Montor Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //Intersection 
    function Intersec(c,r,s:integer):integer;
    begin
       result:= lignes[r] and colonnes[c]  and subTabs[s];
    end;
    //premier occurence 
    function PremierOc(c,r,s:integer):integer;
    begin
       result:= Firstidx(lignes[r] and colonnes[c]  and subTabs[s]);
    end;
    peut aussi s'ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //premier occurence 
    function PremierOc(c,r,s:integer):integer;
    begin
       result:= Firstidx(Intersec(c,r,s));
    end;
    PS il est possible de jouer avec les and et les or les shl et shr pour decrementer tes valeurs

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  2. #102
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    comme ca tu perds quelques us

  3. #103
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Points : 212
    Points
    212
    Par défaut ASM
    Merci Mentor c'est exactement se que je cherchais: un autre algo

    L' exemple pour la matrice je l'ai tapé a l'écran et j'ai defait
    oublié un neuf
    Promis elle fonctionne (si on en a besoin)

    Merci
    Boris (je me suis fait expliqué combien ca representait une
    pico secondes :je confondais avec un picon....)
    Papy

    Nul ne pourra jamais vous empêchez d'être libre.

  4. #104
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut a tous !

    Je me posais la question sur l'utilité du X-Wing ... est ce que quelqu'un aurait sous la souris une grille complete ou il existerai un X Wing ? Toutes celles que j'ai (et j'en ai) n'en ont pas !

    Merci !

    Edit : a c'est bon, j'en ai trouvé une !!
    Bon, va falloir coder !

  5. #105
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    voici une procedure qui permet de recuperer la vitesse de cpu ca peut etre utile pour toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     const
    ID_BIT=$200000; // EFLAGS ID bit
     
    function GetCPUSpeed: Double;
    const
    DelayTime = 500;
    var
    TimerHi, TimerLo: DWORD;
    PriorityClass, Priority: Integer;
    begin
    try
    PriorityClass := GetPriorityClass(GetCurrentProcess);
    Priority := GetThreadPriority(GetCurrentThread);
     
    SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
    SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
     
    Sleep(10);
    asm 
    dw 310Fh // rdtsc 
    mov TimerLo, eax 
    mov TimerHi, edx 
    end;
    Sleep(DelayTime); 
    asm 
    dw 310Fh // rdtsc 
    sub eax, TimerLo 
    sbb edx, TimerHi 
    mov TimerLo, eax 
    mov TimerHi, edx
    end; 
     
    SetThreadPriority(GetCurrentThread, Priority); 
    SetPriorityClass(GetCurrentProcess, PriorityClass);
     
    Result := TimerLo / (1000.0 * DelayTime); 
    except end; 
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    var cpuspeed:string;
    begin
    cpuspeed:=Format('%f MHz', [GetCPUSpeed]);
    edit1.text := cpuspeed;
    end;

  6. #106
    Membre averti
    Avatar de Pascal Fonteneau
    Profil pro
    gérant
    Inscrit en
    Février 2007
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : gérant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2007
    Messages : 139
    Points : 352
    Points
    352
    Par défaut Grille avec techniques particulières
    Sur ce site, il existe des grilles avec des exemples 'x-wings' etc...


    http://www.mots-croises.ch/Manuels/Sudoku/


    Pascal

  7. #107
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Points : 212
    Points
    212
    Par défaut
    Un bon programmeur n'utilise pas trop de "IF" ça brise la linéarité de l'automation
    Tu fais quoi dans la vraie vie: prédicateur de branchements?

    J'y vais moi aussi de ma routine ASM (dont je ne suis pas l'auteurr)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    procedure FillMem32(var Buff; Size: Cardinal; Value: Cardinal);
    asm
    {    ->EAX    Pointer to destination  }
    {      EDX    count  }
    {      ECX    value  }
     
            PUSH    EDI
            PUSH    ESI
            MOV    EDI,EAX
            MOV    EAX, ECX
            MOV    ECX,EDX
            SAR    ECX,2
            JS      @@exit
            REP    STOSD
            MOV    ECX,EDX
            AND    ECX,3
            JZ      @@exit
            STOSB
            DEC    ECX
            JZ      @@exit
            SHR    EAX, 8
            STOSB
            DEC    ECX
            JZ      @@exit
            SHR    EAX, 8
            STOSB
    @@exit:
            POP    ESI
            POP    EDI
    end;
    Comme son nom l'indique elle initialise une zone mémoire avec une vcaleur sur 32 bits. Par définition 4 fois plus rapide qu'un fillchar..
    Pour initialiser lignes,colonnes...
    elle accepte les longueurs qui ne sont pas modulo 8
    Size est le nombre de byte pas d'int64
    Boris
    Papy

    Nul ne pourra jamais vous empêchez d'être libre.

  8. #108
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par Pascal Fonteneau Voir le message
    Sur ce site, il existe des grilles avec des exemples 'x-wings' etc...


    http://www.mots-croises.ch/Manuels/Sudoku/


    Pascal
    Merci, c'est en fait sur ce site que je les ai trouvé les grilles !

  9. #109
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    Citation Envoyé par FullSpeed
    Avant de pouvoir attaquer une série il vous faudra AU MINIMUM
    faire 9 hypothèses soit 5^9 (1 953 125) essais
    Comment vous en rendre compte...
    effectivement c'est impossible mais si un jour quelqu'un arrive à linéariser les grilles tu peux utiliser la recherche dichotomique.
    cest terminer pour moi bonne chance

  10. #110
    Membre éprouvé
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Points : 963
    Points
    963
    Par défaut
    mon code a trebucher sur ces grilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    000 000 000
    000 390 280
    040 021 093
    600 070 900
    900 502 006
    005 060 001
    180 250 030
    064 018 000
    000 000 000
     
    100 007 090
    030 020 008
    009 600 500
    005 300 900
    010 080 002
    600 004 000
    300 000 010
    040 000 007
    007 000 300

    mick tu dois integrer plisieus solveurs si tu veux gagner
    je viens de trouver sur un jeu :
    Pair
    Triple
    X wing
    Swordfish
    Multi
    SolveByCell
    SolveBySingleCan
    SolveByLockedCan
    SolveByRepeatCan
    SolveByFishCan
    SolveByMultiColor
    SolveByLogic
    bonne chance a vous tous

  11. #111
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par Montor Voir le message
    mon code a trebucher sur ces grilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    000 000 000
    000 390 280
    040 021 093
    600 070 900
    900 502 006
    005 060 001
    180 250 030
    064 018 000
    000 000 000
     
    100 007 090
    030 020 008
    009 600 500
    005 300 900
    010 080 002
    600 004 000
    300 000 010
    040 000 007
    007 000 300
    Mon solveur résoud la premiere sans utiliser toutes ses techniques ...
    Quand a la deuxieme, ca m'aurait (agréablement) étonné qu'un solveur logique la résolve ... c'est AI Escargot !!


    Citation Envoyé par Montor Voir le message
    mick tu dois integrer plisieus solveurs si tu veux gagner
    je viens de trouver sur un jeu :
    Pair .....................//fait
    Triple...................//fait
    X wing.................//en cours
    Swordfish
    Multi ....................????
    SolveByCell............//fait
    SolveBySingleCan....//fait
    SolveByLockedCan......//fait
    SolveByRepeatCan.......//fait
    SolveByFishCan.............???
    SolveByMultiColor............???
    SolveByLogic..................???
    bonne chance a vous tous
    Quelles sont les techniques qui ont des points d'interrogation ??
    Qu'entends tu par plusieurs solvers ?? Plusieurs techniques de résolution ? Si c'est cela, oui, c'est le cas !!

  12. #112
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Points : 212
    Points
    212
    Par défaut Examples
    Mick je te conseille ce logiciel
    http://pgailhac.free.fr/index.html
    Il utilise un certain nombre de techniques et a surtout des exemples de chaque .

    Boris
    Papy

    Nul ne pourra jamais vous empêchez d'être libre.

  13. #113
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par FullSpeed Voir le message
    Mick je te conseille ce logiciel
    http://pgailhac.free.fr/index.html
    Il utilise un certain nombre de techniques et a surtout des exemples de chaque .

    Boris
    Merci

  14. #114
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    cool ce défi.

    on peut faire un solver avec un algorithme génétique ou c'est la vitesse à tout prix?
    Akim Merabet

  15. #115
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Non, ce n'est pas la vitesse qui compte ... (enfin, on veut la réponse dans l'heure ^^ )
    Tu peux faire n'importe quel algo, et c'est meme le bienvenu ! Ca ne sera pas interressant si tout le monde a un brute force !

    Bonne chance

  16. #116
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kaféine Voir le message
    cool ce défi.

    on peut faire un solver avec un algorithme génétique ou c'est la vitesse à tout prix?
    Les pré-requis ainsi que les critères de notation sont définis dans la page du défi. Et non la vitesse ne sera pas le seul critère déterminant, soyez créatif dans votre programme .
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  17. #117
    Membre averti
    Avatar de Félix Guillemot
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 149
    Points : 386
    Points
    386
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Les pré-requis ainsi que les critères de notation sont définis dans la page du défi. Et non la vitesse ne sera pas le seul critère déterminant, soyez créatif dans votre programme .
    Je confirme, ceci n'est pas un benchmark pour microprocesseurs ou un concours d'assembleur mais bien défi Delphi (= un jeu) dont les règles ont été clairement définies dès le départ.
    Donc il est ouvert à tous, et toutes les idées sont les bienvenues.
    Amusez vous bien

  18. #118
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Points : 212
    Points
    212
    Par défaut ASM
    L'ASM fait partie de Delphi. On peut donc a priori s'en servir?
    J'utilise une seule routine ASM de (3) trois instructions.(usage REP)
    C'est permis?
    Boris
    Papy

    Nul ne pourra jamais vous empêchez d'être libre.

  19. #119
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par FullSpeed Voir le message
    L'ASM fait partie de Delphi. On peut donc a priori s'en servir?
    J'utilise une seule routine ASM de (3) trois instructions.(usage REP)
    C'est permis?
    Boris
    Ben ouais, bien sur. Ce qu'il voulait dire, c'est que le but n'est pas de coder en assembleur, pas que c'était interdit ...
    Mais il parait que ca n'apporte guere d'améliorations ...

  20. #120
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Points : 212
    Points
    212
    Par défaut ASM
    Cela apporte seulement si cela a besoin accéder a des techno non disponibles dans le langage Par exemple si tu veux utiliser le MMX ou les capacités SSE2 tu es obligé de passer en ASM. Mais pour faire un inttostr ou un Pos on peut aller plus vite en ASM mais c'est tellement plus agréable d'utiliser la RTL ou al:ors dans des optiques de vitesse pure ou les compilateurs sont generiques et ne savent pas se montrer astucieux comme un humain qui verra la particularité de la situation.
    C'est pour cela que je dis pourquoi j'utilise de l'ASM je ne sais pas comment faire un xchange et un REP en Pascal.

    Je pense avoir trouver une fonctionnalité sympa pour les juges.J'espère qu'ils aimeront! Tu t'en sors de ton solveur logique?. Moi je sais que c'était pas la programmation des méthodes qui m'avaient arrêté mais leur enchainement pour faire un produit complet

    Bon je retourne à mon code
    Boris
    Papy

    Nul ne pourra jamais vous empêchez d'être libre.

Discussions similaires

  1. Défi Migration de delphi 3 à delphi 8
    Par sitalebs dans le forum EDI
    Réponses: 8
    Dernier message: 03/01/2008, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo