1)課題
左側の文字を右側へ運んで下さい。ただし、母音(A, E, I, O, U)は捨ててください。
2)考え方
カーペットに母音がありますので, 左のコンベアから取り出したパネルがカーペットのパネルとすべて異なれば, 母音ではありません. 次のように考えていきます.
- カーペットに「アドレス」を作り, 0で初期化する.
- 左のコンベアから取り出したパネルをカーペットの「文字」に配置する.
- 「アドレス」が示すパネルと「文字」を比較し, 同じなら「文字」は母音なので先頭に戻る. 異なるなら母音ではないので, アドレスを1増やす.
- 「アドレス」が示すパネルが「0」なら, 「文字」が母音でないので, 「文字」を右のコンベアに運びます.
3)実装
プログラムを作っていきます. まずは初期化から.
カーペットに名前を付けます. 元々, カーペットの5番に置いてあった0が母音の終了を表すので, 「終端」と名前を付けています. カーペットに「アドレス」と「文字」の名前を付け, 「アドレス」には「終端」からコピーした0を配置し, 「文字」には左のコンベアから取り出したパネルを配置します.
「アドレス」が示すパネルをカーペットから取り, 終端に到達したか判定します. 「0」であれば終端に到達し, 「文字」は母音ではありませんので右のコンベアに運びます.
「アドレス」が示すパネルが「0」でない場合, 母音であるか判定します. 母音であるパネルを持っていますので, SUBコマンドを使って「文字」と比較します. 結果が0なら母音, 異なるなら子音です. 母音の時, パネルを捨てるので, 先頭に戻ります. 子音の時, 「アドレス」を1増やし, 次の母音と比較するために5行目に戻ります.
プログラムを実行すると課題をクリアーできます. サイズ目標, スピード目標共にあと一歩, といったところです.
0 件のコメント:
コメントを投稿