Будучи програмістами, спостерігати за тим, як ми гнучкі, не дуже цікаво. Сьогодні ми це змінюємо! У цьому виклику ви будете розгинати та розгинати шестигранники.
Про
Для вступу до відео дивіться відео з віхартом на флексографах
Флексогон - це форма, яку можна згинати, щоб виявити обличчя, окрім верхнього та нижнього; ми робимо шестигексафлексагон, який має 6 граней. Дивіться зображення нижче про те, як скласти шестигексафлексагон із смужки паперу.
A
зображено обидві сторони смужки. Два білих трикутника склеєні між собою. Ось як би ви його згинали:
Нижче наведена схема можливих станів та їх взаємозв'язків:
Кольорові кола представляють 6 трикутників з однаковою кількістю від першого зображення. Кожен з кіл має два кольори - нижній частині найбільше представляє задню частину обличчя (що ви побачите, коли б де розгорнути свій флексогон), що вам не доведеться враховувати в цьому виклику.
Сірі кола на задньому плані представляють , як ви можете згинати ваш флексагон в даному стані: є 4 різні способи згинаються, ми називаємо це Left
, Right
, Up
і Down
. Ви насправді не рухаєтесь у цих напрямках, важливим є те, що деякі протилежні один одному.
Якщо ви перебуваєте в центрі, ви можете скористатися Left
і Right
перейти до інших центрів. Щоб вийти з центру, яким ви користуєтесь Up
і Down
. Якщо ви не в центрі, ви не можете скористатисяLeft
або Right
.
Left/Down = clockwise
Right/Up = anti-clockwise
Виклик
Створіть функцію або програму, яка приймає як вхід те, що повинно бути на 18 передніх та 18 задніх частинах флексогону, послідовності згинів лівого, правого, верхнього та нижнього поверхонь та повертайте 8 видимих граней після згинів.
Розробимо приклад обчислення:
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"
Приклад реалізації: http://jdoodle.com/a/18A
Вхідні дані та очікуваний вихід:
> hexaflexaperplexia flexagationdevices RRL
= efxeli
> loremipsumdolorsit hexaflexamexicania RUU
= riuort
> abcdefghijklmnopqr stuvwxyz1234567890 UL
= I can't flex that way :(
> abcdefghijklmnopqr stuvwxyz1234567890 RRRRLLUDDUUUULDD
= uv1278
Правила
- Ви можете приймати вхід і повертати вихід будь-яким розумним способом
- Якщо введення неможливо, вам слід вказати це певним чином, що відрізняється від звичайного виводу
- Застосовуються стандартні лазівки
- Це
Codegolf
. Найкоротший код виграти в байтах.
|b/=0=[]!!1
? Ви можете зберегти кілька байтів, переписуючи деякі функції у точковому стилі:\(a,_)(b,_)->a==b
->(.fst).(==).fst
,(!)=(q.).zip.cycle