引数を設定する。
設問2の文字列を引数に使います。
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
NULL | NULL |
初期値を設定します。
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 |
なお Esym は 文字"$" です。
最初のループ
最初のループで文字列の最初の4文字をコピーします。
Compresseddata[0] に Plaindata[0] をいれます。
Cindex を +1 します。
Pindex を +1 します。
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A | NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 |
ループして Pindex が 1 なので
Compresseddata[1] に Plaindata[1] をいれます。
Cindex を +1 します。
Pindex を +1 します。
ループして Pindex が 2 なので
Compresseddata[2] に Plaindata[2] をいれます。
Cindex を +1 します。
Pindex を +1 します。
ループして Pindex が 3 なので
Compresseddata[3] に Plaindata[3] をいれます。
Cindex を +1 します。
Pindex を +1 します。
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A B C D | NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 |
Pindex が 4 になったのでループを抜けます。
メインループの1回目
Maxfitnumに -1 をいれます。
Maxdistanceに -1 をいれます。
Distanceに 4 をいれます。
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 4 |
内側のループにはいる条件、空欄「a」が未定ですが、先を見てみないとわからないので True だったと仮定して処理を続けます。
Fitnumに0をいれます。
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 4 | 0 |
Fitnum < Distance かつ
(Pindex + Fitnum) < Plength すなわち 24
なのでさらに内側のループにはいります。
Plaindata[Pindex + Fitnum]が
空欄[b]と等しくなかったら、何もせずにループを break、
空欄[b]と等しかったら、Fitnum に +1 してループします。
この処理では Pindex の5番目の文字と1番目の文字が異なるかどうかを判定しています。
True なのでループをbreakして次にすすみます。
次の判定処理では同じ文字並びの文字数が4以上、かつ、最も多いかどうかを調べていますが、 Falseなので何もせずに次にすすみます。
そして空欄「c」の処理を行いループの先頭に戻るのですが、ループする前に何をしなければならないでしょうか?
ここでは比較文字の位置をひとつ左にずらさなければなりませんので空欄「c」は「イ」です。
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 |
比較文字を左にひとつずらしたのですが、文字列の先頭を越えて文字がなくなってしまいました。
このループの継続条件は、ひとつは「Distance が 26 以下であること」で、もうひとつは「比較文字位置が文字列の先頭を越えないこと」だったのです。
よって空欄「a」の答えは「ア」になります。
判定はFalseなのでようやく内側のループを抜けて次の選択処理をします。 Maxfitnum は -1 なので True です。 Compresseddata[4] に Plaindata[4] をいれます。
Cindex を +1 します。
Pindex を +1 します。
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A B C D E | NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 |
これで外側のループの1回目が終了しました。
メインループの2回目
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A B C D E F | NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 | -1 | -1 | 0 | |
6 | 6 |
メインループの3回目
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A B C D E F G | NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 | -1 | -1 | 0 | |
6 | 6 | -1 | -1 | 0 | |
7 | 7 |
メインループの4回目
ここでようやく文字が一致します。
内側のループにはいり、ループしながら Distance を 1 づつ増やしていき Distance が 7 になったところで文字が一致します。
Plaindata[Pindex + Fitnum] と 空欄「b」 すなわち
Plaindata[7 + 0]の文字「A」と、文字列の先頭の文字「A」が同じなので Fitnum を +1 してループします。
今度は Plaindata[Pindex + Fitnum] が Plaindata[7 + 1] になりますので、
Plaindata[7 + 1] の文字「B」と、文字列の2文字目「B」を比べなければなりません。
よって空欄「b」は「エ」のPlaindata[Pindex - Distance + Fitnum]です。
さらに文字が一致しなくなるまで処理はループします。
Fitnum を +1
Plaindata[7+2] 、 Plaindata[7-7+2] ともに「C」
Fitnum を +1
Plaindata[7+3] 、 Plaindata[7-7+3] ともに「D」
Fitnum を +1
Plaindata[7+4] 、 Plaindata[7-7+4] ともに「E」
Fitnum を +1
Plaindata[7+5] 、 Plaindata[7-7+4] は「A」と「F」
文字が一致しなくなりましたのでループをbreakします。
Fitnumは5になりました。
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 | -1 | -1 | 0 | |
6 | 6 | -1 | -1 | 0 | |
7 | 7 | -1 | -1 |
次の条件式も Fitnum が 5 になったことではじめてTrueになり処理を行います。
Maxfitnum に 5 をいれます。
Maxdistance に 7 をいれます。
Distance を +1 します。
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 | -1 | -1 | 0 | |
6 | 6 | -1 | -1 | 0 | |
7 | 7 |
次の条件式も Maxfitnum が 5 になったことではじめてFalseとなり、下の処理を行います。
Comresseddata[7] に "$"をいれます。
Comresseddata[8] に IntToAlphabet(7) をいれます。(アルファベットの7文字目が返ってくるので「G」)
Comresseddata[9] に IntToAlphabet(5) をいれます。(アルファベットの5文字目が返ってくるので「E」)
Cindexを +3 します。
Pindexを +5 しなければならないので空欄「d」は「エ」です。
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A B C D E F G $ G E | NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 | -1 | -1 | 0 | |
6 | 6 | -1 | -1 | 0 | |
7 | 7 | ||||
12 | 10 |
これでプログラム「Compress」に関する空欄は全部埋まりましたが処理を続けます。
メインループの5回目
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A B C D E F G $ G E $ E D |
NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 | -1 | -1 | 0 | |
6 | 6 | -1 | -1 | 0 | |
7 | 7 | ||||
12 | 10 | ||||
16 | 13 |
メインループの6回目
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A B C D E F G $ G E $ E D F |
NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 | -1 | -1 | 0 | |
6 | 6 | -1 | -1 | 0 | |
7 | 7 | ||||
12 | 10 | ||||
16 | 13 | -1 | -1 | 0 | |
17 | 14 |
メインループの7回目
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-x] | C length |
A B C D E F G $ G E $ E D F $ M G |
NULL |
P index |
C index |
MF | MD | Distance | Fitnum |
---|---|---|---|---|---|
0 | 0 | ||||
1 | 1 | ||||
2 | 2 | ||||
3 | 3 | ||||
4 | 4 | -1 | -1 | 0 | |
5 | 5 | -1 | -1 | 0 | |
6 | 6 | -1 | -1 | 0 | |
7 | 7 | ||||
12 | 10 | ||||
16 | 13 | -1 | -1 | 0 | |
17 | 14 | ||||
24 | 17 |
ループを抜けて最後に Clength に Cindex をいれて処理を終了します。
Plaindata[0-23] | P length |
---|---|
A B C D E F G A B C D E A B C D F E F G A B C D |
24 |
Compressdata[0-16] | C length |
A B C D E F G $ G E $ E D F $ M G |
17 |
ホームに戻るボタン↓