#!/bin/bash
tput civis
declare -a x
declare -a y
declare -a v
x=( [1]=21 [2]=22 [3]=23 )
y=( [1]=45 [2]=46 [3]=47 )
v=( [1]=1 [2]=1 [3]=1 )
km=3
maxx=$(stty size | awk '{ print $1 }')
maxy=$(stty size | awk '{ print $2 }')
while [[ $km -lt 180 ]]
do
clear
for ((i=1; i<=km; i++)); do
r=$(( ( RANDOM % 4 ) + 1 ))
case "$r" in
1) if [[ $((${x["$i"]}+1)) -lt $maxx ]]; then
x["$i"]=$((${x["$i"]}+1))
fi
;;
2) if [[ $((${x["$i"]}-1)) -gt 0 ]]; then
x["$i"]=$((${x["$i"]}-1))
fi
;;
3) if [[ $((${y["$i"]}+1)) -lt $maxy ]]; then
y["$i"]=$((${y["$i"]}+1))
fi
;;
4) if [[ $((${y["$i"]}-1)) -gt 0 ]]; then
y["$i"]=$((${y["$i"]}-1))
fi
;;
esac
tput cup "${x["$i"]}" "${y["$i"]}"
echo '*'
v["$i"]=$((${v["$i"]}+1))
done # done for
for ((xi=1; xi<=km; xi++));do
for ((yi=1; yi<=km; yi++));do
if [[ $xi -ne $yi ]]; then
if [[ "${x["$xi"]}" -eq "${x["$yi"]}" ]]; then
if [[ "${y["$xi"]}" -eq "${y["$yi"]}" ]]; then
km=$((km+1))
x[$km]=$(( RANDOM % maxx ))
y[$km]=$(( RANDOM % maxy ))
v[$km]=1
echo $(date +"%F %T %N") "kol-vo muh " "$km" >> /tmp/muhi.log
fi
fi
fi
done
done # done for2
done # done while
echo 'kol-vo muh= ' "$km"
echo 'maxx= ' "$maxx"
echo 'maxy= ' "$maxy"
tput cnorm
Хотел попробовать поработать с массивами, ну и написал такое. Может гуру что-то подскажут\оптимизируют.
Если бы кто-то показал аналогично работающий код на пайтоне, то я буду благодарен.