编程拼图和代码高尔夫

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

5
夺旗
这是一款夺取旗帜的游戏,灵感来源于Red vs. Blue-Pixel Team Battlebots。这是一个了不起的问题(非常感谢Calvin的爱好;我希望您不要介意我无耻地偷了您的很多代码)-这是另一支基于团队的“国王”。希望夺取旗帜将需要更多的团队合作以及更多的战略。 混淆起来,如果您ID的最后一位数字介于0和之间,则您将被视为红色团队4。如果相同的人决定回答,那么这应该防止完全相同的团队再次作战。董事会350px由350px。蓝队从董事会的上半部分开始,红队从董事会的下半部分开始。 您打旗的方式如下:游戏的目的是拿下对方球队的旗帜,并把它带回到自己的身边。如果您站在他们一边,您可以被标记并送进监狱。如果您在监狱里,那么您将无法动弹。如果您站在一边,您的工作就是标记相对的团队成员,将他们送进监狱。摆脱监狱的唯一方法是让您团队中可以自由标记所有人入狱的某人。(请注意,监狱位于对面球队的一侧)。 特别: 有一个常量- FIELD_PADDING设置为20。这是该字段的填充。如果为零,则标记和监禁将完全位于画布的角上。由于不是,因此旗帜和监狱距离角落只有20个像素。 蓝旗(记住:蓝队在上半部分)位于(WIDTH - FIELD_PADDING, FIELD_PADDING) = (330, 20)即右上角。 红旗在 (FIELD_PADDING, HEIGHT - FIELD_PADDING) = (20, 330) 蓝色监狱(保留红色成员的监狱)在(20, 20)蓝色侧,左上方。 保留蓝色成员的红色监狱在 (330, 330) 每个团队成员从一个位置随机开始45 < x < 305,45 < y < 175以蓝色和175 < y < 305红色开始。任何团队成员都不得进入DEFENSE_RADIUS = 25自己的旗帜或监禁的像素范围内(当然,除非您自己的旗帜是由相反的机器人获取的,在这种情况下,您需要标记该机器人)。这是为了防止像机器人一样保护小狗。如果您在该范围内,则将您“推”回去。同样,任何团队成员都不能超出范围(小于零或大于350)-如果这样做,则将您推回到可能的最近合法位置。 每次移动时,您都会用尽strength。您的strength起点始于每20步2都得到补充。您使用的力量等于您行进的距离。如果您的力量会因为移动到某个位置而变得消极,那么您将无法采取这种行动。尽可能快地2进行常规追赶可能是一个好主意。仅在您接近获胜并且需要额外速度时(我认为),才应使用较高的速度。 规格: 规格与Pixel Team Battlebots问题非常相似。您应该在javascript中编写代码块(请记住,没有全局变量)。它应该返回一个带有x-value和y-value …

7
线上的分形点
有时候,当我真的很无聊时,我喜欢画线段并在其上画点。 首先,我绘制一个特定大小的线段,对于某些N值,该线段为2 ^ N。该线将由一系列.字符表示。 ................ 然后,在左端绘制一个点。点将用X字符表示。 X............... 然后,我遵循一个模式。从最近绘制的点(我将其称为A)开始,前进到直线上的下一个绘制的点(B)(必要时环绕)。然后,我前进到线(C)上的下一个绘制点。然后,我在第三个点(C)和下一个已经绘制的点(D)之间绘制了一个新点。 每当绕线时,“中间”都是以绕线方式确定的。新绘制的点始终在C的右侧。 假设下一行是我的当前行。这是我如何绘制接下来的两点。在此示例中,我将用字母标记每个重要点。 X...A...X.X...X. ^ X...A...B.X...X. ^ X...A...B.C...X. ^ X...A...B.C...D. ^ X...X...X.X.A.X. ^ X...X...X.X.A.B. ^ C...X...X.X.A.B. ^ C...D...X.X.A.B. ^ X.A.X...X.X.X.X. ^ 返回上一个示例,下一点将绘制在该线的中间。 X.......X....... 这可能是一个特例:前进到下一个点只会使您离开起点。唯一有用的中点是“循环”中点(直线上的中点),与在其顶部绘制点相反。 以下是我从此处到末端在线上绘制的一系列点。 X.......X....... X.......X...X... X.......X.X.X... X...X...X.X.X... X...X...X.XXX... X.X.X...X.XXX... X.X.X...XXXXX... 不再有绘制下一个点的空间,因为它必须被楔入两个相邻点之间,因此对于给定的N = 4,我已经达到了最大深度。上面列表中的最后一行是“完成。” 挑战 目的是编写最短的程序/命名函数,以给定值N打印/返回完成的行。上面显示N = 4。 输入值 输入将是单个非负整数N。然后,生成的行的长度将为2 ^ N。 …
12 code-golf 

2
在x86程序集中计算数量级的最快方法
任务很简单:编写汇编程序,使用尽可能少的时钟周期来计算整数的数量级。 数量级定义为log10,不是log2。 有效输入的范围是0到(包括)。未定义超出该范围的输入行为。1012 值应四舍五入为最接近的整数,但给定输入0的输出应为0。(您可以认为这是无符号整数中负无穷大的最佳表示形式)。 必须是x86汇编。 该整数必须是运行时值,而不是静态/内联整数。因此,我们在编译时不知道它是什么。 假设您已经将一个整数加载到寄存器中。(但为了清楚起见,请在答案中包括在寄存器中设置值)。 无法调用任何外部库或函数。 免费使用英特尔文档中的任何可用说明。 没有C 可接受〜7种Intel Core架构中的任何一种(在第10页上列出)。理想情况下为Nehalem(Intel Core i7)。 胜出的答案是使用尽可能少的时钟周期的答案。也就是说,它每秒可以进行最多的操作。大概的时钟周期摘要在这里:http : //www.agner.org/optimize/instruction_tables.pdf。发布答案后,可能会计算时钟周期。

1
我是否正确进行代码搜寻?
我很好奇我是否正确打高尔夫。我为自己提出了一个挑战,那就是如何在Python中将小型哈希程序编写为单个语句。我首先开始: from itertools import permutations from string import ascii_lowercase from random import sample def test(): chars = sample(ascii_lowercase, 9) sums = list(map(h, permutations(chars))) if len(set(sums)) == len(sums): print("unique results for permutations of given string") else: print("duplicate entries present in test results") def h(s): r = 0 for i in range(len(s)): …
12 code-golf  tips  python 

8
水气球大战
该“山上之王”游戏是一种策略游戏,您必须在其中扔水气球,并避免被水溅到。目标是获得最多的积分。您将得到一张野外图和水气球的位置。您可以返回要在某个方向上击打水气球(如果距离足够近)或要在某个方向上移动。 具体来说:水气球将从(0, 0)30个单位的高度开始下降。如果水气球撞到地面,将随机选择一名选手输掉4点,并向靠近气球的人分配更多的重量。此外,最后一次击中气球的玩家将获得3分。因此,如果您直接向下击气球,您很可能会损失1分。 您将编写一个扩展类Player。您需要实现构造函数。构造函数如下所示: public Player1() { super(/* Some numbers */ 3, 3, 4) } 这些数字是doubles。第一个数字代表玩家的速度,第二个数字代表力量,第三个数字代表运气。这些数字的总和不得超过10,并且任何数字都不得小于或等于零。 其次,您必须实现该move方法。这是一个示例move方法: @Override protected Action move(Map<Player, Point2D> map, Balloon b) { // Get my own location Point2D myself = map.get(this); // If I'm close enough to the balloon // then hit the balloon if (myself.distanceSq(b.getLocation()) …

2
建立一个采矿机器人
您的程序将控制采矿机器人在地下搜索有价值的矿物。您的机器人会告诉控制器您要移动和挖掘的位置,控制器将提供有关机器人状态的反馈。 最初,将为您的机器人提供矿山的图像图,其中已经存在一些矿井,以及一个数据文件,用于指定矿山中矿物的值和硬度。然后,您的机器人将在轴中移动,以寻找有价值的矿物质。您的机器人可以挖土,但会因坚硬的岩石而减速。 24小时轮班后返回最有价值货物的机器人将成为赢家。这似乎是一个复杂的挑战,但制造基本的采矿机器人很简单(请参阅下面的示例采矿机器人答案)。 运作方式 控制器将使用矿井图像,矿物数据和设备文件名启动您的程序。机器人可以使用矿山图像和矿物数据找到有价值的矿石并避开坚硬的岩石。机器人可能还想从设备列表中购买设备。 例如: python driller.py mineimage.png minerals.txt equipmentlist.txt 在2秒钟的初始化时间后,控制器通过stdin和stdout与机器人程序通信。机器人必须在收到状态消息后的0.1秒内做出响应。 每转一圈,控制器就会向机器人发送一条状态行: timeleft cargo battery cutter x y direction 例如: 1087 4505 34.65 88.04 261 355 right 整数timeleft是班次结束前剩下的游戏秒数。在 cargo如此远不如你付出什么设备已开采矿物的整数值。该battery级别是你的电池剩余电量的整数百分比。的cutter整数水平是切割器作为标准值的百分比的当前锐度。的x和y值与在(0,0)从左上角引用的机器人位置的正整数。方向是机器人当前面对的方向(左,右,上,下)。 当您的机器人收到“ endshift”或“ failed”输入时,您的程序将很快终止。您可能希望机器人将调试/性能数据首先写入文件。 控制器将接受4种可能的命令。direction left|right|up|down会将您的机器人指向该方向,并需要15个游戏秒。move <integer>会指示您的机器人向前移动或挖掘很多单位,这取决于切割的矿物的硬度和刀具的锋利度(请参见下文),需要一些时间。buy <equipment>将安装指定的设备并从您的货物价值中扣除成本,但前提是机器人位于水面(y值<= y的起始值)。设备安装需要300游戏秒。特殊命令snapshot将当前的地雷映像写入磁盘,并且不占用游戏时间。您可以使用快照来调试机器人或创建动画。 您的机器人将以100电池和100切割器清晰度启动。移动和转动会消耗少量电池电量。挖掘的用途更多,并且取决于矿物的硬度和刀具的当前清晰度。当您的机器人挖掘矿物时,切割机将失去锐度,这取决于所花费的时间和矿物的硬度。如果您的机器人有足够的货物价值,它可能会返回地面以购买新的电池或刀具。请注意,高质量的设备的初始有效性超过100%。电池的名称中包含字符串“ battery”,切割器的名称中包含“ cutter”(惊奇)。 以下关系定义了移动和切割: timecutting = sum(hardness of pixels cut) * 100 …

14
无复杂性的Kolmogorov(-Smirnov)
在统计中,有时了解两个数据样本是否来自相同的基础分布很有用。一种实现方法是使用两个样本的Kolmogorov-Smirnov检验。 您的任务是编写一个程序,该程序读取两个未排序的非负整数数组,并计算测试中使用的主要统计量。 给定一个数组A和一个实数x,定义分布函数F为 F(A,x) = (#number of elements in A less than or equal to x)/(#number of elements in A) 给定两个数组A1和A2,定义 D(x) = |F(A1, x) - F(A2, x)| 两次抽样的Kolmogorov-Smirnov统计量是D全部real 的最大值x。 例 A1 = [1, 2, 1, 4, 3, 6] A2 = [3, 4, 5, 4] 然后: D(1) = |2/6 - …

25
每日#2随机高尔夫:来自正态分布的数字
关于系列 首先,您可以像对待其他任何代码高尔夫挑战赛一样对待它,并回答它,而无需担心系列赛。但是,在所有挑战中都有排行榜。您可以在第一篇文章中找到排行榜以及有关该系列的更多信息。 尽管我对该系列有很多想法,但是未来的挑战还没有定下来。如果您有任何建议,请在相关的沙箱帖子上让我知道。 漏洞2:来自正态分布的数字 我不敢相信这还没有完成!您将根据正态分布生成随机数。一些规则(大多数提交可能会自动覆盖其中的大多数规则,但其中一些规则已经到位,以确保多种语言之间的结果一致): 您应该将两个非负整数用作输入:种子S和N要返回的数字量。输出应该是N从均值0和方差1的正态分布中得出的浮点数列表。只要您提交的文件具有相同的种子,S它就会产生相同的编号。特别地,如果它被称为一次与次,用中,第一两个输出中的条目应该是相同的。另外,至少2 16个不同的值应产生不同的序列。(S, N1)(S, N2)min(N1, N2)S 您可以使用任何记录在案的内置随机数生成器,从(近似)均匀分布中提取数字,前提是您可以S继续使用它,并且它支持至少2 16种不同的种子。如果这样做,RNG应该能够为您从中请求的任何给定数字返回至少2 20个不同的值。 如果您的可用统一的RNG有一个较小的范围内,是不是seedable,或支持太少种子,您必须先建立一个统一的RNG具有足够大的范围上的顶部内置一个或您必须实现自己的合适的RNG使用种子。此页面可能对此有所帮助。 如果您没有实现生成正态分布的既定算法,请提供正确性证明。无论哪种情况,您选择的算法都必须产生理论上精确的正态分布(除非存在基础PRNG或有限精度数据类型的限制)。 您的实现应使用并返回浮点数(至少32位宽)或定点数(至少24位宽),并且所有算术运算都应使用所选类型的全部宽度。 您不得使用任何与正态分布或高斯积分直接相关的内置函数,例如误差函数或其反函数。 您可以编写完整的程序或函数,并通过STDIN,命令行参数,函数参数或提示接受输入,并通过返回值或通过打印到STDOUT(或最接近的替代方法)产生输出。 S并且N将是非负整数,每个整数均小于2 20。输出可以采用任何方便,明确的列表或字符串格式。 这是代码高尔夫球,因此最短的提交(以字节为单位)获胜。当然,每位用户最短的提交时间也将进入该系列的整体排行榜。 排行榜 该系列的第一篇文章将产生一个排行榜。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头每个答案: # Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,可以将旧分数保留在标题中,方法是将它们打掉。例如: # Ruby, <s>104</s> <s>101</s> 96 bytes (目前未显示该语言,但是该代码段确实需要并对其进行解析,并且将来我可能会添加一个语言排行榜。)

9
配对高尔夫双素数和Collat​​z序列
这是受到恢复变异的源代码问题启发的一种新挑战。 您应该用相同的语言编写两个程序或函数。第一个应解决任务1,第二个应解决任务2。 您的分数将是较长程序与两个程序源代码之间的Levenshtein距离的总和。分数越低越好,因此您应尝试使两个解决方案相似,同时保持程序长度短。 任务1 您将得到一个正整数N,你应该输出在Collat​​z序列的N用空格或换行分隔。允许使用尾随分隔符。 Collat​​z序列的第一个元素是N。其余元素基于其后继:一个i − 1一个一世-1个a_{i-1} 一个一世= { 一i − 123 个i − 1+ 1 如果 一个i − 1 甚至 如果 一个i − 1 很奇怪一个一世={一个一世-1个2 如果 一个一世-1个 甚至3一个一世-1个+1个 如果 一个一世-1个 很奇怪 a_i = \begin{cases} \frac{a_{i-1}}{2} & \text{ if } a_{i-1} \text{ is even} \\ 3a_{i-1} + 1 & …

2
逻辑点形状
游戏 最近,我的大部分时间都花在了手机上的一个令人上瘾的游戏中,名为Logic Dots,这激发了我编写这一挑战的灵感。如果我向您展示游戏画面,则更容易解释这些规则,因此以下是未解决且已解决的难题的屏幕截图: 现在,这里要注意三件事。 游戏板(中心的4x4正方形网格) 所需的形状(从顶部开始,在第二个栏中的链接点,在乐谱和菜单下等)均为全线,或者a由1个矩形组成 行和列上的数字,表示解决方案中列中需要多少个点 游戏的目的是使所需的形状适合网格。您可以旋转形状,但不能斜入。 在解决方案中,请注意,所有形状仅创建一次(因为它们仅在所需的形状中创建一次),在这种情况下,它们都是水平的,但也可以是垂直的。正方形中的粉红色表示未使用的正方形。 这是一个更大,稍微更复杂的网格: 请注意,在未解决的难题中,已经有一些正方形填满。灰色的正方形表示您不能在其上放置点的被遮盖的正方形。带有尾巴的点告诉您该点处有一个点,并且它在尾巴的方向上链接了至少一个点,但在任何其他方向(包括相反的方向)上都没有链接。 符号 对于本文的其余部分,我将使用以下符号来指代董事会: <,>,^,v-表示一个预先放置的点,其尾部沿点的方向延伸 *-表示一个点。如果在未解决的网格(输入)上给出,则它是单个形状。如果是输出,则将其连接到其周围的点。 #-表示被遮挡的网格正方形(您不能在其中放置点) -,| (连字符和横线)-分别表示一个带有左右尾巴的点和一个带有上下尾巴的点 **(空格字符)-**表示空白 使用这些符号,后一种示例情况(未解决)可以表示为: < # ^ # 解决方案可以表示为: *< * * * * * * * *#* ^ # * 请注意,没有两个形状可以水平,垂直或对角线接触,因此以下情况无效: *** ** ** 挑战 您面临的挑战是解决从4x4到9x9的所有逻辑点难题。您将收到四行输入,然后是游戏板。这些行将如下所示: 第一行,形状-要查找的形状,每个形状均以表格形式给出sizexquantity(例如,3x2对于长度为三的两个形状),并以空格分隔。示例行:3x1 2x1 1x1 第二行,列-每列所需的点数的空格分隔列表。示例行:1 1 2 2 …

5
有多少种方法将N写入M个整数?
给定一个整数N,计算将其表示为M个整数> 1 的乘积的多少种方式。 输入只是N和M,输出是不同整数组的总数。意味着您可以多次使用整数,但是每个组必须是不同的(3 x 2 x 2如果2 x 2 x 3存在,则不计算在内)。 约束条件 1 < N <2 31 1 < M <30 例子 输入可以30 2给出输出3,因为它可以用三种方式表示: 2 x 15 3 x 10 5 x 6 Input 16 3提供output 1,因为只有一个不同的组: 2 x 2 x 4 输入2310 4给出输出10: 5 x 6 x 7 …

4
H树目录
程序员经常沉迷于绘制分形。我认为我们需要一种新的基于计算机的介质。 的ħ树是一个相当简单的类型的分形制成的水平线和垂直线。这是第十次迭代(由Wikipedia提供): 现在,假设图像中的每一行都是标准计算机文件系统中的目录(文件夹)。除最小的线外,所有线都相交于比自己小的两条线。这两条较小的线是较大线的子目录。因此,中间的大水平线是两条最大的垂直线的父目录,这两个垂直线又是图像中其余线的父级,祖父母等。 挑战 编写一个程序,该程序通过stdin或命令行(或最接近的替代方案)接收一个正整数N,并创建一个目录树,该目录树反映了H树形的第N次迭代。 第一次迭代(N = 1)是一条水平线。在每个后续迭代中,将一组新的垂直线或水平线添加到当前线的末端。因此,对于N = 2,添加两条垂直线(形成H形),对于N = 3,添加四条水平线,依此类推。 根目录的名称必须始终为tree。子目录的名称必须是它们相对于它们的父行,使用方向一致right,left,up和down。 由于根目录始终是一条水平线,因此它将始终具有right和left子目录。但是,这两个会up和down子目录,以及那些将right和left再次,等等。 迭代限制末尾的目录应该为空。 例 对于N = 3,目录树应如下所示: tree right up down left up down 附加信息 理想情况下,该tree目录将弹出源代码所在的文件夹,但是如果转到某个工作目录也可以。 您可能会假设tree您将在其中创建目录的地方没有预先存在的目录。 您可能会假设您的程序将始终在相同的常见现代操作系统(Mac / Windows / Linux)上运行。基本上不必担心使用并非在所有操作系统上都起作用的文件分隔符。 计分 这是代码高尔夫球,因此以字节为单位的最短代码获胜。

1
编写代码滑动拼图!
最可识别的滑动拼图是十五个拼图。它具有4 x 4网格,15个图块和一个空白网格空间。磁贴只能移动到空白区域,并且必须始终与网格对齐。 让我们定义一个广义的滑动拼图,它是一个二维的W宽度,高为H个高网格(W,H均为正整数),其中包含一些相同的未标记图块(在0到W × H之间),对齐到网格,排列为任何方式(不重叠),用空的网格空间填充其余区域。 例如,如果W和H为3,并且图块为T,并且空白处E为许多可能的侧板拼图布置之一,则 TTT TET EET 对于这些难题,有4种可能的举动:将所有事物推高,将所有事物推低,将所有事物推向左侧或将所有事物推向正确。沿某个方向“平移”会使所有图块尽可能沿该方向移动,直到它们碰到另一个图块或网格边界为止。有时推不会改变网格的布局, 如果将示例网格向右推,则结果为 TTT ETT EET 向左推的结果是 TTT TTE TEE 推倒结果是 EET TET TTT (请注意,最左边T的都已移动) 在这种情况下,推挤不会改变网格布局。 请注意,由于图块是无法区分的,因此这些难题没有“已解决”状态。还要注意,难题可能始于一旦做出推就不可能回到的布局(例如,在3 x 3网格中间的一个图块)。 挑战 仅使用可打印的ASCII编写两个矩形代码块,宽度均为M个字符,高度为N个字符(对于任何正整数M,N)。一个代码块将代表一个滑动拼图块,另一个代码块将代表一个空的网格空间。 将这两个代码块排列成W by H网格将创建一个代码表示的滑动拼图,该拼图可以保存为文本文件并作为常规程序运行。在运行时,此类程序应通过stdin提示用户输入1到4之间的数字;1表示向上,2表示向下,3表示左侧,4表示右侧。当用户键入他们的编号并按回车键时,程序将计算如何向该方向推其源代码图块,并将新的拼图布局保存到文件(新文件或同一文件)中,然后终止。 每次推后生成的新的滑动拼图代码文件都可以无限期地重复此过程。 例 假设我的图块代码块看起来像这样 // my // tile 我的空网格空间代码块看起来像这样 //empty //space (M = 7,N = 2,这当然不是实际代码) 这两个模块的任何有效的滑动拼图布置都应该以我使用的语言创建一个程序,该程序可以运行以使用户朝某个方向推。 示例网格的代码表示为: …

1
打高尔夫球用不同的语言的一些奎尼条纹
您将选择m种语言,并用每种语言编写n个程序,每个程序的长度为n * m。第k个程序应按程序号输出每个程序的第k个字符。 例如,在此提交中(仅用于演示;它们可以是任何字符,包括换行符和制表符): ABC DEF GHI 计划ABC应输出ADG,以及程序DEF和GHI应该输出BEH和CFI分别。 列表中的所有程序都不能是普通的quine。因此ABC,ADG必须有所不同。其他两个程序也一样。注意,n * m必须至少为2才能使之成为可能。 您不必按特定顺序使用语言。因此,您可以用语言A写两个程序,然后用语言B写三个程序,然后再用语言A写另一个程序。但是所有语言必须使用完全相同的次数。 程序和输出中的前导/尾随换行符无关紧要。 最低n(m + 10)/ m 3的答案获胜。但是,如果大多数语言使用了至少3种语言,我还将奖励至少+100悬赏。赏金截止日期:一周没有改善或2015年3月1日,如果没有答案满足标准。 语言规则 您可以使用任何具有不同名称的语言或通常被认为足够不同的不同版本(例如Python 2/3,ECMAScript 5/6)。但是您的程序不得以您使用的任何其他语言输出完全相同的东西。

3
最近的分区号
整数的分区数是将整数表示为正整数之和的方式的数目。 例如: 5 4 + 1 3 + 2 3 + 1 + 1 2 + 2 + 1 2 + 1 + 1 + 1 1 + 1 + 1 + 1 + 1 有7种方式表示数字5,因此7是与数字5对应的分区号。 分区编号:OEIS:#A000041 方向 编写一个程序,以正整数作为输入,并输出生成两个最接近输入数字的分区号的两个数字。 输入必须为1个正整数。 如果输入不是分区号,则输出必须是2个不同的正整数,它们生成与输入号最接近的两个分区号。(如果两个分区号是其中一个输出号的相等候选者,那么选择哪个分区都没关系。) 如果输入是分区号,则输出必须是1个生成输入号的正整数。 输入和输出可以采用任何合理的格式。 您可以假设输入将不大于1亿(例如,输出将永远不大于95)。 内置函数来计算分区号不容许,与其他一起标准的漏洞。 这是code-golf,因此最少要赢得字节数。 分区编号:OEIS:#A000041 例子 Input: 66 …

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.