1問目はこのような問題でした。
この暗号を解けと。
puvxlhwva fubxha tbxvtralb jnerjnerun xvzvgnpuvgb lhxban xnaxrvjb xvmhxhgnzr xbabubfuvav lnggrxvgn fnffbxhqntn lhxbab fuvehfuvgbfvgr chermragbjb bartnvfuvgnv ranwvqbevaxh mbar jb whaovfuvgr ubfuvvabqn xbabartnvjb xnanrgrxhereron bgbanfuvxh xbabubfuvjb ngbavfhehgfhzbevqn jnerjnerun nenfbvtbgbjb abmbznanv znrzhxvan urawvjb xvgnvfuvgrveh
文字列変換の問題です。
rot13で暗号化しているというので調べてみたところ、13文字加算or減算するとものに戻るという暗号のようです。
a→n i→v u→h e→r o→b
に変換されるという例までついていますので確認してみました。
#include <stdio.h>
int main()
{
printf("a 0x%x -> n 0x%x %d\n",'a','n','n'-'a');
printf("i 0x%x -> v 0x%x %d\n",'i','v','v'-'i');
printf("u 0x%x -> h 0x%x %d\n",'u','h','h'-'u');
printf("e 0x%x -> r 0x%x %d\n",'e','r','r'-'e');
printf("o 0x%x -> b 0x%x %d\n",'o','b','b'-'o');
return 0;
}
実行結果は、
a 0x61 -> n 0x6e 13 i 0x69 -> v 0x76 13 u 0x75 -> h 0x68 -13 e 0x65 -> r 0x72 13 o 0x6f -> b 0x62 -13
なるほど、uとoでマイナスになっていますね。
「a」→「n」になっているので「n」はで加算か減算を変えてみればいいのかな?
文字が数字に対応していることがわかっていればわかりやすいです。
早速作ったプログラムはこんな感じに。
#include <stdio.h>
#define inc ('n'-'a')
char input[50][20]=
{
"puvxlhwva",
"fubxha",
"tbxvtralb",
"jnerjnerun",
"xvzvgnpuvgb",
"lhxban",
"xnaxrvjb",
"xvmhxhgnzr",
"xbabubfuvav",
"lnggrxvgn",
"fnffbxhqntn",
"lhxbab",
"fuvehfuvgbfvgr",
"chermragbjb",
"bartnvfuvgnv",
"ranwvqbevaxh",
"mbar",
"jb",
"whaovfuvgr",
"ubfuvvabqn",
"xbabartnvjb",
"xnanrgrxhereron",
"bgbanfuvxh",
"xbabubfuvjb",
"ngbavfhehgfhzbevqn",
"jnerjnerun",
"nenfbvtbgbjb",
"abmbznanv",
"znrzhxvan",
"urawvjb",
"xvgnvfuvgrveh",
""
};
int main()
{
int a=0,i=0;
char out[50]={0};
while(1){
if(input[a][0]==0){
return 0;
}
for (i=0;i<50;i++){
out[i]=0;
}
for(i=0;input[a][i]!=0;i++){
if('n'> input[a][i]){
out[i] = input[a][i] + inc;
}else{
out[i] = input[a][i] - inc;
}
}
printf("%s\n",out);
a++;
}
return 0;
}
実行結果は、
chikyujin shokun gokigenyo warewareha kimitachito yukona kankeiwo kizukutame konohoshini yattekita sassokudaga yukono shirushitosite purezentowo onegaishitai enajidorinku zone wo junbishite hoshiinoda kononegaiwo kanaetekurereba otonashiku konohoshiwo atonisurutsumorida warewareha arasoigotowo nozomanai maemukina henjiwo kitaishiteiru
さっぱり読めないのでひらがなに変換、
ちきゅじん しょくん ごきげにょ われわれは きみたちと ゆこな かんけいを きずくため このほしに やってきた さっそくだが ゆこの しるしとして ぷれぜんとを おねがいしたい えなじどりんく ぞね を じゅんびして ほしいのだ このねがいを かなえてくれれば おとなしく このほしを あとにするつもりだ われわれは あらそいごとを のぞまない まえむきな へんじを きたいしている
宇宙人さんも少し文字が抜けているので補正すると
地球人諸君、ごきげんよう。我々は、君たちと友好な関係を築くためこの星にやってきた。 早速だが、友好の印としてプレゼントをお願いしたい。エナジードリンク「ZONe」を準備して欲しいのだ。この願いを叶えてくれればおとなしくこの星を後にするつもりだ。我々は争いごとを望まない。前向きな返事を期待している。
https://mh-procon.zone-energy.jp/
コメント