Schrift
[thread]8465[/thread]

Buchstaben generieren: Bruteforce-aehnlich



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
styx-cc
 2006-11-03 00:46
#71312 #71312
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hoi hoi, ich verusche gerade aus Spass Buchstaben zu generieren, das ganze soll am Ende so aussehen:

AAA
AAB
AAC
ABA
ABC
ACA
ACB
ACC
BAA
BAB
BAC
BBC

und so weiter, ich denke das ist sehr Bruteforce aehnlich..
Hab da jetzt zwei abende getueftelt, aber irgendwie will das nich :(
Hier mal mein Loesungsansatz:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl -w
use strict;

my @zeichen = ("A".."C");
my $laenge = 3;
my $start = 0;
my $pos = $laenge;

my %string = {"1" => 'A', "2" => 'A', "3" => 'A'};

my $i=0;

while ($pos >= 1) {

for my $aktuell (@zeichen) {
$string{$laenge} = $aktuell;
print $string{$_} for (1..$laenge);
print "\n";
}
if ( $string{$pos} eq $zeichen[scalar(@zeichen)-1] ) {
$pos--;
$i=0;
$string{$laenge} = $zeichen[0];
}
$string{$pos} = $zeichen[$i];
$i++;
}


Allerdings tut es nicht wirklich was es soll.
Ich will auch kein Modul benutzen oder n Quelltext vorgesetzt bekommen, soll ja ne Denkaufgabe sein, aber nen kleinen Schubser vielleicht? ;)

MfG

P.s.: deutsche bezeichener habe ich hier mal genommen weil ich da einfach nich mehr durchgeblickt habe
Pörl.
esskar
 2006-11-03 09:25
#71313 #71313
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wie wäre es mit 3 schleifen? in einander verschachtelt.
die alle von A .. C gehen?
pq
 2006-11-03 09:44
#71314 #71314
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
einfach, aber nicht so spassig:
my @letters = "AAA" .. "CCC";
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Linuxer
 2006-11-03 10:24
#71315 #71315
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
[quote=pq,03.11.2006, 08:44]einfach, aber nicht so spassig:
my @letters = "AAA" .. "CCC";[/quote]
das verwendet aber mehr als nur A, B und C... nämlich alle Grossbuchstaben ...

edit:
Man kann das Ergebnis ja wieder einschränken:
@letters = grep { m/[ABC]{3}/ } ( 'AAA' .. 'CCC' );\n\n

<!--EDIT|Linuxer|1162542660-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
styx-cc
 2006-11-03 11:49
#71316 #71316
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Das sind ja schon mal ganz nette Antworten, aber eigentlich habe ich geplant, das "A".."C" genau so gehen sollte wie "A".."Z", sprich er soll alles beachten was an @zeichen so da ist..
So das ich Ihm auch noch 0..10 mit-geben koennte, nur diese 3 Zeichen waeren ja einfach ;)

Und da die laenge des Strings js unterschiedlich sein kann, weiss ich vorher nicht wie viele Schleifen ich drum packen muesste..

MfG
Pörl.
esskar
 2006-11-03 12:12
#71317 #71317
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ja dann such mal nach dem stichwort permutation
renee
 2006-11-03 12:58
#71318 #71318
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/perl

use strict;
use warnings;
use Math::Combinatorics;

my @zeichen = ('A'..'C');
my $count = 3;

my $combo = Math::Combinatorics->new( count => $count,
data => [(@zeichen) x $count]);

while(my @combo = $combo->next_combination){
print join(' ', @combo)."\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
styx-cc
 2006-11-04 03:48
#71319 #71319
User since
2006-05-20
533 Artikel
BenutzerIn

user image
[quote=esskar,03.Nov..2006, 11:12]ja dann such mal nach dem stichwort permutation[/quote]
Das war was ich gesucht hab, danke :)
Pörl.
Ronnie
 2006-11-04 11:44
#71320 #71320
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ich biete mal eine andere Variante an, dreister Weise als ruby-code:
Code: (dl )
1
2
3
4
5
6
7
#!/usr/bin/env ruby -w

substitute = { '0' => 'A', '1' => 'B', '2' => 'C' }

(0 .. 26).each do | i |
puts i.to_s(3).rjust(3, '0').gsub(/./) { | k | substitute[k] }
end

Die Idee dahinter ist einfach. Man braucht nur in einem Zahlensystem zur Basis 3 hochzuzählen und dann die einzelnen Ziffern durch die Buchstaben zu ersetzen.\n\n

<!--EDIT|Ronnie|1162638311-->
renee
 2006-11-04 20:16
#71321 #71321
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ronnie hat mich per Mail darauf aufmerksam gemacht, dass der Math::Combinatorics-Code mehr Kombinationen ausgibt als gewünscht. Hier der korrigierte Code:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;
use Math::Combinatorics;

my @zeichen = ('A'..'C');
my $count = 3;
my %permute;

my $combo = Math::Combinatorics->new( count => $count,
data => [(@zeichen) x $count]);

while(my @combo = $combo->next_combination){
$permute{join(' ', @combo)} = 1;
}

print join "\n",keys %permute;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2006-11-03 00:46.