编程拼图和代码高尔夫

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

9
穿越时空
介绍: 一般来说,我们通常说四个维度:三维空间的x,y和z; 和一个时间维度。对于这一挑战的缘故然而,我们就会将时间维度分为三个还有:past,present,和future。 输入: 两个输入列表。一种包含整数x,y,z坐标,另一种包含整数年。 输出: 您自己选择的四个不同且恒定的输出之一。一个表示输出space; 一个表示输出time; 一个表示输出both space and time; 一个指示输出neither space nor time。 如果所有三个维度的整数元组之差都不为0,我们将指示我们进入了所有三个维度。 如果过去至少有一年,未来至少有一年,以及至少有一年等于当前年(所以现在),我们将指示我们进入了所有三个时间维度。 例: 输入: 坐标列表:[{5,7,2}, {5,3,8}, {-6,3,8}, {5,7,2}] 年列表:[2039, 2019, 2018, 2039, 2222] 输出: 恒定为space 为什么? 该x坐标[5,5,-6,5]。由于它们并不完全相同,因此我们遍历了x空间维度。 该y坐标[7,3,3,7]。由于它们并不完全相同,因此我们也讨论了y空间维度。 该z坐标[2,8,8,2]。由于它们并不完全相同,因此我们也讨论了z空间维度。 本年度是2018。在此之前没有几年,因此我们没有访问past时间维度。年列表中 有一个2018礼物,因此我们确实访问了present时间维度。() 以上有多个年份,因此我们也访问了时间维度。2018[2039, 2019, 2039, 2222]future 由于我们已经访问了所有三个space维度,但是仅访问了三个维度中的两个time,因此输出将仅为(的常数)space。 挑战规则: 您可以为四种可能的状态使用任何四个不同且恒定的输出。 输入可以采用任何合理的格式。坐标列表可以是元组,大小为3的内部列表/数组,字符串,对象等。年份列表可以是日期对象的列表,而不是整数,如果它对您的字节数有利的话。 您可以假设x,y,z坐标为整数,因此无需处理浮点小数。但是x,,y和/或z坐标中的任何一个都可以为负值。 您不能将输入列表预先订购。输入列表应按照测试用例中显示的顺序。 您可以假设所有年份值都在该范围内[0,9999];并且您可以假设所有坐标都在范围内[-9999,9999]。 如果您的语言没有检索当前年份的任何方式,但是您仍然想应对这一挑战,则可以将其作为附加输入并将答案标记为(非竞争)。 通用规则: …

1
Tatamibari求解器
背景 Tatamibari是由Nikoli设计的逻辑难题。 Tatamibari拼图游戏在带有三种不同符号的矩形网格上播放:+,-。和|。求解器必须根据以下规则将网格划分为矩形或正方形区域: 每个分区中必须只包含一个符号。 一个+符号必须包含在一个正方形。 甲|符号必须被包含在具有比宽度更大的高度的矩形。 甲-符号必须被包含在具有比高度较大的宽度的矩形。 四个片段可能永远不会共享相同的角落。(这是日本榻榻米瓷砖通常的放置方式。) 以下是一个示例难题,并提供了解决方案: 任务 解决给定的Tatamibari难题。 输入输出 输入是一个2D网格,代表给定的Tatamibari拼图。每个单元包含四个字符之一:+,-,|,和您所选择的字符来表示一个非线索细胞。在测试用例中,使用星号*。 您可以选择任何合适的输出格式,这些输出格式可以明确表示Tatamibari拼图的任何有效解决方案。这包括但不限于:(如有疑问,请在评论中提问。) 4元组的列表,其中每个元组包括矩形的顶部索引,左侧索引,宽度和高度(或任何等效表示形式) 与输入形状相同的数字网格,其中每个数字代表一个矩形 坐标集列表,每个坐标集包括矩形中单元格的所有坐标 如果难题有多个解决方案,则可以输出任意数量(一个或多个)的有效解决方案。输入保证至少有一个解决方案。 测试用例 Puzzle: |-* *+| *-* Solution: 122 134 554 ===== Puzzle: +*** **|* *+** ***- Solution: 1122 1122 3322 3344 ====== Puzzle: |*+*+ ***** ****- ***+| +**** Solution: 12233 12233 44444 55667 …

15
Rosencrantz和Guildenstern是代码
在荒诞戏中,罗森克兰兹和吉尔登斯滕死了,两个主要角色罗森克兰兹和吉尔登斯特恩(还是他们??)总是混为一谈,是因为谁感觉到自己缺乏身体,或者有时是自己的身体部位是什么?个人身份。如果他们甚至改头换面都不会荒谬吗? 您的任务是编写一个函数,该函数接受长度大于7个字符的偶数长度(并且设计为4的倍数)的字符串,将其拆分并随机播放。 分割如下:字符串应为format "abscd",其中s为分隔符。第一部分和分隔符abs将是字符串的前半部分,而后半部分将是cd 长度 a将是(string length / 4) - 1 长度 b将是(string length / 4) 长度 s将是1 长度 c将是(string length / 4) + 1 长度 d将是(string length / 4) - 1 这可能确实令人困惑,所以让我向您展示一些示例 ("a" + "bb" + "s" + "ccc" + "d").length //8 1 2 1 3 1 |-------4--------| |----4-----| …
10 code-golf 

15
变相变形金刚(警察线)
强盗的线在这里 警察的任务是编写一个函数或程序,当给定其自身的输入时,该函数或程序将输出有限的确定性字符串。如果为程序提供了不同的输入,则应返回不同的输出。 规则: 提交内容包括 语言名称 如果使用了任何标志,则应将其显示出来。 程序字节数 输出字节数 输出量 如果时间特别长,请提供粘贴框或类似内容 如果其中包含无法打印的内容,请提供一个十六进制转储。 尾随换行符和空格应包含在输出中 输入来自何处(STDIN,命令行等) 如果适用,您可以假定输入中不存在表示EOF的字节,除非您在程序中使用该字节。 如果您的程序被破解,请在强盗标题中的标题中添加指向相应答案的链接。 您的程序直到一周过去才安全,并且您将其标记为安全。 我不赞成使用输入或加密哈希函数为随机种子等技术。我无法阻止他们,但我不会接受利用其中任何一个的解决方案。还要注意,其中一些技术可能会发生冲突,其中不同的字符串会产生相同的输出。 您的目标是拥有最短的输出。在发布此问题后的三周内发布的最短安全解决方案将获胜! 强盗的任务是找到一个大小等于或小于原始文件的程序,该程序也要遵守上述规则。 如果强盗使用不同于预期的解决方案破解您的程序,那么您就有机会通过证明强盗的解决方案不正确来“破解”程序。您可以通过找到强盗程序的输入来实现,以产生相同的输出。 提交示例: brainfuck,10个字节,得分:10 ]<.[<],>[, 这个解决方案是,[>,] <[。<],它只是反转输入 祝好运!

15
查找递归首字母缩写
介绍 一个递归的缩写,是一个包含或引用本身,例如首字母缩写: Fish可能是递归的缩写Fish is shiny hero,通知怎么也包含缩写本身。另一个例子是Hi-> Hi igloo。甚至ppcg paints->ppcg paints cool galaxies pouring acid into night time stars 因此,基本上,如果每个单词的第一个字母拼写出第一个单词或多个单词,那么句子就是递归首字母缩写词。 挑战 编写一个程序,该程序接受由1个或多个单词组成的字符串,并用空格字符分隔,然后输出一个递归首字母缩写词;如果不可能,则输出一个空字符串。例如,不可能为字符串创建递归首字母缩写词,ppcg elephant因为您首先要使用pfrom,ppcg然后将其添加到首字母缩写词,然后使用efrom elephant。但是现在我们有了矛盾,因为首字母缩写词目前拼写为“ pe ..”,与“ pp ..”冲突。例如,也是如此hi。您可以使用hfrom hi,但是句子现在结束了,没有更多字母可以拼出hi,我们只剩下h不匹配的字母hi。(字符串需要的单词数量大于或等于首字母缩写词中的字母数量) 输入和输出不区分大小写 限制条件 输入到程序中的任何内容都将是有效的英语单词。但是,您还必须确保输出有效的英语单词(可以使用数据库,也可以只为26个字母存储一个单词) 适用标准漏洞和默认IO规则 测试用例 hi igloo -> hi ppcg paints -> (impossible) ppcg paints cool giraffes -> ppcg ppcg paints cool …
10 code-golf  string 

25
打网球2:东西方比赛
有一个挑战,让我们打网球的丹尼尔。他建议在南北方向建立法院。我的提议是建立一个法院,以东西方向打网球。 您必须打印一个网球场,但是由于机密原因,您必须以最少的字节数进行打印。 网球场 ------x------ | | x | | | |--x--| | | | x | | ------x------ 原始规则是: 没有多余的空间。 没有标签,因为它们将不公平。 允许使用一个可选的尾随换行符。 这是代码高尔夫球,因此以字节为单位的最短代码胜出!

5
阿弥陀签(Amidakuji)的简化
如果您曾经接触过日本或东亚文化,那么您肯定会遇到过Amidakuji游戏: 正如Wikipedia解释的那样,这是一种抽签在纸上的彩票,用于随机选择N个项目的排列。 例如,它可以用于将开始顺序随机分配给N个人,或者将N个奖赏分配给N个人,依此类推。 了解游戏为何代表排列的诀窍是要意识到每个水平笔划(称为“腿”)都会将其两个项目交换到位。 同一Wikipedia页面还解释了N个项的每个排列P对应于无数个Amidakuji图。水平笔画(腿)最少的那个被称为那个特定排列P的“素数”。 您的任务是使用以下格式(减去字母)接收带有2条或更多垂直线(在本示例中为6条)的Amidakuji图: A B C D E F | | | | | | |-| |-| |-| | |-| |-| | | | | | |-| | |-| |-| | | | |-| |-| | | |-| | | |-| | |-| | |-| |-| | …

5
巫师的法术书
编辑:我以前没有玩过D&D,所以当我最初提出这个问题时,我没有进行适当的研究。对此我深表歉意,我正在做一些修改,这些修改可能会使答案无效,以使它们尽可能完全符合dnd 5e规则。抱歉。 最近的热门网络问题中的D&D爱好者似乎在确定巫师选择的咒语是否与可能性相符时遇到了一些麻烦-我想我们应该提供帮助! 介绍 (所有这些已经在前面提到的问题中进行了描述) 巫师从开始就知道两个1级法术(1级): [1, 1] 每次巫师获得一个等级(除了等级12、14、16、18、19和20),他们都会学习一个新的法术(强制性)。 此外,升级时,可以选择(可选)将其中一个咒语替换为另一个。 学习和替换的法术必须是有效的法术槽位,是你巫师等级的一半。见下表: Sorcerer level Highest spell level possible 1 1 2 1 3 2 4 2 5 3 6 3 7 4 8 4 9 5 10 5 11 6 12 6 13 7 14 7 15 8 16 8 17 …

1
KoTH:Gomoku(连续5个)
五子棋或连续五人棋盘游戏是由两个玩家在网格中用黑白石头玩的。能够连续放置5块石头(水平,垂直或对角线)的人将赢得比赛。15 × 1515×1515 \times 15555 规则 在此KoTH中,我们将玩Swap2规则,这意味着游戏包含两个阶段:在初始阶段,两个玩家确定谁先打谁/谁打黑,然后从玩家开始每回合放置一块石头谁选了黑色。 初始阶段 让玩家成为A和B,A将打开游戏: A在板上放置了两个黑色和白色的石头 B可以选择以下三个动作之一: 玩家B决定玩黑棋:初始阶段结束 玩家B决定放置白色石头并进行白色游戏:初始阶段结束 玩家B决定玩一个黑色和白色的石头:A可以选择颜色 游戏阶段 每位玩家将一块彩色的棋子放在棋盘上,从扮演黑色的棋手开始,直到没有更多的可用空间(在这种情况下是平局)或一位棋手设法在棋盘中玩枚棋子为止行(在这种情况下该玩家获胜)。555 行表示水平,垂直或对角线。胜利就是胜利-玩家是否得分超过一排并不重要。 KoTH游戏规则 每个玩家对战两次: 最初将随机决定谁先 在接下来的游戏中,最后玩的玩家先行 一场胜利值得2分,平局1输0 目标是获得尽可能多的分数 你的机器人 为了使这一挑战适用于尽可能多的语言,将通过stdin / stdout(基于行)来进行输入 / 输出。判断程序将通过在您的机器人的stdin上打印一行来提示您的程序,而您的机器人将在stdout上打印一行。 收到EXIT消息后,您将有半秒钟的时间来完成对文件的写入,然后法官将终止该过程。 随机性 为了使锦标赛可验证,裁判使用种子随机化,并且出于同样的原因,您的机器人也必须这样做。该机器人将通过应使用的命令行参数获得种子,请参考下一节。 争论 该漫游器接收两个命令行参数: 对手的名字 随机种子 用户状态 由于您的程序始终会针对每个游戏重新启动,因此您需要使用文件来保存要保留的所有信息。您可以在当前目录中读取/写入任何文件或创建/删除子文件夹。您无权访问任何父目录中的任何文件! 输入/输出格式 BOARD((X,Y),COLOR)XY[ 0 ,15 )[0,15)[0,15)COLOR"B""W" SPXY(X,Y)[ 0 ,15 )[0,15)[0,15)| 在初始阶段,有三种不同类型的消息: Prompt (judge) …

13
乘除法
给定值x,找到大于y的最小数值,该数值可以乘以x并除以x,同时保留所有原始数字。 新数字不会丢失数字。 新数字不获取数字。 例如: 输入:x = 2,y = 250000 原件:285714 师:142857 乘法:571428 这是正确的,因为285714大于y。然后,当被x除时,结果为142857;当与x相乘时,结果为571428。在这两个测试中,都存在285714的所有原始数字,并且没有添加任何额外的数字。 规则 X应该是2或3,因为更高的值需要太长时间才能计算。 Y必须是大于零的整数。 最短的代码获胜。 测试用例 这些是我最常用的测试用例,因为它们是测试最快的用例。 x = 2,y = 250000 = 285714 x = 2,y = 290000 = 2589714 x = 2,y = 3000000 = 20978514 x = 3,y = 31000000 = 31046895 x = 3,y …
10 code-golf  number 

6
旅行牙刷
介绍 今天的挑战完全是牙齿。具体来说,从一颗牙齿刷到另一颗牙齿需要多长时间。您面临的挑战是,鉴于两颗牙齿的位置,从第一根到第二根要刷牙的时间最短。 挑战 对于这一挑战,我们将使用成年人口的布局: 该图显示了广泛使用的ISO编号系统。系统将嘴巴分为四个部分,并分别为它们分配一个数字:右上(1),左上(2),左下(3)和右下(4)。然后,他们从嘴中开始从1-8编号每个部分的牙齿。因此,从右上角中央起第四个牙齿(第1部分)是牙齿编号14。 假设刷一颗牙齿花费1单位时间。从一颗牙齿向另一颗牙齿横向移动需要0个时间单位。您还可以从牙齿到牙齿正上方或下方的牙齿交叉,这也需要1单位时间。那么,您从牙齿14刷到牙齿31需要多长时间?通过查看上图,您将看到它花费了7个时间单位。计算方法如下: Action : Unit of time Brushing tooth 14 : 1 unit Brushing tooth 13 : 1 unit Brushing tooth 12 : 1 unit Brushing tooth 11 : 1 unit Brushing tooth 21 : 1 unit Cross to bottom of mouth : 1 unit Brushing …
10 code-golf 

7
谁的邻居是敌对的?
介绍 出于挑战的目的,我们将在正方形矩阵定义元素的邻居(使得)为 与对角线,水平或垂直相邻的所有项。(即,它们“环绕”而不环绕)。ËËE一个一个AË= A我,ĴË=一个一世,ĴE=A_{i,j}一个一个AEËËE ËËE 对于悬挂物,的邻居的正式定义用于 MATIX为(0索引): 中 一个我,Ĵ一个一世,ĴA_{i,\:j}n × nñ×ñn\times n一个一个Añ我,Ĵ= { A一,b| (一,b )∈ Ë我,Ĵ∩([ 0 ,n )∩Z )2}ñ一世,Ĵ={一个一个,b∣(一个,b)∈Ë一世,Ĵ∩([0,ñ)∩ž)2}N_{i,\:j}=\{A_{a,\:b}\mid(a,b)\in E_{i,\:j}\:\cap\:([0,\:n)\:\cap\:\Bbb{Z})^2\}Ë我,Ĵ= { i − 1 ,我,i + 1 } × { j − 1 ,Ĵ ,j + 1 } \ { i ,j }Ë一世,Ĵ={一世-1个,一世,一世+1个}×{Ĵ-1个,Ĵ,Ĵ+1个} \ {一世,Ĵ}E_{i,\:j}=\{i-1,\:i,\:i+1\}\times \{j-1,\:j,\:j+1\} \text{ \\ …

2
解决模块化SNISP的暂停问题
本着为Befinge解决停机问题的精神,让我们定义另一种称为Modilar SNISP的 2D语言。Modilar SNISP具有以下六个指令: \ 指令指令指针如下: 如果从顶部接近,请向右走; 如果从右边靠近,则往上走; 如果从底部接近,则向左走; 如果从左侧接近,则向下走。 / 指令指令指针如下: 如果从顶部接近,则向左走; 如果从左侧接近,则上升; 如果从底部接近,请向右走; 如果从右边靠近,则往下走。 ! 跳过下一条指令。 @ 将IP位置和方向推送到调用堆栈中。 #从调用堆栈中弹出IP位置和方向并进行恢复,然后跳过下一条指令。如果调用堆栈为空,则执行停止。 . 什么也没做。 指令指针从右上角的左上角开始。如果它离开了运动场,执行将停止。 模块化SNISP不能比PDA强大,因为它的唯一无限存储源是带有有限字母(所有IP(位置,方向)对的集合)的堆栈(调用堆栈)。暂停问题对于PDA来说是可以决定的,因此这一挑战应该总是可能的。 挑战 您的目标是编写一个程序,该程序使用代表Modilar SNISP程序的字符矩阵,并根据是否停止而返回两个不同的输出之一。 这是代码高尔夫球,因此最短的有效程序(以字节为单位)获胜。 技术指标 字符矩阵的处理方式很灵活:可以使用换行符分隔的字符串,字符串数组,字符数组,二维字符数组,带整数表示宽度的扁平字符数组等。测试用例选择其中的第一个。 您可以假设输入矩阵将是矩形的(因此您不必填充短行)并且长度和宽度将为非零。 您可以选择任意两个不同的输出,而不仅仅是真/假。 你可以假设输入矩阵将只包含有效的命令(\,/,!,@,#,和.)。 当说一条命令“跳过下一条指令”时,您可以假定将要跳过下一条指令。特别是,在以下情况下将永远不会遇到它:(1)它位于运动场的边缘,并且(2)IP垂直于该边缘移动,以使IP之后的“下一条指令”位于运动场之外。 测试用例 以下代码段可用于测试使用该语言的程序。请注意,它比此处给出的实际规范稍微宽松一些(例如,它允许使用.非禁忌字符)。 function htmlEscape(t){let i=document.createElement("span");return i.innerText=t,i.innerHTML}function tick(){snisp.tick(),snisp.update()}function run(){runButton.style.display="none",stopButton.style.display="",code.style.display="none",executionArea.style.display="",snisp.initialize(),intervalId=setInterval(tick,INTERVAL_MS)}function stop(){runButton.style.display="",stopButton.style.display="none",code.style.display="",executionArea.style.display="none",clearInterval(intervalId)}let TICKS_PER_SECOND=5,INTERVAL_MS=1e3/TICKS_PER_SECOND,runButton=document.getElementById("run-button"),stopButton=document.getElementById("stop-button"),code=document.getElementById("code"),executionArea=document.getElementById("execution-display"),intervalId,snisp={x:null,y:null,direction:null,callStack:null,stopped:null,playfield:null,padRows:function(){let t=Math.max(...this.playfield.map(t=>t.length));for(let i=0;i<this.playfield.length;i++)this.playfield[i]=this.playfield[i].padEnd(t,".")},initialize:function(){this.x=0,this.y=0,this.direction="right",this.callStack=[],this.stopped=!1,this.playfield=code.value.split("\n"),this.padRows(),this.update()},getCurrentChar:function(){let t=this.playfield[this.y];if(void 0!=t)return t[this.x]},backslashMirror:function(){let …

5
告诉我月相!
挑战 给定月球图像作为输入,输出月球的相位。 月相 您的程序将以png格式提供这些图像之一,并且您必须完全按照给定的相位输出相位: new moon 十六进制转储 waxing crescent 十六进制转储 first quarter 十六进制转储 waxing gibbous 十六进制转储 full moon 十六进制转储 waning gibbous 十六进制转储 third quarter 十六进制转储 waning crescent 十六进制转储 输入值 输入将是240 px x 240 px png文件的路径,并且将是上面的图像之一。 图像字节保证是相同的。 获奖 最短代码胜出

3
输出ASCII“ splat”
如果朝给定方向扔ASCII鸡蛋,最终将得到大小为n的ASCII代码。它以一个o(蛋黄)“开始” ,并以给定的方向(由2到n个 组成的“线”)继续*。的*s被一个“空格”分隔,而的s o和所有“线” 被“ space” 的“线” *分隔。 splat的方向可以是的八个方向之一o,例如: 1 2 3 4 o 5 6 7 8 下面是在方向大小为4的ASCII层片的实施例5,2和3分别。左边是实际的ASCII图示,而右边是一样的图示,但与“空间”“行”与实际的“线”替换(即-或\或|取决于方向)只是为了澄清什么是一个意思空间的“线”。 Size 4, direction 5 * | | |* * | |*| * * |*| |* o * o| |*| * * |*| |* * | |*| * | | |* Size …

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.