Es tut mir leid, dass ich in den letzten Wochen vermisst wurde. Ich bin umgezogen und habe einen neuen Job, daher hatte ich in dieser Zeit keine Gelegenheit, an den Herausforderungen teilzunehmen.
Jede Woche verschickt Mohammad S. Anwar die Weekly Challenge, eine Chance für uns alle, Lösungen für zwei wöchentliche Aufgaben zu finden. Meine Lösungen werden zunächst in Python geschrieben und dann in Perl konvertiert. Es ist eine großartige Möglichkeit für uns alle, etwas Codierung zu üben.
Herausforderung, meine Lösungen
Sie erhalten Koordinaten, eine Zeichenfolge, die die Koordinaten eines Quadrats des Schachbretts darstellt, wie unten gezeigt:
Schreiben Sie ein Skript, das „true“ zurückgibt, wenn das Quadrat hell ist, und „false“, wenn das Quadrat dunkel ist.
Das ist relativ einfach. Als Erstes überprüfe ich, ob die angegebene Position gültig ist (das erste Zeichen ist a-h und das zweite Zeichen liegt zwischen 1 und 8).
Ich überprüfe dann, ob der erste Buchstabe a, c, e oder g ist und die Zahl gerade ist, oder ob der erste Buchstabe b, d, f oder h ist und die Zahl ungerade ist, gebe true zurück. Andernfalls wird false zurückgegeben.
def check_color(coords: str) -> bool: if not re.search('^[a-h][1-8]$', coords): raise ValueError('Not a valid chess coordinate!') if coords[0] in ('a', 'c', 'e', 'g') and int(coords[1]) % 2 == 0: return True if coords[0] in ('b', 'd', 'f', 'h') and int(coords[1]) % 2 == 1: return True return False
$ ./ch-1.py d3 true $ ./ch-1.py g5 false $ ./ch-1.py e6 true
Ein Springer im Schach kann sich von seiner aktuellen Position auf ein beliebiges Feld bewegen, das zwei Reihen oder Spalten plus eine Spalte oder Reihe entfernt liegt. Wenn es also im Diagramm unten mit einem S beginnt, kann es sich zu jedem der mit E gekennzeichneten Felder bewegen.
Schreiben Sie ein Skript, das eine Startposition und eine Endposition annimmt und die geringste Anzahl erforderlicher Züge berechnet.
Dieser ist detaillierter. Ich beginne mit den folgenden Variablen:
def knights_move(start_coord: str, end_coord: str) -> int: for coord in (start_coord, end_coord): if not re.search('^[a-h][1-8]$', coord): raise ValueError( f'The position {coord} is not a valid chess coordinate!') deltas = ([2, 1], [2, -1], [-2, 1], [-2, -1], [1, 2], [1, -2], [-1, 2], [-1, -2]) coords = [convert_coord_to_list(start_coord)] target = convert_coord_to_list(end_coord) moves = 1 seen = []
Ich habe dann eine Doppelschleife der aktuellen Koordinatenliste und der Deltaliste. Legen Sie eine Variable new_pos fest, die die neuen Koordinaten für den Ritter darstellt. Wenn dies zu einer Position außerhalb der Tafel oder einer Koordinate führt, an der wir bereits waren, überspringe ich es. Wenn es auf dem Ziel landet, gebe ich den Bewegungswert zurück.
Nach der Schleife setze ich die Koordinatenliste auf die durch die Iterationen gesammelten Koordinaten zurück und erhöhe den Verschiebungswert um eins. Dies geht so lange weiter, bis wir die Zielkoordinate erreichen.
while True: new_coords = [] for coord in coords: for delta in deltas: new_pos = (coord[0] delta[0], coord[1] delta[1]) if not 0Beispiele
$ ./ch-2.py g2 a8 4 $ ./ch-2.py g2 h2 3
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3