Podczas badań nad innym wyzwaniem, które formułuję, natknąłem się na wykres Cayleya , szczególnie ten . Ponieważ jestem jednym z czołowych twórców wyzwań ascii-art , musiałem oczywiście podjąć wyzwanie artystyczne ASCII.
Wyzwanie polega na stworzeniu tego przedstawienia ASCII grafu Cayley grupy wolnej na dwóch generatorach w następujący sposób:
+
+++
+ | +
++-+-++
+ | +
+ | +
+++ | +++
+ | | | +
++-+----+----+-++
+ | | | +
+++ | +++
+ | +
+ | +
+++ | +++
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+ | | | +
+++ | | | +++
+ | | | | | +
++-+----+-----------+-----------+----+-++
+ | | | | | +
+++ | | | +++
+ | | | +
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+ +++ | +++ +
+++ + | + +++
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+ | + | + | +
+++ | +++ | +++ | +++
+ | | | + | + | | | +
++-+----+----+-++ | ++-+----+----+-++
+ | | | + | + | | | +
+++ | +++ | +++ | +++
+ | + | + | +
+ | | | +
+++ | | | +++
+ | + | | | + | +
++-+-++ | | | ++-+-++
+ | + | | | + | +
+ | | | | | +
+++ | | | | | +++
+ | | | | | | | +
++-+----+-----------+--------------------------+--------------------------+-----------+----+-++
+ | | | | | | | +
+++ | | | | | +++
+ | | | | | +
+ | + | | | + | +
++-+-++ | | | ++-+-++
+ | + | | | + | +
+++ | | | +++
+ | | | +
+ | + | + | +
+++ | +++ | +++ | +++
+ | | | + | + | | | +
++-+----+----+-++ | ++-+----+----+-++
+ | | | + | + | | | +
+++ | +++ | +++ | +++
+ | + | + | +
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+++ + | + +++
+ +++ | +++ +
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+ | | | +
+++ | | | +++
+ | | | | | +
++-+----+-----------+-----------+----+-++
+ | | | | | +
+++ | | | +++
+ | | | +
+ | + | + | +
++-+-++ | ++-+-++
+ | + | + | +
+++ | +++
+ | +
+ | +
+++ | +++
+ | | | +
++-+----+----+-++
+ | | | +
+++ | +++
+ | +
+ | +
++-+-++
+ | +
+++
+
Wkład
Bez danych wejściowych, chyba że Twój język wyraźnie wymaga danych wejściowych do uruchomienia.
Wydajność
Przedstawiona powyżej grafika ASCII.
MD5 Hashes
Ponieważ jest to dość duży wynik, tutaj możesz sprawdzić swoją pracę. Oto kilka skrótów MD5 przykładowych form wyników (wszystkie są UTF-8 bez BOM):
- Dopełnianie spacji kwadratowych,
CR/LF
podawanie linii i końcowy znak nowej linii -954B93871DAAE7A9C05CCDF79B00BF3C
- to reprezentacja używana powyżej. - Kwadratowe wypełnienie spacji,
CR/LF
podawanie linii, brak nowej linii -28405EF91DA305C406BD03F9275A175C
- Wypełnienie kwadratowe,
LF
linie i końcowe znaki nowej linii8CA65FB455DA7EE5A4C10F25CBD49D7E
- Kwadratowe wypełnienie spacji,
LF
podawanie linii, brak nowej linii -FDB1547D68023281BB60DBEC82C8D281
- Brak spacji końcowych,
CR/LF
kanałów i nowej linii -77FDE8CE5D7BD1BDD47610BA23264A19
- Bez spacji
CR/LF
końcowych, linii, bez nowej linii -EAD390C3EFD37F0FCACE55A84B793AB5
- Brak spacji końcowych,
LF
kanałów i nowej linii -1F6CAB740F87881EB2E65BED65D08C36
- Bez spacji
LF
końcowych, linii, bez nowej linii -7D41CE1E637619FEA9515D090BFA2E9C
- Jeśli istnieje dodatkowe MD5, które chciałbyś porównać, daj mi znać, a ja je utworzę i zaktualizuję wyzwanie.
Zasady
- Wiodące lub końcowe znaki nowej linii lub białe znaki są opcjonalne, o ile same znaki są odpowiednio ustawione w linii.
- Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je wydrukować.
- Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
- Standardowe luki są zabronione.
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
code-golf
ascii-art
kolmogorov-complexity
fractal
AdmBorkBork
źródło
źródło
-
/|
s są zgodne z formułą,(2<<n)-n-2
a nie taką, jak(1<<n)-1
sądzę.Odpowiedzi:
JavaScript (ES6),
204195188180 bajtówWypełnienie kwadratu, wysuw linii LF
ibrak nowej linii, chociaż nie sprawdziłem MD5.Sparametryzowana wersja dla
222216207199 bajtów. Objaśnienie: Rozmiar wyjściowy wynosi 9119 znaków ASCII, w tym 46 nowych wierszy. (W przypadku wersji sparametryzowanej obliczany jest rozmiar wyjściowy, w tym końcowy znak nowej linii.) Każdy znak jest określany indywidualnie, po pierwsze poprzez sprawdzenie, czy należy się nowy znak, w przeciwnym razie poprzez wywołanie funkcji na współrzędnych względem początku w środku końcowego diagram. Funkcja rekurencyjnie sprawdza punkt względem najbliższych krzyży każdego rozmiaru do punktu i zwraca odpowiedni znak w zależności od tego, czy punkt znajduje się na środku czy na osi krzyża.źródło
Röda ,
284280238234 bajtówWypróbuj online!
To anonimowa funkcja. Użyłem znaku nowej linii zamiast średnika, więc jest bardzo ładnie sformatowany!
Funkcja rekurencyjna
f
tworzy wykres w dwuwymiarowej tablicyt
, która jest następnie drukowana w ostatnim wierszu.Nie znalazłem sposobu na obliczenie
27,12,5,2,1
w kilku bajtach, więc są one zakodowane na stałe.źródło
b_shiftl
operator, ale myślę , że jest zbyt długi, aby go używać w tym programie.10000110001200020001
->1168671727
wątpię, czy możesz konwertować i dzielić mniej niż 2 bajty chociaż heh ...Węgiel ,
5043 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Początkowo próbowałem różnych odbić i rotacji, ale albo nie zrobiły tego, co chciałem, albo w niektórych przypadkach były wadliwe. Następnie wypróbowałem podejście z zagnieżdżoną pętlą, ale teraz przełączyłem się na tę iteracyjną metodę, która działa, rysując pewną liczbę linii między każdym wewnętrznym krzyżem w zależności od tego, przez ile potęg 3, liczba kroków jest podzielna. Można go nawet łatwo zmodyfikować, aby akceptował parametr rozmiaru kosztem tylko 4 bajtów:
Edycja: Od tego czasu opracowałem sposób
RotateShutterOverlap
wykonania tego zadania, ale denerwująco zajmuje mi 44 bajty:Jeśli zostanie
RotateShutterOverlap
zaakceptowana zmienna liczba całkowita rotacji, zmniejszy to ją do 40 bajtów:W tej chwili użycie parametru listy rotacji zajmuje 45 bajtów:
źródło
05AB1E , 620 bajtów
Wypróbuj online!
Wszystko, co zrobiłem, to wycięcie wzoru na czwarte, przekonwertowanie symboli na base-4, skompresowanie 1/4 wzoru na base-214, a następnie przerzucenie go nad liniami symetrii. Pracuję nad czymś mądrzejszym, używając faktycznego algorytmu, ale dopóki nie skończę, to właśnie tu będzie dla mnie.
źródło
05AB1E
odpowiedź, jaką widziałem. xD Zwykle jest to blisko 6,20 zamiast 620 z odpowiedziami w tym języku. ;)Python 3, 264 bajty
Wykorzystuje parę wzajemnie rekurencyjnych funkcji. F rysuje linie, a P wstawia „+”. Można grać w golfa więcej, ale na razie nie ma czasu.
źródło
C, 236 bajtów
Po prostu rekurencyjnie buduj tablicę znaków przed jej wyświetleniem.
Wypróbuj online!
Dzięki @Neil za uświadomienie mi, że długość gałęzi jest zgodna z rzeczywistą zasadą.
źródło