#!/bin/bash # 入力された数字は$1に入っているので、その文字数の確認をします count=${#1} if test $count -ne 4 ; then echo "入力された $1 は4桁の数ではありません。" echo 'もう一度入力してください。' exit 1 fi echo "$1 ;" # cutコマンドを使って、4つの数字を1つずつ変数に代入します n1=`echo $1 | cut -c1` n2=`echo $1 | cut -c2` n3=`echo $1 | cut -c3` n4=`echo $1 | cut -c4` # ここから実際の計算に入りますが、普通に考えても # 3つの演算子の組み合わせで3^3=27通り、 # 括弧の付け方だけでも # (ab)cd (abc)d a(bc)d a(bcd) ab(cd) # (ab)(cd) ((ab)c)d (a(bc))d a((bc)d) a(b(cd)) の10通りあるので # ひとまず演算子の組み合わせを繰り返し処理で # 代入できるようにします # # そこでi,j,kの3つの演算子を代入する変数を使います for i in `seq 1 11` do eval echo "'$'f$i" >>quiz2_f.txt done cat quiz2_f.txt # すでにquiz2_m.txtが存在する場合は内容のクリア if test -e quiz2_m.txt ; then cat /dev/null >quiz2_m.txt fi judge () { # ifコマンドで、$_ans が10ならばechoで式を表示させます if test $_ans -eq 10 ; then # echoで計算結果をquiz2_m.txtに書き込みます eval echo "$1" >> quiz2_m.txt fi } for i in + - '*' do for j in + - '*' do for k in + - '*' do cat /dev/null >formula.temp # 計算式を一度formula.tempに書き出します。 { echo "$n1 "$i" $n2 "$j" $n3 "$k" $n4" echo "( $n1 "$i" $n2 ) "$j" $n3 "$k" $n4" echo "( $n1 "$i" $n2 "$j" $n3 ) "$k" $n4" echo "$n1 "$i" ( $n2 "$j" $n3 ) "$k" $n4" echo "$n1 "$i" ( $n2 "$j" $n3 "$k" $n4)" echo "$n1 "$i" $n2 "$j" ($n3 "$k" $n4)" echo "( $n1 "$i" $n2 ) "$j" ( $n3 "$k" $n4 )" echo "( ( $n1 "$i" $n2 ) "$j" $n3 ) "$k" $n4" echo "( $n1 "$i" ( $n2 "$j" $n3 ) ) "$k" $n4" echo "$n1 "$i" ( ($n2 "$j" $n3 ) "$k" $n4 )" echo "$n1 "$i" ( $n2 "$j" ( $n3 "$k" $n4 ) )" } >>formula.temp # formula.tempには演算子が代入された式が書き込まれているので # 一行ずつ計算、判定して表示・非表示を行います。 while read formula do _ans=`expr $(($formula))` # ifコマンドで、$_ans が10ならばechoで式を表示させます if test $_ans -eq 10 ; then # echoで計算結果をquiz2_m.txtに書き込みます echo "$formula" >> quiz2_m.txt fi done