• ソースコード
    #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