Die glückliche Sorte
Wöchentliche Herausforderung 284
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
Aufgabe 1: Lucky Integer
Aufgabe
Sie erhalten ein Array von Ganzzahlen, @ints.
Schreiben Sie ein Skript, um die glückliche Ganzzahl zu finden, falls sie gefunden wird, andernfalls geben Sie -1 zurück. Wenn es mehr als eine gibt, geben Sie die größte zurück.
Eine glückliche Ganzzahl ist eine Ganzzahl, deren Häufigkeit im Array ihrem Wert entspricht.
Meine Lösung
Diese Aufgabe ist relativ einfach und erfordert daher nicht viel Erklärung. Ich erstelle ein Diktat (Hash in Perl) der Häufigkeit jeder Ganzzahl, genannt freq. Dann iteriere ich durch die Tasten von freq (höchster Wert zuerst). Wenn die Häufigkeit der Ganzzahl mit dem Wert übereinstimmt, gebe ich diese Zahl zurück. Wenn der Iterator erschöpft ist, gebe ich -1 zurück.
def lucky_integer(ints: list) -> str: freq = Counter(ints) for i in sorted(freq, reverse=True): if i == freq[i]: return i return -1
Beispiele
$ ./ch-1.py 2 2 3 4 2 $ ./ch-1.py 1 2 2 3 3 3 3 $ ./ch-1.py 1 1 1 3 -1
Aufgabe 2: Relative Sortierung
Aufgabe
Sie erhalten zwei Listen mit ganzen Zahlen, @list1 und @list2. Die Elemente in @list2 sind unterschiedlich und auch in @list1.
Schreiben Sie ein Skript, um die Elemente in @list1 so zu sortieren, dass die relative Reihenfolge der Elemente in @list1 mit der in @list2 übereinstimmt. Elemente, die in @list2 fehlen, sollten in aufsteigender Reihenfolge am Ende von @list1 platziert werden.
Meine Lösung
Während Python über die Indexfunktion für Listen verfügt, löst es eine ValueError-Ausnahme aus, wenn das Element nicht in der Liste enthalten ist. Deshalb habe ich eine Funktion namens find_index erstellt, die die Position von val in lst zurückgibt, wenn sie gefunden wird, oder die Länge der Liste zurückgibt, wenn nicht.
def find_index(lst: list, val: int): return lst.index(val) if val in lst else len(lst)
Die Perl-Lösung hat auch die gleiche Funktion und verwendet den first_index von List::MoreUtil, um die Position zu finden.
sub find_index( $lst, $val ) { my $idx = first_index { $_ == $val } @$lst; return $idx == -1 ? scalar(@$lst) : $idx; }
Ich verwende die Sortierfunktion, um die erste Liste zu sortieren. Jedes Element wird nach einem Tupel aus der Indexposition und der Ganzzahl sortiert. Dadurch wird sichergestellt, dass der erste Teil der resultierenden Liste entsprechend der Position in der zweiten Liste sortiert wird, während die übrigen Werte numerisch sortiert werden.
def relative_sort(list1: list, list2: list) -> list: return sorted(list1, key=lambda i: (find_index(list2, i), i))
Die Perl-Lösung verwendet dieselbe Logik, aber eine völlig andere Syntax.
sub main ($lists) { my $list1 = $lists->[0]; my $list2 = $lists->[1]; my @solution = sort { find_index( $list2, $a ) <=> find_index( $list2, $b ) or $a <=> $b } @$list1; say '(', join( ', ', @solution ), ')'; }
Für die Eingabe über die Befehlszeile nehme ich einen JSON-String, der eine Liste mit ganzen Zahlen sein sollte.
Beispiele
$ ./ch-2.py "[[2, 3, 9, 3, 1, 4, 6, 7, 2, 8, 5],[2, 1, 4, 3, 5, 6]]" (2, 2, 1, 4, 3, 3, 5, 6, 7, 8, 9) $ ./ch-2.py "[[3, 3, 4, 6, 2, 4, 2, 1, 3],[1, 3, 2]]" (1, 3, 3, 3, 2, 2, 4, 4, 6) $ ./ch-2.py "[[3, 0, 5, 0, 2, 1, 4, 1, 1],[1, 0, 3, 2]]" (1, 1, 1, 0, 0, 3, 2, 4, 5)
Das obige ist der detaillierte Inhalt vonDie glückliche Sorte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

So herunterladen Sie Dateien in Python

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Einführung des natürlichen Sprach -Toolkits (NLTK)

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?
