平成31年春期 午後問11
ぱるさん
(No.1)
設問2のソースコードの最後の行の
i = i < 2 ? 0 : i - 2;
ってどういった処理をしているんですか?
i = i < 2 ? 0 : i - 2;
ってどういった処理をしているんですか?
2021.07.20 15:05
GinSanaさん
★FE シルバーマイスター
(No.2)
この投稿は投稿者により削除されました。(2021.07.20 16:44)
2021.07.20 16:44
GinSanaさん
★FE シルバーマイスター
(No.3)
三項演算子なので、
つまり、
i = i < 2 ?(なら) 0 :(でなければ) i - 2;
と読めます。つまり、
if(i < 2){
i = 0;
} else {
i = 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
かなさん
★FE ブロンズマイスター
(No.5)
初期状態
■■■■
■□■■
■□■■
■□■■
■□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■■
■■■■
■■■■
■□■■
■□■■
■□■■
■□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
かなさん
★FE ブロンズマイスター
(No.6)
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]
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
かなさん
★FE ブロンズマイスター
(No.7)
上記の探索が設問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
になるのです。
これに設問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
かなさん
★FE ブロンズマイスター
(No.8)
トレースしたように、要素3, 4を削除したあと、検索する要素を後退させる必要があるため、i = i < 2 ? 0 : i-2で検索要素番号を後退させているのです。
2021.07.20 17:28
ぱるさん
(No.9)
理解できました。詳しく説明していただきありがとうございます
2021.07.21 15:03
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告