编程拼图和代码高尔夫

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

3
电脑:数学
这一挑战部分是算法挑战,涉及一些数学运算,部分只是最快的代码挑战。 对于某个正整数n,请考虑一个长度为1s和0s的均匀随机串,n并将其称为A。现在还要考虑第二个统一选择的长度n为或的随机字符串-1,并将其称为。现在,让我们成为+ 。那是串联的。0,1B_preBB_preB_preB_pre 现在考虑Aand 的内积,并从中B[j,...,j+n-1]调用它Z_j和index 1。 任务 输出应为n+1分数列表。的i在输出第术语应该是准确的概率的所有第一i方面Z_j具有j <= i相等0。 得分了 n在我的机器上,您的代码可在10分钟内为您的代码提供最大的正确输出。 决胜局 如果两个答案得分相同,则第一个提交者获胜。 在(非常非常不可能)的事件中,如果有人找到获得无限分的方法,则将接受这种解决方案的第一个有效证明。 暗示 不要尝试用数学方法解决这个问题,这太难了。我认为最好的方法是回到高中的概率的基本定义,并找到巧妙的方法来获取代码以对各种可能性进行详尽的列举。 语言和图书馆 您可以使用任何具有免费编译器/解释器/等的语言。适用于Linux以及任何可免费用于Linux的库。 我的机器 时间将在我的机器上运行。这是在AMD FX-8350八核处理器上的标准ubuntu安装。这也意味着我需要能够运行您的代码。因此,请仅使用易于使用的免费软件,并请提供有关如何编译和运行代码的完整说明。 一些测试输出。考虑每个的第一个输出n。那是什么时候i=1。对于n1到13,它们应该是。 1: 4/6 2: 18/36 3: 88/216 4: 454/1296 5: 2424/7776 6: 13236/46656 7: 73392/279936 8: 411462/1679616 9: 2325976/10077696 10: 13233628/60466176 11: 75682512/362797056 12: 434662684/2176782336 13: 2505229744/13060694016 您也可以i=1在http://oeis.org/A081671上找到其通用公式。 …

9
简短的绘图程序
您刚刚邀请了文科专业到您家,您正在告诉他/她 “你知道,我是一个很棒的程序员,我可以做x和y和z ...” 他/他很快就感到无聊,并问您: “如果您真的是一个伟大的程序员,可以编写一个程序让我画图,我只需要使用鼠标在屏幕上画线,并以任何方式选择不同的颜色即可。” 您的代码可能会导入标准库。您的代码可能要求通过键盘选择颜色。 这是代码高尔夫球;最短的代码胜出。 项目符号要点 通过在按住鼠标左键的同时四处移动鼠标来绘制线条。 不需要布雷森汉姆的直线算法,任何内置算法都可以解决问题 如果用户可以通过任何方式更改线的粗细,则可以获得* 0.8的奖励,但这不是强制性的。 我想自己实现线条画应该更好,但是如果您愿意,可以导入一个库,只需在代码描述中说明即可。 最小值为5种不同的颜色(红色,绿色,蓝色,白色,黑色)。如果您随机更改它们,则会得到* 1.2的罚款。您可以根据需要进行更改(按钮和按键都可以)。 最好将它们按在点或徒手画之间进行鼠标绘制(即,就像您在绘画中所做的那样),并为您提供* 0.7的奖励,但任何其他方法都可以:(例如)单击两个点并在这些点之间绘制一条线? 绘图画布必须为600x400 更改颜色应该只更改将来要绘制的线条的颜色。 强制执行“全部清除”命令不是强制性的,但如果您实施该命令,则将获得* 0.9奖励。

3
四色定理
在四色定理的国家不超过四种颜色需要颜色的地图的区域。 挑战 给定一个州边界列表,为每个州ID分配一种颜色,以便没有两个相邻州具有相同的颜色。输出应为CSS样式表,将颜色分配给该州的2个字母的ID代码。这是可以应用于样式表的SVG映射。http://upload.wikimedia.org/wikipedia/commons/3/32/Blank_US_Map.svg 规则 最短代码胜出 可以使用任何州边界列表 只能使用4种颜色。 状态列表可以硬编码 建议:使用CSS fill:属性更改颜色,例如#AL{fill:green} 这是国家边界的清单 AL-FL AL-GA AL-MS AL-TN AR-LA AR-MO AR-MS AR-OK AR-TN AR-TX AZ-CA AZ-CO AZ-NM AZ-NV AZ-UT CA-NV CA-OR CO-KS CO-NE CO-NM CO-OK CO-UT CO-WY CT-MA CT-NY CT-RI DC-MD DC-VA DE-MD DE-NJ DE-PA FL-GA GA-NC GA-SC GA-TN IA-MN IA-MO IA-NE IA-SD …

9
在荒岛上寻宝
介绍 您和一些仆人一起被困在荒凉的岛屿上,正在寻找宝藏。搜索时间越长,发现的宝藏越多。搜索的人越少,找到的人就越多。 由于物资有限,这位领导人决定每晚减少几个人,最多占四分之一。他决定不提前告诉任何人确切的死亡人数。 您控制着一个由5人组成的小组,他们将冒险逃出营地为您寻找宝藏。 目的 这项比赛的目的是积累尽可能多的财富。您的仆人每一次不尝试返回营地的回合,都会发现一定数量的宝藏。您的仆人可能会在不同时间返回营地。 工人停留在每一个转弯寻找宝藏的时候,工人都会发现1+R宝藏,这R是已经回到营地的工人人数(在所有机器人中)。僵尸程序不计入此计算。 在每天开始时,将选择一个n从2到的随机数()max(3, floor(num_live_players/4))。(对于10名选手的第1天,这是2对max(3,50/4)=12。对于20名球员,第1天,这将是2对max(3,100/4)=25。)这个数字代表的球员谁将会留下来的那一天死亡的人数,并且不会给你的程序。 如果仆人是最后n归还的人之一,他/她将死去并且无法将他/她发现的宝藏转移给您。此外,在接下来的冒险中,仆人将无法参加寻宝活动。 您的最终分数是每次冒险(控制者的奔跑)获得的平均宝藏量。 如果尝试在同一转弯返回营地的人多于空位,则随机数将确定谁进入和死亡。 从日出到日落,这个岛上的一天持续30转。由于夜间有许多危险的动物,因此日落之前无法归还意味着您将无法进入营地。 输入输出 您的程序应在整个模拟过程中运行。 在仿真开始时,INDEX I将输入Ibot的索引(该索引从1开始计算)。 在每天的开始,START_DAY D/N将输入到您的程序中,其中D是天数(从开始1),并且N等于max(3, floor(num_live_players/4)),这是该天可能死亡的最大人数。 每次转弯开始时,START_TURN T都会输入到您的程序中,T转弯编号(从开始1)在哪里。 程序收到此消息后,它将以仆人的动作列表作为响应,每个动作用逗号隔开。 有效的动作是: R:尝试返回营地。 S:继续寻找宝藏。 N:仆人已经死亡或在营地。 输入无效的举动将被解释S为该机器人还活着并且不在营地内,N否则。 在每个回合结束时,将一个字符串传递给您的程序: END_TURN [Turn #] [Bot 1 Moves] [Bot 2 Moves] ... 每个漫游器的仆人动作都以逗号分隔。 这些举动将是以下之一: R:成功返回该回合的营地。 r:未能返回该回合的营地。 S:仍在寻找宝藏。 D:死于较早的回合。 N:已经回到营地了。 在整个模拟过程中,机器人和仆人保持相同的顺序。 例如: INDEX 2 …

11
科赫雪花的图形表示
产生科赫雪花 科赫雪花是一个三角形,每个三角形n的每一边中间都添加了另一个等边点:http : //en.wikipedia.org/wiki/Koch_snowflake#Properties 我们已经有一个kolmogrov复杂 科赫雪花的挑战的n=4。新的挑战是绘制n介于1和之间的任何Koch雪花10。 规则 雪花可能未在程序或文件中进行硬编码-它们必须由您的程序生成。 您的程序必须支持n1到10之间的所有大小。 边数必须由用户通过std-in输入。 您必须在屏幕上打印雪花的图形表示。 n等于,1、2、3和4的样本科赫雪花(绿线仅是为了清楚起见,请勿复制它们): 如果出现决胜局,具有最高投票数的程序将获胜(流行比赛)。

2
图上的张力,第二部分:橡皮筋
这是有关“拉紧功能”的两个挑战中的第二个挑战。这是稍微简单的第一部分。 让我们在位置(x 1,y 1)至(x m,y m)上将m钉子钉入板中。将橡皮筋绑在第一个和最后一个上,并在其他钉子周围伸展,使橡皮筋依次穿过所有钉子。请注意,橡皮筋现在描述了二维空间中的分段线性参数化函数(x(t),y(t))。 现在在位置(x 1,y 1)至(x n,y n)处将另外n个钉子钉入板中。如果现在我们除去所有第一个和最后一个钉子(橡胶的末端绑在这两个钉子上)之外的所有m个钉子,橡皮筋将缩短,直到其紧紧缠绕在新钉子上,从而产生另一个分段线性函数。 作为一个例子,取M = 12条初始钉在位置(0,0),(2,-1),(3/2,4/3),(7/2,1/3),(11/2, 16/3),(1、16 / 3),(0、1),(7,-2),(3、4),(8、1),(3,-1),(11、0),并且n = 10个另外的钉子在位置(1、1),(3、1),(4、4),(1、3),(2、2),(5,-1),(5、0 ),(6,2),(7,1),(6,0)。以下三个图显示了上述过程: 对于较大的版本:右键单击->在新选项卡中打开 如果您在可视化时遇到一些困难,这是橡皮筋收紧的动画: 挑战 给定两个“钉子”列表,如果绷紧的橡皮筋从横穿第一个列表中所有钉子的形状开始,则在第二个列表周围绘制绷紧的橡皮筋。 您可以编写程序或函数,并通过STDIN,ARGV或函数参数接受输入。您可以在屏幕上显示结果,也可以将图像保存到文件中。 如果将结果栅格化,则每侧至少需要300像素。最终的橡皮筋和钉子必须至少覆盖图像水平和垂直方向的75%。x和y的长度比例必须相同。您需要在第二组(至少使用3x3像素)中显示钉子,并在字符串中显示至少1像素宽的指甲。您可以包括也可以不包括轴。 颜色是您的选择,但是您至少需要两种可区分的颜色:一种用于背景,一种用于指甲和细绳(尽管这些颜色可能具有不同的颜色)。 您可能会假设第二个列表中的所有钉子都距离橡皮筋的初始形状至少10 -5个单位(这样就不必担心浮点精度了)。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 更多例子 这是另外两个示例: {{1, 1}, {3, 3}, {2, 4}, {1, 3}, {4, 0}, {3, -1}, {2, 0}, {4, 2}} {{2, 1}, …

3
成为流行病学家!
挑战 您必须创建一个简单的模型来说明疾病如何在一群人中传播。 规则与要求 模型必须是1000 x 1000 2D数组,每个元素都是不同的人。 用户必须使用argv输入三个变量:传播的可能性(某人感染他人的可能性),突变的机会以及模拟应运行的周期。 在第一阶段(t=0),应随机选择四个人并感染该疾病。 该疾病的行为方式受以下规则支配: 该疾病只能在水平和垂直方向移动,移动到隔壁的人。 每个人感染持续3次。您可能没有考虑到免疫缺陷。 一个人被感染三遍之后,他们便会免疫,无法再次感染。 该疾病容易发生突变,使以前免疫的人容易感染这种新的突变疾病。变异的疾病具有与原始疾病完全相同的特征,并遵循相同的规则。 如果发生突变,则整个疾病不会改变,仅在传播时改变特定的“小包”即可。 一旦一个人被一种病毒感染,在当前的感染过去之前,他们无法再次被感染。 如果一个人被感染,他们从感染期开始到结束都具有传染性。 没有免疫力的水平-一个人是否免疫。 要停止内存过载,最大限制为800个突变。 在指定的周期数结束时,应输出结果。 结果必须为1000 x 1000的网格,以显示哪些人被感染,哪些人未被感染。可以将其输出为文本文件,图像文件或图形输出(其中#FFFFFF是健康人,而#40FF00是感染人)。 请在您的答案中包括语言名称和运行它的命令。 获奖 在我的计算机上运行的最快的代码胜出。时间将通过以下Python代码来衡量: import time, os start = time.time() os.system(command) end = time.time() print(end-start) 请注意,运行此脚本时,我将使用以下默认值: Probability of transmission = 1 Chance of mutation = 0.01 Number of …

2
人手不足的银行帐户
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 3年前关闭。 您正在为银行担任程序员。 您的任务是编写一个程序来处理从一个银行帐户到另一个银行帐户的交易。 该程序应执行以下操作: 在无限循环中运行,等待输入。 输入由3个数字组成:Accountnumber1,Accountnumber2和x金额。例如999222 777333 500 检查帐号和x是否有效。 如果帐号不相同并且存在于数据库中,并且x大于零,则输入有效。 将钱从帐户1转移到帐户2,但前提是帐户1有足够的钱。 帐户不允许进入负面状态。 如果一切顺利,请打印类似“将x $从number1转移到number2”的内容 如果出现问题(例如,由于帐号无效),请打印错误消息。 如果输入为0,则停止 该数据库包含以下银行帐户: 999222: 10000.56$ 888333: 335.13$ 555222: 56.0$ 222111: 123.55$ 123456: 0.0$ 简单的Python 2示例: account_numbers = ["999222", "888333", "555222", "222111", "123456"] account_money = [10000.56, 335.13, 56.0, 123.55, 0.0] …

8
行号-实现nl
您的任务是实现一个类似于nlGNU核心实用程序中的命令行工具的程序。 禁止出现标准漏洞。 您不得使用任何内置或外部函数,程序或实用程序来对文件或字符串的行进行编号,例如文件nl本身或=GNU sed中的命令。 规格 输入值 该程序接受文件名作为参数。您的代码不必跨平台。应该使用运行代码的操作系统的文件名格式,即,如果您恰巧在Windows上,则目录分隔符可以为\或/。 您必须能够获取64个输入文件,包括-已指定的文件。如果给出的数目超过64,则仅处理前64个。 在文件名列表中,-代表标准输入。 如果给出了文件名,请按给出的顺序读取文件并连接其内容,并在文件名和末尾之间插入新行。如果您无法读取一个或多个文件名(因为文件不存在或您没有读取权限),请忽略它们。如果指定的所有文件名均无效,则不输出任何内容。 如果未提供文件名,请从标准输入中读取。如果未提供文件名或未提供文件名,则仅从标准输入中读取-。 输出量 程序将输出带有标准行编号的输入作为标准输出(您可以假定输入具有\n,\r\n或\r行尾;请选择对您方便的任何一种,但要指定哪一个): <5 spaces>1<tab><content of line 1 of input> <5 spaces>2<tab><content of line 2 of input> ... <4 spaces>10<tab><content of line 10 of input> ... <3 spaces>100<tab><content of line 100 of input> ... ... 行号分配了6个空格,并在这些字符的末尾插入;其余的变成空格(例如1将有5个前导空格,22将有4个前导空格,...)。如果输入足够长,则最终将在行上用完行号的空间999999。在999999行之后,您不得输出任何内容。 如果输入为空,则不输出任何内容。 退出状态 较低的数字优先:如果遇到错误1和2,则以状态1退出。 如果成功接收到输入,并且状态行成功编号并输出,则以状态0退出。 …

9
在Applescript中打高尔夫球的技巧
您在Applescript中打高尔夫球有哪些秘诀?我正在寻找可以应用于一般至少在某种程度上特定于Applescript的高尔夫问题代码的想法(例如,“删除评论”不是答案)。
13 code-golf  tips 

1
Code-Golf Ascii艺术迷你高尔夫
介绍 让我们玩一些迷你高尔夫球!高尔夫球用a表示,.球洞用a表示O。您想在每个孔上都打一个孔,但是您不擅长推杆。实际上,您拒绝尝试斜放!只能上下左右移动。 您打算通过放置额外的保险杠来作弊\,/因此可以一杆入球。如图所示,球从保险杠上以直角反弹。 记住要打个招呼!告诉我们您的方向。 孔洞 1:第一个孔很容易,直杆!无需在此处放置保险杠。 输入: . O 输出: right . O 2:另一个基本的方法,短时间转。球从保险杠撞入洞中。 输入: . O 输出: left / . O 要么 down . O / 3:有些孔已经保险杠! 输入: . \O 输出: right . \O \/ 要么 right / \ . /\O 4:有些孔太复杂了! 输入: / \ \ / / . …

3
将单词分解为其他单词(例如,“余辉” =“尾部” +“ erg” +“低”)
这是供您所有词匠使用的工具!编写一个程序或函数,该程序或函数接受单词列表并为每个单词生成所有可能的级联分解的列表。例如: (注意:这仅是一个小样本,用于说明目的。实际输出量要大得多。) afterglow = after + glow afterglow = aft + erg + low alienation = a + lie + nation alienation = a + lien + at + i + on alienation = a + lien + at + ion alienation = alien + at + i + on …

15
选择最长的棍子
您是一位年轻的编程爱好者,与另外2个最好的朋友一起生活。每个星期,其中一个人必须完成房子的所有杂务,然后通过挑一根棍子来决定轮到谁。挑短棍的人会输掉所有的琐事。 由于所有人都是程序员,并且喜欢创建难题,因此您已将“选择最短的棍子”修改为计算机难题。 这是难题的规则。 您将获得一个2D矩阵,其中每列代表一根棍子。 在每一列中,1代表棒的一部分,0代表空白 当在每列从顶部到底,最初你0的,一旦你打1,棍子已经开始休息的列将充满1只有 您可以编写程序来选择一列。该栏中棍子的大小决定了获胜者/失败者。棒的大小==该列中的1s数。 但是,该程序只能具有线性最坏情况下的时间复杂度。 由于所有人都是程序员,因此您将知道其他人的程序是否正在限制时间复杂度极限。 您的工作是: 编写接受2D格式或字符串数​​组输入的程序或函数。 输入可以从STDIN /提示/控制台或函数参数中获取。 如果您正在从STDIN / prompt读取输入,则可以假定读取输入并将其转换为数组需要0倍的时间(即使您的答案中必须有这样做的代码) 确定其中最长的棍子。 输出可以是函数的返回值,也可以是STDOUT /控制台/警报。 程序/函数必须具有线性最坏情况下的时间复杂度,O(m+n)其中m为行n数和列数。 输入可以是以下格式之一: 2D阵列: [ [0, 0, 0, 0], [1, 0, 0, 0], [1, 1, 0, 1], [1, 1, 1, 1] ] 字符串数组: [ "0000", "1000", "1101", "1111" ] 输入将具有以下属性: 数组的大小未知,假定任何大小的矩形 在任何一列中,自上而下,如果您看到1,则下面的所有内容均为1 …

8
中心二项式系数的数字总和
任务仅仅是看您可以计算n选择n / 2(甚至n)比python中的内置函数快多少。当然,对于大n来说,这是一个相当大的数字,因此您应该输出数字的总和,而不是输出整数。例如,n = 100000答案为135702。因为n=1000000是1354815。 这是python代码: from scipy.misc import comb def sum_digits(n): r = 0 while n: r, n = r + n % 10, n / 10 return r sum_digits(comb(n,n/2,exact=True)) 你的分数是(highest n on your machine using your code)/(highest n on your machine using my code)。您的代码必须在60秒或更短时间内终止。 您的程序必须为所有偶数n提供正确的输出:2 <= n <=(您的最高n) …

1
Manufactoria中的原始性测试
背景 Manufactoria是一款有关编程的游戏。玩家必须使用一种二维编程语言来完成任务。如果您从未听说过,最简单的学习方法就是尝试游戏的前几个级别。 挑战 您面临的挑战是创建一个测试数字素数的程序。 输入将是队列中的一系列N个蓝色标记。如果N为质数,则程序应接受它(将机器人移至终点)。如果N是合成的,则您的程序应拒绝它(将它放在地板上的某个地方)。 提交选项 由于这是比典型的工厂挑战赛更为复杂的挑战,因此我决定允许更多方式提交您的答案。 香草 我创建了一个13x13的自定义级别来构建和测试提交。定制测试级别如下。 13x13自定义级别 游戏仅在自定义级别上允许8个测试用例,但从理论上讲,您的创作应能够处理任何自然数N,仅受可用内存的限制。 仅供参考,自定义级别提供的测试用例如下: 1 -> reject 2 -> accept 4 -> reject 5 -> accept 7 -> accept 9 -> reject 11-> accept 15-> reject 扩展网格 有些用户可能想要的空间比13x13的网格还多。以下是通过更改URL中的数字创建的游戏内15x15自定义级别的链接: 15x15自定义级别 可悲的是,较大的自定义级别不起作用,因为无法访问其他单元。 伊索朗工厂 Manufactoria已适应基于ASCII的语言。如果您想采用其他方法来设计/测试您的作品,或者无法将最终解决方案安装到游戏板上,则可以使用此esolang。您可以在此处找到有关此esolang的信息: 峨factor工厂 esolang与实际游戏之间存在一些差异。例如,传送带交叉口的处理方式有所不同。尝试避免利用这些差异。 更快的测试方法 当涉及需要数千步才能完成的程序时,游戏速度非常慢。我的概念验证解决方案花了28042步来拒绝15。即使在游戏中以50倍加速时,这也花了太长时间。 我发现这个网站很有帮助。只需将链接复制粘贴到您的答案,就可以使用特定的输入来测试您的答案。28042步骤过程耗时不到一秒钟。 需要注意的一件事是,即使您的计算机正常工作,它也会经常说类似“不正确地接受”之类的内容。这是因为该网页仅知道测试用例。例如,它将说我的解决方案“错误地接受了”数字3,即使我的机器实际上是正确的。 如何取胜 评分标准是零件数(占用的单元)。这是代码高尔夫球,因此提交最少的部分将获胜。 对于那些感兴趣的人,我的基准解决方案包含96个零件,可安装在13x13网格上。寻找更好的算法可能会带来巨大的改进,因为我知道我使用了次优算法。

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.