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.
A
şeridin her iki tarafını gösterir. İki beyaz üçgen birbirine yapıştırılmıştır. Bunu şu şekilde esnetebilirsiniz:
Aşağıda olası durumların ve ilişkilerinin bir diyagramı verilmiştir:
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
, Up
ve 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 Left
ve Right
diğer merkez olanları gitmek için. Merkezden çıkmak için Up
ve kullanın Down
. Merkezde değilseniz kullanamazsınızLeft
veya 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.
|b/=0=[]!!1
? Bazı fonksiyonları noktasız tarzda yeniden yazarak birkaç bayt kaydedebilirsiniz:\(a,_)(b,_)->a==b
->(.fst).(==).fst
,(!)=(q.).zip.cycle