ソースコード
#include <stdio.h>
#include <string.h>
//シフトする順
unsigned char* table = "abcdefghijklmnopqrstuvwxyz .,-a";
//呼び出すごとにstrをシフト
void shift(char* str){
int i;
while(*str != '\0'){
for(i=0; i<30; i++){
if(table[i] == *str){
*str = table[i+1];
break;
}
}
str++;
}
}
//hintの含まれる文字列に解読に成功するとシフト量を返す。-1は失敗
int decode(char* str, char* hint){
int i;
for(i=1; i<=29; i++){
shift(str);
if(strstr(str, hint) != NULL)
return i;
}
return -1;
}
int main(){
int i;
unsigned char buf[] =
"qdq-gi.q-a ziatmxxitmdqibtqi-ustbi "
"ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai "
"ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi "
"rruoumxakir -ibtqiqzmobyqzbkii-q.qmxi"
" -imyqzpyqzbi rixmeaki -puzmzoqai -i-"
"qscxmbu zaimzpir -i btq-iymbbq-a;iz -"
"iatmxximzgi.q-a zinqiuzimzgiemgipuao-u"
"yuzmbqpimsmuzabir -ia. za -uzsiacotiim"
"i.qbubu zj";
if((i = decode(buf, "person")) != -1)
printf("%s\nshit=%d\n", buf, i);
else
fprintf(stderr, "faild in decode.\n");
}