编程拼图和代码高尔夫

编程益智爱好者和代码高尔夫球手的问答

6
整数格上的误报
排行榜 User Language Score ========================================= Ell C++11 293,619,555 feersum C++11 100,993,667 Ell C++11 78,824,732 Geobits Java 27,817,255 Ell Python 27,797,402 Peter Taylor Java 2,468 <reference> Julia 530 背景 在整数坐标的二维网格上工作时,有时您想知道两个向量(具有整数分量)是否具有相同的大小。当然,在欧几里得几何中,向量的大小(x,y)由 √(x² + y²) 因此,幼稚的实现可能会为两个向量计算该值并比较结果。这不仅会导致不必要的平方根计算,而且还会导致浮点数不准确的问题,这可能会产生误报:幅值不同但浮点表示中的有效数字都相同的向量。 出于此挑战的目的,我们将误报定义为一对坐标对,(a,b)并(c,d)为此: 当表示为64位无符号整数时,它们的平方大小不同。 当表示为64位二进制浮点数并通过64位平方根计算得出时,它们的大小相同(根据IEEE 754)。 例如,使用16位表示(而不是64位),产生假阳性的最小一对矢量为: (25,20) and (32,0) 它们的平方平方大小分别是1025和1024。求平方根产量 32.01562118716424 and 32.0 但是在16位浮点数中,这两个都被截断为32.0。 同样,最小的2对产生32位表示形式的假阳性 (1659,1220) and (1951,659) …

7
找到最大的操作
挑战在于使用基本算术运算符(加法,减法,乘法,一元负数)从整数列表中找到最大数目 输入值 整数列表 输出量 使用 intput中的每个整数的最大结果。 输入顺序无关紧要,结果应该相同。 您不需要输出完整的操作,只需输出结果即可。 例子 Input : 3 0 1 Output : 4 (3 + 1 + 0) Input : 3 1 1 2 2 Output : 27 ((2+1)*(2+1)*3)) Input : -1 5 0 6 Output : 36 (6 * (5 - (-1)) +0) Input : …

5
提升力量
挑战 挑战是编写一个程序,该程序需要一个正数a和一个非零数b并输出a^b(a升为幂b)。您只能+ - * / abs()用作数学函数/运算符。这些只能应用于标量值,而不能应用于整个列表或数组。 例子: 1.234 ^ 5.678 = 3.29980 4.5 ^ 4.5 = 869.874 4.5 ^-4.5 = 0.00114959 相关:http : //xkcd.com/217/ 细节 您可以编写在控制台中使用的函数或类似构造。如果您不能使用控制台输入,则可以假定两个数字都通过标准输出或写入文件的形式保存在变量和输出中。输出必须正确至少为4个有效数字。您可以假定a和b均为非零值。超过1分钟的运行时间是不可接受的。最少的字节数将获胜。请说明您的程序和算法。 编辑:只需要考虑积极的基础。你可以假设a>0。请注意,两个数字都不必是整数!!!

8
这些矿山永远是实线
让我们创建一个N×N的空格和下划线网格,可用于直观地确定数字是否为质数。(N可以是任何正整数。) 该网格具有三个简单规则: 第n列包含n-1下划线的重复模式,后跟一个空格。此模式从第一行开始,并在第N行停止(可能在中间模式)。(行和列为1索引)。 第一列将替换为所有下划线而不是所有空格。 如果行索引等于列索引的某个位置出现空格,则将其替换为下划线。 示例:N = 10 1 1234567890 <-- column indices 1__________ 2__________ 3__________ 4_ ________ 5__________ 6_ _______ 7__________ 8_ _ ______ 9__ _______ 10_ __ _____ ^ row indices 索引只是为了清楚起见。普通网格本身(程序必须输出的)是: __________ __________ __________ _ ________ __________ _ _______ __________ _ _ ______ __ _______ _ __ …
12 code-golf  primes 

4
Kakuro组合
Kakuro组合 因为我无法进行心理算术,所以我经常会遇到“ Kakuro难题”,这需要受害者反复计算出1到9(含)范围内的不同数字加起来到1到45范围内的另一个数字。有很多数字。例如,如果您可能想知道如何从3个数字中获取23,则唯一的答案是6 + 8 +9。(如果您熟悉此方法,则与Killer Sudoku相同)。 有时您还会有其他信息,例如无法显示数字1 ,因此仅用2个数字就获得8,则只能使用2 + 6和3 + 5(不能使用4 + 4,因为它们是不明显)。另外,也可能是您已经在解决方案中找到3,所以像3中19这样的数字必须是3 + 7 + 9。 您的任务是编写一个程序,该程序以严格的顺序和严格的布局列出给定问题的所有可能解决方案。 输入值 您的解决方案可以通过stdin,命令行参数,函数的参数,堆栈上的值或您喜欢的深奥语言所采用的任何疯狂方式,将输入作为单个ASCII字符串接收。字符串形式为 number_to_achieve number_of_numbers_required list_of_rejected_numbers list_of_required_numbers 前两个参数是典型的以10为底的非负非零整数,分别在1到45和1到9的范围内(使用小数点将是无效的输入),这两个列表只是数字串在一起而在没有重复的特定顺序,如果为空列表则为'0'。列表之间不能有共享数字(0除外)。分隔符是单个空格。 输出量 您的输出必须以包含可能的解决方案数量的一行开头。您的程序必须打印出以换行符分隔的解决方案,这些解决方案按每个递增的有效数字进行排序,其中每个数字都位于您列出从1到9的数字的位置。下面的示例有望使这一点更加清楚。 如果提供了无效的输入,我不在乎您的程序会做什么,尽管我希望它不会将引导扇区清零。 例子 对于此示例输入 19 3 0 0 预期的输出将是 5 2 89 3 7 9 4 6 9 4 78 56 8 …

1
我需要多少时间才能解锁Android手机?
情境 我正在使用模式匹配锁屏,可惜我忘记了我的模式。我想知道解锁需要多少时间。以下是我们将用于此挑战的Google锁定屏幕的规格。 每输入5个错误的代码,用户都必须等待30 seconds进一步的输入。 模式必须至少包含在内4 points(请参见下文) 一个点只能使用一次,但是您可以多次使用它(请参见下图): 在这里,即使我们再次针对该特定模式再次使用中心点,它也只会使用一次。 假设与事实 我们假设我们是超级英雄,并且可以在中绘制任何图案1 second,我们永远不需要吃饭或睡觉。是的,我们是超人。 我是一个非常不幸的人。“最坏的情况”是我的日常生活,因此我最后尝试的模式将是正确的模式。 我们必须要撒些什么? 对于不知道的人,Android(现在还有其他手机)提供了通过在9点矩阵上绘制图案来解锁手机的功能。这个矩阵可以描述如下: C(A) M(B) C(C) M(D) X(E) M(F) C(G) M(H) C(I) C代表“角点” M为“中间点” X为“中心点” 我给这些要点添加了标识符以使其更容易 允许的直接连接如下: 拐角点: 中点: 中心点 : 但是,正如steveverrill指出的那样,“一旦使用了中心(因此无法使用),则左下角和右上角之间的直接连接就变得明确无误,因此是可能的”。每个“中间点”都一样,例如,如果已经计算了点B,则可以在A和C之间建立直接连接。如果例如已经计算出F,则C和I之间的直接连接是可能的。等等... 规则 挑战的重点是返回多少时间(以人类可读的形式,也就是年/日/月/小时/小时/无论您发现什么时间)来解锁该死的手机。 您无法对可能的有效模式进行硬编码(傻瓜甚至不要使用Google),进行计算(实际上是有趣的部分,不是吗?) 最短的代码胜出 祝好运 !

6
以ASCII编织
想象一下,一个矩形的|字符网格代表织机(经线)上的绷紧线,其他线(纬线)(我们将其表示为-)可以被编织。 这是7×4织机的不织布经线: ||||||| ||||||| ||||||| ||||||| 纬纱有多种编织方法,最简单的是平纹编织。 在平织的第一行中,纬纱从第一个经线开始,然后在第二根线之下,然后在第三根线之上,然后在第四根线之下,依此类推。 第二纬线与第一纬线相同,但向右偏移一个经线,因此它从下面开始,然后翻过来,依此类推。 在我们的7×4织机上,平纹组织如下所示: -|-|-|- |-|-|-| -|-|-|- |-|-|-| 我们可以说,纬越过经描述平纹1时,然后在1点时,后续的每一行移位1串的右端。 可以通过使纬纱经过经纬v次,然后经过u次,随后的每一行向右移动s串来描述广义的编织。(所有值都是整数,s可以为0或负数,u和v必须为非负数。) v = 1,u = 2,s = 2的7×4织布机,一种斜纹编织: -||-||- ||-||-| |-||-|| -||-||- 挑战 您的任务是编写最短的程序(以字节为单位),该程序在给定v,u,s,织机的宽度和高度以及初始偏移的情况下产生条形和虚线的编织图案。 所述初始位移是串在纬纱中的第一行被向右移动(0在上面的例子)的数量。随后的每一行将移动s个以上的字符串。 您的程序应以易于使用的格式(标准输入,函数调用等)接受这6个数字,并将条形和矩形的编织网格输出到标准输出。您可以假设所有输入均有效。(所有值都是整数,宽度和高度必须为正,初始移位可以为任意值。) 例子 宽度= 5,高度= 4,初始位移= 0,v = 1,u = 3,s = -2: -|||- ||-|| -|||- ||-|| 宽度= 5,高度= 4,初始位移= 3,v …

3
将小瓶放在离心机中
这个问题源自reddit用户taho_teg的reddit线程,但已扩展为更通用的“难题”。 您有一台带有24个小孔的离心机,这些小瓶围绕中心轴均匀分布在一个圆周上。如果现在有多个样品瓶并且要启动离心机,则需要确保将它们以平衡的方式放置。您无法平衡的样品瓶数量只有1和23。例如,您可以明显地平衡4,但是您也可以通过将3个样品瓶做成一个“三角形”,并将另外两个样品放在两个相对的位置来平衡5。 目标 您必须编写一个程序来接受离心机的孔数(围绕旋转轴均匀分布在圆周上)作为输入,并输出一系列在离心机中无法平衡的小瓶数量。 您必须进行计算,而不能仅对预先计算的解决方案进行硬编码。 输入和输出必须以某种方式实现,以便不必为调用不同输入的程序而更改程序代码。编写可以通过控制台调用的函数(或您语言中的类似构造)也是可以接受的。 另请注意,如果您的离心机上有6个孔,则可以离心2个和3个样品瓶,但是您不能平衡5个,因为“三角形”和相对的两个在一点上会重叠。另一个示例是对于n = 15,您不能平衡11个样品瓶,可以平衡6和5个样品瓶,但是这些解决方案的组合将重叠(当然,这还不是不可能做到这一点的标准)。 更新资料 似乎有些人不了解给定的示例,因此我在此处制作了一个图形。请简短描述您的算法如何工作以及一些示例输出以进行验证。请包括以下示例: n = 1, 6, 10, 24, 63, 100 = 10^2, 163 (prime), 40320 = 8!, 65536=2^2^2^2^2, 105953 (prime) 请注意40320和65536将产生大量列表,仅指示这些列表的长度可能是一个好主意。 如果您知道一些有趣的数字要添加到该列表中,请告诉我!该算法至少应能工作n = 1'000'000。 输出示例: 这些是一些示例输出-但可能是错误的,因为我只是手动计算它们。 1: 1 2: 1 3: 1,2 4: 1,3 5: 1,2,3,4 6: 1,5 7: 1,2,3,4,5,6 8: …
12 code-golf  math 

6
编写一个看似错误但实际上是正确的排序程序[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 3年前关闭。 编写一个程序,对看起来像有一个或多个错误的数字(或任何类型的元素)向量进行排序,但实际上可以。 代码必须清楚。查看代码的人必须轻松地识别出它是一种排序算法,并且必须轻松地将正确的代码与错误混淆。 (明显的)错误可能导致使代码在语法上或语义上不正确(例如,使程序无法编译/运行,在运行时显示UB),使程序产生不正确的结果,无法终止或不确定。 该代码实际上必须格式正确,并且程序必须在有限的时间内确定性地产生正确的输出。 输入可以在程序中进行硬编码,也可以读取(从用户,文件等)。 输入被认为是有效的,不需要程序来验证输入的正确性。 接受任何排序算法。保持数字的数据结构不必是实际的向量。可以将程序设计为对可变数目的数字或固定数目的数字进行排序(例如,对3个数字进行排序的程序是可以的)。排序是否稳定(请注意:设计为执行稳定排序的程序具有明显的错误,该错误使排序看起来不稳定,但实际上并非错误:该程序实际上进行了稳定排序-是有效的答案)。 您可以调用除第三方工具以外的任何函数(包括排序函数)(除非它们广泛使用,例如boos用于C++,JQuery因为Javascript–可以使用) 指定语言 在代码中注释看起来像错误的部分。 解释该错误看起来像做错了什么。 在扰流盒中解释为什么它实际上不是错误。 这是一次人气竞赛。票数最多的答案胜出。 挑战已经结束。获胜者是@Clueless /codegolf//a/30190/11400,票数为8。感谢所有提交者! 如果您想在获奖者获奖后加入,请随时添加新答案。你们不参加比赛,但我们都希望看到有趣的答案。

2
将JSF ** k转换为普通JS
你们中的许多人已经知道JSF ** k。对于那些不喜欢的人来说,这是一个脚本,基本上可以将任何JavaScript代码变成只使用编写的代码[]()!+。 您的任务是使用您选择的任何语言来构建一个程序,该程序将JSF ** k转换为不混淆的JavaScript。 输入:具有有效JSF ** k代码的字符串。 输出:具有常规JavaScript代码的字符串,该字符串先前已被JSF ** ked以生成输入。 对于此挑战,请考虑仅对JSF ** ked输入字符串一次。 这是一场代码高尔夫竞赛,因此以字节为单位的最短代码获胜。
12 code-golf 

4
为读写英语但不知道ASCII的外星人编码一个字符串
事实证明,有一些遥远的外星人懂英语(并且巧合地在8位计算机体系结构上进行了标准化)。但是他们从未听说过ASCII,甚至字母顺序。 人们相信这些外星人正在从地球上获取信息。然而,他们正在使用数字设备进行操作,该数字设备在没有发送传输时会读取无意义的信息...因此,必须以与周围的噪音区分开来的方式包含信号。 创建了一个新标准,以Arecibo Message使用半素信号长度为模型: 信息交换通用符号编码(USCII) (请参阅:http://uscii.hostilefork.com) 在USCII中,每个代码均来自表示字符的位图,该位图具有素数宽度和素数高度。例如,字母A的5x7表示形式: 01110 10001 10001 10001 11111 10001 10001 产生35位。但是,为了使单个字符的消息从噪音中脱颖而出并且看起来连贯,将字符串嵌入容器格式中,以帮助加强主要因素。选择容器的目的还在于使其易于操作以8位为整数倍的体系结构上的字符串。 使用其容器,上面的“ A”将如下所示: 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 0111010001100011000111111100011000100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111100000 1111111111111111111111111111111111111111 1111111111111111111111111111111111111111 1111111111111111111111111111111111111111 1111111111111111111111111111111111111111 1111111111111111111111111111111111111111 消息的字符首先带有五个纯5x7位图的前缀,并在末尾添加了七个纯5x7位图。(“米”。)然后,每一个都有5个0位附加到末尾以形成偶数40位。 最终,在开头添加了7个全零40位运行,在结尾添加了5个全一40位运行。(“静音”。) 你的任务 您将要编写一个编码器。输入是从键盘键入的常规ASCII字符串。您将使用的位图来自5x7 PIC CPU字体。 (注意:这里很容易为所有有才能的代码高尔夫球手从页面中提取字体,但是如果您想把这些字节放在一起,就可以了。) 输出应为十六进制的打印字符串。 …
12 code-golf  encode 

30
整数的整数平方根[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 2年前关闭。 问题: 在您选择的语言中,编写最短的函数以返回无符号64位整数的平方根的下限。 测试用例: 您的函数必须在所有输入中均能正常工作,但是这里有一些有助于说明这一点: INPUT ⟶ OUTPUT 0 ⟶ 0 1 ⟶ 1 2 ⟶ 1 3 ⟶ 1 4 ⟶ 2 8 ⟶ 2 9 ⟶ 3 15 ⟶ 3 16 ⟶ 4 65535 ⟶ 255 65536 ⟶ 256 18446744073709551615 ⟶ 4294967295 规则: 您可以随意命名函数。(未命名,匿名或lambda函数可以,只要可以调用即可。) 字符计数是此挑战中最重要的,但是运行时也很重要。我敢肯定,您可以使用很少的字符数在O(√n)时间内迭代向上搜索答案,但是O(log(n))时间确实更好(也就是说,假设输入值为n,不是n的位长)。 您可能会想使用纯整数和/或布尔算术来实现该功能。但是,如果您确实要使用浮点计算,那么只要您不调用任何库函数就可以了。因此,简单地说return …

13
剧院座位
任务 一个剧场有10行,标记A,以J从前向后,并且在每行15个席位,编号从1到15从左到右。 该计划使用以下规则选择最佳座位。 规则1:一次预订中的所有座位必须在同一行中,彼此相邻。 规则2:座位必须尽可能靠近前排,然后尽可能靠近左排(最低字母,然后最低数字) 编写一个函数,该函数将所需的票数作为整数输入(n),并在length列表中输出可用的最佳座位n。 您的程序应: 输出-1,如果1>输入或输入> 15 * -1如果没有座位,则输出* 具有B(n)用户可以用来输入所需座位数的功能。 *如果更容易,您可以在列表中输出-1 例子 输入输出 调用B(5)一个新的阵列上应返回[A1, A2, A3, A4, A5] 调用B(2)之后应该然后返回[A6, A7] 调用B(10)之后应该然后返回[B1, B2, ... B9, B10] 调用B(-1)应始终返回-1 Ungolf解决方案Python Theatre = [ [False] * 16 ] * 11 def B(n): if 0 <= n <= 15: for i in range(10): …

19
查找一组字符串的所有明确前缀
为了应对这一挑战,您必须Abbrev以尽可能少的代码来实现Ruby的模块。 挑战 输入将是您的语言作为字符串数组(数组,列表,序列等)所具有的内容。您可以编写函数,也可以在STDIN上接受逗号分隔的单词。 然后,您必须为这些字符串计算一组明确的前缀。这意味着您必须将缩写的哈希值(或映射,对象等)返回到其原始字符串。 “前缀”是原始字符串的子字符串,从字符串的开头开始。例如,“ pref”是单词“ prefix”的前缀。 一个明确的前缀是一个只能意味着一个字。例如,如果您输入的是car,cat,则ca前缀不是明确的,因为它可能表示“ car”或“ cat”。 该规则的例外是单词始终是其自身的前缀。例如,如果输入中有诸如car,carpet,则car:car必须在输出中。 然后,您可以返回哈希/地图/对象/等。从您的函数(或使用您的语言进行等效操作)中,或以key:value形式成对打印到STDOUT中f:foo,fo:foo,...。(如果键/值对使您的代码更短,也可以将它们分隔开。) 测试用例 Input code,golf,going Output c:code,co:code,cod:code,code:code,gol:golf,golf:golf,goi:going,goin:going,going:going Input pie Output p:pie,pi:pie,pie:pie Input pie,pier,pierre Output pie:pie,pier:pier,pierr:pierre,pierre:pierre Input a,dog Output a:a,d:dog,do:dog,dog:dog 规则 输入将不包含重复的元素。 您的输出可以是任何顺序;您不必对其进行排序。 您可能不使用内置Abbrev模块/函数/ Ruby之类的东西。 这是代码高尔夫球,因此最短的代码(以字节为单位)将获胜!
12 code-golf 

2
中国跳棋动作最长
在中文跳棋中,一件作品可以通过跳到其他任何一件作品上或通过进行一系列这样的跳跃来移动。您的任务是找到可能的最长跳数序列​​。 输入值 121个零或一的序列,每个零代表一个在板上的位置。零表示该地点为空;一个表示该位置已被占用。位置从左到右列出;从上到下。例如,输入这种设置将 1011110011000001000000000000000000000000100000000001000000000000000000000000000001000000000000000000000001000001100111111 说明: 最上面的位置被一块绿色占据,因此输入中的第一位是1。第二行有一个空位置,然后有一个占用位置,所以01接下来是。第三行已全部占用,因此111。第四行有两个空白和两个占用的空间(从左到右),所以0011。然后是下一行的五个0,一个1和七个0,依此类推。 就像在该设置中一样,有一个角指向上。板上可以有任意数量的部件(从1到121)。请注意,不同颜色的块表示方式不同。 输出量 合法跳的最大长度,使用板上的任何一块。您可能不能多次访问同一个地方(包括起点和终点)。但是,您可能会多次跳过同一块。如果没有合法的跃点,则输出0。不要考虑是否存在合法的非跳跃动作。 例如,上述设置的输出为3。 输入和输出可以通过stdin和stdout,命令行参数,函数调用或任何类似方法来完成。 测试用例 输入: 0100000010000000000000000100000000000000000000000000000001010010000000000000000000000101000000000000000000100000000100001 输出:(0没有两个相邻的部分) 输入: 0000000000111100000000011100000000011000000000100000000000000000000000000000000000000000000000000000000000000000000000000 输出:(1在左上角为一名玩家设置的初始设置)

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.