void main(int riguing,char** acters) { puts(1[acters-~!(*(int*)1[acters]%4796%275%riguing)]); }
关于这是有效的代码以及它如何实际工作的解释将是太棒了!
解决方法
代码片段中的另一个小转移是使用
pointer-~!(something)
这是完全一样的
pointer + (something == 0 ? 2 : 1)
这是如何工作的:
的!运算符将任何真(非零)值转换为0,将false(0)值转换为布尔值true(1):
!something: something == 0 ? 1 : 0
〜运算符是按位逆,所以它将0变成由所有1位组成的数字,它是-1和1,除了最后一位之外的所有1位,即-2.参见two’s complement维基百科文章.
~!something: something == 0 ? -2 : -1
从某事物中减去与添加否定(a – -b == a b)相同
a-~!something: something == 0 ? a + 2 : a + 1
最后
1[a-~!something]: something == 0 ? a[3] : a[2]
因此,根据某些计算是否为零,选择第二个或第三个命令行参数.
所以现在我们需要解读“一些计算”.我们从类型冲突运算符*(T *)(指针)开始,在这种情况下*(int *)(char *),读出任何指针指向,就好像它是一个T.所以在这种情况下从第一个命令行参数(argv [1])读取1 [acters]中的第一个sizeof(int)字符,就像它们是整数的内部表示一样.这将按照姓氏的前四个字符将每个总统编码为整数.
美国历史上曾多次出现过多次总统姓氏,只要具有相同名称的两位总统都有一个政党,这不是问题.
一对这样的一对,父亲和儿子约翰·亚当斯(联邦党人)和约翰·昆西·亚当斯(John Quincy Adams(当选为参议员为联邦党人,担任民主共和国总统))被淘汰,因为在第一个有效的总统(富兰克林皮尔斯),哈里森长老(威廉·亨利,威格),他的孙子本杰明当选为共和党人.父亲和儿子乔治H.W.而布什也是共和党人.而两位约翰逊,安德鲁和林登贝恩斯(据我所知,彼此无关),都是民主党人.
所以只剩下两个罗斯福,西奥多(共和党人)和富兰克林·德拉诺(民主党).罗斯福两位总统的伟大伟大的祖父是约翰内斯和雅各布兄弟,约翰内斯和雅各布,2007年的儿子(或尼古拉斯·范·罗森维尔)(1658-1742)和荷兰移民克劳斯·马特森森·范·罗森威尔的孙子,使他们成为第五表兄弟.不过,总统们通过埃莉诺·罗斯福,西奥多的侄女和FDR的妻子更加密切相关.为了使国际奥委会的进入工作,有必要将年轻的罗斯福代表为“fdr”,就像他所知道的那样.
所以只有(整数)G96’5%的索引,或(整数)G96’5%4,因为索引(aka argc)是4.这是一个简单的哈希函数,我想象是通过试错发现的列表总统姓氏及其隶属关系.