Ezoteryczny język programowania zło ma interesującą operację na wartościach bajtów, które nazywa „tkaniem”. Zasadniczo jest to permutacja ośmiu bitów bajtu (nie ma znaczenia, od którego końca zaczniemy liczyć, ponieważ wzorzec jest symetryczny):
- Bit 0 jest przenoszony na bit 2
- Bit 1 jest przenoszony na bit 0
- Bit 2 jest przenoszony na bit 4
- Bit 3 jest przenoszony na bit 1
- Bit 4 jest przenoszony na bit 6
- Bit 5 jest przenoszony na bit 3
- Bit 6 jest przenoszony na bit 7
- Bit 7 jest przenoszony na bit 5
Dla wygody oto dwie inne reprezentacje permutacji. Jako cykl:
(02467531)
I jako lista par mapowania:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
Twoim zadaniem jest wizualizacja tej permutacji, stosując znaki materacem rysunek ─
, │
, ┌
, ┐
, └
, ┘
, ┼
(Unicode punkty kodowe: U + 2500, U + 2502, U + 250C, U + 2510, U + 2514, U + 2518, U + 253 ° C). Ta wizualizacja powinna spełniać następujące ograniczenia:
Pierwsza i ostatnia linia to dokładnie:
0 1 2 3 4 5 6 7
Pomiędzy nimi możesz użyć tyle linii, ile chcesz, do 15 znaków, aby pasowały do twoich znaków rysunkowych (potrzebujesz co najmniej 4 linii). Linie powinny rozpoczynać się pionowo pod jedną z cyfr w pierwszym rzędzie i kończyć się pionowo nad odpowiednią cyfrą w ostatnim rzędzie. Osiem linii musi być połączonych i może przecinać tylko ┼
(co jest zawsze skrzyżowaniem, nigdy dwie dotykające się linie zwrotne). Dokładne ścieżki linii zależą od ciebie (a znalezienie szczególnie grywalnego układu jest podstawą tego wyzwania). Jednym prawidłowym wyjściem byłoby:
0 1 2 3 4 5 6 7
│ │ └─┼┐│ │ └┐│
└─┼─┐ ││└─┼─┐││
┌─┘ │ ││ │ │││
│ ┌─┼─┘│ │ │││
│ │ │ ┌┼──┘ │││
│ │ │ │└┐ ┌─┼┼┘
│ │ │ │ │ │ │└┐
0 1 2 3 4 5 6 7
Jednak każdy inny układ, który poprawnie łączy prawidłowe cyfry, jest również w porządku. Pokaż swoją odpowiedź w odpowiedzi.
Możesz napisać program lub funkcję i nie będziesz pobierał żadnych danych wejściowych. Wyjście diagramu do STDOUT (lub najbliższej alternatywy) lub jako funkcja zwraca wartość w postaci łańcucha lub listy ciągów (każdy reprezentujący jedną linię).
Obowiązują standardowe zasady gry w golfa , więc wygrywa najkrótszy kod (w bajtach).
źródło
01234567
jako wejście, a następnie podłączając że do01234567
? Abyś sam musiał znaleźć linki? Byłoby to znacznie trudniejsze zadanie, szczególnie w golfa.Odpowiedzi:
Właściwie 69 bajtów
Wypróbuj online!(wyrównanie jest trochę popsute w tłumaczu online)
W rzeczywistości ma OGROMNĄ przewagę - wszystkie postacie do rysowania pudełek są w CP437, więc każdy z nich jest tylko bajtem. Chociaż każdy potrzebny znak może teoretycznie być zakodowany w 4 bitach (ponieważ jest tylko 9 unikalnych znaków), 31 bajtów zapisanych przez kompresję łańcucha zostanie utraconych z powodu bardzo słabych możliwości przetwarzania łańcucha. Oznacza to również, że każda konfiguracja 8x4 dałaby ten sam wynik. Ponieważ 8x4 wydaje się być (wertykalnie) najkrótszą możliwą konfiguracją, jest to optymalne.
Dzięki Martin za 3 bajty!
Dzięki TimmyD za jeszcze 4 bajty!
Wyjaśnienie:
źródło
PowerShell v2 +,
172153148145142131123 bajtów (81 znaków)Grałem dalej w tkactwo, eliminując potrzebę kilku zmiennych, używając wbudowanych bloków kodu. Jest to prawdopodobnie kilka bajtów wartości optymalnej.
Zaczynamy od ustawienia
$a
równego zakresowi,0..7
który został połączony ze spacjami. Wynika to z tego, że domyślnym$ofs
(Separator pól wyjściowych) tablicy jest spacja, więc gdy tablica jest strunitowana za pomocą""+
(z takim operatorem, PowerShell spróbuje niejawnie rzutować obiekt po prawej stronie jako obiekt po lewej stronie), wynikiem jest zakres oddzielony spacją.Jest to zamknięte w parens, co dodaje wynik do potoku. Następnie ustawiamy jedną zmienną pomocniczą
$b
, po której następują cztery wiersze danych wyjściowych z odpowiednią zmienną na miejscu (rozdzieloną dosłownymi znakami nowej linii) i używamy wbudowanych bloków kodu dla powtarzających się sekcji, a następnie$a
ponownie. Cztery linie i$a
są również umieszczane w potoku, a dane wyjściowe są niejawne na końcu.źródło
JavaScript ES6,
168167 bajtówEdycja: Ups, okazało się, że użyłem
|
znaku potoku zamiast U + 2502│
w części funkcji, zaktualizowałem liczbę bajtów.Zwraca ciąg.
Wydajność:
Dodatkowo: Korzystając z metody @ TimmyD, mam kolejne 167-bajtowe rozwiązanie:
źródło
JavaScript (ES6),
137134 bajtówJako dzwonek natychmiast rozpoznałem to jako pierwsze dwa rzędy Plain Hunt Major (zauważ, że połączone zdjęcie używa 1-8 zamiast 0-7).
źródło
Pyth -
11910410081 bajtówNiezwykle prosty. (Tym razem jego bajty).
Wypróbuj online tutaj .
Ukradłem również dane wyjściowe @ TimmyD:
źródło
MS-DOS Batch, 136 bajtów
Korzystanie z wyjścia @ TimmyD. Może to również działać w Windows Batch, ale moja strona kodowa to CP850, a nie CP437.
źródło
MATLAB / Octave,
112109 bajtówWydajność:
Mój kod oparty jest na wyjściach @Dendrobium i @Neil .
źródło
/// , 112 bajtów (100 znaków)
Dzięki @MartinEnder za -3 bajty!
Dzięki @MartinEnder za -9 bajtów!
Dzięki @MartinEnder (OP) za wskazanie 15-znakowego wykluczenia
Wykorzystuje
@ TimmyD@ Marcoźródło
Python3, 209 bajtów
Zwraca ciąg.
Dzięki @Mego za uratowanie 2 bajtów!
Kredyty ciała postaci są dostępne na @TimmyD!
źródło
a,
części, co również usunie potrzebę jej wywołania z parametrem.Szpule , 99 bajtów (87 znaków)
Wykorzystuje dane wyjściowe @ Marco (zamień co 16 znak na nowy wiersz (regex:
(.{15}).
->)\1\n
)).źródło
Bash + GNU sed, 140 bajtów
Wydajność:
Korzystanie z danych wyjściowych @ TimmyD : 142 bajty
Wydajność:
źródło
Tcl , 205 bajtów
Wypróbuj online!
wyjścia
źródło
SOGL V0.12 , 64 bajty
Wypróbuj tutaj!
Wzór skradziony z PowerShell
źródło