编程拼图和代码高尔夫

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

3
画一个随机的六字形
上面的图像称为六字形。六字形是我在DiffEq课堂上涂鸦时制作的一些很酷的图案。制作方法如下: 考虑以下点集,它们的形状像规则六边形。内部的六边形将包含最终的字形,而外部的6个点将形成星形,这是我们开始绘制线条的地方。 从外部的六个点中,随机选择一对。为了提高效率,两个选定的点之间应该至少有一个其他点(否则,它将对最终图形没有影响)。然后,从两个点中的每个点向另一个方向投射射线。该光线被前几行遮挡了。 重复此过程,直到形成所有9个边缘,如以下几幅图像所示。 这是光线被遮挡的示例。射线段的末端仍然可见,但是中间部分被我们绘制的前两个段所遮挡。 这两条光线也被“阻挡”,但这不会造成任何可见的差异,因为它们被同一条其他线阻挡了。 快进直到画完所有9条线。如果您想对这些跳过的步骤进行更详细的说明,我可以进行阐述。 最后,删除星星的点。为了使其看起来更漂亮,还将删除粗点。 挑战 您面临的挑战是输出随机六字形的视觉表示。这是代码高尔夫球,最少的字节获胜。 所有可能的六字形都应以一定的概率出现。通过更改绘制9条边的顺序来生成不同的六字形。 此外,程序输出的所有图像都必须是有效的六字形。某些样式(例如内部六边形的完整轮廓)可能无法显示为六字形,因此您编程时不得输出这些样式。 输出应为图形图像(打印到屏幕或文件)。 六边形必须是规则的,但可以以任何方向出现。 反射/旋转不是唯一的。(这可能使要求1易于遵循)。

3
排序这些债券评级
任务 该信用评级机构指定分级债券根据发行人的信用度,而“三巨头”信用评级机构使用类似(虽然不完全相同)分层分级系统。它们具有明确的逻辑顺序-使用S&P层,AAA> AA +> AA> AA-> A +> ...> BBB> B> ...> C.穆迪使用相似的系统,但对它们的层命名不同( Aaa> Aa1> Aa2> ...> Baa1> ...> C)。 您的任务是设计一个程序,该程序将代表债券评级层的字符串列表作为输入,并输出相同的列表,并按从最高层(AAA / Aaa)到最低层(C)的降序排列。 输入输出 您可以选择输入的格式(列表,每个自变量一个,CSV文件)。您可以假定输入列表中的每个项目都是有效的评级字符串,并且列表中的所有评级字符串均来自同一评级机构。此外,您可能会假设不包含任何时髦的NA风格评级,例如“ NR”或“ WR”-严格从“ Aaa / AAA”到“ C”。输入列表中可能有重复的评分,如果发现,则不应删除它们。 您还可以选择适合您的语言的输出格式,唯一的限制是输出的格式应该是一些标准的文本编码,例如UTF-8或ASCII。 规则和计分 这是代码高尔夫,因此最低字节数获胜,不允许出现标准漏洞。请指定输入和输出格式。 示例程序和测试用例 下面的示例Python程序可以用作正确排序顺序的标准示例。列表Moody和SP是要使用的订购。 Moody = ['Aaa', 'Aa1', 'Aa2', 'Aa3', 'A1', 'A2', 'A3', 'Baa1', 'Baa2', 'Baa3', 'Ba1', 'Ba2', …

3
彩虹化图像
这个挑战是关于逐渐改变图像的色调来制作漂亮的图片,如下所示: (原始) 挑战 编写一个程序或函数,该程序或函数使用两个非负整数和一个您选择的任何常见图像文件格式的图像(您可以采用指向图像或原始图像数据的路径)。 我们将第一个整数称为循环,将第二个整数称为offset。 我们还将浮点步长定义为360倍周期除以图像面积,即step = 360 * cycles / (image width * image height)。 对于图像中的每个像素P,从左到右,从上到下一次移动一行(即,如果像素是字母,则按读取顺序),请执行以下操作: 增加色调的P由偏移度(如果必要的话,从360循环周围为0)。 然后增加抵消由步骤。 以任何常见图像文件格式保存,显示或原始输出结果图像。 此过程递增地增加了图像中的所有像素的色调,使得循环满环周围的色调的彩虹,通过最初偏移色调通过开始偏移。 当周期为1且偏移为0时,如上面的“星夜”图片所示,像素的顶行和底行几乎没有色相偏移,但在这之间有一个完整的颜色周期。 细节 循环可以是任何非负整数,但是您可以假定偏移量是从0到359(含)。 当cycles为0时,图像中的每个像素的色相都会偏移精确的偏移量,因为step也必须为0。(在这种情况下,如果offset为0,则图像根本不会改变。) 如果需要,您可以假设周期和偏移量输入为浮点数(即1.0代替1)。(我意识到它们根本不需要是整数,这只是使挑战变得更加简单。) “色相”是指HSL / HSV颜色模型中常见的RGB颜色空间版本。 例子 原版的: 周期= 1,偏移= 0: 周期= 1,偏移= 180: 原版的: 周期= 2,偏移= 60: 原版的: (感谢ArtOfCode。) 周期= 1,偏移= 120: 原版的: (感谢门把手。) 周期= 1,偏移= …

10
画时间线
给定代表日期的整数列表的输入,输出如下所示的ASCII美工时间轴: <-----------------------------> A B C D E 上面的时间轴是input的输出[1990, 1996, 1999, 2011, 2016]。请注意有关时间轴的几件事: 输出的第一行是一个小于符号(<),多个破折号等于dateOfLastEvent - dateOfFirstEvent + 3(因为必须加一个破折号以包含最后一个日期,然后再加上两个破折号以进行填充),然后是大于符号(>)。 在输出的第二行中,每个事件都放置在位置dateOfEvent - dateOfFirstEvent + 2(假设零索引)。因此,第一个事件放置在位置2,位置在的右侧,两个字符<,最后一个事件类似地放置在的左侧,两个字符>。 每个事件都由一个字母表示。事件1是A,事件2是B,等等。永远不会超过26个事件。如果需要,可以使用小写字母。 没有尾随空格。程序末尾仅允许在末尾添加换行符。 此外, 事件不一定按顺序给出。但是,日期仍然根据其在数组中的位置进行标记。例如,[2, 3, 1, 5, 4]必须输入的 输出 <-------> CABED 您可能会获得一个或多个事件作为输入。例如,[12345]必须输入的输出 <---> A 您可能会假设输入内容永远不会包含重复的日期。 输入可以是整数/字符串的数组/列表,也可以是由任何非数字字符分隔的单个字符串。输入的日期范围为1 ≤ x ≤ 32767。 因为这是code-golf,所以以字节为单位的最短代码将获胜。 测试用例: 32767 32715 32716 32750 32730 32729 …

13
离开巢穴
给定一个非整数的整数列表,请输出一个列表,其中包含每个嵌套级别中的整数(从最小嵌套级别开始),并按从左到右的顺序以原始顺序显示值。如果两个或更多个列表在输入列表中处于同一嵌套级别,则应将它们合并到输出中的单个列表中。输出不应包含任何空列表-仅包含列表的嵌套级别应完全跳过。 您可以假定整数都在(包括)范围内[-100, 100]。列表没有最大长度或嵌套深度。输入中将没有空列表-每个嵌套级别将至少包含一个整数或列表。 输入和输出必须在您语言的本机列表/数组/可枚举/可迭代/等中。格式,或者如果您的语言缺少序列类型,则采用任何合理,明确的格式。 例子 [1, 2, [3, [4, 5], 6, [7, [8], 9]]] => [[1, 2], [3, 6], [4, 5, 7, 9], [8]] [3, 1, [12, [14, [18], 2], 1], [[4]], 5] => [[3, 1, 5], [12, 1], [14, 2, 4], [18]] [2, 1, [[5]], 6] => [[2, 1, …

10
XOROR序列
细胞自动机确实令人着迷。通常谈论的是二进制的,即可以用数字表示的那些。但是,在我看来,这些做法已经死了。三元CA更有趣,但是我们要考虑所有ASCII!那会是多么有趣! 我将为您介绍一个简单的决定规则,而不是为每个角色决定一个规则集。为了决定下一代产品,我们看一下三个“顶部”细胞,就像细胞自动机一样。观察一个例子: QWERTY X Y Z 的“顶部” Y是WER上方,右侧,上方,上方和左侧的单元格。Y将是我要定义的函数的结果,该函数是三字符字符串的函数。的“顶部” X是 QW,或者是不存在/缺少的单元格中填充的空间。 现在,为乐趣功能!由于某种原因,我将此序列称为XOROR序列。让A是左上角单元格则charCode,B是上述细胞则charCode,并且C是右上角的细胞则charCode。然后,将得到的细胞是其charCode为特点(A XOR B) OR C,那就是(A^B)|C。(如果结果值大于126,则将其设置为(CHARCODE % 127) + 32。如果值小于32 ,则不执行任何操作。)这是种子的示例Hello, World!: S: Hello, World! 0: mmmo/c_ z}~)e m = ( )^(H)|(e) = (32^72)|101 = 104|101 = 109 (m) m = (H)^(e)|(l) = (72^101)|108 = 45|108 = 109 (m) etc. 1: …

21
这是有效的变量名吗?
目的 编写程序或函数,以检查变量名是否有效并输出1或True有效,如果变量有效但以下划线(_)开头则为0.5,然后为0或False无效。 规则 如果变量名以下划线或字母(az,AZ,_)开头,并且其余字符为下划线,字母或数字,则在大多数语言中均有效。(az,AZ,0-9,_) 输出1,或者True变量名有效,或者0,或者False无效。 但是,以下划线开头的变量不是一个好习惯,因此如果以下划线开头且名称有效,则返回0.5。 测试用例 输入项 abcdefghijklmnop 输出量 1 输入项 _test_ 输出量 0.5 (以下划线开头) 输入项 123abc 输出量 0 (以数字开头) 输入项 A_b1C_23 输出量 1 输入项 _! 输出量 0 (不是0.5,因为它无效) 输入项 magical pony1 输出量 0 (没有空间) 有标准漏洞。 这是代码高尔夫球,因此最短的代码获胜。 奖励:如果您的程序/函数输出0一个空字符串(""),则为-10%。
23 code-golf  string 

12
确定垂直切片
给定图像,输出[整个垂直截面的像素宽度] 1(如果存在)。如果不存在垂直截面,则输出0。 输入可以作为本地文件或嵌套数组提供。如果选择将输入作为嵌套数组,则白色像素应由真实值表示,而非白色像素应由伪值表示。 1.连续的全白列的数量 您可以假设 没有图像会大于1000平方像素 每个图像最多只能有一个完整的垂直部分 例子 输入: 输出: 50 57 0 0 以下是前两个示例,以黄色突出显示它们的部分:

8
用相应的字母替换数字
创建一个将数字作为输入的函数或程序,并输出一个字符串,在该字符串中,小写和大写字母的ASCII码点被其等效字符替代。 大写字母使用以下代码点: 65-90 小写字母使用以下代码点: 97-122 如果输入中的任何相邻数字等于字母的代码点,则该字母应替换输出字符串中的数字。 规则: 输入将是1到99位之间的正整数 您可以假设仅给出有效输入 您开始用整数(976-> a6而不是9L)的开头替换 输入可以采用任何合适的格式(字符串表示形式可以) 输出可以是任何合适的格式 适用标准规则 例子: 1234567 12345C 3456789 345CY 9865432 bA432 6566676869707172737475767778798081828384858687888990 ABCDEFGHIJKLMNOPQRSTUVWXYZ 6711110010100071111108102 Code000Golf 以字节为单位的最短代码获胜! 排行榜 这篇文章底部的Stack Snippet会根据答案a)生成目录,a)作为每种语言最短解决方案的列表,b)作为整体排行榜。 为确保您的答案显示出来,请使用以下Markdown模板以标题开头。 ## Language Name, N bytes N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数来保持标题。例如: ## Ruby, <s>104</s> <s>101</s> 96 bytes 显示代码段 var QUESTION_ID=71735,OVERRIDE_USER=31516;function answersUrl(e){return"https://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"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function …
23 code-golf  string 

20
位数总和相等
介绍 让我们来数180。这是一个有趣的数字,因为该数字的总和等于: 1 + 8 + 0 = 9 以及该数字的平方形式,或者: 180² = 32400 > 3 + 2 + 4 + 0 + 0 = 9 这些都是9。原始数字和平方数字的位数总和相同。当然,这也可以在OEIS:A058369中找到。 任务 给定一个非负整数n,在此条件下输出第nn个正数。 测试用例(零索引) Input > Output 0 > 1 1 > 9 2 > 10 3 > 18 4 > 19 5 > 45 …

9
查找2D打印对象的容量
在虚构的2D世界中,一组对象的2D打印指令可以用整数列表表示,如下所示: 1 4 2 1 1 2 5 3 4 每个数字代表对象在该特定点的高度。上面的列表在打印时转换为以下对象: # # # # # ### ## #### ######### 然后,我们向其中填充尽可能多的水,结果是: # #~~~~#~# #~~~~### ##~~#### ######### 我们将物体的容量定义为物体完全充满时可以容纳的水的单位。在这种情况下,为11。 严格说来,~当且仅当水单元(#)被同一行中的两个实心块()包围时,它才能在该位置存在。 挑战 以正整数列表作为输入(任何格式),并输出将列表用作指令时打印的对象的容量。 您可以假定列表至少包含一个元素,并且所有元素都在1到255之间。 测试用例 +-----------------+--------+ | Input | Output | +-----------------+--------+ | 1 | 0 | | 1 3 255 1 | …

11
圣诞老人需要送多少只精灵?
圣诞老人需要一些帮助来确定他需要多少精灵来帮助他向每所房子运送礼物。 煤炭比礼物重得多,因此圣诞老人每个屋子里每个顽皮的人都需要三个精灵。只需要两个精灵来帮助圣诞老人携带礼物。 在圣诞老人的地图上,一栋房子用表示*,每栋房子用拆分+。 房子的两边都会有一个数字-左边的数字代表房子里顽皮的人数,右边的数字代表房子里好人的人数。如果一侧没有数字,则将其解释为0。 圣诞老人不会拜访那些不懂圣诞节的人(他们甚至不配煤),因此有时候,房屋的两边可能没有号码。在这种情况下,圣诞老人不需要任何精灵的帮助 例如,圣诞老人的一张地图可能看起来像这样 1*3+2*2+1*+*2 在第一所房子里有1个顽皮的和3个漂亮的,圣诞老人将需要9个精灵。在第二个中,有2个顽皮和2个好人,圣诞老人将需要十个精灵。在第三间屋子里有1个顽皮和0个好人,圣诞老人将需要三个精灵,在最后一个屋子里,有0个顽皮和2个好人,圣诞老人将需要四个精灵。 不过,这是圣诞老人地图之一的过于简化的版本。通常,圣诞老人的地图有多条线,并且呈正方形,以便更好地适合他的列表。法线贴图可能看起来像这样(\n每行的结尾处是a ) 1*2+*+*4+1* 2*4+3*+1*6+* *+*+4*2+1*1 *4+*3+1*+2*3 3*10+2*+*5+* 在此地图中,圣诞老人需要((1 + 0 + 0 + 1 + 2 + 3 + 1 + 0 + 0 + 0 + 4 + 1 + 0 + 0 + 1 + 2 + 3 + 2 …
23 code-golf  string 

11
找出第n个六六元
这次的挑战是找到第n个Fibohexaprime。Fibohexaprime的定义如下: 我们首先观察一个带有斐波那契数的列表: N | Fibonacci number 1 | 1 2 | 1 3 | 2 4 | 3 5 | 5 6 | 8 7 | 13 8 | 21 9 | 34 10 | 55 11 | 89 12 | 144 13 | 233 14 | 377 15 | …

3
编程难题和塔可卡车
Programming Puzzles&Code Golf编程室已开通了炸玉米饼卡车!这个词已经不复存在了,现在来自Stack Exchange网络上的所有用户都在尝试我们美味可口的ASCII 玉米饼。我们需要您的帮助,以确保每个人都及时得到他们的订单。食品卡车内没有太多空间,因此您需要代码尽可能短。 现在进行一些在职培训。 你的工作 编写一个完整的程序,从STDIN读取一个命令,或者编写一个将单个字符串作为输入的函数。玉米饼被打印到STDOUT,按订单生产。 接受订单 客户将通过STDIN或函数参数给您他们的订单。订单将以逗号分隔的所需浇头列表形式出现。浇头的分配顺序决定了它们在炸玉米饼中的出现顺序,首先列出的浇头在底部,最后一个在顶部。这是我们的库存: 豆子 白饭 蔬菜 生菜 鳄梨 酸奶油 莎莎舞 客户可以订购少至1个浇头,但最多订购5个浇头。浇头不必不同。 您可能会假设客户在订购之前熟悉菜单,因此所有订单将仅包含我们库存的食材。也就是说,输入将始终有效。 服务炸玉米饼 客户要求将炸玉米饼打印到STDOUT。它们在食物中带有一些前导或尾随空格是很好的。 市场研究表明,每个人都想将炸玉米饼当作单词吃,而且所有大写字母的单词都更具风味。因此,我们将在所有大写形式中以无空格的形式列出浇头。 为了有艺术感的表达,我们不能只是将玉米饼中的东西放进去并称其为好,我们必须将浇头从左到右轻轻放置,然后根据需要包裹和重复。每个浇头至少要获得2条线。一旦我们检查了样品盘,一切将变得更加清晰。 样品盘 让我们看一些示例订单。 客户下单: Beans,Veggies,Rice,Lettuce,Sour Cream 我们提供: SOUR CREAMS T LETTUC L O ELETTU I R RICERI T T CERICE R I VEGGIE O L SVEGGI T L …

7
金笔!(点和盒)
这是“点和盒子”(又名“笔猪”)挑战山丘之王。游戏很简单,轮到您只需在空的栅栏上画一条线。每次完成一个正方形,您都会得到一个分数。另外,由于我们按照锦标赛的规则进行比赛,如果您在转弯中至少完成一个平方,则您将获得一个额外的转弯。这是一次循环锦标赛,每个漫游器在9x9网格上互相对战两次,每次12次。看看这两个重量级巨人之间的比赛,ChainCollector在其中做得很出色,成为了卫冕冠军Asdf的肉类: 规则 每次移动0.5秒时间限制。 不会干扰其他机器人。 使用PigPen.random()和PigPen.random(int)获得随机性。 不写入文件。 每次对手改变时(每12回合),机器人及其所有持久性数据将被重置。 机器人 每个机器人都扩展Player.java: package pigpen; public abstract class Player { public abstract int[] pick(Board board, int id, int round); } Board是游戏板,主要用来让您进入Pen课程,并且id是您的玩家ID(告诉您是第一还是第二,它round告诉您在哪个回合中与同一个对手(1或2)对战。返回值为an int[],其中第一个元素是penID(1索引),第二个元素是fenceID(0索引)。请参阅参考资料Pen.pick(int),以轻松生成此返回值。有关播放器和JavaDoc的示例,请参见Github页面。由于我们仅使用正方形网格,因此忽略与六边形相关的任何函数和字段。 怎么跑 从Github下载源代码。 编写您的控制器机器人(确保包括package pigpen.players)并将其放入src/文件夹中; 用编译javac -cp src/* -d . src/*.java。运行java pigpen.Tournament 4 9 9 false(可以更改最后两个数字以调整网格大小。仅true当您希望使用pp_record软件时,才应将最后一个变量设置为。) 分数 连锁收藏家:72 助理秘书长:57 懒骨头:51 装订器:36 = LinearPlayer:18 …

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.