応用情報技術者試験の過去問&キーワードを動画2443本の動画で解説!スキマ時間に動画!※2017年9月11日現在

PR広告

平成28年度春 応用情報技術者試験 午後問3 プログラミング 設問1 合格率アップ!動画付き解説

問3 ライフゲームに関する次の記述を読んで、設問1~5に答えよ。

ライフゲームとは、数学者コンウェイが考案した、生命の誕生、生存、死滅などを再現したシミュレーションゲームである。

マス目状の盤上の各マスに生命が存在でき、そのマス自身及び隣接するマスの状態によって次世代の誕生、生存、死滅が決まる。

その条件を表1に示す。

平成28年度春 応用情報技術者試験 午後問3 プログラミング 合格率アップ!動画付き解説!

なお、隣接するマスには、斜め方向のマスも含む。

また、生命が存在するマスを"生のマス"、生命が存在しないマスを"死のマス"と呼ぶ。

〔4×4マスのシミュレーション〕

4×4マスの盤上における第3世代までのシミュレーションを図1に示す。

平成28年度春 応用情報技術者試験 午後問3 プログラミング 合格率アップ!動画付き解説!

第1世代は、初期値として設定されたものである。例として、第1世代の2行目1列目のマスを考える。

現在、このマスは死のマスである。このマスに隣接するマスを網掛けで示す。これら五つのマスの中に生のマスが三つある。

これは表1の"誕生"の条件に該当するので、第2世代の2行目1列目のマスは生のマスになる。

同様に、第1世代の各マスについて、そのマス自身及び隣接するマスの状態を確認することで第2世代が決まる。

次の世代への状態の更新は、全てのマスについて同時に行われる。

〔盤上のマスのデータ構造〕

N×Nマスの盤上の状態を表現するデータ構造を考える。

多次元配列が利用できないプログラム言語を考慮し、盤上の各マスの生死状態を管理するデータ構造として1次元配列mを用いる。

配列mのデータ構造のイメージを図2に示す。

平成28年度春 応用情報技術者試験 午後問3 プログラミング 合格率アップ!動画付き解説!

 〔配列mを次世代に更新するプログラム〕

使用する定数、配列及び関数を表2に、配列mを次世代に更新する関数updateを図3に示す。

なお、関数に配列を引数として渡すときの方式は参照渡しである。

平成28年度春 応用情報技術者試験 午後問3 プログラミング 合格率アップ!動画付き解説!

function update(m)
  copy(m, temp) // 配列mを配列tempにコピーして退避する
  clear(m)      // 配列mの全ての要素の値を0にする
  for( iを1からN×Nまで1ずつ増やす )
    if( i-1がNで割り切れる )
	  a ← 0
	  b ← 1
	elseif( iがNで割り切れる )
	  a ← -1
	  b ← 0
	else
	  a ← -1
	  b ← 1
	endif
	
	e ← 0
	for( yを-1から1まで1ずつ増やす )
	  for( xをaからbまで1つずつ増やす )
	    if( (yと0が等しくない) or (xと0が等しくない) )
		  c ← i + y×N + x
		  if( (cが1以上) and (cがN×N以下) )
		    if(  )
			  e ← e + 1
			endif
	      endif
		endif
      endfor
	endfor
	
	// 生死を判断する
	if(  )
	  m[i] ← 1
	elseif( (temp[i]と1が等しい) and ( (eと2が等しい) or (eと3が等しい) ) )
	  
	endif
	
  endfor
endfunction

図3 関数updateのプログラム

〔テストプログラム〕

図3のプログラムをテストするために、配列mに第1世代が与えられたときの第p世代が、机上で作成した正しい結果である配列rと等しいことを確認するプログラムを作成した。

作成した関数shouldBeを図4に示す。ここで、pには2以上の整数が入る。

 1: function shouldBe( m, p, r )
 2:   for( iを1からpまで1ずつ増やす )
 3:     update(m)
 4:   endfor
 5:   for( iを1からN×Nまで1ずつ増やす )
 6:     if( m[i] と r[i] が等しくない )
 7:       return false // テスト失敗
 8:     endif
 9:   endfor
10:   return true      // テスト成功
11: endfunction

図4 関数shouldBeのプログラム

図3のプログラムが正しく動作する状態で図4のプログラムを実行したところ、テストが失敗した。

原因を調査した結果、図4の行目に問題があることが判明したので、①プログラムを修正してテストを成功させることができた。

設問1

図1中のに入れる適切な生死状態を図1の凡例に倣い答えよ。

解説

第2世代から第3世代への移り変わりを考えます

× × × ×
× ×
× ×
× × ×

表1の誕生、生存、死滅の条件を当てはめると下記の通りになります。

誕生せず 誕生せず 誕生せず 誕生せず
ア 過疎○→× 誕生せず 生存○→○ 誕生せず
誕生×→○ イ 過密○→× ウ 生存○→○ 誕生せず
誕生せず 生存○→○ エ 誕生×→○ 誕生せず

アは○であり、周りに○が1つしかないので、過疎になり、死のマスになります。

イは○であり、周りに○が4つあり、過密になり、死のマスになります。

ウは○であり、周りに○が3つあり、生存となります。○のまま

エは×であり、周りに○が3つあり、誕生となり、生のマスになります。

平成28年度春 応用情報技術者試験 午後 目次


タグ: ,

PR広告

フェイスブックコメント

難解な応用情報技術者試験午前で80点中48点を取る優しい方法

平成28年度春 応用情報技術者試験 午後 テキスト・動画解説

平成28年度春 応用情報技術者試験 午後 動画解説再生リスト

平成28年度春 応用情報技術者試験 午前 テキスト・動画解説

平成28年度秋 応用情報技術者試験 午前 動画解説再生リスト

平成27年度秋 応用情報技術者試験 午前 テキスト・動画解説

平成27年度秋 応用情報技術者試験 午前 動画解説再生リスト

平成27年度春 応用情報技術者試験 午後 テキスト・動画解説

平成27年度春 応用情報技術者試験 午後 動画解説再生リスト

平成27年度春 応用情報技術者試験 午前 テキスト・動画解説

平成27年度春 応用情報技術者試験 午前 動画解説再生リスト

平成26年度秋 応用情報技術者試験 午前 テキスト・動画解説

平成26年度秋 応用情報技術者試験 午前 動画解説再生リスト

平成26年度春 応用情報技術者試験 午前 テキスト・動画解説

平成26年度春 応用情報技術者試験 午前 動画解説再生リスト