Ce code est plus un jeu perso qu'une contribution a grande échelle. Mais ca peut toujours en amuser d'autres.
Vous devez passer une phrase au programme. Disons la phrase "Ma mère aime les glaces a la fraise."
Le code va, mots par mots, tout en gardant la première et dernière lettre intacte, mélanger les lettres.
Ce qui va donner quelque chose comme : "Ma mrèe aime les gleacs a la fsriae."
Pourquoi faire ? Il n'y a aucuns intérets a rendre illisible un texte, alors que nous nous battons contre le SMS !
Et bien, pour toute réponce, essayez de lire ceci :
L'Orthographe est importante et je le consède très volontié. Mais voyez-vous le ceverau dnas son apnpretssaige de la lagnue écirte, proèdce beucoaup par asociastoin intitiive dans un prmieer tmeps. Et l'analsye gramamtialce et syntahxqiue siut par la sutie. Un txete est poterur d'ideés et son ésesnce puet-êrte dédiute dnas une prmeière aprocphe snas torp firae de tcehnicliaté gramaitmcale. La prueve c'est que vuos aevz put lrie ce psote.
Maintenant, vous voyez qu'il existe vraiment deux approche à la lecture d'un texte, et cela découle directement des propriétés d'analyse et d'association du cerveau. Ce dernier commence par faire des regrouppement avec les espace, cherche et associe et peut comprendre, c'est une capacité d'adaptation et de culture, l'annalyse plus détailler vient seulement ensuite.
Avez-vous trouvé une utilisation a ce code ?
ATTENTION : Ce programme doit être appellé uniquement en ligne de commande. Pourquoi ? Hé bien, je n'avais pas envie d'ouvrir mon navigateur a chaque fois que je devais utiliser mon petit bijou.
Pour les systèmes en UTF-8, veillez a mettre le charset de votre console en iso-8859-1. Sinon vous risquez d'avoir des soucis avec le retour ...
Source / Exemple :
#! /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.
$ponctuation = ',;:?.=+-_()|@#"\'!°[]*%/\\{}^$£~';
unset($argv[0]);
$argv_num_field = count($argv);
if ($argv_num_field==0)
die("Usage : shuffle.php \"Some Words\"\n");
/*
Si on passe une chaîne entre guillemets (i.e. "ma chaine"), alors il n'y a que deux éléments dans le tableau, ou plusieurs éléments avec des espaces.
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.
$argv = implode(' ',$argv);
$argv = explode(' ',$argv);
if (in_array('--debug',$argv)) {
$flip = array_flip($argv);
unset($argv[$flip['--debug']]);
define('DEBUG',true);
}
/*
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é.
- /
if (!defined('DEBUG'))
define('DEBUG',false);
/*
Formate un message avec les arguments fournis
debug('code php',val,val,val ...);
function debug() {
if (!DEBUG)
return '';
$args = func_get_args();
list($_,$r) = each($args);
// ici on regarde si il faut ou pas évaluer la chaine passée a la fonction.
if ($no_eval = strpos($r,'!eval;') !== false)
$r = str_replace('!eval;','',$r);
// S'il n'y a pas de valeurs a passer, on envoie le tout
if (func_num_args()==1 && $no_eval !== false):
return $r;
elseif (func_num_args()==1 && $no_eval === false):
$e = eval($r);
if ($e===false)
trigger_error('The string "'.$r.'" cannot be evaluated ',E_USER_ERROR);
return true;
endif;
unset($args[0]);
if ($no_eval===false):
$e = eval(vsprintf($r,$args));
if ($e===false)
trigger_error('The string "'.$r.'" cannot be evaluated ',E_USER_ERROR);
return $e;
else:
return vsprintf($r,$args);
endif;
}
debug('error_reporting(E_ALL);');
for ($i=0;$i<strlen($ponctuation)-1;$i++) { $pa[]=$ponctuation[$i]; }
/*
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
debug('echo "%s [len: %s]\n";',$v,$len);
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('!eval;[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];
debug('global $tmc;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('!eval;[3]');
$tmc='';
continue;
}
if (in_array($v[$i],$pa) && strlen($tmc)<=3) {
$mots[$k].= $tmc.$v[$i].debug('!eval;[4]');
$tmc='';
continue;
}
$tmc.= $v[$i];
}
$mots[$k].=$tmc.debug('!eval;[1]');
}
echo implode(' ',$mots),"\n";
?>
Conclusion :
Alors, je ne compte pas mettre a jour, je ne compte pas non plus faire une prochaine version.
Vous pouvez toujours venir sur mon blog (
http://xrogaan.intuxication.org ), ca lui fera plaisir.
Pour toute question, demande d'aide, dons, chien abandonné, vénération ou que sais-je vous pouvez laisser un petit commentaire. (ou gros, c'est vous qui voyez !)
J'ai mis ce code en initié, c'est ma valeur personnel. Maintenant, je veux bien mettre expert si personne comprend ou débutant si vous etes tous des geeks confirmé.
j'ai aussi mis dans "Application", catégorie qui, pour moi, est la plus adaptée. C'est aussi un style de cryptage ou encore quelque chose "Divers" ... Bref, on sais pas trop c'est quoi.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.