Biorąc pod uwagę ciąg, najpierw kwadrat go w następujący sposób:
Najpierw napisz ciąg.
abcde
Następnie napisz ciąg obrócony w lewo.
abcde
bcdea
Rób to dalej, dopóki nie napiszesz wierszy len (string) .
abcde
bcdea
cdeab
deabc
eabcd
Teraz przeczytaj następujący ciąg:
----+
+--+|
|+>||
|+-+|
+---+
Co daje:
abcdeabcdcbaedcbcdeabaede
Wydrukuj ten ciąg.
Przypadki testowe
abcdef -> abcdefabcdedcbafedcbcdefabcbafedefaf
cena! -> cena!cenanec!anena!cec!a!
ppcg -> ppcgppcppgcpcgpg
abc -> abcabacbc
ab -> abab
a -> a
->
Proszę o komentarz, jeśli przypadek testowy jest niepoprawny.
Pamiętaj, to jest kodowanie w golfa , więc wygrywa kod z najmniejszą liczbą bajtów.
cena!
jest źle. Powinien pasować do twojego przykładu,abcde
ponieważ obie mają 5 liter:cena!cenanec!anena!cec!a!
Odpowiedzi:
JavaScript (ES7),
83807877 bajtówDodatkowy program zgodny z ES3:
Wyjaśnienie
Wykorzystuje to fakt, że dane wyjściowe dla np. Ciągu 5 długości mogą być reprezentowane jako:
gdzie każda cyfra reprezentuje indeks w ciągu (zaczynając od 0), modulo długość ciągu. Innymi słowy, jeśli n jest długością łańcucha, zwiększamy indeks 2n - 1 razy, następnie zmniejszamy go 2 (n - 1) - 1 razy, a następnie zwiększamy go 2 (n - 2) - 1 razy itp. Można to uprościć do następującego algorytmu:
Działa to, ponieważ floor (sqrt (x)) przełącza parzystości po 2 iteracjach 2n - 1 , a następnie 2 (n - 1) - 1 iteracjach itp.
źródło
Pyth , 15 bajtów
Program, który pobiera dane wejściowe
"quoted string"
i wypisuje wynik.Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe (zmodyfikowane dla wielu danych wejściowych).
Jak to działa
źródło
Python 2.7 (w CMD.EXE), 91 bajtów
Wymaga to terminala z działającym backspace (
\b
) i nie będzie działać na repl.it ani ideone.com . Instrukcja print kończąca się przecinkiem oddziela dalsze wyniki spacją zamiast znaku nowej linii lub znaku powrotu. Backspace pozwala nam zastąpić przestrzeń oddzielającą.Python 2.7, 96 bajtów
Wypróbuj na ideone.com lub repl.it (dzięki Oliver). Dane wejściowe muszą być ciągiem python, np
'cena!'
.Cztery plastry dołączone przez pętlę (
s[i:]
,s[:n-i]
,r[i+2:]
,r[:n-i]
) zostały uzyskane w czterech krawędziach spirali. Na przykład z01234
kwadratem jest:Więc bierzemy
01234
,0123
,210
,4321
. Zmiennai
jest indeksem lewej górnej wartości na każdym etapie procesu. W ostatniej spirali kilka plasterków może być pustych.źródło
S=''
,print S
iS+=
, i wszystko przed owijaniai+=2
wprint()
oświadczeniu zsep=''
można zapisać 2 bajty.i<=n
nan>i
"a string of odd length."
Galaretka ,
1110 bajtówTryItOnline! lub wszystkie testy
W jaki sposób?
Niespirowany kwadrat to seria „górnych krawędzi i prawych krawędzi” i „dolnych krawędzi plus lewej krawędzi”, z których każdy jest odwrotnością poprzedniego przebiegu bez pierwszej i ostatniej litery, a pierwsza z nich jest wejściem plus wejściem bez ostatniej litery (np. wejście
"abcde"
ma wynik"abcdeabcd" + "cbaedcb" + "cdeab" + "aed" + "e"
).źródło
05AB1E, 12 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
MATL , 27 bajtów
Puste wejście kończy się z błędem (wytwarzanie prawidłowego wyjścia).
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
źródło
C,
9594 bajtówZainspirowany odpowiedzią @ETHproductions.
źródło
Perl, 99 bajtów
Biała spacja nie jest częścią programu i zapewnia czytelność.
Niezbyt wydajny kod. Powinienem w jakiś sposób skrócić pierwsze trzy wiersze, ale wszystko, co próbowałem zrobić, zawiodło. Ten trójskładnikowy operator również musi zostać jakoś naprawiony, ale dzięki temu udało mi się skrócić mój kod o około 10 bajtów, ponieważ mogłem tak dużo wyciąć.
Kod działa poprzez skompilowanie listy palindromów, oddzielonych liczbami parzystymi, które reprezentują wartości miejsca ciągu, który należy pobrać.
źródło
-F
który zastąpi wiersz 1 i 3. Podaj dane wejściowe,echo -n
aby usunąćchop
. (to powinno zabrać cię około 81 bajtów)Tak właściwie ,
2113 bajtówAlgorytm ten jest w dużej mierze oparty na odpowiedzi galaretki Jonathana Allana . Istnieją dwa sposoby na wydrukowanie wyniku jako jednego ciągu. Zastosowane tutaj podejście powiela krok pośredni, a następnie dodaje go do bieżącej sumy w rejestrze 1 (domyślnie pusty ciąg znaków);
;╕
w funkcji, a następnie╛
na końcu. Drugim podejściem jest zduplikowanie pośredniego kroku, pozostawienie tych zduplikowanych kroków na stosie i zsumowanie ich w jeden ciąg na końcu;;
w funkcji, a następniekΣ
na końcu.Sugestie dotyczące gry w golfa mile widziane. Wypróbuj online!
Ungolfing
źródło
Python 3, 59 bajtów
repl.it
Bezpośredni port mojej odpowiedzi na galaretkę ; tylko pełny program przyjmujący dane wejściowe (zamiast funkcji).
Jest
print(x,end='')
to instrukcja print, która nie wypisze domyślnej nowej linii.źródło
Python 3, 93 bajty
Wypróbuj online!
źródło
print(...,end='')
zróbprint(end=s[i:]+s[:n-i]+r[i+2:]+r[:n-i]
abcde
, brakuje goe
na końcu.i<=n
zamiastn-i
swojego stanu.