Verschachtelte Schönheit
Wöchentliche Herausforderung 300
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
Da dies die dreihundertste Herausforderung ist, möchte ich Mohammad persönlich für all die Arbeit danken, die er jede Woche im Namen aller im Team PWC leistet.
Aufgabe 1: Schönes Arrangement
Aufgabe
Sie erhalten eine positive Ganzzahl, $int.
Schreiben Sie ein Skript, um die Anzahl der schönen Arrangements zurückzugeben, die Sie erstellen können.
Eine Permutation von n ganzen Zahlen, 1-indiziert, gilt als schöne Anordnung, wenn für jedes i (1 <= i <= n) eine der folgenden Aussagen zutrifft:
- perm[i] ist durch i teilbar
- i ist durch perm[i] teilbar
Meine Lösung
Für diese Aufgabe verwende ich die Permutationsfunktion aus dem itertool-Modul, um alle Permutationen durchzuarbeiten.
Dann geht es nur noch darum, festzustellen, ob diese Permutation die angegebenen Kriterien erfüllt. Wenn nicht, gehe ich zur nächsten Permutation über. Wenn ja, füge ich eins zur Zählvariablen hinzu.
def beautiful_arrangement(n: list) -> str: count = 0 for p in permutations(range(1, n+1)): for i in range(n): if p[i] % (i+1) != 0 and (i+1) % p[i] != 0: break else: count += 1 return count </p> <p>Möglicherweise gibt es eine effizientere Methode zur Berechnung der Ergebnisse, die ohne rohe Gewalt auskommt. Mein Code würde bei größeren Zahlen sehr ineffizient werden. Ich habe keine Zeit damit verbracht, dies zu untersuchen.</p> <h3> Beispiele </h3> <pre class="brush:php;toolbar:false">$ ./ch-1.py 1 1 $ ./ch-1.py 2 2 $ ./ch-1.py 10 700
Aufgabe 2: Verschachteltes Array
Aufgabe
Sie erhalten ein Array von Ganzzahlen, @ints der Länge n, das Permutationen der Zahlen im Bereich [0, n - 1] enthält.
Schreiben Sie ein Skript, um eine Menge zu erstellen, set[i] = ints[i], ints[ints[i]], ints[ints[ints[i]]], ..., unterliegt den folgenden Regeln:
- Das erste Element in set[i] beginnt mit der Auswahl der Elemente ints[i].
- Das nächste Element in set[i] sollte ints[ints[i]] sein, dann ints[ints[ints[i]]] und so weiter.
- Wir hören mit dem Hinzufügen auf, unmittelbar bevor ein doppeltes Element in set[i] auftritt.
Meine Lösung
Das ist relativ einfach. Ich beginne mit einer Variablen namens longest_set, die auf 0 gesetzt ist. Anschließend iteriere ich durch jede Startposition und setze die this_set-Liste als erstes Element der Menge (d. h. ints[i]). Ich füge diesem Satz immer wieder hinzu, während ints[this_set[-1]] nicht in der this_set-Liste erscheint. Nachdem dies erledigt ist, vergleiche ich die Länge der this_set-Liste mit dem longest_set-Wert. Wenn er größer ist, aktualisiere ich den longest_set-Wert.
def nested_array(ints: list) -> int: longest_set = 0 for start in range(len(ints)): this_set = [ints[start]] while ints[this_set[-1]] not in this_set: this_set.append(ints[this_set[-1]]) if longest_set < len(this_set): longest_set = len(this_set) return longest_set
Beispiele
$ ./ch-2.py 5 4 0 3 1 6 2 4 $ ./ch-2.py 0 1 2 1 $ ./ch-2.py 1 2 0 4 5 2 5
Das obige ist der detaillierte Inhalt vonVerschachtelte Schönheit. 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

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

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











Python eignet sich für Datenwissenschafts-, Webentwicklungs- und Automatisierungsaufgaben, während C für Systemprogrammierung, Spieleentwicklung und eingebettete Systeme geeignet ist. Python ist bekannt für seine Einfachheit und sein starkes Ökosystem, während C für seine hohen Leistung und die zugrunde liegenden Kontrollfunktionen bekannt ist.

Sie können grundlegende Programmierkonzepte und Fähigkeiten von Python innerhalb von 2 Stunden lernen. 1. Lernen Sie Variablen und Datentypen, 2. Master Control Flow (bedingte Anweisungen und Schleifen), 3.. Verstehen Sie die Definition und Verwendung von Funktionen, 4. Beginnen Sie schnell mit der Python -Programmierung durch einfache Beispiele und Code -Snippets.

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Python ist leichter zu lernen und zu verwenden, während C leistungsfähiger, aber komplexer ist. 1. Python -Syntax ist prägnant und für Anfänger geeignet. Durch die dynamische Tippen und die automatische Speicherverwaltung können Sie die Verwendung einfach zu verwenden, kann jedoch zur Laufzeitfehler führen. 2.C bietet Steuerung und erweiterte Funktionen auf niedrigem Niveau, geeignet für Hochleistungsanwendungen, hat jedoch einen hohen Lernschwellenwert und erfordert manuellem Speicher und Typensicherheitsmanagement.

Um die Effizienz des Lernens von Python in einer begrenzten Zeit zu maximieren, können Sie Pythons DateTime-, Zeit- und Zeitplanmodule verwenden. 1. Das DateTime -Modul wird verwendet, um die Lernzeit aufzuzeichnen und zu planen. 2. Das Zeitmodul hilft, die Studie zu setzen und Zeit zu ruhen. 3. Das Zeitplanmodul arrangiert automatisch wöchentliche Lernaufgaben.

Python ist in der Entwicklungseffizienz besser als C, aber C ist in der Ausführungsleistung höher. 1. Pythons prägnante Syntax und reiche Bibliotheken verbessern die Entwicklungseffizienz. 2. Die Kompilierungsmerkmale von Compilation und die Hardwarekontrolle verbessern die Ausführungsleistung. Bei einer Auswahl müssen Sie die Entwicklungsgeschwindigkeit und die Ausführungseffizienz basierend auf den Projektanforderungen abwägen.

Python zeichnet sich in Automatisierung, Skript und Aufgabenverwaltung aus. 1) Automatisierung: Die Sicherungssicherung wird durch Standardbibliotheken wie OS und Shutil realisiert. 2) Skriptschreiben: Verwenden Sie die PSUTIL -Bibliothek, um die Systemressourcen zu überwachen. 3) Aufgabenverwaltung: Verwenden Sie die Zeitplanbibliothek, um Aufgaben zu planen. Die Benutzerfreundlichkeit von Python und die Unterstützung der reichhaltigen Bibliothek machen es zum bevorzugten Werkzeug in diesen Bereichen.

PythonlistsarePartThestandardlibrary, whilearraysarenot.listarebuilt-in, vielseitig und UNDUSEDFORSPORINGECollections, während dieArrayRay-thearrayModulei und loses und loses und losesaluseduetolimitedFunctionality.
