Il y a 35 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] Projet inutile : Drunkpipe

n°1957
KnX
To be or not to code.
Posté le 21-02-2004 à 03:25:51  profilanswer
 

Bon le concept de ce programme oh combien somptueusement inutile est d'intervertir l'ordre des lettres a l'interieur des mots ( on a deja vu des illustrations de la chose ), j'ai commencé y'a 1h environ, ca marche grosso modo  ;) Le principe d'utilisation bha ... c'est un pipe. Par exemple avec fortune :

Code :
  1. KnX drunkpipe # fortune | ./drunkpipe
  2. Datrh Vaedr:
  3.         Three is no ecspae. Don't mkae me detsory you.
  4.         puaess Lkue, you do not yet relazie yuor .
  5.         imoptrnaecoYu hvae olny beugn to dsiocevr yuor poewr. Jion me,
  6.         and I wlil cmolptee yuor tarninig. Wtih our cmoibend
  7.         srtnetgh, we can end tihs detsurtcvie cnolfcit and
  8.         brnig oredr to the glaxay.
  9. Lkue Skwylaekr:
  10.         I'll neevr jion you!
  11. Datrh Vaedr:
  12.         If you olny kenw the *poewr* of the drak sdie. Obi-wan
  13.         neevr tlod you waht hpaepend to yuor ftaehr.
  14. Lkue Skwylaekr:
  15.         He tlod me eonguh! He tlod me *you* klield him.
  16. Datrh Vaedr:
  17.         No. *I* am yuor ftaehr.


 
TODO :  
- ajouter un fonction random qui manque cruellement :/
- gerer les accents
- gerer les paramètres pour regler a chaud l'alcolémie ( probabilité d'inversion d'ordre ), me faut le random pour ca ...
- un parametre pour activer le mode tolérant ( toute chaine de plus de 3 lettres ) ou strict ( que des chaines de plus de 3 lettres entourées d'espace
 
et .. le code en cours :D :

Code :
  1. /**********************************************************/
  2. /*                Project Name : DrunkPipe                */
  3. /*                     Version : 0.1a                     */
  4. /*                      Author : KnX                      */
  5. /*                        Mail : KnX@firstream.net        */
  6. /*   Description :                                        */
  7. /*   -------------                                        */
  8. /*     Just a stupid pipe to simulate drunk text ...      */
  9. /*                                                        */
  10. /**********************************************************/
  11. /* les includes */
  12. #include <stdio.h>
  13. /* les define */
  14. #define BUFFER 80 // definit la taille du buffer
  15. #define DRUNK 50 // definit le taux d'alcolemie
  16. /* le code */
  17. int randval() {
  18. return 51;
  19. }
  20. int main() {
  21. unsigned short int i, j;
  22. char c, d, s[BUFFER];
  23. i=0;
  24. s[0]=0;
  25. while ( (c=getc(stdin)) != EOF ) {
  26.  if ( ( (c>64 && c<91) || (c>96 && c<123) ) && (i<=BUFFER) ) { // si c'est une lettre
  27.   s[i++]=c;
  28.  } else if ( s[i] ) { // si on arrive a la fin d'une suites de lettres
  29.   j=i;
  30.   if ( i-->3 || i==BUFFER ) { // on a un mot de plus de 3 lettres ou buffer plein, on melange
  31.    while ( --i>1 ) {
  32.     if ( randval() > DRUNK ) {
  33.      d=s[i];
  34.      s[i]=s[--i];
  35.      s[i]=d;
  36.     }
  37.    }
  38.   } // sinon pas de melange, dans les deux cas, on affiche le string
  39.   for ( i=0; i<j; i++) {
  40.    putc(s[i],stdout);
  41.   }
  42.   putc(c,stdout);
  43.   i=0;
  44.   s[0]=0;
  45.  } else { // dernier cas, un caractère isolé, on affiche
  46.   putc(c,stdout);
  47.  }
  48. }
  49. return 0;
  50. }


 
j'ai fait ca au feeling pour passer le temps et reprendre le coding, tout les commentaires sur mon style ( qui doit être exécrable ), un bug majeur, un bug mineur, un do dièse, une idée ... sont bienviendus :D
 
PS : IMI tech. powha :D
 
[edit]
 
micromodif avant dodo, j'y go !


Message édité par KnX le 21-02-2004 à 03:43:37

---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
mood
Google
Posté le 21-02-2004 à 03:25:51  profilanswer
 

n°1961
xstephx
Sarah!
Posté le 21-02-2004 à 13:06:20  profilanswer
 

de mon temps j'avais fait un 'cow-boyz translator' en perl... en gros pour ecrire C0mMe ç4, c0Mm3 uN m3C Sup3R C0oL... :D mais en gros l'avantage etait que ca traduisait les sorties de tous les programmes et des commandes shell :)


---------------
Gagnez un iPhone en jouant sur www.findupays.be
n°1963
CryoGen
Powered by kitkat©
Posté le 21-02-2004 à 13:17:49  profilanswer
 

C'est marrant ce truc, y'a plus qu'a le renommer "more" et de faire deux ou trois modif , de le copier sur le pc d'un copain ... :D


---------------
I am the bone of my sword...
n°1964
KnX
To be or not to code.
Posté le 21-02-2004 à 13:44:20  profilanswer
 

au passage si kkun peut m'aider pour la fonction pseudo-random, j'en ai trouvé plein, mais generalement trop lourdes pour rien ( genere des double ou des long alors qu'ils me faut bcp moins, utilise des algos super compliqués pr rien, :/ )


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°1967
KnX
To be or not to code.
Posté le 21-02-2004 à 18:36:05  profilanswer
 

version 2, avec au programme, bugfixes et les features qu'il manquait, le reglage et les randoms, si vous trouvez des applications marrantes a ce truc débiles, dites le ( j'ai deja fait un filtre pour mon client mail ^^ ), par contre, j'arrive pas a faire tourner links au travers, tout agit bizarrement :/
 

Code :
  1. /*****************************************************************************/
  2. /*                        Project Name : DrunkPipe                           */
  3. /*                             Version : 0.2a                                */
  4. /*                              Author : KnX                                 */
  5. /*                                Mail : KnX@firstream.net                   */
  6. /*   Description :                                                           */
  7. /*   -------------                                                           */
  8. /*     Just a stupid pipe to simulate drunk text ...                         */
  9. /*                                                                           */
  10. /*   Updates :                                                               */
  11. /*   ---------                                                               */
  12. /*     0.1a) The 1st distributed version.                                    */
  13. /*     0.2a) [BF] Many many many bug                                         */
  14. /*           [FT] Commandline drunkness argument                             */
  15. /*           [FT] Random letter swapping                                     */
  16. /*                                                                           */
  17. /*****************************************************************************/
  18. /******************************* Les Includes ********************************/
  19. /*                                                                           */
  20. #include <stdio.h>
  21. #include <time.h>
  22. /******************************** Les Defines ********************************/
  23. /*                                                                           */
  24. #define BASEDRUNK 50 // définit le taux d'alcolemie par défaut ( sur 100 )
  25. #define BUFFER 80 // définit la taille du buffer
  26. /******************************* Les Variables *******************************/
  27. /*                                                                           */
  28. unsigned long int seed;
  29. /********************************** Le Code **********************************/
  30. /*                                                                           */
  31. int randperc() // une fonction pour avoir des valeurs pseudo-aleatoires sur 100
  32. {
  33. static double a = 1389796, m = 2147483647; 
  34. unsigned int q;
  35. seed *= a;
  36. q = seed / m;
  37. seed -= q*m;
  38. return (seed % 100);
  39. }
  40. int main(int argc, char *argv[]) // bha le main ... :D
  41. {
  42. char  c, d, s[BUFFER], drunkness;
  43. unsigned int i, j;
  44. if ( argc>1 && ( (i=atoi(*++argv))>0 || *argv[0]=='0' ) && i<=100 ) {  // si il y a un argument valide  
  45.  drunkness = i ;       // alors on modifie
  46. } else {        // sinon
  47.  drunkness = BASEDRUNK;      // valeur par défaut
  48. }
  49. (void) time(&seed);  // le seed pour le random
  50. i=0;
  51. s[0]=0;
  52. while ( (c=getc(stdin)) != EOF ) {
  53.  if ( ( (c>64 && c<91) || (c>96 && c<123) ) && (i<=BUFFER) ) { // si c'est une lettre
  54.   s[i++]=c;
  55.  } else if ( s[i-1] ) {  // sinon si on arrive à la fin d'une suites de lettres
  56.   j=i;
  57.   if ( i-->3 ) { // on a plus de 3 lettres ou buffer plein, on melange
  58.    while ( --i>1 ) {
  59.     if ( randperc() < drunkness ) { // si la chance est avec nous
  60.      d=s[i];   //
  61.      s[i]=s[--i];  // on permute    
  62.      s[i]=d;   //
  63.     }
  64.    }
  65.   }
  66.   for ( i=0; i<j; i++) { // on affiche le string
  67.    putc(s[i],stdout);
  68.   }
  69.   putc(c,stdout);  // on affiche le caractère de coupure  
  70.   i=0;   // on fait le vide ...
  71.   s[0]=0;
  72.  } else {  // sinon c'est un caractère isolé, on affiche
  73.   putc(c,stdout);
  74.  }
  75. }
  76. return 0;
  77. }
  78. /*****************************************************************************/
  79. /*                              KnX @ IMI Tech.                              */
  80. /*****************************************************************************/


 
enjoy l'inutilité :D
 
[edit]
 
microbugfix pour pas changer ...


Message édité par KnX le 21-02-2004 à 18:52:53

---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°1980
Dr Lous
I see old password
Posté le 22-02-2004 à 00:12:54  profilanswer
 

trop :lol:
 
c peut etre inutile mais ca permet d'apprends facilement les bases du C :)


---------------
Oseras-tu m'affronter ?
n°1982
Deadog
Dain Bramaged
Posté le 22-02-2004 à 00:38:39  profilanswer
 

nomme mieux tes variables ;)
 
par contre, le "i-->3" m'a parrut bizarre :lol:
 
tu pourrais détecter et isoler un mot dans le flux de donnée ki t'arrive, et renvoyé ce mot vers une fonction chargé de faire le mélange
cette fonction te renvoie le résultat et t'as plus k'a le collé dans la sortie ;)
ça te feras bosser les fonctions et leur passage d'arguments ^^
 
pour pousser plus loin : détecte un mot, copie le dans un buffer alloué dynamiquement, tu passe le buffer en paramètre à la fonction de mélange, et la fonction va faire directement bosser sur l'espace alloué
kan elle a fini, elle renvoie un code d'OK (0 = OK, -1 = ERREUR si y'en as)
t'as plus qu'a renvoyer le contenu du buffer dans la sortie et libérer la mémoire ;)
ça, sa te feras bosser les pointeurs et l'allocation dynamique de mémoire

n°1983
KnX
To be or not to code.
Posté le 22-02-2004 à 00:52:36  profilanswer
 

ouais ca m'a parut bizarre, j'espère qu'il l'interprete correctement, paskeu c'est vrai ca fait bizarre a voir ^^
 
sinon pour les 2 idées, la 1ere ca serait juste deporter un tout ptit bout du code, et faire une fonction avec param je sais deja ;)
 
la seconde idée, avec allocation dynamique, n'a pas que des avantages, allouer les char un par un dans la memoire je doute que ca soit très efficace en terme de rapidité, et pis si jamais un mot est trèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèès long ( mais vraiment très long ) , l'affichage ne sortira rien jusqu'a la fin de ce mot, ce qu'il est pas toout a fait agréable, ou alors faut qu'au bout d'un certains nombres de lettres ca balance, donc le buffer s'arrete a cette longueur "fixe", et on revient a la solution que j'ai employé en gros ( ouais c'est sur y'a rarement des mots de 80lettres mon buffer est super-gros en fait ), qui a pour seule limitation que les lettres du mot n° k*80 et k*80+1 sont fixes, ( ce qui a mon avis est invisible a l'usage ).
 
Me reste plus qu'a faire un peu les menage dans le nom des variables, c'est clair c'est limite ^^ Mauvaise habitude de toujours vouloir faire au plus court, au plus optimisé, au plus illisible :/


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°1984
Deadog
Dain Bramaged
Posté le 22-02-2004 à 01:01:28  profilanswer
 

mais non on fait pas du lettre par lettre
pis t'inquiète pour la rapidité, c pas du script mirc non plus :D
 
expl : tu repères un mot, tu gardes en mémoire la position de départ, tu recherches la position de fin de mot, tu soustrais les 2, hop, t'as la taille du mot
tu alloue un espace mémoire de cet taille + 1
ensuite tu met un pointeur sur la position de départ, et tu utilises strncpy
strncpy(buffer, pointeur_sur_le_bon_endroit, taille_du_mot)
tu rajoutes un 0 à la fin de ton buffer pk'on sait jamais si strncpy le met (jamais compris son fonctionnement, même en lisant le man et le code source :/)
et voila, tu l'as ton buffer ;)
met ça t'oblige à non pas analyser stdin caractère par caractère, mais en totallité
et comme stdin est conscidérer comme un flux FILE, bah ça te feras voir comment on se sert d'un descripteurs de fichier ;)
 
 
bon, y'a aussi bcp plus simple, genre utiliser strtok :whistle:

n°1985
KnX
To be or not to code.
Posté le 22-02-2004 à 01:05:29  profilanswer
 

mmm, le descripteur de fichier ca a l'air phun a voir :S  
par contre, pkoi mon truc marche pas avec links ?


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°1986
Deadog
Dain Bramaged
Posté le 22-02-2004 à 01:09:09  profilanswer
 

links renvoie sur la sortie standart ? j'suis pas sur, ou alors, pas qqlch d'exploitable

n°1987
KnX
To be or not to code.
Posté le 22-02-2004 à 01:09:58  profilanswer
 

oui, mais ca fait des affichages bizarres :/ ( decalages, mise a jour retardées ... enfin buggé quoi )


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°1988
Deadog
Dain Bramaged
Posté le 22-02-2004 à 01:11:54  profilanswer
 

t'a ka l'analyser ligne par ligne ton stdin, t'as fgets pour ça ;)

n°1989
Deadog
Dain Bramaged
Posté le 22-02-2004 à 01:12:36  profilanswer
 

KnX a écrit :

oui, mais ca fait des affichages bizarres :/ ( decalages, mise a jour retardées ... enfin buggé quoi )


 
 
y'a pas une option dans links pour avoir qqlch d'exploitable ?
sinon utilise wget ;)


Message édité par Deadog le 22-02-2004 à 01:12:56
n°1993
KnX
To be or not to code.
Posté le 22-02-2004 à 01:33:29  profilanswer
 

wget ca telechargera, mais chpourais pas drunksurfer :/


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°1994
Deadog
Dain Bramaged
Posté le 22-02-2004 à 01:42:00  profilanswer
 

en bah non, ça doit être plus compliqué alors :D

n°1996
Dr Lous
I see old password
Posté le 22-02-2004 à 02:34:12  profilanswer
 

boire ou surfer faut choize [:dslam]


---------------
Oseras-tu m'affronter ?
n°2067
Mossieur P​ropre
Posté le 29-02-2004 à 15:08:05  profilanswer
 

[:rofl]
 
chuis fan :love:


---------------
Forever Yoko in my heart. | http://www.phoenixfr.org - réseau IRC francophone | knexos xstephx a dit : "blabla"
n°2068
KnX
To be or not to code.
Posté le 29-02-2004 à 15:19:36  profilanswer
 

:D ca fait plaize :)


---------------
/!\ KnX's bash NP : Norah Jones - Don't Miss You At All /!\
n°2096
sam 34
Flexion, extension, connexion
Posté le 03-03-2004 à 20:52:17  profilanswer
 

Ten ca me fait penser aux exos ke lon faisait au premier quad en C.


---------------
.:: Quand la vie n'attend pas ::. .:: The Motard Way Of Life, The Way Of pr00t ::.
.:: >>> Le blog des Etudiants Ambulanciers <<< ::.

mood
Google
Posté le 03-03-2004 à 20:52:17  profilanswer
 


Aller à :
Ajouter une réponse
 

Hit Parade