Mash Up Time!
Esta é a parte 5 da minha série Random Golf of the Day e ASCII Art of the Day da Optimizer . Seus envios neste desafio contarão para os dois placares de líderes (que você pode encontrar nas postagens vinculadas). Obviamente, você pode tratar isso como qualquer outro desafio de golfe com código e respondê-lo sem se preocupar com nenhuma das duas séries.
Buraco 5: Diamond Tilings
Um hexágono regular sempre pode ser revestido com diamantes da seguinte forma:
Usaremos uma representação artística ASCII dessas inclinações. Para um hexágono de comprimento lateral 2, existem 20 tais inclinações:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/\_\_\ /\_\_\ /\_\_\ /\_\_\ /_/\_\ /_/\_\ /\_\_\ /_/\_\ /_/\_\ /_/\_\
/\/\_\_\ /\/_/\_\ /\/_/_/\ /\/_/\_\ /\_\/\_\ /\_\/_/\ /\/_/_/\ /\_\/\_\ /\_\/_/\ /_/\/\_\
\/\/_/_/ \/\_\/_/ \/\_\_\/ \/_/\/_/ \/\_\/_/ \/\_\_\/ \/_/\_\/ \/_/\/_/ \/_/\_\/ \_\/\/_/
\/_/_/ \/_/_/ \/_/_/ \_\/_/ \/_/_/ \/_/_/ \_\/_/ \_\/_/ \_\/_/ \_\/_/
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/_/_/\ /\_\_\ /_/\_\ /_/_/\ /_/\_\ /_/\_\ /_/_/\ /_/_/\ /_/_/\ /_/_/\
/\_\_\/\ /\/_/_/\ /_/\/_/\ /\_\_\/\ /\_\/_/\ /_/\/_/\ /_/\_\/\ /\_\_\/\ /_/\_\/\ /_/_/\/\
\/\_\_\/ \/_/_/\/ \_\/\_\/ \/_/\_\/ \/_/_/\/ \_\/_/\/ \_\/\_\/ \/_/_/\/ \_\/_/\/ \_\_\/\/
\/_/_/ \_\_\/ \_\/_/ \_\/_/ \_\_\/ \_\_\/ \_\/_/ \_\_\/ \_\_\/ \_\_\/
Dado um comprimento lateral N
, você deve gerar esse ladrilho para um hexágono de comprimento lateral N
aleatoriamente. A distribuição exata não importa, mas cada lado a lado deve ser retornado com probabilidade diferente de zero.
Pois N ≤ 4
, sua submissão deve produzir um ladrilho dentro de 1 minuto, pelo menos, 80% do tempo e pelo menos 80% das inclinações devem ser potencialmente gerados em 1 minuto. A maioria das abordagens não precisa se preocupar com essa regra (é muito branda) - isso é apenas para descartar algoritmos baseados em rejeição muito ingênuos que geram seqüências arbitrárias até que uma delas seja um ladrilho.
Talvez você queira saber que o número total de possíveis inclinações para um determinado N pode ser encontrado no OEIS A008793 .
Você pode escrever um programa completo ou uma função e obter entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e produzir saída via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Você não deve gerar mais espaços iniciais do que o necessário para alinhar o hexágono (que é o canto esquerdo do hexágono não deve ter espaços na frente). Cada linha pode conter até N
espaços à direita (não necessariamente de forma consistente, para que você possa, por exemplo, ter uma saída retangular, imprimindo a caixa delimitadora do hexágono).
Isso é código de golfe, então a submissão mais curta (em bytes) vence. E, é claro, o menor envio por usuário também entrará na tabela geral de líderes da série.
Classificação
A primeira postagem de cada série gera uma tabela de classificação.
Para garantir que suas respostas sejam exibidas, inicie todas as respostas com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(O idioma não é exibido no momento, mas o snippet exige e o analisa, e posso adicionar um cabeçalho por idioma no futuro.)
For N ≤ 4, your submission must produce a tiling within 1 minute at least 80% of the time.
muito fácil: 80% do tempo o mesmo, ladrilhos básico, caso contrário eu encontrar outro lado a lado em qualquer hora que eu quiser