编程拼图和代码高尔夫

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

3
计算构成唯一集合的数组
这个问题具有类似的设置,以找到适合一组和的数组,尽管其目标完全不同。 考虑一个A长度数组n。该数组仅包含正整数。例如A = (1,1,2,2)。让我们将定义f(A)为的所有非空连续子数组之和的集合A。在这种情况下f(A) = {1,2,3,4,5,6}。产生步骤f(A) 如下: 的子阵列A是(1), (1), (2), (2), (1,1), (1,2), (2,2), (1,1,2), (1,2,2), (1,1,2,2)。它们各自的总和为1,1,2,2,2,3,4,4,5,6。因此,您从此列表中获得的集合是{1,2,3,4,5,6}。 如果没有其他相同长度的数组,则我们将数组称为A 唯一数组,除了反向数组。作为示例,但是没有其他长度数组会产生相同的和集。Bf(A) = f(B)Af((1,2,3)) = f((3,2,1)) = {1,2,3,5,6}3 我们将仅考虑元素为给定整数s或的数组s+1。例如,如果s=1数组仅包含1和2。 任务 任务,对于给定n和s是计算该长度的独特阵列的数量。您可以假设s介于1和之间9。 您不应该算数组的倒数以及数组本身。 例子 s = 1答案永远是n+1。 s = 2,从n = 1上往下数的答案是: 2,3,6,10,20,32,52,86 s = 8,从n = 1上往下数的答案是: 2,3,6,10,20,36,68,130 得分了 对于给定n的代码,您的代码应输出s从1到的所有值的答案9。您的分数是n在一分钟内完成的最高分。 测试中 我将需要在ubuntu机器上运行您的代码,因此请尽可能详细地说明如何编译和运行您的代码。 排行榜 …


12
拆分它。但不是所有的!
受此StackOverflow问题的启发。 输入: 我们将接受三个输入: D要分割的分隔符 一个I介于两个字符之间的字符,我们将忽略分隔符(我知道,这听起来有些含糊,但我将在下面进行解释) 一串 S 输出: 包含拆分后的子字符串的列表/数组。 例: Input: D = ',' I = '"' S = '11020199,"Abc ",aduz,,444,bieb,dc,2 ,2222.00,whatever 5dc,222.22,22.00,"98,00","12,000,000",21-09-2018, 06:00,",-,"' Output: ['11020199', 'Abc ', 'aduz', '', '444', 'bieb', 'dc', '2 ', '2222.00', 'whatever 5dc', '222.22', '22.00', '98,00', '12,000,000', '21-09-2018', ' 06:00', ',-,'] 为什么?有关逗号分割通常也分裂98,00,12,000,000并,-,在二/三段。但是由于它们在I输入字符中,因此我们忽略此处的拆分。 挑战规则: 您可以假设I输入字符串中总是有偶数个字符。 您可以假定该字符I将始终有一个D下一个字符(除非它是输入的第一个或最后一个字符),但仍然可以正确分割。所以你不会有类似之类的D …
11 code-golf  string 

9
每个人都应该有一个朋友
孤立字符是没有相邻字符的相同类型的字符(除了换行符)。相邻字符可以在左侧,右侧上方或下方,但不能在对角线处。例如下面的文本H是孤立的: Ybb YH% %%%% 所有其他字符不是孤立的,因为它们每个都至少有一个相邻的相同类型的其他字符。 您的任务是编写一个将字符串作为输入并确定独立字符数的程序。 计分 您的答案将由两个指标评分。第一个是程序中孤立字符的数量。您应该力图将其最小化。第二个将是程序中的字节数。您也应该最小化它。程序大小将成为第一个条件的决胜局。 附加规则 您应该支持可打印的ascii范围的输入以及程序中使用的所有字符。 您可能认为换行符是换行符或换行符后跟换行符。 您可以采用任何合理的格式输入。这包括行列表。 测试用例 Ybb YH% %%%% 1个11 Aaaab uuu yyybbb 222 A 1个11 qqWWaaww 000

1
雷区上的礼貌近视醉酒机器人
正如标题所示,此问题是@NP 礼貌的近视醉酒机器人的半启发 我们的可怜机器人在原点放置在笛卡尔网格上,每分钟之后,它会在四个方向(上,下,左,右)中的一个方向上移动1个单位。 之后ñ分钟,所有对电网活化潜在的地雷,杀死任何僵尸差可能会发现自己在他们。地雷位于满足等式| y | = | x |的所有整数坐标处。 挑战 作为输入,作为输出,您将获得n,即地雷爆炸发生前的分钟数n,您必须找到机器人死亡的可能性。 输入:代表n的自然数。 输出:让僵尸死亡的概率为p / q,其中p和q是相对质数(q不能为0,但p可以)。输出p。 规则 您的算法不得以指数或更高的时间运行。理想情况下,它应在多项式时间内或更短的时间内运行。 您的算法必须能够n在合理的时间内处理<20的输入(如果太难的话可以调整)。 这是一个代码高尔夫挑战。 对于给定的n遍历所有可能性,绝对不会被视为答案。 测试用例 1->0 2->3 4->39 6->135 8->7735 10->28287 n = 6的示例计算 我们有4种可能的移动方式:U,D,R和L。可采用的路径总数为4 ^ 6或4096。有4种可能的情况沿y = x着陆:x,y = ±1; x,y =±2; x,y =±3; 或x = y =0。我们将计算出以(1,1),(2,2)和(3,3)结束的方法数量,将它们乘以4即可得出其他象限,然后相加这就是最终以(0,0)结束的方式数量。 情况1:机器人在(3,3)处结束。为了使机器人在这里结束,它必须进行3次正确的动作,以及3次向上的动作。换句话说,到达此处的总方法是重新排列序列RROUUU中的字母的方法,即6选择3 = 20。 情况2:机器人在(2,2)结束。为了使机器人在此处结束,它可以进行2次向上移动,3次向右移动和1次向左移动;或2个向右移动,3个向上移动和1个向下移动。因此,到达此处的方法总数是重新排列序列RRRLUU和UUUDRR中的字母的方法的总和,二者均为(6选择1)*(5选择2)= …

5
ASCII日历计划器
给定活动列表及其开始时间/日期,请输出一个ASCII艺术日历,显示相应日期的活动。保证所有活动都在同一个月内进行,没有两个活动可以在同一天进行,并且保证所有活动都可以放在日历框中。 日历的日期在每个框的左上角,这些框宽9乘5高,由-和包围|。星期几的两个字母的缩写位于第一行的上方,而星期几则从星期日开始。 例如,给定以下活动: 10/5/2018 - 9:00am - Sandbox calendar challenge 10/9/2018 - 9:00am - Post challenge to main 10/10/2018 - 10:00am - Profit 10/31/2018 - 7:30pm - Halloween party 输出此相应的日历: Su Mo Tu We Th Fr Sa ----------------------------------------------------------------------- | |1 |2 |3 |4 |5 |6 | | | | | …

16
质数很大
给定一个很大的数字(以10为底),例如1234567891011121314151617,请在其中找到素数“ subnumbers”。 素数“子数”是连续的数字序列(从输入中获取),代表一个素数(以10为底)。 输入:数字(字符串,文件或任何您喜欢的数字)。 输出:所有素数子数字都以某种方式分隔(在列表,文件,逗号分隔的字符串中……)如果结果为空,则可以采用任何喜欢的约定(硬编码字符串,空字符串,乱码,但程序不应崩溃。 示例 1234-> 2、3、23 6542-> 5、2 14-> [..空输出] 这是代码高尔夫球。最短的程序获胜! [edit]:附加规则,程序必须说明!并不是每个人都精通果冻:)

9
中秋赌博游戏
明天是中秋节,本着节日的精神,我将介绍我们(厦门人)在节日期间玩的赌博游戏! 规则 游戏中有六个6面骰子。不同的数字组合具有不同的等级,特别强调四和一。您的工作是编写给定6个骰子的等级的手的程序/函数。以下是排名(我对规则进行了一些修改/简化): 我猜只有中国人可以挑战!好的,这是一些英文说明。 0:4个四和2个。 1:6。 2:6个 3:除4和1之外的任何形式的6。 4:5 5:除了四分之一以外的任何形式的5。 6:4 7:直 (1-6) 8:3 9:4以外的任何一种。 10:2 11:1四。 12:没事 输入值 6个数字,6个数字的数组或6个数字的字符串,它们代表1-6个骰子掷骰的值 输出量 您的程序/函数可以返回/输出任何东西来指示等级,只要每个等级由一个输出指示,反之亦然。例如 使用数字0-12、1-13等。 示例(使用0-12作为输出) [1,1,1,1,1,1]->2 [1,4,4,4,1,4]->0 [3,6,5,1,4,2]->7 [1,2,3,5,6,6]->12 [3,6,3,3,3,3]->5 [4,5,5,5,5,5]->5 这是代码高尔夫球,因此最短的字节数为准!
11 code-golf  game 

5
最小对称
局部相关。 目标:给定一个正整数的矩阵,输出包含的最小中心对称矩阵(该矩阵也可能包含非正整数)。M中号MM中号MM 中心对称矩阵是具有2阶旋转对称性的正方形矩阵,即,将其旋转两次后仍保持相同的矩阵。例如,中心对称矩阵的左上角元素与右下角元素相同,中心上方的元素与中心下方的元素相同。在这里可以找到有用的可视化。 更正式地说,给定的矩阵,产生一个方阵使得是中心对称的和,并且不存在其他方阵使得。Ñ Ñ 中号⊆ Ñ ķ 暗淡ķ &lt; 暗淡Ñ中号MMñNNñNN中号⊆ ñM⊆NM\subseteq NķKK暗淡ķ&lt; 昏暗ñdim⁡K&lt;dim⁡N\dim K<\dim N 乙甲⊆ 乙甲我,Ĵ乙我+ 我',Ĵ + Ĵ “(我',Ĵ ')一种AA当且仅当每个值出现在索引,是的子集(符号:)。。乙BB一个⊆ 乙A⊆BA\subseteq B一种我,ĴAi,jA_{i,j}Bi+i′,j+j′Bi+i′,j+j′B_{i+i^\prime,j+j^\prime}(i′,j′)(i′,j′)(i^\prime, j^\prime) 注意:某些矩阵具有多个解(例如[[3,3],[1,2]],以[[2,1,0],[3,3,3],[0,1,2]]或求解[[3,3,3],[1,2,1],[3,3,3]]);您必须输出至少一种有效解决方案。 测试用例 input example output [[1, 2, 3], [4, 5, 6]] [[1, 2, 3, 0], [4, 5, 6, 0], [0, 6, 5, 4], [0, …

4
递增集序列
背景 一个前增加的一组序列的顺序被定义为整数集的序列s ^ 1,S ^ 2,⋯ ,小号Ñ其满足以下的:NNNS1,S2,⋯,SnS1,S2,⋯,SnS_1,S_2,\cdots,S_n 每个是一个非空的子集{ 1 ,2 ,⋯ ,Ñ }。SiSiS_i{1,2,⋯,N}{1,2,⋯,N}\{1,2,\cdots,N\} 对于,小号我 ∩ 小号我+ 1 = ∅,即任何两个连续集没有共同的元素。1≤i&lt;n1≤i&lt;n1\le i<nSi∩Si+1=∅Si∩Si+1=∅S_i \cap S_{i+1} = \varnothing 对于,平均的(平均值)小号我比的严格更少小号我+ 1。1≤i&lt;n1≤i&lt;n1\le i<nSiSiS_iSi+1Si+1S_{i+1} 挑战 给定一个正整数N,输出order的最长递增集合序列的长度N。 测试用例 这些是基于Project Euler用户thundre的结果。 1 =&gt; 1 // {1} 2 =&gt; 2 // {1} {2} 3 =&gt; 3 // {1} {2} {3} …

5
洋葱还是不是洋葱?
The Onion(警告:许多文章都是NSFW)是一个讽刺性新闻机构,模仿传统新闻媒体。2014年,The Onion推出了ClickHole(警告:也经常是NSFW),这是一个讽刺性新闻网站,模仿了诸如BuzzFeed之类的“ clickbait”网站。多亏了坡定律,人们才经常阅读The Onion或ClickHole上的文章标题,并相信它们是真实的,而不知道它们是要讽刺的。相反,在听起来可笑的真实新闻故事中也会发生这种情况-人们常常以为自己是讽刺作家,而不是。 这种困惑自然很适合游戏-给定新闻头条,尝试猜测它是否讽刺。挑战在于如何使用程序来做到这一点。 给定新闻标题(仅由可打印的ASCII字符和空格组成的字符串),1如果标题是讽刺,或者0不是,则输出。您的分数将是正确输出的数量除以标题总数。 按照惯例,不允许出现标准漏洞(尤其是针对测试用例进行优化)。为了实现这一点,我将在一组200个隐藏的测试用例上运行您的程序(The Onion中有100个,Not The Onion中有100个)。您的解决方案的分数必须比公共测试用例的分数少不超过20个百分点才能生效。 测试用例 为了提出针对此挑战的测试案例,我从The Onion subreddit中选择了25个标题(在The Onion及其子站点(如ClickHole)上发布了文章),从Not The Onion subreddit中选择了 25个标题(其中包含真实新闻)听起来像是讽刺)。我对标题所做的唯一更改是将“花式”引号替换为常规ASCII引号并标准化了大写字母-其他所有内容在原始文章的标题中均保持不变。每个标题都在自己的行上。 洋葱头条 Trump Warns Removing Confederate Statues Could Be Slippery Slope To Eliminating Racism Entirely 'No Way To Prevent This,' Says Only Nation Where This Regularly Happens My Doctor Told Me …

5
追踪2D空间中的物体
描述 这项挑战的任务是设计一个程序或函数来跟踪n×nn×nn×n空间中的给定对象。 输入输出 您的程序将获得3个输入,可以以任何明智的方式获取: n将是飞机侧面的大小。(因此,对于n=5n=5n=5,您的平面将为5×55×55×5)。您可能会假设n它将始终是一个奇数整数。 s将是对象的起始位置,以一对(x,y)(x,y)(x, y)坐标给出。 D将是有序对的向量。D将遵循格式D=[(d0,t0),(d1,t1),...,(dn,tn)]D=[(d0,t0),(d1,t1),...,(dn,tn)]D = [(d_0,t_0),(d_1,t_1),...,(d_n,t_n)],其中dkdkd_k将始终是一个的'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW',对于基数和初级intercardinal方向,和tktkt_k将是的“滴答”的数量的整数。 有了这些输入,您的程序必须输出对平面中对象的跟踪。 规则 输出必须包含平面的边界。例如: -21012 + +┌─────┐ 2││ 1││ 0││ 1││ 2││ -└─────┘ 将是一个空的5×55×55×5平面的示例。上方和侧面的数字仅供参考,不需要打印。 您可以使用任何字符作为边界,只要它不是空格(或呈现为空格)即可。您选择的字符必须描绘整个平面,这意味着它们之间不能有间隙。 一些可接受的飞机包括: ┌──┐.... ---- +-+ ││。。| | | | ││。。| | | | └── ....; ----; +-+ 不可接受的飞机包括: .... .... …

2
懒惰的面包袋
我在一家面包店工作,该面包店提供小麦,黑麦,大麦,谷物和法国面包,但是面包师有点奇怪-他以随机的顺序堆放面包,有时只剩下一些架子空着。 每天,同一位顾客进来,要求每条面包中的一块,但是棘手的是,他是个细菌菌,所以当我装满袋子时,我无法连续选择两个相邻架子上的面包。 在相邻的架子之间走需要一秒钟的时间。这是一家繁忙的商店;对于任何随机配置的面包,我想尽可能减少获取每个独特面包的时间。我可以在任何架子上开始和结束。 如果今天的订购量为W B W G F R W,则可能的路径为0, 3, 5, 1, 4,总共12秒钟:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12 (这1, 2, 3, 4, 5是行不通的,因为面包是从相邻的架子上连续拾取的。) 如果为B W B G B F B R B W B F,则可能的路径为1, 3, 5, 7, 10,总共需要9秒钟。 经理总是确保有可能的解决方案,因此我不必担心会收到错误的输入。他通常将订单发送给我,但是如果需要,我可以将其键入STDIN或以其他方式读取。我希望程序根据默认的I / O规则打印出最佳路径的索引及其时间。 简而言之: 5种面包。 面包顺序显示为随机顺序和长度的字符串。 必须从每个唯一的面包中选择一个。 …

21
Minecraft语言文件更新程序
在1.13版中,Minecraft语言文件从一种简单的多行key = value格式切换为JSON。 挑战 编写一个从原始格式转换为返回JSON字符串的程序。可以使用任何标准输入方法进行输入,任何标准输出方法的输出必须为json 原始格式包含带有键=值对的行,例如 tile.dirt.name=Dirt advMode.nearestPlayer=Use "@p" to target nearest player build.tooHigh=Height limit for building is %s blocks 应该转换为key = value的一个大JSON对象 { "tile.dirt.name": "Dirt", "advMode.nearestPlayer": "Use \"@p\" to target nearest player", "build.tooHigh": "Height limit for building is %s blocks" } 一些细节 只要它包含正确的键/值对,就可以使用任何有效的JSON。允许使用尾部逗号,因为Minecraft允许使用逗号。 唯一必须避免的是引号。(1.13之前的语言文件中不存在换行符,反斜杠或其他破坏JSON的东西) 空行应忽略 行包含正好等于1的行 测试用例 输入: tile.dirt.name=Dirt …
11 code-golf  game  json 

2
骆驼杯:AI棋盘比赛
骆驼杯2k18 在这个挑战中,我们将玩半受欢迎的桌游Camel Up。 骆驼起来!是一种棋盘游戏,有玩家押注骆驼以赢得回合,赢得游戏或输掉游戏,设置陷阱以影响移动或移动骆驼。这些决定中的每一个都会奖励您获得一些钱的机会,这才是决定赢家的原因。玩家应使用概率,游戏状态考虑因素和对手的租约来做出决定。这是一个简短的视频,向玩家展示如何玩。 怎么玩 这是玩法的粗略构想。观看其中一部视频可能会更有帮助,因为它们具有视觉效果:) 轮到您有4个选择。 移动骆驼。这会从尚未移动的人中选取骆驼,并在1-3个空格之间移动。您会得到1个硬币。当所有五个骆驼都移动时,回合结束,然后它们就可以全部移动 放置一个陷阱。这会一直持续到董事会结束。您选择+ 1 / -1陷阱。如果骆驼或骆驼叠落在上面,它们会移动+ 1 / -1,您会得到一个硬币。您不能在正方形0上放置陷阱。可以将陷阱放置在骆驼所在的位置,尽管它只会影响落在其后的骆驼。 回合赢家投注。您下注一个回合赢家。他们赢了您会得到5/3/2/1,具体取决于您是该骆驼的第一/第二/第三。 游戏赢家/输家。您押注谁将在比赛结束时排在第一或最后。根据您是否是1st / 2nd / 3rd / etc赌那只骆驼,您会得到8/5/3/1/1(我认为) 笔记: 有5只骆驼。它们从0-2随机开始。 当骆驼移动时(参见上面的触发方式),它们移动1-3格。如果将它们与另一个骆驼放在一个正方形上,则将它们放在另一个骆驼的“顶部”,从而创建一个骆驼堆栈。如果要移动骆驼,它将所有骆驼移动到骆驼堆栈上。栈顶的骆驼被认为是领先 如果您落在+1陷阱上(请参见上文,触发此陷阱),您将向前移动一格。适用标准堆叠规则。 但是,如果您遇到-1陷阱,则会向后移动一个方块。你去下,是在该广场上,如果任何骆驼的堆栈。 骆驼碰到正方形16时游戏结束。这立即调用回合结束和游戏结束触发器 每个骆驼只能进行一次获胜/失败者下注。也就是说,您不能押注骆驼来赢得或输掉比赛 挑战 在此挑战中,您将编写一个Python 3程序来扮演四人游戏,获胜者将赢得Camel Up的所有荣耀游戏 您的程序将收到gamestate,其中包含: camel_track:骆驼的位置 trap_track:陷阱的位置(格式为[trap_type(-1,1),播放器]的条目) player_has_placed_trap:一个数组,告诉您玩家是否在本回合放置了陷阱 round_bets:本轮下注的数组。形式为[骆驼,玩家] game_winner_bets / game_loser_bets:玩家为骆驼赢得或输掉游戏而进行的一系列下注。您将只能看到下注的玩家的价值,而不是下注的玩家的价值。您可以知道您的赌注。#形式[骆驼,玩家] player_game_bets:game_winner_bets / game_loser_bets的另一种表示形式。同样,仅查看您的机器人所下的赌注。 player_money_values:一个数组,显示每个玩家的钱数。 camel_yet_to_move:一个数组,显示骆驼是否已移动到这一轮。 除了游戏状态外,您还可以获得: 玩家:一个整数,告诉您您是哪个玩家号码(0-3)。 玩家应该返回的语法是: …

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.