Przegląd
Biorąc pod uwagę liczbę sześciokątów, ułóż je w połączony kształt w ramach obrazu sztuki 50 na 50 ASCII. Kształt, który wybierzesz, może być dowolny - bez względu na to, co najbardziej ci odpowiada na grę w golfa - pod warunkiem, że jest podłączony. Może mieć otwory, pod warunkiem, że są większe niż jeden sześciokąt (w przeciwnym razie liczba sześciokątów będzie niejednoznaczna).
Układ
Wszystkie sześciokąty muszą mieć następującą formę (poprawny jest tylko ten rozmiar i orientacja):
__
/ \
\__/ Note there are 2 underscores per horizontal edge.
Dwa sześciokąty są bezpośrednio połączone, jeśli mają wspólną krawędź:
__ __
/ \__ / \
\__/ \ \__/
\__/ or / \
\__/
Dwa sześciokąty nie są połączone, jeśli dzielą tylko wierzchołek:
__ __
/ \/ \
\__/\__/
Udostępnianie połowy krawędzi również nie jest liczone jako połączone:
__
/ \
\__/
/ \
\__/
Zbiór sześciokątów jest połączony, jeśli istnieje ścieżka z dowolnego sześciokąta do dowolnego innego, przy użyciu tylko bezpośrednio połączonych sześciokątów.
Dziury
Sześciokątna dziura w połączonej kolekcji sześciokątów liczy się jako sześciokąt, tak że każdy element sztuki ASCII ma jednoznaczną liczbę sześciokątów.
Ten sposób nie liczyć jako otwór ponieważ potencjalny otwór jest pojedynczy sześciokąt:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ 7 hexagons (not 6 with a hole)
Jest to liczone jako dziura, ponieważ nie odpowiada pojedynczemu sześciokątowi:
__
__/ \__
/ \__/ \__
\__/ \__/ \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/ 8 hexagons with a hole
Wejście i wyjście
Wejście
Liczba całkowita od 1 do 255.
Wynik
Ciąg sztuki ASCII reprezentujący wejściową liczbę połączonych sześciokątów, jak opisano powyżej.
- Liczba wierszy (podciągi oddzielone znakiem nowej linii) wynosi co najwyżej 50 plus dodatkowy opcjonalny znak nowej linii.
- Rzędy nie muszą być tej samej długości, ale każdy musi mieć długość co najwyżej 50.
- Rzędy o zerowej długości mogą istnieć powyżej lub poniżej połączonego kształtu, pod warunkiem że całkowita liczba rzędów nie przekracza 50.
- Wiersze zawierające tylko przestrzeń mogą istnieć powyżej lub poniżej połączonego kształtu, pod warunkiem że całkowita liczba wierszy nie przekracza 50.
- Po lewej stronie kształtu mogą pojawiać się spacje, pod warunkiem, że długości wierszy nie przekraczają 50 (kształt nie musi być wyrównany do lewej).
- Po prawej stronie kształtu mogą pojawić się odstępy, pod warunkiem, że długości wierszy nie przekraczają 50.
- Wszelkie znaki, które nie stanowią części połączonego kształtu, muszą być spacjami lub znakami nowej linii.
Pod warunkiem, że dane wyjściowe są poprawne, nie jest wymagane zachowanie spójności między kolejnymi uruchomieniami.
Przykłady
Wejście: 6
Prawidłowe dane wyjściowe:
__ __ __
/ \__/ \__/ \__
\__/ \__/ \__/ \
\__/ \__/ \__/
__ __
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/
__
__ / \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/
/ \
\__/
Nieprawidłowe dane wyjściowe:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid for 6 as the centre hole counts as a 7th hexagon.
__ __ __ __
/ \__/ \__/ \ / \
\__/ \__/ \__/ \__/
\__/ \__/ Invalid as the 6 hexagons are not connected.
__ __ __ __
/ \__/ \__/ \/ \
\__/ \__/ \__/\__/
\__/ \__/ Invalid as vertex touching does not count as connected.
__ __ __
/ \__/ \ / \
\__/ \__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid as the 6 connected hexagons are not the only visible characters.
Zwycięski
Najkrótsza ważna odpowiedź w bajtach wygrywa.
Tabela liderów
(za pomocą fragmentu tabeli liderów Martina )
źródło
6
. Dla wprowadzenia255
poziomego rzędu sześciokątów nie zmieści się w sztuce ASCII 50 na 50.Odpowiedzi:
CJam,
645755 bajtówSprawdź to tutaj.
Spowoduje to wygenerowanie następującego wzorca w kolumnach :
Wyjaśnienie
Jest to oparte na doskonałej wskazówce Dennisa , wykorzystującej
.e>
do złożenia dzieła sztuki ASCII z kilku elementów. Jak mówi,.e>
przyjmuje elementarnie maksymalnie dwie tablice (lub łańcuchy), a ponieważ spacje mają najniższy kod znaków, możemy użyć tego do narzucenia dowolnych innych znaków na siatce łańcuchów. Ponadto, jeśli dwie tablice nie mają tej samej długości, elementy zewnętrzne dłuższej tablicy są po prostu kopiowane bez zmian. Oznacza to, że różne wzory nie muszą nawet mieć tego samego rozmiaru. Aby zastosować to do tablic dwuwymiarowych (ponieważ nie chcemy wstawiać nowych linii do samego końca), stosujemy.e>
parami do linii, co daje..e>
.Podstawową ideą kodu jest generowanie
N
kopii pojedynczego sześciokąta przesuniętego do właściwej pozycji. „Przesuwamy” sześciokąt pionowo, przygotowując puste linie, i poziomo, przygotowując spacje. Po zakończeniu składamy wszystkie kopie razem, używając pięknego:..e>
(prawdopodobnie najdłuższego operatora, jakiego kiedykolwiek użyłem w programie CJam).Oto kod:
źródło
Python 2,
219207 znakówPobiera dane wejściowe na standardowe wejście.
Prawie po prostu tworzy siatkę 50 x 50 przestrzeni i umieszcza sześciokąty tam, gdzie to właściwe. Po sześciokąta 16, nie ma potrzeby pierwszego rzędu
h
(w sześciokąt w postaci matrycy 2D), więc wykorzystaći>15
do uruchomienia zakresu na 1 zamiast 0.c=i*3%48+1;r=(i*3+1)/48*2+i%2
oblicza C olumn i r OW trzeba rozpocząć się.n
jest wartością logiczną, ale jest używany jako liczba całkowita do ustalenia granic (ponieważh[0]
ma tylko 3 znaki, aby uniknąć nadpisywania).Jestem z tego całkiem zadowolony, ogoliłem około 50 bajtów od początkowej wersji, szczególnie gdy przypomniałem sobie
a[x:y]=b
składnię.Wyjście (n = 30):
Ponieważ końcowe linie białych znaków są dozwolone, zmieniłem tworzenie,
g
aby po prostu utworzyć 50bytearray
s zamiast3+(x>1)+x/16*2
, czyli dokładnej liczby wymaganych wierszy, goląc 12 bajtów.źródło
Swift 2.0,
601591 bajtówBiegać:
swift hexagons.swift 21
Wynik:
Szybcy
substringToIndex
istringByReplacingOccurencesOfString
podejmują tak wiele postaci ...źródło
stringByPaddingToLength
jednak w tym przypadku byłoby to 11 znaków dłużej niż wpisanie całego łańcucha.stringByAppendingString
w Objective-C, ale wciąż ...C, 238 bajtów
Uwzględniane są tylko niezbędne spacje i znaki nowej linii.
Po prostu tworzy matrycę znaków, wypełnia je w odwrotnej kolejności, a następnie drukuje całość.
źródło
JavaScript (ES6), 265 bajtów
Tesseluje sześciokąty z rzędu, od lewej do prawej, naprzemiennie w górę i w dół - jak plaster miodu - aż do osiągnięcia końca rzędu.
Niegolfowany z opisem (działa w Firefoksie):
źródło
Ruby, 120
tworzy tablicę 50 łańcuchów po 50 spacji, a następnie zastępuje 4 znaki w 3 liniach, aby dodać sześciokąty:
Ponieważ pierwszy wiersz zawiera spacje, po narysowaniu sześciokąta nie możemy narysować kolejnego pod nim, ponieważ spacje zastąpiłyby poprzednie sześciokąty.
Dlatego sześciokąty są dodawane w postaci rombu 16 x 16 (zniekształcony prostokąt) od dołu do góry i nachylonego od dołu od lewej do prawej u góry.
Ciąg
" __ "
zostanie następnie nadpisany dodatkowym\
i/
tam, gdzie to konieczne.Niegolfowany w programie testowym
Typowa wydajność (n = 250)
Na górze powinno być jeszcze kilka wierszy białych znaków, aby w sumie było 50, ale nie wiem, czy istnieje sposób, aby Stackexchange sformatował, aby je uwzględnić.
źródło