Autor Beitrag
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: Fr 16.10.20 17:33 
Moin,
bei diesem Zahlenrätsel sollen acht Zahlen in einem 4x4 Muster markiert werden,
sodaß die Summe genau 32 ergibt.
Spielfeld
A und B sollen über acht Ziffern verbunden werden. Die Felder müssen
sich an mindestens einer Seite berühren. Es MUSS ein geschlossener
Weg von A nach B entstehen!

Wer die Lösung erfahren will, muss vorher drei Fragen beantworten.

Viel Spaß beim Tüfteln!
Gruß Fiete
Einloggen, um Attachments anzusehen!
_________________
Fietes Gesetz: use your brain (THINK)

Für diesen Beitrag haben gedankt: Horst_H
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Sa 17.10.20 10:01 
Hallo,

gibt es nur die eine Ausgangsstellung?
Wie könnte man denn simpel Varianten erstellen?
Einfach die Plätze innerhalb der einen Lösung tauschen/permutieren denn Addition ist kommutativ.
Einfacher ist es, das für alle 8 stelligen zahlen berechnen. Start bei 11111111 und teste alle 8 Stelligen Zahlen ohne Ziffer 0
ausblenden volle Höhe Delphi-Quelltext
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:
{$IFDEF FPC}
  {$MODE DELPHI}
{$IFEND}
const
  Base = 10;
  maxDigitCnt = 8;
type
  tDgtSum = record
              dgts    : array[0..maxDigitCnt-1of Uint32;
              dgtValue: LongInt;
              dgtSum  : LongInt;
            end;


function IncDgtSum(var ds:tDgtSum):boolean;
//add 1 to dgts and corrects sum of Digits
//return if overflow happens
var
  i : NativeInt;
Begin
  i := High(ds.dgts);
  inc(ds.dgtValue);
  repeat
    IF ds.dgts[i] < Base-1 then
    //add one and done
    Begin
      inc(ds.dgts[i]);
      inc(ds.dgtSum);
      BREAK;
    end
    else
    Begin
      ds.dgts[i] := 0;
      dec(ds.dgtSum,Base-1);
    end;
    dec(i);
 until i < Low(ds.dgts);
 result := i < Low(ds.dgts)
end;

var
  ds :tDgtSum;
  i,cnt : NativeInt;
  check : boolean;
Begin
  cnt := 0;
  With ds do
  begin
    For i := 0 to maxDigitCnt-1 do
      dgts[i] := 1;
    dgtValue := 11111111;
    dgtSum := 8;
  end;

  repeat
    IF IncDgtSum(ds) then
      BREAK;
    with ds do
    Begin
      if DgtSum = 32 then
      Begin
        For i := High(dgts) downto 0 do
        Begin
          check := dgts[i] = 0;
          if check then
            Break;
        end;
        IF Not(check) then
        Begin
          inc(cnt);
          if (cnt <10OR ( cnt > 1313271-9then
            writeln(cnt:8,dgtValue:10);
        end;
      end;
    end;
  until false;
  writeln(cnt);
end.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
sh-5.0#./untitled
       1  11111999
       2  11112899
       3  11112989
       4  11112998
       5  11113799
       6  11113889
       7  11113898
       8  11113979
       9  11113988
....
 1313263  99721211
 1313264  99722111
 1313265  99731111
 1313266  99811112
 1313267  99811121
 1313268  99811211
 1313269  99812111
 1313270  99821111
 1313271  99911111 <= siehe 1 rückwärts
1313271

real  0m0,362s


Variieren der Anordnung im 4x4 Feld, das müsste ja eine stark begrenzte Anzahl sein mit ausklammern von Drehung und Spiegelung, kann man ja als Startfeld ein Feld aus dem oberen linken 2x2 Feld wählen.
Das an der erste Feld anschliessende Feld hat 1x 2 Richtung 2x 3 Richtungen und 1x 4 Richtungen zur Verfügung.Dann sind es maximal immer 3 gibt also kleiner als 3⁸ Möglichkeiten also < 6561
Da ist noch was machbar :-)

Gruß Horst

Moderiert von user profile iconTh69: Code-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 17.10.20 10:27 
Dann verstehe ich es aber nicht, wieso es die 4. Zeile unten gibt, denn dann ist der Weg darüber ja immer länger als 8 Felder (von A nach B). Oder zählen die Felder oben links (5) und oben rechts (3) nicht mit bei der Anzahl? Eine Lösung mit der 5 und 3 habe ich auch (fast direkt) gefunden.
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Sa 17.10.20 11:44 
Hallo,

@th69
Die vierte Zeile dient der Verwirrung ;-)

Ich hatte gehofft, dass viele Stellungen A,B und Varianten an Zahlen dargeboten werden.
Griechische Mytholgie ist so lange her und an die Sandalenfilme kann ich mich kaum mehr erinnern.

Gruß Horst
Fiete Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: So 18.10.20 16:33 
Moin Horst_H,
Deine Analyse ist seht gut!
Die vierte Zeile sollte Verwirrung stiften :wink:
Jetzt werde ich mich aufraffen eine allgemeine Aufgabenstellung zu entwickeln. Wird einige Zeit dauern.

Gruß Fiete

_________________
Fietes Gesetz: use your brain (THINK)
Fiete Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: Do 29.10.20 15:45 
Moin,
es ist vollbracht!
Eine allgemeine Version liegt vor.

Gruß Fiete

_________________
Fietes Gesetz: use your brain (THINK)