编程拼图和代码高尔夫

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

1
MarGolf遇见Langton的蚁丘
This is Markov. Markov's golf ball rolls around randomly. Markov's ball will hole however he strikes it. Markov is smart. Be like Markov. 这 是兰顿后院的一个蚁丘。 蚁丘足够大,可以容纳Markov的高尔夫球MarGolf。但是,蚁丘会根据周围的地形移动并改变方向。 任务 输入一个10x20的字段: * 马尔高夫 O 兰顿的蚁丘 , 蚁丘顺时针旋转90度 . 蚁丘逆时针旋转90度 0 MarGolf在兰顿的蚁丘 一个字段如下所示: ,...,.,,..,...,.,,.. ..,.,,,..,...,..,.,. .,,*.,....,.,,,.,,,. ,.,,.,...,,.,.,,,,,. .,..,....,,.....,,., ,.,.,...,..,.,,,,.., ....,,,,,,,,,....... ........,,.,...,..., ,,,,,,,,,,,,....,O., ,.,.,.,.....,,.,,,,, 游戏规则: …

1
打印特殊角度的sin,cos和tan
在三角学中,有某些角度称为“特殊角度”。这是因为当您采用这些角度之一的sin,cos或tan时,您得到的结果很容易记住,因为它是有理数的平方根。这些特殊角度始终是pi/6或的倍数pi/4。这是所有特殊角度及其对应的触发值的可视化。 如您所见,对于每个角度,它们都是一对对应的数字。第一个数字是该角度的余弦,第二个数字是该角度的正弦。要找到这些角度之一的切线,只需将sin除以cos。例如tan(pi/6)等于 sin(pi/6) / cos(pi/6) == (1/2) / (√3/2) == 1/√3 == √3/3 挑战 您必须编写一个包含3个输入的完整程序。 代表您应该计算的trig函数的单个char。这将是“ s”(正弦),“ c”(cos)或“ t”(棕褐色)。 输入角度的分子。这可以是任何正整数。请注意,输入5表示分子为5 * pi。 输入角度的分母。这将始终是以下之一:1, 2, 3, 4, 6 然后打印出该角度的触发函数的精确值。以下是所有角度最大为2 * pi的sin,cos和tan的列表: sin(0pi): 0 sin(pi/6): 1/2 sin(pi/4): root(2)/2 sin(pi/3): root(3)/2 sin(pi/2): 1 sin(2pi/3): root(3)/2 sin(3pi/4): root(2)/2 sin(5pi/6): 1/2 sin(1pi): 0 sin(7pi/6): -1/2 …

3
一个州获得多少票?
给定每个州的人口列表,输出从大到小,即该州在选举团中获得的选票数。 输入:第一个数字代表要分配的总票数;其后是和的列表。在此示例中,使用状态的缩写,但是可以使用任何包含大写和小写字母的名称。您可以采用任何喜欢的格式,只要其中包含的唯一信息是该州的缩写及其人口。 输入可以作为函数的参数,也可以采用任何方式。 示例(可能)输入: 538 [[CA 38000000], [NH 1300000] etc.] 输出:以某种格式输出每个州获得的票数。从最大到最小对状态进行排序。如果两个州的票数相同,则按字典中的先后顺序(按字母顺序先后)排序。 在找到投票数之前,首先检查输入列表中是否存在名为DC的州,如果存在,请给该州3票,而不论其人口多少。然后,将其从列表中删除,并分配其余的选票,就好像DC不存在一样。 选举团的票数被定义为参议员和代表人数的总和。每个州都有两名参议员,因此从总数中减去州数两倍(在示例输入中为538)以获得代表人数。为每个州指派一名代表开始。然后,执行以下过程: 分配给每个状态的数目,A,定义为P/sqrt(2)其中P是人口。 根据状态值对状态进行排序A。 为第一个州(最大的州)分配A一个代表。 重新分配A,as的值A = P/(sqrt(n)*sqrt(n + 1)),其中n是分配给该州的当前代表人数。 返回步骤2。重复执行,直到所有代表都用完为止。 示例(可能)输出:{CA: 518, NH: 20}。输出不必采用这种格式,但必须包含相同的信息。 请注意,如果由于3*(# of states)票数不足而无法合法分配票数,请打印所需的任何内容。您可能会崩溃,引发错误等。 测试用例: 538 [['CA' 38000000], ['NH' 1300000]] --> CA: 518, NH: 20 538 [['NH' 1300000], ['CA' 38000000]] --> CA: 518, NH: 20 …
9 code-golf 

14
高尔夫计算口译员
介绍 计算是一种深奥的笑话语言。 在esolangs条目中: 计算没有必需的语法,并且可以解决所有问题。它足够聪明,可以解释任何人类语言(英语,西班牙语,拉丁语等),任何编程语言(C ++,Java,brainfuck等)或任何您能想到的数据。唯一的缺点是绝对没有I / O。 一些示例程序 Hello World 基本的Hello World程序 What is love? 确定爱是(宝贝不要伤害我)。 When will we ever graduate? 确定该网站退出beta的确切日期。 挑战 您的任务是编写完整的Compute解释器。这听起来很难,但是请记住Compute绝对没有I / O。因此,您的解释器将只为输入程序中的每一行睡眠一秒钟,然后\n\nDone.在此之后输出(这是no I / O的唯一例外)。 您可以在本网站底部找到官方口译员。 请注意,官方解释器会为给定源代码中的每个字符暂停一秒钟。为了避免在等待有意义的问题来测试口译员时的漫长等待时间,我们在挑战中坚持行列。 规则 输入可能包含多行,并用分隔\n。总会有至少一行。 与正式实现不同,您不必将文件作为输入。您可以采用任何所需输入形式的Compute程序。 允许的唯一输出是\n\nDone.。尾随换行符是允许的。 允许功能或完整程序。 输入/输出的默认规则。 有标准漏洞。 这是 代码高尔夫球,因此最低字节数获胜。决胜局是较早提交的。

21
将Forsyth-Edwards表示法字符串转换为ASCII美工
在国际象棋中,通常被称为“ FEN”的福赛斯·爱德华兹符号是一种抄写木板的文字方式。它从怀特的角度从上到下描述了董事会八行中的每一行(在国际象棋中称为“等级”)。这些片段被写为K(国王),Q(女王),R(流氓),B(主教),N(骑士)和P(典当)。黑色小写使用这些字母,白色小写使用这些字母。空格由1到8的数字表示,表示有多少个连续的空格。一个完全为空的等级将是8,最右边一列(在国际象棋中称为“文件”)将是一个黑色的白嘴鸦,7r一行的每一端将是两个白棋子。通常还会添加其他信息,指示要移动哪一侧,PP4PP。等级之间用a分隔/顺便权利,移动号码,halfmove时钟,但我们会忽略他们的这一挑战的目的。 输入项 根据需要,从命令行或STDIN发送FEN字符串。您可以假定此字符串始终有效。 输出量 将实际出现的板子的简单ASCII艺术表现形式写入STDOUT: 作品以他们在FEN中的角色来表示 空方格用空格表示 碎片和正方形由管道分开,|并且板的每一侧都有管道 因此,用8/8/8/8/8/8/8/8FEN 编写的空板将显示为 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | …

1
通过交换相邻数字对填充数字的加扰二维数组进行排序
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 大小为n×n的二维数组由n * n个数字填充,从数字1开始。这些数字将按行升序排序;行的第一个数字必须大于上一行的最后一个数字(所有(1)中最小的数字将在[0,0]中)。这类似于15个难题。 例如,这是大小为n = 3的排序数组。 1 2 3 4 5 6 7 8 9 输入项 输入是加扰的数组。它的大小最大为n =10。n= 3的示例: 4 2 3 1 8 5 7 9 6 输出量 输出排序数组所需的交换列表。甲交换被定义如下:两个相邻的数字交换位置,水平或垂直; 不允许对角交换。 上面示例的示例输出: 交换4和1 交换8和5 交换8和6 交换9和8 所需的交换次数越少越好。计算时间必须可行。 这是另一个示例输入,其中n = 10: 41 88 35 34 76 44 66 …

2
DSA的人才库
我和一些朋友玩过DSA(主要是德国的桌面RPG,与D&D相似)。我想知道通过传球的机会是多少,因此您将必须编写一些代码来进行计算。 您的角色由统计信息(从8到14)和(TV)才能值(0到21)定义。现在,我们将以攀登为例。 才能测试 一个天赋(攀爬)如下所示:(勇气,敏捷,力量)电视:7.要测试一个天赋的角色,请使用20面骰子在这些统计数据上滚动,并尝试使其低于或等于该统计数据你做得很好。如果没有,您可以使用电视点以1:1的比例减少滚动。 例 一位有勇气12,敏捷13和力量14的猎人正在尝试爬树,他的电视是7。 他掷出3,该值低于12,因此他通过了掷骰。 然后他将17、17比4翻了17、17,所以剩下4个电视用完了,剩下3个。 对于最后一卷,您将获得14分。 所有的掷骰都通过了,猎人设法爬上了树,剩下了3台电视。 输入项 您选择的任何格式的4个值,取自您语言的标准输入。但是必须按此顺序。 例如12 13 14 7或12,13,14,7或为数组{12,13,14,7}或混合[12, 14, 8], 3 输出量 卷多久通过一次的机会。 例如(对于上述值)0.803 12,14,8,3 = 0.322 11,11,12,11 = 0.840 值得一提的是:这里再次不是格式化的问题,但可以按照自己的意愿按以下顺序输出: failed/with 0/with 1/with 2/with 3/with 4/with 5/with 6/with 7 以此类推,直到没有电视。 12,13,14,7 = 0.197/0.075/0.089/0.084/0.078/0.073/0.068/0.063/0.273 12,14,8,3 = 0.678/0.056/0.051/0.047/0.168 挑战,规则和奖金 您将发现在给定输入的情况下有机会使掷骰通过率达到+-0.5%。 如果您的程序还输出了通过n电视的机会(请参见输出),则为-20%。 这是 代码高尔夫球,因此以字节为单位的最短代码胜出!

2
三角网格:简单连接的Polyiamonds
当我们处于三角形网格踢的时候,我想指出的是,在三角形网格上有一个等同于多米诺骨牌的东西。它们被称为polyiamonds,是通过沿其边缘将等边三角形粘合在一起而形成的形状。在此挑战中,您将要确定三角形网格的哪些子集为多边形,以及它们是否在其中具有孔。因为只需要9个三角形就可以制造出一个带孔的多边形,因此您的代码需要尽可能短。 网格 我们将使用Martin的三角形网格布局作为输入: 注意以下事实:三角形的中心形成一个大致矩形的网格,并且左上三角形“指向”上方。然后,我们可以通过给出矩形“星形图”来描述此网格的子集,该星形图指示包括哪些三角形和不包括哪些三角形。例如,此地图: ** ** ***** 对应于包含一个孔的最小的多边形: 孔洞 其中包含像上面的例子中的孔(区域不是polyiamond,其由所述的两个区在所有侧面包围的部分A polyiamond 是)不是,拓扑来说,简单地连接。 挑战 编写一个函数或程序,当且仅当所指示的三角形网格的子集是简单连接的多边形时,才将如上所述的“星图”作为输入并输出真值。 更多例子 *** *** ******* 对应于polyiamond 只需连接即可。 * * ** ** *** 对应于polyiamond 只需连接即可。 ** ** *** ** **** 对应于非 polyiamond 这不会简单地连接,即使它是一个polyiamond。 输入规格 输入将仅由星号,空格和换行符组成。 输入的第一个字符将始终是空格或星号(对应于网格左上角的向上指向的三角形)。 第一行和最后一行始终至少会有一个星号。 无法保证第一行之后的行不会为空。连续两个换行符可能会出现在合法输入中。 线长不必全部相同。 获奖条件 这是 代码高尔夫球,因此以字节为单位的最短答案会获胜。 测试用例 真实地图: 1) * 2) * …

1
帮我塞满我的钱包!
不久前,我购买了一个新钱包,该钱包可容纳8张卡(两面均为4张)。但是,我似乎拥有比这更多的卡片,并且我需要选择要随身携带的卡片。有些卡片比其他卡片使用得更多,但是我更喜欢随身携带的卡片不一定是我使用最多的卡片。 挑战 给定一堆纸牌,以我的喜好和限制尽可能的最好的方式返回我的钱包的布局。布局应如下所示: __ __ (row 1) __ __ (row 2) __ __ (row 3) __ __ (row 4) 目前,我摆出了以下几张纸牌-堆叠中总是有以下选择: 1张身份证(ID) 1张驾照(DL) 2张信用卡(CC) 5张借记卡(DC) 1张公共交通卡(PC) 1张健身房出入卡(GC) 随机商店和仓库(MC)的9张会员卡 我有一些偏好和限制: 卡按优先级排序:ID,DL,CC,DC,PC,GC,MC 卡按使用频率排序:CC,DC,PC,GC,MC,ID,DL 出于安全原因,借记卡和信用卡在我的钱包总数可以比所有其它卡的总和,将在我的钱包去(至多更多ň DC + ñ CC ≤ ñ ID + ñ DL + ñ PC + N GC + N MC …

6
卡对概率
给定一个卡片组,其中N张卡片由N个卡片组成,其中N个卡片的整数值为[ 1,M ],总共N * M张卡片,计算出值为1的卡片与值为2的卡片相邻的概率。 您的解决方案可能是精确的或近似的,并且在给定相同输入的情况下,每次运行都不必相同。给定的答案应在真实解决方案的+/- 5%之内(除非RNG不太可能对您不利)。您的程序应在合理的时间内给出答案(例如,使用任何硬件不到10分钟)。您可以假设M和N合理小,并且不需要进行错误检查。 卡组不是周期性的,因此如果第一张卡为1,最后一张卡为2,则这不满足邻接要求。 作为测试用例,对于N = 4和M = 13(标准的52张卡片套),预期解决方案约为48.6%。 这是使用随机混洗的Python + NumPy中的非高尔夫实现示例: from __future__ import division from numpy import * def adjacent(N, M): deck = array([i for i in range(1, M+1)]*N) trials = 100000 count = 0 for i in range(trials): random.shuffle(deck) ores = (deck == …

15
年度中国十二生肖
2015年是山羊年!在这项挑战中,您将弄清楚哪种动物代表年份。为避免将挑战复杂化,您无需计算农历新年。 由于它们在十二生肖中只有12种动物,因此您的代码将需要尽可能短。 例子 您的程序必须获取系统年份,第一行仅供参考 2015 Goat 1924 Rat 1923 Pig 2008 Rat 规格 十二生肖的顺序是: Rat, Ox, Tiger, Rabbit, Dragon, Snake, Horse, Goat, Monkey, Rooster, Dog, Pig Rat从2008年开始,到Pig2007年开始,Ox到2009年,依此类推。 输出必须正确大写。

2
交替求解数学表达式
创建一个程序,使用表达式交替两边的元素来求解数学表达式。这样做的方法是,先阅读第一个字符,然后阅读最后一个,然后阅读第二个字符,再阅读第二个字符,再读另一个字符,而不是从左到右阅读。这将为您提供一个新的表达式,您必须对其进行计算和输出。 a*b/c+d-e 135798642 <-- Order you read the expression in ae*-bd/+c <-- Order of operation. 例: 1*3/2+4-5 15*-34/+2 = -255 如果表达式不起作用,则1必须将其插入必要的位置以使其起作用。 一些示例可能会更好地说明它: Input: 1+1+1+1+1 Result: 23 // Because 1+1+1+1+1 -> 11++11++1 -> 23 Input: 1+2-3+12-5 Result: -19 // Because 1+2-3+12-5 -> 15+-22-13+ -> 15+-22-13+1 -> -19 // | // Not …

1
戊糖验证器
作为一个不介意查看他们的五角星形以查看其是否为矩形的人,我决定让您编写一个执行此操作的程序。 你的任务 给定一些输入,并用包含12个唯一字符的换行符分隔,请确定这是否是有效的解决方案。 有效的解决方案必须 每个字符有5个(换行符除外) 每组字符必须完全连接 每组字符必须具有唯一的形状 呈规则的矩形 如果这是有效的解决方案,请输出真实值,否则输出错误值。 您的程序可以是函数,也可以是完整程序,但必须将输入从stdin输入并输出到stdout。 测试用例 有效的解决方案 000111 203331 203431 22 444 2 46 57 666 57769! 58779! 58899! 5889!! 00.@@@ccccF111//=--- 0...@@c))FFF1//8===- 00.ttttt)))F1/8888=- 无效的配置 invalid (doesn't contain 12 unique characters) 111112222233333444445555566666 77777888889999900000qqqqqwwwww (Each set has the same shape) 1234567890qw w1234567890q qw1234567890 0qw123456789 90qw12345678 (None of …

6
计算克罗内克符号
这里和这里的相关链接,但是这里是简短的版本: 您有两个整数的输入,a且b介于负无穷大和无穷大之间(尽管如有必要,我可以限制范围,但函数仍必须接受负无穷大)。 Kronecker符号的定义 您必须返回Kronecker符号(a|b)进行输入,a并且b在哪里 (a|b) = (a|p_1)^e_1 * (a|p_2)^e_2 * ... * (a|p_n)^e_n 在那里b = p_1^e_1 * p_2^e_2 * ... * p_n^e_n,并p_i与e_i在的因式分解素数和指数b。 对于奇素数p,(a|p)=a^((p-1)/2) (mod p)定义在这里。 对于b == 2,(n|2)={0 for n even; 1 for n odd, n=+/-1 (mod 8); -1 for n odd, n=+/-3 (mod 8) 对于b == -1,(n|-1)={-1 for n<0; …

1
具有精确终点和零终端速度的赛道变化
介绍 挑战是游戏赛道和这两个挑战的非常有趣的变体: 要Vectory!–矢量赛车大奖赛 编写赛车程序 挑战的根源在这里(德语):c't-Racetrack 这个挑战特别有趣(并且不同于上述两个挑战),因为它结合了巨大的搜索空间以及必须满足的一些确切条件。由于巨大的搜索空间,穷举搜索技术难以使用,由于确切的条件,近似方法也不易使用。由于这种独特的结合(加上物理学的基本直觉),这个问题令人着迷(无论如何,与赛车有关的一切都令人着迷;-) 挑战 请看以下赛马场(源代码): 您必须从头开始(120,180)并精确地完成操作(320,220)(德语为“ Ziel”),而无需碰触其中一堵墙。 汽车受以下形式的加速度矢量控制(a_x,a_y)-例如: (8,-6) (10,0) (1,9) 第一个数字是x向量的加速度,第二个数字是y向量的加速度。它们必须是整数,因为只允许使用网格上的整数点。此外,还必须满足以下条件: a_x^2 + a_y^2 <= 100, 这意味着在任何方向上的加速度都必须低于或等于10。 要查看其工作原理,请查看以下图片(源): 例如:从(120,180)您开始8以x方向和-6y方向加速。对于下一步,这是您的速度,您可以在其中添加加速度(10,0)以获得(物理上正确的)下一个合成运动(指向)(146,168)。合成运动是检查您是否触摸过其中一堵墙的关键。再次将下一个加速度矢量添加到当前速度以得到下一个运动,依此类推。因此,您的汽车在每一步都有一个位置和一个速度。(在上面的说明图中,蓝色箭头表示速度,橙色箭头表示表示加速,深红色箭头表示最终的运动。) 作为附加条件,在(0,0)终点时必须具有最终速度(320,220)。 输出必须是上述形式的加速度矢量列表。 获奖者是提供程序的人,该程序可以找到加速度矢量最少的解决方案。 Tiebreaker 另外,如果您可以证明这是一个最佳解决方案,以及这是否是唯一的最佳解决方案或是否有多个最佳解决方案(以及它们是哪种),那将是非常不错的。 如果您可以大致概述算法的工作原理并注释代码,以使我们能够理解它,那也很好。 我有一个程序可以检查任何给定的解决方案是否有效,我会给出反馈。 附录 您可以使用任何编程语言,但是如果有人使用R,我会特别高兴,因为我在日常工作中经常使用R,并且以某种方式习惯了它:-) 附录II 我第一次开始赏金计划-希望这可以使球滚动(或者更好:让汽车行驶:-)

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.