#!/bin/bash number=${#1} #入力された桁数の確認をする。 #4桁の数字でない場合、エラー表示する。 if [ $number -ne 4 ] ; then echo "4桁の数字ではありません。" echo "もう一度数字を入力してください。(4桁で)" exit fi echo "$1 >>" # cutコマンドを使い、4桁の数字を分けて変数とする。 a=`echo $1 | cut -c1` b=`echo $1 | cut -c2` c=`echo $1 | cut -c3` d=`echo $1 | cut -c4` #以下、実際の計算を行っていく。 #すでにquiz2.txtが存在する場合は消去する。 if [ -e quiz2.txt ] ; then rm quiz2.txt fi #ここで、括弧()の取り方を考える。 #括弧か1つの場合 #1.(ab)cd 2.ab(cd) 3.(ab)(cd) 4.(abc)d 5.a(bcd) 6.a(bc)d #括弧が2つの場合 #1.((ab)c)d 2.a(b(cd)) 3.(a(bc))d 4.a((bc)d) #括弧の取り方は全部で10通りある。 #括弧のないabcdも考えると、全部で11通りある。 #forを用いて11通りの計算を行っていく。 #i,j,k,を変数として値リストに演算子を代入する。 #ループ処理を行うと、3つの演算子(+,-,'*')が各々代入される。 #1.(ab)cd for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $(( $a $i $b )) $j $c $k $d)) if [ $ans -eq 10 ] ; then echo "($a $i $b) $j $c $k $d" >> quiz2.txt fi done done done #2.ab(cd) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $a $i $b $j $(( $c $k $d )) )) if [ $ans = 10 ] ; then echo "$a $i $b $j ($c $k $d)" >>quiz2.txt fi done done done #3.(ab)(cd) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $(( $a $i $b )) $j $(( $c $k $d )) )) if [ $ans = 10 ] ; then echo "($a $i $b) $j ($c $k $d)" >>quiz2.txt fi done done done #4.(abc)d for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $(( $a $i $b $j $c )) $k $d )) if [ $ans = 10 ] ; then echo "($a $i $b $j $c) $k $d" >> quiz2.txt fi done done done #5.a(bcd) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $a $i $(( $b $j $c $k $d )) )) if [ $ans = 10 ] ; then echo "$a $i ($b $j $c $k $d)" >>quiz2.txt fi done done done #6.a(bc)d for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $a $i $(( $b $j $c )) $k $d )) if [ $ans = 10 ] ; then echo "$a $i ($b $j $c) $k $d" >>quiz2.txt fi done done done #7.((ab)c)d for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $(( $(( $a $i $b )) $j $c )) $k $d )) if [ $ans = 10 ] ; then echo "( ($a $i $b) $j $c) $k $d" >>quiz2.txt fi done done done #8.a(b(cd)) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $a $i $(( $b $j $(( $c $k $d )) )) )) if [ $ans = 10 ] ; then echo "$a $i ($b $j ($c $k $d))" >>quiz2.txt fi done done done #9.(a(bc))d for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $(( $a $i $(( $b $j $c )) )) $k $d )) if [ $ans = 10 ] ; then echo "($a $i ($b $j $c)) $k $d" >>quiz2.txt fi done done done #10.a((bc)d) for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $a $i $(( $(( $b $j $c )) $k $d )) )) if [ $ans = 10 ] ; then echo "$a $i (($b $j $c) $k $d)" >>quiz2.txt fi done done done #11.abcd for i in + - '*' do for j in + - '*' do for k in + - '*' do ans=$(( $a $i $b $j $c $k $d )) if [ $ans = 10 ] ; then echo "$a $i $b $j $c $k $d" >>quiz2.txt fi done done done #catコマンドを使って、quiz2.txtが0より大きいサイズならば #端末上にquiz2.txtの内容を書き出すようにする。 #計算結果がquiz.txtに書かれていない、つまり、サイズが0である場合は #「計算式が存在しない」と表示するように条件文として最後に付け加える。 if [ -s quiz2.txt ] ; then cat quiz2.txt else echo "計算結果が10となる式は存在しない。" fi