Essendo programmatori, guardarci flettere non è molto interessante. Oggi lo cambiamo! In questa sfida farai esx e fletti gli esaflexagoni.
Di
Per un'introduzione video, guarda i video di Viharts sui flexagon
Un flexagon è una forma che puoi flettere per rivelare facce diverse da quella superiore e inferiore; stiamo realizzando un hexahexaflexagon, che ha 6 facce. Vedi l'immagine qui sotto su come piegare un hexahexaflexagon da una striscia di carta.
A
mostra entrambi i lati della striscia. I due triangoli bianchi sono incollati insieme. Ecco come lo fletteresti:
Di seguito è riportato un diagramma dei possibili stati e delle loro relazioni:
I cerchi colorati rappresentano i 6 triangoli con lo stesso numero della prima immagine. Ognuno dei cerchi ha due colori: il fondo rappresenta la faccia posteriore (cosa vedresti se capovolgi il tuo flexagon), che non devi considerare in questa sfida.
I cerchi grigi sullo sfondo rappresentano come si può flettere i flexagon in un determinato Stato: ci sono 4 modi diversi di flettersi, noi chiamiamo questi Left
, Right
, Up
e Down
. In realtà non ti fletti in queste direzioni, l'importante è che alcuni siano opposti.
Se sei al centro puoi usare Left
e Right
andare agli altri al centro. Per uscire dal centro che usi Up
e Down
. Se non sei al centro non puoi usarloLeft
oppure Right
.
Left/Down = clockwise
Right/Up = anti-clockwise
Sfida
Crea una funzione o un programma che prenda come input ciò che dovrebbe essere sulle 18 facce anteriori e sulle 18 facce posteriori di un flexagon, una sequenza di flessioni sinistra, destra, su e giù, e restituisce le 8 facce visibili dopo le flessioni.
Calcolo di esempio elaborato:
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"
Esempio di implementazione: http://jdoodle.com/a/18A
Input e output attesi:
> hexaflexaperplexia flexagationdevices RRL
= efxeli
> loremipsumdolorsit hexaflexamexicania RUU
= riuort
> abcdefghijklmnopqr stuvwxyz1234567890 UL
= I can't flex that way :(
> abcdefghijklmnopqr stuvwxyz1234567890 RRRRLLUDDUUUULDD
= uv1278
Regole
- È possibile accettare input e restituire output in modo ragionevole
- Se l'input è impossibile, è necessario indicarlo in qualche modo distinto dall'output normale
- Si applicano scappatoie standard
- Questo è
Codegolf
. Il codice più corto in byte vince.
|b/=0=[]!!1
? È possibile salvare alcuni byte riscrivendo alcune funzioni in stile privo di punti:\(a,_)(b,_)->a==b
->(.fst).(==).fst
,(!)=(q.).zip.cycle