À propos de la série
Tout d'abord, vous pouvez traiter cela comme n'importe quel autre défi de golf de code et y répondre sans vous soucier de la série. Cependant, il existe un classement pour tous les défis. Vous pouvez trouver le classement avec plus d'informations sur la série dans le premier post .
Bien que j'ai un tas d'idées alignées pour la série, les défis futurs ne sont pas encore gravés dans le marbre. Si vous avez des suggestions, faites-le moi savoir sur le post sandbox correspondant .
Trou 4: Le paradoxe de Bertrand
Le paradoxe de Bertrand est un problème intéressant, qui montre comment différentes méthodes de sélection d'accords aléatoires dans un cercle peuvent produire différentes distributions d'accords, leurs points médians et leurs longueurs.
Dans ce défi, vous êtes censé générer des accords aléatoires du cercle unitaire, en utilisant la méthode "droite", c'est-à-dire qui produit une distribution des accords qui est invariante sous l'échelle et la traduction. Dans l'article Wikipédia lié, la "Méthode 2" est une telle méthode.
Voici les règles exactes:
- Vous devez prendre un entier positif
N
qui spécifie le nombre d'accords à renvoyer. La sortie doit être une liste d'N
accords, chacun spécifié en deux points sur le cercle unitaire, donné par leur angle polaire en radians. - Votre code doit pouvoir renvoyer au moins 2 20 valeurs différentes pour chacun des deux angles . Si votre RNG disponible a une gamme plus petite, vous devez d'abord construire un RNG avec une gamme suffisamment large au-dessus de celui intégré ou vous devez implémenter votre propre RNG approprié . Cette page peut être utile pour cela.
- La distribution des accords doit être indiscernable de celle produite par la "Méthode 2" dans l'article Wikipedia lié. Si vous implémentez un algorithme différent pour choisir les accords, veuillez inclure une preuve d'exactitude. Quel que soit l'algorithme que vous choisissez d'implémenter, il doit théoriquement être capable de générer n'importe quel accord valide dans le cercle unitaire (sauf limitations des PRNG sous-jacents ou types de données à précision limitée).
- Votre implémentation doit utiliser et renvoyer des nombres à virgule flottante (au moins 32 bits de large) ou des nombres à virgule fixe (au moins 24 bits de large) et toutes les opérations arithmétiques doivent être précises dans un maximum de 16 ulp .
Vous pouvez écrire un programme complet ou une fonction et prendre une entrée via STDIN (ou l'alternative la plus proche), un argument de ligne de commande ou un argument de fonction et produire une sortie via STDOUT (ou l'alternative la plus proche), une valeur de retour de fonction ou un paramètre de fonction (out).
La sortie peut être dans n'importe quel format de liste ou de chaîne, à condition que les numéros individuels soient clairement distinguables et que leur nombre total soit toujours pair.
Il s'agit du code golf, donc la soumission la plus courte (en octets) l'emporte. Et bien sûr, la soumission la plus courte par utilisateur entrera également dans le classement général de la série.
Visualisation
Vous pouvez utiliser l'extrait de code suivant pour rendre les lignes générées et inspecter leur distribution. Collez simplement une liste de paires d'angles dans la zone de texte. L'extrait doit être capable de gérer presque tous les formats de liste, tant que les nombres sont de simples nombres décimaux (pas de notation scientifique). Je vous recommande d'utiliser au moins 1000 lignes pour avoir une bonne idée de la distribution. J'ai également fourni quelques exemples de données pour les différentes méthodes présentées dans l'article ci-dessous.
Exemple de données générées avec la méthode 1.
Exemple de données générées avec la méthode 2.
Exemple de données générées avec la méthode 3.
Classement
Le premier post de la série génère un classement.
Pour vous assurer que vos réponses s'affichent, veuillez commencer chaque réponse par un titre, en utilisant le modèle Markdown suivant:
# Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(La langue n'est pas actuellement affichée, mais l'extrait de code l'exige et l'analyse, et je pourrai ajouter un classement par langue à l'avenir.)