-ソースコード
 #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");
 }
 
-実行結果
 $./a.out
 every person shall have the right of peaceful petition
 for the redress of damage, for the removal of public
 officials, for the enactment,  repeal or amendment of laws,
 ordinances or regulations and for other matters; nor shall
 any person be in any way discriminated against for
 sponsoring such  a petition.
 shit=18

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS