#!/bin/bash # # ʹÓ÷½·¨24dian 1 5 5 9 # if [ $# -ne 4 ]; then echo "Usage: $(basename $0) d1 d2 d3 d4" exit 1 fi awk -v a=$1 -v b=$2 -v c=$3 -v d=$4 ' BEGIN { n[0] = a; n[1] = b; n[2] = c; n[3] = d; op[0] = "+"; op[1] = "-"; op[2] = "*"; op[3] = "/"; expr[0] = "(%d %s %d) %s %d %s %d "; expr[1] = "(%d %s %d %s %d) %s %d "; expr[2] = " %d %s (%d %s %d) %s %d "; expr[3] = " %d %s (%d %s %d %s %d)"; expr[4] = " %d %s %d %s (%d %s %d)"; expr[5] = "(%d %s %d) %s (%d %s %d)"; for (ii = 0; ii < 4; ii++) for(jj = 0; jj < 4; jj++) for(kk = 0; kk < 4; kk++) if (ii == jj || jj == kk || ii == kk) { continue; } else { n[ii] = a; n[jj] = b; n[kk] = c; n[6 - ii - jj - kk] = d; for (one = 0; one < 4; one++) for (two = 0; two < 4; two++) for (three = 0; three < 4; three++) for (iExpr = 0; iExpr < 6; ++iExpr) printf expr[iExpr] "\n", n[0], op[one], n[1], op[two], n[2], op[three], n[3]; } }' | sed 'h; s/^/"/; s/$/ = "/; G;' \ | bc -l 2> /dev/null \ | sed -n '/ 23.9999/{s/ 23.9999.*$/ 24/; p;}; / 24.0000/{s/ 24.0000.*/ 24/; p;}; / 24$/p;' \ | sort -u