Menjadi programmer, menonton kami fleksibel tidak terlalu menarik. Hari ini kita mengubahnya! Dalam tantangan ini Anda akan lex dan flex hexaflexagons.
Tentang
Untuk pengantar video, tonton video viharts di flexagons
Flexagon adalah bentuk yang dapat Anda tekuk untuk menunjukkan wajah selain yang atas dan bawah; kami membuat hexahexaflexagon, yang memiliki 6 wajah. Lihat gambar di bawah ini tentang cara melipat hexahexaflexagon dari selembar kertas.
A
menunjukkan kedua sisi strip. Dua segitiga putih direkatkan. Inilah cara Anda melenturkannya:
Di bawah ini adalah diagram kemungkinan keadaan dan hubungannya:
Lingkaran berwarna mewakili 6 segitiga dengan angka yang sama dari gambar pertama. Masing-masing circes memiliki dua warna - bagian paling bawah mewakili wajah belakang (apa yang akan Anda lihat jika Anda harus membalikkan flexagon Anda), yang tidak harus Anda pertimbangkan dalam tantangan ini.
Lingkaran abu-abu di latar mewakili bagaimana Anda dapat melenturkan flexagon Anda dalam keadaan tertentu: ada 4 cara yang berbeda untuk melenturkan itu, kita sebut ini Left
, Right
, Up
dan Down
. Anda tidak benar-benar melenturkan arah ini, yang penting adalah bahwa beberapa saling bertentangan.
Jika Anda berada di pusat, Anda dapat menggunakan Left
dan Right
untuk pergi ke pusat lainnya. Untuk keluar dari pusat yang Anda gunakan Up
dan Down
. Jika Anda tidak berada di tengah, Anda tidak dapat menggunakanLeft
atau Right
.
Left/Down = clockwise
Right/Up = anti-clockwise
Tantangan
Buat fungsi atau program yang mengambil input apa yang seharusnya ada pada 18 wajah depan dan 18 wajah belakang fleksagon, urutan flek kiri, kanan, atas dan bawah, dan kembalikan 8 wajah yang terlihat setelah fleks.
Contoh perhitungan yang rumit:
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"
Contoh implementasi: http://jdoodle.com/a/18A
Input dan output yang diharapkan:
> hexaflexaperplexia flexagationdevices RRL
= efxeli
> loremipsumdolorsit hexaflexamexicania RUU
= riuort
> abcdefghijklmnopqr stuvwxyz1234567890 UL
= I can't flex that way :(
> abcdefghijklmnopqr stuvwxyz1234567890 RRRRLLUDDUUUULDD
= uv1278
Aturan
- Anda dapat mengambil input dan mengembalikan output dengan cara yang masuk akal
- Jika input tidak memungkinkan, Anda harus mengindikasikannya dengan cara yang berbeda dari output biasa
- Celah standar berlaku
- Ini
Codegolf
. Kode terpendek dalam byte menang.
|b/=0=[]!!1
? Anda dapat menyimpan beberapa byte dengan menulis ulang beberapa fungsi dengan gaya pointfree:\(a,_)(b,_)->a==b
->(.fst).(==).fst
,(!)=(q.).zip.cycle
|b/=0=[]!!1
hanya melempar pengecualian jika Anda mencoba melakukan flex yang mustahilo n(a,b)|n>1||b<1=(z$a+[-1,1,0,0]!!n,z$b+[0,0,-1,1]!!n)
ini akan melempar pengecualian pola Non-lengkap