number-recognize/solver.cpp

137 lines
2.5 KiB
C++

#include <bits/stdc++.h>
using namespace std;
string datas[5];
int data[5][256];
int models[12][5][5]={
{
{0,1,1,1,0},
{0,1,0,1,0},
{0,1,0,1,0},
{0,1,0,1,0},
{0,1,1,1,0}
},
{
{0,0,0,1,0},
{0,0,0,1,0},
{0,0,0,1,0},
{0,0,0,1,0},
{0,0,0,1,0}
},
{
{0,1,1,1,0},
{0,0,0,1,0},
{0,1,1,1,0},
{0,1,0,0,0},
{0,1,1,1,0}
},
{
{0,1,1,1,0},
{0,0,0,1,0},
{0,1,1,1,0},
{0,0,0,1,0},
{0,1,1,1,0}
},
{
{0,1,0,1,0},
{0,1,0,1,0},
{0,1,1,1,0},
{0,0,0,1,0},
{0,0,0,1,0}
},
{
{0,1,1,1,0},
{0,1,0,0,0},
{0,1,1,1,0},
{0,0,0,1,0},
{0,1,1,1,0}
},
{
{0,1,1,1,0},
{0,1,0,0,0},
{0,1,1,1,0},
{0,1,0,1,0},
{0,1,1,1,0}
},
{
{0,1,1,1,0},
{0,0,0,1,0},
{0,0,0,1,0},
{0,0,0,1,0},
{0,0,0,1,0}
},
{
{0,1,1,1,0},
{0,1,0,1,0},
{0,1,1,1,0},
{0,1,0,1,0},
{0,1,1,1,0}
},
{
{0,1,1,1,0},
{0,1,0,1,0},
{0,1,1,1,0},
{0,0,0,1,0},
{0,1,1,1,0}
},
{
{0,0,0,0,0},
{0,0,1,0,0},
{0,1,1,1,0},
{0,0,1,0,0},
{0,0,0,0,0}
},
{
{0,0,0,0,0},
{0,0,0,0,0},
{0,1,1,1,0},
{0,0,0,0,0},
{0,0,0,0,0}
}
};
int rec(int x,int y){
for(int i=0;i<5;i++){
for(int j=-1;j<=3;j++){
if(data[i][x+j] != models[y][i][j+1]) return 0;
}
}
return 1;
}
int main(){
freopen("input.txt","r",stdin);
string s = "";
for(int i=0;i<5;i++){
getline(cin,datas[i]);
data[i][0]=0;
datas[i]+=" ";
}
for(int i=0;i<5;i++){
for (int j=1;j<=datas[i].size();j++){
if(datas[i][j-1] == 'x') data[i][j]=1;
else data[i][j]=0;
}
}
for(int i=1;i<=datas[0].size()-4;i++){
if(data[0][i] == 0 && data[0][i+1] == 0 && data[0][i+2] == 0){
if(rec(i,10)){
s+="+";
}
else if(rec(i,11)){
s+="-";
}
}
else {
for(int k=0;k<10;k++){
if(rec(i,k)){
s+=k+'0';
i+=2;
}
}
}
}
cout << s;
return 0;
}