16 my $ui = AA::UI->new('');
18 my $back = AA::Background->new('bg');
20 my $title = AA::Label->new('title');
22 'text' => 'Goldbergův algoritmus',
29 for (my $i=0; $i<5; $i++) {
30 my $v = AA::NetV->new("v$i");
34 'label' => ($i == 0) ? "Z" : ($i == 4) ? "S" : $i,
35 'h' => ($i == 0) ? 5 : 0,
41 for (my $i=0; $i<4; $i++) {
42 my $e = AA::NetE->new("e$i", $v[$i], $v[$i+1]);
48 for (my $i=1; $i<@v; $i++) {
49 my $ii = $i; # need to keep a copy in the current closure
50 $v[$i]->Bind('xs', sub { $e[$ii-1]->Get('f') - (($ii == @v-1) ? 0 : $e[$ii]->Get('f')) });
52 $v[4]->{XS}->Set('color', [0,1,0]);
56 $e[$i]->Set('f', $e[$i]->Get('f') + $df);
62 my $h = $v[$i]->Get('h');
63 $v->SetTicker('h', $h, $h+1, 10);
68 AA::Anim->add_final(sub {
69 for (my $i=0; $i<@v; $i++) {
70 $v[$i]->Set('hint', $i == $h);
77 if (!@ARGV || $ARGV[0] eq "1") {
79 sub { flow(0, 5); hint(1); },
81 sub { flow(1, 5); hint(2); },
83 sub { flow(2, 5); hint(3); },
85 sub { flow(3, 5); hint(-1); },
87 } elsif ($ARGV[0] eq "2") {
88 $title->Set('text', "Goldberg v úzkých");
89 for (my $i=0; $i<@v-1; $i++) {
90 $e[$i]->Set('c', 5-$i);
93 sub { flow(0, 5); hint(1); },
95 sub { flow(1, 4); hint(2); },
97 sub { flow(2, 3); hint(3); },
101 sub { flow(2, -1); hint(2); },
103 sub { flow(1, -1); hint(1); },
110 sub { flow(0, -1); hint(2); },
112 sub { flow(2, 1); hint(3); },
115 sub { flow(2, -1); hint(2); },
118 sub { flow(2, 1); hint(3); },
121 sub { flow(2, -1); hint(2); },
125 sub { flow(1, -1); hint(1); },
126 sub { flow(0, -1); hint(3); },
129 sub { flow(2, -1); hint(2); },
130 sub { flow(1, -1); hint(1); },
131 sub { flow(0, -1); hint(-1); },
133 } elsif ($ARGV[0] eq "3") {
134 $title->Set('text', "Goldberg s nejvyšším vrcholem");
135 for (my $i=0; $i<@v-1; $i++) {
136 $e[$i]->Set('c', 5-$i);
139 sub { flow(0, 5); hint(1); },
147 sub { flow(0, -1); hint(2); },
156 sub { flow(1, -1); hint(1); },
157 sub { flow(0, -1); hint(3); },
167 sub { flow(2, -1); hint(2); },
168 sub { flow(1, -1); hint(1); },
169 sub { flow(0, -1); hint(-1); },
172 die "What do you want?\n";
175 $ui->RunScenario($scenario);