# RUBIK-CUBE エンジン
#
# Written by N.Tounaka(xxxxxxx@usp-lab.com)
# Date : 5 Jun.2012
# Arranged by USP MAGAZINE(xxx@usp-lab.com)
# Date : 6 Jun.2012
init () # 色が揃ったキューブをセットする
{
for surf in F U B D R L; do
yes "$surf" |
head -9 |
yarr -3 > $surf
done
}
r () # R面(Right)の90度時計回り
{
self 3 F | cat > $tmp-f
self 3 U | tac > $tmp-u
self 1 B | cat > $tmp-b
self 1 D | tac > $tmp-d
delf 3 F | ycat - $tmp-d > $tmp-w; mv $tmp-w F
delf 3 U | ycat - $tmp-f > $tmp-w; mv $tmp-w U
delf 1 B | ycat $tmp-u - > $tmp-w; mv $tmp-w B
delf 1 D | ycat $tmp-b - > $tmp-w; mv $tmp-w D
tateyoko R | self 3 2 1 > $tmp-w; mv $tmp-w R
}
R () # R面(Right)の90度反時計回り
{
self 3 F | tac > $tmp-f
self 3 U | cat > $tmp-u
self 1 B | tac > $tmp-b
self 1 D | cat > $tmp-d
delf 3 F | ycat - $tmp-u > $tmp-w; mv $tmp-w F
delf 3 U | ycat - $tmp-b > $tmp-w; mv $tmp-w U
delf 1 B | ycat $tmp-d - > $tmp-w; mv $tmp-w B
delf 1 D | ycat $tmp-f - > $tmp-w; mv $tmp-w D
tateyoko R | tac > $tmp-w; mv $tmp-w R
}
l () # L面(Left)の90度時計回り
{
self 1 F | tac > $tmp-f
self 1 U | cat > $tmp-u
self 3 B | tac > $tmp-b
self 3 D | cat > $tmp-d
delf 1 F | ycat $tmp-u - > $tmp-w; mv $tmp-w F
delf 1 U | ycat $tmp-b - > $tmp-w; mv $tmp-w U
delf 3 B | ycat - $tmp-d > $tmp-w; mv $tmp-w B
delf 3 D | ycat - $tmp-f > $tmp-w; mv $tmp-w D
tateyoko L | self 3 2 1 > $tmp-w; mv $tmp-w L
}
L () # L面(Left)の90度反時計回り
{
self 1 F | cat > $tmp-f
self 1 U | tac > $tmp-u
self 3 B | cat > $tmp-b
self 3 D | tac > $tmp-d
delf 1 F | ycat $tmp-d - > $tmp-w; mv $tmp-w F
delf 1 U | ycat $tmp-f - > $tmp-w; mv $tmp-w U
delf 3 B | ycat - $tmp-u > $tmp-w; mv $tmp-w B
delf 3 D | ycat - $tmp-b > $tmp-w; mv $tmp-w D
tateyoko L | tac > $tmp-w; mv $tmp-w L
}
f () # F面(Front)の90度時計回り
{
tail -1 U | tarr > $tmp-u
self 1 R | yarr > $tmp-r
tail -1 D | tarr | tac > $tmp-d
self 3 L | yarr | self 3 2 1 > $tmp-l
ctail -1 U | cat - $tmp-l > $tmp-w; mv $tmp-w U
delf 1 R | ycat $tmp-u - > $tmp-w; mv $tmp-w R
ctail -1 D | cat - $tmp-r > $tmp-w; mv $tmp-w D
delf 3 L | ycat - $tmp-d > $tmp-w; mv $tmp-w L
tateyoko F | self 3 2 1 > $tmp-w; mv $tmp-w F
}
F () # F面(Front)の90度反時計回り
{
tail -1 U | tarr | tac > $tmp-u
self 1 R | yarr > $tmp-r
tail -1 D | tarr > $tmp-d
self 3 L | yarr | self 3 2 1 > $tmp-l
ctail -1 U | cat - $tmp-r > $tmp-w; mv $tmp-w U
delf 1 R | ycat $tmp-d - > $tmp-w; mv $tmp-w R
ctail -1 D | cat - $tmp-l > $tmp-w; mv $tmp-w D
delf 3 L | ycat - $tmp-u > $tmp-w; mv $tmp-w L
tateyoko F | tac > $tmp-w; mv $tmp-w F
}
b () # B面(Back)の90度時計回り
{
head -1 U | tarr | tac > $tmp-u
self 1 L | yarr | self 3 2 1 > $tmp-l
head -1 D | tarr > $tmp-d
self 3 R | yarr > $tmp-r
tail -n +2 U | cat $tmp-r - > $tmp-w; mv $tmp-w U
delf 1 L | ycat $tmp-u - > $tmp-w; mv $tmp-w L
tail -n +2 D | cat $tmp-l - > $tmp-w; mv $tmp-w D
delf 3 R | ycat - $tmp-d > $tmp-w; mv $tmp-w R
tateyoko B | self 3 2 1 > $tmp-w; mv $tmp-w B
}
B () # B面(Back)の90度反時計回り
{
head -1 U | tarr > $tmp-u
self 1 L | yarr | self 3 2 1 > $tmp-l
head -1 D | tarr | tac > $tmp-d
self 3 R | yarr > $tmp-r
tail -n +2 U | cat $tmp-l - > $tmp-w; mv $tmp-w U
delf 1 L | ycat $tmp-d - > $tmp-w; mv $tmp-w L
tail -n +2 D | cat $tmp-r - > $tmp-w; mv $tmp-w D
delf 3 R | ycat - $tmp-u > $tmp-w; mv $tmp-w R
tateyoko B | tac > $tmp-w; mv $tmp-w B
}
u () # U面(under)の90度時計回り
{
head -1 R > $tmp-r
head -1 F > $tmp-f
head -1 L > $tmp-l
head -1 B > $tmp-b
tail -n +2 R | cat $tmp-b - > $tmp-w; mv $tmp-w R
tail -n +2 F | cat $tmp-r - > $tmp-w; mv $tmp-w F
tail -n +2 L | cat $tmp-f - > $tmp-w; mv $tmp-w L
tail -n +2 B | cat $tmp-l - > $tmp-w; mv $tmp-w B
tateyoko U | self 3 2 1 > $tmp-w; mv $tmp-w U
}
U () # U面(under)の90度反時計回り
{
head -1 R > $tmp-r
head -1 F > $tmp-f
head -1 L > $tmp-l
head -1 B > $tmp-b
tail -n +2 R | cat $tmp-f - > $tmp-w; mv $tmp-w R
tail -n +2 F | cat $tmp-l - > $tmp-w; mv $tmp-w F
tail -n +2 L | cat $tmp-b - > $tmp-w; mv $tmp-w L
tail -n +2 B | cat $tmp-r - > $tmp-w; mv $tmp-w B
tateyoko U | tac > $tmp-w; mv $tmp-w U
}
d () # D面(down)の90度時計回り
{
tail -1 R > $tmp-r
tail -1 F > $tmp-f
tail -1 L > $tmp-l
tail -1 B > $tmp-b
ctail -1 R | cat - $tmp-f > $tmp-w; mv $tmp-w R
ctail -1 F | cat - $tmp-l > $tmp-w; mv $tmp-w F
ctail -1 L | cat - $tmp-b > $tmp-w; mv $tmp-w L
ctail -1 B | cat - $tmp-r > $tmp-w; mv $tmp-w B
tateyoko D | self 3 2 1 > $tmp-w; mv $tmp-w D
}
D () # D面(down)の90度反時計回り
{
tail -1 R > $tmp-r
tail -1 F > $tmp-f
tail -1 L > $tmp-l
tail -1 B > $tmp-b
ctail -1 R | cat - $tmp-b > $tmp-w; mv $tmp-w R
ctail -1 F | cat - $tmp-r > $tmp-w; mv $tmp-w F
ctail -1 L | cat - $tmp-f > $tmp-w; mv $tmp-w L
ctail -1 B | cat - $tmp-l > $tmp-w; mv $tmp-w B
tateyoko D | tac > $tmp-w; mv $tmp-w D
}
# ランダムに指定回数キューブを回転させる
rand ()
{
func=(f F b B u U d D r R l L)
for((i=0; i<$1; i++)); do proc=${func[$((${RANDOM}%12))]} echo $proc 1>&2 # 手続きを保存する
eval $proc # 関数の実行
done
}