编程拼图和代码高尔夫

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

2
计算最大栅栏布置
背景 我要建篱笆。为此,我收集了一堆电线杆,并将其固定在地面上。我还收集了很多木板,将它们钉在电线杆上,以制作实际的围栏。我在建造东西时往往会被带走,很可能我会一直把木板钉在电线杆上,直到没有更多的地方放它们了。我想让你列举出我最终可能会遇到的障碍。 输入项 您的输入是一个二维整数坐标列表,以任何方便的格式表示极点的位置。您可以假定它不包含任何重复项,但是不能假设有关其顺序的任何信息。 这些板由两极之间的直线表示,为简单起见,我们仅考虑水平和垂直板。如果两极之间没有其他极或板,则可以将它们连接在一起,这意味着两板不能互相交叉。如果不能在其中添加新的板,则极和板的布置是最大的(等效地,在任何两个水平或垂直对齐的极之间有一个极或一个板)。 输出量 您的输出是可以使用极点构造的最大排列数。 例 考虑输入清单 [(3,0),(1,1),(0,2),(-1,1),(-2,0),(-1,-1),(0,-2),(1,-1)] 从顶部看,杆的相应排列如下所示: o o o o o o o o 可以使用这些极点构造三种最大的排列方式: o o o o-o o|o o-o o----o o||| o o| | o o-o o|o o-o o o o 因此正确的输出是3。 规则 您可以编写函数或完整程序。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 [] -> 1 [(0,0),(1,1),(2,2)] -> 1 [(0,0),(1,0),(2,0)] -> …

2
总结彩色图
在某些情况下,通常在物理学中,您必须对图形求和。您面临的挑战是以您选择的语言编写一个程序或函数,该程序或函数将多个图形作为图像,计算所有可能的总和,然后输出结果。 图表 这些图是包含白色(rgb(255, 255, 255))背景且每列中都有非白色像素的图像。例子: 脚本的值表示为彩色像素的Y位置。某个X坐标处的值等于该列中最上面的彩色像素的Y位置,坐标从左下角的0开始。出于美学原因,在这些像素下方可能有也可能没有其他彩色像素。 任务 您的任务是以您选择的语言编写一个程序或函数,该程序或函数将多个图形作为图像,计算所有可能的2^n - 1总和,然后输出结果。 图形总和是其中每列的值等于每个输入图形中相应列的值之和的图形。 图表将有多种颜色。结果图像必须包含所有可能的图和,以及其他图,包括原始图,但不包括零和。 每个总和的颜色由所包括的图表的颜色(例如颜色图表)的平均值确定,rgb(255, 0, 255)并且rgb(0, 255, 255)将生成的图表rgb(128, 128, 255)(也可以四舍五入)。 生成的图像应与适合所有图形的图像一样高。这意味着您可能必须输出比任何输入都大的图像。 将结果图绘制到结果图像的顺序无关紧要,即,如果结果图重叠,则可以选择哪一个在顶部,但它必须是图之一,而不是其颜色的组合。 您可以假定输入图像的宽度相等,图像的所有列至少具有一个非白色像素,并且图像(包括输出)的高度低于4096像素。 例 输入A: 输入B: 输出示例: (如果有人感兴趣,我从随机公司的股票图表中复制粘贴了这些数据。这是我发现以CSV格式获取真实数据的第一种方法。) 规则 您可以选择任何位图图像输入文件格式。 您可以选择任何位图图像输出文件格式,而不必匹配输入。 您可以使用图像处理库,但是禁止直接完成此任务的任何功能。 有标准漏洞。 这是 代码高尔夫球,因此以字节为单位的最短代码获胜。 图生成器脚本 这是一个生成图的Python 2脚本。输入以行形式给出,前三行作为RGB颜色,其余三行作为数据,以EOF终止。 import PIL.Image as image import sys if len(sys.argv) < 2: sys.stderr.write("Usage: graphgen.py <outfile> …

2
下坡迷宫求解器
下坡迷宫由一系列由0到9(含0)到9(含)之间的数字分隔的行组成,外加一个“ S”和一个“ X”,其中S表示起点,X表示终点。在下坡迷宫中,您只能进入北,南,东或西与您相邻的空间(无对角线),并且只能进入小于或等于您的值的空间目前处于开启状态。 程序应以与输入相同的格式输出路径,以在迷宫中导航,只有所有经过的空格都应带有“”。在它们中,所有未访问的空间中都应带有“#”。起始和结束单元格还应分别保留其“ S”和“ X”。您可以假设迷宫总是有解决方案的。 输入示例: 3 3 3 3 2 1 S 8 9 3 1 1 3 3 0 6 8 7 1 2 2 4 3 2 5 9 7 1 2 1 5 4 3 4 4 6 1 1 X 6 4 4 5 …

2
在Prime中查找程序
让我们将数字0到94分配给95个可打印的ASCII字符: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 空格为0,!为1,依此类推,直到~94。我们还将为Tab(\t)分配95,将newline(\n)分配给96 。 现在考虑无限字符串,其第N个字符是已分配给第N个质数模97 的字符。我们将其称为S。 例如,第一个素数是2,而2 mod 97是2,并且将2分配给",因此S的第一个字符是"。类似地,第30个素数是113,而113 mod 97是16,并且分配了16 0,所以S的第30个字符是0。 S的前1000个字符如下: "#%'+-137=?EIKOU[]cgiosy $&*,0>BHJTV\bflrt~ #%1=ACGMOY_ekmswy"046:HNXZ^dlrx|!)-5?AKMSW]eiko{"&.28DFX^hntv|%+139?CEQ[]agmo{ $,6>HPV\`hnrz~+5ACMOSU_mqsw$(*.BFNX`djp~!'-5;GKQS]_eoq{}"48:>DJRX^tv '17=EQU[aciu 026<>DHJNZ\b#)/7ISaegkqy} $0:<@BFLXdlx~!'/3;?MQWY]ceku(.24LPR\hjt|!'-?EIKWamu$28<>BDNZ`fxz)+AGOUY[_gmwy"0:@LNRT^jl|~#')3;Meiow&(,4DFJRX^bnp%+-37=KQUW]agsy ,06BJPTn )15;=CYegw ".<FHLTZ`dfjpx|~#-/9AES]ikquw&48>FLPbjtz '1=KOU[]y{$,0>BJV\hlr%/1A[_amsw"(04<RTXZf!#)/59?AMQ]_ik{},2FV^bdhj '39CEIOQWacoy{$28<BJPVfrtx%+/7AIOUkqs}*.4FHR`dfp~!);?EGKQS_cw,8:>DJLRhjp %139EUW[aosu&>HNPZ\fhrxz#%/5=[egqy (:@LXZlrv|!35?MSWY]uw"(8@FL^nptz|!'17COacim &>BDHNP\`n+5;GU[eqsw}$*46:HNTX^`jl|'/AEKWY_ek&,:>FPXdvz| 7CIK[agu ,0NTZ`hnrt %)+1GMOSegkwy "<BHLT^~-/59;?AKY_cku{.24:X\dntz!'37=?EIOQ[]ms&*6D`fz~/7=AGU[akmw"*46@HT^vx|#)-5GQW]_eo{}&,28@FPVX^djt|39OQcgoy6>PTV`fhnr#+7IY_ams} (*0:HLdfvx!#-AEGKScioq},48>\^hjptz '-1=CKW[iu 6<HNPfn )/=ACIS[aek(6@BNXZjl~5GM]ouw(,24>FPV\dhnpz|'+179EIWims&*28<DHV\`nz~ =AY_eq}*046:LR^ Stack Exchange会将标签页变成空格,因此这是一个粘贴完标签的PasteBin。 挑战 查找S 的子字符串,该子字符串是使用您选择的语言的有效程序,该字符串输出前M个质数,每行按顺序输出一些正整数M。 例如,2是S的子字符串(它出现在多个位置,但是任何地方都可以),并且2是有效的CJam程序,其输出是 2 这是第一个M = 1个质数,每行依次。 同样,该字符串2N3N5可能是某个地方S的子字符串,并且2N3N5是一个有效的CJam程序,可输出 2 3 …

1
Python 3-尝试打高尔夫球我的作业
注意:这并不是打高尔夫球的挑战;因此,更需要打高尔夫球的建议。 最近,我为我的Web开发类分配了Python作业,以检查是否可以编码。由于我已经对Python感到很自在,因此我决定尝试打高尔夫球,并且我想知道人们是否可以指出我错过的事情。 我已经知道某些地方有多余的空格,但是我对概念性的东西更感兴趣,例如使用while r:r为变量时,然后等待其“耗尽”! 那作业 import random from collections import Counter s=l='' c=['yellow','blue','white','green','Black', 'purple', 'silver', 'cyan', 'magenta', 'red'] n=[10,15,1,10,6,15,10,25,1,12,5,10,4,6,5,12,0,10,1,1] o=i=0 for y in c:l+=y[0]*(random.randint(n[o],n[o+1]));o+=2 l=list(l) print("Welcome to the CIMS Gumball Machine Simulator\nYou are starting with the following gumballs:") for b in c:print(str(l.count(b[0])) + " "+b);random.shuffle(l) print("Here are your random purchases:") …

5
几乎词典列表比较
输入项 两个列表A和B非负整数。 输出量 任一1,0或-1根据是否A大于,等于或小于B相对于所述扭曲词典式排序如下文所定义。如果需要,可以将1,0和替换-1为任何其他三个常数值。 扭曲的字典顺序与普通的字典顺序类似,在于您逐个元素比较列表,并在第一个不同的索引处确定列表的顺序。但是,在扭曲版本中,对于每个索引,我们对非负整数使用不同的排序。即,在每个索引处i(索引从处开始1),第一个i非负整数(从0到i-1)的顺序被颠倒,并且它们移至所有其他数字的上方。此外,表示一个列表比另一个列表短的“缺失元素”直接移到下面i-1。视觉上,索引的顺序i是 i < i+1 < i+2 < i+3 < ... < [missing element] < i-1 < i-2 < i-3 < ... < 2 < 1 < 0 请注意,第一个...表示无限多个数字。这意味着以下列表相对于扭曲的字典顺序而言按升序排列: [3,2,3,4] [3,2,3,5] [3,2,3,10] [3,2,3,1341] [3,2,3] [3,2,3,3] [3,2,3,2] [3,2,3,1] [3,2,3,0] 规则 您可以提供完整的程序或功能。最低字节数获胜,并且不允许出现标准漏洞。 测试用例 Output 1: [0] [] [] [1] …

1
剪刀石头布比赛模拟器
您决定组织一次剪刀石头布冠军赛,以找出谁是最好的。您不想让运气来决定获胜者,所以每个人都必须在比赛前以书面形式给您提供战术。您还喜欢简单的事物,因此竞争对手的举动(显示石头,纸张或剪刀)必须仅基于前一轮(RvR,RvP,RvS,PvR,PvP,PvS,SvR,SvP或SvS)。在第一轮中,玩家必须显示一个固定的标志。 您决定编写一个程序(或函数)来模拟锦标赛。 比赛详情 至少有2位参赛者。 每个玩家都与其他人完全进行一场比赛。 一场比赛持续7回合。 在每个回合中,获胜者获得2分,失败者获得2分。如果出现平局,双方选手得分均为1分。 一名球员在一场比赛中的得分是他或她在比赛回合中得分的总和。 球员在锦标赛中的最终得分是他或她在所有比赛中的积分之和。 输入的详细信息: 您的程序或函数会收到N10个字符长的字符串,每个字符串都对应一个玩家策略。所有字符均为(小写)r p或s表示在给定情况下玩家将显示石头纸或剪刀。 第一个字母代表第一个回合(在该运动员的每场比赛中)。第二个显示如果上一轮是摇滚对摇滚,会发生什么。接下来的是RvP,RvS,PvR,PvP,PvS,SvR,SvP和SvS,其中第一个字母是玩家的牌子,第二个字母是对手的牌子。例如,rrpsrpsrps意味着玩家从岩石开始,然后复制对手的最后一步。 您可以将字符串列表输入为列表/数组或您的语言的类似数据或一个字符串。在后一种情况下,必须使用某种分隔符。 输出的详细信息: 您的程序或函数应按照提供输入的顺序输出每个玩家的最终得分。 分数应以空格或换行符分隔。允许使用尾随空格或换行符。 例子: 输入: ['rrpsrpsrps', 'rpppsprrpr'] 输出:( 5 9转rvr rvp pvs svp pvr rvp pvs) 输入: ['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss'] 输出:( 13 17 12匹配项是5-9(第一对第二),8-6(第一对第三)和8-6(第二对第三)) 这是代码高尔夫球,因此最短的条目将获胜。

2
遗传基础变化
背景 在这一挑战,一个碱基b表示的整数的n是的表达n作为功率的总和b,其中每个术语最多出现b-1次数。例如,的基本4表示2015是 4^5 + 3*4^4 + 3*4^3 + 4^2 + 3*4 + 3 现在,遗传碱基b的表示n是通过将指数纳入其碱基获得的b陈述,然后将它们的指数,等等递归。因此,的遗传基础4表示2015为 4^(4 + 1) + 3*4^4 + 3*4^3 + 4^2 + 3*4 + 3 作为一个更复杂的例子中,遗传碱基3的表示 7981676788374679859068493351144698070458 是 2*3^(3^(3 + 1) + 2) + 3 + 1 从到的遗传基数变化(nbc表示为H(b, c, n))是通过获取的遗传基数b表示形式n,用bby 替换每一个c并评估结果表达式而获得的数字。例如, H(3, 2, 7981676788374679859068493351144698070458) 是 2*2^(2^(2 + 1) …

1
组合喹
背景 您刚刚了解了组合逻辑是什么。对各种组合器感兴趣的是,您花费了大量时间来学习它们。您最终偶然发现了这个特定的表达式: (S I I (S I I)) 您会注意到,在尝试将其简化为正常形式时,经过三个步骤,它会还原为自身: (S I I (S I I)) = (I (S I I) (I (S I I))) (1) = (S I I (I (S I I))) (2) = (S I I (S I I)) (3) 您决心找到具有该特征的其他表达方式,并立即开始对此进行操作。 规则 您可以使用以下组合器的任意组合: B f g x = …

8
保持距离成圈
这是基于这一挑战以及Geobits / CarpetPython提出的改进建议: 保持距离! 对于此挑战,两个数字之间的距离是在一个循环中测量的,因此,例如0与999之间的距离为1。这应避免总是每次都选择最低或最高数字之类的策略。唯一的其他变化是,现在可以选择的最低数字为0而不是1。 我在这里总结一下: 用Java,Python或Ruby编写一个带有三个参数的函数: 到目前为止打过的回合数 玩家人数 前几轮中选取的数字,以空格分隔的字符串数组形式 它应返回0到999之间的整数(含) 每个程序的得分是每个程序选择的数字的距离的平方根之和 100回合后得分最高的程序获胜。 每人一个答案 控制程序在这里: https://github.com/KSFTmh/src/ 排行榜 TheBestOne的NumberOne获奖。 一号-9700 NumberOnePlusFourNineNine-9623 古代历史-9425 FindCampers-9259 WowThisGameIsSoDeep-9069 采样器-9014 破坏者露营车-8545 显然,我的露营者破坏活动... er(?)不能很好地工作。 这是完整的结果:https : //github.com/KSFTmh/src/blob/master/results-3 我认为这足够不同,不能重复。 顺便说一句,这是我第一次在Stack Exchange上提问,所以请让我知道我做错了什么。

3
音乐:这个和弦的名字是什么?
这是音乐的反面:这个和弦是什么?,即按给定的和弦打印音符。这次输入的是和弦中的音符列表,您的任务是输出它是哪个和弦。 您的程序应支持以下三重和弦。例子以C为根。其他根的和弦是相同的和弦,所有音符都旋转,因此C将成为该根音,例如Dmaj由D,F#和A组成。 C C#D D#E F F#G G#A A#B Db Eb Gb Ab Bb Cmaj C E G Cm C D# G Caug C E G# Cdim C D# F# Csus4 C F G Csus2 C D G 请注意,Caug与Eaug和G#aug相同,而Csus4与Fsus2相同。您可以输出其中之一,但如果全部输出,则有额外的好处。 下表列出了奖金的第七和弦: C C#D D#E F F#G G#A A#B Db Eb Gb …

6
所有素数从0到1000
是否可以使C代码更小?它打印出从0到1000的所有素数。 C,89个字符 int i,p,c;for(i=2;i<1e3;i++){c=0;for(p=2;p<i;p++)if(i%p==0)c++;if(c==0)printf("%u\n",i);}
9 code-golf  number  tips  primes  c 

2
最快的算法优化挑战
这是我对渐近复杂性挑战的第一个实验,尽管我完全满意代码中的答案,只要它们带有时间复杂度的解释即可。 我有以下问题。 考虑任务T_1,... T_n和过程M_1,...,M_m。每个任务需要一定的时间才能执行,具体取决于过程。 每个任务还​​需要花费一定数量才能执行,具体取决于过程。 这些任务必须严格执行(它们不能并行完成),并且更改proc需要花费时间。启动任务后,无法将其从一个进程转移到另一个进程。 最后,每个任务必须在一定时间之前完成。 任务 目的是给出一种算法(或一些代码),该算法给出上述表格的五个表,以最大程度地减少完成所有任务的总成本,同时确保所有任务在其截止日期之前完成。如果这不可能,我们只是报告无法完成。 得分了 您应该根据变量n,m和d给出解决方案的大哦复杂度,其中d是最后期限。大Oh复杂度中应该没有不必要的常量。因此,例如,O(n / 1000)应写为O(n)。 只需将n = 100,m = 100和d = 1000设置为您陈述的复杂度即可计算出分数。您想要最小的分数。 决胜局 如果是平局,则第一个答案将获胜。 增加了笔记 log 答案的时间复杂度将以2为底。 计分板 来自KSFT的10 ^ 202(Python)首先提交,因此获得了赏金。 来自DominikMüller(Scala)的10 ^ 202

9
通过一次迭代对负数,零和正整数数组排序
取一个包含负数,正数和零的整数数组。对其进行一次迭代分组并放置在适当的位置,以使所有负数都在前,然后是所有零,然后是所有正数。 例: Input: 5, 3, 0, -6, 2, 0, 5 Output: -6, 0, 0, 3, 2, 5, 5 请注意,数字不需要完全排序:只需按符号排序即可。 因此,最终数组将如下所示: -, -, ..., -, -, 0, 0, ..., 0, 0, +, +, ..., +, + 规则 您只能使用输入数组和恒定数量的附加内存(即,您不能再创建任何数组) 您只能使用一个循环,该循环只能执行与数组长度相同的次数。您不得使用隐藏任何循环的内置函数。这包括内置的排序功能。 结果应为我描述的格式 获胜者将是提交最短代码(以字节为单位)的代码,该代码会将初始数组更改为正确的格式(如上所述)。

3
3x3连接的组件
挑战 考虑3x3国王网格,如以下ASCII图形所示: A--B--C |\/|\/| |/\|/\| D--E--F |\/|\/| |/\|/\| G--H--I 作为输入,您将获得一个长度9的整数列表,这些列表表示节点的标签。例如,输入[0,1,1,2,1,0,5,5,1]代表以下标签: 0--1--1 |\/|\/| |/\|/\| 2--1--0 |\/|\/| |/\|/\| 5--5--1 您的输出是输入中形成连接的节点集的整数集。更明确地说,n当且仅当n连接了带有label的节点集时,输出才应包含输入的整数。在此示例中,可接受的输出为[1,2,5],因为两个0未连接。最低字节数获胜。 详细规则 您可以为输入列表中的节点选择固定顺序,并且应该在答案中说明这一点。按照EFBDHCAGI的顺序,上述标签将指定为[1,0,1,2,5,1,0,5,1]。 您可以编写完整的程序或函数。在后一种情况下,如果您的语言支持,则输出可以是一组整数。 输出列表可能包含重复项,但其长度不能超过9。 不允许出现标准漏洞。 测试用例 这些具有与网格对齐的个位数;将它们调整为您选择的顺序。 011 210 => 1 2 5 551 010 202 => 0 2 221 110 123 => 0 2 3 221 111 111 => 1 111 …

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.