Über die Serie
Zunächst einmal können Sie dies wie jede andere Code-Golf-Herausforderung behandeln und beantworten, ohne sich Gedanken über die Serie zu machen. Es gibt jedoch eine Rangliste für alle Herausforderungen. Sie finden die Rangliste zusammen mit einigen weiteren Informationen über die Serie im ersten Beitrag .
Obwohl ich eine Menge Ideen für die Serie habe, sind die zukünftigen Herausforderungen noch nicht in Stein gemeißelt. Wenn Sie Vorschläge haben, teilen Sie mir dies bitte auf dem entsprechenden Sandbox-Post mit .
Loch 4: Das Bertrand-Paradoxon
Das Bertrand-Paradoxon ist ein interessantes Problem, das zeigt, wie verschiedene Methoden zum Auswählen zufälliger Akkorde in einem Kreis unterschiedliche Verteilungen von Akkorden, deren Mittelpunkten und Längen ergeben können.
In dieser Herausforderung sollst du zufällige Akkorde des Einheitskreises mit der "richtigen" Methode erzeugen, dh mit einer Verteilung der Akkorde, die unter Skalierung und Übersetzung unveränderlich ist. In dem verlinkten Wikipedia-Artikel ist "Methode 2" eine solche Methode.
Hier sind die genauen Regeln:
- Sie sollten eine positive Ganzzahl verwenden,
N
die angibt, wie viele Akkorde zurückgegeben werden sollen. Die Ausgabe sollte eine Liste vonN
Akkorden sein, die jeweils als zwei Punkte auf dem Einheitskreis angegeben sind und durch ihren Polarwinkel im Bogenmaß angegeben werden. - Ihr Code sollte mindestens 2 20 verschiedene Werte für jeden der beiden Winkel zurückgeben können . Wenn Ihr verfügbares RNG eine geringere Reichweite hat, müssen Sie entweder zuerst ein RNG mit einer ausreichend großen Reichweite über dem eingebauten aufbauen oder Sie müssen Ihr eigenes geeignetes RNG implementieren . Diese Seite kann hilfreich sein.
- Die Verteilung der Akkorde muss nicht von der Verteilung nach "Methode 2" im verlinkten Wikipedia-Artikel zu unterscheiden sein. Wenn Sie einen anderen Algorithmus zur Auswahl von Akkorden verwenden, legen Sie bitte einen Korrektheitsnachweis bei. Unabhängig davon, welchen Algorithmus Sie implementieren, muss er theoretisch in der Lage sein, einen gültigen Akkord im Einheitskreis zu generieren (abgesehen von Einschränkungen des zugrunde liegenden PRNG- oder Datentyps mit begrenzter Genauigkeit).
- Ihre Implementierung sollte entweder Gleitkommazahlen (mindestens 32 Bit breit) oder Festkommazahlen (mindestens 24 Bit breit) verwenden und zurückgeben, und alle arithmetischen Operationen sollten innerhalb von höchstens 16 ulp genau sein .
Sie können ein vollständiges Programm oder eine Funktion schreiben und Eingaben über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und Ausgaben über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) erzeugen.
Die Ausgabe kann in einem beliebigen Listen- oder Zeichenfolgeformat erfolgen, sofern die einzelnen Zahlen klar voneinander zu unterscheiden sind und ihre Gesamtzahl immer gerade ist.
Dies ist Codegolf, daher gewinnt die kürzeste Übermittlung (in Bytes). Und natürlich wird die kürzeste Einreichung pro Benutzer auch in die Gesamt-Bestenliste der Serie aufgenommen.
Visualisierung
Sie können das folgende Snippet verwenden, um die generierten Linien zu rendern und ihre Verteilung zu überprüfen. Fügen Sie einfach eine Liste von Winkelpaaren in den Textbereich ein. Das Snippet sollte mit fast jedem Listenformat umgehen können, solange die Zahlen einfache Dezimalzahlen sind (keine wissenschaftliche Notation). Ich empfehle Ihnen, mindestens 1000 Zeilen zu verwenden, um eine gute Vorstellung von der Verteilung zu erhalten. Ich habe auch einige Beispieldaten für die verschiedenen Methoden bereitgestellt, die im folgenden Artikel vorgestellt werden.
Beispieldaten, die mit Methode 1 generiert wurden.
Beispieldaten, die mit Methode 2 generiert wurden .
Beispieldaten, die mit Methode 3 generiert wurden.
Bestenliste
Der erste Beitrag der Serie generiert eine Rangliste.
Um sicherzustellen, dass Ihre Antworten angezeigt werden, beginnen Sie jede Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(Die Sprache wird derzeit nicht angezeigt, das Snippet erfordert sie jedoch und analysiert sie. Ich füge möglicherweise in Zukunft eine Bestenliste nach Sprachen hinzu.)