Questions tagged «code-golf»

Code-golf是在最小的源代码字节中解决特定问题的竞赛。

15
节日礼物交换
我们内部打高尔夫球的另一个问题...去年假期前后。 问题 安迪(Andy),巴布(Barb),卡尔(Carl),迪迪(Didi),伯爵(Earl)和弗兰(Fran)正在互相购买礼物。画出礼物交换的名字。 每个人买一份礼物并收到一份礼物。 没有人买自己的礼物。 多次运行解决方案应产生不同的结果(不同运行之间给与接收器对不可预测或相同)。 输入 没有。 输出值 格式如下例所示: 安迪买了倒钩 卡尔倒钩购买 了迪迪卡尔购买 厄尔-迪迪购买 弗兰伯爵购买 安迪弗兰购买
11 code-golf 

26
数学组合
编写一个程序,输入如下内容: n,k 然后计算: 然后打印结果。 数值示例: 输入: 5,2 内部计算: 打印输出: 10 我想看到一个超过65个字符的python解决方案的答案,但是显然所有语言都欢迎。 这是我的解决方案: n,k=input();f=lambda x:+(x<2)or x*f(x-1);print f(n)/(f(k)*f(n-k)) 编辑: 我承认这个问题来自codegolf网站的数学组合难题。我知道我的回答似乎无法在此问题上取得很大进展,但是这个难题的领袖们已经解决了将近一半的字符。 当前按语言分类的最低字符数为: Perl:35 红宝石:36 的Python:39 PHP的:62

2
这是Tichu的有效戏吗?
Tichu是一种纸牌游戏,其中玩家从包含52张标准纸牌的甲板上轮流玩几组纸牌,外加4张额外的纸牌: 的龙,它比任何其他卡更大的价值 的凤,其可以作为通配符作用 的狗,它通过转向你的合作伙伴 值1 的麻将(以及持有该值的人先打) 第一个玩家(据说具有“领先”)可以选择玩以下类型的卡组合之一: 一单个(例如6) 一对(JJ) 一个三重(555) 一个完整的家(QQQ33) -三和一对 一个直的(56789) - 5或更多个连续的卡 一拖拉机(223344) -对任何连续序列 然后,仅允许随后的玩家玩一组相同类型但严格更高的纸牌。例如,QQ可以在上播放JJ,但QQKK不能播放(它是拖拉机,而不是一对)。满屋是按三元组排序的(例如77722> 44499),直线和拖拉机的长度必须相同(456789不能在上方播放23456)。ace高。 有一个例外:同一张卡中的任何四张都是炸弹,并且可以在除高级炸弹之外的任何东西上玩。1个 巨龙可以自己在任何单人之上或带头(但无处可)玩。凤凰号除了可以用作通配符外,还可以在除龙以外的任何单个单张上播放。2狗只能自己带头玩,并立即结束回合。3 您面临的挑战是确定给定的Tichu剧本是否有效。 您可以接受任何形式的整数或字符串列表的两种播放方式-在任何一种情况下,您都可以选择纸牌到整数/字符的任何映射。如果有以前的播放,它将始终有效,如果没有,即玩家处于领先地位,则第一个输入将为空数组/字符串(与其他输入的类型匹配)。不保证以任何特定顺序提供卡。 您的输出必须从一组恰好两个不同的值中进行选择,其中一个值指示播放是合法的,而另一个值则指示不是合法的。 无需测试卡片组中是否确实存在这组卡(例如77766,88877由于只有四个7 ,因此不可能进行测试)-永远不会给出这种情况。 在以下测试案例中,234567890JQKA代表2到ace,分别RPD1代表龙,凤凰,狗和麻将。空字符串在此处显示为-。这些戏剧是合法的: 6 J JJ QQ 555 KKK 44499 77722 23456 56789 223344 QQKKAA 49494 72727 A R A P P R 66 7P P6 …

7
交叉序列
交叉序列 给定一个正整数列表,如果每个元素大于或等于前一个A,则称其为递增序列;否则,将其称为递增序列。如果每个元素小于或等于前一个元素,则将其称为递减序列。 一些增加的顺序: [1,2,4,7] [3,4,4,5] [2,2,2] [] 一些递减顺序: [7,4,2,1] [5,4,4,3] [2,2,2] [] 甲交叉序列是可以分解成两个不相交的子序列,一个增加的序列和其他的递减序列的列表。 例如,列表: [3,5,2,4,1] 是交叉序列,因为它可以分解为: [3, 4 ] [ 5,2, 1] 哪里[3,4]是增加的子序列,[5,2,1]是减少的子序列。我们将这样的一对(递增,递减)子序列称为交叉序列的分解。 名单: [4,5,2,1,3] 不是交叉序列;没有办法将其分解为增加和减少的子序列。 您的任务是编写一个程序/函数,将正整数列表作为输入;如果是交叉序列,则以其分解之一返回两个列表;或一些一致的“假”值(如果列表不是交叉序列)。 这是代码高尔夫球;每种语言中最短的程序/功能就是赢家。 规则: 输入是灵活的。 通常的漏洞是被禁止的。 如果有多种分解输入的有效方法,则可以输出其中一种或全部。 分解的输出格式很灵活;但是在两个子序列之间的区别上必须是明确的。 您可以使用任何一致的输出值来表示输入不是交叉序列。只要与任何交叉序列的输出相比,它都是明确的。您应该在答案中指定falsey值。 测试用例: 使用False,以指示不交叉的序列: [3, 5, 2, 4, 1] => [3, 4], [5, 2, 1] [3, 5, 2, …

9
n级衔尾蛇奎因
这种128语言的Quino Ouroboros(一个以另一种语言输出程序的程序,以另一种语言输出程序的程序(后来以125种语言输出),该程序输出原始程序)是非常令人印象深刻的。但不幸的是,它具有静态的迭代次数。 编写一个程序,其输出的程序(用另一种语言不是必需的,但它可以是),它输出一个程序,它输出一个程序等,其中n次迭代之后,输出原始程序首次(即,没有中间程序应该与原始程序相同,因为否则将忽略其输入的quine将起作用),其中n是作为输入提供的非负整数。输入不能仅仅是原始源代码中的数字(例如,放在x = <the value of n>程序的开头),它应该是以下之一: 作为命令行参数传递 从标准输入读取 作为参数传递给函数,该函数返回/输出新程序。 对于衔尾蛇的中间阶段,您的程序可以是功能齐全的程序,也可以是不带参数的函数,调用该函数时,它将返回/输出下一个。 您可能不会读取源文件本身,也可能不会使用任何类似于quine的内置函数(我不认为会有任何方法可以这样做,但是可能会有) 为了清楚起见,如果为n = 0,则程序应输出其自己的源代码。 如果为n = 1,则程序应输出另一个程序,该程序将输出原始源代码。 等等... 最小字节获胜! 编辑: 我应该写过“对于衔尾蛇的中间阶段,您的程序可以是没有输入的功能齐全的程序,也可以是没有参数的功能”。如果您的程序输出链中的下一个,则等待输入,这很好,但是您的程序不需要原始值n。
11 code-golf  quine 

22
查找投票的C因子
在此挑战中,您将通过找出一个称为C因子的数字来确定给定其他投票的情况下投票的争议性。你问什么是C因子? 好吧,假设您在一次选举中获得了多张选票。我们将使用1和0接受挑战的缘故代表在选举中两个不同的候选人。这是我们的示例选举中的十票: 0110111011 现在,假设我们想找到候选人的任何投票的C因子0。我们可以使用以下功能来做到这一点: f(o,v)=abs(o−mean(v))f(o,v)=abs(o−mean(v)) f(o,v) = abs(o-mean(v)) 在fff,o是我们要确定其C因子v的投票,并且是一组投票。因此,使用我们的函数,获取候选人的任何投票的C因子0: f(0,[0,1,1,0,1,1,1,0,1,1])=0.7f(0,[0,1,1,0,1,1,1,0,1,1])=0.7 f(0, [0,1,1,0,1,1,1,0,1,1]) = 0.7 较低的C因数表明,该投票与其他投票相比没有争议。因此,对候选人的投票0与对其他候选人的投票相比,与其他投票的区别更大1。相比之下,候选1票的C因子为0.30.30.3,因此争议较少,因为它更像其他票。 挑战 给定投票结果,编写函数f(o,v)f(o,v)f(o,v)确定投票的C因子。ov o必须是0或的整数1。 v 必须是包含零和一的任意长度的数组(或类似的容器类型,取决于语言规范)。 给定功能参数的情况下,该函数应使用上面的公式或修改的方法将结果C因子返回或打印到控制台。 祝好运!最少的字节数获胜(五天内选择获胜者)。

6
哪个真正大的数字更大?
对于喜欢更具挑战性难题的人来说,这个问题很棘手(特别是比哪个更大更难?)。 输入值 整数a1,a2,a3,a4,a5,b1,b2,b3,b4,b5均在1到10的范围内。 输出量 True if a1^(a2^(a3^(a4^a5))) > b1^(b2^(b3^(b4^b5))) and False otherwise. ^是这个问题的幂。 规则 这是代码高尔夫球。对于TIO上的任何有效输入,您的代码必须在10秒内正确终止。如果您的语言不在TIO上,则代码应在计算机上在10秒内完成。 您可以输出True或True,False和False。 测试用例 回想一下,根据指数规则,a1 ^(a2 ^(a3 ^(a4 ^ a5)))== a1 ^ a2 ^ a3 ^ a4 ^ a5。 10^10^10^10^10 > 10^10^10^10^9 1^2^3^4^5 < 5^4^3^2^1 2^2^2^2^3 > 10^4^3^2^2 6^7^8^9^10 is not bigger than 6^7^8^9^10 10^6^4^2^2 < 10^6^2^4^2 …

9
R [oman | everse]波兰语表示法
这是MDLXVII年,在这个世界中,罗马帝国从未沦陷,也从未发生过陷入黑暗时代的崩溃。由于罗马帝国时期的延长,帝国的经济稳定使技术得以快速发展。 罗马人已经开始涉足电路,并发明了一种不需要使用“等于”按钮的巧妙计算器。他们称其为“罗马波兰语符号” 为了进行计算,它们首先输入其操作数,然后输入运算。 例如,100 + 11 * 20将是C XI XX * +。 另外 罗马人发现他们经常需要同时进行多个计算,因此更喜欢该方法以某种类似于数组/列表/元组的结构“在堆栈上”返回每个值。(例如,X I + X I - CC II +将返回[11,9,202]) 挑战在于开发一种能够进行这些计算的计算器程序。 澄清:减法符号是必需的。我没有意识到这在古罗马帝国中并不是公认的特征。因此任务不明确,我对此表示歉意。 最低准则 您的输出将使用阿拉伯数字。 您只需将罗马数字转换为5000。 您将需要支持+,-,/,*操作(加,减,除和乘)。 除法是基于浮点还是基于整数是特定于实现的。两者都可以应对这一挑战。 您的输出将需要支持多达40亿个数字。 总的来说,答案最短,并且每种语言都取胜。这是一场Code Golf挑战赛,但我很喜欢这种变化。 如果出现平局,支持罗马数字大于5000或进行其他操作之类的因素将被认为是最早提交的申请。

3
Levenshtein您的来源
两个字符串之间的Levenshtein编辑距离是将一个单词转换为另一个单词的最小可能插入,删除或替换次数。在这种情况下,每次插入,删除和替换的成本均为1。 例如,之间的距离roll,并rolling为3,因为缺失花费1,我们需要删除3个字符。toll和之间的距离tall为1,因为替换的费用为1。 最初的Levenshtein问题被盗 您的任务是计算输入字符串和源之间的Levenshtein编辑差异。这是标记奎因,所以作弊基内斯(例如,读你的源代码)都不会允许的。 规则 输入将是非空的,并且将由ASCII组成,除非您的源包含非ASCII,在这种情况下,输入可能包含Unicode。无论如何,Levenshtein距离将以字符而不是字节为单位。 输出是输入和源的最小Levenshtein编辑距离。 这是代码高尔夫球,因此最短答案(以字节为单位)获胜。

6
让我们玩Rummikub!
注意:这与游戏Rummikub的变体有关 背景与规则 Rummikub是一款基于图块的游戏。有四种颜色:红色,橙色,蓝色和黑色。对于每种颜色,有13个磁贴(标记为1到13),并且还有2个与颜色无关的小丑,因此共有54件。在Rummikub的这种变体中,每位玩家获得14个磁贴,并且每局必须再获得一个磁贴,然后每回合再丢一枚,这样磁贴数是恒定的。玩家看不到彼此的瓷砖。目标是对图块进行分组,以使所有块至少属于一组(请参见下文)。当玩家将所有棋子分组时,他们放下棋盘并露出棋子。然后其他人检查所有组合是否有效,如果有效,则玩家赢得该回合。 瓷砖如何分组? 组只有两种类型: 多色组: 它们由3或4个图块组成。 它们仅包含编号相同的图块。 所有的瓷砖都是不同的颜色。 范例:RED 9, BLUE 9, BLACK 9。 单色组: 它们至少包含3个图块。 它们不能包含超过13个图块。 它们仅包含具有升序排列的不同连续编号的图块。 所有图块都具有相同的颜色。 标1 有的图块可能不会位于标有的图块之后13。 范例:RED 5, RED 6, RED 7。 等等,小丑们做什么? 小丑可以代替游戏中的任何一块。例如,我们的第一个例子可以成为 JOKER, BLUE 9, BLACK 9,RED 9, JOKER, BLACK 9或RED 9, BLUE 9, JOKER。这同样适用于我们的其他示例。但是,一个人可能不会将两个Joker放在同一组中,因此JOKER, ORANGE 8, JOKER禁止类似的事情。 任务 给定一个Rummikub切片组,确定它是否有效。您可以确保不会出现重复的图块,除了两个小丑,而且您输入的图块是有效的(例如,60不会出现类似的内容)。 输入输出 您可以采用任何标准方法输入并提供输出。 …

6
压缩RLE数据以绘制ASCII图形
这个问题是基于什么我想出了回答另一个问题。 有时,这里的问题要求画一些ASCII艺术。一种用于存储数据的简单方法是RLE(行程编码)。所以: qqqwwwwweeerrrrrtttyyyy 变成: 3q5w3e5r3t4y 现在,要画出很大的ASCII艺术,您可能正在获取如下数据(忽略换行符): 19,20 3(4)11@1$20 11@19,15"4:20 4)19,4:20 11@ ^^^ Note that this is "20 whitespaces" (Character count: 45) 用于ASCII艺术的字符永远不会是小写或大写字母或数字,而只能是符号,标记和符号,而总是在可打印的ASCII字符集中。 您想在该字符串中节省一些空间,所以用大写字符集替换数字(“ A”等于1,“ B”等于2,直到“ Z”等于26),因为您永远不会重复一个角色超过26次。这样就得到: S,T C(D)K@A$T K@S,O"D:T D)S,D:T K@ (Character count: 34) 最后,您注意到某些(letter + symbol)组正在重复,因此您将在字符串中出现3次或多次的组替换为小写字符集(按顺序或出现在字符串中,但将其存储在缓冲区中)进行替换(每次替换的格式为“ group + substitution char”),其余字符串保持原样。所以以下几组: S, (3 times) T (4 times) K@ (3 times) …

9
这个日期格式是什么?
对于公历,日期格式因国家/地区而异。公认的三种主要格式: YY-MM-DD (大端) DD-MM-YY (小尾数) MM-DD-YY (中端) 您的任务是编写一个程序,给定一个表示日期的输入字符串,该程序输出所有可能的日期格式,以此字符串可以将其解释为日期。 规则 输入日期的格式为xx-xx-xx,其中每个字段均为两位数字,且填充零。 该日期始终有效(因此您无法获得14-13-17之类的信息) 日期始终至少是上述格式之一(因此您无法获得17-14-11之类的信息) 因为实际上我们处于并行世界中,所以每年的每个月都有31天,因此没有leap年 日期为2001年1月1日至2099年12月31日之间 如果日期只有一种格式,则代码必须仅打印该日期(仅允许尾随换行符) 如果日期有多种格式,则必须用逗号,空格,换行符或它们的组合分隔 您必须输出格式的确切名称。不允许使用不同的任意值。 除尾随空格外,不允许任何前导或尾随字符 输出必须为小写 不允许使用任何内置的日期或日历功能 输出格式不必排序 例子 Input Output 30-05-17 big-endian, little-endian 05-15-11 middle-endian 99-01-02 big-endian 12-11-31 big-endian, little-endian, middle-endian 02-31-33 middle-endian 这是代码高尔夫球,因此以字节为单位的最短代码获胜。鼓励解释。
11 code-golf  date 

4
命名吹牛之手
背景 吹牛是一种纸牌游戏,其概念类似于扑克,但比扑克简单。吹牛由三张牌组成,从高到低排名如下: 三种-所有三张牌的等级相同。命名为“三王”等 运行冲洗,也称为直接冲洗。相同花色和连续等级的所有三张牌。该手牌由三张牌以升序命名,后跟“弹跳”字样,以区别于简单的奔跑/直行,例如“弹跳时十个插孔的女王”。请注意,王牌是高位还是低位,但不是两者都高-“王牌王牌二”不是一轮。 直奔。如上所述,但不需要搭配西装。简单地命名为例如“十个杰克女王”。 同花大顺-所有三张牌都相同,以最高级别命名,例如“ As同花顺”。 配对-两张同等级的牌,另一张同等级的牌。命名为“三元组”等 以最高等级命名的任何其他组合,例如“王牌高”。 挑战 给定三张纸牌,输出他们输出的吹牛手的名称。 卡片将以三个2个字符的字符串输入,或者以单个6个字符的字符串连接(无论您的实现方式是哪一个),其中每对中的第一个是等级(2 ... 9,T,J,Q, K,A),第二个表示西装(H,C,D,S)。 适用标准高尔夫球规则-编写程序或函数以接受此输入并输出手的名称,如上所述。 您可以假定输入将是有效的(在上述范围内,等级和花色,没有重复的卡片),并且在任何情况下都可以使用,但顺序不是特定的。 输出必须全部大写,全部小写或大写,例如标题大小写或句子大小写。数字等级应拼写清楚,例如“十”而不是10。 样本输入和输出: 2H3C2D => "pair of twos" TD8C9C => "eight-nine-ten" 4SKS9S => "king flush" 4D4H4S => "three fours" 5H3H2C => "five high" 2D3DAD => "ace-two-three on the bounce" 6D6C6H => "three sixes" 这是我第一次尝试在此站点上进行挑战,请提出一些改进建议,但要谨慎:)

12
字母的翅膀!
您的任务是打印以下确切文本: az za abyz zyba abcxyz zyxcba abcdwxyz zyxwdcba abcdevwxyz zyxwvedcba abcdefuvwxyz zyxwvufedcba abcdefgtuvwxyz zyxwvutgfedcba abcdefghstuvwxyz zyxwvutshgfedcba abcdefghirstuvwxyz zyxwvutsrihgfedcba abcdefghijqrstuvwxyz zyxwvutsrqjihgfedcba abcdefghijkpqrstuvwxyz zyxwvutsrqpkjihgfedcba abcdefghijklopqrstuvwxyz zyxwvutsrqpolkjihgfedcba abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba abcdefghijklopqrstuvwxyzyxwvutsrqpolkjihgfedcba abcdefghijkpqrstuvwxyzyxwvutsrqpkjihgfedcba abcdefghijqrstuvwxyzyxwvutsrqjihgfedcba abcdefghirstuvwxyzyxwvutsrihgfedcba abcdefghstuvwxyzyxwvutshgfedcba abcdefgtuvwxyzyxwvutgfedcba abcdefuvwxyzyxwvufedcba abcdevwxyzyxwvedcba abcdwxyzyxwdcba abcxyzyxcba abyzyba aza 允许以下内容: 在行尾保留尾随空格 大写而不是小写 尾随换行符 请记住,这是code-golf,所以字节数最少的代码将获胜。

2
结合土耳其动词
输入值 动词,一个与正则表达式匹配的字符串([a-pr-vyzıöüçğş]*[aeıioöuü][bcçdfgğhj-nprsştvyz]+|([a-pr-vyzıöüçğş]*[aeıioöuü]){2})(mak|mek) 复数,真值或假值 person,值为1、2或3的整数 时态,值为1、2或3的整数 输出量 土族动词的共轭形式动词,在人ST / ND / RD人,复数如果复数是TRUE和单数,如果它不是在 如果时态为1,则表示现在;否则为1。 如果时态为2,则表示现在。 如果时态为3,则表示将来。 规则 土耳其语动词包含三个要素,依次排列: 所述干,通过去除形成mak或mek从不定式的端部; 时态的符号,即: 对于简单的礼物: -r如果词干以元音结尾; -ir根据元音和声规则(请参见下文),如果词干包含多个音节(即元音),或者来自以下不规则动词之一:almak,bilmek,bulmak,durmak,gelmek,görmek,kalmak,olmak, ölmek,sanmak,vermek,varmak,vurmak; -如果词干包含一个音节并且未在上面的不规则动词中列出,则按照元音和声规则。 对于连续的现在,-iyor,其中i根据元音和声规则变化。以元音结尾的词干在添加此后缀之前先将其删除,然后该后缀与单词中倒数第二个元音(由正则表达式保证存在)协调。 为将来: -如果词根以辅音结尾,则根据元音和声规则进行-ecek; -如果词根以元音结尾,则按照元音和声规则进行-yecek。 在所有情况下,根据元音和声规则,使用个人后缀来指示操作的执行者: |Singular|Plural| |---|--------|------| |1st| -im | -iz| |2nd| -sin |-siniz| |3rd| (none) | -ler| 将来时的最后一个k在-im和-iz之前变为ğ,因此例如会屈服。(almak, TRUE, 1, 3)alacağız 元音和声规则 土耳其语元音按其在口中的位置分为两组:后面(a ı o u)和前面(e …

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.