En Perl, comment puis-je générer toutes les combinaisons possibles d'une liste?
J'ai un fichier avec une liste, et un besoin de faire un fichier qui compare chaque ligne à l'autre. par exemple, mon fichier a ceci:
AAA BBB CCC DDD EEE
Je voudrais la liste finale pour ressembler à ceci:
AAA BBB AAA CCC AAA DDD AAA EEE BBB CCC BBB DDD BBB EEE CCC DDD CCC EEE DDD EEE
Je suis en train de le faire en Perl, pour cette première fois et je suis d'avoir un peu de mal. Je sais que vous avez besoin de faire un tableau, et de la diviser ensuite, mais après cela, je vais avoir quelques problèmes.
Merci de poster votre jusqu'à présent code.
OriginalL'auteur user1352084 | 2012-04-24
Vous devez vous connecter pour publier un commentaire.
Utilisation Algorithme::Combinatoire. L'itérateur est une approche préférable de générer tout à la fois.
De sortie:
OriginalL'auteur
Il est simple d'écrire cela en utilisant la récursivité.
Cet exemple de code montre.
Modifier
Mes excuses - j'étais à générer des permutations au lieu de combinaisons.
Ce code est correct.
sortie
OriginalL'auteur
Prendre un coup d'oeil à Math::Combinatoire - Effectuer des combinaisons et permutations sur les listes
exemple de copie à partir du CPAN:
Intension était de gauche un peu de travail pour l'OP.
OriginalL'auteur
OriginalL'auteur
Comment sur:
de sortie:
Entendez-vous les "effets secondaires" de fichiers correspondants dans le répertoire de travail actuel? Si oui, n'est-ce pas parfaitement sûr car il n'est pas à l'aide de
?
,[]
ou*
?Tout cela. Je suis ennuyé maintenant, les mises en garde doivent être clairement définies dans le cadre de la réponse, pas de rhétorique questions attaché comme un commentaire avec une faible visibilité. Ce n'est pas un "effet secondaire", il se passe vraiment, modalising le mot est mauvais. Il n'est pas sûr: bien évidemment l'utilisateur à condition que faites-up/données anonymisées dans la question et sera dans une mauvaise surprise en vertu des conditions du monde réel. DONC, les réponses devraient s'efforcer de ne pas mettre les gens à l'échec, ils doivent être toujours au courant des subtilités et des risques; étant donné que j'ai maintenant downvoted cette réponse à donner M42 une incitation à améliorer. -- a continué:
Je recommande Texte::Glob::Développez ou String::Glob::Permuter sur la plaine de glob, si ce n'est que la documentation est meilleure et ils ne la manipulation des structures de données en mémoire, ne sont pas influencés par des facteurs externes comme la coquille ou ce qui est dans le répertoire courant.
C'est un bon point. Citant des effets secondaires a été conçu comme une blague: je suis d'accord que n'est pas le meilleur endroit pour enseigner à ces sortes de trucs.
OriginalL'auteur
Voici un hack en utilisant
glob
:La sortie:
P. S. vous pouvez utiliser
Text::Glob::Développez
ouString::Glob::Permuter
modules au lieu de la plaineglob()
pour éviter la mise en garde de fichiers correspondants dans le répertoire de travail courant.OriginalL'auteur