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 

Last update :November. 10th, 2017
Current version: 1.3.2.2 tested for joomla 3.8.1 on Windows10/Wamp 3.1.0 64bits(php version: 7.1.9)





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)


(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.

     I- Manipulation
 
   Par défaut JQuickContact parvient avec un formulaire basique  pré-établi contenant les champs suivants:
        1- Nom
        2- Sujet
        3- Message
        4- Captcha à vérifier

Cependant, ce formulaire peut ne pas satisfaire aux besoins des webmasters souhaitant des données supplémentaires (donc des champs supplémentaires) et c'est dans ce cadre que l'architecture du composant a évolué et maintenant elle supporte l'ajout et la suppression de nouveaux champs, aussi la modification des positions de ces champs dans le formulaire.

A noter que des contrôles élémentaires peuvent être portés sur ces nouveaux champs (Valeur minimale ou valeur maximale, la longueur et la largeur aussi...)

Jusqu'à cette dernière version les types suivants sont supportés:
       1- Champ texte
       2- Champ numérique
       3- Champ email
       4- Champ libre
       5- Une zone d'affichage HTML libre**
       6- Champ de type date
       7- Liste déroulante

** les zones html ne sont pas des zones de saisie pour l'internaute mais plutôt des zones dédiées pour l'intégrateur du site afin qu'il ajoute son propre code.

II- JQuickContact et le CSS
     A noter que chaque élément du formulaire généré par JqckXmlEngine est étiqueté donc il est très simple d'attribuer du style à l'élément en question.

III- Le mail
      Le mail qui va être envoyé à l'administrateur du site ou à une personne tierce est totalement customizable.



(EN|US) 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.

I- The component
   
By default JQcuickContact comes with a built-in contact form composed from :

        1- Name (web visitor)
        2- Subject
        3- Message
        4- Captcha

       However, this solution may not satisfy some web designers, simply  because they need an additionnel information (other fields) so, the architecture of the component was rewritten to allow the introduction of additional fields.
 
    Actually, supported fields are   
       Jusqu'à cette dernière version les types suivants sont supportés:
       1- Text field
       2- Numeric field
       3- Email field
       4- Textarea
       5- A raw HTML zone**
       6- Date field
       7- Combo box

** Raw HTML zone is dedicated to the designer to introduce additional html in the form.

II- JQuickContact and  CSS
    Each item in the JQuickcontact has an ID, so a custom style can be applied with no difficulties

III- The mail
    The email that will be sent to the owner of the website (oftently a non IT staff member) can also  be customized.



   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 :





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;