2016-05-22 7 views
3

私はそれを構築するための要件に基づいてフラクタルツリーを構築しようとしています。 何かが間違っています。手伝ってください。要求されたレベルに基づいてフラクタルツリーを構築しようとしています。ここでレベルはスキップされています。問題を解決する方法を理解する必要があります。関数とフラクタル - 再帰木 - Bash!論理の問題

#!/bin/bash 
declare -A matrix 
for ((i=1;i<=63;i++)) do 
    for ((j=1;j<=100;j++)) do 
     matrix[$i,$j]='_' 
    done 
done 
function update_matrix { 
p1=$1 
p2=$(echo $2-1|bc) 
p1=$(echo $p1-1|bc) 
p3=$(echo 2^$p2|bc) 
p4=$(echo 2*$p3|bc) 
p5=$(echo $p3/2|bc) 
p6=$3 
for ((q1=$p3;q1<$p4;q1++)) do 
     if [ "$(echo $q1-$p3|bc)" -lt "$p5" ] 
      then 
      q2=$(echo $p6-$(echo $p5-$(echo $q1-$p3|bc)|bc)|bc) 
      q3=$(echo $p6+$(echo $p5-$(echo $q1-$p3|bc)|bc)|bc) 
      matrix[$q1,$q2]=1 
      matrix[$q1,$q3]=1 
      #printf '%s' "$q1 $q2 -- $q1 $q3" 
      #echo "" 
      else 
      matrix[$q1,$p6]=1 
      #echo $q1 $p6 
     fi 
done 

if [ $p1 -ge 1 ] 
then 
update_matrix $p1 $p2 $(echo $p6+$p5|bc) 
update_matrix $p1 $p2 $(echo $p6-$p5|bc) 
else 
return 
fi 
} 
read iteration 
if [ $iteration -ge 1 ] 
then 
    update_matrix $iteration 6 32 
fi 
for ((i=1;i<=63;i++)) do 
    for ((j=1;j<=100;j++)) do 
     printf '%s' "${matrix[$i,$j]}" 
    done 
    echo "" 
done 

出力は次のとおりです。

____________________________________________________________________________________________________ 
________________________________________________1_1_________________________________________________ 
_________________________________________________1__________________________________________________ 
_________________________________________________1___1______________________________________________ 
__________________________________________________1_1_______________________________________________ 
___________________________________________________1________________________________________________ 
___________________________________________________1________________________________________________ 
___________________________________________________1_______1________________________________________ 
____________________________________________________1_____1_________________________________________ 
_____________________________________________________1___1__________________________________________ 
______________________________________________________1_1___________________________________________ 
_______________________________________________________1____________________________________________ 
_______________________________________________________1____________________________________________ 
_______________________________________________________1____________________________________________ 
_______________________________________________________1____________________________________________ 
_______________________________________1_______________1____________________________________________ 
________________________________________1_____________1_____________________________________________ 
_________________________________________1___________1______________________________________________ 
__________________________________________1_________1_______________________________________________ 
___________________________________________1_______1________________________________________________ 
____________________________________________1_____1_________________________________________________ 
_____________________________________________1___1__________________________________________________ 
______________________________________________1_1___________________________________________________ 
_______________________________________________1____________________________________________________ 
_______________________________________________1____________________________________________________ 
_______________________________________________1____________________________________________________ 
_______________________________________________1____________________________________________________ 
_______________________________________________1____________________________________________________ 
_______________________________________________1____________________________________________________ 
_______________________________________________1____________________________________________________ 
_______________________________________________1____________________________________________________ 
_______________1_______________________________1____________________________________________________ 
________________1_____________________________1_____________________________________________________ 
_________________1___________________________1______________________________________________________ 
__________________1_________________________1_______________________________________________________ 
___________________1_______________________1________________________________________________________ 
____________________1_____________________1_________________________________________________________ 
_____________________1___________________1__________________________________________________________ 
______________________1_________________1___________________________________________________________ 
_______________________1_______________1____________________________________________________________ 
________________________1_____________1_____________________________________________________________ 
_________________________1___________1______________________________________________________________ 
__________________________1_________1_______________________________________________________________ 
___________________________1_______1________________________________________________________________ 
____________________________1_____1_________________________________________________________________ 
_____________________________1___1__________________________________________________________________ 
______________________________1_1___________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 
_______________________________1____________________________________________________________________ 

は正しいものが作成されていない左のノードが作成された理由を理解する必要があります。

答えて

3

スタックオーバーフローのおかげで。それはちょうどawsome仲間であった。本当に私がbashをよく理解するのを助けました。私が欠けていたのは、変数をローカルとして宣言することでした。グローバル変数が更新されているため、プログラムが正常に動作しませんでした。 問題を修正してローカル変数を使用し、魅力的に機能しました。

解決策のコードは、 です。Hackerrank関数とフラクタル - 再帰木 - Bash!プログラム。 3時間かけて釘付けにしました。最終的にそれを解決するために本当にリフレッシュ。

#!/bin/bash 
declare -A matrix 
for ((i=1;i<=63;i++)) do 
    for ((j=1;j<=100;j++)) do 
     matrix[$i,$j]='_' 
    done 
done 
i=0 
declare -A arr 
function update_matrix { 
local p1 p2 p3 p4 p5 p6 q1 q2 q3 p11 p12 p13 p14 p15 p16 
p1=$1 
p2=$(echo $2-1|bc) 
p1=$(echo $p1-1|bc) 
p3=$(echo 2^$p2|bc) 
p4=$(echo 2*$p3|bc) 
p5=$(echo $p3/2|bc) 
p6=$3 
for ((q1=$p3;q1<$p4;q1++)) do 
     if [ "$(echo $q1-$p3|bc)" -lt "$p5" ] 
      then 
      q2=$(echo 18+$p6-$(echo $p5-$(echo $q1-$p3|bc)|bc)|bc) 
      q3=$(echo 18+$p6+$(echo $p5-$(echo $q1-$p3|bc)|bc)|bc) 
      matrix[$q1,$q2]=1 
      matrix[$q1,$q3]=1 
      #printf '%s' "$q1 $q2 -- $q1 $q3" 
      #echo "" 
      else 
      matrix[$q1,$(echo 18+$p6|bc)]=1 
      #echo $q1 $p6 
     fi 
done 

if [ $p1 -ge 1 ] 
then 
p11=$p1 
p12=$p2 
p13=$(echo $p6-$p5|bc) 
p14=$(echo $p6+$p5|bc) 
p15=$p1 
p16=$p2 

#echo $p11 $p12 $p6 $p5 $p13 
update_matrix $p11 $p12 $p13 
#echo $p15 $p16 $p6 $p5 $p14 

update_matrix $p15 $p16 $p14 
t=4 
else 
s=2 
fi 
} 
read iteration 
if [ $iteration -ge 1 ] 
then 
    #echo $iteration 6 32 
    update_matrix $iteration 6 32 
fi 
for ((i=1;i<=63;i++)) do 
    for ((j=1;j<=100;j++)) do 
     printf '%s' "${matrix[$i,$j]}" 
    done 
    echo "" 
done