编程拼图和代码高尔夫

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

2
解释基普尔!
介绍 Kipple是Rune Berg于2003年3月发明的基于堆栈的深奥编程语言。 Kipple有27个堆栈,4个运算符和一个控制结构。 堆栈 堆栈被命名为a- z并包含32位带符号整数。还有一个特殊的堆栈,@使输出数字更加方便。当将数字压入时@,实际上将压入该数字的ASCII值。(例如,如果您将12推到@,它将推49,然后推50。@) i在执行程序之前,将输入压入输入堆栈。解释器将i在执行之前要求存储值。执行完成后,输出堆栈上的所有内容o都会弹出以ASCII字符形式输出。由于这是Kipple唯一的IO机制,因此无法与Kipple程序进行交互。 经营者 操作数可以是堆栈标识符或带符号的32位整数。 推送:>或< 语法:Operand>StackIndentifier或StackIndentifier<Operand Push运算符将操作数向左移并将其推入指定的堆栈。例如,12>a将值12推入stack a。a>b将从堆栈中弹出最高值a并将其推入堆栈b。弹出空堆栈总是返回0 a<b相当于b>a。a<b>c从弹出最高值,b并同时推入c和a。 加: + 句法: StackIndentifier+Operand Add运算符将堆栈上最顶层项目和操作数之和压入堆栈。如果操作数是堆栈,则从中弹出值。例如,如果堆栈的最高值为a1,a+2则将3压入堆栈。如果a为空,a+2则将2推入。如果堆叠的最值a和b是1和2,然后a+b将从栈中弹出的值2 b和3推入堆栈a。 减去: - 句法: StackIndentifier-Operand 减法运算符的工作方式与加法运算符完全相同,只是它减去而不是加法。 明确: ? 句法: StackIndentifier? 如果最上面的项目为0,则Clear运算符将清空堆栈。 解释器将忽略操作符旁边不存在的所有内容,因此以下程序将起作用:a+2 this will be ignored c<i。但是,添加注释的正确方法是使用#字符。#执行前,a 和行尾字符之间的所有内容都将被删除。ASCII字符#10在Kipple中定义为行尾。 操作数可以由两个运算符共享,例如a>b c>b c?可以写为a>b<c?。 该程序1>a<2 a+a将导致a包含值[1 4](从下到上),而不是[1 3]。对于-操作员也是如此。 控制结构 Kipple中只有一种控制结构:循环。 句法: (StackIndentifier code …
12 code-golf  interpreter  code-golf  string  code-golf  math  string  code-golf  ascii-art  path-finding  code-golf  string  ascii-art  code-golf  interpreter  binary  logic-gates  logic  code-golf  ascii-art  code-golf  graph-theory  code-golf  string  code-golf  number  sorting  code-golf  number-theory  random  cryptography  polynomials  code-golf  number  code-golf  math  number  sequence  code-golf  quine  code-generation  code-golf  arithmetic  set-theory  code-golf  sequence  code-golf  code-golf  string  math  fastest-code  optimization  code-golf  code-golf  internet  stack-exchange-api  code-golf  array-manipulation  code-golf  string  internet  string  code-challenge  internet  test-battery  code-golf  math  pi  code-golf  arithmetic  primes  code-golf  array-manipulation  code-golf  string  code-golf  string  palindrome  code-golf  sequence  number-theory  fastest-algorithm  code-golf  math  number  base-conversion  code-golf  number-theory  sorting  subsequence  search  code-golf  permutations  code-challenge  popularity-contest  code-generation 

8
自动数组
每个人都喜欢嵌套列表!但是,有时很难创建嵌套列表。您必须决定是否要将其嵌套得更深,或者是否需要将其嵌套得更浅。因此,对于您的挑战,您必须“自动”列表。要自动列出列表,请比较列表中的每对项目。 如果第二个元素较小,则通过在两个元素之间插入闭合和打开括号来分隔这两个元素,如下所示: } { {2 , 1} 例如,{2, 1}变为{2}, {1},并且{3, 2, 1}变为{3}, {2}, {1} 如果第二项相同,则保持不变。例如,{1, 1, 1}保持不变,{2, 1, 1, 1}将变为{2}, {1, 1, 1}。 如果第二个项目较大,则将每个后续项目嵌套更深一层。例如,{1, 2}将成为{1, {2}}并且{1, 2, 3}将成为{1, {2, {3}}} 挑战 您必须编写一个接受数字列表的程序或函数,并在自动嵌套后返回相同的列表。以您的语言本机列表格式(或最接近的替代格式)或字符串形式输入此输入。您不必像我在示例中那样使用花括号。您可以使用语言中最自然的括号类型,只要这是一致的即可。您可以放心地假设列表将仅包含整数。您也可以假设列表中至少包含2个数字。这是一些示例IO: {1, 3, 2} --> {1, {3}, {2}} {1, 2, 3, 4, 5, 6} --> {1, {2, {3, {4, …

3
广义生日问题
今晚,未婚夫带我出去吃饭庆祝我的生日。当我们外出时,我听说在一家50人的餐厅里,向5位不同的客人(包括我自己)唱着生日快乐。这让我感到奇怪-最初的生日问题(确定一个房间中2 N个人共享同一生日的概率)非常简单明了。但是,如何计算至少k有人中N有人共享同一生日的概率呢? 如果您想知道,那么在50个共有相同生日的人中,至少有5个人的概率约为1/10000。 挑战 给定两个整数N和k,其中N >= k > 0,输出k一组中至少N有人共享同一生日的概率。为简单起见,假设总是有365个可能的生日,并且所有日子都有相同的可能性。 对于k = 2,这归结为最初的生日问题,概率为1 - P(365, N)/(365)**N(其中P(n,k)是n个元素形成的k长度排列的数量)。对于的较大值k,Wolfram MathWorld的这篇文章可能会很有用。 规则 输出必须是确定性的,并且对于您选择的语言必须尽可能准确。这意味着没有蒙特卡洛估计或泊松近似。 N且k不得大于您选择的语言中可表示的最大整数。如果您选择的语言对整数没有硬性限制(除了内存限制),那么N它k可能会很大。 由浮点误差引起的精度误差可以忽略不计-您的解决方案应假定为完全精确,无限精度的浮点数。 测试用例 格式: k, N -> exact fraction (float approximation) 2, 4 -> 795341/48627125 (0.016355912466550306) 2, 10 -> 2689423743942044098153/22996713557917153515625 (0.11694817771107766) 2, 23 -> 38093904702297390785243708291056390518886454060947061/75091883268515350125426207425223147563269805908203125 (0.5072972343239854) 3, 3 -> 1/133225 (7.5060987051979735e-06) 3, …

9
N选择列表
给定一个integers列表L和一个integer N,输出L分成N相等长度的子列表。 不可分割的长度 如果N不除的长度L,则不可能所有子列表都具有相等的长度。 无论如何,输出的最后一个子列表是调整其长度以包含列表其余部分的子列表。 这意味着L除最后一个列表外的所有子列表都应为length length(L) // N,其中//为楼底分隔(例如3//2 = 1)。 一些规则 L 可以为空。 N >= 1。 您可以使用任何所需的内置函数。 您可以通过接受输入STDIN,作为函数参数,或类似的东西。 您可以将输出打印到STDOUT,从函数返回它或类似的东西。 您可以为列表和整数选择任何格式,只要它是您语言中最自然的列表和整数表示形式即可。 测试用例 Input: [1,2,3,4], 2 Output: [[1,2],[3,4]] Input: [-1,-2,3,4,-5], 2 Output: [[-1,-2],[3,4,-5]] Input: [1,2,3,4], 1 Output: [[1,2,3,4]] Input: [4,8,15,16,23,42], 5 Output: [[4],[8],[15],[16],[23,42]] Input: [4,8,15,16,23,42], 7 Output: [[],[],[],[],[],[],[4,8,15,16,23,42]] Input: [2,3,5,7,11,13,17,19,23], 3 …

30
到处都是蛇
挑战 挑战很简单:打印一条蛇。 您将获得蛇的长度作为输入。 长度为2的蛇看起来像这样: ==(:)- 长度为7的蛇看起来像这样: =======(:)- 换句话说,一条蛇的长度等于头部前有多少等号。 用法 假设我做了一个C ++实现并将其编译为./getsnake。 我可以这样运行: $ ./getsnake 10 ==========(:)- 澄清说明 不允许出现标准漏洞。 您可以以任何可接受的方式获取输入和输出。 您可以假设所有给定的输入均为正整数。 您可以编写函数而不是常规程序。

3
自指代多项式
对于每个给定的度数n,都可以构造(至少一个)整数多项式p,使得p(k)(p对求值k)是x^k所有多项式中项的系数0 <= k <= n。为了使它们唯一,我们要求前导系数(的系数x^n)为正且最小。 这些多项式具有一些有趣的属性,您可以在线程中找到一些启发我进行此挑战的参考。您还可以在https://oeis.org/A103423中找到这些多项式 先验的意外属性之一是根的行为取决于n: 来源(通过/ u / zorngov和/ u / EpicSauceSc2) 任务 给定一个非负整数n输出,自相关积分多项式的度数n具有最小正超前系数。 细节 输出可以是任何人类可读的形式,可以是字符串x^2-x-1,也可以是系数列表[1,-1,-1]。(系数的顺序也可以相反,只需保持一致即可。) 前几个输出 n=0: 1 n=1: x n=2: x^2-x-1 n=3: 10*x^3-29*x^2-6*x+19 n=4: 57*x^4-325*x^3+287*x^2+423*x-19 n=5: 12813*x^5-120862*x^4+291323*x^3+44088*x^2-355855*x-227362

5
显示ASCII的纸屑分数
纸牌游戏是一个有趣的游戏,因为您需要一个特定的棋盘来为您的游戏打分。写字板看起来像这样: 注意第一列在上升时在左边,然后在下降时在右边,然后在上升时回到左边。 这是纸牌上绘制不良的ASCII艺术作品的样子: * * * ----------- ------- / * \ |*|*|*| /* * *\ |*|*|*| / * * * \ |*|*|*| | * * | |*|*|*| |* * * * * *| |*|*|*| ------- ------- ------- |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| |*|*|*| …

4
三个无法区分的骰子
给定三个骰子掷骰(1-6的整数值)(以便无法区分),将它们转换为两个具有相同分布的公平骰子的总和。 三对一的答案是将它们全部取模6。最终结果是一个完美的平坦分布,六个数字中的每个数字均具有相同的可能性(就像一个骰子一样)。 通过将它们全部取模为6,可以很容易地做到三对一。最终结果是一个完全平坦的分布,六个数字中的每个数字均具有相同的可能性(就像一个骰子一样)。您的挑战是三对二做同样的事情。 受到Standupmath的“三个难以区分的骰子之谜”的启发。还发布了后续的“解决方案”视频,但是争论一种或另一种方式的“优雅”有点主观。计数字符不是。:D 使用说明 编写一个程序或函数,该程序或函数接受三个排序的整数/数字1-6,并输出或返回单个整数2-12,这样,对于216种可能的输入,输出的分布为: 222222 333333333333 444444444444444444 555555555555555555555555 666666666666666666666666666666 777777777777777777777777777777777777 888888888888888888888888888888 999999999999999999999999 AAAAAAAAAAAAAAAAAA BBBBBBBBBBBB CCCCCC (我使用十六进制来保留单个字符;十进制输出是可以的) 因为骰子是无法区分的,所以它们没有内在的顺序,因此没有排序的输入。您不能简单地“丢掉第三个”,因为那样会模棱两可。 细节 分数是程序的长度(以字节为单位) 该程序可以是一个以某种方式调用的函数,也可以是从stdin读取的可执行脚本,也可以是任何方便的方法。 不会通过从其他来源获取熵来“重新滚动” 示例(和测试) 无需进行任何形式的概率测试,就很容易探究所有三个骰子的216(6³)个情况,并断言您的函数将每个值返回应有的次数。它将使用相同的参数进行调用(例如,假定case 1, 2, 3和3, 2, 1...无法区分并且(任意)转换为1, 2, 3)。 下面的Python中提供了示例答案(极端暴力且效率低下)和测试套件。希望测试位足够清晰,可以移植到您选择的语言,尽管执行stdin / stdout会有所不同。测试代码仅用于测试,不会打分(尽管如果您想为您的语言或I / O方法的其他用户提供它,可能会很有用)。 # 6x6 lists of numbers with digits sorted LUT = [ [[124], [133, …
12 code-golf  number 

3
我有机会赢得大奖吗?
我在当地的ACM分会向参加会议的人员颁发奖品。但是,如果您解决了编程难题,您获胜的机会就会增加(但是我总是会解决难题)。因此,有些人只有1个条目,而其他人只有2个条目。抽奖程序的工作方式不是在有人解决难题时添加其他条目。取而代之的是,它跟踪一个人拥有的“生命”数量,从而减少了在该随机抽样算法的每遍操作中是否选择了该人。所以它是这样的: Doorknob: 1. xnor: 2. Justin: 2. Alex: 1. Dennis: 2. 然后程序随机选择之一[Doorknob, xnor, Justin, Alex, Dennis],递减数字(例如选择Justin): Doorknob: 1. xnor: 2. Justin: 1. Alex: 1. Dennis: 2. 并重复。如果某人的“生命”数量达到0(让我们Justin再次选择),那么他们将从列表中删除: Doorknob: 1. xnor: 2. Alex: 1. Dennis: 2. 这一直持续到剩下一个人为止。那个人就是赢家。 现在真正的问题是,我赢了的概率是多少? 您将获得两个输入: n。这是参加挑战的人数 k。这是n指拥有2条生命的人数。此号码始终包含您。 因此,如果我有一个函数p叫p(10, 5),这就是赢得奖金的概率,总共有10个人,其中5个人只有1人生,而5(包括您)有2人生。 您应该输出准确或十进制形式获胜的概率。无论如何,答案必须精确到小数点后第四位,包括小数点后第四位。是否舍入到该数字取决于您。 您的解决方案可以是随机化的溶液,其输出的答案为4 个与小数位高概率。您可能会假设您使用的内置RNG确实是随机的,并且它必须以至少90%的概率输出正确的答案。 此外,您的代码只需要用于n, k <= 1000,尽管我确实提供了比那些好奇的用户更大的测试用例。 测试用例 …

1
有多少个正方形?
这种挑战是由经常漫游在Facebook上一样,看起来画面灵感此。除了我们的基本广场看起来像这样: ┌─┬───┬─┐ ├─┼─┬─┼─┤ ├─┼─┴─┼─┤ ├─┼─┬─┼─┤ └─┴─┴─┴─┘ 该正方形由n x m1x1正方形组成,您必须计算该正方形内可以容纳多少个子正方形(1x1、2x2、3x3、4x4、5x5等)。正方形可能会丢失一些网格线(例如上例),也可能像下面的例子中那样完整。这意味着数学分析是没有可能(据我所知)。 输入: n建立正方形的输入的线数(); 由以下字符组成的正方形:─ ┐ ┌ └ ┴ ┘ ┬ ├ ┤ ┼ |跨n输入行。 输出: 可以容纳在输入正方形内的任何大小的正方形数量(我们在这里只需要一个数字,而每个大小都不需要一个数字)。 获奖标准: 最小的答案(字节数)获胜。 测试用例: 在: 5 ┌─┬─┬─┬─┐ ├─┼─┼─┼─┤ ├─┼─┼─┼─┤ ├─┼─┼─┼─┤ └─┴─┴─┴─┘ 出: 30 在: 3 ┌─┬─┐ ├─┼─┤ └─┴─┘ 出: 5 在: 5 ┌─┬─┐ ├─┴─┤ ├───┤ ├─┬─┤ └─┴─┘ …

2
旋转安全的拉丁方格
拉丁方是在X或Y列中没有重复符号的正方形。例如: ABCD DABC CDAB BCDA 是一个这样的广场。请注意,每一列和每一行如何包含相同的4个字母的排列。 但是,我们的拉丁方有一个问题: 如果我将第二行(DABC)1向左旋转,我将得到ABCD,这与上面的排列相同。 如果不可能旋转任何一列/行并获得另一列/行,那么我们认为正方形是旋转安全的。 例如: ABCD BDAC CADB DCBA 是旋转安全的。网格具有以下属性: 点[0,N]使用第N个符号 点[0,N]和[N,0]始终是相同的符号。(我也想说[x,y]和[y,x]也总是相同的字母,但我无法证明它) 您的任务是在传递N时打印出1个旋转安全的拉丁方格。 我不在乎是否输出字母,数字,列表或2D数组。 如果使用数字,则第一列和第一行必须是0,1,2,3,...(按此顺序)。如果使用字母,则必须是A,B,C,D,.... 例如,如果输入为4,则应打印: 0,1,2,3 0,1,2,3 1,3,0,2 or 1,0,3,2 2,0,3,1 2,3,1,0 3,2,1,0 3,2,0,1 没有大小小于4的旋转安全拉丁方。如果N小于4,我不在乎您的程序会做什么。出于好奇,旋转安全方数为(从4开始): 2,5,5906,(too long to calculate) 这是一个代码问题,所以请尝试使用您喜欢的语言尽可能短地回答!

13
种植一棵树mo!
这是我的朋友托马斯。他是一半的树,一半的图释。 | | | :D | | | 他很孤独。让他结识一些朋友吧! 给定一个基于文本的表情符号作为输入(例如ಠ_ಠ,:P,>_>,不😀,🤓或🐦),输出对应的treemote。 Treemote的长度是多少个字符(基本上是字符串的大多数内置长度函数)。因此,ಠ_ಠ具有长度为3。 长度n为treemote的语法如下: |< 2+n spaces>| * ceil(n/2) | <emote> | (note the spaces) |< 2+n spaces>| * ceil(n/2) 因此,任何长度为3的树状节点都将看起来像: | | | | | ಠ_ಠ | | | | | 他的ceil(n/2)两边都有换行符分隔的主干段,每个主干段2 + n内都有空格。 挑战:给定基于文本的表情符号,输出相应的treemote。 其他规则: 这是code-golf,这意味着我要您编写短代码。 不允许出现标准漏洞。 除非您的语言无法处理,否则您必须支持非ASCII字符。 测试用例: ^_^ …

3
紫菜表计算和未知在ZFC中终止的算法
将紫菜表提供的还没有被证明在数学的标准公理系统终止程序的例子ZFC但是当一个人承担非常大基数公理就终止。 介绍 经典紫菜表是独特的有限代数与底层集合和操作,其满足的身份,并且其中用于和其中。An{1,...,2n}*x * (y * z)=(x * y) * (x * z)x*1=x+1x<2n2n*1=1 有关经典Laver表的更多信息,请参见Patrick Dehornoy所著的《辫子和自我分配》。 挑战 1*32在经典Laver表中计算并在找到nwith 时恰好终止的最短代码(以字节为单位)是什么?换句话说,程序仅在找到with时终止,否则它将永远运行。1*32<2nn1*32<2n 动机 一个秩为秩基数(也称为I3-基数)是一个非常大的水平无穷的,如果一个假设秩为秩基数的存在,那么一个人能够证明更定理如果一个不超过假设存在等级为基数的基数。如果存在一个秩为秩基数,再有就是一些经典紫菜表哪里。但是,尚无ZFC中的证明。此外,已知的是,至少其中大于(这是一个非常大的数量,因为阿克曼函数是一个快速增长的函数)。因此,任何此类程序都将持续极长的时间。An1*32<2n1*32<2nn1*32<2nAck(9,Ack(8,Ack(8,254)))Ack 我想看看可以编写多短的程序,以便我们不知道该程序是否使用标准公理系统ZFC终止,但是我们确实知道该程序最终在一个更强大的公理系统(即ZFC + I3)中终止。这个问题的灵感来自斯科特 ·亚伦森(Scott Aaronson)最近的一篇文章,在这篇文章中,亚伦森和亚当·叶迪迪亚(Adam Yedidia)建造了具有8000个州以下的图灵机,以至于ZFC无法证明图灵机不会终止,但是当人们假设大的基本假设时,已知该图灵机不会终止。 经典Laver表的计算方式 当计算紫菜表通常是方便使用的事实,在代数,我们对所有的。An2n * x=xxAn 以下代码计算经典Laver表 An #table(n,x,y)在A n中返回x * y 表格:=功能(n,x,y) 如果x = 2 ^ n则返回y; elif y = 1然后返回x + 1; 否则返回table(n,table(n,x,y-1),x + …

3
尽量减少那些人
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Code Golf Stack Exchange 的主题。 3年前关闭。 您的任务是使用最少的个数和仅运算符+或来构建自然数-。例如,数字7可以写成1+1+1+1+1+1+1=7,但也可以写成11-1-1-1-1=7。第一个使用7,而第二个仅使用6。给定一些自然数,您的任务是返回可使用的最小数n。 这是代码高尔夫,因此以字节为单位的最短有效代码获胜。 测试用例 输入=>输出 0 => 2 (since 1-1=0) 7 => 6 121 => 6 72 => 15 1000 => 7 2016 => 21

9
查找小数表示形式的重复!
在2年前的这一挑战中,我们发现了一个单位分数()的周期1/n where n is a natural number。 现在,您的任务是编写一个程序/函数来查找单位分数的重复项。 该repetend是十进制扩展其重复无限,等的部分: 的十进制表示形式1/6是0.16666...,则重复数为6。 的十进制表示形式1/11是0.090909...,则重复数为09。 的十进制表示形式1/28是0.0357142857142857142857...,则重复数为571428。 眼镜 以任何合理的格式输入。 用十进制,字符串或list输出重复。 对于1/7(0.142857142857...),您必须输出142857而不是428571。 对于1/13(0.076923076923076923...),您必须输出076923而不是76923。 请不要蛮力。 测试用例 Input Output 1 0 2 0 3 3 7 142857 13 076923 17 0588235294117647 28 571428 70 142857 98 102040816326530612244897959183673469387755 9899 000101020305081321345590463683200323264976260228305889483786241034447924032730578846348115971310233356904737852308313971108192746742095161127386604707546216789574704515607637135064147893726639054449944438832205273259925244974239822204263056874431760783917567431053641781998181634508536215779371653702394181230427315890493989291847661379937367410849580765733912516415799575714718658450348520052530558642287099707041115264168097787655318719062531568845337912920497019901 计分 这是代码高尔夫球。以字节为单位的最短解决方案获胜。 没有答案会被接受,因为目标不是找到能够产生最短解决方案的语言,而是找到每种语言中最短解决方案的语言。 排行榜 显示代码段 var QUESTION_ID=78850,OVERRIDE_USER=42854;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function …

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.