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 eine Liste mit Dominos, @dominos.
Schreiben Sie ein Skript, um die Anzahl der Dominosteine zurückzugeben, die jedem anderen Domino ähnlich sind.
$dominos[i] = [a, b] und $dominos[j] = [c, d] sind gleich, wenn entweder (a = c und b = d) oder (a = d und b = c).
Ich bin mir nicht sicher, ob es sich um ein britisches/amerikanisches Englisch handelt oder um etwas anderes, aber ich verwende Dominoes als Plural von Domino. Dominos, was man bekommt, wenn man Hunger hat.
Für diese Aufgabe nehme ich Ganzzahlen aus der Befehlszeile und konvertiere sie in eine Liste von Listen (Arrays von Arrays in Perl). Wenn dies ein reales Projekt wäre, würde ich wahrscheinlich eine Datenklasse verwenden und einen Gleichheitsoperator haben.
Ich habe eine Doppelschleife. Die äußere Schleife – i genannt – ist 0 bis eins kleiner als die Anzahl der Dominosteine. Die innere Schleife – j genannt – ist ebenfalls gleich. Ich überspringe den Fall, wenn i und j gleich sind. Wenn die Dominosteine an Position i und j gleich sind (entweder die gleiche Zahl oder entgegengesetzte Zahlen), füge ich zum Zählen eins hinzu und verlasse die innere Schleife.
def similar_dominoes(dominoes: list) -> int: count = 0 for i in range(len(dominoes)): for j in range(len(dominoes)): if i == j: continue if (dominoes[i][0] == dominoes[j][0] and dominoes[i][1] == dominoes[j][1]) \ or (dominoes[i][0] == dominoes[j][1] and dominoes[i][1] == dominoes[j][0]): count += 1 break return count
$ ./ch-1.py 1 3 3 1 2 4 6 8 2 $ ./ch-1.py 1 2 2 1 1 1 1 2 2 2 3
Sie erhalten eine Reihe von Punkten (x, y).
Schreiben Sie ein Skript, um herauszufinden, ob die angegebenen Punkte ein Bumerang sind.
Ein Bumerang ist eine Ansammlung von drei Punkten, die alle unterschiedlich sind und nicht in einer geraden Linie liegen.
Wie bei der letzten Aufgabe nehme ich Ganzzahlen von der Befehlszeile und konvertiere sie in eine Liste von Listen (Arrays von Arrays in Perl).
Ich erinnere mich an genug Mathematik aus der Oberschule, um zu wissen, dass wir die Steigung (Gradient) zweier Punkte mit der Formel (x2 – x1) ÷ (y2 – y1) ermitteln können. Wenn jedoch y1 und y2 gleich sind, erhalten wir einen Fehler bei der Division durch Null.
Daher verwende ich folgende Prüfungen:
def is_boomerang(points: list) -> bool: if all(points[0][1] == points[i][1] for i in range(1, len(points))): return False if any(points[0][1] == points[i][1] for i in range(1, len(points))): return True degrees = set(abs((points[0][0] - points[i][0]) / (points[0][1] - points[i][1])) for i in range(1, len(points))) return False if len(degrees) == 1 else True
$ ./ch-2.py 1 1 2 3 3 2 true $ ./ch-2.py 1 1 2 2 3 3 false $ ./ch-2.py 1 1 1 2 2 3 true $ ./ch-2.py 1 1 1 2 1 3 false $ ./ch-2.py 1 1 2 1 3 1 false $ ./ch-2.py 0 0 2 3 4 5 true
Das obige ist der detaillierte Inhalt vonÄhnlicher Bumerang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!