Thread RDW #6 - Rätsel der Woche 6 (21 answers)
Opened by Crian at 2004-08-13 15:11

Crian
 2004-08-13 15:11
#49254 #49254
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
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
90
91
92
93
94
95
96
97
98
99
100
101
 RDW #6 - Raetsel der Woche Nummer 6
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Regeln:  * Bitte nicht vor Ablauf der ersten 72 Stunden ( = drei 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:

           crian <---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: Ausgehend von der Loesung zu Raetsel RDW #4 (welches die folgende
~~~~~~~~ Aufgabenstellung hatte:

                                   -----

         Gegeben sei ein rechteckiges Spielfeld F mit n x m Feldern.
         
         Desweiteren gibt es eine Menge S mit Steinen auf diesem Spielfeld.
         Jeder dieser Steine ist rechteckig und belegt p x q Felder (die
         Steine koennen verschieden gross sein).

         Die Steine duerfen sich auf dem Feld nicht ueberlappen. (Das heisst
         jedes Feld von F darf von hoechstens einem Stein aus S belegt sein.)

         Schaffe eine interne Darstellung von F und S und Funktionen (oder
         Methoden), um den Stein S_i in eine der vier Himmelsrichtungen auf
         dem Spielfeld zu verschieben.

         Ist es nicht moeglich, den gegebenen Stein in die gegebene Richtung
         zu verschieben, so soll dies dem Aufrufer auf irgend eine Weise mit-
         geteilt werden.

                                   -----

         ) soll eine Moeglichkeit geschaffen werden, zu gegebenen Ausgangs-
         stellungen und Zielvorgaben Loesungen zu finden. Dabei sollte nach
         Moeglichkeit eine Loesung mit der kleinsten Anzahl an Zuegen gefun-
         den werden.

         Beispiel:

            +---+---+---+        Der Stein "1" soll aus dem Feld unten
          2 | 1 | 0 | 2 |        rechts aus dem Spielfeld herausgescho-
            +---+---+---+        ben werden, d.h., dass er auf dem Feld
          1 | 0 | 3 | 0 |        unten rechts landen soll.
            +---+---+---+        Eine minimale Loesung ist:
          0 | 4 | 0 | 0 | ->         3-l, 1-r, 1-u, 1-u, 1-r
            +---+---+---+        Dann steht der Stein vor dem Ausgang
              0   1   2          und kann herausgezogen werden.
       
        Die Zielvorgaben werden in Form von Koordinaten für einen bestimmten
        Stein (im Beispiel Stein 1) angeben, hier etwa
            (0,2) == 1
        (Stein 1 auf Zeile Null, Spalte Zwei)

        Ev. laesst sich diese Zielvorgabe elegant als Funktionsreferenz mit-
        geben, aber da kann sich jeder selbst etwas ausdenken.


        Wenn das Programm die Loesung gefunden hat, sollte es sie in der oben
        angegebenen Form (d.h. jeder Zug besteht aus X-Y, wobei X die
        Steinnummer angibt und Y die Richtung, in der dieser Stein einen
        Schritt weit bewegt wird, mit Y ist Element der Menge {r, l, o, u})
        ausgeben und optional auch Schritt fuer Schritt darstellen.


        Bei den bisherigen Betrachtungen wurde davon ausgegangen, dass sich
        jeder Stein prinzipiell in alle vier Himmelsrichtungen bewegen
        laesst. Eine Variante des Spiels waere es, wenn nichtquadratische
        Steine nur in Richtung ihrer laengsten Ausdehnung verschoben werden
        duerfen. (Es gibt solche Spielvarianten, da gilt es, ein bestimmtes
        Auto aus einem Gewirr anderer Autos zu befreien, dafuer waere diese
        Variante notwendig.)

        Die Unterstuetzung dieser Spielvariante sehe ich als optional an.
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

View full thread RDW #6 - Rätsel der Woche 6