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 |