Autor Beitrag
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Di 12.12.17 01:19 
Zitat:
Ihr habt eine "Zieh-Funktion" gefunden, gebt es zu :-D
Nein, ganz bestimmt nicht :D
Aber wir sind auch oft im Kreis gerannt ^^

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
mibe201067
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 140
Erhaltene Danke: 19

Win XP, Win 7; Win 8.1

BeitragVerfasst: Di 12.12.17 01:39 
Nö. Ich habe es mit einem Praktikanten (Informatikstudent im 3. Semester) und Kisten durchgespielt und guckte zu, damit er die Regeln einhält. :eyecrazy:

Für diesen Beitrag haben gedankt: trm
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Di 12.12.17 01:44 
Unfassbar :-D

Ich rannte auch mit dem Wichtel ständig im Kreis, der hatte eine Ausdauer, aber es blieben immer 4, 3 oder eine Kiste übrig. Und dann auf einmal beim 28. Versuch oder so, hatte ich den Durchblick wie in Matrix :-D

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 12.12.17 01:57 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconSymbroson hat folgendes geschrieben Zum zitierten Posting springen:
Ist es nicht beweis genug, dass das Level von 22 Spielern gelöst wurde?


Ihr habt eine "Zieh-Funktion" gefunden, gebt es zu :-D


Wer Rätsel 12 löst, kann sich ja nun wirklich nicht beschweren. ;-) Ist für mich mal wieder die Kategorie, bei der ich von vornherein keine Chance sehe. Da spiele ich doch lieber.

Man soll ja um die Ecke denken. Und so ganz nebenbei fiel mir auf, daß das Adventskalenderfenster (das nicht zoombar ist) des 12. Dezembers kürzer ist, als der Text, den dessen "Caption" anzuzeigen gewillt ist.

Womöglich ist dort ein Lösungshinweis weiter hinten, rechts versteckt? Wäre allerdings atypisch....

Nun, wie gelangt man nun an die vollständige Beschriftung der Fensterleiste? Dafür gibt es Programme, zum Glück hatte ich welche just auf meinem Computer. Es gelang mir tatsächlich, an den vollständigen Text zu gelangen. Doch dann kam die Ernüchterung...
pzktupel
Hält's aus hier
Beiträge: 129
Erhaltene Danke: 30



BeitragVerfasst: Di 12.12.17 02:03 
Äh...der Plan ging auf :-) 14s
mibe201067
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 140
Erhaltene Danke: 19

Win XP, Win 7; Win 8.1

BeitragVerfasst: Di 12.12.17 02:16 
>"Und so ganz nebenbei fiel mir auf...Womöglich ist dort ein Lösungshinweis weiter hinten, rechts versteckt?"

Zu solcher Art Kommentare hieß es für mich: "Es ist absolut unsportlich, ungefragt irgendwelche Lösungshinweise zu geben ... ganz schwache Leistung"

---
So, Aufgabe gelöst, übrigens schon im 1. Versuch. :idea:
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 12.12.17 02:53 
user profile iconmibe201067 hat folgendes geschrieben Zum zitierten Posting springen:
>"Und so ganz nebenbei fiel mir auf...Womöglich ist dort ein Lösungshinweis weiter hinten, rechts versteckt?"

Zu solcher Art Kommentare hieß es für mich: "Es ist absolut unsportlich, ungefragt irgendwelche Lösungshinweise zu geben ... ganz schwache Leistung"

---
So, Algorithmus gelöst, übrigens schon im 1. Versuch. :idea:


Es war ja eben kein Lösungshinweis, da keine Lösung dort existiert. Ist wie die Vermutung, daß die Kisten auch zu ziehen sein könnten. Könntest Du doch auch monieren. Dein Lösungshinweis - den ich übersah - war hingegen eine " Steilvorlage".
mibe201067
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 140
Erhaltene Danke: 19

Win XP, Win 7; Win 8.1

BeitragVerfasst: Di 12.12.17 03:08 
>" Ist wie die Vermutung, daß die Kisten auch zu ziehen sein könnten." - kann nicht, Anleitung: "eine Kiste kann nur(!) verschoben werden." Das schließt andere Bewegungsarten aus und konnte daher auch kein Tipp sein.

Ich habe bis heute nicht ganz begriffen, warum man mich mich zusammengestaucht hat - zumal sich das Rätsel auf den Vortag bezog, ich es deswegen schon als abgeschlossen befand und ich eigentlich diese "Steilvorlage" schon am Vortag geschrieben hatte - wo das Rätsel sogar noch aktuell war, aber nicht beanstandungswürdig war.

So habe ich als Lehre beschlossen, nichts mehr inhaltlich zu schreiben, weder als Lösungstipp noch als inhaltsleere Spekulationen sondern ausschließlich Lösungen zu präsentieren.

Wie auch immer, Lösung 12 ist kommentarlos geknackt.


Zuletzt bearbeitet von mibe201067 am Di 12.12.17 03:54, insgesamt 1-mal bearbeitet
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 12.12.17 03:20 
user profile iconmibe201067 hat folgendes geschrieben Zum zitierten Posting springen:
>" Ist wie die Vermutung, daß die Kisten auch zu ziehen sein könnten." - kann nicht, Anleitung: "Kisten können nur(!) verschoben werden." Das schließt andere Bewegungsarten aus.

Ich habe bis heute nicht ganz begriffen, warum mich Herr Polster mich zusammengestaucht hat - zumal sich das Rätsel auf den Vortag bezog, ich es deswegen schon als abgeschlossen befand und ich eigentlich nur das wiederholte, was ich am Vortag schon geschrieben hatte - wo das Rätsel sogar noch aktuell war, aber nicht beanstandungswürdig war.


Vermutlich waren noch Lösungsversuche offen. Wie auch immer, Hinweis auf die Lösung sind nunmal das "Hoheitsgebiet" des Programmautors.
mibe201067
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 140
Erhaltene Danke: 19

Win XP, Win 7; Win 8.1

BeitragVerfasst: Di 12.12.17 03:23 
Und daran werde ich mich nun auch strikt halten. Man könnte künftig dann gleich einen Buddha fragen.

Das bedeutet auch, dass Wünsche wie "Kann mir bitte mal jemand einen Screenshot mit der Endposition vom 11. Rätsel schicken?" nicht befolgt werden.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Di 12.12.17 08:17 
Lösung zu (10) in js:

ausblenden JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
const rules = {"A""Bc""a""bC""B""Ca""b""cA""C""Ab""c""aBa"};

const substitute = S => S.split("").map( x => rules[x] ).join("");

const runUntilLength = l => {
  let r = "A";
  while (r.length < l)
    r = substitute(r);

  const letterCount = {};
  for (const letter of r)
    letterCount[letter] = (letterCount[letter] || 0) + 1;

  return [r.length, letterCount, r];
};


Aufruf:

ausblenden JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
>> runUntilLength(1000)
<< [
  2170,
  {
    A: 166,
    B: 345,
    C: 468,
    a: 644,
    b: 335,
    c: 212
  },
  "BccAcAAbcAAbAbbCcAAbcAAbAbbCcAAbAbbCbCCabCcAAbAbbC…BaBcCaaBaaBaBcaBaBcBccAaBaBcBccABccAcAAbaBaBcBccA"
]


Edit: Performanter wäre wohl Array.prototype.map.call(S, x => rules[x])

S.split("").map( x => rules[x] ) ist aber schneller getippt (-> quick & dirty).

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)


Zuletzt bearbeitet von Hidden am Di 12.12.17 22:05, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: Mathematiker, Narses
TarantelFaser47
Hält's aus hier
Beiträge: 8
Erhaltene Danke: 2

Win 10
Delphi 7
BeitragVerfasst: Di 12.12.17 14:31 
Krass hab Nummer 11 gerade eben doch noch geschafft! :dance2:
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 12.12.17 14:47 
Hallo,
ich habe wohl die Mitspieler unterschätzt. :oops:
Das 12.Rätsel läuft sehr gut :zustimm: , vielleicht war es ja auch schon dem einen oder anderen bekannt. :wink:
Die Anderen muss ich enttäuschen: Einen weiteren Hinweis werde ich nicht geben. :nixweiss:

Eine Auflösung der 11.Aufgabe kann ich erst am späten Abend geben.

LG Steffen

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
pzktupel
Hält's aus hier
Beiträge: 129
Erhaltene Danke: 30



BeitragVerfasst: Di 12.12.17 15:46 
Möglich Quizmaster...Hinweise gab es einen extrem guten von Dir selber. Man muss ihn nur verstehen. Deshalb wusste man im Vorfeld, was auf ein zukommt.


Zuletzt bearbeitet von pzktupel am Di 12.12.17 20:48, insgesamt 1-mal bearbeitet
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Di 12.12.17 18:32 
Hallo,

anbei ein Programm zur Lichterkette.
Ich habe es jetzt auch als Summe gerechnet, aber nicht mit Excel Formel.Das passt in keinen Haushaltsrechner als String oder ähnlichem.
Das macht aber nur Sinn, wenn man weiß, womit die Kette als erstes beginnt.Deshalb habe ich die 5.te Kette auch ausgeben lassen.

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:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
program Lichterkette;
uses
   sysutils;
type
  tLampe = (Rot1,Rot2,Gelb1,Gelb2,Blau1,Blau2);
  tLichterKette = array of tLampe;
  tGefolgt = record
               gfCnt: NativeInt;
               gfLtype : array[0..2of tLampe;
             end;
  tSum = array[tlampe] of Uint64;
const
  cName: array[tLampe] of string =
     (' Rot1',' Rot2','Gelb1','Gelb2','Blau1','Blau2');
  Gefolgt :array[tLampe] of tGefolgt =
      ((gfCnt:2;gfLtype:(Gelb1,blau2,ROT1)),//ROT1 als dummy
       (gfCnt:2;gfLtype:(Gelb2,blau1,ROT1)),
       (gfCnt:2;gfLtype:(blau1,rot2,ROT1)),
       (gfCnt:2;gfLtype:(blau2,Rot1,ROT1)),
       (gfCnt:2;gfLtype:(Rot1,gelb2,ROT1)),
       (gfCnt:3;gfLtype:(Rot2,Gelb1,Rot2)));
  GefolgtGelbCnt : array[tLampe] of NativeInt=
                   (1,1,0,0,1,1);
  // Beispiel rot1 erzeugt 1 gelb1 und ein blau2
  delta:array[tLampe] of tSum =
       ((0,0,1,0,0,1),
        (0,0,0,1,1,0),
        (0,1,0,0,1,0),
        (1,0,0,0,0,1),
        (1,0,0,1,0,0),
        (0,2,1,0,0,0));


       //gelb blau blau blau ...
var
  l : array[0..1of tLichterKette;
procedure AusgabeLK(Von:NativeInt);
var
  i : NativeInt;
Begin
  For i := 0 to 16 do
    write(cName[L[Von][i]],'.');
  writeln;
end;

function transscript(Von:NativeInt):NativeInt;
var
  i,j,nachPos,nach: NativeInt;
  idx : tLampe;
Begin
  nach:= 1-Von;
  setlength(l[nach],3*length(l[von]));
  nachPos:= 0;
  result := 0;
  For i := 0 to High(l[von]) do
  Begin
    idx := l[von][i];
    inc(result,GefolgtGelbCnt[idx]);
    with Gefolgt[idx] do
      For j := 0 to gfCnt-1 do
      Begin
        l[nach][nachPos] := gfLtype[j];
        inc(nachPos);
      end;
    end;
  setlength(L[nach],nachPos);
end;

function SumLights(S0 :tSum):tSum;
var
  i,j : tLampe;
begin
  For i := rot1 to blau2 do
    result[i] := 0;
  For i := rot1 to blau2 do
    For j := rot1 to blau2 do
      result[j] := result[j]+S0[i]*delta[i,j];
end;

var
  flip,cnt,gelbCnt : NativeInt;
  i,j : tLampe;
  s : tSum;
Begin
  for i := Rot1 to blau2 do //low(i) to high(i) do
  begin
    setlength(L[0],1);
    L[0][0] := i;
    writeln('Start mit ',cNAme[i]);
    flip := 0;
    cnt := 0;
    repeat
      inc(cnt);
      gelbCnt := transscript(flip);
      flip := 1-flip;
      If Cnt = 4 then
        AusgabeLK(flip);
    until length(L[flip]) > 1000;
    writeln('Kette Nr ',cnt:2,' Laenge ',length(L[flip]):5,' Anzahl Gelb ',gelbCnt);
  end;
  writeln;
  writeln('Summierend');
  For j := rot1 to blau2 do
  Begin
    For i := rot1 to blau2 do
      s[i] := 0;
    s[j] := 1;
    writeln('Start mit ',cNAme[j]);
    for cnt := 1 to 53 do
      s := SumLights(s);
    cnt := 0;
    For i := rot1 to blau2 do
      inc(cnt,s[i]);
    gelbCnt := s[gelb1]+s[gelb2];
    writeln('Kette Nr 50 Laenge ',cnt,' Anzahl Gelb ',gelbCnt);
  end;
end.

Das kommt dann raus:
ausblenden volle Höhe 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:
Start mit  Rot1
Gelb1.Blau2.Blau2. Rot1.Blau2. Rot1. Rot1.Gelb2.Blau2. Rot1. Rot1.Gelb2. Rot1.Gelb2.Gelb2.Blau1.Blau2.
Kette Nr 10 Laenge  2170 Anzahl Gelb 680
Start mit  Rot2
Gelb2.Blau1.Blau1. Rot2.Gelb2.Blau1.Blau1. Rot2. Rot2.Gelb1. Rot2.Blau1. Rot2. Rot2.Gelb1. Rot2. Rot2.
Kette Nr 10 Laenge  1927 Anzahl Gelb 615
Start mit Gelb1
Blau1. Rot2. Rot2.Gelb1. Rot2. Rot2.Gelb1. Rot2.Gelb1.Blau2. Rot2.Gelb1. Rot2.Gelb1.Blau2.Gelb1.Blau2.
Kette Nr 10 Laenge  1832 Anzahl Gelb 601
Start mit Gelb2
Blau2. Rot1. Rot1.Gelb2. Rot1.Gelb2.Gelb2.Blau1.Blau2. Rot1. Rot1.Gelb2. Rot1.Gelb2.Gelb2.Blau1.Gelb2.
Kette Nr  9 Laenge  1013 Anzahl Gelb 317
Start mit Blau1
 Rot1.Gelb2.Gelb2.Blau1.Gelb2.Blau1.Blau1. Rot2.Gelb2.Blau1.Gelb2.Blau1.Blau1. Rot2.Gelb2.Blau1.Blau1.
Kette Nr 10 Laenge  1992 Anzahl Gelb 616
Start mit Blau2
 Rot2.Gelb1. Rot2.Gelb1.Blau2.Gelb1.Blau2.Blau2. Rot1.Gelb1.Blau2.Blau2. Rot1.Blau2. Rot1. Rot1.Gelb2.
Kette Nr  9 Laenge  1286 Anzahl Gelb 397

Summierend
Start mit  Rot1
Kette Nr 50 Laenge 444299210642477560 Anzahl Gelb 140901953783614580
Start mit  Rot2
Kette Nr 50 Laenge 415137385065942629 Anzahl Gelb 131657618200446392
Start mit Gelb1
Kette Nr 50 Laenge 389897882886243441 Anzahl Gelb 123660034902180891
Start mit Gelb2
Kette Nr 50 Laenge 469538712822176748 Anzahl Gelb 148899537081880079
Start mit Blau1
Kette Nr 50 Laenge 424381720649110817 Anzahl Gelb 134580229783616158
Start mit Blau2
Kette Nr 50 Laenge 566712493259755764 Anzahl Gelb 179737221956682089


Gruß Horst
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 12.12.17 23:30 
Lösung zu Rätsel 11:
Obwohl es nur wenige Kisten sind, war es doch ziemlich aufwendig, alle an die geforderten Positionen zu transportieren.

Ich gebe einmal eine mögliche Zugfolge an (A = abwärts, H = hoch, R = rechts und L = links)
Zitat:
ARRLAALAARRRRHHHHRRRAAHHHHLHLHLALLHLLAR
RRRLLLAAARRRRRLLLLLHHHRRRHRRAARAALLLAAAA
LLLLHHRHALAARRRRHHHHRRRHHLHHLLALLLAALAR
AALAARHRARRHHHHRRRHHLHHLLALLLAAARRRRLLLL
AALAARRHRARHHAALLLLHRRRARHLLLHHHHHHRRRH
RRALLLLHLAAALARRRRLLLHHHRRRRRARRHLLLLLLH
LAAALARRRLLHHHRRRRRRAAARAALHHHHRHLLLLLL
HLAAALARRLHHHRRRRRRAAAAALAARHHHHHHRHLLL
LLLHLAAALAR

Selbst das Spielen nach dieser Zugfolge ist mühsam.

Lg Steffen

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 13.12.17 04:01 
11

Eine Kiste auf die schwarz markierten Felder zu schieben, macht das Rätsel stets unlösbar. Ich dachte ja wenn ich diese Felder ausschließe und nur Kisten auf den gelben Punkten erlaube, werden es wenig genug mögliche Positionen, dass ich selbst in Scriptsprachen wie JS bruteforcen kann. Die Tabelle posHistory sollte (wie z.B. bei Schachprogrammen üblich) dafür sorgen, dass eine Position nicht mehrfach untersucht wird.

Leider endet mein simpler bruteforce-Versuch in einem Stack Overflow:
ausblenden Quelltext
1:
2:
>> EE.solve( L0.split(""), L0.indexOf("?") )
<< Uncaught RangeError: Maximum call stack size exceeded


Ich hatte noch die Idee, die Anzahl der Positionen zu reduzieren indem ich alle Felder mit "?" einfärbe, auf die man laufen kann ohne eine Box zu bewegen (lokale Zusammenhangskomponente), und von dort als Züge die Menge der bewegbaren Boxen untersuche. Das würde die möglichen Positionen auf maximal (choose 9 from 31) reduzieren. Leider fehlte mit dazu dann aber die Zeit.


ausblenden volle Höhe JavaScript-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:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
// ×: Box
// ?: Position of the worker
// !: Empty. Move boxes here. The maze is considered solved when it no longer contains "!".
// .: Empty. But never move boxes here
// (space): Empty.

// (edit) Durch einen Fehler in der EE wird der erste "█" Charakter in jeder Zeile doppelt html-escaped und als "& #9608;" angezeigt

const L0 = `
█████████..
█...█...███
█.  × ×  .█
██ ██!█. .█
█?×██!██×██
█.×!!!!! .█
██×██!██×.█
█. ██!█. .█
█. × ×█. ██
█.....█..█.
██████████.
`
.trim().replace(/\r?\n/g"");

const emptyLab = L0.replace(/×/g" ").replace(/\?/g".");

window.EE = {};
EE.posHistory = {}; // position -> (?|+|-)

const steps = {
  "u": -11,
  "l": -1,
  "r"1,
  "d"11
};

EE.step = (L, p, d) => {
  // L: Labyrinth
  // p: position of "?" inside L
  // d: number by which to shift p

  const q = p + d;
  if (/[ !.]/.test(L[q])) {
    // moving to an empty field
    L[q] = "?";
    L[p] = emptyLab[p]; // empty: will be one of [ !.]
    return L;
  }

  const r = p + d + d;
  if (L[q] === "×" && /[ !]/.test(L[r])) {
    // pushing a box
    L[r] = "×";
    L[q] = "?";
    L[p] = emptyLab[p]; // empty: will be one of [ !.]
    return L;
  }
  
  return false;
};

EE.solve = (L, p) => {
  // L: Labyrinth
  // p: position of "?" inside L

  for (let dir in steps) {
    const d = steps[dir];
    const M = EE.step([...L], p, d);
    if (!M)
      continue;

    // notation: log an upper case letter if the script thinks it's moving a box
    const casedDirection = L[p + d] === "×" ? dir.toUpperCase() : dir;
    const pos = M.join("");

    if (!pos.includes("!")) {
      EE.posHistory[pos] = "+";
      return casedDirection + "+";
    }

    const h = EE.posHistory[pos];  // (?|+|-|undefined)
    if (h) {
      if (h === "?")
        continue;
      return h === "+";
    }

    EE.posHistory[pos] = "?";
    const solve = EE.solve(M, p + d);
    if (solve) {
      if (!solve.endsWith("?"))
        EE.posHistory[pos] = "+";
      return casedDirection + solve;
    }

    EE.posHistory[pos] = "-";
  }

  return false;
};
Einloggen, um Attachments anzusehen!
_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)


Zuletzt bearbeitet von Hidden am Mi 13.12.17 07:41, insgesamt 9-mal bearbeitet
mibe201067
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 140
Erhaltene Danke: 19

Win XP, Win 7; Win 8.1

BeitragVerfasst: Mi 13.12.17 04:13 
gelöst in reichlich 2 Minuten. :idea:
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Mi 13.12.17 07:21 
Zitat:
Eine Kiste auf die schwarz markierten Felder zu schieben, macht das Rätsel stets unlösbar. Ich dachte ja wenn ich diese Felder ausschließe und nur Kisten auf den gelben Punkten erlaube, werden es wenig genug mögliche Positionen, dass ich selbst in Scriptsprachen wie JS bruteforcen kann. Die Tabelle posHistory sollte (wie z.B. bei Schachprogrammen üblich) dafür sorgen, dass eine Position nicht mehrfach untersucht wird.

Leider endet mein simpler bruteforce-Versuch in einem Stack Overflow

Fängst du denn die Fälle ab, in denen er unendlich lang weitermachen kann? Also die einfachere wäre, dass der Spieler auf ewig auf derselben Strecke hin und her läuft - die schwierigere dass er Runden rennt.

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 13.12.17 07:37 
user profile iconSymbroson hat folgendes geschrieben Zum zitierten Posting springen:
Fängst du denn die Fälle ab, in denen er unendlich lang weitermachen kann? Also die einfachere wäre, dass der Spieler auf ewig auf derselben Strecke hin und her läuft - die schwierigere dass er Runden rennt.


Die Idee ist, dass posHistory das abfängt. Ein wert von "?" bedeutet, dass die Stellung bereits evaluiert wird (also man im Kreis läuft), solche Züge sollten nicht weiter betrachtet werden.

Der Stack Overflow lässt vielleicht vermuten, dass es doch irgendwie der Fall ist.

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)