web-dev-qa-db-fra.com

Comment obtenir un seul élément de la permutation d'une liste de chaînes

Je veux garder une seule permutation parmi un ensemble de chaînes et compter l'occurrence de chaque permutation.

Pour rendre les choses plus claires, je veux transformer (par exemple)

ab
acf
ba
cfa
acf

dans

2 ab
3 acf

où 2 et 3 sont le nombre de permutations de {a, b} et {a, c, f} respectivement.

Comment le ferais-tu de la manière la plus simple possible?

4
user123456

Perl à la rescousse!

Perl -lne '$h{ join "", sort split // }++ }{ print "$h{$_} $_" for keys %h' < input_file
  • -n lit l'entrée par ligne
  • -l supprime les nouvelles lignes de l'entrée, ajoute des nouvelles lignes à la sortie
  • split // divise la chaîne en caractères
  • sort les trie (donc l'unicité)
  • join "" crée une chaîne unique à partir de la liste de caractères
  • %h est une table de hachage, les clés sont les chaînes de caractères triés, les valeurs sont des nombres d'occurrences: augmentées (++) à chaque rencontre.
  • }{ "Message d'accueil Eskimo" - sépare le code à exécuter après la fin de la saisie
7
choroba