#!/bin/bash n0=0 # n0は、計算結果が10にならない場合のメッセージが重複して出ないようにするために、4桁の計算自体には関係ない変数として設定。 # 10にならない場合はn0=0のままで、10になる場合はその度にn0に1加えられるようになっているので、n0>0となる。 # また、quiz2.txtに出力する際に以前の計算の結果が残ったり、他の計算結果に上書きされたりしないようにn0を利用する。 echo $1: if [ `expr length $1` -ne 4 ] then echo the number must be four-digits. exit fi # 入力される数字が4桁かを確認する。それ以外の場合はエラーメッセージを出す。 n1=`expr substr $1 1 1` n2=`expr substr $1 2 1` n3=`expr substr $1 3 1` n4=`expr substr $1 4 1` # 入力された4つの数字それぞれを上の位からn1,n2,n3,n4と変数にする。 for one in + - \* ; do for two in + - \* ; do for three in + - \* ; do # +,-,*をそれぞれ変数とする。演算子は3回登場するので3つ(one,two,three)定義する。 n5=$(( n1 $one n2 $two n3 $three n4 )) if [ $n5 = 10 ] then echo "$n1 $one $n2 $two $n3 $three $n4" if [ $n0 = 0 ] then echo "$n1 $one $n2 $two $n3 $three $n4" > ./../results/quiz2.txt else echo "$n1 $one $n2 $two $n3 $three $n4" >> ./../results/quiz2.txt fi n0=$(( n0 + 1 )) fi # 4つの数字を計算し、その結果が10であればその計算式を表示する。計算結果は変数n5とする。 # この時、n0が0であればquiz2.txtに表示される計算式は上書きで記録され、それ以外の場合は追記される。 # また、n5が10であれば、n0に1を加える。elseで場合分けして10にならないというエラーメッセージを表示しようとすると、10の作れない式の分だけメッセージが表示されて しまい、それを避けるため。 # 以下変数n6〜n10までは括弧を使った場合の、それぞれのパターンの計算。基本的にはn5と同じように計算される。 n6=$(( (n1 $one n2) $two n3 $three n4 )) if [ $n6 = 10 ] then echo "($n1 $one $n2) $two $n3 $three $n4" if [ $n0 = 0 ] then echo "($n1 $one $n2) $two $n3 $three $n4" > ./../results/quiz2.txt else echo "($n1 $one $n2) $two $n3 $three $n4" >> ./../results/quiz2.txt fi n0=$(( n0 + 1 )) fi n7=$(( (n1 $one n2 $two n3) $three n4 )) if [ $n7 = 10 ] then echo "($n1 $one $n2 $two $n3) $three $n4" if [ $n0 = 0 ] then echo "($n1 $one $n2 $two $n3) $three $n4" > ./../results/quiz2.txt else echo "($n1 $one $n2 $two $n3) $three $n4" >> ./../results/quiz2.txt fi n0=$(( n0 + 1 )) fi n8=$(( n1 $one (n2 $two n3) $three n4 )) if [ $n8 = 10 ] then echo "$n1 $one ($n2 $two $n3) $three $n4" ; if [ $n0 = 0 ] then echo "$n1 $one ($n2 $two $n3) $three $n4" > ./../results/quiz2.txt else echo "$n1 $one ($n2 $two $n3) $three $n4" >> ./../results/quiz2.txt fi n0=$(( n0 + 1 )) fi n9=$(( n1 $one (n2 $two n3 $three n4) )) if [ $n9 = 10 ] then echo "$n1 $one ($n2 $two $n3 $three $n4)" if [ $n0 = 0 ] then echo "$n1 $one ($n2 $two $n3 $three $n4)" > ./../results/quiz2.txt else echo "$n1 $one ($n2 $two $n3 $three $n4)" >> ./../results/quiz2.txt fi n0=$(( n0 + 1 )) fi n10=$(( n1 $one n2 $two (n3 $three n4) )) if [ $n10 = 10 ] then echo "$n1 $one $n2 $two ($n3 $three $n4)" if [ $n0 = 0 ] then echo "$n1 $one $n2 $two ($n3 $three $n4)" > ./../results/quiz2.txt else echo "$n1 $one $n2 $two ($n3 $three $n4)" >> ./../results/quiz2.txt fi n0=$(( n0 + 1 )) fi n11=$(( (n1 $one n2) $two (n3 $three n4) )) if [ $n11 = 10 ] then echo "($n1 $one $n2) $two ($n3 $three $n4)" if [ $n0 = 0 ] then echo "($n1 $one $n2) $two ($n3 $three $n4)" > ./../results/quiz2.txt else echo "($n1 $one $n2) $two ($n3 $three $n4)" >> ./../results/quiz2.txt fi n0=$(( n0 + 1 )) fi done done done if [ $n0 = 0 ] then echo "can't make 10." echo "can't make 10" > ./../results/quiz2.txt fi # 計算を繰り返して、最終的にn0が0であれば(=4桁の数字を計算しても10が作れない)、10が作れなかった旨を表示をする。