Questions tagged «code-golf»

Code-golf是在最小的源代码字节中解决特定问题的竞赛。

4
ASCII涂鸦:盒子里的激光
有时候,当我涂鸦时,我会画一个矩形,从一个角开始以对角线开始,然后每当我碰到矩形的一侧时通过“反射”一条线来画出一条线。我继续进行此操作,直到碰到矩形的另一个角为止(并希望矩形的长宽比不是不合理的;)。这就像追踪激光照射到盒子中的路径一样。您将使用ASCII艺术产生这种效果。 例如,考虑一个width 5和height 的盒子3。我们将始终从左上角开始。该#标记框的边界。请注意,宽度和高度是指内部尺寸。 ####### ####### ####### ####### ####### ####### ####### #\ # #\ # #\ \# #\ /\# #\ /\# #\/ /\# #\/\/\# # \ # # \ /# # \ /# # \/ /# # \/ /# #/\/ /# #/\/\/# # \ # # \/ # # \/ …

3
实施PCG
与实现更好的随机数生成器PCG相比,PCG.SE有什么更好的问题?这份新论文声称将提供一种快速,难以预测的小型统计上最优的随机数生成器。 它的最小C实现仅约九行: // *Really* minimal PCG32 code / (c) 2014 M.E. O'Neill / pcg-random.org // Licensed under Apache License 2.0 (NO WARRANTY, etc. see website) typedef struct { uint64_t state; uint64_t inc; } pcg32_random_t; uint32_t pcg32_random_r(pcg32_random_t* rng) { uint64_t oldstate = rng->state; // Advance internal state rng->state = oldstate * …
31 code-golf  random 

7
这些骰子是非传递性的吗?
非传递性骰子是违反概率论直觉的漂亮小玩具。对于此挑战,我们需要一些定义: 考虑两个骰子一个和乙这是在同一时间抛出。我们说,一个 节拍 乙,如果概率一个显示出比数量较多乙严格小于的概率大于乙出比大数量的一个。 现在考虑一组三个带有标签A,B,C的骰子。这样的一组骰子被称为非传递,如果 任一甲节拍乙,乙节拍Ç和Ç节拍甲 或Ç节拍乙,乙节拍甲和甲节拍Ç。 作为我最喜欢的示例之一,请考虑Grime骰子,它具有以下方面: A: 3 3 3 3 3 6 B: 2 2 2 5 5 5 C: 1 4 4 4 4 4 有趣的是,每个骰子的平均值是3.5,就像常规骰子一样。 可以证明: A以7/12的概率击败B。 B以7/12的概率击败C。 C以25/36的概率击败A。 现在这些特定的骰子甚至变得更奇怪了。如果我们将每个骰子掷两次,然后将结果相加,那么拍子的顺序就会颠倒: B击败A的可能性为85/144。 C以85/144的概率击败B。 A击败C的可能性为671/1296。 让我们用此属性Grime-nontransitive调用一组骰子。 另一方面,如果骰子在使用两次抛出时仍保持其原始循环,则将它们称为非传递性强。(如果两次抛出都没有循环,我们可以简单地将它们称为非传递式。) 挑战 给出三个六面的骰子,确定哪些上述性能这组具有,和下面的字符串输出的一个:none,nontransitive,Grime-nontransitive,strongly nontransitive。 您可以编写程序或函数,通过STDIN,命令行参数,提示或函数参数接受输入,然后将结果写入STDOUT或以字符串形式返回。 您可以假设所有边都是非负整数。您不能假定边或骰子的顺序特殊。您可以采用任何方便的列表或字符串格式输入。 这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。 测试用例 none 1 2 …

8
ASCII多边形的面积
您应该编写一个程序或函数,该程序或函数接收代表ascii-art多边形的字符串作为输入并输出,否则将返回多边形的面积。 输入是由字符组成_ / \ L V space并newline定义简单多边形的字符串(这意味着没有多余的段,没有自触和没有自相交)。 单个字符单元格的面积为 2 _将单元格拆分为大小,0然后2 \将单元格拆分为大小,1然后1 /将单元格拆分为大小,1然后1 L将单元格拆分为大小,0然后2 V将单元格拆分为大小,1并且1(的两侧V将始终位于多边形的同一侧,因此在列表中将它们一起处理。) 每个字符都连接您期望的字符单元格的两个角(例如,如果是,则为左上角和右上角V)。 面积为7的示例(1+2+1第二行和1+1+1第三行): _ / \ V\/ 输入值 输入将形成一个矩形,即换行符之间将有相同数量的字符。 多边形的任何一侧都可以有多余的空格。 尾随换行符是可选的。 输出量 一个正整数,即多边形的面积。 例子 输出在其输入的最后一行之后。 _ V 1 /L \/ 3 /VV\ L / L/ 14 ____/\ \ / /\/ / \____/ 32 /V\ / \__ \ …

30
以半小时的速度列出一天中的所有时间
最短答案胜出。 必须在24小时内对其进行排序。最后一行没有逗号。 输出应如下: '00:00', '00:30', '01:00', '01:30', '02:00', '02:30', '03:00', '03:30', '04:00', '04:30', '05:00', '05:30', '06:00', '06:30', '07:00', '07:30', '08:00', '08:30', '09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30', '18:00', '18:30', '19:00', '19:30', '20:00', '20:30', '21:00', '21:30', '22:00', '22:30', '23:00', …

23
在“ sjoelen”游戏中计算分数
好的,昨天是圣诞节的第二天,我和我的(祖父母)父母玩了一场名为“ sjoelen”的游戏,在荷兰被称为“ sjoelen”。内部程序员出现在我的脑海中,但是当我得到答案时,我就把它弄丢了。我要你重做。 规则: 您有一块木板,一个sjoelbak,有4个盒子,每个盒子都有自己的编号。当schijf(类似冰球的物体)进入其中一个框时,您会获得该框上方的分数。 当所有四个盒子中都有一个schijf时,您得不到10分,但得20分。 例: 从左至右:3 5 4 3 每个框具有至少3个schijven(复数的schijf),使得是20×3 = 60分。 结果值:0 2 1 0 0 * 2 + 2 * 3 + 1 * 4 + 0 * 1 = 10点。 总共60 + 10 = 70分。 输入:从左到右 的schijven量,即“ 4 5 4 5”,[4、5、4、5],“ 4 \ n5 \ …

7
高尔夫练习:Python [关闭]
这是在Python中练习高尔夫优化的挑战-可重复使用的技巧和捷径以剃除一些角色。许多人会熟悉Python高尔夫球手,并使用Python技巧中的常见想法。其中一些使用了Python特有的功能,除非您已经看过它们,否则可能不知道它们存在,因此,如果遇到问题,请仔细阅读提示。 目标: 有十个问题,每个问题都是供您优化的Python代码参考片段,并提供了代码描述。您的目标是将其重写为更短,但仍在功能上等效。 您试图最小化的分数是所有代码段的总代码长度。参考片段的长度为150。抢先注是最早的帖子。 发布答案:对于每个问题,请发布您的代码及其字符数。如果找不到更短的内容,则可以发布参考代码段。目的是在发布您的答案时不要看别人的答案。请扰乱标记每个单独的问题,包括单独的字符数。您可以显示总数。现在就可以随意破坏您的解决方案或发布新的,没有伪造的解决方案。 有关合法性的详细信息:功能对等意味着可以在不影响其行为的情况下将其替换为程序中的代码(忽略内存使用和运算符优先级之类的表达式)。表达式应产生与等效的值==。注意1.0==1==True。除非另有说明,否则您的代码不应有任何副作用。我不希望这些问题是特定于版本的,但以防万一,您可以为每个问题指定一个Python版本。 问题1:只要列表L中至少包含7个元素,就可以进行迭代 # 16 chars while len(L)>=7: 问题2:检查两个浮点x和y两者是否均为正。 # 11 chars x>0 and y>0 问题3:如果布尔b值为true,则删除的第一个元素L。否则,请保持不变。 # 12 chars if b:L=L[1:] 问题4:检查非空L数字列表中的所有元素是否相等。对于此问题,可以修改列表。 # 22 chars all(x==L[0]for x in L) 问题5:仅当一个数字已经包含该数字时,才将其添加n到列表末尾。LL # 16 chars if n in L:L+=[n] 问题6:表示浮点数的符号x:+1为正,0为0,-1为负。 # 20 chars abs(x)/x if x else 0 …
31 code-golf  python 

30
简单ASCII甘特图
这很简单:打印ASCII 甘特图。 给定任务的范围(开始时间-结束时间元组),请以-字符形式为每个任务持续时间-每个任务在新行中打印甘特时间轴。 例 说我的任务范围是28->35, 34->40, 39->44,甘特图将如下所示: ------- ------ ----- 技术指标 您可以编写完整的程序,命名函数或匿名函数。 您的程序/函数应通过STDIN 或作为参数接受任务。 每个任务应表示为start->endwhere start和endare Integers的字符串。任务由空格或逗号分隔。或者,您可以将其作为整数元组或2个整数的数组/集合来获取。(例如,在JavaScript中,您可以按以下方式获取它[start,end]-允许这样做)。 任何非负数的任务(参数)都应受支持。 为了清楚起见,不允许使用任务收集的单个参数。您可以解析单个字符串参数,也可以支持零个或多个任务参数。其中task是一个元组或大小为2的集合。 您可以假设将仅给出有效输入。这意味着每个任务的持续时间都是正的。 返回值无关紧要,您的代码必须在STD​​OUT上打印时间轴。 输出:每个任务,start空格后接(end-start)破折号和a \n。 不用说,输出线应该与输入(任务)顺序相对应地排序。 \n如果可以的话,可以在之前加上空格。 测试用例 Input: (empty) Output: (empty) Input: 0->7,5->6,3->6 Output: ------- - --- Input: 5->20,5->20,2->10,15->19 Output: --------------- --------------- -------- ---- 获奖 这是代码高尔夫球,因此最小的代码长度(以字节为单位)获胜。 传统上,决胜局是较早的职位。 “标准漏洞不再有趣”。 ----- 编辑 你们中的许多人都知道,允许有一个单一的任务集合参数,并且由于它与原始varargs要求之间没有太大区别, …

13
画一个随机的ASCII Art被子
对于此挑战,ASCII艺术棉被将是一块24个字符宽,18行高的文本块,其中包含=-<>/\水平和垂直对称的类似棉被样式的字符。 被子示例: ======================== ------------------------ //\\//\\\//\/\\///\\//\\ <<><<>>>>><<>><<<<<>><>> /\\/\\\\/\/\/\/\////\//\ ------------------------ /\/////\\///\\\//\\\\\/\ \///\/\/\\\\////\/\/\\\/ \///\/\/\\\\////\/\/\\\/ /\\\/\/\////\\\\/\/\///\ /\\\/\/\////\\\\/\/\///\ \/\\\\\//\\\///\\/////\/ ------------------------ \//\////\/\/\/\/\\\\/\\/ <<><<>>>>><<>><<<<<>><>> \\//\\///\\/\//\\\//\\// ------------------------ ======================== 所有被子都具有相同的形式: 他们总是24乘18。 顶线(第1行)和底线(第18行)=一直贯穿。 第2、6、13和17 -行一直贯穿。 线4和15是相同的随机水平对称的模式<和>。 所有其他线条(3、5、7、8、9、10、11、12、14、16)充满/且\完全随机,从而使整个被子保持水平和垂直对称。 请注意,将被子完全垂直或水平对折时,字符的形状完全匹配。不要将此与字符本身匹配起来混淆。例如线3和线16是不相同的,它们是垂直镜像。 挑战 编写程序或函数,以打印或返回随机的ASCII艺术被子。 由于许多硬编码的行和对称性,唯一真正的随机性来自第3、4、5、7、8、9行的前12个字符: 在第4行的前12个字符应能是任何字符的长度12的字符串<和>。 第3、5、7、8、9行的前12个字符应该可以是任意长度的12个字符串,/并且\(彼此独立)。 然后将这些随机的字符串进行相应镜像以制成整个被子。 以字节为单位的最短答案将获胜。Tiebreaker是较早的帖子。 您可以使用伪随机数生成器。(不,你不需要证明所有的12字符的字符串<>或/\可以与你的语言的PRNG产生。) 输出可以选择包含尾随换行符,但是除了被子必需外,不包含尾随空格或其他字符。

5
一线水族馆
我的岳父母在院子里有一个装满锦鲤的鱼塘。直到我注意到代码中的以下摘录,它才真正引起我的注意。 ',') & '_' ...我的鱼脸从屏幕上回望我... 这给了我一个好主意... 我想要的,我的亲爱的高尔夫球手,是创建一个单行ASCII水族馆,并遵循以下规则: 从水箱一侧到水箱另一侧的水族馆的大小应不小于60个字符且不大于80个字符。储罐的侧面需要使用管道/条(|)字符指示。 鱼必须能够在水箱两侧之间从左向右“游动”。随着它们的转动,从一个方向到另一个方向的过渡需要正视图。 鱼必须如下所示: }}< }} ',') 鱼游正确 (',' {{ >{{ 鱼向左​​游 }}('_'){{ 鱼面朝前 当鱼转向时(机会发生30%),它必须从一个方向开始,面向前方,然后面向另一方向...确保鱼有足够的转向空间,即在转向之前需要六个空间。坦克的边缘最小... 除非鱼在吹泡泡或改变方向,否则它将继续朝其面对的方向前进,如果它进入水箱侧面的六个空间之内,它将改变方向。 鱼(向左或向右)有时可能会(10%的机会)停下来连续吹泡泡(.oO*),因此要求鱼旁边有一个可用空间以使气泡存在,因此,鱼可以只在两侧游泳,节省一个空间。气泡必须消失,鱼才能继续前进。 鱼的行为的一系列示例行,用-字符表示空格,因为此处的代码显示功能有些严格...我希望当您对此进行编码时,这些破折号会被空格代替... 此处的每一行都可以视为延时中的一帧。 |-}}< }} ',')----------| |--}}< }} ',')---------| |---}}< }} ',')--------| |----}}< }} ',')-------| |-----}}< }} ',')------| |-----}}< }} ',').-----| |-----}}< }} ',')o-----| |-----}}< }} ',')O-----| |-----}}< …

8
高尔夫守则:伯爵群岛
一个简单的比赛,受到这个stackoverflow问题的启发: 您将获得一张由卫星拍摄的表面图像,该图像是位图,其中水用'标记.,土地用'标记*。相邻的组*组成一个岛。(*如果两个' '是水平,垂直或对角线邻居,则它们是相邻的)。您的任务是打印位图中的岛数。 一个人*也算作一个小岛。 样本输入: .........** **......*** ........... ...*....... *........*. *.........* 样本输出: 5 优胜者是代码中字节数最少的条目。
31 code-golf 

18
递归首字母缩写词
目的 来自维基百科: 递归首字母缩写词是在其所代表的表达式中引用自身的首字母缩写词。 您的目标是检查字符串是否为递归首字母缩写。 首字母缩写是第一个词 单词不区分大小写,用单个空格分隔。 给定的字符串不包含任何标点符号或撇号。 首字母缩写只能是每个单词的第一个字母。 您还必须提供功能词。为简单起见,每个词都可以视为功能词。 例 f("RPM Package Manager") => { true, [] } f("Wine is not an emulator") => { true, ["an"] } f("GNU is not Unix") => { true, ["is"] } f("Golf is not an acronym") => { false } f("X is a valid …
31 code-golf 

29
漆黑的漆膜(纪念地球一小时)
您的目标很简单:该程序必须将计算机的屏幕完全变黑。 程序启动后,屏幕必须迅速完全变黑,并保持不变,直到退出程序(任何键或alt + F4,鼠标移动等),然后一切都应恢复正常。因此,不允许关闭计算机或关闭显示器的电源。在此期间,不应看到一个非黑色的像素,甚至光标也不会闪烁。 用户不要做任何准备(在程序启动后将鼠标移到屏幕外,断开电缆连接等操作或用户输入),只需启动程序即可。 您可以放心地假设计算机仅连接了一个显示器。我们还假设使用标准台式机或笔记本电脑,因为在没有普通显示器的特定设备上进行操作太简单了。 如果您使用任何外部资源(黑色图像,GUI文件等),它们的字节大小将添加到您的代码大小中。 如果它只能在一个OS系列上运行,或者需要opengl等,但是却要求非常特定的硬件配置,这是可以的。 您的源代码必须用编程语言编写,而不仅仅是其他程序(例如屏幕保护程序)将使用的配置文件。
31 code-golf 

30
角色交叉
我原本希望在PCG中发布更复杂的内容,这是我的第一个难题,但是一个特别的,嗯... Stack Overflow上的作业问题启发了我发布此内容。他们想要: 对于包含奇数个字母的任何给定单词,打印以下模式: P M R A O R G O R R A P M C ++ 请注意,字母是您需要打印的图案中骑士分开的部分。因此,每隔一列为空。-(感谢xnor指出这一点。) 规则 禁止使用C ++。正如我可能将这个问题联系到那里。 您可以使用stdout或任何快速输出字符串的方法(例如,alert()在JavaScript中)。 与往常一样,最短的代码获胜。

30
反转数字的最短方法
编写一个函数(或等效子程序)以接受单个整数值的参数,并返回通过反转参数的以10为基数的顺序而找到的(相似类型的)值。 例如给定76543返回34567
31 code-golf  number 

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.