W miejscu pochówku króla Silo Asturii znajduje się napis: SILO PRINCEPS FECIT ( król Silo to zrobił ).
Pierwsza litera znajduje się na samym środku, a stamtąd czyta się, kierując się w dowolnym kierunku po przekątnej promieniującym na zewnątrz. Ostatni list znajduje się na wszystkich czterech rogach. W tym wyzwaniu uogólnisz proces ich tworzenia.
Wkład
Ciąg ( lub odpowiednik ) i liczba całkowita. Możesz przyjąć następujące założenia dotyczące danych wejściowych:
- Ciąg będzie miał nieparzystą długość.
- Liczba całkowita będzie liczbą nieparzystą od 1 do jeden mniejszą niż dwukrotność długości łańcucha.
Wydajność
Labyrinthica Inscriptio dla napisu, wykorzystując całkowitą dla wysokości lub szerokości (patrz przykłady modeli wysokość). Wyjście powinno składać się z każdej litery bez spacji, domyślny podział linii na system / język.
Przypadki testowe
Zauważ, że wprowadzenie 1 lub (długość * 2 - 1) spowoduje palindrom poziomy lub pionowy.
Input: FOO, 3 Input: BAR, 1 Input: BAR, 3 Input: BAR, 5
Output: OOO Output: RABAR Output: RAR Output: R
OFO ABA A
OOO RAR B
A
R
Input: ABCDE, 5 Input: ABCDE, 3 Input: *<>v^, 5
Output: EDCDE Output: EDCBCDE ^v>v^
DCBCD DCBABCD v><>v
CBABC EDCBCDE ><*<>
DCBCD v><>v
EDCDE ^v>v^
Punktacja
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach. Standardowe luki zabronione.
Odpowiedzi:
J , 27 bajtów
Wypróbuj online!
Przykład wyjaśni podejście na wysokim szczeblu.
Rozważać
'ABCDE' f 3
Zauważamy, że szukamy po prostu tabeli „dodawania krzyżowego”
1 0 1
i3 2 1 0 1 2 3
, która wygląda następująco:Następnie wyciągnąć te indeksy z oryginalnego napisu:
[{~
.Cała reszta kodu to po prostu nudna arytmetyka i użycie
i:
do konstruowania argumentów1 0 1
i3 2 1 0 1 2 3
.źródło
Galaretka , 12 bajtów
Wypróbuj online!
Diadadicowe ogniwo przyjmujące łańcuch za lewy, a wysokość za prawy argument. Zwraca ciąg z podziałami linii. Jeśli lista ciągów znaków była akceptowalna dla danych wyjściowych, mogę usunąć końcowy
Y
zapis bajtu. Co ciekawe, oryginalny „SILO PRINCEPS FECIT” wygląda jak sztuka ASCII diamentu 3D, gdy patrzę na to na TIO.Wyjaśnienie
źródło
R ,
939187 bajtów-2 bajty dzięki Giuseppe. -4 bajty przez podanie szerokości zamiast wysokości, jak dopuszcza OP.
Wypróbuj online!
Pobiera dane wejściowe jako wektor znaków. Kluczową częścią jest
s[1+outer(abs(-w:w),abs(-h:h),'+')]
.abs(-w:w)
abs(-h:h)
abs(-h:h)
outer(abs(-2:2), abs(-1:1), '+')
(musimy wtedy dodać 1, ponieważ R ma indeks 1). 0 w środku to miejsce, w którym powinna iść pierwsza litera wejścia.
Reszta to formatowanie.
źródło
Węgiel ,
2519 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Narysuj jedną czwartą napisu.
Zastanów się, aby uzupełnić napis.
źródło
Japt
-R
,1916 bajtówSpróbuj
źródło
Wolfram Language (Mathematica) ,
5754 bajtówWypróbuj online!
Przyjmuje szerokość jako dane wejściowe.
źródło
g
nie jest oceniany przy pierwszym wywołaniu funkcji. Wypróbuj online!Print/@f[...]
->Print/@Transpose[g[...]]
->Transpose[Print@g[...]]
, przez który czasg
jest zdefiniowany.Japt
-R
, 10 bajtówPrzybiera szerokość zamiast wysokości.
Spróbuj
Pseudokod (U to ciąg, V to liczba całkowita):
źródło
Perl 6 ,
6867 bajtówWypróbuj online!
źródło
Python 3, 104 bajty
Tak długo nie grałem w golfa ... Jestem pewien, że może być krótszy.
Detale
Ten kod definiuje funkcję, która pobiera dwa argumenty (ciąg i wysokość) i podaje wynik na standardowym wyjściu.
Indeks w łańcuchu to odległość Manhattanu od środka siatki. W przypadku siatki o szerokości
w
i wysokościh
odległość dla komórki(x, y)
wynosiabs(x - (w - 1) / 2) + abs(v - (h - 1) / 2)
.Szerokość siatki musi być taka, aby odległość rogów Manhattanu (powiedzmy
(0, 0)
) była o jeden mniejsza niż długość struny. Zastępując(0, 0)
powyższe i upraszczając, stwierdzamy, że szerokość jest po prostu2 * len(s) - h
.Kod
Wypróbuj online!
źródło
05AB1E , 10 bajtów
Wypróbuj online!
źródło
Pyth , 19 bajtów
Wypróbuj online!
źródło
Python 2 , 95 bajtów
Wypróbuj online!
źródło
Stax ,
119 bajtówUruchom i debuguj
Pobiera szerokość i oryginalny ciąg w tej kolejności.
źródło
C # (.NET Core) , 146 bajtów
Wypróbuj online!
Najdłuższa odpowiedź tak długo. :-) Wykorzystuje odległość Manhattanu do środka kwadratu. Musi być jednak krótsza droga.
źródło
Tcl ,
188170162 bajtówWypróbuj online!
Wydaje się, że istnieje milion złych sposobów na rozwiązanie tego problemu w TCL. To nie jest najgorsze z nich.
Zapisano minimum 18 bajtów poprzez konwersję na lambda (można zaoszczędzić do 13 więcej, jeśli dopuszczalna jest wartość zwracana z listy linii)
Zapisano dodatkowe 8, ponieważ iterator lmap służył jako dodatkowa stała
źródło
Płótno , 18 bajtów
Wypróbuj tutaj!
Płótno nie tworzy podciągów, więc muszę traktować go jak obiekt artystyczny i uzyskać w ten sposób podrozdział. Wydaje mi się, że kosztuje mnie to 2 bajty, ale hej, co możesz zrobić?Wygląda na to, że tak naprawdę nie działa tak, jak myślałem: funkcje palindromizacji Canvas odzwierciedlają określone znaki (np. V odbite pionowo zmienia się w ^) i nie mogę tego dokładnie wyłączyć ... no cóż, chyba
źródło
Rubinowy , 65 bajtów
Wypróbuj online!
źródło