Back

情報科学概論 Aクラス 宿題 2003.7.15 解答例


■と□で16×16ドットの絵を描くスクリプトに関して,ランダムに表示する場合 に次々と■で上描きすることを行う.全てが■になると終了する.途中の結果を 何回目かの表示とともに出力し,最後に何回の描画で全て■になったかも表示す るスクリプトを作成する.出力結果の最後はは図1のようになるものとする.

図1 結果表示の最後の部分.もちろん,回数はランダムに変化する.


ヒント

  1. 2次元の空配列を用意して,画像データを保存する.要素の数は16×16個

  2. 繰り返しの回数を数える「カウンター」用の変数を準備

  3. 全てが■になったときに終了するための条件を考える.全ての要素が■に一 致するということは,そのために用意した変数に一致するたびに1を加えて 行く.終了時にはどうなれば良いか.

  4. ■で上描きして行くと言うことは,新たに用意された文字が■のときのみ代 入して画像データ配列の要素を更新して行く.

  5. だいたい10回前後で終了するはずだが,途中経過が長すぎてターミナルのバッ ファに納まり切らない.途中の経過を見て動作を確認するためには,リダ イレクトを利用して結果をファイルに出力した後で less で表示 させるか,パイプで結果をそのまま less に流すかどちらかが必 要.

    $ ruby Ruby-taskA-7-15-s0340**.rb > result.txt
    $ less result.txt

    もしくは,

    $ ruby Ruby-taskA-7-15-s0340**.rb | less


解答例

bw = ["■", "□"]
var_stop = 0
var_loop = 1
image = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]

print "【1回目】\n\n"

for y in 0..15
  for x in 0..15
    image[x][y] = bw[rand(2)]
    print image[x][y]
  end
  print "\n"
end

print "\n"

while var_stop <= 255
  printf "【%s回目】\n\n", var_loop + 1
  for y in 0..15
    for x in 0..15
      square = rand(2)
      image[x][y] = bw[square] if square == 0
      print image[x][y]
    end
    print "\n"
  end
  print "\n"
  
  var_stop = 0

  for y in 0..15
    for x in 0..15
      if image[x][y] == "■"
	var_stop += 1
      end
    end
  end
  var_loop += 1
end

printf "%d 回目で全部 \"■\" になりました\n", var_loop


情報科学概論 Bクラス 宿題 2003.7.15 解答例


■と□で16×16ドットの絵を描くスクリプトに関して,ランダムに表示する場合 に次々と□で上描きすることを行う.全てが□になると終了する.途中の結果を 何回目かの表示とともに出力し,最後に何回の描画で全て□になったかも表示す るスクリプトを作成する.出力結果の最後はは図1のようになるものとする.

図1 結果表示の最後の部分.もちろん,回数はランダムに変化する.


ヒント

  1. 2次元の空配列を用意して,画像データを保存する.要素の数は16×16個

  2. 繰り返しの回数を数える「カウンター」用の変数を準備

  3. 全てが□になったときに終了するための条件を考える.全ての要素が□に一 致するということは,そのために用意した変数に一致するたびに1を加えて 行く.終了時にはどうなれば良いか.

  4. □で上描きして行くと言うことは,新たに用意された文字が□のときのみ代 入して画像データ配列の要素を更新して行く.

  5. だいたい10回前後で終了するはずだが,途中経過が長すぎてターミナルのバッ ファに納まり切らない.途中の経過を見て動作を確認するためには,リダ イレクトを利用して結果をファイルに出力した後で less で表示 させるか,パイプで結果をそのまま less に流すかどちらかが必 要.

    $ ruby Ruby-taskA-7-15-s0340**.rb > result.txt
    $ less result.txt

    もしくは,

    $ ruby Ruby-taskA-7-15-s0340**.rb | less


解答例

bw = ["■", "□"]
var_stop = 0
var_loop = 1
image = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]

print "【1回目】\n\n"

for y in 0..15
  for x in 0..15
    image[x][y] = bw[rand(2)]
    print image[x][y]
  end
  print "\n"
end

print "\n"

while var_stop <= 255
  printf "【%s回目】\n\n", var_loop + 1
  for y in 0..15
    for x in 0..15
      square = rand(2)
      image[x][y] = bw[square] if square == 1
      print image[x][y]
    end
    print "\n"
  end
  print "\n"
  
  var_stop = 0

  for y in 0..15
    for x in 0..15
      if image[x][y] == "□"
	var_stop += 1
      end
    end
  end
  var_loop += 1
end

printf "%d 回目で全部 \"□\" になりました\n", var_loop


Back