Wejście:
Sznurek
Wynik:
1) Najpierw bierzemy znak usuwania na końcu ciągu wejściowego, dopóki nie zostanie nam długość, która jest kwadratem (tj. 1, 4, 9, 16, 25, 36 itd.)
Tak więc abcdefghijklmnopqrstuvwxyz
(długość 26) staje się abcdefghijklmnopqrstuvwxy
( długość 25).
2) Następnie umieszczamy to w kwadracie, po jednej linii, od lewej do prawej:
abcde
fghij
klmno
pqrst
uvwxy
3) Składamy go we wszystkich czterech kierunkach, w ten sposób (rozkładamy, dopóki zewnętrzny złożony blok nie będzie miał żadnych wewnętrznych znaków do rozwinięcia):
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Należy zwrócić uwagę na kilka rzeczy: kiedy składamy na zewnątrz, w zasadzie odbijamy w ten sposób (liczby dodawane jako wyjaśnienie, które reprezentują „indeksy” w tych przykładach):
Kiedy rozkładamy lewą stronę:
123 to: 321 123
fghij ihgf j
Kiedy składamy prawą stronę:
123 to: 123 321
fghij f jihg
Kiedy składamy do góry:
3q
2l
1g
b to: b
1g 1
2l 2
3q 3
v v
Kiedy składamy w dół:
b b
1g 1
2l 2
3q 3
v to: v
3q
2l
1g
Zasady konkursu:
- Możesz założyć, że dane wejściowe zawsze będą miały co najmniej 1 znak (który będzie również danymi wyjściowymi).
- Format wyjściowy jest elastyczny, dzięki czemu można drukować do STDOUT lub STDERR; zwraca jako tablicę łańcuchową / listę lub tablicę znaków 2D; pojedynczy ciąg z nowymi wierszami; itp.
- Dane wejściowe będą zawierać tylko znaki alfanumeryczne (
a-zA-Z0-9
) - Możesz również użyć znaku niealfanumerycznego, aby wypełnić spacje i / lub wokół wyjścia ASCII-art, jak kropka
.
. - Końcowe spacje i pojedyncza nowa linia są opcjonalne.
- Kontynuujemy rozkładanie, dopóki zewnętrzny złożony blok nie będzie miał więcej centrów do rozwinięcia.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i zwracanymi typami, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- W razie potrzeby dodaj również wyjaśnienie.
Przypadki testowe:
Input: abcdefghijklmnopqrstuvwxy
Output:
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Input: A
Ouput:
A
Input: ThisIsATest
Output:
I
Thi
Is sI
ATe
I
Input: HowAboutAVeryLongExampleWhichIsAlsoAnEvenSquareInsteadOfOddOneAndExceeds64Chars
Output:
An
ch
xamp
i I
o E
quar
steadO
S e
s v
h s
E l
VeryLo
HowAbout
oLyreVA noLyreV
xampl Eg el Examp
hci Is hW As hi Ihc
nAo Ev sl ev so EnA
quare Sn Ie Squar
Odaetsn fOdaets
OddOneAn
steadO
S e
s v
h s
E l
VeryLo
xamp
i I
o E
quar
An
ch
Input: Lenght7
Output:
Le
ng
Input: abc
Output:
a
Odpowiedzi:
SOGL V0.12 , 75 bajtów
Wypróbuj tutaj!
Oczekuje to danych wejściowych na stosie, więc dla łatwości użycia dodałem
,
na początku. Może to powodować problemy, jeśli dane wejściowe zawierają tylko liczby, więc tutaj jest zestaw testów do tego.√lH»{ā;l⁾:A∫Ba{bIwFIWhFbž;FIbI@ž}};}¹K⁴{ē2\⌡±e{@Κ};⁴┼┼};0E{ē2\⌡№:h++}╚
Działa też 70 bajtów , ale ponieważ dopiero teraz zaimplementowałem√
ciągi, a dokumentacja nie wspomniała, że osiągnie długość, nie będę tego liczyć.Wyjaśnienie:
źródło
√
działało tylko na liczbach. Powodem, dla którego nie liczę wersji 75-bajtowej, jest to, że czuję, że mieści się w niej luka polegająca na dodaniu wbudowanego tylko dla wyzwaniaWęgiel drzewny ,
120109 bajtówWypróbuj online! Uwaga:
A
od tego czasu zmieniono na≔
i link to odzwierciedla. Wyjaśnienie:Oblicza
h = int(sqrt(len(q)))
. (Floor
miał dopiero zostać wdrożony ...)Wydobywa
h
plasterki długościh
z danych wejściowych. (Właściwie nie zawracam sobie głowy przycinaniem plastrów na długośćh
.) Używamfor
raczej pętli niż a,Map
ponieważ potrzebuję gdzieśAssign
wyniku,Map
a to nie jest łatwe, gdy mam do czynienia zSlice
.Rozkładanie odbywa się 4 razy, raz dla każdego kierunku (w dół, w prawo, w górę, w lewo zgodnie z kodowaniem). Zmienna pętli dla tej pętli to
i
.Weź kopię pociętego sznurka.
Skocz z powrotem do pochodzenia płótna tak, że każdy zaczyna Unfold z
h
-by-h
placu w tym samym miejscu.Powtórz
(h+1)/2
czasy; raz dla każdego rozwinięcia, plus raz dla oryginalnego kwadratu. Zmienna pętli dla tej pętli tok
.Powtórz 4 razy, raz dla każdej strony rozłożonego kwadratu. (Nie używam zmiennej pętli
l
.)Wydrukuj jedną stronę rozłożonego kwadratu. Ponieważ jest to
k
rozwinięcie th, bok kwadratu jesth-2k
i zabiera postaciek
z krawędzi oryginalnego kwadratu.Obróć gotowy do wydrukowania następnej strony kwadratu.
Obróć pokrojony sznurek. (Tak, to a
ξ
. Nie często go używam!)Eη
Działałoby również na zewnętrzneMap
. Obrót ma również wygodny efekt uboczny skracania szerokości tablicy doh
.Po wydrukowaniu boku kursor zsuwa się z krawędzi kwadratu. Drukowanie jednego znaku mniej nie powiedzie się dla kwadratów strony 1 i jest mniej golfa. Po uprzednim obróceniu drukowanie nowego wiersza wygodnie przesuwa kursor z powrotem do rogu.
Odwróć kwadrat pionowo lub poziomo, stosownie do potrzeb.
Oblicz przesunięcie do następnego rozwinięcia.
Przejdź odpowiednio poziomo lub pionowo do następnego rozłożenia.
Oto link do 97-bajtowej wersji uzyskanej dzięki wykorzystaniu wszystkich najnowszych funkcji węgla drzewnego, w tym
Floor
: Wypróbuj online! Link jest do pełnej wersji kodu.źródło