ソフトウェア工学の課題でHello, world!難読化の課題が出たので面白がってやってたら何個かできたので紹介するよ! 授業では課題の提出物から何個かピックアップされて紹介されてたけど,作者はこの課題の締切には間に合わせたけど提出が遅かったからピックアップの対象の中に入ってさえいなかったよ!ちょっと悲しいね!
各プログラムの解説を途中まで書いてたけどめんどくさくなってきたから各プログラムの紹介で読解のためのヒント出す程度に留めることにするよ!
ただ読解するにも通常とはやや異なる書き方をしている部分があるから先にそこの説明だけしておくよ!
C言語では
- 明示的に
#include
しなくてもいくつかの標準関数が使える. - グローバル変数の型の省略が許可される.省略した場合,型は
int
と解釈される. - 関数の返り値の型の省略が許可される.省略した場合,返り値の型は
int
と解釈される. - 関数の引数の型の省略が許可される.省略した場合,引数の型は
int
と解釈される. \
を使うと文字列や変数名の途中でも改行することができる.'\0'
を真偽値として使うとfalseと判定される.0
がfalseと判定されるのと同様.- trueとなる条件式は
1
を,falseとなる条件式は0
を返す.
#include<stdio.h>
int main() {
for (int i = 0; i <= 12; i++) putchar((11496038400 + (387352851840 + (-1183123524672 + (1522101793608 + (-1089332757788 + (484856296210 + (-141723460681 + (27908010834 + (-3721696869 + (331047750 + (-18794347 + (615518 + (-8843) * i) * i) * i) * i) * i) * i) * i) * i) * i) * i) * i) * i) / 159667200);
}
ヒント:
- ASCIIコード
- ラグランジュ補間
i,j,c;main(){while(
"Dijkstra"[i-j]?("\
If DeBUGGinG iS_Th\
e prOCEss of REmoV\
ing_SOfTwaRE BuGS,\
THen_ProgRamMing_\
Must Be The prOCEs\
s Of PUTtING tHEM \
IN."[i]>'^'?(c|=02\
00>>(i-j)):(c&=~(0\
200>>(i-j))),++i):\
(j=i,putchar(c)));}
ヒント:
- ASCIIコード
- 8文字ごとに分割
__,___,____,_____,______,_______,________,_________
,__________;main(_){(_||_)^_||(__=_,________=__<<_\
_,______=________<<__,_______=______<<__,_________\
=_______<<__,_____=_________<<__,___=_____<<__,___\
_______=___<<__),(____=____^____),_^__||(____=___^\
_______),_^___^_______^________||(____=___^_____^_\
_____^__),_^__________^___^_____^_________^__||(__\
__=___^_____^_______^______),_^__________^_______^\
______^________||(____=___^_____^_______^______),_\
^___^_____^_________||(____=___^_____^_______^____\
__^________^__),_^__________^_______^______^______\
__^__||(____=_____^_______^______),_^_____^_______\
__^________||(____=_____),_^___^______||(____=___^\
_____^_________^______^________^__),_^__________^_\
__^_____^_________^_______^______^________^__||(__\
__=___^_____^_______^______^________^__),_^_______\
___^_________^__||(____=___^_____^_________^______\
__),_^___^_________||(____=___^_____^_______^_____\
_),_^__________^___^_______^______||(____=___^____\
_^______),_^__________^___^_____^_________^_______\
^______||(____=_____^__),(_^_||putchar(____))^__||\
(_=_<<__^____,____=__^________^______^_______^____\
_____^_____^___^__________,main(_^____^(_|____)));}
ヒント:
- ASCIIコード
- 論理演算