Mash Up Time!
Il s'agit de l'épisode 5 de ma série Random Golf of the Day et de l'Art ASCII du jour de l' Optimizer . Votre soumission (s) dans ce défi comptera pour les deux classements (dont vous pouvez trouver les messages liés). Bien sûr, vous pouvez traiter cela comme n'importe quel autre défi de golf de code et y répondre sans vous soucier des deux séries.
Trou 5: pavage de diamants
Un hexagone ordinaire peut toujours être carrelé avec des diamants comme ceci:
Nous utiliserons une représentation artistique ASCII de ces pavages. Pour un hexagone de longueur latérale 2, il existe 20 pavages de ce type:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/\_\_\ /\_\_\ /\_\_\ /\_\_\ /_/\_\ /_/\_\ /\_\_\ /_/\_\ /_/\_\ /_/\_\
/\/\_\_\ /\/_/\_\ /\/_/_/\ /\/_/\_\ /\_\/\_\ /\_\/_/\ /\/_/_/\ /\_\/\_\ /\_\/_/\ /_/\/\_\
\/\/_/_/ \/\_\/_/ \/\_\_\/ \/_/\/_/ \/\_\/_/ \/\_\_\/ \/_/\_\/ \/_/\/_/ \/_/\_\/ \_\/\/_/
\/_/_/ \/_/_/ \/_/_/ \_\/_/ \/_/_/ \/_/_/ \_\/_/ \_\/_/ \_\/_/ \_\/_/
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/_/_/\ /\_\_\ /_/\_\ /_/_/\ /_/\_\ /_/\_\ /_/_/\ /_/_/\ /_/_/\ /_/_/\
/\_\_\/\ /\/_/_/\ /_/\/_/\ /\_\_\/\ /\_\/_/\ /_/\/_/\ /_/\_\/\ /\_\_\/\ /_/\_\/\ /_/_/\/\
\/\_\_\/ \/_/_/\/ \_\/\_\/ \/_/\_\/ \/_/_/\/ \_\/_/\/ \_\/\_\/ \/_/_/\/ \_\/_/\/ \_\_\/\/
\/_/_/ \_\_\/ \_\/_/ \_\/_/ \_\_\/ \_\_\/ \_\/_/ \_\_\/ \_\_\/ \_\_\/
Étant donné une longueur de côté N
, vous devez générer un tel pavage pour un hexagone de longueur de côté N
au hasard. La distribution exacte n'a pas d'importance, mais chaque pavage doit être renvoyé avec une probabilité non nulle.
Pour N ≤ 4
, votre soumission doit produire un pavage en 1 minute au moins 80% du temps et au moins 80% des pavages doivent potentiellement être générés en 1 minute. La plupart des approches n'auront pas à se soucier de cette règle (elle est très indulgente) - il s'agit simplement d'exclure des algorithmes très naïfs basés sur le rejet qui génèrent des chaînes arbitraires jusqu'à ce que l'un se trouve être un pavage.
Vous aimerez peut-être savoir que le nombre total de pavages possibles pour un N donné peut être trouvé dans OEIS A008793 .
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).
Vous ne devez pas générer plus d'espaces de tête que nécessaire pour aligner l'hexagone (c'est-à-dire que le coin gauche de l'hexagone ne doit pas avoir d'espace devant). Chaque ligne peut contenir jusqu'à N
des espaces de fin (pas nécessairement de manière cohérente, vous pouvez par exemple avoir une sortie rectangulaire, imprimant la boîte englobante de l'hexagone).
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.
Classements
Le premier message de chaque 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 barrant. 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.)
For N ≤ 4, your submission must produce a tiling within 1 minute at least 80% of the time.
trop facile: 80% du temps le même, carrelage de base, sinon je trouve un autre carrelage dans le temps que je veux