Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/06/2012, à 00:21

gadgetroch

Permutation de chaînes de caracteres

Bonjour smile

En fait je cherche une commande permettant la permutation de chaines de caracteres.

Exemple :

@%%%%
%@%%%
%%@%%
%%%@%
%%%%@

ou encore :

@@%%%
@%%%@
%%%@@
etc...

Existe-il une commande ou une suite de commande permettant de faire cela facilement ?

Merci smile

Hors ligne

#2 Le 10/06/2012, à 03:51

nesthib

Re : Permutation de chaînes de caracteres

Il y a des dizaines de façons d'effectuer cette opération.

Voici un exemple simple en bash pur.

pour une permutation vers la gauche :

VAR='12345'
for ((i=1;i<=${#VAR};i++))
do
  VAR=${VAR:1}${VAR:0:1}
  echo ${VAR}
done

pour une permutation vers la droite :

VAR='12345'
for ((i=1;i<=${#VAR};i++))
do
  VAR=${VAR: -1:1}${VAR:0:-1}
  echo ${VAR}
done

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 10/06/2012, à 05:21

pingouinux

Re : Permutation de chaînes de caracteres

Bonjour,
En python, il y a la fonction permutations, du module itertools, qui fait ça :

$ cat permutations.py
#! /usr/bin/python
# -*- coding: utf-8 -*-

import sys
from itertools import permutations

def print_iterateur(it) :
   while True :
      try : print(''.join(next(it)))
      except StopIteration : break

it=permutations(sys.argv[1])
print_iterateur(it)
$ ./permutations.py 456
456
465
546
564
645
654

Hors ligne

#4 Le 10/06/2012, à 05:45

nesthib

Re : Permutation de chaînes de caracteres

@pingouinux : j'avais compris la demande de gadgetroch comme étant une permutation de caractères dans le sens d'une rotation de la chaîne, mais c'est vrai qu'on peut aussi le prendre du point de vue de dénombrement.
Le résultat est cependant totalement différent.
Les exemples de gadgetroch sont un peu ambigus mais je dois dire que je les ai compris dans le sens d'une rotation de la chaîne de caractères, auquel cas ta solution ne correspondrait pas. À l'inverse, d'un point de vue dénombrement par permutation ma solution ne donnerait pas tous les composants.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 10/06/2012, à 05:55

gadgetroch

Re : Permutation de chaînes de caracteres

Et si je souhaite une repetition sans double ?

Exemple : (et si je peux avoir du concret pour celui ci s'il vous plait)

@@%%%
@%@%%
@%%@%
@%%%@
etc...

Y a t il un moyen ? De preference en commande linux, sinon autrement

Hors ligne

#6 Le 10/06/2012, à 06:01

pingouinux

Re : Permutation de chaînes de caracteres

@nesthib :
Je suis d'accord avec toi, la demande est ambiguë, et nos solutions respectives ne répondent pas à la même question.
On peut aussi envisager d'utiliser plusieurs fois le même caractère, comme dans la seconde série de gadgetroch. À  lui de nous préciser sa demande.

Hors ligne

#7 Le 10/06/2012, à 06:04

pingouinux

Re : Permutation de chaînes de caracteres

$ ./permutations.py @@%%% | sort -u
@@%%%
@%@%%
@%%@%
@%%%@
%@@%%
%@%@%
%@%%@
%%@@%
%%@%@
%%%@@

Hors ligne

#8 Le 10/06/2012, à 06:19

nesthib

Re : Permutation de chaînes de caracteres

@gadgetroch : au vu de ton second message, la demande est effectivement ambiguë. Pour une séquence '123' veux tu :
une rotation de la chaîne de caractère

123
231
312

ou une permutation au sens mathématique du terme :

123
132
213
231
312
321

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#9 Le 10/06/2012, à 08:19

gadgetroch

Re : Permutation de chaînes de caracteres

Une permutation

Hors ligne

#10 Le 10/06/2012, à 17:28

nesthib

Re : Permutation de chaînes de caracteres

Donc la solution de pingouinux.
Sinon une question de curiosité, pourquoi cherches-tu à faire ça ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#11 Le 11/06/2012, à 09:30

gadgetroch

Re : Permutation de chaînes de caracteres

J'essai de m'améliorer en linux c'est pour ça, la j'ai fait des recherche sur le grep ( voir un autre post ) je me suis aussi amusé avec le sed pour essayer d'ajouter des lignes dans un fichier mais pour les permut j'avais vraiment du mal smile

Hors ligne

#12 Le 11/06/2012, à 13:15

nesthib

Re : Permutation de chaînes de caracteres

OK. C'est tout à ton honneur de vouloir t'améliorer !
Je ne sais pas quels sont tes objectifs mais il y a deux composantes à ce que tu appelles (un peu abusivement) « s'améliorer en *linux* », apprendre à se servir de la ligne de commande et des outils existants, et apprendre à créer des choses un peu plus évoluées (scripts, petits programmes).

Bon courage


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#13 Le 11/06/2012, à 15:37

gadgetroch

Re : Permutation de chaînes de caracteres

J'ai déjà créer des scripts ^^

Hors ligne