Die Webseiten der Fachschaft Informatik am ERG SaalfeldHilfeseite - Position der Scheiben bei "Türme von Hanoi"
Auf der Hilfe-Seite "vorbereitung.html" wurde angegeben, dass die print_at-Anweisung bei mir die Koordinaten von (0;0) - "Ecke links oben" - bis (22;122) - Ecke rechts unten- verwenden kann. Ich habe deshalb mal "per Hand" die Scheiben auf den Desktop plaziert, um dann eine Formel für Koordinaten zu überlegen. Da sah so aus:
from ctypes import *
STD_OUTPUT_HANDLE = -11
class COORD(Structure):
pass
COORD._fields_ = [("X", c_short), ("Y", c_short)]
def print_at(r, c, s):
h = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
windll.kernel32.SetConsoleCursorPosition(h, COORD(c, r))
c = s.encode("windows-1252")
windll.kernel32.WriteConsoleA(h, c_char_p(c), len(c), None, None)
#print_at(6, 3, "Hello")
# Quelle: https://rosettacode.org/wiki/Terminal_control/Cursor_positioning#Python
my_disc = [" ",
" ### ",
" XXXXX ",
" &&&&&&& ",
" %%%%%%%%% ",
" $$$$$$$$$$$ ",
" ############# ",
" XXXXXXXXXXXXXXX ",
" &&&&&&&&&&&&&&&&& ",
" %%%%%%%%%%%%%%%%%%% ",
" $$$$$$$$$$$$$$$$$$$$$ ",
"#######################"]
boden = " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
print_at(17, 0, boden)
print_at(6, 3, my_disc[1])
print_at(7, 3, my_disc[2])
print_at(8, 3, my_disc[3])
print_at(9, 3, my_disc[4])
print_at(10, 3, my_disc[5])
print_at(11, 3, my_disc[6])
print_at(12, 3, my_disc[7])
print_at(13, 3, my_disc[8]) # 4. Scheibe
print_at(14, 3, my_disc[9]) # 3. Scheibe
print_at(15, 3, my_disc[10]) # 2. Scheibe
print_at(16, 3, my_disc[11]) # 1. Scheibe
print_at(6, 40, my_disc[1])
print_at(7, 40, my_disc[2])
print_at(8, 40, my_disc[3])
print_at(9, 40, my_disc[4])
print_at(10, 40, my_disc[5])
print_at(11, 40, my_disc[6])
print_at(12, 40, my_disc[7])
print_at(13, 40, my_disc[8])
print_at(14, 40, my_disc[9])
print_at(15, 40, my_disc[10])
print_at(16, 40, my_disc[11])
print_at(6, 77, my_disc[1])
print_at(7, 77, my_disc[2])
print_at(8, 77, my_disc[3])
print_at(9, 77, my_disc[4])
print_at(10, 77, my_disc[5])
print_at(11, 77, my_disc[6])
print_at(12, 77, my_disc[7])
print_at(13, 77, my_disc[8])
print_at(14, 77, my_disc[9])
print_at(15, 77, my_disc[10])
print_at(16, 77, my_disc[11])
print_at(4, 101, "pos_oben")
for i in range(6,17,1):
print_at(i, 105, str(i))
print_at(18, 3, "|")
print_at(18, 40, "|")
print_at(18, 77, "|")
print_at(19, 3, "3")
print_at(19, 40, "40")
print_at(19, 77, "77")
print_at(19, 92, "<- pos_rechts")
# diese Anweisung dient dazu, dass der Pfad am Ende unter den Türmen ist
print_at(22, 3, "Bin fertig!\n\n")
Um die Gleichungen aufzustellen, nehme ich folgenden Ansatz: Für den 1. Parameter von print_at: 16 = a * 1 + b #1. Scheibe Als Ergebnis erhält man a = -1 und b = 17. Daraus ergibt sich die Gleichung: pos_oben = 17 - scheiben_nr_auf_stab Für den 2. Parameter von print_at: 40 = a * 2 + b Als Ergebnis erhält man a = 37 und b = 34. Daraus ergibt sich die Gleichung: pos_rechts = 37 * stab - 34
© ERG Saalfeld - HD. Kirmse 27.04.2023 |