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 ein Array aus Binärzeichenfolgen, @str, und zwei Ganzzahlen, $x und $y.
Schreiben Sie ein Skript, um die Größe der größten Teilmenge von @str zurückzugeben, sodass die Teilmenge höchstens $x 0 und $y 1 enthält.
Eine Menge m ist eine Teilmenge von n, wenn alle Elemente von m auch Elemente von n sind.
Anstatt die Variablen x und y aufzurufen, habe ich sie max_zeros und max_ones genannt, da dies aussagekräftiger ist. Für die Befehlszeile nehme ich die letzten beiden Werte als max_zeros und max_ones, während die restlichen Werte in das s-Array eingefügt werden.
Für diese Aufgabe habe ich die variable Länge, die mit der Anzahl der Elemente in s bis hinunter zu eins beginnt. Für jede Länge verwende ich dann die Kombinationsfunktion von itertool, um alle eindeutigen Kombinationen von Längenelementen zu berechnen und diese in der Teilmengenvariablen zu speichern.
Für jede Teilmenge füge ich alle Zeichenfolgen zusammen, zähle die Anzahl der Nullen und Einsen und schaue, ob sie kleiner oder gleich max_zeros bzw. max_ones sind. Wenn ja, gebe ich die Längenvariable zurück. Wenn keine gefunden wird, gebe ich Null zurück.
def ones_and_zeros(s: list, max_zeros: int, max_ones: int) -> int: for length in range(len(s), 0, -1): for subset in combinations(s, length): bits = ''.join(subset) if bits.count('0') <= max_zeros and bits.count('1') <= max_ones: return length return 0
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2
Sie erhalten ein Array von Ganzzahlen, @ints.
Schreiben Sie ein Skript, um den minimalen positiven Startwert zu ermitteln, sodass die Schritt-für-Schritt-Summe nie kleiner als eins ist.
Um es wirklich zu pedantisch zu machen: Der „minimale positive Startwert“ für eine Liste positiver Ganzzahlen ist 0,000...01. Das zweite Beispiel scheint jedoch zu implizieren, dass es sich bei dieser Zahl tatsächlich um eine ganze Zahl handelt.
Für diese Aufgabe beginne ich mit zwei Variablen: min_value, der als erster Wert der Ints-Liste festgelegt wird, und value, der Null ist. Dann iteriere ich über die Ints-Liste und füge diese Zahl zur Wertvariablen hinzu. Wenn der Wert kleiner als min_value ist, aktualisiere ich die Variable min_value.
Wenn min_value größer oder gleich Null ist, gebe ich 1 zurück. Wenn nicht, gebe ich 1 - min_value zurück.
def step_by_step(ints: list) -> int: min_value = ints[0] value = 0 for i in ints: value += i if min_value > value: min_value = value if min_value >= 0: return 1 return 1 - min_value
$ ./ch-1.py 10 0001 111001 1 0 5 3 4 $ ./ch-1.py 10 0001 10 1 0 1 1 2 $ ./ch-2.py -3 2 -3 4 2 5 $ ./ch-2.py 1 2 1 $ ./ch-2.py 1 -2 -3 5
Das obige ist der detaillierte Inhalt vonSchritt null, Schritt eins. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!