問題
A種の例: >'====#====~ >'==#==~
B種の例: >^Q=Q=Q=Q=~~ >^Q=Q=~~
提出
- 指定のパターンの蛇かを判定する問題
- 私はいくつもif分で弾く判定を足していき、それを抜けたらOKとした
- しかし何度かWAしたし、合っている確信も得づらい
- 正しくは正規表現でこのように解くのが意図されていたのだろう
- 正規表現でマッチ判定した方が、コードから問題設定も想像できるし、良いコードと言える
追記:2020/01/04
- 過去の記事を見返している。読みづらい...ということで更新
- C++で解き直して再提出
code
bool is_pattern_A(string s){
ll L = s.size();
if(s.back()!='~') return false;
string body = s.substr(2, L-3);
if(body.size()%2==0) return false;
ll c = body.size()/2;
if(body[c]!='#') return false;
map<char, ll> mp;
for(char c : body){
mp[c]++;
}
if(mp['=']>0 && mp['=']==body.size()-1 && mp['#']==1){
return true;
}else{
return false;
}
}
bool is_pattern_B(string s){
ll L = s.size();
string tail = s.substr(L-2);
if(tail!="~~") return false;
string body = s.substr(2, L-4);
if(body.size()==0) return false;
if(body.size()%2==1) return false;
for(int i=0; i<body.size(); i+=2){
if(body[i]=='Q' && body[i+1]=='='){
}else{
return false;
}
}
return true;
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll N;
cin >> N;
rep(i, N){
string s;cin>>s;
if(s.size()==1){
p("NA");
continue;
}
string head = s.substr(0, 2);
if(head==">'"){
if(is_pattern_A(s)){
p("A");
}else{
p("NA");
}
}
else if(head==">^"){
if(is_pattern_B(s)){
p("B");
}else{
p("NA");
}
}
else{
p("NA");
}
}
return 0;
}