编程拼图和代码高尔夫

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

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产生。) 输出可以选择包含尾随换行符,但是除了被子必需外,不包含尾随空格或其他字符。

7
编程吃豆人
Programmin'吃豆人 设置 您扮演吃豆人。您想在其他任何人之前收集颗粒,水果和强力颗粒,同时还要避免出现鬼影。 规则 每个有效的吃豆人都将放在一个迷宫中。10场比赛之后累积得分最高的玩家将获胜。 当所有吃豆人都死了,所有子弹都没了或经过500转时,游戏结束 如果吃豆人去世,他会继续扮演鬼魂 吃强力药丸会使你无敌10回合,并且可以让你吃鬼魂 吃鬼会把鬼传送到一个随机的位置 鬼魂除了吃豆人不能吃任何东西,也得不到任何积分 吃“吃豆人”以下物品将获得以下几点: 颗粒:10 强力颗粒:50 水果100 幽灵:200 迷宫 如果有n个 Pac-Men,则将使用Prim的算法(由于河因素低)生成大小sqrt(n)*10为的迷宫,然后完全编织,优先考虑已经存在的死角。此外,该编织可以跨边缘完成,从而从顶部到底部以及从左到右有一些路径。sqrt(n)*10 将有: 2n 鬼魂 4n 电源粒 2n 水果 n 吃豆人在相连的邻居广场是空的地方。 所有剩余的空白点将充满颗粒 因此,最初有10个玩家的地图看起来像这样(鬼魂=绿色,药丸=水色,水果=红色,吃豆人=黄色): 输入输出 在游戏开始时,系统会为您提供一行字符,这些字符代表地图每个正方形中的墙。对于每个正方形,从左上角开始,向右移动,然后环绕到下一行,您将获得一个十六进制数字,表示墙的情况: 0: No walls 1: North wall 2: East wall 3: East & North wall 4: South wall 5: South …

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 

10
3D:离散混战决斗(现已对非Java提交开放)
更新: isSuicidal()已添加到平面类中,这使您可以检查平面是否与墙处于不可逆的碰撞过程中!! 更新: updateCoolDown()与simulateMove()分离 更新:Sparr编写的非Java条目包装器,可以进行测试,请参阅注释 Zove Games 更新为此KOTH编写了一个很棒的3D可视化程序,这是一个与PredictAndAVoid对抗PredictAndAVoid 的肮脏的youtube视频。 我们对Plane类的simulateMove()函数进行了少许修改,以使其不再更新冷却时间,请在拍摄后使用新的updateCoolDown()函数。如果飞机注定要死机,则新的isSuicidal()将返回true,使用它来修剪敌人的移动并避免撞到墙壁。要获取更新的代码,只需将Controller和Plane类替换为github存储库中的类即可。 描述 这项挑战的目标是编写两个将与另一位参赛者对抗的两架格斗飞机的代码。每转一圈,您就可以移动一个空间并有机会射击。就这样,就这么简单。 好吧,差不多... 竞技场和可能的举动 竞技场是14x14x14的空间围墙。参赛者1的平面从(0,5,0)和(0,8,0)开始,而参赛者2的平面从(13,5,13)和(13,8,13)开始。所有飞机都是从与其最接近的垂直壁水平飞行而开始的。 现在,由于您是在飞行飞机,而不是直升机,因此您不能随便改变方向甚至停止移动,因此每架飞机都有一个方向,并且每转一圈都会向该方向移动一个图块。 可能的方向是:北(N),南(S),东(E),西(W),上(U)和下(D)以及这六个的任何逻辑组合。NS轴对应于x轴,WE对应y,DU对应z。NW,SU和NED是可能的方向示例;UD是无效组合的一个很好的例子。 您当然可以更改飞机的方向,但是有一个限制,您最多只能更改45度的方向。为了可视化,请抓住您的魔方(我知道您有一个),并想象所有26个外部小立方体都是可能的方向(一个字母方向是面,两个字母方向是边,三个字母方向是角)。如果您正朝着由一个小立方体表示的方向前进,则可以将方向更改为与您的立方体接触的每个立方体(对角线触摸计数,但仅可见地触摸,即不触摸该立方体)。 在所有平面指示了它们想要改变的方向之后,他们这样做并同时移动一个图块。 您也可以选择沿有效方向移动,但继续沿原方向飞行,而不是将方向更改为所移动的方向。这类似于拐角处的汽车和变道的汽车之间的区别。 射击和死亡 您每回合最多可以射击一次,这必须在决定飞行方向时同时决定,以及是否要将飞机(以及延伸的枪支)指向同一方向。飞机移动后,子弹立即被射中。射击后有一个回合的冷静,在第三回合,您可以再去一次。您只能朝飞行的方向射击。子弹是即时的,并且会一直直线飞行,直到撞到墙壁或飞机上为止。 考虑到可以改变方向以及“改变车道”的方式,这意味着除了一些对角线,单条线之外,您还可以威胁到前方最多3x3线的列。 如果撞到飞机,该飞机会死亡并立即从板上消失(因为它会完全爆炸或其他原因)。子弹最多只能击中一架飞机。子弹同时射击,因此两架飞机可以互相射击。但是,有两枚子弹不能在空中相撞(我知道这很悲伤)。 但是,两个平面可能会发生碰撞(如果它们最终在同一个立方体中,并且如果彼此交叉而没有最终在同一平面中就不会碰撞),这会导致两个平面都垂死(并完全爆炸)。您也可以飞入墙壁,这将使有问题的飞机垂死并被拐弯处以考虑其作用。在拍摄前要先处理好碰撞。 与控制器通讯 我将接受Java以及其他语言的条目。如果您的输入使用Java,则将通过STDIN获取输入,并通过STDOUT输出。 如果您的条目使用Java,则.your条目必须扩展以下类: package Planes; //This is the base class players extend. //It contains the arena size and 4 plane objects representing the planes in …

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中)。 与往常一样,最短的代码获胜。

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.