编程拼图和代码高尔夫

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

30
反转数字的最短方法
编写一个函数(或等效子程序)以接受单个整数值的参数,并返回通过反转参数的以10为基数的顺序而找到的(相似类型的)值。 例如给定76543返回34567
31 code-golf  number 

22
高尔夫ASCII艺术
让我们尝试打高尔夫球代表高尔夫球手的这门ascii艺术作品: '\。。|> 18 >> \。'。| O >>。'o | \。| / \。| //。” | jgs ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ 资料来源:JGS- http : //www.retrojunkie.com/asciiart/sports/golf.htm 规则: 不允许输入 不允许外部资源 输出必须完全是此文本,并以等宽字体(OS控制台,JS控制台,HTML <pre>标记等)显示,包括前导和尾随换行符。 允许使用双引号或双引号(当您输出字符串时,JS控制台会添加双引号,可以) 最好的答案是在任何一种语言中使用较少字符的答案。 玩得开心!

17
创建一个HQ9 +解释器
编写此代码的目的是为HQ9 +编程语言创建一个解释器。此编程语言 有4个命令: H-打印“你好,世界!” Q-打印程序的源代码 9-打印歌曲“ 99樽啤酒”的歌词 + -增加累加器 规则: 由于未定义累加器,因此您可以忽略命令+ 您的程序应提示您输入(此输入将是源代码)或从文件中读取源代码 不允许将“ 99瓶啤酒”的歌词放入文件中,并从文件中读取文本 不允许使用GZip或BZip等压缩算法来压缩歌曲文本:您必须创建自己的压缩算法。这不一定是复杂的算法,但是请尝试尽可能地压缩文本(请记住:这是一个代码高尔夫球,字节数最少的代码将获胜) 如果源代码包含的字符不是H,Q,9或+,则在运行任何命令之前输出“源代码包含无效字符” !这意味着,例如,如果源代码是H1,则在输出Hello, world!之前不要输出Source code contains invalid characters。否,立即输出Source code contains invalid characters 如果您的解释器同时接受大写和小写字符,则您的字符数为-8 祝好运!

4
使用线条重现图像
编写一个程序,以获取真彩色RGB图像I,要绘制的最大行数L以及每行的最小m和最大M长度。输出看起来像I的图像O,它使用L或更少的直线绘制,所有直线的欧几里德长度在m和M之间。 每条线必须是一种纯色,并且两个端点都在O的边界内,并使用Bresenham的线算法(大多数图形库已经为您完成)绘制。个别线只能是1像素粗。 所有行,即使长度为0的行也应至少占用一个像素。线可以画在彼此的顶部。 在绘制任何线条之前,您可以将O的背景初始化为任何纯色(可能取决于I)。 细节 O应具有与I相同的尺寸。 L将始终是一个非负整数。它可能大于I的面积。 m和M是M > = m的非负浮点数。两个像素之间的距离是其中心之间的欧式距离。如果此距离小于m或大于M,则不允许这些像素之间的线。 线路不应该抗锯齿。 不应使用不透明度和Alpha。 您的程序在像样的现代计算机上以不到100万像素和L不到10,000的图像运行,不应该花一个多小时。 测试影像 当然,您应该向我们展示最准确或最有趣的输出图像(我希望当L占I像素数的5%至25%之间,而m和M约为对角线大小的十分之一时,会出现这种图像。) 这是一些测试图像(单击获取原始图像)。您也可以自己张贴。 简单的图片: 这是一次人气竞赛。投票最高的提交者获胜。 笔记 让L从I中总像素的百分比以及绝对值中导出可能会有所帮助。例如>>> imageliner I=img.png L=50% m=10 M=20,>>> imageliner I=img.png L=32 m=10 M=20就像img.png是8×8像素的图像一样。对于m和M可以做类似的事情。这不是必需的。 由于线不能超出范围,所以最长的线可能是I的对角线长度。有中号比这更高不应破坏任何东西,虽然。 自然地,如果m为0且L大于或等于I中的像素数,则O在每个像素位置的长度为0“线”,则可以等于I。不需要此行为。 可以说,复制I的形状比复制颜色更重要。您可能需要研究边缘检测。

30
储物柜与饼干:五元素序列
挑战 一个简单的“间谍与间谍”挑战。 编写具有以下规范的程序: 该程序可以用任何语言编写,但不得超过512个字符(如本网站的代码块所示)。 该程序必须接受5个带符号的32位整数作为输入。它可以采用接受5个参数的函数,接受单个5元素数组的函数或从任何标准输入中读取5个整数的完整程序的形式。 程序必须输出一个带符号的32位整数。 当且仅当五个输入(被解释为一个序列)与程序员选择的特定算术序列(称为“键”)匹配时,程序才必须返回1。对于所有其他输入,该函数必须返回0。 算术序列具有以下特性:该序列的每个连续元素都等于其前任元素加上某个固定常数a。 例如,25 30 35 40 45是算术序列,因为序列中的每个元素都等于其前任加5。同样,17 10 3 -4 -11是算术序列,因为序列中的每个元素都等于其前任加-7。 序列1 2 4 8 16和3 9 15 6 12不是算术序列。 密钥可以是您选择的任何算术序列,唯一的限制是不允许涉及整数溢出的序列。也就是说,序列必须严格增加,严格减少或所有元素相等。 例如,假设您选择键98021 93880 89739 85598 81457。如果输入(按顺序)与这五个数字匹配,则程序必须返回1,否则返回0。 请注意,保护钥匙的方法应该是您自己新颖的设计。同样,不允许以任何非零概率返回假阳性的概率解。特别是,请勿使用任何标准密码哈希,包括用于标准密码哈希的库函数。 计分 每个字符计数中最短的未破解提交将被宣布为获胜者。 如果有任何混淆,请随时提出或评论。 反挑战 鼓励所有读者,包括提交了自己程序的读者,“破解”提交的内容。当提交的密钥发布在关联的注释部分时,该提交将被破解。如果提交的内容持续存在72小时而不被修改或破解,则被认为是“安全的”,随后在破解方面的任何成功都将被视为比赛的原因。 有关更新的破解分数政策的详细信息,请参见下面的“免责声明”。 破解的提交将被排除在争用之外(前提是它们“不安全”)。不应对其进行编辑。如果读者希望提交新程序,则应在单独的答案中提交。 得分最高的饼干将与获奖程序的开发者一起宣布为获奖者。 请不要破解您自己的提交。 祝你好运。:) 排行榜 倒数第二的排名(在丹尼斯提交的CJam 49提交文件中处于安全状态)。 安全储物柜 丹尼斯CJam 49 CJam …

22
创建一个对象,该对象的状态在分配时发生变化
我发现在Ruby中做到这一点非常奇怪(我不会马上说怎么做): obj = #code redacted print obj.state # Some value. LValue = obj print obj.state # Different value! 您的挑战是大致创建这种形式的代码。创建一个对象并将其分配给变量。它应该具有上面定义的某些已定义属性(或确定性,幂等方法),即使您仍使用旧标识符(上面)来引用它state,该对象在分配给新标识符(LValue上面)之后也会发生变化obj。 编辑以强调:state或等效项必须是幂等的,因此创建修改该值的访问器,或由于任何其他原因而导致在连续调用多次时返回不同的结果,不是有效的解决方案。或者,更简单地说,必须是更改状态的分配。 任何带有分配语言的语言都可以使用,尽管在某些语言中可能没有完全合法的解决方案。如果几天后没有其他人知道,我将发布我的Ruby答案,并滚动接受最高投票的答案。

30
确定一个数字是否可以被13整除(不使用13本身)。
如果您选择接受它,那么您面临的挑战是创建一个函数或程序,如果给定数字可被13整除,则输出“是”,否则将输出“否”。 规则: -不允许在任何地方使用数字13。 -也没有针对13的cop-out同义词(例如使用15-2)。 -如果不使用模数,将获得奖励积分,如果不使用除法,则将获得额外奖励。 评分: -您的分数将是代码中的字节数(不包括空格)乘以您的奖金。 -如果您不使用模数,则该奖励为0.90;如果您不使用除法,则该奖金为0.90。 -如果您都不使用,则该奖励为0.80。 -分数越低越好。 输入将始终是大于0且小于2 ^ 32的整数。 您的输出应该是简单的“是”或“否”。 澄清: -可以采用一些绕行方法来生成数字13。不允许使用简单的算术同义词,例如(10 + 3)。 - 如果给定的数字可被13整除,则函数或程序必须按字面输出 “是”或“否”。- 与往常一样,建议(但不是必须)明智的解决方案。

25
给定范围内有多少个IP地址?
受到...的启发 网络-如何计算给定范围内有多少个IP地址? 编写一个程序或函数,该程序或函数将两个字符串作为输入,每个字符串都是用标准的点分表示法表示的IPv4地址,并输出或返回此范围所覆盖的IP地址的数量,包括输入的两个IP地址。 您不得使用旨在解析IP地址的任何外部代码,库或服务。(可以接受其他字符串处理标准库函数。) 所有2 ^ 32个IP地址均相等。不区分广播,E级等。 正常的代码高尔夫球规则适用。 例如: "0.0.0.0","255.255.255.255" returns 4294967296. "255.255.255.255","0.0.0.0" also returns 4294967296. "1.2.3.4","1.2.3.4" returns 1. "56.57.58.59","60.61.62.63" returns 67372037. "1","2" is invalid input. Your code may do anything you like.

3
醉酒的打字员
背景 一位打字员回到家后,发现一些重要的信件仍需加重。为了确保他审核文本正确,他将文本字符bh vjaracter t0确定为6he。但是,他仍然设法错过了一些钥匙。 您的任务是编写模仿其ttping的cose。为了最大程度地减少错误的发生,代码应尽可能短。 键盘 键盘是标准的ANSI键盘。在下图中,红色文本显示了键的宽度。所有行均为1单位高,未标记的键为1单位宽。 这些键执行以下操作(列出只是为了防止混淆): Shift本身不会执行任何操作,但是如果在常规键之前立即按Shift键,则会更改结果。 CapsLock切换Caps Lock。如果启用了Caps Lock,则字母键将输出反大小写的字母。 Backspace删除最后输出的字符(如果有)。 Tab,Return和Space分别插入一个制表符,换行符和空格。 Ctrl,Alt只是用于演示。他们(并完全缺少键盘)什么也不做。 所有字母键都会产生标记的小写字母。如果在它们之前按Shift键,则会产生大写字母。Caps Lock可逆转情况。 所有其他键产生中间标记的字符。如果在他们之前按Shift键,则会产生在顶部标记的字符。 打字 为了生成一个字符,打字员在键盘上找到它并检查是否需要按Shift键。如果是这样,他首先尝试按住Shift键。然后,他立即尝试按目标键并释放所有Shift键。在尝试按目标键之后,他必须严格释放Shift键。 然而,由于醉酒,他经常错过钥匙。这可以通过以下方法模拟:选择一个随机角度(均匀地),在该方向上将按压位置移动一个随机量(具有适当的分布),然后按下落下的按键。 挑战 作为输入,您将收到要写入的文本和指示醉酒程度的数字参数。您将输出醉酒打字员键入的文本,以及上述算法生成的错别字。 技术指标 输入文本将仅包含可打印的ASCII,制表符和换行符。 输入参数是某种标量数值。可以在答案中指定其范围,但增大该值应增加平均未命中距离,反之亦然。 您可以将键盘缩放到任何内部尺寸;上面的单位大小仅是示例。 使用的坐标必须精确到关键高度的千分之一。 该程序应为每次调用产生不同的结果。(诸如srand(time(NULL));每秒更改之类的东西就足够了。) 遗漏距离的分布可以是正态分布,也可以是其他类似的分布(较小值的大概率,对于较大值则迅速减小;例如,负指数就可以了)。 打字员的手指只有一点。无需考虑其半径。 打字员可以瞄准钥匙内的任何地方,只要它不在边缘上即可。中心,恒定位置等有效。 选择Shift键的方式可以是任何方式。允许进行恒定选择,但是如果错过Shift键的地方到此结束,则两个Shift键都需要起作用。 如果按住Shift键,则仅会影响该键(即在另一个键之前尝试Shift键并成功按下)。按下Shift键的“普通”键不起作用。 Shift键仅在真实键之前被按下并快速释放,因此如果按住错误的键,则不会重复字符。 示例I / O 以下所有示例均来自参考解决方案,该解决方案使用距离的正态分布并始终选择左Shift。选项卡以SE表示为空格,但应显示在实际输出中。 输入: Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed posuere …

30
交换两个给定的索引
给定一个正整数数组和两个不同的有效索引,则返回该数组,其中对应于两个索引的两个元素被交换。 您可以选择使用0索引或1索引,但是下面的测试用例将使用0索引。 array m n output [1,2,3,4] 0 1 [2,1,3,4] [5,8,9] 0 2 [9,8,5] [11,13,15,3] 1 2 [11,15,13,3] [11,13,15,3] 2 1 [11,15,13,3] [11,15,15,3] 2 1 [11,15,15,3] 这是代码高尔夫球。以字节为单位的最短答案将获胜。有标准漏洞。

30
删除前导和尾随零
给定一个仅包含非负整数的非空列表/数组,如下所示: [0, 0, 0, 8, 1, 4, 3, 5, 6, 4, 1, 2, 0, 0, 0, 0] 输出已删除尾随和前导零的列表。 输出为: [8, 1, 4, 3, 5, 6, 4, 1, 2] 其他一些测试用例: [0, 4, 1, 2, 0, 1, 2, 4, 0] > [4, 1, 2, 0, 1, 2, 4] [0, 0, 0, 0, …

1
混淆了我解决暂停问题的尝试
请注意:从本质上讲,此挑战的规范很难理解。它可能至少需要一门有关可计算性理论的新生课程,或者具有同等背景的阅读知识。此外,挑战本身也相当艰巨。要回答该问题,就需要为所选语言的某些子集编写一个完整的口译员,不仅如此,而且口译员也必须采用像奎奴纳这样的形式。如果您的答案不能满足所有要求,则可以肯定不符合规范。 您无需解决暂停问题(甚至部分解决)即可解决此挑战。但是,你几乎可以肯定做必要写(您使用写在上面解释同一种语言的语言,)一个解释,虽然它不一定是功能齐全。正是这个使这成为一个有趣的挑战。 我答应为符合规范的第一个答案奖励500点奖励,这将奖励给Jo King的BF答案。 挑战 Alan Turing关于停止问题无法解决的证明的粗略简化版本如下所示: 假设我已经编写了一个程序F来解决暂停程序。即,F将另一个程序的源代码作为输入,如果停止F(G)则返回,否则返回。1G0 但是,如果我给您我的程序,F那么您可以构建另一个程序H,它以我的程序H作为输入来运行。如果F(H)return,0则H返回0,但否则故意进入无限循环。这导致了一个悖论,我们必须得出结论,F毕竟这不能解决暂停问题。 您的任务是编写程序H,但要有所不同:我不会给您我的程序。相反,您的程序将接收我程序的源代码作为输入。那是: 您的程序将以源代码形式接收我的程序作为输入。(例如,作为文件还是作为命令行输入,详细信息取决于您。) 我的程序将使用与您的程序相同的语言编写,并且还将以源代码字符串的形式接受输入。 如果我的程序返回0给定当你的程序作为输入,你的程序应该停止(和返回0)时给予我的程序作为输入。(“重现0” 的确切含义取决于您。) 如果我的程序没有停止,或者返回除0给定程序作为输入时以外的其他任何内容,则程序应无限期运行。 唯一的困难就是,要使其变得更加困难,就必须遵守以下规则: 您不能使用任何内置函数exec或eval-type函数。 您不能使用任何“作弊”方法来获取自己程序的源代码。(例如,您不能说“将其保存在名为'程序'的文件中”,然后再包含open(program)在您的程序中。) 这意味着您的程序必须是某种疯狂的超级字符串,它们不仅可以以字符串的形式重现其自身的源代码,而且还能够正确地解析和解释其编写的语言。 为了使它的疯狂程度有所减轻,只允许使用所选语言的一部分(图灵完成)。因此,如果您的程序是用Python编写的,并且仅在我的程序仅包含ifs和while循环以及基本的字符串操作时才可以运行,那么只要您的程序也仅使用这些内容就可以了。(这意味着您不必担心实现所选语言的整个标准库!)但是,您的程序确实必须运行-您不能只编写自己的语言。 这是一场人气竞赛,因此得票最多的答案将获胜。但是,如上所述,要完全满足规范要求是一个严峻的挑战,因此,根据我的判断,我将对第一个回答给予500点奖励。 请注意:毫无疑问,鉴于我使用的确切措辞,您可以通过多种方式“应对”这一挑战。但是,我真的很希望能找到能使问题变得实质的答案。预期的挑战非常艰巨,但有可能实现,我真的希望看到真正的解决方案。我不会将悬赏奖励给在我的判断中感到作弊的答案。 注意:此挑战最初是作为人气竞赛发布的,但由于没有“客观的获胜标准”,于2016年关闭,为了将其重新开放,我将其更改为Code-Golf。但是,我发现,截至2018年1月,PPCG实际上并未禁止进行流行度竞赛(这是最新的元讨论),因此首先将其关闭是违反网站政策的。我知道popcons如今并不流行,但这是一个古老的挑战,它的性质使其确实不适用于代码高尔夫球计分系统。如果仍然有人强烈认为不应该这样做,那么让我们进行一次元讨论,然后再开始进行密切投票。最后,在有人花了最后一年尝试解决方案的机会之外,请放心,它在这项挑战中将具有竞争力,并且像在代码高尔夫球中一样值得悬赏版。

3
和我一起打高尔夫
许多PPCG用户在聊天和Sandbox中都帮助创建了这一挑战,特别是Martin Ender,AdmBorkBork,Emigna和user202729 我们的社区发现有必要创建一组专门为高尔夫设计的语言,即我们所说的“高尔夫语言”。这样的语言已经从曾经辉煌的现在笨拙的GolfScript演变为光滑的简洁语言,例如Jelly和Husk。正如我们所看到的,对于一系列任务,这些语言正越来越短。因此,作为围绕高尔夫语言的显而易见的专家,我们应该一起设计一种语言,以击败其他敢于竞争的语言。介绍号角! 喇叭:从缩写BuGoL:卜 ILT 去 lfing 大号 anguage。 这项挑战将如何运作 如果您在介绍中没有得到我所提到的内容,那么这个挑战就是答案链挑战,我们每个人都为一种新型高尔夫语言的口译员提供一些帮助,从而提高了每个答案在PPCG上的竞争能力。 我将发布第一个答案,该答案由语言规范/解释器的基础组成,所有其他答案将继续。新提交的内容将提供以下内容: 语言规范的变更 最新的口译员,准确满足变更中的要求 语言的更新分数(稍后会详细介绍) 您可以通过以下三种方式之一更改规格: 您可以添加一个命令 您可以添加两个新命令 您可以编辑一个现有命令的行为 关于新解释器,您必须使用以Python编写的最新版本。它不必打高尔夫球。每个先前添加的命令必须可以使用最新的解释器以及最新的命令(您添加的命令)进行测试。更新解释器时,您也不得在任何时候使用冒犯性语言,例如注释或字符串文字等。 添加的命令可以执行您希望执行的任何操作。唯一的要求是: 它不会产生令人反感的结果 与另一个命令不同 它不会阻止示例挑战之一的完成 除了这些,它可以根据您的需要特定或通用。也可以是您想要的任何字符。如果不确定添加的内容是否构成“新命令”,请随时在评论中提问。 语言的分数 您可能已经注意到,必须在所有新提交的内容中包括该语言的分数。它的分数是阻止该挑战永远持续的原因,其定义如下: 当前分数是语言完成以下20个任务所需的字节数之和 对于每个任务,标准I / O规则都适用,标准漏洞也是如此。 20个任务: “你好,世界!” –输出字符串Hello, World! 1,2,Fizz,4,Buzz –在单独的行上输出1到100(含)之间的每个整数,其中3的倍数被替换Fizz,5的倍数被替换Buzz,两者的倍数被替换FizzBuzz 在源代码中没有任何数字的情况下生成数字2014 –在不使用源代码中任何字符的情况下输出数字20140123456789,而无需访问外部变量或随机种子 混淆后的Hello World -输出字符串Hello, World!,而无需使用任何在至少以下两个组的字符:hlwd,eor01和27(不区分大小写) 用您喜欢的编程语言唱生日快乐 –用您选择的语言输出以下内容: Happy Birthday to You Happy …

14
两只猫在奎因
挑战 制作两个程序A和B,它们都是相同语言的cat程序。连接时,AB(也应使用相同的语言)应该是一个喹。 例如,假设hello和world都是使用XYZ语言的cat程序。如果helloworld是所说语言的奎因,则您的解决方案有效。 对于那些不熟悉猫和奎因的人来说,猫程序是一种完全打印通过stdin给它的东西的程序,而奎因是一种可以打印其自己的源代码的程序。 计分和规则 串联的AB程序的总字节数就是您的分数。因为这是代码高尔夫球,所以最低分获胜。 禁止出现标准漏洞 输入必须来自stdin,输出必须进入stdout。 cat程序不需要参数。他们只需要将stdin复制到stdout。 当没有任何输入程序但没有必要为其他输入正确运行(但是可能)时,该程序应该起作用。 如果仅打印一次源代码,仅需一次终止即可。 至少需要一个字节长。 A和B可以是同一程序。 BA不必是密码子,甚至不必是有效的程序。
30 code-golf  quine 

4
生活可以丰富多彩!
栩栩如生的细胞自动机中的每个细胞仅需要一位来表示,因为它只能是生的或死的。这意味着只有两种颜色。很无聊。 普通图像的每个像素为24位(RGB中的每个像素为8位)。这意味着在以像素为单元格的正常图像中,您可以一次模拟24个逼真的游戏! 挑战 您的任务是编写一个程序,该程序将逼真的蜂窝自动机的一代规则应用于24位深度图像(以您喜欢的任何已知格式),然后输出结果图像。 24层中的每一层都将使用相同的栩栩如生的规则集,严格在其自己的层之内。这24层不会互相影响。 也 零是死细胞,一个是活细胞。 边界条件是周期性的(形成圆环)。 任何图像尺寸都可以。 输入输出 您的程序需要通过stdin或命令行(或您的语言最接近的等效语言)接受3个参数: 输入图像文件的名称。 由0到8的数字组成的字符串,以递增的顺序表示新单元格的诞生时间: 如果数字d在字符串中,则死细胞在有d个存活邻居时会恢复活力。 示例:3正常的生命 -刚好有3个存活邻居的死细胞复活。 从0到8的数字字符串,以递增的顺序表示现有的单元格何时存活: 如果数字d在字符串中,则具有d个存活邻居的存活细胞将存活到下一代,否则它们将死亡。 示例:23正常生命-只有具有2或3个邻居的细胞才能存活到下一轮。 请注意,始终使用摩尔街区。阅读这个或这对精确什么定义了一个栩栩如生的自动机和许多有趣的规则集的更多信息。 1代以后的输出图像应显示或另存为out.png(bmp或其他任何形式)。 投稿 以字节为单位的最短代码获胜。 对于某些非平凡的规则集,您需要至少包含一个测试映像及其三个后继代。如果您想不出更好的方法,请使用您的头像和正常的生活规则。 如果您愿意,可以使用这种Gosper Glider Gun,其中唯一的活物在绿色的128层中(只能确保在正常的Life中工作): 强烈建议张贴有趣的序列甚至动画。

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.