编程拼图和代码高尔夫

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

26
可括号的二进制数
如果您用无前导零的二进制形式表示某个正整数,并1用a 替换每个,(并0用a 替换每个)括号,那么所有括号会匹配吗? 在大多数情况下,它们不会。例如,9 1001以二进制形式出现,变成())(,其中仅前两个括号匹配。 但有时它们会匹配。例如,44为101100二进制,变成()(()),其中所有左括号都有匹配的右括号。 编写一个程序或函数,该程序或函数的正十进制整数为正,如果数字的双括号版本具有所有匹配的括号,则打印或返回真实值。如果不是,请打印或返回伪造的值。 以字节为单位的最短代码获胜。 相关的OEIS序列。 低于100的真实示例: 2, 10, 12, 42, 44, 50, 52, 56 低于100的虚假示例: 1, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, …

19
构建ASCII梯形图
给定两个整数n和m的输入,输出长度为n且大小为m的ASCII梯形图 。 这是长度为3,大小为3的ASCII阶梯: o---o | | | | | | +---+ | | | | | | +---+ | | | | | | o---o 这是长度为5,大小为1的ASCII阶梯: o-o | | +-+ | | +-+ | | +-+ | | +-+ | | o-o 这是长度为2,大小为5的ASCII阶梯: o-----o | | | | | | …

23
用数字三角形总结
好吧,总结一下。 编写一个程序或函数,该程序或函数接受一个非空的十进制整数列表(0-9),并输出一个向下的数字“三角形”,输入列表在顶部,其中第一行之后的每个数字都是两位数字的总和以10为模 例如,输入[7, 5, 0, 9]有输出 7 5 0 9 2 5 9 7 4 1 因为2是(7 + 5) mod 10,5是(5 + 0) mod 10,9是(0 + 9) mod 10,等一路1为(7 + 4) mod 10。 如果列表中只有一项,则输出与输入匹配;否则,输出与输入匹配。例如[4]将产生的输入 4 以下是一些其他示例: [0] 0 [1, 2] 1 2 3 [8, 7] 8 7 5 [0, 0] …

1
找出最大的凸多边形的面积
给定一个整数坐标列表,找到您可以从列表中构造的最大凸多边形的面积,以便- 每个顶点都在列表中 多边形内不包含列表的任何元素。 例: (0,0)(8,0)(0,1)(3,1)(7,1)(1,2)(5,2)(9,2)(2,3)(5,3) (7,3)(3,4)(5,5)(11,5) 可视化: o o o o o o o o o o o o o o 您可以从中制作的最大凸多边形是这样的: o o o o o o o o o 面积为12。 您可以采用任何合理的格式获取坐标列表,并应输出(以适合您选择的语言的适当方式)最大凸多边形的面积,该面积四舍五入到小数点后不少于2位。 此外,您必须使用某种算法,而不是简单地强行使用所有点子集。为了实现这一点,您的程序必须在一分钟内在现代PC上解决50个顶点的列表。 以字节为单位的最短代码获胜。

11
找出优质素数之间的最大差距
遵循诸如“ 查找最大素数”之类的问题的优良传统,该最大素数的长度,总和和积为素数,这是最大素数挑战的一种变体。 输入值 您的代码不应接受任何输入。 定义 我们说的黄金p是good,如果p-1恰好有2明显的质因数。 输出量 您的代码应输出连续的良好质数之间的绝对差q,p因此,|q-p|它应尽可能大,并且q是大于的最小良好质数p。您可以输出任意数量的好对,最后的输出将作为得分。 例 前55个素数的顺序为https://oeis.org/A067466。 得分 您的分数只是|q-p|针对您输出的一对优质素数。 语言和图书馆 您可以使用任何您喜欢的语言或库(不是针对此挑战而设计的),除了用于素数测试或分解整数的任何库函数。但是,出于计分的目的,我将在计算机上运行您的代码,因此请提供有关如何在Ubuntu上运行代码的明确说明。 我的机器时间将在我的机器上运行。这是在8GB AMD FX-8350八核处理器上的标准Ubuntu安装。这也意味着我需要能够运行您的代码。 细节 2分钟后,我将杀死您的代码,除非它在此之前开始耗尽内存。因此,应确保在切断之前输出某些内容。 您不得使用任何外部质数来源。 尽管我告诉我,好的表可以使Miller-Rabin确定性地测试多达341,550,071,728,321(甚至更高),但是您可以使用概率素数测试方法。另请参见http://miller-rabin.appspot.com/。 检查1中所有整数的最佳条目 Go中的756条猫 756由El'endia Starman用Python设计 1932年,Adnan用C#编写(使用Mono 3.2.8) 2640通过在雪人的Python(使用pypy 4.01) 2754 by Reto Koradi在C ++中 3486由Peter Taylor在Java中 RPython中 primo的3900(使用pypy 4.01) Java中的The Coder 4176 可能会跳过大量整数以找到较大差距的最佳条目 Reto Koradi编写的14226在C ++中 RPython中 primo的22596(使用pypy 4.01)。5秒后达到记录!

2
将Brainfuck转换为MarioLANG
MarioLANG是一种二维编程语言,其源代码类似于超级Mario Bros.级别。此外,其指令集与Brainfuck的指令集非常相似。这意味着MarioLANG本质上是2D Brainfuck,指令指针像Mario一样移动。因此,当我为编程语言测验编写我的MarioLANG提交内容时,我首先将Brainfuck转换为“ Hello,World!”。程序到MarioLANG。我注意到,通过非常系统的过程可以做到这一点,因此让我们编写一个Brainfuck-to-MarioLANG编译器! 注意: MarioLANG规范并不是完全明确的,因此我假设是Ruby实现的解释。 我将通过以下Brainfuck程序来解释该过程: ++[>+++++[>+++++++>++++++++++>+++>+<<<<-]<-]>>++.>+.+++++++..+++.>+++.>. 它打印Hello!并在尾随换行符。 分别将<和转换>为(和): ++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.). 添加地板让Mario继续前进: ++[)+++++[)+++++++)++++++++++)+++)+((((-](-]))++.)+.+++++++..+++.)+++.). ======================================================================== 现在的问题是MarioLANG没有像[和这样的循环]。取而代之的是,我们必须使用电梯和指示性指令使Mario真正走成一圈。首先,我们将替换[为>并将地板更改为"。我们还替换]为[!并将地板更改为=#: ++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================ 该"和#可以形成电梯(从开始#,在结束"),所以现在我们需要的是辅助地板马里奥走回来的。开始于!和结束于<: ++>)+++++>)+++++++)++++++++++)+++)+((((-[!(-[!))++.)+.+++++++..+++.)+++.). =="======"===============================#===#============================ ! < #===============================" ! < #==========================================" 请注意,所有管线的长度必须至少与最大封闭回路的长度相同,因为解释器无法跨较短的管线连接电梯末端。因此,我们用空格填充中间线。 就是这样。我们有一个功能齐全的等效MarioLANG程序。 挑战 给定有效的Brainfuck程序,请执行上述过程以将其编译为MarioLANG程序。 您可以假设输入中仅包含命令字符,即除之外没有其他字符,.+-<>[]。 所有辅助地板必须尽可能靠近主程序地板。您可以选择尽可能少地填充中间楼层的行(最大封闭循环的宽度),也可以填充到主程序的末尾。 您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数自变量获取输入,并通过STDOUT(或最接近的替代方案),函数返回值或函数(out)参数输出结果。如果您不将结果打印到STDOUT,则它仍然应该是一个用换行符分隔的字符串。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 测试用例 测试用例的格式如下:第一行是Brainfuck程序(您的输入),然后有一个空行,直到下一个空行的所有内容都是MarioLANG中的预期输出。这些示例使用最少的填充空间。或者,您可以在每行之间填充空格,使其与输出的第一行的宽度相等。 >,++-.< ),++-.( ======= ,[.,] ,>.,[! ="===# ! < #===" >>[-]<<[->>+<<] ))>-[!((>-))+(([! =="==#=="=======# ! < …

4
变异穿山甲
这是一个代码挑战,您需要设计一个程序,像担子一样工作,或者修改自己以说明机器学习的担子。 背景 有一个叫被描述“穿山甲游戏的一个基本的人工智能程序在这里。基本思想是程序在首次运行时会询问: 好啦请想一想 是穿山甲吗? 然后,您可以答复: 是 在这种情况下,它说: 好。那太容易了。 否则,它会说: 哦。那你赢了-你在想什么? 您可能会说: 一只狗 它会说 请给我一个关于狗的问题,以便告诉我狗和穿山甲的区别 你可能会回复 它吃蚂蚁吗? 然后它会问: 狗的答案是什么? 你会说 没有 它会说 谢谢 下次运行时,它会问上面的问题,并将建立一个此类问题的二叉树。 挑战 足够的背景。这个挑战是编写一个自我修改的穿山甲程序。规则如下: 程序输出(如上所述)应为STDERR。最终的答复永远是“好。那太容易了”。或“谢谢”。此后,它应该输出程序的当前版本,或将问题合并到的程序的新版本STDOUT。没有答案写在不支持写入语言STDOUT和STDERR或阅读STDIN将是有效的。 换句话说,在UNIX下,您可以像这样调用程序: 例: $ mylanguage myprogram > myprogram.1 [dialog goes here] $ mylanguage myprogram1 > myprogram.2 [dialog goes here] 该程序必须完全使用指定的提示(因为缩短提示不显示任何技巧)。提示如下(不带引号,并用%s代替): 清单: "OK, please think …
28 code-golf  quine 

11
红衣主教和普通人,从1到100
这是一个简单的拉伸肌肉的方法。您的代码(一个完整的程序)必须输出从1到100的所有基数,然后从1到100的所有序数的英文拼写。每个列表中的数字均应由逗号和空格分隔,并正确地连字号。每个列表应以单个大写字母开头,并以句号结尾。这两个列表应该用换行符分隔。 为了清楚起见,您必须产生以下确切的字节流: One, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve, thirteen, fourteen, fifteen, sixteen, seventeen, eighteen, nineteen, twenty, twenty-one, twenty-two, twenty-three, twenty-four, twenty-five, twenty-six, twenty-seven, twenty-eight, twenty-nine, thirty, thirty-one, thirty-two, thirty-three, thirty-four, thirty-five, thirty-six, thirty-seven, thirty-eight, thirty-nine, forty, forty-one, forty-two, forty-three, forty-four, forty-five, forty-six, forty-seven, forty-eight, …

3
快!逃离黑洞!
今年是87,539,319年,如今孤独的太空行走已司空见惯,许多人独自进入太空,背上只有喷气背包推动着他们前进,并随身携带个人计算机和键盘为自己的路线编程。 你就是这样一个人。您正在一次可爱而宁静的太空漫步中,突然之间,您被黑洞的引力所迷惑! 当您朝这个黑洞急速下降时,向内旋转的速度越来越快,您意识到生存的唯一机会就是广播遇险消息,并希望附近的一艘船能够救助您。 因此,您松开键盘,然后开始键入程序。 您的程序可以使用任何语言,并且必须打印HELP!到stdout(您的PC将所有stdout广播到很深的空间。) 但是,当您靠近黑洞时,您的键盘正慢慢被撕成碎片! 假设您正在使用QWERTY键盘(如下面的键盘),并且黑洞在您的左侧; 请记住,左移和右移是两个不同的键。 每次按键后,键盘最左边的一行(最左边的红线覆盖的键)被撕开并扔入黑洞! 所以,你的第一个按键可以是键盘上的任意键,但从那时起没有的最左边 Tab,Caps,Shift,Ctrl或`可使用按键,在所有。(仍可以使用r-shift和r-ctrl) 下一个按键之后,键1,Q,A,Z和Alt被抛入深渊,并且可以不被随后使用。在这之后,你输了Space,X,S,W,2等等。 显然,您希望尽快完成程序,以增加救援时间。因此,这是代码高尔夫球,并且按键操作中最短的程序胜出! 每个答案都应提供按键列表,因此,如果我的答案是此程序(使用squardibblyack语言) !HELP\. 密钥列表可能如下所示: Shift!HELP 释放移位 \. 长度:8 我担心这个挑战可能太难了,但是我很想看看提交的答案!

5
接受还是保留:计算机游戏展
内容: 一位隐居的亿万富翁创建了一个游戏节目来吸引世界上最优秀,最聪明的程序员。在星期一的午夜时分,他从一组申请人中选择一个人作为本周的竞赛者,并为他们提供游戏。您是本周的幸运选手! 本周比赛: 主机为您提供对10,000个数字信封堆栈的API访问。这些信封是随机排序的,并在其中包含1美元到10,000美元之间的美元价值(没有两个信封包含相同的美元价值)。 您可以使用3个命令: Read():读取堆栈顶部信封中的美元图形。 Take():将信封中的美元数字添加到游戏节目钱包中,然后将信封弹出堆栈。 Pass():弹出堆栈顶部的信封。 规则: 如果在信封上使用Pass(),则其中的钱将永远丢失。 从那时起,如果在包含$ X的信封上使用Take(),则永远不要在包含<$ X的信封上使用Take()。这些信封之一上的Take()将为您的钱包增加$ 0。 编写算法,以最大的金额完成游戏。 如果您正在使用Python编写解决方案,请随意使用此控制器来测试算法,这由@Maltysen提供:https://gist.github.com/Maltysen/5a4a33691cd603e9aeca 如果使用控制器,则无法访问全局变量,只能使用3个提供的API命令和局部作用域变量。(@Beta衰变) 注意:在这种情况下,“最大值”表示N> 50运行后您钱包中的中间值。我希望,尽管我很乐意被证明是错误的,但是当N增加到无穷大时,给定算法的中值将收敛。可以随意尝试最大化均值,但我有一种感觉,即平均数比中位数更容易被小N抛弃。 编辑:将信封数更改为10k,以便于处理,并使Take()更明确。 编辑2:鉴于有关meta的帖子,奖赏条件已被删除。 当前高分: PhiNotPi-$ 805,479 Reto Koradi-$ 803,960 丹尼斯-$ 770,272(修订版) Alex L.-$ 714,962(修订本)

19
星期一迷你高尔夫1:逆斐波那契解算器
星期一迷你高尔夫:每周一发布(希望!)一系列简短的代码高尔夫挑战赛。 甲斐波那契样序列使用相同的方法,获得著名斐波纳契数列 ; 也就是说,每个数字F(n)通过将序列中的前两个数字相加(F(n)= F(n-1)+ F(n-2))或减去后两个数字(F (n)= F(n + 2)-F(n + 1))。主要区别在于这些序列可以以任意两个数字开头。这些序列的零索引是有争议的,但是现在,我们将使用以下规则: 类斐波那契数列中的第0个数字是小于前一个数字的最后一个数字。 例如,斐波那契序列可以写为1, 0, 1, 1, 2, 3, 5...,因此序列中的第0个数字是lone 0。 挑战 挑战的目标是编写一个采用三个整数的程序或函数,并且采用任何格式: A和B,这是两个用来开始生成序列的数字。 N,要输出的结果序列的长度。 并从0开始输出序列的前N个数字。 细节 A,B和N可以采用任何顺序和格式,只要它们在视觉上是分开的即可。如果您使用其他订单/格式,请指定它是什么。 您可以假设A,B和N始终为正整数。 您可以假定N不大于100,并且所得序列将不包含x >= 2^31。 如果A大于B,则B是序列中的第0个数字。 输出必须用空格,逗号和/或换行符分隔。 允许使用尾部空格或换行符,但不能使用尾部逗号。 测试用例 范例1: 8 13 10 从8 13开始往后追溯,直到找到一个比前一个更大的数字,我们得到13 8 5 3 2 1 1 0 1。因此,0该序列中的第0个数字。从此开始,我们打印出0了下9个成员: …

20
通过循环三进制数字来混淆文本
挑战的目标是编写最短的函数/程序以获取输入文本,使用以下方法对其进行加密,然后返回结果。 作为示例,我将使用字符串hello world。 首先,获取输入文本。 hello world 其次,将字符串转换为三进制(以3为底)。使用此键: a = 000 b = 001 c = 002 d = 010 e = 011 f = 012 g = 020 ... w = 211 x = 212 y = 220 z = 221 [space] = 222 使用此键,hello world将变为021011102102112222211112122102010,如下所示。 h e l l …

10
视觉长乘法
有一种很好的方法可以对两个整数执行长乘法,而无需做任何事情,只能计数,偶尔可以在互联网上共享。您将每个数字的数字写成一束斜线,两个数字成90度角。然后,您可以简单地计算出现的单独列中的交点。图表可能会澄清这一点。这是一个计算示例21 * 32: 如果您用Google搜索“视觉/图形长乘”,则会发现更多示例。 在这个挑战中,您将使用ASCII艺术生成这些图。对于同一示例,输出将如下所示: \ / X / \ / X / \ X / X X X / \ / / X X X / / X \ / X / \ X / \ X X / X \ / \ 从一些示例(参见下文)中找出这些构造规则可能是最容易的,但是这里有一些细节: 相交的段X,线的非交叉段/或\。 最外面的交点之后应该恰好有一个线段。 属于不同数字的交点之间应该恰好有一个线段。如果有零位数字,将导致连续/或\分段。 您必须支持任何正输入(至少达到一些合理的限制,如2 16或2 …

20
不使用大写字母打印大写字母
哇,哇,哇...停止键入程序。不,我不是说“印刷品” ABC...。我说的是美国的首都。 具体而言,打印以下列表中给出的所有城市/州组合 以任何顺序 与您选择的定界符(例如,Baton Rouge`LA_Indianapolis`IN_...可以接受的分隔符)一样,只要毫不歧义,哪些词是城市,哪些是州,哪些是不同的条目 不使用ABCDEFGHIJKLMNOPQRSTUVWXYZ任何源代码 输出应为STDOUT或等效输出。 编辑-糟糕! <edit> 虽然打字从内存中的列表(感谢狂欢三宝,如下文所述),我显然忽略了华盛顿,这是不是一个国家资本,但就是在这首歌,有时也包括在“资金列表”(像下面的Mathematica 答案)。我原本打算将该城市列入此列表,但由于某种原因错过了它。作为结果,答案不具有城市不会受到惩罚,而且答案也有城市不会受到惩罚,无论是。本质上,是否Washington, DC包含在输出中取决于您。抱歉,伙计们! </edit> Baton Rouge, LA Indianapolis, IN Columbus, OH Montgomery, AL Helena, MT Denver, CO Boise, ID Austin, TX Boston, MA Albany, NY Tallahassee, FL Santa Fe, NM Nashville, TN Trenton, NJ Jefferson, MO Richmond, VA Pierre, SD …

30
字长的水平图
输入值 由任意数量的空格分隔的单词列表。 输出量 水平ASCII艺术图,其中第n行由*与第n个单词一样多的星号()组成。 用法示例 该>信号的用户输入,你不应该测试程序时输入它。 > This is an example histogram of word length **** ** ** ******* ********* ** **** ****** > a aa aaa aaaa aaaaa * ** *** **** ***** > double space example ****** ***** ******* 参考实施 如果对规格有疑问,则在所有输入下,程序的输出应与以下程序的输出完全匹配。 puts gets.chomp.split.map{|word| '*' * word.length}.join("\n")

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.