Function 编写一个程序来创建一个将输入集与输出集匹配的公式

Function 编写一个程序来创建一个将输入集与输出集匹配的公式,function,obfuscation,theory,brute-force,Function,Obfuscation,Theory,Brute Force,我刚刚在StackOverflow上看到了一个模糊C解释的解释。我发现这场比赛非常有趣,因为我每天都在学习新的C语言以及新的编程知识 一个有趣的是 如您所见,该程序使用一系列模函数(即(整数)%4796%275%4)对输入数进行散列,以形成两个输出数之一。这个“散列”函数已经过测试并出错,可以在有限的一组输入中正常工作 我认为这将是一个伟大的事情,必须最小化您的程序的大小,以便您可以映射一个结果到另一个。例如,您可以将{苹果、莴苣、胡萝卜、梨、橘子、芦笋}转换为一个数字并通过该函数,转换为{1,

我刚刚在StackOverflow上看到了一个模糊C解释的解释。我发现这场比赛非常有趣,因为我每天都在学习新的C语言以及新的编程知识

一个有趣的是

如您所见,该程序使用一系列模函数(即(整数)%4796%275%4)对输入数进行散列,以形成两个输出数之一。这个“散列”函数已经过测试并出错,可以在有限的一组输入中正常工作

我认为这将是一个伟大的事情,必须最小化您的程序的大小,以便您可以映射一个结果到另一个。例如,您可以将{苹果、莴苣、胡萝卜、梨、橘子、芦笋}转换为一个数字并通过该函数,转换为{1,0,0,1,1,0},该函数比完整的数据库占用更少的空间来搜索字符串并确定其结果

所以我的问题是。。。如何创建一个程序来强制执行堆叠的模函数,该函数将适用于所有给定的输入集和输出集

继续水果示例,可以将水果的前两个字母转换为如下所示的数字: 苹果->ap->0x6170

因此列表变成{0x6170,0x6c65,0x6361,0x7065,0x6f72,0x6173}

因此,您需要生成一个包含重复模的函数,以将{0x6170,0x6c65,0x6361,0x7065,0x6f72,0x6173}映射到{1,0,0,1,1,0}


一个人怎样才能做到这一点呢?

这是一个有趣的挑战,但远远超出了我的数学技能。下面是一个简单的C
:P

我没有数学证明,因此无法证明这总是能找到一个解决方案,但它适用于您的输入。加上“水果”的“克林顿”和“蔬菜”的“麦卡因”可以让它运行更长的时间;添加“杏”将发出冲突信号!(这是有报道的,但没有说在哪里。请注意,实际上应该允许类似项目(水果或蔬菜)内部发生冲突。我没有为此编写代码,但应该相对简单。)

要查看更长的序列,请添加“banana”。出于某种原因,这需要上升到
163,13,2
。有趣的是,加上“金橘”(我的水果快吃完了)不会花太多时间,即使加上另一个“椰子”,也不会花太多时间

实施说明:

您可以将搜索限制为最大输入2字节代码,因为
mod
函数永远不会对较大的数字执行任何操作。为了保持一致性,这段C代码从测试所有1-mod值开始(尽管我没有发现任何有用的东西)。然后测试2模值,最后测试3模值。如果没有找到值,您可以扩展它以查找4-mod和5-mod长序列,但搜索时间将以对数方式增加(!)

应该可以根据两个以上的值进行分类;这需要非常小的代码重写。我怀疑寻找一个匹配的所有人将需要更长的时间

还可以返回
0
1
以外的其他“索引”;在我写这篇文章时,CPU的其余部分正在努力工作
2
0
。不过,这似乎需要相当长的时间

C实施,暴力:

#包括
#包括
内部主(空)
{
苹果、梨、橘子;克林顿;
char*Vegies[]={“莴苣”、“胡萝卜”、“芦笋”};//,“mccaine”};
int num_f,num_v,找到匹配项;
无符号短*码[2],最大码=0;
int i,j,模值1,模值2,模值3;
num_f=sizeof(水果)/sizeof(水果[0]);
num_v=sizeof(蔬菜)/sizeof(蔬菜[0]);
代码[0]=malloc((num_f+num_v)*sizeof(short));
代码[1]=malloc((num_f+num_v)*sizeof(short));

对于(i=0;听起来你明白了,蛮力是一个概念。我不认为有什么特别聪明的方法来解决这个问题,你的问题只是一个复杂的问题,询问停止问题是否有解决方案。我刚刚发现这个问题,这与数据库或C有什么关系?这是一个类似的问题,但两者不同我的和那一个之间的区别是,对使用哪种类型的函数有一个约束。此外,你可以指定一个常数来使用多少个模堆栈。它可以用来创建一个数据库。这非常有用!!谢谢!我在分析你的代码时很开心。真的很酷的实现。
mod 507 mod 8 mod 3 should work
apple -> 2
pear -> 2
orange -> 2
lettuce -> 0
carrot -> 0
asparagus -> 0
mod 103 mod 7 mod 3 should work
apple -> 1
pear -> 1
orange -> 1
lettuce -> 0
carrot -> 0
asparagus -> 0
tomato -> 2