Code: Select all
#include <iostream>
#include <vector>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
void bad(int s){cout<<"Case "<<s<<": bad code" << endl;}
int w(char c){
if(c >= '0' && c <= '9'){ return c-'0';}
if(c == '-'){ return 10;}}
char val(string str){
if(str == "00001"){return '0';}
if(str == "10001"){return '1';}
if(str == "01001"){return '2';}
if(str == "11000"){return '3';}
if(str == "00101"){return '4';}
if(str == "10100"){return '5';}
if(str == "01100"){return '6';}
if(str == "00011"){return '7';}
if(str == "10010"){return '8';}
if(str == "10000"){return '9';}
if(str == "00100"){return '-';}
if(str == "00110"){return 's';}}
bool isWide(int a, double b){
if(b*0.95 <= a && b*1.05 >= a){
return false;}
return true;}
int main(){
int n;
int cnt=0;
while(cin >> n && n){
cnt++;
vector<int> v;
for(int i=0;i<n;++i){int tmp;cin>>tmp;v.push_back(tmp);}
if((n-11)%6 != 0){bad(cnt); continue;}
bool found=false;
double ile=0;
for(double i=1;i<=200;++i){
bool good=true;
for(int j=0;j<v.size();++j){
if((v[j] >= 0.95*i && v[j] <= 1.05*i ) || (v[j] >= 1.90*i && v[j] <= 2.10*i )){} else{good=false;}}
if(good){ ile=i; found=true; break;}}
if(!found){bad(cnt); continue;}
bool cont=false;
for(int i=0;i<v.size();++i){
if(v[i] > 200 || v[i] <= 0){bad(cnt); cont=true;break;}
if(i%6 != 5) { continue;}
if(isWide(v[i],ile)){bad(cnt); cont=true; break;} else{v[i] =-1;}
v[i]=-1;
}
if(cont){ continue;}
string code="";
for(int i=0;i<v.size();++i){
if(v[i] != -1){
if(isWide(v[i],ile)){code.append("1");} else{ code.append("0");}}
}
if(val(code.substr(0,5)) != 's'){ reverse(code.begin(),code.end());}
if(val(code.substr(0,5)) != 's'){bad(cnt); continue;}
else{ if(val(code.substr(code.size()-5,5)) != 's'){bad(cnt); continue;}}
vector<string> vv;
for(int i=1;i<(code.size()/5)-1;++i){
vv.push_back(code.substr(i*5,5));}
int c=0,k=0;
for(int i=0;i<=(vv.size()-3);++i){
c+= (((vv.size()-3) - i)%10 +1) * w(val(vv[i]));
}
c = c%11;
if(c != (val(vv[vv.size()-2])-'0')){
cout << "Case "<<cnt<<": bad C" << endl; continue;}
for(int i=0;i<=(vv.size()-2);++i){
k+= (((vv.size()-2) - i)%9 +1) * w(val(vv[i]));
}
k = k%11;
if(k != (val(vv[vv.size()-1])-'0')){
cout << "Case "<<cnt<<": bad K" << endl; continue;}
cout << "Case "<<cnt<<": ";
for(int i=0;i<vv.size()-2;++i){cout << val(vv[i]);}
cout << endl;
} return 0;}
![:(](./images/smilies/icon_frown.gif)
![:P](./images/smilies/icon_razz.gif)