Heim  >  Artikel  >  Backend-Entwicklung  >  Gute Schlüssel

Gute Schlüssel

WBOY
WBOYOriginal
2024-08-19 16:34:501036Durchsuche

Good keys

Wöchentliche Herausforderung 282

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 Programmieren zu üben.

Herausforderung, meine Lösungen

Aufgabe 1: Gute Ganzzahl

Aufgabe

Sie erhalten eine positive Ganzzahl, $int, mit 3 oder mehr Ziffern.

Schreiben Sie ein Skript, um die gute Ganzzahl in der angegebenen Ganzzahl oder -1 zurückzugeben, wenn keine gefunden wird. Eine gute Ganzzahl besteht aus genau drei aufeinanderfolgenden übereinstimmenden Ziffern.

Meine Lösung

Ich dachte ursprünglich, dass diese Aufgabe mit einem regulären Ausdrucksmuster erledigt werden könnte, aber anscheinend habe ich mich geirrt. Ich werde mir andere TPW-Mitglieder ansehen, um zu sehen, ob sie das auch so können.

Für diese Aufgabe habe ich eine Variable pos, die von 0 auf drei weniger als die Länge der Zeichenfolge iteriert. Ich überprüfe dann vier Dinge:

  1. Die Ziffer an der aktuellen Position ist dieselbe wie die an der nächsten Position.
  2. Die Ziffer an der aktuellen Position ist dieselbe wie die an der übernächsten Position.
  3. Die Position ist 0 (was bedeutet, dass es keine Ziffern vor der aktuellen gibt) oder die vorherige Ziffer ist nicht dieselbe wie die aktuelle Ziffer.
  4. Die Position ist 3 kleiner als die Länge (d. h. es gibt keine Ziffer nach den aktuellen drei Ziffern) oder die drittnächste Ziffer ist nicht dieselbe wie die aktuelle Ziffer.

Wenn das alles wahr ist, gebe ich diese drei Ziffern zurück. Dies erfolgt in Python als String, da „000“ keine echte Ganzzahl ist. Wenn der Iterator erschöpft ist, gebe ich -1 zurück.

def good_integer(n: int) -> str:
    value = str(n)
    length = len(value)

    for pos in range(length-2):
        if (
            value[pos] == value[pos+1]
            and value[pos] == value[pos+2]
            and (pos == 0 or value[pos] != value[pos-1])
            and (pos + 3 == length or value[pos] != value[pos+3])
        ):
            return value[pos:pos+3]

    return '-1'

Beispiele

$ ./ch-1.py 12344456
444

$ ./ch-1.py 1233334
-1

$ ./ch-1.py 10020003
000

Aufgabe 2: Schlüssel ändern

Aufgabe

Sie erhalten eine alphabetische Zeichenfolge, $str, wie vom Benutzer eingegeben.

Schreiben Sie ein Skript, um herauszufinden, wie oft der Benutzer die Taste ändern musste, um die angegebene Zeichenfolge einzugeben. Beim Ändern des Schlüssels handelt es sich um die Verwendung eines Schlüssels, der sich vom zuletzt verwendeten Schlüssel unterscheidet. Die Tasten „Shift“ und „Caps Lock“ werden nicht gezählt.

Meine Lösung

Lustige Tatsache. Wenn ich mir eine neue Tastatur kaufe (alle paar Jahre), merke ich, wie lange es dauert, bis ich die Feststelltaste herausreiße. Die meisten Tastaturen halten keinen Tag!

Für diese Aufgabe wandle ich die Zeichenfolge in Kleinbuchstaben um und beginne mit zwei Variablen. Der Wert „current_key“ ist die aktuell gedrückte Taste und wird mit dem ersten Buchstaben unserer Eingabe initialisiert. Die Variable changes gibt die Anzahl der Schlüsseländerungen an, die ich vornehme, und beginnt mit 0.

Ich durchlaufe dann jeden Buchstaben in der Eingabezeichenfolge. Wenn sich dieser Buchstabe vom aktuellen_Schlüssel unterscheidet, aktualisiere ich ihn mit dem neuen Buchstaben und erhöhe die Änderungen um 1.

def key_changes(s: str) -> int:
    s = s.lower()
    current_key = s[0]
    changes = 0

    for letter in s:
        if letter != current_key:
            current_key = letter
            changes += 1

    return changes

Beispiele

$ ./ch-2.py pPeERrLl
3

$ ./ch-2.py rRr
0

$ ./ch-2.py GoO
1

Das obige ist der detaillierte Inhalt vonGute Schlüssel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Little Movie-EmpfehlungscodeNächster Artikel:Little Movie-Empfehlungscode