编程拼图和代码高尔夫

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

5
打印随机迷宫
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 编写一个程序,使用您选择的算法生成并打印随机迷宫。对于程序的多次运行,迷宫应该不同。高度和宽度作为命令行参数给出。使用|垂直墙,-用于水平壁和+拐角。迷宫被墙壁所包围,入口被缺少的墙壁所标记。迷宫中的宝藏#必须从至少一个入口进入。 $ python2 random-maze.py 4 5 +-+-+ |#| | | +---+

15
最低斐波那契挑战!
挑战 在此任务中,您将得到一个整数N(小于10 6),找到仅使用斐波那契数就可以求和N的最小方法-该分区称为Zeckendorf表示。 您可以多次使用任何斐波纳契数,并且如果有多个表示输出,则可以多次使用。 例如,如果输入为67,则一个可能的输出可能是使用斐波那契数1、3、8、55,这也是可用于获取总和67的最小斐波那契数。 输入N在单行上给出,输入由EOF终止。 例子 以格式给出 input: output 0: 0 47: 34+13 3788: 2584+987+144+55+13+5 1646: 1597+34+13+2 25347: 17711+6765+610+233+21+5+2 677: 610+55+8+3+1 343: 233+89+21 3434: 2584+610+233+5+2 约束条件 输入数量将不超过10 6个值。 对于所有输入,您的程序的运行时间均不得超过5秒。 您可以使用任何选择的语言。 最短的解决方案获胜!

30
如何确定数字是否为奇数或偶数而无模或按位运算?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 6年前关闭。 如何确定数字是否为奇数或偶数而无模或按位运算? 这项挑战的效率非常低,但挑战了您思考创新解决方案的能力。 编辑: 请创建一个函数。同样,尽管正则表达式是一个有趣的响应,但该函数应接受任何有效数字。 背景:这个问题源于我最早的编程时代。我们上课第一天的作业是写一个简单的程序,打印“ odd”或“ even”。身为臭小子,我没有读过我们上课时使用的那本书,只是向我们展示了如何使用它%来确定这一点。我花了大约半个小时在房间里来回跳动,试图想办法做到这一点,并从讲座中记住,数字在从一种原始类型转换为另一种原始类型时可能会丢失并获得精度。因此,如果您将数字取下,然后将其除以二,然后再相乘,则该数字不等于原始数字,那么您将知道该数字是奇数。 第二天,当我们的老师评估我们的程序时,我感到震惊,他认为这是解决问题的最原始的方法,即使效率低下。

10
他们从哪里打来的?
在国际范围内拨打电话时,电话号码前会带有一个代码,以指示该号码所在的国家/地区。这些代码是前缀代码,这意味着任何代码都不是另一个前缀。 现在,今天早些时候,您错过了一个呼叫,并且您很好奇该呼叫可能来自何处。因此,您想查找调用代码。但是,作为前缀代码,您不太确定它的结尾,因此您决定编写一个程序以将调用代码与号码的其余部分分开。 输入值 作为输入,您将收到一个由digits组成的字符串0-9。前几位数字将是下面列出的国家/地区电话代码之一(这意味着前几位永远不会是0)。输入国家/地区电话代码后,其余输入将以任意顺序包含零个或多个数字- 不保证该数字是有效的电话号码。您的程序必须能够处理至少包含15位数字的输入 输出量 您的程序应输出唯一的国家/地区电话代码,该代码是该号码的前缀。有效输出如下: 1 20 211 212 213 216 218 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 …

26
将数字字符串从单词转换为整数
将包含数字作为单词的字符串转换为整数,而忽略前导零。 例子 "four two"-> 42。 "zero zero zero one"-> 1。 假设条件 提交内容可以假定: 输入字符串由空格分隔的数字词组成。 所有单词都是有效的(在“零” ..“九”的范围内)且小写。空输入的行为是不确定的。 输入字符串始终表示范围内的无符号数字,int并且决不能为空字符串。 计分 答案将以字节计分,而字节数越少越好。

2
两个三角形的交点
给定的2D平面4点A, B, C, D,计算三角形的交叉区域的面积OAB和OCD,其中O是该平面的中心,具有坐标(0, 0)。 鼓励以恒定时间复杂度(就算术运算而言)运行的算法,但不强制执行。 规则 每个点都用两个实数表示,分别表示它们的X和Y坐标。 (可选)如果您的编程语言(或某种编程语言库)具有内置Point类型或等效类型,则允许将Point对象作为输入。 输入以4点的形式给出,格式包括但不限于: 8个坐标的列表。 4点的列表,每个点都可以任何方便的格式表示。 2点的两个清单。 等等 您不能假设这些点的特定顺序(逆时针顺序或顺时针顺序) 您不能假定该点O已作为输入传递。换句话说,程序不得使用和使用无关的输入。 您不能假设所有要点都不同。换句话说,三角形可以退化。您还需要处理该案例(请参见下面的测试案例) 绝对或相对差必须小于下面的样本测试用例。10-3 获奖标准 这是代码高尔夫,以字节为单位的最短答案! 样本测试用例 Ax Ay Bx By Cx Cy Dx Dy area 5 1 1 3 -1 0 0 -1 0 5 1 1 3 -1 0 0 0 0 5 1 …

30
很酷的无标题序列
让我们将f n(k)定义为自然数[1,∞)的前k个项的和,其中每个数字重复n次。 k | 0 1 2 3 4 5 6 7 8 9 --------+------------------------------------------------- f_1(k) | 0 1 3 6 10 15 21 28 36 45 deltas | +1 +2 +3 +4 +5 +6 +7 +8 +9 --------+------------------------------------------------- f_2(k) | 0 1 2 4 6 9 12 16 20 …

9
这条线是否穿过那个正方形?
将第一个象限(包括正x轴,正y轴和原点)划分为1x1网格,每个网格均由其左下角的坐标标记,如下所示: 请注意,每个网格都包含其边界和顶点。使用数学符号,标为(m,n)的网格将代表正方形{(x,y) | m ≤ x ≤ m+1, n ≤ y ≤ n+1}。 鉴于形式的直线ax+by+c=0与整数a,b以及c,和由下式表示的网格(m,n)线是否通过网格,即,在给定网格中的任何点是否是上线,输出。 a b c m n output 1 1 0 0 0 true 1 1 0 1 1 false 1 1 0 0 2 false 1 1 -3 0 1 true 1 1 -3 0 0 false …

30
删除常见的前导空格
使用Python进行编码时,有时您希望在函数中使用多行字符串,例如 def f(): s = """\ Line 1 Line 2 Line 3""" (反斜杠是删除前导的换行符) s但是,如果您尝试实际打印出来,则会得到 Line 1 Line 2 Line 3 那根本不是我们想要的!领先的空白太多了! 挑战 给定一个仅由字母数字字符,空格和换行符组成的多行字符串,请从每行的开头删除所有公共空格。保证每行至少有一个非空格字符,并且没有尾随空格。输出可能没有多余的空格,无论是在整个输出之前还是之后,还是在单独的行之后(单个可选的尾随换行符除外)。 输入可以通过STDIN或函数自变量,输出可以通过STDOUT或函数返回值。您不能使用任何旨在使多行字符串变短或执行此确切任务的内置程序,例如Python的textwrap.dedent。 这是代码高尔夫球,因此以最少字节为单位的解决方案将获胜。有标准漏洞。 测试用例 "a" -> "a" " abc" -> "abc" " abc\n def\n ghi" -> " abc\ndef\n ghi" " a\n b\n c" -> "a\nb\nc" " a\n b\n …

4
最小的象棋程序
受到最近这篇文章的启发,这篇文章讲述了一位法国程序员在Assembly中编写了一个487字节的2人(人类与人类)国际象棋程序的故事,我想知道其他语言下的小型国际象棋程序有多么小。 细节 该程序只能接受合法的象棋动作。 尽管第一条规则适用于支票,但不必声明支票/将军人。 根据文章,castling不是必需的实现。 此外,您不必实现pass。 但是,您确实必须在达到第八级时允许典当晋升(您可以选择简单地强制转换为女王)。 由您决定板的显示方式-终端ASCII,GUI等 您必须显示轮到谁了。 可以在这里找到国际象棋的规则-忽略指定的比赛规则(例如,计时,碰触),并记住掷骰和传球不是必需的实现。
19 code-golf  chess 

5
仍然解析的最丑陋的R代码行是什么?
目标是产生一行R代码,该代码可以: 尽可能少地做 尽可能多的字符(最多100个字符) 并且尽可能丑陋(其中“丑陋”可以表示低效的计算策略,诸如终止号的多余字符等)。 做你最坏的,绅士! 获胜的客观标准 胜出的答案将根据以下得分标准进行判断(得分最高的答案将获胜): 生成从0到10的序列(100分) 尽可能多的字符(N) 如果N = 100,则为0分 如果N <100,则获得N-100分(例如,每100个字符以下的人损失1分) 如果N> 100,则获得2(100-N)分(即,每超过100个字符,损失2分) 使用从许多负面例子ř地狱尽可能 每个引用的示例6分 每个示例仅计数一次。之所以如此,是因为“一个被囚禁在[火中的坟墓中的异教徒””只能被囚禁一次。因此,您的代码行中的两个全局分配只能使您获得6分。
19 code-challenge  r 

2
写成数论风格
使用符号编写数学陈述: There exists at least one non-negative integer(写为E存在量词) All non-negative integers(写为A,通用量词) + (加成) * (乘法) = (平等) >,<(比较运算符) &(和),|(或),!(非) (,)(用于分组) 变量名 等价于以下陈述 存在一个有理数a,使得π+ e * a是有理数。 (当然,π= 3.1415 ...π=3.1415 ...\pi =3.1415...是等于圆周除以圆直径的数学常数,e = 2.7182 ...Ë=2.7182 ...e=2.7182...是欧拉数) 您必须证明您的陈述确实等同于上述陈述。 显然,执行此操作的“最短”方法是证明该语​​句为真或为假,然后用琐碎的真或假声明进行回答,因为所有的真声明彼此都等效,所有的假陈述也彼此等同。 但是,给定语句的真值在数学上是一个未解决的问题:我们甚至不知道π+ eπ+Ë\pi+e是否不合理!因此,除非进行开创性的数学研究,否则面临的挑战是找到一个“简单”的等效语句,证明其等效性,并尽可能简短地对其进行描述。 计分 E A + * = > < & |并将!每个分数加1。(并且)不要添加任何分数。每个变量名称将分数加1。 例如,E …

9
计算超集
您的任务很简单: 给定整数集列表,找到集合并集。换句话说,找到包含原始集列表中的所有元素(但没有其他元素)的整数集的最短列表。例如: [1,5] and [3,9] becomes [1,9] as it contains all of the elements in both [1,5] and [3,9] [1,3] and [5,9] stays as [1,3] and [5,9], because you don't want to include 4 集使用范围表示法表示:[1,4]表示整数1,2,3,4。集也可以是无界的:[3,]表示所有整数>= 3,并且[,-1]表示所有整数<= -1。确保范围的第一个元素不大于第二个。 您可以选择采用字符串符号表示的集合,也可以使用2元素元组,并使用常量非整数作为“无限”值。您可以使用两个不同的常量来表示无限的上限和无限的下限。例如,在Javascript中,只要您在所有测试用例中都使用一致,就可以使用它[3,{}]来标记所有整数。>= 3{} 测试用例: [1,3] => [1,3] [1,] => [1,] [,9] => [,9] [,] …

7
盲目随机排序
这是排序算法的一种非常常见的模式: def sort(l): while not is_sorted(l): choose indices i, j assert i < j if l[i] > l[j]: l[i], l[j] = l[j], l[i] 这些算法,因为指数运行良好i,并j都经过精心挑选,根据该列表的状态l。 但是,如果我们看不到l,而不得不盲目选择,该怎么办?那我们可以多快排序列表呢? 您面临的挑战是编写一个仅给出给定长度的输出随机索引对的函数l。具体来说,您必须输出i, j带有的两个索引,0 <= i < j < len(l)。您的函数可以在列表的任何长度上工作,但是会在长度为100的列表上得分。 您的分数是根据上述模式对均匀随机混排的列表进行排序所需的平均索引选择数,其中索引是根据您的功能选择的。 我将对提交的内容进行评分,在均匀随机排列的长度为100且没有重复输入的列表上,取1000次试验中的平均索引选择次数。 如果提交的作品明显不具有竞争力或没有终止,我保留进行更少试验的权利,并且我将进行更多试验以区分顶级竞争对手以找到一个获胜者。如果在我的计算资源极限内,多个顶级提交仍在误差范围内,我将宣布较早的提交为获胜者,直到可以利用更多的计算资源为止。 这是一个使用Python的评分程序示例: import random def is_sorted(l): for x in range(len(l)-1): if l[x] > l[x+1]: return …

8
写一个脑力激荡的经典口译员!
Brain-Flak(Brainf ** k和Flak-Overstow之间的交叉)是一种基于堆栈的深奥语言。自发布此挑战以来,该语言已得到发展和更新,但是该语言的第一个修订版被称为“经典大脑”。 您必须编写一个程序或函数,该程序或函数需要一串Brain-Flak经典代码并对其进行评估。它还将使用(可能为空)整数列表。有Brain-Flak经典程序的输入。 语言 Brain-Flak具有两个堆栈,分别称为“左”和“右”。活动堆栈从左侧开始。如果弹出或查看一个空堆栈,它将返回0。没有变量。程序启动时,每个输入将按顺序推入活动堆栈(以便最后一个输入位于堆栈顶部)。 Brain-Flak程序中唯一有效的字符是()[]{}<>,并且必须始终保持平衡。如果有无效字符,或者括号不匹配,则会出现不确定的行为。任何有效的东西。 函数有两种类型:Nilads和Monads。一个nilad是一个函数,0参数。这是所有的尼拉德人: () +1。 [] -1。 {} 弹出活动堆栈。 <> 切换活动堆栈。 在评估它们时将它们串联在一起。因此,如果我们在活动堆栈的顶部有一个“ 3”,则此代码段: ()(){} 将评估到1 + 1 + active.pop()将评估为5。将<>评估为0。 单子组采用一个参数,即一大堆Brain-Flak代码。这是所有单子: (n) 在活动堆栈上按“ n”。 [n] 将'n'打印为int和换行符。 {foo}当active.peek()!= 0时,执行foo。评估为0¹。 <foo> 执行foo,但将其评估为0。 这些函数还将返回它们内部的值,因此 (()()()) 将推3和 [()()()] 将打印3但 [(()()())] 将打印并推送3。 当程序执行完毕后,活动堆栈上剩余的每个值都将打印为整数,并在其之间使用换行符。其他堆栈上的值将被忽略。 规则: 您的程序必须支持(-128,127)范围内的数字,并且堆栈大小至少为255。如果支持更大,则更好。 下溢/上溢未定义。 样本IO: 空程序: 输入:无 输出:无 加成。资源: …

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.