vendredi 11 novembre 2011

Résolution d'une grille Sudoku par backtracking (java implémentation)


J'ai repris un article que j'ai posté sur mon ancien blog sur 1free:
"
 Sudoku solver
Dans ce qui suit on va essayer de proposer des solutions pour la resolution des grilles du jeu Sudoku.

solutions
I. Le backtracking

Algorithme

Fonction resourdreGrille(var entier[][] matrice, var entier posX, var entier posY,int valeurEnCours) : boolean
x1 : Entier
y1 : Entier
Debut
Si x >= 9 Alors
   return true
FinSi
matrice[x][y]:= valeurEnCours
x1:= x
y1:= y
calculElementProchain(x1,y1)
Si(verifGrille(matrice) ET resoudreGrille(x1,y1,1)) Alors
    return true
Sinon
   {
    Si (valeurEnCours < 9) Alors
    {
     valeurEnCours := valeurEnCours + 1
     return esourdreGrille(x,y,valeurEnCours)
    }
    Sinon
     {
      matrice[x][y]:= 0
      return false
     }
    FinSi
}
FinSi
Fin


Indications

Principe : Implementation du backtracking au Sudoku, cet algorithme fonctionne selon ce princip
On cherche la première case vide
On cherche la premiere valeur qui peut affectée a la case sans violer les règles du jeu
2 cas :
Il n'y a pas de valeurs : la grille proposée n'admet pas de solutions ?-> Mauvais chemin : On retourne à la case precedante on prend la valeur correcte suivante et on réitaire
Il y a : On affecte la valeur et on passe a la prochaine case libre et on réitaire!

verifGrille(entier[][]) est une fonction qui verifie l'etat de la matrice à une itération (verifie les regles du jeu) et retourne un boolean indiquant l'etat de la grille calculElementProchain(var entier x,var entier y): retourne l'element prochain concerné par l'alogrithme (une case non pré renseignée)

Code Source en java
Cliquez ici pour voir la source en java


Exemple de résolution

Grille Initiale                      solution
0 0 0 0 0 7 0 8 0          1 9 6 3 2 7 4 8 5
0 0 7 0 5 0 0 0 0          8 4 7 6 5 9 3 2 1
2 0 0 0 0 1 9 0 0          2 3 5 8 4 1 9 6 7
0 8 2 0 0 4 0 7 3          6 8 2 1 9 4 5 7 3
9 0 0 5 0 8 0 0 4  ----  9 7 3 5 6 8 2 1 4
4 5 0 2 0 0 6 9 0          4 5 1 2 7 3 6 9 8
0 0 9 7 0 0 0 0 2          5 1 9 7 3 6 8 4 2
0 0 0 0 8 0 1 0 0          7 2 4 9 8 5 1 3 6
0 6 0 4 0 0 0 0 0          3 6 8 4 1 2 7 5 9
"
Applet d'Essai
Code source

vendredi 19 août 2011

Défilement d'une image php/Javascript

Un bout de code pour défiler un repertoire d'images dans une page web en php:
(Ume image chaque 4 secondes)
"<head>

<title>Defilement images</title>
<meta name="author" content="Wassim Jied coderspirit.blogspot.com" />

</head>
<body onLoad="rotate();">
<?php
$directory_name = "./themes/matrice/img/";
$extensions_ok = array ( ".jpg","jpeg",".gif",".png");
$folder = opendir ($directory_name);
$i = 0;
$photos = array();
while ($file = readdir ($folder))
{
if (in_array(strtolower(substr($file, -4)),$extensions_ok))
$photos[] = $directory_name."/".$file;
}
closedir ($folder);
$count_photos = count ($photos);
?>
<script type="text/javascript">
var rotate_delay = 4000; /*delais en microseconde (4000 = 4 secs)*/
var current = -1;
var photos = [<?php for($i=0;$i<$count_photos;$i++)
{
echo "\"".$photos[$i]."\"";
if($i!=$count_photos-1) echo ",";
}
?>];
function next() {
if (current<photos.length - 1)
++current;
else current = 0;
}
function rotate() {
if(photos.length > 0)
{
next();
document.images.slides.src = photos[current];
window.setTimeout("rotate()", rotate_delay);
}
}
  /*Original code from http://www.developpez.net/forums/d770199/webmasters-developpement-web/javascript/apercu-image-pop-up/ Thanks to the author , modified by WJ*/
function popImage(largeur,hauteur,options){

var top  = (screen.height-hauteur)/2;
var left = (screen.width-largeur)/2;
window.open(document.images.slides.src,"_blank","top="+top+",left="+left+",width="+largeur+",height="+hauteur+","+options);
}

</script>
<center>
<table>
<tr>
<td>
<img src="/" id="slides"  onclick="javascript:popImage(730,620,'menubar=no,scrollbars=yes,statusbar=yes')" style="cursor:pointer;"/>

</td>
</tr>
</table>
</body>

"

dimanche 31 juillet 2011

JQuickContact Composant joomla 1.5/1.6/1.7/2.5/3.x de contact avec captcha


 


JQuickContact  for Joomla 

(FR) JQuickcontact est un composant de contact pour joomla menu d'un champ captcha
    Compatible: joomla  1.5, 1.6, 1.7, 2.5, 3.x
        Depuis 2011 JQuickcontact est un moyen simple pour rester en contact avec les visiteurs du site web grâce à un formulaire simple qui peut être attaché au menu.
       Afin d'être plus souple et plus ouvert, JQuickontact vient d'être entièrement retapé et restructuré;
depuis la version 1.3; pour offrir ^plus de possibilités et de fonctionnalités dans l'avenir proche.


(EN) JQuickcontact is a joomla contact component with captcha field.
    Compatibility: joomla  1.5, 1.6, 1.7, 2.5, 3.x
    Since 2011, jquickcontact offers a sample way to retrieve news and feedbacks from website visitors thanks to a simple form that can be attached to a menu item.
   To be more open and more evolutive, jquickcontact has new a new architecture, and will be able  in a few future versions to offer very interesting use cases.

   Features :
      Customization of contact form labels and length.
      Captcha field.
      Copy of sent mail to website visitor
      Customized mail format.
      Two free html zones to customize form design.
   




   Native french/english translations are integrated to the component
   Les traductions française et anglaise sont natives dans le composant

Get more info about the project at sourcegorge project page :


Last update :September. 02nd, 2016 
Current version: 1.3.1 tested for joomla 3.6.2 on CentOS 6 (php version: 5.5.30)





Feel free to write your comments here.


Earlier versions


Download link / lien de téléchargement (Joomla 1.6/1.7/2.5)
(last release)


Download link / lien de téléchargement (Joomla 1.5)
(last release)




jeudi 21 juillet 2011

Url rewriting pour un composant joomla

Les sef (search engine firendly) urls, sont très pratiques pour un bon référencement.
un url du genre :
http://www.example.com/index.php?option=com_content&view=article&id=1&catid=1&Itemid=50
est très habituels pour ceux qui utilisent joomla.
Ceux qui développent leurs propres composants et qui veulent réecrire ce genre d'url peuvent suivre la démarche suivante:
1- Créer un fichier router.php dans le repertoire du composant.
2-router.php doit contenir les 2 fonctions suivantes:
   [Nom du Module]ContactBuildRoute(&$query){...}
   [Nom du Module]ParseRoute($segments){...}


 exemple: si votre composant s'appelle JoomTest alors les méthodes auront les noms suivants:
  JoomTestContactBuildRoute(&$query){...}
  JoomTestParseRoute($segments){...}

Détails:

  •  La première méthode sert à réecrire l'url, elle retourne un tableau de string (utf-8), que joomla va après les  concatener en les séparant par des '/'
  • La dexième sert à interpreter un url formaté (réecrit) pour retrouver sa forme normale.
    exp: index.php?option=com_content&view=article&id=1 va être transformé en ... /article/1:Bienvenue 
  • Pour la première fonction:
    En entrée un tableau $query.
    En sortie:$segements
    $segments=array();
    $segments[]=$query['
    view'] ;
    $titre = (Requete sql pour retrouver le titre de l'article depuis la base ...);
    $segments[]=$query['
    id'].':'.$titre;
    return $segments;

  • Pour la deuxième fonction, on va faire le chemin inverse:µ
    En entrée: $segments
    En sortie: $vars
    $vars = array();
    $vars['
    view'] = $segments[0];
    $vars['
    id'] = substr($segements[1], 0, (strlen ($segements[1])) - (strlen (strrchr($segements[1],':'))));
    return $vars;