---
# System prepended metadata

title: 搶口罩比賽

---

# 搶口罩比賽
https://neoj.sprout.tw/problem/618/
### 題目敘述
最近有句話精準道出人民心聲。

***昔日戴口罩搶錢，今日帶錢搶口罩。***

因此，某地決定來辦一場搶口罩大賽。規則如下：

在一個有障礙物的**正方形場地**，參賽者用口罩矇住眼睛，由旁邊的同伴指引方向。若在整個過程中

1. 沒有撞到障礙物
1. 沒有走出邊界
1. 走到口罩處

參賽者就可以得到一盒口罩！

現在，你為了自己的生命安全，決定也來參加這個比賽。但你的同伴到底會不會給出正確的方向，讓你得到一盒口罩？

### 上傳說明
你只需要完成並上傳isValid, isArrived 兩個function就可以了。

```cpp
#include <iostream>
#include <cstring>
using namespace std;

// map info 
int map_size;
char map[20][20];

/* 根據現在的位置與接下來的方向指令，判斷下一步合不合法。
（這個函式可用於 isArrived 裡） */
bool isValid(int current[], char dir);

/* 最終是否可以成功取得口罩 */
bool isArrived(int start[], int end[], char command[]);

/* Your code will be put here */

int main(){
  char command[100];
  int start[2]; 
  // position: (start[0], start[1])
  int end[2];

  // read map size
  cin >> map_size;

  // read map
  for (int i=0; i<map_size; i++)
    for (int j=0; j<map_size; j++) 
      cin>>map[i][j];

  // read start and end position
  cin >> start[0] >> start[1];
  cin >> end[0] >> end[1];

  // read command
  cin >> command;

  if (isArrived(start, end, command)) 
    cout<<"Get the mask";
  else cout<<"Cry";
}
```
### 輸入說明
第一行有一個 int map_size，保證2 ≤ map_size ≤ 10。代表場地為一個 map_size*map_size的正方形。

接下來輸進一個大小為 map_size*map_size 的字元二維陣列來描述場地 '.'代表普通地， 'o'代表障礙物。

再來兩行，為參賽者的起始座標與口罩的座標。座標為二維座標，因此各有兩個數值。座標表示法如下：(3*3的場地為例）

![](https://i.imgur.com/becVDuV.png)

注意：參賽起始座標與口罩座標不會有障礙物。

最後一行為一個字串，代表同伴指導的指令，R代表向右 一格，L代表向左一格, U代表向上一格, D代表向下格。

輸入已處理好，你只需要完成上面兩個function。

### 輸出說明
根據同伴的一連串指令，判斷你最後能不能得到口罩。

若成功獲取口罩，輸出 Get the mask，

若失敗，輸出 Cry。

輸出後不需換行。

（輸出已處理好）

#### 範例輸入1
```
5
....o
.....
....o
.o.o.
.....
1 2
4 4
URDDLDDRR
```
	
#### 範例輸出1
```
Get the mask
```
	
#### 範例輸入2
```
5
.o...
.....
.o..o
...o.
.....
1 2
0 3
RRUUDL
```
	
#### 範例輸出2
```
Cry
```

# Code
```cpp
bool isValid(int current[], char dir){
  if (dir == 'L')
    current[1]--;
  if (dir == 'U')
    current[0]--;
  if (dir == 'R')
    current[1]++;
  if (dir == 'D')
    current[0]++;
      
  if (current[0] < 0 || current[0] > map_size - 1)
    return false;
  if (current[1] < 0 || current[1] > map_size - 1)
    return false;
  if (map[current[0]][current[1]] == 'o')
    return false;
    
  return true;
}

bool isArrived(int start[], int end[], char command[]){
  for (int i = 0 ; command[i] != '\0' ; i++)
  {
    if (isValid(start , command[i]))
      continue;
    return false;
  }
  if (start[0] == end[0] && start[1] == end[1])
    return true;
  else 
    return false;
}
```