Tempo di schiacciamento!
Questa è la puntata numero 5 della mia serie Random Golf of the Day e ASCII Art of the Day di Optimizer . Le tue proposte in questa sfida verranno conteggiate in entrambe le classifiche (che puoi trovare i post collegati). Ovviamente, puoi trattarlo come qualsiasi altra sfida di golf del codice e rispondere senza preoccuparti delle due serie.
Hole 5: Diamond Tilings
Un esagono regolare può sempre essere piastrellato con diamanti in questo modo:
Useremo una rappresentazione artistica ASCII di questi tasselli. Per un esagono di lunghezza laterale 2, ci sono 20 tetti di questo tipo:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/\_\_\ /\_\_\ /\_\_\ /\_\_\ /_/\_\ /_/\_\ /\_\_\ /_/\_\ /_/\_\ /_/\_\
/\/\_\_\ /\/_/\_\ /\/_/_/\ /\/_/\_\ /\_\/\_\ /\_\/_/\ /\/_/_/\ /\_\/\_\ /\_\/_/\ /_/\/\_\
\/\/_/_/ \/\_\/_/ \/\_\_\/ \/_/\/_/ \/\_\/_/ \/\_\_\/ \/_/\_\/ \/_/\/_/ \/_/\_\/ \_\/\/_/
\/_/_/ \/_/_/ \/_/_/ \_\/_/ \/_/_/ \/_/_/ \_\/_/ \_\/_/ \_\/_/ \_\/_/
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/_/_/\ /\_\_\ /_/\_\ /_/_/\ /_/\_\ /_/\_\ /_/_/\ /_/_/\ /_/_/\ /_/_/\
/\_\_\/\ /\/_/_/\ /_/\/_/\ /\_\_\/\ /\_\/_/\ /_/\/_/\ /_/\_\/\ /\_\_\/\ /_/\_\/\ /_/_/\/\
\/\_\_\/ \/_/_/\/ \_\/\_\/ \/_/\_\/ \/_/_/\/ \_\/_/\/ \_\/\_\/ \/_/_/\/ \_\/_/\/ \_\_\/\/
\/_/_/ \_\_\/ \_\/_/ \_\/_/ \_\_\/ \_\_\/ \_\/_/ \_\_\/ \_\_\/ \_\_\/
Data una lunghezza laterale N
, dovresti generare una tale piastrellatura per un esagono di lunghezza laterale N
a caso. L'esatta distribuzione non ha importanza, ma ogni piastrellatura deve essere restituita con probabilità diversa da zero.
Perché N ≤ 4
, il tuo invio deve produrre una piastrellatura entro 1 minuto almeno l'80% delle volte e almeno l'80% dei massimali deve essere potenzialmente generato entro 1 minuto. La maggior parte degli approcci non dovrà preoccuparsi di questa regola (è molto indulgente) - questo è solo per escludere algoritmi basati sul rifiuto molto ingenui che generano stringhe arbitrarie fino a quando non si capita di essere una piastrellatura.
Potresti sapere che il numero totale di tetti possibili per una data N può essere trovato in OEIS A008793 .
È possibile scrivere un programma completo o una funzione e accettare input tramite STDIN (o l'alternativa più vicina), argomento della riga di comando o argomento della funzione e produrre output tramite STDOUT (o alternativa più vicina), valore di ritorno della funzione o parametro di funzione (out).
Non è necessario generare più spazi iniziali del necessario per allineare l'esagono (ovvero l'angolo sinistro dell'esagono non dovrebbe avere spazi davanti ad esso). Ogni riga può contenere fino a N
spazi finali (non necessariamente coerenti, quindi potresti ad esempio avere un output rettangolare, stampare il rettangolo di selezione dell'esagono).
Questo è il golf del codice, quindi vince l'invio più breve (in byte). E, naturalmente, la presentazione più breve per utente entrerà anche nella classifica generale della serie.
Classifiche
Il primo post di ogni serie genera una classifica.
Per assicurarti che le tue risposte vengano visualizzate, inizia ogni risposta con un titolo, utilizzando il seguente modello Markdown:
# Language Name, N bytes
dov'è N
la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(La lingua non è attualmente mostrata, ma lo snippet richiede e analizza, e potrei aggiungere una classifica per lingua in futuro.)
For N ≤ 4, your submission must produce a tiling within 1 minute at least 80% of the time.
troppo facile: l'80% delle volte lo stesso, piastrellatura di base, altrimenti trovo un'altra piastrellatura in qualsiasi momento voglio