Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6573[/thread]

RDW #A - Raetsel der Woche Nummer A

Tags: Similar Threads

Reader: 1


<< |< 1 2 3 >| >> 30 entries, 3 pages
esskar
 2004-12-15 04:52
#49978 #49978
User since
2003-08-04
7321 articles
ModeratorIn

user image
RDW #A - Raetsel der Woche Nummer A
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Regeln:  * Bitte nicht vor Ablauf der ersten 120 Stunden ( = fünf Tage ) nach
~~~~~~~    Veroeffentlichung Hinweise (Spoiler) oder Loesungen veroeffent-
           lichen!

         * Wenn diese Zeit abgelaufen ist, werde ich einen Thread mit passen-
           dem Titel erstellen, in dem die Loesungen gepostet werden und dis-
           kutiert werden koennen.

         * Die Loesungen sollten nicht nur gepostet, sondern auch an mich ge-
           mailt werden, damit ich sie testen, "bewerten"  und zusammenfassen
           kann. Die Adrese dafuer lautet:

           esskar <---AT---> perl <---MINUS---> community <---DOT---> de

           Im Betreff sollte 'RDW' und die Nummer des Raetsels stehen. Hilf-
           reich waere neben dem Quellcode der Username im Forum sowie Perl-
           und OS-Version, falls Du diese kennst.

         * Verstaendnisfragen duerfen in diesem Thread gestellt werden, aber
           Tipps und (Teil-) Loesungen sind hier unerwuenscht.

         * Ich werde die eingeschickten Programme im Netz zur Verfuegung
           stellen, so dass gerade lange Quellcodes nicht (komplett)
           gepostet werden muessen.

         * Zur Verwendung von Modulen: Ich moechte diese nicht generell aus-
           schliessen, aber wenn quasi die komplette Aufgabe durch die Ver-
           wendung eines Moduls ersetzt werden kann, ist dies vielleicht nicht
           der Sinn der Aufgabe gewesen.



Aufgabe: Alle sichtbaren Rechtecke bestimmen
~~~~~~~~

         (Dieser Vorschlag stammt von mir, Fragen bitte an mich richten =)
       
         Schreibe eine Funktion rdw_a die als Parameter ein
         Array unbestimmter Größe von Array-Referenzen
         nimmt. Jede Array-Referenz enthält vier Zahlen  
         (unsigned integer/natürliche Zahlen), die für die
         Koordinaten eines Recteckes stehen. Nun soll die Funktion die Anzahl der
         sichtbaren Rechtecke zurückgeben, würde man sie zeichnen.
         
         Es werden keine doppelten Rechtecke in der Liste vorkommen!
         Alle Rechtecke werden eine Fläche haben!
         
         Beispiel1: Gegeben sind zwei Rechtecke: A(0,0, 5,5) und B(3,3, 7,7).
         Würde man diese Rechtecke in ein Koordinatensystem zeichnen, würden 3 Rechtecke
         sichtbar: einmal A, B und das durch die Überlappung von A mit B entstehende.
         
         Beispiel2: Aus A(1,3, 2,0) und B(0,2, 3,1) entstehen 11 Rechtecke!
         
         Hauptbewertungskriterium ist speed.
         
         
         Damit noch klar ist, wie der Funktionsaufruf von rdw_a auszusehen hat, hier nochmal
         obige Beispiele:
         
         rdw_a([0, 0, 5, 5], [3, 3, 7, 7]);
         
         rdw_a([1, 3, 2, 0], [0, 2, 3, 1]);
         
         Viel Spass. :)
Crian
 2004-12-15 16:32
#49979 #49979
User since
2003-08-04
5826 articles
ModeratorIn
[Homepage]
user image
> Beispiel2: Aus A(1,3, 2,0) und B(0,2, 3,1) entstehen 11 Rechtecke!

Wie denn? Ich "seh" nur fünf.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Taulmarill
 2004-12-15 16:42
#49980 #49980
User since
2004-02-19
1749 articles
BenutzerIn

user image
nunja, die fehlenden 6 entstehen dadurch, dass man aus den passenden linien zweier nebeneinader liegenden kleinen rechtecke ein grösseres machen kann u.s.w.
also die beiden rechtecke [1,3, 0,2], [1,2, 1,2]
würde zu folgendem ergebniss führen: [1,3, 2,2], [1,3, 2,1], [1,3, 2,0], [1,2, 2,1], [1,2, 2,0], [1,1, 2,0]
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
renee
 2004-12-15 16:43
#49981 #49981
User since
2003-08-04
14367 articles
ModeratorIn
[Homepage] [default_avatar]
*) (1,3,2,0)
*) (0,2,3,1)
*) (0,2,1,1)
*) (0,2,2,1)
*) (1,2,2,1)
*) (1,2,3,1)
*) (2,2,3,1)
*) (1,3,2,2)
*) (1,3,2,1)
*) (2,2,2,0)
*) (1,1,2,0)
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/
esskar
 2004-12-15 16:52
#49982 #49982
User since
2003-08-04
7321 articles
ModeratorIn

user image
    |---|
    | 1 |
    |   |
|------------|
| 4 | 2 | 5  |
|------------|
    |   |
    | 3 |
    |---|


1. 1
2. 2
3. 3
4. 4
5. 5
6. 1 und 2
7. 2 und 3
8. 1 und 2 und 3
9. 4 und 2
10. 2 und 5
11. 4 und 2 und 5\n\n

<!--EDIT|esskar|1103128602-->
Crian
 2004-12-15 17:40
#49983 #49983
User since
2003-08-04
5826 articles
ModeratorIn
[Homepage]
user image
aaachso, alles klar
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2004-12-15 17:54
#49984 #49984
User since
2003-08-04
5826 articles
ModeratorIn
[Homepage]
user image
Ich hab mal ein Programm zum Anzeigen der Rechtecke geschrieben, ich hoffe das gilt nicht als Spoiler:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/perl
use strict;
use warnings;

use Tk;

main();
exit;


sub main {
my $mw = MainWindow->new();
$mw->title('RDW #A - Betrachter');

# Anzeigefeld:
my $cnv = $mw->Canvas(-background => 'white',
-state => 'disabled',
-width => 500,
-height => 500,
-relief => 'flat',
-cursor => 'crosshair',
)
->pack(-side => 'bottom',
-expand => 1,
-fill => 'none',
);

# Eingabefeld und Button:
my $f = $mw->Frame(-relief => 'groove',
-borderwidth => 2,
)
-> pack(-side => 'top',
-expand => 1,
-fill => 'x',
);
my $ent = $f->Entry(-width => 75,
)
->pack (-side => 'left',
-expand => 1,
-fill => 'x',
-anchor => 'w',
);
my $btn = $f->Button(-text => 'Anzeigen',
-command => [ \&show, $mw, $cnv, $ent ],
)
->pack (-side => 'top',
-expand => 1,
-fill => 'x',
);

$mw->bind ('<Return>', sub{$btn->invoke()} );
$mw->bind ('<Escape>', sub{$mw->destroy()} );

$ent->focus();

MainLoop();
}

sub show {
my ($mw, $cnv, $ent) = @_;
$cnv->delete('all'); # canvas leeren
(my $rect = $ent->get()) =~ tr~[] ~~d; # müll wegwerfen
my @koord = split /,/, $rect;
unless (@koord > 3 and @koord % 4 == 0) {
print "\a";
return;
}

# Koordinatentransformation:
my ($smin, $smax) = (15, 490);
my $min;
my $max;
$min = $max = $koord[0];
for (@koord) {
$min = $_ if $_ < $min;
$max = $_ if $_ > $max;
}
my $faktor = ($smax-$smin) / ($max-$min);
$_ = int(($_-$min)*$faktor) + $smin for @koord;

# Rechtecke einzeichnen:
while (@koord) {
my $xmin = shift @koord;
my $ymin = 500 - (shift @koord);
my $xmax = shift @koord;
my $ymax = 500 - (shift @koord);
$cnv->createRectangle($xmin, $ymin, $xmax, $ymax);
}
}
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2004-12-15 18:38
#49985 #49985
User since
2003-08-04
7321 articles
ModeratorIn

user image
[quote=Crian,15.12.2004, 16:54]Ich hab mal ein Programm zum Anzeigen der Rechtecke geschrieben, ich hoffe das gilt nicht als Spoiler:[/quote]
nö und danke

ich hoffe es ist nicht zu schwer.
war mir nicht sicher und hab diesmal 5 tage zeit gegeben.
wenn man etwas scharf nachdenkt, ist es gar nicht so schwer.
renee
 2004-12-15 18:40
#49986 #49986
User since
2003-08-04
14367 articles
ModeratorIn
[Homepage] [default_avatar]
Ich hoffe, dass ich spätestens am Samstag in der Vorlesung etwas Zeit finde, mich der Aufgabe zu widmen. Die scheint mir sehr interessant zu sein!
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/
Crian
 2004-12-15 18:44
#49987 #49987
User since
2003-08-04
5826 articles
ModeratorIn
[Homepage]
user image
Ich finde es auch sehr interessant, aber ich fürchte Weihnachtsstreß + Weihnachtsball werden mich von einer Beteiligung abhalten ... naja mal sehen ;)

(Zum Anzeigeprogramm: Man kann einfach die hier geposteteten Parameter für die rdw-Funktion per Copy & Paste da ins Eingabefeld kopieren und Return drücken. Mit etwas Glück werden die Rechtecke dann angezeigt ;-)

[quote=esskar,15.12.2004, 17:38]wenn man etwas scharf nachdenkt, ist es gar nicht so schwer.[/quote]
Arrgghh ... *horror* ... wenn einem schon gesagt wird, es wäre leicht, wenn man nur schlau genug ist, wächst der Erwartungsdruck ins Unermessliche ;-)\n\n

<!--EDIT|Crian|1103129238-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 3 >| >> 30 entries, 3 pages



View all threads created 2004-12-15 04:52.