Abt. Selbstgestrickter Lösungsalgorithmus zu ALR-51
=================================
Ohne jede Gewähr sei das folgende Progrämmchen angegeben, das strikt nach der "Von-Links-nach-Rechts"-Regel arbeitet. Gelangt es nach 200 Aktionen zu keiner Lösung, kehrt es die beiden Messtöpfe in ihrem Fassungsvermögen um, und probiert es einfach nocheinmal. Manchmal klappt es dann, manchmal geht der Knopf einfach nicht auf. Das heißt nicht, daß ein intelligenter Zeitgenosse nicht doch eine Lösung finden könnte ...
Gruss
Code
WindowTitle "Naiver ALR-51-Lösungsalgorithmus `Von-Links-nach-Rechts`"
declare Ziel&,PotL&,PotMaxL&,PotR&,PotMaxR&,kann&,ist&,schritt&,flg&,tmp$
Los:
cls:Font 2
Print "\n Messziel = ";:input tmp$
if val(tmp$)<>0:ziel&=abs(val(tmp$))
else
Ziel& = 2
endif
PotMaxL& = 7
PotMaxR& = 11
:Proc LFüllen :potL&=potMaxL&:Zeigen:EndProc
:Proc RLeeren :potR&=0:Zeigen:EndProc
Proc Zeigen
inc schritt&
print tab(3);schritt&;". ";
if (potMaxL&=Ziel&) or (potMaxR&=Ziel&)
Print " Verwende den entsprechenden Messtopf!!"
waitinput:end
endif
if (Ziel&>potMaxL&) and (Ziel&>potMaxR&)
Print " Verwende den rechten Messtopf mehrfach."
print " Programm versucht, den fehlenden Rest zu ermitteln..."
Ziel& = Ziel& mod PotMaxR&
'waitinput 4000
endif
print tab(12);potL&, tab(20);potR&,
if (potL&=Ziel&) or (potR&=Ziel&)
print " Fertig!":sound 400,60:Waitinput:End
Endif
' waitinput 666
: if %csrlin>20 ':waitinput 6000
cls:endif
EndProc
Proc LRumleeren
kann&=potMaxR&-potR& : ist&=if(kann&<potL&,kann&,potL&)
potL&=potL&-ist&:potR&=potR&+ist&
Zeigen
EndProc
Proc header
print " Schritt/ Füllstand \ Messziel:",Ziel&
print " Linker_Topf Rechter_Topf"
print " Max = ";potMaxL&;" ";potMaxR&
print "-------------------------------------"
schritt&=-1: Zeigen ' Ausgangszustand
Endproc
Main:
cls
header
Repeat
LFüllen : LRumleeren
LFüllen : LRumleeren
RLeeren : LRumleeren
if schritt&>200
if flg&
print "\n Dieses Programm findet leider keine Lösung !"
print "----------------------------------------------"
waitinput:end:endif
schritt&=-1:flg&=PotMaxL&:PotMaxL&=PotMaxR&:PotMaxR&=flg&:cls
AppendMenuBar 100,"Versuch mit umgekehrten Töpfen:"
header
endif
until 0
waitinput
End
Alles anzeigen
P.S. Immerhin löst es (Werte umprogrammieren!) auch das "Simon-Says"-Rätsel aus "Die hard III" mit Bruce Willis. Dort sind 4 Gallonen zu messen mit zwei Gefässen mit 3 und 5 Gallonen Fassungsvermögen.