在学习linux时,老师布置的作业要求利用shell编写刑侦推理测试题,本想着偷懒直接在度娘上复制粘贴,但发现只有java,python,js,php等语言实现了,就是没有linux下shell来编写,于是参考已经用python实现好的来翻译出shell代码。
目录
python源代码链接(点击跳转)
源码
#!/bin/bash
v2(){
local a2=$1
local a5=$2
if [[ $a2 == “A” ]] && [[ $a5 == “C” ]]
then
return 1
elif [[ $a2 == “B” ]] && [[ $a5 == “D” ]]
then
return 1
elif [[ $a2 == “C” ]] && [[ $a5 == “A” ]]
then
return 1
elif [[ $a2 == “D” ]] && [[ $a5 == “B” ]]
then
return 1
else
return 0
fi
}
v3(){
local a=$1
local a3=$2
local a6=$3
local a2=$4
local a4=$5
if [[ $a == “A” ]]
then
if [[ $a3 != $a6 ]] && [[ $a3 != $a2 ]] && [[ $a3 != $a4 ]]
then
return 1
else
return 0
fi
elif [[ $a == “B” ]]
then
if [[ $a6 != $a3 ]] && [[ $a6 != $a2 ]] && [[ $a6 != $a4 ]]
then
return 1
else
return 0
fi
elif [[ $a == “C” ]]
then
if [[ $a6 != $a3 ]] && [[ $a6 != $a2 ]] && [[ $a6 != $a4 ]]
then
return 1
else
return 0
fi
else
if [[ $a4 != $a3 ]] && [[ $a4 != $a6 ]] && [[ $a4 != $a2 ]]
then
return 1
else
return 0
fi
fi
}
v4(){
local a=$1
local a1=$2
local a5=$3
local a2=$4
local a7=$5
local a9=$6
local a6=$7
local a10=$8
if [[ $a == “A” ]]
then
if [[ $a1 == $a5 ]]
then
return 1
else
return 0
fi
elif [[ $a == “B” ]]
then
if [[ $a2 == $a7 ]]
then
return 1
else
return 0
fi
elif [[ $a == “C” ]]
then
if [[ $a1 == $a9 ]]
then
return 1
else
return 0
fi
else
if [[ $a6 == $a10 ]]
then
return 1
else
return 0
fi
fi
}
v5(){
local a=$1
local a8=$2
local a4=$3
local a9=$4
local a7=$5
if [[ $a == “A” ]]
then
if [[ $a == $a8 ]]
then
return 1
else
return 0
fi
elif [[ $a == “B” ]]
then
if [[ $a == $a4 ]]
then
return 1
else
return 0
fi
elif [[ $a == “C” ]]
then
if [[ $a == $a9 ]]
then
return 1
else
return 0
fi
else
if [[ $a == $a7 ]]
then
return 1
else
return 0
fi
fi
}
v6(){
local a=$1
local a8=$2
local a2=$3
local a4=$4
local a1=$5
local a6=$6
local a3=$7
local a10=$8
local a5=$9
local a9=$10
if [[ $a == “A” ]]
then
if [[ $a8 == $a2 ]] && [[ $a8 == $a4 ]]
then
return 1
else
return 0
fi
elif [[ $a == “B” ]]
then
if [[ $a8 == $a1 ]] && [[ $a8 == $a6 ]]
then
return 1
else
return 0
fi
elif [[ $a == “C” ]]
then
if [[ $a8 == $a3 ]] && [[ $a8 == $a10 ]]
then
return 1
else
return 0
fi
else
if [[ $a8 == $a5 ]] && [[ $a8 == $a9 ]]
then
return 1
else
return 0
fi
fi
}
v7(){
local a1=$1
local a2=$2
local a3=$3
local a4=$4
local a5=$5
local a6=$6
local a7=$7
local a8=$8
local a9=$9
local a10=${10}
stats=(0 0 0 0)
return_answer=(“A” “B” “C” “D”)
answer=($a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8 $a9 ${a10})
for i in ${answer[@]}
do
result=$((16#${i}-0xA))
let stats[result]+=1
done
MIN=${stats[0]}
for I in ${!stats[@]};do
if [[ ${MIN} -ge ${stats[${I}]} ]];then
MIN=${stats[${I}]}
fi
done
for i in `seq 0 $((${#stats[*]}-1))`
do
if [[ ${stats[${i}]} == ${MIN} ]]
then
minA=${return_answer[$i]}
fi
done
if [[ $a7 == “A” ]]
then
if [[ ${minA} == “C” ]]
then
return 1
else
return 0
fi
elif [[ $a7 == “B” ]]
then
if [[ ${minA} == “B” ]]
then
return 1
else
return 0
fi
elif [[ $a7 == “C” ]]
then
if [[ $minA == “A” ]]
then
return 1
else
return 0
fi
else
if [[ ${minA} == “D” ]]
then
return 1
else
return 0
fi
fi
}
v8(){
local a8=$1
local a1=$2
local a7=$3
local a5=$4
local a2=$5
local a10=$6
answer1=$((16#${a1}))
b1=$((16#${a7}-$((16#${a1}))))
b2=${b1#-}
c1=$((16#${a5}-$((16#${a1}))))
c2=${c1#-}
d1=$((16#${a2}-$((16#${a1}))))
d2=${d1#-}
e1=$((16#${a10}-$((16#${a1}))))
e2=${e1#-}
if [[ $a8 == “A” ]]
then
if [[ $b2 != 1 ]]
then
return 1
else
return 0
fi
elif [[ $a8 == “B” ]]
then
if [[ $c2 != 1 ]]
then
return 1
else
return 0
fi
elif [[ $a8 == “C” ]]
then
if [[ $d2 != 1 ]]
then
return 1
else
return 0
fi
else
if [[ $e2 != 1 ]]
then
return 1
else
return 0
fi
fi
}
v9(){
local a9=$1
local a6=$2
local a5=$3
local a10=$4
local a2=$5
local a1=$6
if [[ $a9 == “A” ]]
then
if [[ $a6 == $a5 ]]
then
valY=1
else
valY=0
fi
elif [[ $a9 == “B” ]]
then
if [[ $a10 == $a5 ]]
then
valY=1
else
valY=0
fi
elif [[ $a9 == “C” ]]
then
if [[ $a2 == $a5 ]]
then
valY=1
else
valY=0
fi
else
if [[ $a9 == $a5 ]]
then
valY=1
else
valY=0
fi
fi
if [[ $a1 == $a6 ]]
then
valX=1
else
valX=0
fi
if [[ $valX != $valY ]]
then
return 1
else
return 0
fi
}
v10(){
local a1=$1
local a2=$2
local a3=$3
local a4=$4
local a5=$5
local a6=$6
local a7=$7
local a8=$8
local a9=$9
local a10=${10}
stats=(0 0 0 0)
return_answer=(“A” “B” “C” “D”)
answer=($a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8 $a9 ${a10})
for i in ${answer[@]}
do
result=$((16#${i}-0xA))
let stats[result]+=1
done
MIN=${stats[0]}
for I in ${!stats[@]};do
if [[ ${MIN} -ge ${stats[${I}]} ]];then
MIN=${stats[${I}]}
fi
done
MAX=${stats[0]}
for I in ${!stats[@]};do
if [[ ${MAX} -le ${stats[${I}]} ]];then
MAX=${stats[${I}]}
fi
done
diff=$(($MAX-$MIN))
if [[ $a10 == “A” ]]
then
if [[ $diff = 3 ]]
then
return 1
else
return 0
fi
elif [[ $a10 == “B” ]]
then
if [[ $diff = 2 ]]
then
return 1
else
return 0
fi
elif [[ $a10 == “C” ]]
then
if [[ $diff = 4 ]]
then
return 1
else
return 0
fi
else
if [[ $diff = 1 ]]
then
return 1
else
return 0
fi
fi
}
verify(){
local a1=$1
local a2=$2
local a3=$3
local a4=$4
local a5=$5
local a6=$6
local a7=$7
local a8=$8
local a9=$9
local a10=${10}
v2 $a2 $a5
b=$?
if [[ $b = 0 ]]
then
return 0
fi
v3 $a3 $a3 $a6 $a2 $a4
c=$?
if [[ $c = 0 ]]
then
return 0
fi
v4 $a4 $a1 $a5 $a2 $a7 $a9 $a6 ${a10}
d=$?
if [[ $d = 0 ]]
then
return 0
fi
v5 $a5 $a8 $a4 $a9 $a7
e=$?
if [[ $e = 0 ]]
then
return 0
fi
v6 $a6 $a8 $a2 $a4 $a1 $a6 $a3 $a10 $a5 $a9
f=$?
if [[ $f = 0 ]]
then
return 0
fi
v7 $a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8 $a9 ${a10}
g=$?
if [[ $g = 0 ]]
then
return 0
fi
v8 $a8 $a1 $a7 $a5 $a2 ${a10}
h=$?
if [[ $h = 0 ]]
then
return 0
fi
v9 ${a9} $a6 $a5 ${a10} $a2 $a1
i=$?
if [[ $i = 0 ]]
then
return 0
fi
v10 $a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8 $a9 ${a10}
j=$?
if [[ $j = 0 ]]
then
return 0
fi
return 1
}
arr=(‘A’ ‘B’ ‘C’ ‘D’)
for a1 in ${arr[@]}
do
for a2 in ${arr[@]}
do
for a3 in ${arr[@]}
do
for a4 in ${arr[@]}
do
for a5 in ${arr[@]}
do
for a6 in ${arr[@]}
do
for a7 in ${arr[@]}
do
for a8 in ${arr[@]}
do
for a9 in ${arr[@]}
do
for a10 in ${arr[@]}
do
verify $a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8 $a9 ${a10}
result=$?
if [[ $result = 1 ]]
then
echo $a1 $a2 $a3 $a4 $a5 $a6 $a7 $a8 $a9 ${a10}
exit 0
fi
done
done
done
done
done
done
done
done
done
done
结果
答案:B, C, A, C, A, C, D, A, B, A