编程拼图和代码高尔夫

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

3
建立有毒的葡萄酒测试计划程序
最近在Puzzling.SE上,我遇到一个问题,即当毒药仅在两种成分都被喝下时才激活时,确定更大数量的哪两个瓶子是有毒的。最终,它变得相当折磨,大多数人使用完全不同的算法设法将其减少到18或19个囚犯。 原始问题说明如下: 您是喜欢举行派对的中世纪王国的统治者。这位上次试图毒害您的葡萄酒瓶的朝臣大怒,得知您设法从十名囚犯中识别出他在1,000瓶中毒了。 这次他有点狡猾。他研发了一种复合毒药 P:一种二元液体,只有两种单独无害的成分混合时才致命。这类似于环氧树脂的工作原理。他又给您寄了1,000瓶葡萄酒。一瓶有成分C_a,另一瓶有成分C_b。(P = C_a + C_b) 喝完这两种成分的任何人都将在喝完最后一种成分的夜晚的午夜中途死亡,无论他们在白天何时吸收液体。每种有毒成分都保留在体内,直到第二种成分激活为止,因此,如果一天喝一种成分,第二天喝另一种成分,则第二天结束时您将在午夜死亡。 您下一场聚会还有两天。您需要使用最少多少名囚犯进行测试才能识别出哪两个瓶子受污染,以及在该数目的囚犯身上需要遵循什么算法? 额外的 好处是,假设您有20名囚犯的固定限制,那么理论上可以测试的最大瓶子数量是多少,从而得出关于哪些瓶子受到影响的准确结论? 您的任务是建立一个程序来解决奖金问题。对于n囚犯,您的程序将制定一个测试计划,以便能够m在m尽可能大的瓶子中检测出两个有毒的瓶子。 您的程序最初将N囚犯人数作为输入。然后将输出: M,您将尝试测试的瓶子数量。这些瓶子将被标记为从1到M。 N 行,其中包含每个囚犯将喝的瓶子的标签。 然后,您的程序将输入第一天死亡的囚犯作为输入,第一行的囚犯为1,下一行的囚犯为2,等等。然后,它将输出: N更多的行,其中包含每个囚犯将喝的瓶子的标签。死囚将有空白行。 然后,您的程序将输入第二天哪些囚犯死亡的信息,并输出两个数字A和B,表示您的程序认为哪个瓶子包含毒药。 两个囚犯和四瓶一例输入可能会去这样,如果瓶子1和3中毒: > 2 // INPUT: 2 prisoners 4 // OUTPUT: 4 bottles 1 2 3 // OUTPUT: prisoner 1 will drink 1, 2, 3 1 4 // OUTPUT: prisoner …

19
将给定数量的字节格式化为可读格式
挑战与起源 在Stack Overflow上,一个流行的问题是:如何在Java中将字节大小转换为人类可读的格式?投票最多的答案有一个很好的方法可以做到这一点,但这是代码高尔夫,我们可以做得更好,不是吗? 您面临的挑战是编写一种方法或程序,该方法或程序可以将给定字节数转换为正确的人类可读格式,并使用您的语言将结果打印为标准格式。* *请参阅规则以进行进一步说明! 输入值 输入将始终为正数字节,最大(2 ^ 31)-1。 输出量 您可以选择是否使用国际单位制或二进制表示法作为输出(SI表示法可能为您节省一些字节)。 SI: B, kB, MB, GB Binary: B, KiB, MiB, GiB 注意:由于输入范围的限制,无法使用高于GB或GiB的单位。 输出示例 国际单位制: Input Output 0 0.0 B 999 999.0 B 1000 1.0 kB 1023 1.0 kB 1024 1.0 kB 1601 1.6 kB 160581 160.6 kB 4066888 4.1 MB …
16 code-golf 

10
取消图形
介绍 在此挑战中,将为您提供带有自环的有向图,而您的任务是将其转换为无自环的无向图。 输入值 您的输入是一个有向图,其顶点设置{0, 1, ..., n-1}为某个自然数n ≥ 0(或者{1, 2, ..., n}如果您使用基于1的索引)。该图以length- nlist的形式给出,L其中L[i]是顶点的邻居的列表i。例如,列表[[0,1],[0],[1,0,3],[]]代表图形 .-. | v '-0<--2-->3 ^ | | | v | 1<--' 请注意,邻居列表不一定是有序的,但是可以保证它们没有重复。 输出量 您的输出是另一张与输入格式相同的图,可从图获得,如下所示。 删除所有自循环。 对于每个剩余边u -> v,v -> u如果还没有反转边,则添加它。 与输入一样,输出图的邻居列表可能是无序的,但它们不能包含重复项。对于上面的图,正确的输出将是[[1,2],[0,2],[0,1,3],[2]],代表图 0<->2<->3 ^ ^ | | v | 1<--' 规则 您可以在图形中使用基于0或基于1的索引。功能和完整程序都可以接受。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 这些测试用例使用基于0的索引。在基于1的情况下递增每个数字。这些邻居列表按升序排序,但不是必需的。 [] -> [] [[0]] …

6
每日ASCII艺术#3-中国神社
在今天的AAOD中,我们将建造一座高度不同的中国神社。 考虑以下示例中的高度(N)1至6 N = 1: . | . ]#[ . \_______/ . ]###[ . \__]#.-.#[__/ |___| |___| |___|_|___| ####/_\#### |___| /_____\ N = 2: . | . ]#[ . \_______/ . ]###[ . \___________/ . ]#####[ . \___]#.---.#[___/ |__|_| |_|__| |__|_|___|_|__| #####/___\##### |_____| /_______\ N = 3: . | . …

4
建立ASCII斐波那契时钟
有人使用斐波那契数字建立了一个非常漂亮的时钟,它看起来很不错,但是却无法使用。就是我们喜欢的方式!让我们重新创建它。 时钟由与前五个斐波那契数相对应的5个部分组成,从1(即1、1、2、3、5)开始: ccbeeeee ccaeeeee dddeeeee dddeeeee dddeeeee 时钟能够以5分钟为增量显示12小时时间。这是这样的。考虑时间7:20。可以将小时7分解为给定的斐波那契数 7 = 2 + 5 还有5分钟的4个单元。4可以分解为 4 = 2 + 1 + 1 现在,小时显示为红色,分钟显示为绿色,如果小时和分钟都使用数字,则显示为蓝色。如果根本不使用数字,它将保持白色。因此,上面将显示为: BBGRRRRR BBGRRRRR WWWRRRRR WWWRRRRR WWWRRRRR 但是,等等,还有更多。上述分解并不是唯一的可能性。一个人也可以写7 = 3 + 2 + 1 + 1和4 = 3 + 1,这将给 GGRWWWWW GGBWWWWW GGBWWWWW GGRWWWWW BBBWWWWW or BBBWWWWW BBBWWWWW BBBWWWWW BBBWWWWW …

3
数字种族
您应该编写一个程序或函数,给出不同的一位正整数的开始顺序,并以轨迹的长度作为输入输出,或者返回数字的结束顺序。 输入[5,1,2,6,7] and 14定义以下种族: -------------- 76215 -> -------------- 比赛规则 赛道回绕,数字可以走多圈。 步骤的顺序是循环的,并且基于起始位置。在我们的例子中5 1 2 6 7 5 1 2 ...。 同一位置不能有多个数字。 每个数字digit_value每步都有一个单元格速度。超过一个数字或一个连续的数字块需要多花一步。如果数字没有所需的速度,它将在(一个或多个)数字之前停止。例子: [41 ] => [ 1 4 ] 4 overtakes 1 [2 1 ] => [ 21 ] 2 can only move 1 as it can't move 3 to overtake …

3
您称它为居中,我称其为Code Golf
“让我们面对现实吧,对齐的图像就像来自天堂的小礼物。欢迎,但出乎意料。” -地球位 赢得挑战者可获得10000点声望。 规则: 1)您将生成一个程序。 2)输入将是图像,但是输入是作为文件传递还是由数字列表决定。 3)输出将是一个文件,该文件在用油漆(或类似物品)打开时将显示对齐的图像。 4)画布大小将始终在100 x 100和2000 x 2000像素之间。它将始终是矩形,但并不总是正方形。 5)没有图像的硬编码或时髦的URL魔术。 6)无需使用外部库。 集中化指南(Joshpbarron变体) 如果轴上的第一个白色(255,255,255,> 0 rgba)或透明(x,y,z,0 rgba)与画布边缘的距离相等(正负1个像素),则图像将被定义为居中。 这可以通过以下方法来实现(并将通过以下方法进行验证)。 1)想象一下对象周围的边界框。(添加黑线以寻求帮助) 2)移动对象,直到对象的边缘与画布的适当边缘相等的距离。 3)现在忘记黑线。 输入: 输出: 这里有更多输入。 以及各自的输出在这里。 +10000代表是谎言。

2
表达数字-现代的“ des Chiffres et des Lettres”
快递号码 早在60年代,法国人就发明了电视游戏节目“ Des Chiffres et des Lettres”(数字和字母)。节目的“数字”部分的目标是,使用一些半随机选择的数字,尽可能接近某个3位目标数字。参赛者可以使用以下运算符: 串联(1和2为12) 加法(1 + 2是3) 减法(5-3 = 2) 除(8/2 = 4); 仅当结果为自然数时才允许除法 乘法(2 * 3 = 6) 括号,以覆盖运算的常规优先级:2 *(3 + 4)= 14 每个给定的号码只能使用一次或根本不能使用。 例如,目标数字728可以与以下数字精确匹配:6、10、25、75、5和50,其表达式如下: 75 * 10 - ( ( 6 + 5 ) * ( 50 / 25 ) ) = 750 - …

4
测试数字是否为平方
编写一个GOLF汇编程序,给定寄存器中的64位无符号整数,如果是正方形,则将n非零值放入寄存器中,否则将放入寄存器中。sn0s 您的GOLF二进制文件(组装后)必须适合4096个字节。 您的程序将使用以下Python3程序(必须放在GOLF目录中)进行评分: import random, sys, assemble, golf, decimal def is_square(n): nd = decimal.Decimal(n) with decimal.localcontext() as ctx: ctx.prec = n.bit_length() + 1 i = int(nd.sqrt()) return i*i == n with open(sys.argv[1]) as in_file: binary, debug = assemble.assemble(in_file) score = 0 random.seed(0) for i in range(1000): cpu = golf.GolfCPU(binary) if …

6
模式中程序的王子前缀
您应该编写一个程序或函数,该程序或函数应尽可能输出或返回《小王子》第一章。您的程序或函数必须是M×N的代码块,其中仅包含可打印的ASCII字符(代码点从32到126),并在每行末尾添加换行符。 您最多只能使用 96个可打印的ascii字符(以及行尾的换行符)中选择的26个字符。 在每一行和每一列中,每个字符都必须与数独谜题相似,即每行或每列两次都不能有字母。 正确的例子代码块用M = 4,N = 3并且alphabet = {a,b,c,d,/,*}: abcd bcd* */ac 代码详细信息 您可以选择代码块的形状(即M和N)。 该块必须完全用字符填充,即每一行必须具有相同的长度。 最后一行末尾的换行符是可选的。 如上面在每一行和每一列中所写,每个字符必须是不同的。 输出细节 您应该输出或返回《小王子》第一章的前缀, 而无需任何其他输出。 如果您在文本中找到换行符,则可以将其表示为任何常见的变体(\ r,\ n,\ r \ n),但仅使用其中之一并将其计为分数的1个字节。 额外的尾随换行符是可选的。 您的分数是输出文本的长度,不包括额外的换行符(如果存在)。分数越高越好。 示例答案 ##Python3, score = 6 alphabet = `print('O\ce w)#X` (alphabet element count = 16) print('O\ nce w')#X 您可以使用此Python 3(ideone)程序或@MartinBüttner提供的CJam程序(在线)检查代码的有效性。

3
ASCII L系统渲染器
背景 一个L-系统(或系统Lindenmayer)是平行重写系统,除其他外,可以很容易地用于模型分形。这个问题涉及确定性,上下文无关的L系统。它们由符号字母,初始公理字符串和将每个字母符号映射到新字符串的一组重写规则组成。规则并行应用于公理,生成一个新字符串。然后重复此过程。 例如,具有公理“ A”和规则A = ABA; B = BBB的系统生成字符串“ ABA”,“ ABABBBABA”,“ ABABBBABABBBBBBBBBBBBBABABBBABA”等字符串的序列。为简洁起见,我们没有明确提及定义L系统时的字母。此外,假定没有显式重写规则的任何符号都是不变的(即,符号A的默认规则为A = A)。 L系统可以使用乌龟图形的形式进行可视化。按照惯例,乌龟开始朝右。然后,通过重复其符号来绘制字符串:F表示“向前拉一个单位”,G表示“向前拉一个单位”,+表示“向左旋转一个角度单位”,而-表示“向右旋转一个角度单位”。单元”。字符串中的所有其他符号将被忽略。出于这个问题的目的,假定角度单位始终为90°。 任务 给定任何L系统的规范和多次迭代后,您的程序应使用箱形绘图字符输出结果字符串的ASCII渲染(如上所述)。 参数以空格分隔的字符串形式传递,该字符串包括公理,重写规则(作为等式的列表)和重写迭代次数。例如,输入“ FF = FGF; G = GGG 2”生成字符串“ FGFGGGFGF”,因此以适当的间距绘制四行。 L系统使用的符号可以是除空格和分号之外的任何ASCII字符。每个符号最多指定一个显式规则(默认重写规则是如上所述的身份映射)。 您可以假定输出将始终包含至少一个F。 输出应使用以下UNICODE框形图字符表示可视化效果:─(U + 2500),│(U + 2502),┌(U + 250C),┐(U + 2510),└(U + 2514) ,┘(U + 2518),├(U + 251C),┤(U + 2524),┬(U + 252C),┴(U + 2534),┼(U …

4
构建最小线索数独解算器
我试图说明这个问题,但提出了更为客观的解决标准。 您的任务是构建一个程序或函数,该程序或函数采用S您选择的格式的已解决的Sudoku网格,并尝试生成具有S唯一解决方案的尽可能少线索的问题网格。(S只要解决方案证明是唯一的,什么方法是唯一的解决方案,包括蛮力都没有关系。) 通过在此文件中找到的一组100,000个解决方案网格中运行该程序,可以对您的程序进行评分(下载7.82 MB),并将解决方案产生的所有100,000个问题网格中的线索总数相加。 上面测试文件中的Sudoku解决方案从左到右,然后从上到下,以81个字符的字符串表示。将测试文件中的输入转换为可用解决方案所需的代码不会计入解决方案的字节数。 就像在我的Flood Paint挑战中一样,您的程序实际上必须为所有100,000个难题产生有效的输出,才能将其视为有效的解决方案。在所有100,000个测试案例中,输出总线索最少的程序是赢家,而较短的代码打破了平局。 当前记分牌: 2,361,024 -Nutki,C 2,580,210 -es1024,PHP 6,000,000 -CarpetPython,Python 2 720万-Joe Z.,Python

6
重叠圆
应该写的程序或函数,它给出一个N由N等间隔的正方形网格和固体内切圆的输出或返回其由实心圆圈部分或完全重叠的方格的数目。 0大小的重叠(即当圆仅接触一条线时)不计算在内。(这些重叠出现在例如)N = 10。 例 N = 8 (64 squares), Slices = 60 输入值 一个整数N > 0。(网格将具有N * N正方形。) 输出量 整数,实心圆形切片的数量。 例子 (输入输出对) Inputs: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Outputs: 1 4 9 16 25 36 45 60 77 88 …

1
编写Kolmogorov复杂度求解器
该柯尔莫哥洛夫复杂的字符串的小号最短程序的长度P,写一些编程语言大号,其输出正好是小号。 (是的,真正的定义比较正式,但这足以应付挑战。) 你在这个挑战任务是写的最短的“柯尔莫哥洛夫复杂解算器”,就是写在程序大号,它接受一个字符串本身小号,并返回最短P写在大号输出小号。 天真的方法是遍历所有长度为1的程序,然后是所有长度为2的程序,然后是所有长度为3的程序,依次类推,依次运行每个程序并测量输出,直到找到输出S的程序。这种方法的问题在于其中某些程序可能永远不会停止运行,这意味着求解器本身可能永远也不会停止。而且由于停顿问题,没有确定方法可以避免程序无法停止。 一个简单但不完善的解决方案是对每个潜在P的执行时间设置时间限制。可能不会暂停的程序可能会被跳过,但是求解器肯定会停止(假设L中的程序确实可以输出在时限内 S)。 挑战 将您的求解器编写为包含三件事的程序或函数: 字符串 s ^。 正整数 T,它是时间限制(以秒为单位)或一些较小的时间跨度(例如毫秒)。 字符字母的字符串A用于潜在的P的。 并输出仅包含A中字符的最短P,以少于T个时间单位运行,并输出小号。 这是一般的伪代码: Function KolmogorovComplexitySolver(S, T, A): Assign N to 0 Loop until function returns: In any order, iterate over all strings of length N that only contain characters from *A*. Call the current string P: Execute …

5
不明智的位操作
我喜欢打高尔夫球dc,但有时由于dc没有按位操作而感到沮丧。 挑战 提供实现C位操作的相当于提高4层命名的功能&,|,~和^(按位AND,OR,NOT和XOR)。每个函数将使用两个操作数(~仅使用一个),这些操作数至少是32位无符号整数。每个函数将返回与操作数相同的位宽的无符号整数。 限制 您只能使用支持的操作dc。这些是: + - * / 算术加法,减法,乘法和除法 ~ 模(如果您的语言支持,则为divmod) ^ 求幂 | 模幂 v 平方根 > >= == != <= < 标准平等/不平等经营者 >> <<位移位运算符。 dc没有这些功能,但是由于它们是通过除以2的幂进行琐碎实现的,所以我将允许这些。 dc我使用(递归)宏和(不等式)操作笨拙地构建了控制结构。您可以使用您的语言具有的任何内置控制结构。 您也可以使用逻辑运算符 && || !,即使这些运算符不能直接在中使用dc。 你不能使用位运算符 &,|,~和^或平凡实现它们的任何功能。 另外,您不得使用内置的字符串转换基础运算符或函数。 还请考虑提供一个测试程序或在线编译器代码段(不包含在高尔夫球成绩中)以帮助您验证答案。

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.