Ein fauler Physiker hat die Aufgabe, das Doppelspaltexperiment durchzuführen. Sie sind jedoch faul und können nicht die Mühe machen, alle Geräte selbst einzurichten, und werden daher die Auswirkungen simulieren. Sie können jedoch nicht programmieren und brauchen Hilfe. Da sie faul sind, sollte Ihr Programm so kurz wie möglich sein.
Führen Sie bei einer ungeraden positiven Ganzzahl n
( n >= 1
und n % 2 == 1
) die Simulation durch.
Wie es funktioniert
Sie beginnen mit einer leeren Leinwand, und in jedem Rahmen geht ein einzelnes Lichtteilchen durch die Schlitze und landet auf der Leinwand. Das Partikel landet mit einer Wahrscheinlichkeit von:
n = 1
:
+-----+
| |
| 1/2 |
| |
+-----+
n = 3
:
+-----+ +-----+ +-----+
| | | | | |
| 1/4 | | 1/2 | | 1/4 |
| | | | | |
+-----+ +-----+ +-----+
n = 5
:
+-----+ +-----+ +-----+ +-----+ +-----+
| | | | | | | | | |
| 1/8 | | 1/4 | | 1/2 | | 1/4 | | 1/8 |
| | | | | | | | | |
+-----+ +-----+ +-----+ +-----+ +-----+
etc.
Zum Beispiel, wenn n=5
wir das mittlere Kästchen überprüfen, besteht eine 50% ige Wahrscheinlichkeit, dass wir hineinfallen. Wenn es das Ende des Frames erreicht, oder wenn es nicht zu den nächsten beiden wechselt, besteht eine 25% ige Chance, dass es in diese fällt. Wenn es das Ende des Frames erreicht, wenn es nicht zu den nächsten beiden wechselt, besteht eine Wahrscheinlichkeit von 12,5%, dass es in diese fällt. Wenn es nicht fällt, spielt es keine Rolle, es ist immer noch das Ende des Rahmens.
Es gab einige Unklarheiten darüber, wie man die Chancen berechnet. Die meisten davon sind darauf zurückzuführen, dass die Leute sie als Wahrscheinlichkeiten ansehen, die sich zu 1 addieren sollten. Entfernen Sie diese Idee aus Ihrem Kopf und sie sollte für Sie ein wenig klarer werden.
- Es wird höchstens ein Partikel pro Frame geladen. Dies bedeutet, dass ein Partikel möglicherweise überhaupt nicht auf diesem Frame landet.
- Ein Partikel kann durch ein beliebiges druckbares Zeichen dargestellt werden.
- Das Partikel landet irgendwo in der Box mit einer zufälligen Chance.
- Die Breite der Kästchen sollte
2n-1
der Größe der Leinwand entsprechen. Also fürn=5
sie sein sollten1/9
th der Leinwand Breite. - Die Höhe der Kästchen sollte der Höhe der Leinwand entsprechen.
- Das Partikel sollte überhaupt nicht außerhalb der Boxen landen.
- Wenn ein Partikel bereits an einer Stelle gelandet ist, die ausgewählt wurde und keine Rolle spielt, kann es dort erneut landen.
- Die obigen ASCII-Felder dienen der Übersichtlichkeit und sollten nicht gezeichnet werden.
- Sie können Ihre eigene Leinwandgröße wählen, solange dies angemessen ist. Zum Beispiel darf es nicht nur ein paar Pixel hoch sein. Es sollte auch in der Lage sein, alle Kästen darauf zu passen.
- Wenn Ihr Code zwischen Frames ruht, müssen Sie dies nicht zu Ihrer Byteanzahl hinzufügen.
Zwischen jedem der Maxima und Minima sollten Lücken bestehen. Dies sollte die gleiche Breite wie eine Kiste haben, aber dort werden keine Partikel landen. Siehe folgendes Diagramm:
+---+---+---+---+---+
| | | | | |
|max|min|max|min|max|
| | | | | |
+---+---+---+---+---+
Das Programm sollte so lange ausgeführt werden, bis es manuell gestoppt wird.
Regeln
- Ein Pseudozufallszahlengenerator (pRNG) ist in Ordnung.
- Standardlücken sind verboten.
- Die Eingabe kann in jedem vernünftigen Format erfolgen.
- Sie sollten auf STDOUT ausgeben.
- Das ist Code-Golf, also gewinnt die kürzeste Antwort.
Beispiel
Das folgende GIF ist ein Beispiellauf für n = 5
. Ich habe es nur schnell geklopft, damit die Chancen etwas nachlassen.
Antworten:
Python 2,
207200 BytesIch verspreche, dass dieser Wahnsinn eine Methode hat. Folgt der Wahrscheinlichkeitsinterpretation, die ich im OP kommentiert habe.
Bearbeiten: -7 Bytes durch einige clevere faule Auswertung (und einige Zeichen entfernen)
quelle
BASH, 396-11 = 385 Bytes
Leider kann ich dies auf TryItOnline nicht demonstrieren, da der Cursor durch Endlosschleifen- und ANSI-Escape-Sequenzen bewegt wird, aber Sie können es trotzdem kopieren und in Ihr Terminal einfügen!
Unbegrenzte Version:
quelle
$[ ]
statt$(( ))
.for i in `seq $((($1+1)/2)) -1 1`;do ...;done
Versuchen Sie es stattdessenfor((i=($1+1)/2;i>0;i--));{ ...;}
.[ $(($RANDOM%2)) -eq 1 ]
Versuchen Sie es stattdessen((RANDOM%2))
.sector
,SS
Sollte usw. mit 1 Zeichen Variablennamen ersetzt werden.Mathematica, 231 Bytes
Eingang
Ausgabe
quelle
C # (.NET 4.5),
319254 Bytes65 Bytes gespart dank TheLethalCoder!
Puh, das war eine Menge Arbeit, aber es funktioniert irgendwie.
Da dies
Console
bestimmte Funktionen und den Thread-Ruhezustand verwendet, funktioniert es unter TIO leider nicht.quelle
Action<int>
, um Bytes zu speichern.while(true)
-> (while(1>0)
->for(;;)
.using C=Console;
Oderusing static Console;
.namespace System{using static Console;n=>{for(var r=new Random();;)for(int w=WindowWidth/(2*n-1),i=(n-1)/2,c=0,m=2,l;i>-1;i--,c+=2)if((l =r.Next(0,(m*=2+1)*2))<2){SetCursorPosition((i+(l<1?c:0))*2*w+r.Next(0,w),r.Next(0,WindowHeight));Write('*');break;}}}
Variable is not existing in the current context
Fehler aus.Clojure + Quil, 394 Bytes
Nun, ich habe auf keinen Fall gewonnen, aber das war ein gutes Gehirntraining! Ich habe mich vielleicht für einen übermäßigen Umweg entschieden, aber es funktioniert! Grundsätzlich funktioniert es wie folgt:
Die x-Werte jeder Spalte werden basierend auf berechnet
n
. Dann werden die "aktiven Spalten", die die Punkte enthalten, herausgefiltert. Die Spalten werden dann mit den Möglichkeiten, die sie ausgewählt werden, komprimiert.Die Animation startet und für jedes Bild wird eine Schleife eingegeben. Ausgehend von der Mitte wird jedes Spaltenpaar ausprobiert. Sobald ein Spaltenpaar ausgewählt ist, wird eine Spalte aus dem Paar zufällig ausgewählt.
Ein Punkt wird an einer zufälligen Position in der ausgewählten Spalte gezeichnet, die innere Schleife wird beendet und ein neuer Frame beginnt.
Verwendet die Quil-Grafikbibliothek, die im Wesentlichen ein Verarbeitungswrapper für Clojure ist.
Beachten Sie, dass der Golf-Code nicht die gleiche Animation wie im GIF erzeugt. Im Golfcode ist der Hintergrund grau und das Fenster und die Punkte sind kleiner. Es hat den gleichen Effekt, es ist einfach nicht so hübsch.
Eine ausführliche Erklärung finden Sie im ungolfed-Code:
quelle
C #, 238 Bytes
Probieren Sie es online! (Es wird nicht funktionieren, aber weißt du).
Voll / Formatierte Version:
quelle