- Ausführende
-
Lernen
Python lernen Ausführbare Beispiele, NumPy, pandas und mehr KI lernenNeuronale Netze, ML und LLMs von Grund auf C/C++ lernen Zeiger, Speicher, STL und modernes C++ C# lernenC#-Grundlagen, OOP, LINQ, Async und .NET-Übungen Matplotlib lernenLinien-, Balken-, Streu- und Kreisdiagramme mit interaktiven Visualisierungen Python-Algorithmen Suche, Sortierung, Rekursion und Visualisierungen O(n) C/C++-Algorithmen Implementierungen in C und C++ vergleichen Programmieren für Kinder Spielend programmieren lernen!
- AufgabenNeu
- Für LehrkräfteNeu
- Aktualisierungen
- Spendier mir einen Kaffee
Alpha-Beta-Pruning liefert dasselbe Ergebnis wie Minimax, überspringt aber Zweige, die das Ergebnis nicht ändern können. Es verfolgt zwei Schranken: alpha, die beste Bewertung, die MAX bereits sicher hat, und beta, die beste Bewertung, die MIN bereits sicher hat.
Der Spielbaum ist vollständig: Jeder innere Knoten hat branching Kinder, und alle Blätter liegen auf derselben Tiefe. leaves listet die Blattbewertungen von links nach rechts. Die Wurzel ist ein MAX-Knoten und die Ebenen wechseln sich ab: MAX, MIN, MAX, …
Durchsuche die Kinder von links nach rechts, beginnend mit alpha = -∞ und beta = +∞:
- 'An einem MAX-Knoten nach jedem Kind: best = max(best, value), dann alpha = max(alpha, best).'
- 'An einem MIN-Knoten nach jedem Kind: best = min(best, value), dann beta = min(beta, best).'
- Sobald alpha ≥ beta gilt, überspringe die restlichen Kinder des Knotens.
Implementiere alpha_beta(leaves, branching).
Eingabe
leaves: Die Blattbewertungen von links nach rechts; die Länge ist eine Potenz von branching.
branching: Kinder pro innerem Knoten.
Ausgabe
Gib [value, evaluated] zurück: den Minimax-Wert der Wurzel und die Anzahl der ausgewerteten Blätter.
Einschränkungen
2 ≤ branching ≤ 5, Länge von leaves = branching^depth mit 1 ≤ depth ≤ 8, höchstens 10.000 Blätter
-1.000 ≤ jedes Blatt ≤ 1.000
Beispiele
Beispiel 1
Eingabe:
leaves = [3, 12, 8, 2, 4, 6, 14, 5, 2]
branching = 3
Erwartete Ausgabe:
[3, 7]
Erläuterung
Der erste MIN-Knoten sieht 3, 12, 8 und gibt 3 zurück, also alpha = 3. Der zweite MIN-Knoten sieht 2, beta = 2 ≤ alpha, also werden 4 und 6 übersprungen. Der dritte sieht 14, 5, 2 und gibt 2 zurück. Der Wurzelwert ist max(3, 2, 2) = 3 nach 7 von 9 Blättern.
Beispiel 2
Eingabe:
leaves = [5, 6, 7, 4]
branching = 2
Erwartete Ausgabe:
[5, 4]
Erläuterung
Der linke MIN-Knoten wertet 5 und 6 aus und gibt 5 zurück, also alpha = 5. Der rechte MIN-Knoten wertet 7 aus (beta = 7), dann 4 (beta = 4 ≤ 5). Alle 4 Blätter werden ausgewertet und der Wert ist 5.
Referenzen
-
Beispiel 1 Nicht ausgeführtEingabe:
leaves = [3, 12, 8, 2, 4, 6, 14, 5, 2] branching = 3Erwartete Ausgabe:[3, 7]Deine Ausgabe -
Beispiel 2 Nicht ausgeführtEingabe:
leaves = [5, 6, 7, 4] branching = 2Erwartete Ausgabe:[5, 4]Deine Ausgabe
4 versteckte Tests werden beim Einreichen ebenfalls ausgeführt. Scheitert dein Code an einem, siehst du diesen Test. Löse die Aufgabe, um alle zu sehen.
Run Swift Online
Write, run, and debug Swift code online using a command-line Swift environment. Manage multiple files, save your workspace, and share code without installing Xcode.
🚀 19,043 Gesamt-Ausführungen (611 diesen Monat)
Übe Swift mit Coding Challenges
Löse praktische Aufgaben direkt im Editor: Führe die Beispieltests aus, reiche ein und erhalte ein KI-Code-Review.
🍎 Über diesen Swift Online-Executor
Der CodeUtility Swift Executor ermöglicht es dir, Swift-Code direkt im Browser zu schreiben und auszuführen - ganz ohne Xcode, SDK oder macOS-Setup. Er verwendet echte Swift-Compiler in isolierten Sandboxes, um präzises, natives Swift-Verhalten zu liefern.
Dieses Tool unterstützt mehrere Swift-Versionen - 5.7, 5.9 und die neueste Version - und gibt dir die Flexibilität, neue Sprachfeatures zu erkunden und die Kompatibilität mit älteren Swift-Codebasen zu wahren.
Ideal für Entwickler, die Swift-Syntax lernen, Algorithmen testen oder mit Code für iOS, macOS und serverseitiges Swift experimentieren - ohne lokale Tools oder Simulatoren installieren zu müssen.
Jedes Snippet läuft sicher in einer containerisierten Swift-Umgebung und sorgt für echtes Compiler-Feedback und eine sichere Codeausführung.
Mehr als nur ein Code-Runner
Nutzen Sie im selben Executor einen Editor für mehrere Dateien, ein isoliertes Ausführungsterminal, laufzeitspezifische Bibliotheken, persistente Arbeitsbereiche, Freigaben und Zusammenarbeit in Echtzeit.
Wie verwende ich diesen Executor?
Wählen Sie eine Laufzeit aus, öffnen oder erstellen Sie eine Datei, schreiben Sie Ihren Code und wählen Sie Ausführen. Die Ausgabe erscheint im Terminal. Angemeldete Benutzer können Dateien in einem Arbeitsbereich speichern, Bibliotheken installieren und über Freigaben zusammenarbeiten.
- Wählen Sie eine Version aus und bearbeiten Sie die aktuelle Datei oder öffnen Sie eine andere Datei aus dem Arbeitsbereich.
- Führen Sie den Code aus, geben Sie bei Aufforderung Daten im Terminal ein und prüfen Sie den gespeicherten Ausführungsverlauf.
- Nutzen Sie Bibliotheken, Arbeitsbereichswerkzeuge, Freigaben und den Chat, wenn Ihre Aufgabe mehr als ein einzelnes Codefragment erfordert.
💡 Swift-Grundlagen für Einsteiger
1. Variablen und Konstanten deklarieren
Verwende var für Variablen und let für Konstanten in Swift.
var age = 30
let pi = 3.14159
var name = "Alice"
let isActive = true
// Konstanten können nicht neu zugewiesen werden
// pi = 3.14 // ❌ Fehler
2. Bedingungen (if / switch)
Verwende if, else if, else für Logik und switch für mehrere Zweige.
let number = 2
if number == 1 {
print("Eins")
} else if number == 2 {
print("Zwei")
} else {
print("Sonstiges")
}
switch number {
case 1:
print("Eins")
case 2:
print("Zwei")
default:
print("Sonstiges")
}
3. Schleifen
Swift unterstützt for-in-, while- und repeat-while-Schleifen.
for i in 0..<3 {
print(i)
}
var n = 3
while n > 0 {
print(n)
n -= 1
}
4. Arrays
Arrays speichern geordnete Sammlungen von Werten.
var numbers = [10, 20, 30]
print(numbers[1])
5. Array-Manipulation
Verwende Array-Methoden wie append und removeLast.
var nums = [1, 2, 3]
nums.append(4)
nums.removeLast()
for n in nums {
print(n)
}
6. Konsolen-Ein-/Ausgabe
Verwende print() für Ausgaben. Eingaben erfordern zusätzliche Arbeit in Swift Playgrounds oder Xcode.
let name = "Alice"
print("Hallo, \(name)")
7. Funktionen
Definiere wiederverwendbare Funktionen mit Parametern und Rückgabewerten.
func add(a: Int, b: Int) -> Int {
return a + b
}
print(add(a: 3, b: 4))
8. Dictionaries
Dictionaries speichern Schlüssel-Wert-Paare.
var ages = ["Alice": 30]
print(ages["Alice"] ?? 0)
9. Fehlerbehandlung
Swift verwendet do-catch für die Fehlerbehandlung.
enum MyError: Error {
case runtimeError(String)
}
do {
throw MyError.runtimeError("Etwas ist schiefgelaufen")
} catch let error {
print(error)
}
10. Datei-Ein-/Ausgabe
Swift verwendet FileManager oder String-Methoden für Datei-Ein-/Ausgabe.
let text = "Hallo Datei"
try text.write(toFile: "file.txt", atomically: true, encoding: .utf8)
let content = try String(contentsOfFile: "file.txt")
print(content)
11. String-Manipulation
Verwende Methoden wie count, contains, uppercased() usw.
let text = "Hallo Welt"
print(text.count)
print(text.contains("Welt"))
print(text.uppercased())
12. Klassen & Objekte
Swift unterstützt OOP mithilfe von class und init.
class Person {
var name: String
init(name: String) {
self.name = name
}
func greet() {
print("Hi, ich bin \(name)")
}
}
let p = Person(name: "Alice")
p.greet()
13. Optionals
Swift verwendet ? und !, um optionale Werte zu handhaben.
var name: String? = "Alice"
print(name ?? "Unbekannt")
if let unwrappedName = name {
print(unwrappedName)
}