Czas na mash!
Jest to część nr 5 zarówno mojej Random Golf of the Day, jak i serii ASCII Art of the Day firmy Optimizer . Zgłoszenia w tym wyzwaniu zostaną uwzględnione w obu tabelach wyników (w których można znaleźć powiązane posty). Oczywiście możesz traktować to jak każde inne wyzwanie związane z golfem i odpowiedzieć na nie, nie martwiąc się o żadną z serii.
Otwór 5: Diamentowe tilings
Zwykły sześciokąt można zawsze wyłożyć kafelkami z takimi diamentami:
Użyjemy artystycznej reprezentacji tych tafli ASCII. W przypadku sześciokąta o długości boku 2 istnieje 20 takich nachyleń:
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/\_\_\ /\_\_\ /\_\_\ /\_\_\ /_/\_\ /_/\_\ /\_\_\ /_/\_\ /_/\_\ /_/\_\
/\/\_\_\ /\/_/\_\ /\/_/_/\ /\/_/\_\ /\_\/\_\ /\_\/_/\ /\/_/_/\ /\_\/\_\ /\_\/_/\ /_/\/\_\
\/\/_/_/ \/\_\/_/ \/\_\_\/ \/_/\/_/ \/\_\/_/ \/\_\_\/ \/_/\_\/ \/_/\/_/ \/_/\_\/ \_\/\/_/
\/_/_/ \/_/_/ \/_/_/ \_\/_/ \/_/_/ \/_/_/ \_\/_/ \_\/_/ \_\/_/ \_\/_/
____ ____ ____ ____ ____ ____ ____ ____ ____ ____
/_/_/\ /\_\_\ /_/\_\ /_/_/\ /_/\_\ /_/\_\ /_/_/\ /_/_/\ /_/_/\ /_/_/\
/\_\_\/\ /\/_/_/\ /_/\/_/\ /\_\_\/\ /\_\/_/\ /_/\/_/\ /_/\_\/\ /\_\_\/\ /_/\_\/\ /_/_/\/\
\/\_\_\/ \/_/_/\/ \_\/\_\/ \/_/\_\/ \/_/_/\/ \_\/_/\/ \_\/\_\/ \/_/_/\/ \_\/_/\/ \_\_\/\/
\/_/_/ \_\_\/ \_\/_/ \_\/_/ \_\_\/ \_\_\/ \_\/_/ \_\_\/ \_\_\/ \_\_\/
Biorąc pod uwagę długość boku N
, należy wygenerować takie kafelki N
losowo dla sześciokąta o długości boku . Dokładny rozkład nie ma znaczenia, ale każde kafelkowanie musi zostać zwrócone z niezerowym prawdopodobieństwem.
Ponieważ N ≤ 4
zgłoszenie musi wygenerować kafelkowanie w ciągu 1 minuty co najmniej 80% czasu, a co najmniej 80% kafelków musi zostać wygenerowane w ciągu 1 minuty. Większość podejść nie będzie musiała się martwić tą zasadą (jest bardzo łagodna) - ma to na celu wykluczenie bardzo naiwnych algorytmów opartych na odrzucaniu, które generują dowolne ciągi znaków, dopóki nie pojawi się kafelkowanie.
Być może chcesz wiedzieć, że całkowitą liczbę możliwych przechyleń dla danego N można znaleźć w OEIS A008793 .
Możesz napisać pełny program lub funkcję i pobrać dane wejściowe za pomocą STDIN (lub najbliższej alternatywy), argumentu wiersza poleceń lub argumentu funkcji i wygenerować wynik za pomocą STDOUT (lub najbliższej alternatywy), wartości zwracanej funkcji lub parametru funkcji (wyjściowej).
Nie możesz wyprowadzać więcej spacji wiodących niż jest to konieczne do wyrównania sześciokąta (to znaczy lewy róg sześciokąta nie powinien mieć spacji przed nim). Każda linia może zawierać maksymalnie N
spacje (niekoniecznie spójne, więc możesz np. Mieć prostokątny wydruk, drukujący obwiednię sześciokąta).
To jest kod golfowy, więc wygrywa najkrótsze przesłanie (w bajtach). I oczywiście najkrótsze zgłoszenie na użytkownika wejdzie również do ogólnej tabeli liderów serii.
Liderów
Pierwszy post z każdej serii generuje tabelę wyników.
Aby upewnić się, że Twoje odpowiedzi się pojawią, zacznij każdą odpowiedź od nagłówka, używając następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
(Język nie jest obecnie wyświetlany, ale fragment go wymaga i analizuje, a w przyszłości mogę dodać tabelę wyników według języków).
For N ≤ 4, your submission must produce a tiling within 1 minute at least 80% of the time.
zbyt łatwe: 80% czasu to samo, podstawowe kafelki, w przeciwnym razie znajdę kolejne kafelki w dowolnym momencie