Un physicien paresseux a pour tâche de réaliser l'expérience à double fente. Cependant, ils sont paresseux et ne peuvent pas se soucier de configurer tous les équipements eux-mêmes et vont donc simuler les effets. Cependant, ils ne peuvent pas programmer et vont avoir besoin d'aide. Comme ils sont paresseux, votre programme doit être aussi court que possible.
Étant donné un entier positif impair n
( n >= 1
et n % 2 == 1
), effectuez la simulation.
Comment ça fonctionne
Vous commencerez avec une toile vide et chaque image une seule particule de lumière passera par les fentes et atterrira sur la toile. La particule atterrira à un maximum avec une chance de:
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.
Par exemple, pour n=5
nous cochons la case du milieu, il y a 50% de chances de tomber dedans. S'il tombe en fin de trame, sinon passe aux deux suivants, il y a 25% de chances de tomber dans ceux-ci. S'il tombe en fin de trame, sinon passe aux deux suivants, il y a 12,5% de chances de tomber dans ceux-ci. S'il ne tombe pas, cela n'a pas d'importance, c'est quand même la fin du cadre.
Il y a eu une certaine confusion sur la façon de calculer les chances, la plupart de cela est dû au fait que les gens les considèrent comme des probabilités qui devraient s'additionner à 1. Retirez cette idée de votre esprit et cela devrait l'éclaircir un peu pour vous.
- Au plus, une particule gisera par image, cela signifie qu'une particule ne peut pas du tout atterrir sur cette image.
- Une particule peut être représentée par n'importe quel caractère imprimable.
- La particule atterrira n'importe où dans la boîte avec une chance aléatoire.
- La largeur des boîtes doit être
2n-1
la taille de la toile. Donc,n=5
ils devraient être1/9
th de la largeur de la toile. - La hauteur des boîtes doit être la hauteur de la toile.
- La particule ne doit pas du tout atterrir à l'extérieur des boîtes.
- Si une particule a déjà atterri à un endroit choisi peu importe, elle peut y atterrir à nouveau.
- Les cases ascii ci-dessus sont pour plus de clarté, elles ne doivent pas être dessinées.
- Vous pouvez choisir votre propre taille de toile tant qu'elle est raisonnable. Par exemple, il ne doit pas seulement faire quelques pixels de haut. Il devrait également pouvoir contenir toutes les boîtes dessus.
- Si votre code dort entre les trames, vous n'avez pas besoin d'ajouter cela dans votre nombre d'octets.
Il devrait y avoir des écarts entre chacun des maxima, un minimum. Cela devrait avoir la même largeur qu'une boîte mais aucune particule n'y atterrira. Voir le schéma suivant:
+---+---+---+---+---+
| | | | | |
|max|min|max|min|max|
| | | | | |
+---+---+---+---+---+
Le programme doit s'exécuter jusqu'à ce qu'il soit arrêté manuellement.
Règles
- Un générateur de nombres pseudo aléatoires (pRNG) est très bien.
- Les failles standard sont interdites.
- L'entrée peut être prise par n'importe quel format raisonnable.
- Vous devez sortir vers STDOUT.
- C'est le code-golf, donc la réponse la plus courte l'emporte.
Exemple
Le GIF suivant est un exemple exécuté pour n = 5
. Je ne l'ai fait que rapidement, donc les chances peuvent être légèrement réduites.
Réponses:
Python 2,
207200 octetsIl y a une méthode à cette folie, je le promets. Suit l'interprétation de probabilité que j'ai commentée dans le PO.
Edit: -7 octets grâce à une évaluation paresseuse intelligente (et en supprimant certains signes)
la source
BASH, 396 - 11 = 385 octets
Malheureusement, je ne peux pas le démontrer sur TryItOnline en raison de la boucle sans fin et des séquences d'échappement ANSI qui déplacent le curseur, mais vous pouvez toujours le copier-coller dans votre terminal!
Version non minimisée:
la source
$[ ]
au lieu de$(( ))
. Au lieu defor i in `seq $((($1+1)/2)) -1 1`;do ...;done
, essayezfor((i=($1+1)/2;i>0;i--));{ ...;}
. Au lieu de[ $(($RANDOM%2)) -eq 1 ]
, essayez((RANDOM%2))
.sector
,SS
, Etc doit être remplacé par 1 noms de variables char.Mathematica, 231 octets
contribution
production
la source
C # (.NET 4.5),
319254 octets65 octets enregistrés grâce à TheLethalCoder!
Ouf, c'était beaucoup de travail, mais ça marche d'une manière ou d'une autre.
Comme cela utilise
Console
des fonctions spécifiques et Thread sleep, cela ne fonctionnera malheureusement pas sur TIO.la source
Action<int>
pour enregistrer les octets,while(true)
-> (while(1>0)
->for(;;)
.using C=Console;
Ouusing 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
erreurs.Clojure + Quil, 394 octets
Eh bien, je n'ai certainement pas gagné, mais c'était un bon entraînement cérébral! J'ai peut-être choisi une façon trop détournée de le faire, mais cela fonctionne! Fondamentalement, comment cela fonctionne:
Les valeurs x de chaque colonne sont calculées en fonction de
n
. Ensuite, les "colonnes actives" qui contiendront les points sont filtrées. Les colonnes sont ensuite zippées avec les possibilités qu'elles seront choisies.L'animation démarre et à chaque image, une boucle est entrée. En partant du milieu, chaque paire de colonnes est essayée. Une fois qu'une paire de colonnes est choisie, une colonne de la paire est choisie au hasard.
Un point est dessiné à une position aléatoire dans la colonne choisie, la boucle intérieure se termine et un nouveau cadre commence.
Utilise la bibliothèque graphique Quil, qui est essentiellement un wrapper de traitement pour Clojure.
Remarque, le code golfé ne produit pas la même animation que celle montrée dans le GIF. Dans le code golfé, l'arrière-plan est gris et la fenêtre et les points sont plus petits. Cela a le même effet, ce n'est pas aussi joli.
Voir le code non golfé pour une explication approfondie:
la source
C #, 238 octets
Essayez-le en ligne! (Ça ne marchera pas mais tu sais).
Version complète / formatée:
la source