Нарисуйте полукруг, используя только bash и циклы

Если ваши данные всегда в первой строке и в формате user@domain, вы можете сделать это:

Извлеките первую строку и используйте расширение параметров оболочки:

firstline=$(head -n1 file)
user=${firstline%@*}
domain=${firstline##*@}

-2
11.11.2019, 22:56
2 ответа

Еще немного расширения триггера @saga

read -p "Semi Circle radius tolerance: " n w
R2=$((n*n))

for(( x=-$n ; x<=$n ; x+=2 )); do
    for ((y=-$n ; y<=$n ; y++)); do
        d=$((x*x + y*y))
        if [ $((d-R2)) -lt $w ] && [ $((R2-d)) -lt $w ] ; then echo -n "*"; else echo -n " "; fi
    done
    echo 
done

Вывод для радиуса 20 и допуска 10

                *******                 
           *                 *           
        *                       *        
      *                           *      
    *                               *    


 *                                     * 

*                                       *
*                                       *
*                                       *

 *                                     * 


    *                               *    
      *                           *      
        *                       *        
           *                 *           
                 *******        

Для ощущения полного полукруга

read -p "Semi Circle radius tolerance: " n w
R2=$((n*n))

echo
for(( x=0 ; x>=-$n ; x-=2 )); do
    for ((y=-$n ; y<=$n ; y++)); do
        d=$((x*x + y*y))
        if [ $((d-R2)) -lt $w ] && [ $((R2-d)) -lt $w ] || [ $x -eq 0 ]; then echo -n "*"; else echo -n " "; fi
    done
    echo 
done
echo

С радиусом 20 и допуском 12

*****************************************
*                                       *

 *                                     * 

   *                                 *   
    *                               *    
      *                           *      
        *                       *        
           *                 *           
                 *******      

редактировать

Чисто для развлечения, добавлено поле, чтобы избежать отсечения, разумно переименованы переменные и уточнен тест на устойчивость к радиусу до одного условия.

read -p "Circle enter: radius tolerance.... " r t
r2=$((r*r))
t2=$((t*t))
box=$((r+t/10))
for(( y=-$box ; y<=$box ; y+=2 )); do
    for ((x=-$box ; x<=$box ; x++)); do
        d=$((x*x + y*y-r2))
        d2=$((d*d))
        if [ $d2 -lt $t2 ]; then echo -n "*"; else echo -n " "; fi
    done
    echo 
done
1
28.01.2020, 05:15
read -p "Semi Circle radius: " n
R2=$((n*n))


for(( i=1 ; i<=5+$n ; i++ ))
do
        for(( j=2*$n ; j>=1 ; j-- ))
        do
            D=$((i*i + (j-n)*(j-n)))
            if [ $D -lt $R2 ]; then echo -n '#' ;>
        done
        echo
done
1
28.01.2020, 05:15

Теги

Похожие вопросы