Flexagonal esneme


9

Programcı olmak, bizi esnek izlemek çok ilginç değil. Bugün bunu değiştiriyoruz! Bu meydan okumada lex ve flexaflexagons esnek olacak.

hakkında

Bir video tanıtımı için flexagons'ta viharts videolarını izleyin

Flexagon, üst ve alt yüzler dışındaki yüzleri ortaya çıkarmak için esnetebileceğiniz bir şekildir; 6 yüzlü bir heksaheksaflexagon yapıyoruz. Bir hexahexaflexagon'ın bir kağıt şeridinden nasıl katlanacağı ile ilgili aşağıdaki resme bakın.

hexahexaflexagon inşaat

Aşeridin her iki tarafını gösterir. İki beyaz üçgen birbirine yapıştırılmıştır. Bunu şu şekilde esnetebilirsiniz:

fleksogonun bükülmesi

Aşağıda olası durumların ve ilişkilerinin bir diyagramı verilmiştir:

Diyagram v6

Renkli daireler ilk görüntüden aynı sayıda 6 üçgeni temsil eder. Her bir meydanın iki rengi vardır - en alttaki arka yüzü temsil eder (bu fleksogenizi nereye çevirirseniz göreceğiniz şey), bu meydan okumada dikkate almanız gerekmez.

Bükün için 4 farklı yolları vardır, bu çağrı: Arka planda gri çevreler size herhangi bir durumda sizin flexagon esneyebilir nasıl temsil Left, Right, Upve Down. Aslında bu yönlerde esnemezsiniz, önemli olan nokta bazılarının birbirine zıt olmasıdır.
Eğer merkezde ise kullanabileceğiniz Leftve Rightdiğer merkez olanları gitmek için. Merkezden çıkmak için Upve kullanın Down. Merkezde değilseniz kullanamazsınızLeftveya Right.

Left/Down = clockwise
Right/Up  = anti-clockwise

Meydan okuma

Bir flektonun 18 ön yüzünde ve 18 arka yüzünde ne olması gerektiğini girdi olarak alan bir işlev veya program oluşturun, sol, sağ, yukarı ve aşağı esneme sırası ve fleksiyonlardan sonra 8 görünür yüzü döndürün.

Ayrıntılı örnek hesaplama:

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"

Örnek uygulama: http://jdoodle.com/a/18A

Girdi ve beklenen çıktı:

> hexaflexaperplexia flexagationdevices RRL
= efxeli

> loremipsumdolorsit hexaflexamexicania RUU
= riuort

> abcdefghijklmnopqr stuvwxyz1234567890 UL
= I can't flex that way :(

> abcdefghijklmnopqr stuvwxyz1234567890 RRRRLLUDDUUUULDD
= uv1278

kurallar

  • Girdi ve geri dönüş çıktılarını makul bir şekilde alabilirsiniz
  • Giriş imkansızsa, bunu normal çıkıştan farklı bir şekilde belirtmelisiniz.
  • Standart boşluklar geçerlidir
  • Bu Codegolf. Bayt kazanmak için en kısa kod.

Yanıtlar:


2

Haskell (Lambdabot), 270 234 bayt

(!)=((map(snd<$>).groupBy((.fst).(==).fst).sortOn fst).).zip.cycle
o n(a,b)|n>1||b<1=(mod(a+[-1,1,0,0]!!n)3,mod(b+[0,0,-1,1]!!n)3)
(x&y)d|(g,h)<-foldl(flip(.))id(o<$>d)(0,0)=([0,1,2]!x++[3,3,4,4,5,5]!y)!!([0,5,1,1,4,2,2,3,0]!!(3*g+h))

Kullanımı:

> (&) "hexaflexaperplexia" "flexagationdevices" [1,3]
"exioic"

[0,1,2,3] = [sol, sağ, yukarı, aşağı]

@Damien'e çok byte için teşekkürler!


1
Ne işe yarar |b/=0=[]!!1? Bazı fonksiyonları noktasız tarzda yeniden yazarak birkaç bayt kaydedebilirsiniz: \(a,_)(b,_)->a==b-> (.fst).(==).fst,(!)=(q.).zip.cycle
Damien

@Damien |b/=0=[]!!1imkansız bir esneklik yapmaya çalışırsanız bir istisna atar
BlackCap

1
Tamam, bu basit o n(a,b)|n>1||b<1=(z$a+[-1,1,0,0]!!n,z$b+[0,0,-1,1]!!n)olmayan bir desen istisna atacak ile basitleştirebilirsiniz
Damien
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.