Questions tagged «hashing»

涉及将大量数据汇总为一个小得多的挑战。

24
可发布的哈希函数挑战
在此代码挑战中,您将使用140字节1或更少的源代码编写一个哈希函数。哈希函数必须将ASCII字符串作为输入,并返回24位无符号整数([0,2 24 -1])作为输出。 您的哈希函数将针对这本大型英式英语词典2中的每个单词进行评估。您的分数是与另一个单词共享一个哈希值(冲突)的单词数量。 得分最低者获胜,第一张海报打破了平局。 测试用例 提交之前,请在以下输入中测试评分脚本: duplicate duplicate duplicate duplicate 如果它给出的分数不是4,那就是越野车。 澄清规则: 您的哈希函数必须在单个字符串上而不是整个数组上运行。另外,您的哈希函数除了输入字符串和输出整数外,可能不执行任何其他I / O操作。 不允许使用内置的哈希函数或类似功能(例如,加密加扰字节)。 您的哈希函数必须是确定性的。 与大多数其他竞赛相反,允许专门针对得分输入进行优化。 1我知道Twitter限制字符而不是字节,但为简单起见,我们将字节作为对此挑战的限制。 2从Debian的wbritish-huge修改而来,删除了所有非ASCII单词。

20
哈希冲突:“否”表示“是”
此Code Golf的灵感来自于最近的每日WTF文章《您无法正确处理!,其字符串比较写为: String yes = "YES"; if ((delay.hashCode()) == yes.hashCode()) 想象一下,如果Java的String.hashCode方法恰好以这种方式实现,将会给Steve的团队带来麻烦"YES".hashCode() == "NO".hashCode()。因此,我在这里提出的挑战是: h用一个字符串参数和一个整数返回值h("YES")(等于)以尽可能少的字符编写一个哈希函数(我称它为 ) h("NO")。 当然,使用像这样的函数将是微不足道的def h(s): return 0,它会为每个字符串造成哈希冲突。为了使这一挑战更加有趣,您必须遵守以下附加规则: 在由三个或更少的大写ASCII字母()组成的其他 18 277个可能的字符串中^[A-Z]{0,3}$,必须没有哈希冲突。 澄清(由Heiko Oberdiek指出):输入字符串可能包含以外的字符A-Z,并且您的代码必须能够散列任意字符串。(但是,您可以假定输入是字符串,而不是空指针或其他数据类型的对象。)但是,^[A-Z]{0,3}$只要不匹配,则返回值是多少都没有关系。这是一个整数。 此外,混淆此功能的意图: 您的代码不得在字符或字符串文字中包含任何字母“ Y”,“ E”,“ S”,“ N”或“ O”(大写或小写)。 当然,这种限制并不适用于语言的关键字,这样else,return等都是精品。

19
我的馅饼被平分了吗?
编写一个包含正整数的非空列表的程序或函数。您可能会假设它是以合理方便的格式输入的,例如"1 2 3 4"或[1, 2, 3, 4]。 输入列表中的数字表示完整饼图的切片,其中每个切片的大小与其对应的数字成比例,并且所有切片均按给定的顺序排列在图表周围。 例如,饼图为1 2 3 4: 您的代码必须回答的问题是:饼图是否一分为二?也就是说,从圆的一侧到另一侧是否存在一条完美的直线,将其对称地一分为二? 你需要输出truthy值,如果有至少一个平分线和输出falsy如果有没有价值。 在该1 2 3 4示例中,之间有一个等分线4 1,2 3因此输出将是真实的。 但是对于输入而言1 2 3 4 5,没有平分线,因此输出将是虚假的: 其他例子 以其他方式排列数字可能会消除等分线。 例如2 1 3 4→虚假: 如果输入列表中只有一个数字,则饼图不会一分为二。 例如10→虚假: 可能有多个平分线。只要大于零,输出就是真实的。 例如6 6 12 12 12 11 1 12→真实:(这里有3个等分线) 即使平分在视觉上不明显,也可能存在。 例如1000000 1000001→虚假: 例如1000000 1000001 1→真实: (感谢nces.ed.gov生成饼图。) 测试用例 …
43 code-golf  math  arithmetic  combinatorics  decision-problem  code-golf  sequence  number-theory  binary  code-golf  number-theory  set-theory  code-golf  hashing  code-golf  game  card-games  code-golf  ascii-art  code-golf  arithmetic  array-manipulation  jelly  code-golf  string  array-manipulation  code-golf  sorting  code-challenge  code-golf  number  date  binary  code-golf  arithmetic  code-golf  math  number  linear-algebra  polynomials  code-golf  ascii-art  code-golf  grid  decision-problem  code-golf  string  combinatorics  code-golf  string  kolmogorov-complexity  arithmetic  date  code-golf  number  data-structures  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  array-manipulation 

9
帮我认出我的怪物
背景 NetHack电脑游戏的历史可以追溯到1987年,当时在电脑游戏中广泛使用图形技术。游戏中有很多怪物,并且可能一次需要在屏幕上放置很多怪物,因此怪物的绘制方式非常简单:将怪物简单地以ASCII字符的形式绘制在屏幕上。 除了有很多怪物外,还有很多类型的怪物。知道哪个是很重要的。您看到小猫和龙时必须做出不同的反应。因此,大多数ASCII用来表示怪物。例如,一只小猫是f,一条红龙是D。这意味着了解给定怪物的外观会非常有帮助,因为如果您稍后在游戏中遇到它,它将帮助您识别它。(请注意,怪物的类型多于ASCII字符,因此它们中的一些共享;红色龙和蓝色龙都是D。) 任务 您的程序必须以NetHack怪兽的名称作为输入,并在游戏中产生表示它的ASCII字符作为输出。允许程序假定输入实际上是NetHack怪兽的名称。如果输入无效,则可能希望崩溃,产生无意义的结果等。 以下Stack Snippet是一个JSON对象,提供了可能的输入到其对应输出的完整映射: 显示代码段 { "Aleax": "A", "Angel": "A", "Arch Priest": "@", "Archon": "A", "Ashikaga Takauji": "@", "Asmodeus": "&", "Baalzebub": "&", "Chromatic Dragon": "D", "Croesus": "@", "Cyclops": "H", "Dark One": "@", "Death": "&", "Demogorgon": "&", "Dispater": "&", "Elvenking": "@", "Famine": "&", "Geryon": "&", "Grand Master": "@", …

18
26位歌手,26个字母
根据RollingStone的统计,以下是有史以来 26位最出色的歌手: Aretha Franklin Al Green Ray Charles Robert Plant Elvis Presley Mick Jagger Sam Cooke Tina Turner John Lennon Freddie Mercury Marvin Gaye Bob Marley Bob Dylan Smokey Robinson Otis Redding Johnny Cash Stevie Wonder Etta James James Brown David Bowie Paul McCartney Van Morrison Little Richard Michael Jackson …

23
加密哈希高尔夫
比赛结束了。 由于警察和强盗挑战的性质,当对相关强盗挑战的兴趣减少时,警察挑战变得容易得多。因此,尽管您仍然可以发布哈希函数,但是您的答案将不会被接受或成为排行榜的一部分。 这个挑战是最短实施的搜索哈希函数是抗碰撞,也就是说,它应该是不可能找到相同的哈希两个不同的消息。 作为警察,您尝试发明并实现一个哈希函数,以在代码大小和抗冲突性之间找到最佳折衷方案。使用太多字节,另一位警察将使您失望! 作为强盗,您尝试通过破坏警察的职能来挫败他们的尝试,证明它们不合适。这将迫使他们使用更多字节来增强算法! 警察挑战 任务 实现加密散列函数H:我- > 0您选择,其中我在2以下的集合中的所有非负整数的2 30和Ø低于2集的所有非负整数的128。 您可以将H实现为实际函数,该函数接受并返回单个整数,整数或整数数组的字符串表示形式,或者从STDIN读取并以10或16为基数打印到STDOUT的完整程序。 计分 H必须抵抗下面定义的强盗挑战。 如果强盗在发布后的168小时内将您提交的内容拒之门外,则认为该文件已被破解。 H的实现应尽可能短。最短的不打扰的提交将是警察挑战赛的获胜者。 附加规则 如果将H实现为函数,请提供一个包装程序,以从行为如上所述的程序中执行该函数。 请为您的程序或包装器至少提供三个测试向量(示例输入及其相应的输出)。 H可以是您的新颖设计(首选)或众所周知的算法,只要您自己实现即可。禁止使用任何类型的内置哈希函数,压缩函数,密码,PRNG等。 通常用于实现哈希函数(例如,基本转换)的任何内置方法都是公平的游戏。 程序或函数的输出必须是确定性的。 应该有一个免费的(如在啤酒中)编译器/解释器,可以在x86或x64平台上或从Web浏览器中运行。 您的程序或函数应该相当高效,并且必须在不到2秒的时间内对I 2 2 19以下的消息进行哈希处理。 对于边缘情况,在我的计算机(Intel Core i7-3770,16 GiB RAM)上花费的(墙)时间将是决定性的。 考虑到这一挑战的性质,无论是否更改输出,都禁止以任何方式更改答案的代码。 如果您提交的内容被破解(甚至没有被破解),则可以发布其他答案。 如果您的答案无效(例如,它不符合I / O规范),请删除它。 例 Python 2.7,22个字节 def H(M): return M%17 包装纸 print H(int(input())) 强盗挑战 任务 通过在强盗的线程中张贴以下内容来破解任何警察的提交:I中的两个消息M和N,使得H(M)= …

20
法鲁洗牌数组
阿法鲁洗牌是经常使用的魔术到“洗牌”甲板的技术。要执行Faro随机播放,您首先将卡座切成相等的两半,然后将这两个半插入。例如 [1 2 3 4 5 6 7 8] 法鲁洗牌是 [1 5 2 6 3 7 4 8] 可以重复多次。有趣的是,如果重复此次数足够多,您将总是回到原始数组。例如: [1 2 3 4 5 6 7 8] [1 5 2 6 3 7 4 8] [1 3 5 7 2 4 6 8] [1 2 3 4 5 6 7 …
31 code-golf  permutations  card-games  code-golf  graphical-output  random  code-golf  image-processing  color  code-golf  primes  code-golf  math  arithmetic  combinatorics  decision-problem  code-golf  sequence  number-theory  binary  code-golf  number-theory  set-theory  code-golf  hashing  code-golf  game  card-games  code-golf  ascii-art  code-golf  arithmetic  array-manipulation  jelly  code-golf  string  array-manipulation  code-golf  sorting  code-challenge  code-golf  number  date  binary  code-golf  arithmetic  code-golf  math  number  linear-algebra  polynomials  code-golf  ascii-art  code-golf  grid  decision-problem  code-golf  string  combinatorics  code-golf  string  kolmogorov-complexity  arithmetic  date  code-golf  number  data-structures  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  array-manipulation 

30
始终以相同的长度输出
对于诸如Output的长度与代码相同的挑战以及Create output的长度是代码长度的两倍的挑战,我想到了一个单独的但相似的挑战。 任务是产生输出。它可以是字符串,字符列表,也可以是程序的默认输出格式。但是,无论输入如何,您的输出必须始终为相同的长度。更重要的是,对于不同的输入,输出应该是不同的。 输入项 单个整数nnn,其范围由语言选择确定。如果您的语言具有可变长度整数,范围是−231≤n&lt;231−231≤n&lt;231-2^{31} \leq n < 2^{31}。 输出量 字符串或字符列表,或打印到STDOUT或STDERR。您只能使用以下方法之一。无论输入如何,输出都应具有相同的长度,但是由您决定是哪个长度。输出中可能不包含数字字符0-9或减号-。输出应该是确定性的。 您应该能够通过形式证明,自变量或蛮力搜索来证明每个输出只有一个可能的输入。 这是一个代码问题,因此请删除所有多余的字节。欢迎所有语言,越多越好!

15
半回文之谜
回文是一个本身相反的词。 现在有些单词看起来像回文,但看起来却不然。例如,考虑单词 sheesh, sheesh不是回文,因为它的反向是hseehs不同的,但是如果我们认为sh是单个字母,那么它的反向是sheesh。我们将这种词称为半回文。 具体来说,如果我们可以将单词拆分成一定数量的块,则该单词为半回文,这样当块的顺序颠倒时,便形成了原始单词。(因为sheesh这些块是sh e e sh),我们也将不要求任何块包含两个单词的字母(否则每个单词都是半回文)。例如rear,不是半回文,因为它r ea r具有一个块(ea),其中包含来自原始单词两边的字母。我们认为奇数长度的单词的中心字符不在单词的两侧,因此对于奇数长度的单词,中心字符必须始终位于其自己的块中。 您的任务是获取正整数列表,并确定它们是否为半回文。您的代码应输出两个一致的不相等值,如果输入是半回文,则应输出一个,否则将输出另一个。但是,代码的字节序列本身必须是半回文。 答案将以字节计分,而字节数越少越好。 测试用例 [] -&gt; True [1] -&gt; True [2,1,2] -&gt; True [3,4,2,2,3,4] -&gt; True [3,5,1,3,5] -&gt; True [1,2,3,1] -&gt; False [1,2,3,3,4,1] -&gt; False [11,44,1,1] -&gt; False [1,3,2,4,1,2,3] -&gt; False 程序生成更多的测试用例。 borrible指出,这些与广义Smarandache回文相似。因此,如果您想做进一步的阅读,那是一个开始的地方。

10
自然日志上的蚂蚁
这是一个很好的初学者挑战,也是一个很好的时间杀手。 我只说了-自然-对数,因为标题太短了,这与对数无关。 给定2个变量: 蚂蚁数量n。 日志的宽度w。 输出日志宽度w与n蚁(实施例示出w=3,n=6) | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | | | | \O/ \O/ \O/ | | -O- -O- -O- | | /o\ /o\ /o\ | | ^ ^ ^ | …

30
获取一个具有不同数字的随机n位数字,第一个不是0
我读了这个问题,并认为这将是一个不错的挑战。 任务 给一个输入0&lt;n&lt;10生成一个随机数 正好n位数字 第一个不是 0 所以 f(n)&gt;10**(n-1)-1 不同的数字 获奖标准 这是代码高尔夫球,因此最短的代码获胜。 随机 我的意思是随机分布均匀。因此,从程序的角度来看,每个可能的数字都有相同的机会。如果您使用的语言具有一个奇怪的随机数生成器,则可以使用该生成器。 例 要从中随机选择的值的列表n=2是: [10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 46, 47, 48, …
22 code-golf  number  random  grid  game  king-of-the-hill  javascript  code-golf  arithmetic  statistics  code-golf  math  code-golf  math  code-golf  string  palindrome  code-golf  string  interactive  code-golf  quine  polyglot  code-golf  string  stack-exchange-api  code-golf  number-theory  decision-problem  code-golf  tips  code-golf  string  internet  code-golf  graphical-output  image-processing  fractal  code-golf  ascii-art  geometry  hexagonal-grid  code-golf  string  restricted-source  hello-world  code-golf  game  code-golf  cipher  code-golf  permutations  cops-and-robbers  permutations  cops-and-robbers  code-golf  internet  stack-exchange-api  code-golf  ascii-art  random  code-golf  tips  code-golf  ascii-art  code-golf  code-golf  kolmogorov-complexity  code-golf  string  unicode  code-golf  number  sequence  primes  palindrome  code-golf  game  decision-problem  code-golf  math  geometry  code-golf  graphical-output  interactive  code-golf  set-partitions  code-golf  number  arithmetic  restricted-source  code-golf  decision-problem  python  recursion  code-golf  ascii-art  code-golf  source-layout  code-golf  function  recursion  functional-programming  code-golf  game  combinatorics  permutations  code-golf  string  file-system  code-golf  string  hashing  code-golf  stack-exchange-api  code-golf  string  code-golf  math  number  arithmetic  polyglot 

3
高温辐射固化剂
背景 在这个站点上,我们偶尔会遇到一些问题,要求对程序进行“辐射加固”。这意味着程序必须能够删除一个或多个字节,无论删除哪个字节。 对于在编程挑战中经常遇到的任务很常见,很自然地想要制作一种特别适合这些挑战的语言。鉴于自然的方法是添加一些元数据,以使反向破坏成为可能,因此,实际上并不是真正需要设计的语言,而是一种编码。这个想法是将每个输入转换为一个字节序列,这样即使对序列稍加照射,也可以提取原始输入。 任务 编写两个程序或函数,E(编码器)和D(解码器),使得: E接受两个参数,一个八位字节序列(在本规范中称为“ 输入 ”)和一个非负整数“ radiation ”,并输出一个八位字节序列“ encoding ”。 D接受一个参数,即八位字节序列(“ encdng ”),并输出八位字节序列“ reconstruction ”; 如果同时运行E和D(使用encdng,则D的输入,通过从编码中删除不超过辐射元素(不一定连续)来选择),那么无论删除了哪些字符以形成encdng,重构都将等于输入。 澄清说明 如果您提交的功能,你不必叫他们E和D; 您可以选择最适合您的语言的名称。 “八位位组”基本上是0到255之间的整数,您可以将其编码为整数,字符或任何适合您的语言的字符。 E和D必须完全是确定性的(即给它们相同的输入将始终产生相同的输出,其中“输入”定义为E的输入和辐射,或D的编码)。特别是,E可能不会通过边信道将信息传达给D。 删除是通过删除序列的一个元素来完成的。可以考虑在编辑器中打开序列,将光标置于任意点,然后按Backspace键。如果一个元素出现多次,则可能只删除该元素的一个副本(即,同一八位位组的其他实例将不受影响)。 尽管仅根据相当短的输入量来计算分数,但是您的程序在理论上必须对任何输入量和辐射都有效。特别是,无论input中出现哪个八位字节,它都必须起作用。(很抱歉,希望使用他们知道的不可打印字符的能力不会出现在输入中,但是我需要确保输入不可压缩,以便挑战在于辐射硬化而不是压缩。) 您可以提交定义两个功能的一个文件。两个文件,每个文件都定义一个功能或都是完整程序;或三个文件,其中两个分别实现D和E(通过完整程序或通过定义函数),第三个文件是D和E通用的头文件或库。无论使用哪种提交形式,则您的编程语言实现必须能够理解两个程序而无需文件位置等其他参数(否则,按照我们的标准规则,您必须以不寻常的方式调用实现以支付字节罚款)。 胜利条件 对于每个长度和辐射,令f(长度,辐射)为编码 s 的总长度,其对应于具有长度length的所有输入以及给定的辐射。(也就是说,f(长度,辐射)= 输入总和的长度为长度 length(E(输入,辐射))。)然后令g(长度,辐射)等于f(长度,辐射)÷256 长度。换句话说,对于给定的输入长度和给定的辐射硬化要求,g是编码输出的平均长度。(理论上,您可以通过蛮力计算出来,但是以这种方式计算出您的分数可能会花费很长的时间。我希望大多数提交者能够对他们的分数做出数学上的论证。不确定,发布一个近似分数,如果另一个条目发布了相似的分数,您或其他人可以更深入地计算它。) 您的分数等于0到9(含)范围内的所有辐射的g(长度,辐射)的总和,0到99(含)范围内的所有长度的总和,加上(主要是避免硬编码,或者如果有人发现了数学上完美的编码;否则,这可能是一个最小的因素)提交给挑战的字节总数(加上对要求异常解释器标志或特定文件名之类的标准惩罚)。获胜者是得分最低的作品(被第一次提交的作品打破)。

4
实施SHA-256
给定一个字节序列,输出该序列的SHA-256哈希值。 SHA-256算法 以下伪代码来自SHA-2的维基百科页面。 Note 1: All variables are 32 bit unsigned integers and addition is calculated modulo 2^32 Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 ≤ i ≤ 63 Note 3: The compression function uses 8 …

5
2016年以比特币开采!PCG.SE新年拼图2016
在比特币协议中,2016是一个非常特殊的数字。每2,016个块调整一次查找哈希值以创建新块的“难度”,大约每两周更改一次。 选择该数字是因为难度会自行调整,因此发现每个区块大约需要10分钟,并且在两周内有2×7×24×6 = 2,016十分钟的时间段。 为了纪念这种数字上的巧合,今年新年的问题是关于比特币的-特别是,它用于签署块SHA-256的哈希算法。 您的任务是创建一个程序,该程序将接受字节输入(至少为ASCII)并输出字节(以您选择的格式)的随机数,该随机数将产生SHA-256哈希,其中包含 2016在它的base64表示时附加到原来的字节输入。 以下是一些有效解决方案的示例,这些示例由人们已经产生的引擎以及产生的哈希表提供: &gt; foo Nonce: 196870 SHA256 hash: OCUdDDtQ42wUlKz2016x+NROo8P2lbJf8F4yCKedTLE= &gt; bar Nonce: 48230 SHA256 hash: CNcaOCQgT7bnlQzQPXNwuBu8/LYEdk2016khRaROyZk= &gt; happynewyear Nonce: 1740131 SHA256 hash: XsKke6z2016BzB+wRNCm53LKJ6TW6ir66GwuC8oz1nQ= &gt; 2016 Nonce: 494069 SHA256 hash: rWAHW2YFhHCr22016zw+Sog6aW76eImgO5Lh72u6o5s= (note: the nonces don't actually have to be ASCII numbers; you can do any …

14
任意长度散列
考虑您有一个哈希函数 HH\mathcal{H},该哈希函数接收长度为2n2n2n字符串并返回长度为nnn字符串,并且具有耐碰撞的好特性,即很难找到具有相同哈希H的两个不同的字符串s≠s′s≠s′s \neq s'(s )= H(s ')。H(s)=H(s′)H(s)=H(s′)\mathcal{H}(s) = \mathcal{H}(s') 现在,您想构建一个新的哈希函数H′H′\mathcal{H'},该函数采用任意长度的字符串并将它们映射到长度为nnn字符串,同时仍具有抗碰撞性。 幸运的是,在1979年已经发布了一种现在称为Merkle–Damgård构造的方法,可以实现此目的。 这项挑战的任务是实现该算法,因此在逐步执行示例之前,我们将首先对Merkle–Damgård构造进行正式描述,该示例应表明该方法比以下方法更简单。它可能会首先出现。 给定一些n&gt;0n&gt;0n > 0整数,如上所述的哈希函数HH\mathcal{H}和任意长度的输入字符串sss,新的哈希函数H′H′\mathcal{H'}执行以下操作: 设置l=|s|l=|s| l = |s|,的长度sss和将sss拆分为长度为nnn的块,必要时用尾随零填充最后一个块。这产生m=⌈ln⌉m=⌈ln⌉m = \lceil \frac{l}{n} \rceil 许多块被标记c1,c2,…,cmc1,c2,…,cmc_1, c_2, \dots, c_m 。 添加一个前导和尾部块c0c0c_0和cm+1cm+1c_{m+1},其中c0c0c_0是由以下组成的串nnn零和cm+1cm+1c_{m+1}是nnn二进制,填充与领先零长度nnn。 现在,将HH\mathcal{H}迭代地应用于附加到先前结果r i - 1的当前块cicic_i上:r i = H(r i - 1 c i),其中r 0 = c 0。(查看下面的示例后,此步骤可能会更加清楚。)ri−1ri−1r_{i-1}ri=H(ri−1ci)ri=H(ri−1ci) r_i = \mathcal{H}(r_{i-1}c_i)r0=c0r0=c0r_0 = c_0 …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.