C(半難読化済み)
この小さなプログラムは、コマンドラインで数値を取得し、その階乗を計算します。ただし、空白や空白行の正しい使用など、会社のコーディング標準が守られていることをランタイムで検証するための最先端のAI機能も含まれています。空白行を削除すると、アルゴリズムがトリガーされ、メンテナンスが不十分なプログラムが拒否されます。
行の継続やトライグラフはどこにもありません。有効なANSI C99だと思います。
高度な数学が関係しているため、gcc
でコンパイルする場合は、必ずを使用してください-lm
。
#include <setjmp.h>
#include <stdio.h>
#define max(x,y) ((x<y?y:x))
#define swap(x,y) ((x^=y,y^=x,x^=y))
#include <stdlib.h>
#include <math.h>
#define vfry(x,p,z,y,i) (!!y&((z##z##L##I##p##x##z##z)))
#define NDEBUG
/*
* Proper use of whitespace is essential!
* Please do not remove any blank lines.
*/
const double E = 2.71828182845904523536;
int vrfy(double epsilon, int magic, const char *key, long int L) {
/* You are not expected to understand this */
double x=284.2891,u=2.34e56;
while (rand()+magic*pow(epsilon,sin(x-E))!=log(u*L))
x*=vrfy(1.0/epsilon,(int)u,&key[swap(L,magic)],L++);
return u/lgamma(x);
}
int main(int argc, char *argv[]) {
int N_=831293812; /* do not change, see Knuth 1987 */
if (!vfry(E, N,_, "M=&;VT=I!9", 0xfe86ddcaL)) {
fprintf(stderr, "Code standards violation detected!\n");
abort();
}
if (argc < 2) {
fprintf(stderr, "Usage: %s n\nComputes n!\n", argv[0]);
exit(1);
}
int m=1, n=atoi(argv[1]), i;
for (i=1; i <= n; i++)
m *= i;
printf("%d! = %d\n", n, m);
return 0;
}
スポイラー
複雑なvrfy
関数が呼び出されることはありませんが、むしろ変に見えるvfry
マクロです。プリプロセッサの文字列連結機能を使用すると、実際にのパリティをチェックしているだけであるという事実が偽装され__LINE__
ます。