Advertisement
Guest User

spirale numerica

a guest
Jul 21st, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.37 KB | None | 0 0
  1. #!/bin/bash
  2. declare -A matrix
  3. num=$1
  4.  
  5. for ((i=1;i<=num;i++)) do
  6.     for ((j=1;j<=num;j++)) do
  7.         matrix[$i,$j]=0
  8.     done
  9. done
  10.  
  11. diri=1
  12. dirj=0
  13. progrnum=1
  14. i=1
  15. j=1
  16.  
  17. while true
  18. do
  19.     matrix[$i,$j]=$progrnum
  20.     progrnum=$(($progrnum + 1))
  21.  
  22.     if [[ "$diri" -eq 1 ]] && [[ "$dirj" -eq 0 ]]
  23.     then
  24.         if [[ $(($i + $diri)) -gt $num ]] || [[ "${matrix[$(($i + $diri)),$(($j + $dirj))]}" -ne 0 ]]
  25.         then
  26.             diri=0
  27.             dirj=1
  28.         fi
  29.     else
  30.         if [[ "$diri" -eq 0 ]] && [[ "$dirj" -eq 1 ]]
  31.         then
  32.             if [[ $(($j + $dirj)) -gt $num ]] || [[ "${matrix[$(($i + $diri)),$(($j + $dirj))]}" -ne 0 ]]
  33.             then
  34.                 diri=-1
  35.                 dirj=0
  36.             fi
  37.         else
  38.             if [[ "$diri" -eq -1 ]] && [[ "$dirj" -eq 0 ]]
  39.             then
  40.                 if [[ $(($i + $diri)) -lt 1 ]] || [[ "${matrix[$(($i + $diri)),$(($j + $dirj))]}" -ne 0 ]]
  41.                 then
  42.                     diri=0
  43.                     dirj=-1
  44.                 fi
  45.             else
  46.                 if [[ "$diri" -eq 0 ]] && [[ "$dirj" -eq -1 ]]
  47.                 then
  48.                     if [[ $(($j + $dirj)) -lt 1 ]] || [[ "${matrix[$(($i + $diri)),$(($j + $dirj))]}" -ne 0 ]]
  49.                     then
  50.                         diri=1
  51.                         dirj=0
  52.                     fi
  53.                 fi
  54.             fi
  55.         fi
  56.     fi
  57.  
  58.     if [[ "${matrix[$(($i + $diri)),$(($j + $dirj))]}" -ne 0 ]]
  59.     then
  60.         break
  61.     fi
  62.  
  63.  
  64.     i=$(($i + $diri))
  65.     j=$(($j + $dirj))
  66.  
  67.  
  68.  
  69. done
  70.  
  71. f="%0$(echo -n $(($num*num))|wc -c)d"
  72.  
  73. for ((j=1;j<=num;j++)) do
  74.     for ((i=1;i<=num;i++)) do
  75.         printf "$f " ${matrix[$i,$j]}
  76.     done
  77.     echo
  78. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement