rendered paste body#! /usr/bin/php<?php/* Shuffle letters ©2006 Xrogaan <xrogaan at gmail dot com> License: GPL Note: this program must be called from the command line.*//* Cette constante passée a true permet de voir comment le script travaille. Ca retourne : * la taille du mot courant * a quoi ressemble la chaine avant d'être mélangée * un jeton pour savoir dans quelle partie du script le mot melangé est passé.*/define('DEBUG',false);$ponctuation = ',;:?.=+-_)(|@#"\'!°[]*%/\\';for($i=0;$i<strlen($ponctuation)-1;$i++) { $pa[]=$ponctuation{$i}; }unset($argv[0],$tmp,$i);/* Si on passe une chaîne entre guillemets (i.e. "ma chaine"), alors il n'y a que deux éléments dans le tableau. Si ce cas ce présente, on fait en sorte que le tableau $argv soie toujours le même. Que l'on passe la chaine entre guillemets ou pas.*/if (strpos($argv[1],' ')!==false) { $argv=explode(' ',$argv[1]);}/* On va parser tout les mots donné, lettre par lettre. * Si la lettre courante n'est pas un caractère de ponctuation et que le mot n'est pas fini, on ajoute la lettre a la variable temporaire. ($tmc) qui sera shufflée en temps voulut. * Si le mot est fini et qu'il fait moin de 3 caractère, on ajoute $tmp au mot de sortie. * Si la lettre courante est un caractère de ponctuation ou si le mot est fini et qu'il fait plus de 3 caratère, on shuffle $tmp et on ajoute au mot de sortie. * Si le caractère courant est de ponctuation et que le mot courant a moin de 3 lettres on ajoute $tmc+le caractère courant au mot de sortie.*/foreach($argv as $k=>$v) { $len = strlen($v); $mots[$k] = ''; // mots de sortie. un $argv dont les mots ont été travaillé. $tmc=''; // temporaire Mot Courant if (DEBUG===true) echo $v." [len: ".$len."]\n"; for($i=0;$i<$len;$i++) { if (!in_array($v{$i},$pa) && $i!=$len-1) { $tmc.= $v{$i}; continue; } if ($i==$len-1 && (strlen($tmc)+1)<=3) { $mots[$k].=$tmc.$v{$i}.(DEBUG===true?'[2]':''); $tmc=''; continue; } if ((in_array($v{$i},$pa) || $i==$len-1) && (strlen($tmc)+1)>=4) { $tlen = strlen($tmc)-1; // Si la lettre courante est en fait un caractère de ponctuation. On récupère la dernière lettre de $tmc pour la mettre dans $last if (in_array($v{$i},$pa)): $last = $tmc{$tlen}.$v{$i}; $tmc = substr($tmc,0,$tlen); else: $last = $v{$i}; endif; $first = $tmc{0}; if (DEBUG) echo var_dump($tmc)."\n"; // ceci va créer un mot sous cette forme [première lettre][lettres melangées][dernière lettre] $mots[$k].= $first.str_shuffle(substr($tmc,1,strlen($tmc)-1)).$last.(DEBUG===true?'[3]':''); $tmc=''; continue; } if (in_array($v{$i},$pa) && strlen($tmc)<=3) { $mots[$k].= $tmc.$v{$i}.(DEBUG===true?'[3]':''); $tmc=''; continue; } $tmc.= $v{$i}; } $mots[$k].=$tmc.(DEBUG===true?'[1]':'');}echo implode(' ',$mots),"\n";?>