Będąc programistami, obserwowanie nas elastycznych nie jest zbyt interesujące. Dziś to zmieniamy! W tym wyzwaniu będziesz lekturze i wyginaniem heksafleksagonów.
O
W celu wprowadzenia wideo obejrzyj filmy wideo Viharts na temat fagotów
Fleksagon to kształt, który można wygiąć, aby odsłonić ściany inne niż górna i dolna; wykonujemy sześcioheksafleksagon, który ma 6 ścian. Zobacz zdjęcie poniżej, jak złożyć sześciokąt heksafleksagon z paska papieru.
A
pokazuje obie strony paska. Dwa białe trójkąty są ze sobą sklejone. Tak byś to zgiął:
Poniżej znajduje się schemat możliwych stanów i ich zależności:
Kolorowe koła reprezentują 6 trójkątów o tym samym numerze z pierwszego obrazu. Każdy z okręgów ma dwa kolory - dolny najbardziej reprezentuje tylną twarz (to, co zobaczyłbyś, gdybyś odwrócił fleksagon), czego nie musisz brać pod uwagę w tym wyzwaniu.
Szare okręgi w tle przedstawiają jak można wyginać swoje flexagon w danym stanie: istnieją 4 różne sposoby, aby go wygiąć, nazywamy te Left
, Right
, Up
i Down
. W rzeczywistości nie zginasz się w tych kierunkach, ważne jest to, że niektóre są naprzeciw siebie.
Jeśli jesteś w centrum, możesz użyć Left
i Right
przejść do innych centralnych. Aby wyjść z centrum, używasz Up
i Down
. Jeśli nie jesteś w centrum, nie możesz z niego korzystaćLeft
lub Right
.
Left/Down = clockwise
Right/Up = anti-clockwise
Wyzwanie
Utwórz funkcję lub program, który weźmie jako dane wejściowe to, co powinno być na 18 ścianach przednich i 18 ścianach tylnych fleksonu, sekwencję zgięć w lewo, w prawo, w górę iw dół i zwróć 8 widocznych ścian po zgięciach.
Opracuj przykładowe obliczenia:
flex "hexaflexaperplexia"
"flexagationdevices"
[Right, Right, Left]
Divide a strip of paper into 18 triangles:
1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3 Front
4/4\5/5\6/6\4/4\5/5\6/6\4/4\5/5\6/6 Back
Write "hexaflexaperplexia" on the front of the paper strip:
1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3
hexaflexaperplexia
123123123123123123
h a e p p x Face 1, Initially the front face
e f x e l i Face 2, Initially the back face
x l a r e a Face 3, Initially hidden
Write "flexagationdevices" on the back of the paperstrip:
4/4\5/5\6/6\4/4\5/5\6/6\4/4\5/5\6/6
flexagationdevices
445566445566445566
fl at ev Face 4, up from 3
ex io ic Face 5, up from 2
ag nd es Face 6, up from 1
Flex it [Right, Right, Left]
The initial visible face is 1: "haeppx"
flexing Right ..
The current visible face is 2: "efxeli"
flexing Right ..
The current visible face is 3: "xlarea"
flexing Left ..
The current visible face is 2: "efxeli"
flexed [Right, Right, Left]!
outputting "efxeli"
Przykładowa implementacja: http://jdoodle.com/a/18A
Dane wejściowe i oczekiwane wyniki:
> hexaflexaperplexia flexagationdevices RRL
= efxeli
> loremipsumdolorsit hexaflexamexicania RUU
= riuort
> abcdefghijklmnopqr stuvwxyz1234567890 UL
= I can't flex that way :(
> abcdefghijklmnopqr stuvwxyz1234567890 RRRRLLUDDUUUULDD
= uv1278
Zasady
- Możesz przyjmować dane wejściowe i zwracać dane wyjściowe w dowolny rozsądny sposób
- Jeśli wejście jest niemożliwe, powinieneś to zaznaczyć w inny sposób niż zwykłe wyjście
- Obowiązują standardowe luki
- Jest
Codegolf
. Najkrótszy kod w bajtach wygrywa.
|b/=0=[]!!1
? Możesz zapisać kilka bajtów przepisując niektóre funkcje w stylu bezcelowym:\(a,_)(b,_)->a==b
->(.fst).(==).fst
,(!)=(q.).zip.cycle
|b/=0=[]!!1
rzuca wyjątek, jeśli spróbujesz wykonać niemożliwy flexo n(a,b)|n>1||b<1=(z$a+[-1,1,0,0]!!n,z$b+[0,0,-1,1]!!n)
generując wyjątek Niewyczerpujące wzory