平成25年秋期午後問8の
吉田さん
(No.1)
https://www.fe-siken.com/kakomon/25_aki/pm08.html
最初のループ (Pindex<Plength) and (Pindex < 4) で、
Plaindata[0]にA、[1]にB、[2]にC、[3]にDが入るとします。
この時、Pindexの値は4ですよね。
その後、回答aのループをtrueで入り、
文字が一致するかどうか調べる Plainddata[Pindex + Fitnum] ≠ b
のif文の時、Plaindata[Pindex + Fitnum] は 4 + 0 で Plaindata[4] になると思います。
Plaindata[4]は何も値が入っていないのですが、falseでbreakで抜けるという流れで合っているのでしょうか。
最初のループ (Pindex<Plength) and (Pindex < 4) で、
Plaindata[0]にA、[1]にB、[2]にC、[3]にDが入るとします。
この時、Pindexの値は4ですよね。
その後、回答aのループをtrueで入り、
文字が一致するかどうか調べる Plainddata[Pindex + Fitnum] ≠ b
のif文の時、Plaindata[Pindex + Fitnum] は 4 + 0 で Plaindata[4] になると思います。
Plaindata[4]は何も値が入っていないのですが、falseでbreakで抜けるという流れで合っているのでしょうか。
2021.06.20 15:46
GinSanaさん
★FE シルバーマイスター
(No.2)
>この時、Pindexの値は4ですよね。
4なのはいいんですが、
while(Pindex < Plength){
どっちも4だから、falseでwhileループを抜けちゃって質問のルートまで話が進みません。ま、ためしに抜けないために5文字にしてみましょう。
BEGIN{
# Plaindata[0]にA、[1]にB、[2]にC、[3]にDが入るとします。
Plaindata[0] = "A";
Plaindata[1] = "B";
Plaindata[2] = "C";
Plaindata[3] = "D";
Plaindata[4] = "E";
Esym = "$";
Plength = length(Plaindata);
Pindex = 0;
Cindex = 0;
while(Pindex < Plength && Pindex < 4){
Compresseddata[Cindex] = Plaindata[Pindex];
Cindex++;
Pindex++;
}
for(i in Compresseddata){
print "Compresseddata["i"] : "Compresseddata[i];
}
for(i in Plaindata){
print "Plaindata["i"] : "Plaindata[i];
}
print "Pindex : "Pindex;
print "Plength : "Plength;
while(Pindex < Plength){
Maxfitnum = -1;
Maxdistance = -1;
Distance = 4;
# a : Pindex-Distance≧0
while(Distance <= 26 && Pindex - Distance >= 0){
Fitnum = 0;
# b : Plaindata[Pindex-Distance+Fitnum]
print "Plaindata[Pindex + Fitnum] : Plaindata["Pindex" + "Fitnum"] : "Plaindata[Pindex + Fitnum];
print "Plaindata[Pindex - Distance + Fitnum] : Plaindata["Pindex" - "Distance" + "Fitnum"] : "Plaindata[Pindex - Distance + Fitnum];
if(Plaindata[Pindex + Fitnum] != Plaindata[Pindex - Distance + Fitnum]){
print "break";
break;
}
Fitnum++;
}
exit;
}
}
# Plaindata[0]にA、[1]にB、[2]にC、[3]にDが入るとします。
Plaindata[0] = "A";
Plaindata[1] = "B";
Plaindata[2] = "C";
Plaindata[3] = "D";
Plaindata[4] = "E";
Esym = "$";
Plength = length(Plaindata);
Pindex = 0;
Cindex = 0;
while(Pindex < Plength && Pindex < 4){
Compresseddata[Cindex] = Plaindata[Pindex];
Cindex++;
Pindex++;
}
for(i in Compresseddata){
print "Compresseddata["i"] : "Compresseddata[i];
}
for(i in Plaindata){
print "Plaindata["i"] : "Plaindata[i];
}
print "Pindex : "Pindex;
print "Plength : "Plength;
while(Pindex < Plength){
Maxfitnum = -1;
Maxdistance = -1;
Distance = 4;
# a : Pindex-Distance≧0
while(Distance <= 26 && Pindex - Distance >= 0){
Fitnum = 0;
# b : Plaindata[Pindex-Distance+Fitnum]
print "Plaindata[Pindex + Fitnum] : Plaindata["Pindex" + "Fitnum"] : "Plaindata[Pindex + Fitnum];
print "Plaindata[Pindex - Distance + Fitnum] : Plaindata["Pindex" - "Distance" + "Fitnum"] : "Plaindata[Pindex - Distance + Fitnum];
if(Plaindata[Pindex + Fitnum] != Plaindata[Pindex - Distance + Fitnum]){
print "break";
break;
}
Fitnum++;
}
exit;
}
}
このawkを実行すると
Compresseddata[0] : A
Compresseddata[1] : B
Compresseddata[2] : C
Compresseddata[3] : D
Plaindata[0] : A
Plaindata[1] : B
Plaindata[2] : C
Plaindata[3] : D
Plaindata[4] : E
Pindex : 4
Plength : 5
Plaindata[Pindex + Fitnum] : Plaindata[4 + 0] : E
Plaindata[Pindex - Distance + Fitnum] : Plaindata[4 - 4 + 0] : A
break
Compresseddata[1] : B
Compresseddata[2] : C
Compresseddata[3] : D
Plaindata[0] : A
Plaindata[1] : B
Plaindata[2] : C
Plaindata[3] : D
Plaindata[4] : E
Pindex : 4
Plength : 5
Plaindata[Pindex + Fitnum] : Plaindata[4 + 0] : E
Plaindata[Pindex - Distance + Fitnum] : Plaindata[4 - 4 + 0] : A
break
2021.06.20 17:21
吉田さん
(No.3)
説明をしてくださったおかげで、勘違いをしていたことに気がつくことができました。
最初のループで、Plaindataにも[0][1][2][3]にデータが入っていくと勘違いしてました。
Plaindataには元からデータが入ってましたね。
GinSanaさん、ありがとうございます。
最初のループで、Plaindataにも[0][1][2][3]にデータが入っていくと勘違いしてました。
Plaindataには元からデータが入ってましたね。
GinSanaさん、ありがとうございます。
2021.06.21 23:23
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告