HOME»基本情報技術者試験掲示板»平成31年春期 午後問11
投稿する

[3492] 平成31年春期 午後問11

 ぱるさん(No.1) 
設問2のソースコードの最後の行の
i = i < 2 ? 0 : i - 2;
ってどういった処理をしているんですか?
2021.07.20 15:05
GinSanaさん(No.2) 
FE シルバーマイスター
この投稿は投稿者により削除されました。(2021.07.20 16:44)
2021.07.20 16:44
GinSanaさん(No.3) 
FE シルバーマイスター
三項演算子なので、
i = i < 2 ?(なら) 0 :(でなければ) i - 2;
と読めます。
つまり、
if(i < 2){
i = 0;
} else {
i = i - 2;
}
と同じです。

2021.07.20 16:44
ずる休み中さん(No.4) 
この投稿は投稿者により削除されました。(2021.07.20 16:52)
2021.07.20 16:52
かなさん(No.5) 
FE ブロンズマイスター
初期状態
■■■■
■□■■
■□■■
■□■■
■□G■
■☆■■
■■■■

====================================

1. Piece piece = new Piece(maze)
2. while(!piece.isAtGoal()){
3. _____piece.turnLeft();
4. _____while(!piece.tryStepForward()){
5. __________piece.turnRight();
6. _____}
7. }

1行目でコマを作成し、Sに↑向きに配置。

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にNorthを追加。
[North]

■■■■
■□■■
■□■■
■□■■
■☆G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にNorthを追加。
[North, North]

■■■■
■□■■
■□■■
■☆■■
■□G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にNorthを追加。
[North, North, North]

■■■■
■□■■
■☆■■
■□■■
■□G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にNorthを追加。
[North, North, North, North]

■■■■
■☆■■
■□■■
■□■■
■□G■
■S■■
■■■■
2021.07.20 17:00
かなさん(No.6) 
FE ブロンズマイスター
2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを←に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↑に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを→に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↓に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にSouthを追加。
[North, North, North, North, South]

■■■■
■□■■
■☆■■
■□■■
■□G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを→に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↓に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にSouthを追加。
[North, North, North, North, South, South]

■■■■
■□■■
■□■■
■☆■■
■□G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを→に向ける。
4行目piece.tryStepForward()はfalseなので、!piece.tryStepForward()はtrue
5行目でコマを↓に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にSouthを追加。
[North, North, North, North, South, South, South]

■■■■
■□■■
■□■■
■□■■
■☆G■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はtrue
3行目でコマを→に向ける。
4行目piece.tryStepForward()はtrueなので!piece.tryStepForward()はfalse。履歴にEastを追加。
[North, North, North, North, South, South, South, East]

■■■■
■□■■
■□■■
■□■■
■□☆■
■S■■
■■■■

====================================

2行目piece.isAtGoal()はfalseなので、!piece.isAtGoal()はfalse

迷路探索終了
[North, North, North, North, South, South, South, East]
2021.07.20 17:00
かなさん(No.7) 
FE ブロンズマイスター
上記の探索が設問2コードなしバージョンです。

これに設問2のコードを追加すると、突き当りまで行って戻ったという記録を消して(remove)してくれるようになります。

つまり、[North, North, North, North, South, South, South, East]が[North, East]になるのです。

ここで注目しなければならないのが、NorthとSouthの組が1セットずつ消えているということです。

[North, North, North, North, South, South, South, East]
  0      1     2    3      4     5    6    7
から3つ目と4つ目が削除され、

[North, North, North, South, South, East]
  0      1     2     3     4    5

から2つ目と3つ目が削除され、

[North, North, South, East]
  0      1     2    3  

から1つ目と2つ目が削除され、

[North, East]
  0     1

になるのです。
2021.07.20 17:06
かなさん(No.8) 
FE ブロンズマイスター
トレースしたように、要素3, 4を削除したあと、検索する要素を後退させる必要があるため、i = i < 2 ? 0 : i-2で検索要素番号を後退させているのです。
2021.07.20 17:28
 ぱるさん(No.9) 
理解できました。詳しく説明していただきありがとうございます
2021.07.21 15:03

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop