プログラマーである私たちがフレックスするのを見るのはあまり面白くありません。今日はそれを変えます!この課題では、ヘキサフレクサゴンを字形に変えます。
約
ビデオ紹介については、FlexagonsでVihartsビデオをご覧ください
flexagonは、上と下以外の面を表示するために曲げることができる形状です。6つの面を持つhexahexaflexagonを作成しています。紙の片からヘキサヘキサフレクサゴンを折り畳む方法については、下の画像を参照してください。
A
ストリップの両側を示しています。2つの白い三角形が接着されます。これはあなたがそれを変える方法です:
以下は、考えられる状態とそれらの関係の図です。
色付きの円は、最初の画像と同じ番号の6つの三角形を表しています。それぞれの円には2つの色があります。下の色は背面(フレクサゴンをひっくり返す場所を確認するとわかります)を最もよく表しており、この課題で考慮する必要はありません。
それを曲げる4種類の方法がありますが、我々はこれらを呼び出す:背景に灰色の円はあなたが任意の状態であなたのflexagonを曲げることができますどのように表現し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