编程拼图和代码高尔夫

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

1
我曾经像您一样解决代码难题,但后来我却屈指可数
用箭头击中膝盖似乎是目前选择的伤害。因此,我提出以下高尔夫挑战。 您有一个冒险家,看起来像这样: O /|\ / | \ | | / \ / \ 给定一个文本文件,其中包含一个弓箭(绘制为}符号),一组墙壁(绘制为#符号)和一个冒险家,编写最小的代码,计算出应该发射箭头以击中的角度和初始速度他在膝盖上。 假设以下内容: 文件中的每个字符为0.5 x 0.5米。 从的中心发射箭头},即偏移量为0.25m, 0.25m 重力是 10ms^-2 箭重 0.1kg 箭头是一个点,即仅当箭头的坐标进入一个块时才发生碰撞。 最大初始速度为 50m/s 角度可能在0(直上)和180(直下)之间 击中冒险者腿部的任何部分都被认为是膝盖的重物。 一堵墙(#字符)占据整个0.5mx 0.5m的块。 箭头可以在文件的“顶部”上移动,但是没有什么可以阻止输入以#字符的上限开头。 您不能用箭头穿透墙壁。 不允许击中冒险者的任何其他部分! 如果不可能用膝盖打他,应该显示一个错误。 输入示例: # } O # /|\ / | \ # | # | / \ …

20
查找所有字符都相同的列
我在SO上遇到了这个问题,并认为这将是一个不错的高尔夫挑战。所以这里是: 挑战: 编写一个程序,该程序读取一系列字符串,每行一个,并输出每个字符串具有相同字符的所有位置的列表。 输入和输出: 输入由一行或多行可打印的非空白ASCII字符组成,每行后跟一个换行符。您可以假定所有输入线都具有相同的长度。换行符不应被视为输入的一部分(即,您不应将其作为匹配字符输出)。 输入示例(从SO问题中偷偷偷走的): abcdefg avcddeg acbdeeg 读取输入后,程序应打印每个匹配列的位置及其包含的字符。(如果您的程序可以尽早确定没有匹配的列,则可以但不必停止读取其他输入。)允许使用任何合理的输出格式;特别是,您可以对位置使用基于0或基于1的索引。 上述输入的示例输出(使用基于0的索引): 0: a 3: d 6: g 得分: 这是代码高尔夫,所以最短的答案会获胜。如果出现平局,则可能会授予部分平局决胜字符以提供其他功能: −½个字符,用于正确处理长度不等的输入行。(输出中不应包含最短输入行的末尾位置。) −¼个字符,用于正确处理由任意UTF-8编码的Unicode字符组成的输入。 为了获得启发,您可能会在SO问题上找到一些解决方案(见上文)。 说明: 简单地串联的位置和角色,如0a3d6g,并不能算作“合理的输出”。您应该在输出的每个元素之间提供某种分隔符(例如空格),以便可以对其进行明确的解析。 输入将在标准输入流(stdin)上提供,或使用您选择的语言最自然的任何文本文件输入机制提供。(如果你选择的语言不具有对文件输入一个自然机制,尽一切似乎在精神上最接近的一次。) 当没有更多数据要读取时(即发生文件结束条件时),输入结束。如果需要,可以要求输入以空行终止(显然,您不应将其视为输入的一部分)。如果这样做,请在回答中提及它,以便其他人可以提供正确的测试输入。 每行输入,包括最后一行,都以换行符结尾。您的答案不得将此换行符报告为匹配列。(如果您的解决方案还可以处理最后一行不以换行符结尾的输入,那是很好的,但这不是必需的。)
18 code-golf 

5
跳跃和奔跑
马修喜欢解决难题。每当他设法解决一个问题时,他都会开心地跳来跳去。最近,他真的需要这样做,因为流星雨在他不想掉入的地面上开了坑和洞。 您将获得Matthew想要穿越的风景的一部分,希望最终健康。地面以米为单位,每个米要么是普通地面,要么是一个洞。当他跑步时,他设法跨过每一米。另一种选择是跳跃,每步跨越四米。Matthew从第一个地面电表的最左端开始,想要到达最后一个地面电表(不过,不要超出它-想象一下在景观中给出的最后一个电表以外的无尽洞口)。 输入值 输入在标准输入上以单行形式给出,并以换行符终止。该线由短划线(-)或下划线(_)组成,分别表示地面或孔距计。输入示例可以是: ----__--___--- 给定的景观至少为一处,最长为30米,且始终从地面开始。 输出量 输出是在标准输出上给出的,表示对Matthew的一系列运动命令,即run(R)或jump(J)。如上所述, 奔跑命令使马修奔跑一米,而跳跃则使马修正向前进四米。对于上面给出的示例,可以进行以下移动: RRJRJRR 大致如下所示: 如果没有通过景观的安全路径,!则应打印一个感叹号()。 样本输入 -------- ----__--___--- -_______ -_-_-_-_-_- - 样本输出 JRRR RRJRJRR ! ! (最后的输出为空白,因为没有必要进行任何移动,但是我想Markdown无法解析它) 注意 只需一条可能的路径,因此程序输出不必与样本输出完全一致。只要给出解决方案(如果存在)并且每个移动命令都移动到地面并最终到达最后一个仪表,则输出有效。 标准错误的附加输出将被忽略。 获奖条件 最短的代码胜出,这是高尔夫界的惯例。如果出现平局,则以较早的解决方案为准。 测试用例 有两个测试脚本,包含相同的测试用例: bash(感谢Ventero) 电源外壳 在这两种情况下都调用:<test script> <my program> [arguments]例如./test ruby jumprun.rb或./test.ps1 ./jumprun.exe。 另一个注意 该任务是2011-W24期间在我的大学举行的高尔夫比赛的一部分。参赛者的成绩和语言如下: 104 –哈斯克尔 131 –哈斯克尔 154 – C …

4
打造小型且平衡的手机
您将获得许多权重,而您的任务是使用这些权重构建一个小型的平衡手机。 输入是1到9之间(包括1和9)的整数权重列表。可能有重复。 输出是手机挂起后会保持平衡的ascii图片。最好通过示例显示: 输入 3 8 9 7 5 可能的输出 | +-----+---------+ | | +--+-+ +----+------+ | | | | 8 ++--+ 7 5 | | 9 3 您必须使用显示的ascii字符。水平和垂直段可以是任何长度。移动设备的任何部分都不能(水平或垂直)触摸移动设备的另一个未连接部分。必须将所有重物悬挂在长度至少为1的垂直段上,并且必须有一个垂直段,整个手机都悬挂在该垂直段上。 移动的大小是的总数+,-和|构建它所需的字符。较小的尺寸更好。 您可以根据需要在一个网段上放置任意数量的连接。例如: 输入 2 3 3 5 3 9 可能的输出 | +---+---+-----------+ | | | +--+-+ 5 9 | | | …

6
假错误消息
编写一个程序,打印出编译器或解释器的语法错误消息。错误消息应该具有误导性,因此代码维护人员将需要几天时间才能发现错误是伪造的,这意味着您应该混淆(并隐藏意图)。同样,该错误必须尽可能准确,并且应正确引用该代码。 对于compile program.p && ./program编译的语言,假定您的代码维护人员将在命令行上进行编译和运行程序,这意味着,他无法区分输出是来自编译器还是程序本身。另外,假设您的代码维护者将打开语法错误消息。 作为参考,这是我制作的示例:https : //gist.github.com/359604 该DATA部分对错误消息的字符串进行编码,并且哈希%abcdef表是解码表。错误打印的反斜杠引用使代码维护人员将尝试计算反斜杠。 参赛作品的评分依据: 代码具有明显的意图 /6 代码正确地再现了错误/16 (您的点以16开头,并除以每个错误的相应因素) 正确大写:4 正确的行号和列号:4 正确的措词:每个错误的单词2个 引用的行号误导了代码维护者 /3 例如, ./pythontest1.py: line 7: syntax error near token `(' ./pythontest1.py: line 7: ` x=input("Enter a number:") #Number input' 正常的Python解释器显示正确性为8(16/2),因为在“令牌”之前缺少“意外” ./pythontest1.py: line 7: syntax error near unexpected token `(' ./pythontest1.py: line 7: …

13
海盗宝藏
寻找被海盗隐藏的宝藏真的很容易。为此所需的一切只是一张地图。众所周知,海盗们通过手工绘制地图并以以下方式描述寻找位置的算法:“站在一棵孤独的棕榈树附近,朝森林走30步,朝湖走15步,...” 通过这种路线旅行通常是一个欣赏风景的绝好机会...但是,如今没有人有时间这样做。这就是寻宝者要求您编写一个程序的原因,该程序可以使用给定的地图确定寻宝的确切位置。 输入值 输入包含多条指令<Direction> <Distance>,并用逗号分隔(每条指令后跟一个空格)。 方向是以下之一: N-北,S-南,E-东,W-西, NE-东北,NW-西北,SE-东南,SW-西南。 距离是整数(1到1000)。 输出量 结果是坐标完成后的坐标,保留小数点后三位,中间用逗号和空格隔开。起始位置的坐标为零(0,0)。 第一个坐标为X(东表示坐标大于零,西表示小于零)。 第二个坐标为Ÿ(北手段更加大于零,南手段少大于零)。 例子 1。 N 3, E 1, N 1, E 3, S 2, W 1 3.000, 2.000 2。 NW 10 -7.071, 7.071 3。 NE 42, NW 42, SE 42, SW 42 0.000, 0.000 来源(乌克兰文)。输入格式在那里有所不同。
18 code-golf 

4
帮助琼斯先生享受他的自行车往返
琼斯先生想骑自行车往返。他想以任意顺序参观几个城市,但是他的路线一定不能越过它,因为他不想在假期里两次到同一个地方。因为他真的很喜欢骑自行车,所以路线的长度完全无关紧要,但是他不喜欢在没有目标的情况下绕着风景行驶。他喜欢的路线是从城市直线延伸到另一条,没有任何弯路。 琼斯先生是一位热情的标准高尔夫球手,他希望您找到一个计划,给他计划一个给定的往返城市的计划。输入具有形式A (B|C)。A是一个城市的名字,B并C为它的坐标。您可以假设坐标为正且小于1000。城市的数据集以行分隔。这是一个示例,示例输入可能如下所示: SomeTown(1 | 10) 交流(3 | 4) 无论在哪里(7 | 7) 家(5 | 1) 琼斯先生不是书呆子,他只是想有一个有用的程序。因此,只要满足以下条件,您就可以自行决定输出的外观: 输出是城市地图,并在城市之间绘制了路线。如果正确,则路线不应重叠,应在起点处结束 坐标类似于常规编程:(1 | 1)在NW角。在地图边框上添加标尺,以方便阅读 必须在地图上写下城市名称,但可以随意使用缩写,这在地图上的其他地方都有说明 该地图可以是ASCII图片或图像 保持输出可读 输出可能如下所示: 1234567 1天 2 * * 3 * * 4 B * 5 * * 6 * * 7 * C 8 * ** 9 * * …

15
时间旅行家
以最短的代码在时钟上生成正确时间的获胜。 您是一位经验丰富的时光旅行者,在旅途中会停在许多行星上。每个行星以不同的速度旋转,因此,一天的时间长度不同于我们通常的24小时工作日。结果,行星使用不同小时数的时钟。带有x小时的时钟上的小时与我们的(1、2、3,...,x)排列相似,数字顺时针旋转,x在顶部。 此外,每个行星在一小时内的分钟数不同,在一分钟内的秒数不同。系统将为您提供开始时间和经过的秒数,您必须从中确定结束时间。 输入可以直接从作为参数传递的文件或标准输入中获取。输入的第一行将是您需要处理的时钟数。之后,每个时钟都有三行输入,其中包含以下格式的整数: x y z h m s t 每个字母的含义如下。 x =一天中的小时数(2 <= x <= 99) y =一小时中的分钟数(2 <= y <= 100) z =一分钟中的秒数(2 <= z <= 100) h =起始时间的小时(1 <= h <= x) m =起始时间的分钟(0 <= m <y) s =起始时间的秒数(0 <= s <z) t =经过的秒数 自开始时间起经过t秒后,输出必须是每个时钟的结束时间。您的输出必须格式化为标准时钟时间(HH:MM:SS)。必要时应对数字进行填充,以确保所有数字均为两位数。 测试用例 …
18 code-golf 

5
打印二叉树
受最近关于SO的问题启发... 编写函数以以下格式打印二叉树: 3 / \ 1 5 \ / \ 2 4 6 输出应由一行节点组成,然后由一行/和\表示关系的字符组成,再由一行节点等。 您可以假设所有节点都可以表示为单个字符。 最低层的相邻节点应至少隔开一个空间,上方的节点应适当分开。 有两个孩子的节点应精确地放置在其直接孩子的中间。 亲子关系应该在父母和合适的孩子之间的中间位置(无论您选择哪种方式)。 输入: 输入将作为函数的参数提供。我不会指定树的确切结构,但是它必须可用作实际的二叉树。在我的程序中,没有“树以字符串的形式同时显示为预期的输出”。 您可以打印到输出流或返回包含您选择的输出的字符串。 最短代码的要点,但是与90%正常工作的短解决方案相比,我更喜欢完整工作的长期解决方案。 更新赏金: 为了奖励,我(优化程序)进行了一些小的更改: 输入可以来自STDIN,ARGV或函数参数。 输出必须在STD​​OUT上(或console.log对于JS) 您可以假设输入为数组形式,例如。[1,2,3]要么[1 2 3] 更新2-二进制树实际上应该是二进制搜索树。由于我最初没有提到这一点,因此我将允许用户将将普通数组转换为二进制搜索树数组作为单独的程序对待,而最终字节数仅用于程序将数组作为参数并打印出来像二叉树。

5
修复损坏的随机函数
朋友的计算机上有一个附加卡,该附加卡可生成一个从1到5(含1和5)的完美随机数。不幸的是,他们以某种方式将可乐洒在上面,现在它从1到4的所有数字仅生成2。幸运的是,随机性得以保留,但是2的概率为80%,5的概率为20%,并且没有生成1、3或4。使用此随机源(称为“随机源” BrokenRand()或类似名称),编写一个工作的随机数生成器,该生成器以与原始源相同的完全随机性,以相等的20%概率产生1到5个数字。 最短的程序获胜。BrokenRand由按人口统计选择的客户服务中心咨询机构公正地拨打最少电话的奖励积分,按年龄和性别(即我)细分。

30
棋盘图案
输入: 从stdin或作为命令行参数输入一个小于80的正数。 输出:方形棋盘图案,输入数字的大小。暗场用字母“ X”表示,白场用空格表示。左上角的字段应为“ X”。 需要完整的程序。 例子: 输入 1 输出: X 输入 8 输出: X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X

2
在六角形平铺上计数生物
这项挑战将让您在拼贴游戏Palago中计算“生物”。 生物是可以由六边形网格中匹配颜色的Palago瓷砖形成的任何闭合形状。 游戏Palago由如下图块组成: 这些砖可以旋转120∘120∘120^\circ,240∘240∘240^\circ,或者根本不与任何地方放置在六边形网格上。例如,这是一个需要12个图块的(红色)生物。 挑战 挑战的目标是编写一个程序,该程序将整数n作为输入并计算需要n图块的生物数量(包括旋转和反射)。该计划应能处理多达n=10上TIO。这是代码高尔夫球,因此最少的字节获胜。 示例数据 这些值应与创建者网站的“ 创建计数和估算”部分中找到的数据相匹配。即 n | output ---+------- 1 | 0 2 | 0 3 | 1 4 | 0 5 | 1 6 | 1 7 | 2 8 | 2 9 | 9 10 | 13 11 | 37 12 | 81

15
我乘以源,您(可能)乘以输出!
任务 任务是编写一个程序,该程序输出一致但任意的正整数xXx(因此严格大于0)。这是要抓住的地方:当源重复NñN次(代码被附加/串联N−1ñ-1个N-1到自身)时,程序应该具有的输出的概率以及剩余的概率。输出不变。1N1个ñ\dfrac{1}{N}N⋅xñ⋅XN\cdot xN−1Nñ-1个ñ\dfrac{N-1}{N}xXx 例 假设您的初始来源是XYZ并产生integer 3。然后: 对于:还应该输出的概率为(50%的时间),并输出的概率也为(50 % 的时间)。N=2ñ=2N=2XYZXYZ333121个2\frac{1}{2}2⋅3=62⋅3=62\cdot 3=61212\frac{1}{2} 对于N=3N=3N=3:XYZXYZXYZ应输出333的概率为2323\frac{2}{3}(的时间66.666%)和3⋅3=93⋅3=93\cdot 3=9的概率为1313\frac{1}{3}(33.333%的时间) 对于N=4N=4N=4:XYZXYZXYZXYZ应输出333的概率为3434\frac{3}{4}(的时间的75%)和4⋅3=124⋅3=124\cdot 3=12 的概率为1414\frac{1}{4}(25%的时间) 等等.... 规则 您必须构建一个完整的程序。输出必须打印到STDOUT。 从理论上讲,您的程序应输出具有上述概率的每个可能值,但是由于实现了随机而与之略有偏差是可以的(前提是实现的分布不相同-您不能使用正态分布以节省字节)。 该程序应该(再次,理论上)适用于任意大的NNN值,但是由于精度引起的技术限制对于大NNN是很好的。 输出必须以10为底(禁止以其他任何底数或以科学计数法输出)。允许尾随/前导空格和前导零。 初始来源(当然)必须至少为1个字节长。您可能不会在源副本之间使用换行符。该程序不应接受输入(或具有未使用的空输入)。 这是代码高尔夫球,因此答案的分数是(原始)源的长度(以字节为单位),分数越低越好。 注:此挑战的(多)更难版这一个。

21
从一个开始
给定一个严格的正整数n,请按照下列步骤操作: 用n 1 s 创建一个数组A。 如果A仅具有一个元素,则终止。否则,从第一个元素开始,用A的和替换每对A,如果A的长度为奇数,则保留最后一个元素,然后重复此步骤。 在从第一步到最后一步的每一步之后,输出应包含A的状态。禁止使用标准漏洞。这是一个代码挑战,因此每种语言中字节数最少的解决方案将获胜。 测试用例 这些示例输出中的每一行都是一个状态。您可以通过任何合理的格式输出。 输入: 1 [1] 输入: 4 [1, 1, 1, 1] [2, 2] [4] 输入: 13 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] [2, 2, 2, 2, 2, 2, 1] [4, 4, 4, 1] [8, 5] [13] …

23
吉米可以挂在绳子上吗?
他原父亲的另一个吉米挑战。看看这些其他 可爱的 挑战。 众所周知,最近我们在平台上看到了与Jimmy相关的挑战。现在,吉米是我之前提到的杂技演员,而他还有其他技巧。 这些技巧之一是用绳子吊起来。这是吉米可以悬挂的绳索的示例: || || || || || || 当吉米挂在绳子上时,看起来像这样: || || /o\ || || || 他可以挂在绳子的左侧或右侧,因此: || || || /o\ || || 也有效。但是他不能只垂悬一个身体部位,所以像这样: || || || /o\| || || 是无效的。请注意,当他垂悬在身体的一部分上时,可以看到绳的另一半,因为吉米没有遮住它。 另外,吉米(Jimmy)不喜欢挂在绳子的底部-吓到他了-因此: || || || || || /o\ 是无效的。 挑战 像上面那样输入吉米的情况,并通过真实或虚假的值输出吉米是否会坚持到底。 细节 编写一个需要输入的程序。这可以通过函数或任何其他适当的输入方法。 输入应该是一个吉米和一根绳子的场景,如上面示例所示。 程序应分别根据Jimmy可以挂在绳子上还是从绳子上掉下来,向控制台输出真实或虚假的值。 吉米能够胜任的标准: 他的两个身体部位都在绳子上。 他不在绳底。 …

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.