Wprowadzenie
Alice jest dwuwymiarowym językiem Martina Endera, który ma dwa różne tryby wykonania: kardynalny i porządkowy . Kiedy wskaźnik instrukcji przechodzi przez lustro (albo /
albo \
), przełącza się z jednego trybu do drugiego.
W tym wyzwaniu skupimy się na trybie porządkowym , w którym polecenia działają na ciągach, a wskaźnik instrukcji porusza się po przekątnej, odbijając się od krawędzi kodu.
Proste programy działające tylko w trybie porządkowym można pisać w dość zwartym stylu, jak w poniższym przykładzie:
/fbd/
@aec\
Tu rozpoczyna się w trybie IP kardynalnej z pierwszą komórką idzie na wschód, przepływa przez pierwsze lustro i zaczyna poruszać się po przekątnej i podskakują, wykonywanie poleceń a
, b
oraz c
. Następnie spotyka lustro północno-wschodniej, która sprawia, że się na południe w kierunku drugiego lustra, a następnie rozpocząć odbijając z powrotem w kierunku zachodnim, napotykając polecenia d
, e
, f
, i wreszcie @
, który kończy program.
Tego rodzaju struktura jest dość zwarta, ale nie jest łatwa do napisania i utrzymania (dodanie jednego polecenia może zmusić nas do zmiany kolejności większości kodu!), Więc chciałbym, abyś pomógł mi w formatowaniu.
Zadanie
Biorąc pod uwagę sekwencję poleceń, gdzie każde polecenie jest pojedynczym drukowalnym znakiem ASCII, zmień ich kolejność w dwóch wierszach, aby pierwszą połowę sekwencji można było odczytać, zaczynając od pierwszego znaku drugiej linii, a następnie przesuwając się zawsze po przekątnej w prawo, podczas gdy drugą połowę można odczytać, biorąc pozostałe postacie od prawej do lewej. Nie martw się o lusterka i symbol zakończenia, dodam je osobiście.
Na przykład biorąc pod uwagę dane wejściowe, abcdef
które należy wyprowadzić
fbd
aec
W przypadku, gdy dane wejściowe są nieparzystej długości, należy w dowolnym miejscu dodać pojedynczą spację (która jest noop w Alice), o ile sekwencja napotkanych poleceń pozostaje taka sama. Możesz również wybrać wyświetlanie dwóch wierszy różniących się długością o jeden znak, w którym to przypadku uważa się, że krótszy wiersz zawiera jedną spację na końcu.
Zasady
To jest golf-golf, najkrótsza odpowiedź w bajtach wygrywa!
- Możesz wprowadzić / wyprowadzić dowolną z domyślnych metod wejścia / wyjścia
- Dane wejściowe składają się z jednego wiersza drukowalnych znaków ASCII
- Pojedynczy znak nowej linii jest dozwolony w danych wyjściowych
- Niektóre dane wyjściowe programu mogą nie mieć całkowicie poprawnego działania, gdy są uruchamiane jako programy Alice (np. Jeśli przestrzeń dopełniania jest wstawiona do literału łańcucha). Nie musisz się martwić tymi sytuacjami
- Standardowe luki są zabronione
Przypadki testowe
--Input
abcdef
--Output
fbd
aec
--Input
123
--Output
2
13
OR
31
2
OR
3
12
OR
32
1
--Input
O
--Output
O
OR
O
--Input
"Hello, World!"o
--Output
oH!lloo
""edlr,W
--Input
i.szR.szno
--Output
o.zz.
inssR
--Input
" ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So
--Output
o *^i}'.*[;.h~r}}~"{.[^
"S .^~ y~a}~~.["{!~"}^^^
(Odd length, your solution may be different)
Galaretka ,
2322 bajtów-1 bajt dzięki Leo (lewy dolny może być dopełnienie)
Pełny program wypisujący wynik (monadyczny link zwraca listę list list znaków).
Wypróbuj online! lub zobacz pakiet testowy .
W jaki sposób?
źródło
JavaScript (ES6), 104 bajty
Działa poprzez emulowanie ścieżki wykonania i wypełnianie poleceń w miarę jej działania.
źródło
1&~i
Osiąga pionową zygzakowata, podczas gdyi+i>l?l-i:i
osiąga lustro połowy. Po wprowadzeniu wszystkich poleceń w pożądane pozycje wykonania tablica jest następnie gromadzona razem, aby uzyskać pożądany wynik.