编程拼图和代码高尔夫

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

22
除数不多的除法
写一个程序或函数,它在正整数a,b并c,并打印或返回a/b到c小数位,使用操作+ - * /%[加,减,乘,除,调制]在正整数:您可以使用所有您的语言允许,但不能使用浮点数。a,b,c的范围将是您语言中无符号整数所允许的范围。数字结果将被截断为最后一个要打印的数字(所以没有round)。 这意味着,如果您的语言没有整数类型(仅浮点数),则可以通过将这些浮点数仅用作正整数来参与。本练习的线索是编写仅在[无符号]整数上使用+-* /%运算来找到浮点数中的数字的函数。 例子 print(1,2,1) 会打印 0.5 print(1,2,2) 会打印 0.50 print(13,7,27) 会打印 1.857142857142857142857142857 print(2,3,1) 会打印 0.6 print(4,5,7) 会打印 0.8000000 print(4,5,1) 会打印 0.8 print(9999,23,1) 会打印 434.7 print(12345613,2321,89) 如果您的语言具有32位未签名,将打印 5319.09220163722533390779836277466609220163722533390779836277466609220163722533390779836277466 以字节为单位的最短代码获胜。如果这看起来不清楚,我很抱歉。测试一些与建议不同的输入。

3
Java Asterisk矩形[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 2年前关闭。 对于我的CS课,我的讲师给我们分配了一个任务,即创建一个由星号制成的矩形,并用Java在其中绘制出对角线。 他还告诉我们将其写入尽可能少的字节中。我已经将其缩减为190个字节,但是我需要找到一些来简化此代码,甚至更多以减少字节。谁能帮我这个? 这段代码是有效的: interface d{static void main(String[]a){for(int z=0,w=new Byte(a[0]),h=new Byte(a[1]);z<h*w;){int y=z/w,x=z++%w;System.out.print((x>w-2)?"*\n":(y%(h-1)*x*((y-x)%3)==0)?"*":" ");}}} 输入为10 10。 输出: ********** ** * * * * * * ** * * * * ** * * * * * * ** * * * * ** * * * * * * …
15 tips  java 

15
最终号码
挑战 编写一个程序,该程序接受一个由4个整数组成的数组(表示由某种算法生成的数字序列),并返回随后的下一个整数。 我们将只使用简单的加,减,乘和除法算法,该算法具有恒定的(即不变的)变化。 对于除法,我们将使用floor整数值:133/4 = 33和33/4 = 8 您可以假设总会有一个有效的返回值 测试用例 [14,24,34,44] 应该返回54(加法算法) [105,45,-15,-75] 应该返回-135(减法算法) [5,25,125,625] 应返回3125(乘法算法) [256,64,16,4] 应该返回1(除法算法) 通用规则 这是代码高尔夫球,因此最短的答案(以字节为单位)将赢得挑战。 禁止出现标准漏洞
15 code-golf  number 

8
卢卡斯诉 车库门遥控器
免责声明 虽然我知道有一个特定的相关问题,但我的问题使用了两个车库门和一个随机组成部分,我也基于现实生活中的事件,看到儿子在我走出车库时不小心放下了其中一个车库门。上周的车库...没什么可让头脑震撼的!;) 的背景 卢卡斯(我15个月大的儿子)喜欢和车库遥控器一起玩。此遥控器上有两个按钮,一个用于左侧车库门,一个用于右侧车库门。两个按钮的工作方式相同。按一次使门开始打开,再按一次停止,再按一次开始关闭,再按一次再次停止,依此类推。 卢卡斯(Lucas)喜欢这个遥控器,他会随机按下其中一个按钮,或者同时按下两个按钮,或者完全不按下。如果两者都按下,则不会发送信号,但是按下一个按钮将发出信号。 因此,代码高尔夫球挑战分为两个部分: 第一部分 生成一个60字符长的字符串,表示卢卡斯在一分钟内随机按下按钮。在这种情况下,“随机”表示“在每个刻度上每个输入的机会均等”。字符如下: 0:卢卡斯未按下任何按钮,或者同时按下了两个按钮。无论哪种方式,都没有发送信号。 1:卢卡斯按下了左车库门的按钮 2:右车库门的按钮已被Lucas按下 第二部分 使用在第一部分中生成的字符串,使用数字作为打开,停止和关闭这些门的触发器来模拟两车车库的打开和关闭。 我的车库门非常快(有关原因,请参见上面的免责声明)。按下按钮后,需要四秒钟才能完全打开或关闭。 因此,如果关闭: 0秒:0%打开(关闭);当按下按钮时,门开始打开 1秒:打开25% 2秒:50%开启 3秒:75%开启 4秒:100%打开,门停 因此,如果打开: 0秒:100%打开;当按下按钮时,门开始关闭 1秒:打开75% 2秒:50%开启 3秒:25%开启 4秒:0%打开(关闭),门停止 如果特定的门在运动,则向该门的信号将使其停止。下一个发送到同一扇门的信号将使它朝相反的方向移动。如果门在先前运动时已停止,而在收到“停止”信号时现已完全打开或完全关闭,则该门将在完全打开或完全关闭状态下注册为“已停止”,准备进行接收到新信号时,向相反方向移动。 通过此模拟,两个车库门将最初处于关闭位置。因此,让我们看一下10秒的命令列表,看看如果Lucas在远程执行命令会发生什么: 2120221120 2: (L:0% stopped, R:0% opening) 1: (L:0% opening, R:25% opening) 2: (L:25% opening, R:50% stopped) 0: (L:50% opening, R:50% stopped) 2: …
15 code-golf 

10
可见建筑物
此难题源自CodinGame SamSi的“城市之心”难题。 描述 您决定在n* n瓷砖城市中散步并转到中心瓷砖。所有建筑物都无限小,但是您拥有超强的视野,可以看到一切近在咫尺。 约束条件 n 总是很奇怪 您可以看到没有被其他建筑物直接遮挡的任何建筑物 任务 用标记每个可见的建筑物*。该建筑物是可见的,前提是它没有被完全相同的视线内的另一栋建筑物所阻挡。 换句话说,如果@是原点,则建筑物是可见的,前提是x坐标和y坐标互为质数。 输入和输出示例 输入: 7 输出: ** ** * * * * ******* *@* ******* * * * * ** ** *是一栋可见的建筑物, 是一栋无形的建筑物, @就是您所在的位置。 计分 请记住,这是code-golf,所以以字节数最少的答案为准。 var QUESTION_ID=91394,OVERRIDE_USER=59057;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 getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return …

1
象棋转换
在国际象棋世界中已经做了很多工作。例如,存在一种标准的文件格式,.pgn该格式描述了一个国际象棋游戏,其中包括动作列表。此外,还有另一种文件格式.fen,它描述了电路板的位置。 今天的挑战是将国际象棋移动(以代数符号表示)列表转换为棋盘位置。 定义 位置[a-h][1-8]:通过附加行(文件)和列(行)来给出。定义板上64个可能的位置之一。 片[KQRBNP]?:表示ķ ING,Q ueen,- [R OOK,乙 ishop,K Ñ飞行,P芒。用代数符号P不使用。在板上使用时,如果字母为白色,则字母为大写,否则为小写。 移动[KQRBN]?[a-h]?[1-8]?x?[a-h][1-8](=[KQRBN])?(+*?)?|O-O(-O):一块,然后是它要移动的位置。 如果片段不明确,则给出行或列,或同时给出两者。 如果工件正在捕获工件,则将x其放置在工件和位置之间。 如果此举是a脚的话,O-O则为国王一方,否则为O-O-O。 如果要提升典当,则在移动=之后附加要提升的棋子。 如果此举使国王受阻,则会附加一个 +。 如果此举使国王成为将军,则将其附加在#。 作品的颜色由匝数决定(白色和黑色交替匝数,从黑色开始)。 木板(([1-8]|[KQRBNPkqrbnp])*\/){8}:通过按行顺序列出碎片来指定行。如果有空方块,则使用游程的长度给出每个空方块的游程。行使用分隔/ 董事会的初始职位为rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR,代表: rnbqkbnr pppppppp PPPPPPPP RNBQKBNR 您需要列出一个Move清单并返回一个Board。您可以假定您的输入有效。 例子 -> rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR e4 -> rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR e4,c5 -> rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR e4,d5,exd5,e5 -> rnbqkbnr/ppp2ppp/8/3Pp3/8/8/PPPP1PPP/RNBQKBNR e4,d5,exd5,e5,dxe6 -> rnbqkbnr/ppp2ppp/4P3/8/8/8/PPPP1PPP/RNBQKBNR e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4 -> r1bqk2r/ppp2pp1/4Pn2/2P4p/6nP/8/PPP2PPN/RNBQKB1R e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4 -> r1bqk2r/ppp2pp1/4P3/2P4p/3Q2nP/6P1/PPP2n1N/RNB1KB1R e4,d5,exd5,e5,dxe6,Bc5,Nf3,Nf6,d4,Nc6,dxc5,Ne5,h4,h5,Nh2,Neg4,g3,Nxf2,Qd4,N6g4,Bf4,O-O -> …
15 code-golf  chess 

2
钝化图像
介绍 坦白说,尖锐的边缘很危险,因此,如果输入PNG,请使用以下所述的方法模糊图像,并钝化那些锐利的尖锐边缘。 方法 要获取每个像素的RGB值,请使用以下三个公式: R = 1.5 × ∑ña = 1[R2一种ñ------------√[R=1.5×∑一种=1个ñ[R一种2ñR = \sqrt{\frac{1.5\times\sum^n_{a=1}R^2_a}{n}} G = 1.5 × ∑ña = 1G2一种ñ------------√G=1.5×∑一种=1个ñG一种2ñG = \sqrt{\frac{1.5\times\sum^n_{a=1}G^2_a}{n}} B = 1.5 × ∑ña = 1乙2一种ñ------------√乙=1.5×∑一种=1个ñ乙一种2ñB = \sqrt{\frac{1.5\times\sum^n_{a=1}B^2_a}{n}} 其中∑ña = 1[R2一种∑一种=1个ñ[R一种2\sum^n_{a=1}R^2_a是每个相邻像素的红色值的平方之和。ññn的值是相邻像素的数量(例如,角像素的ññn值为3,而图像中心周围的像素的ññn值为8)。 相邻像素是在所有方向(左,右,上,下和所有对角线)上均距原始像素1个像素的像素。 例如,在以下3 x 1图像中: 中间像素的RGB模糊值将为: R = 1.5 * (02+ 02)2------------√= 0[R=1.5∗(02+02)2=0R = \sqrt{\frac{1.5*(0^2+0^2)}{2}} = 0 …

5
片三角形字母
给定一个n从1to 26(或0to 25)的输入数字,用来输出从左到右的字母,直到并包括相应的字母a=1, b=2, c=3, ...。扭曲之处在于,字母还必须垂直于字母在字母表中的位置重复。奇数(在1索引时)应在水平线上保持平衡,而偶数应在偏向顶部或底部之间交替(您可以选择先选择哪个方向)。如果您的索引是0,请在前一句中将奇/偶数互换。 换句话说,如果字母的字母值?是#,则#输出中应该有该字母的副本,所有副本均在第#th列中。这些字母应在具有的水平线的上方和下方平均平衡a。如果字母不能均匀平衡,则交替在该行的上方和下方具有“额外”字母。 这是前六个输出(n = 1,2,3,4,5,6,以1为索引,选择与底部的第一者交替显示),以换行符分隔,因此您可以看到模式。解释模式的注释以开头#。 a # On a line by itself ab b # The "extra" letter is below the horizontal c abc # The 'c' splits evenly bc d # Because the 'b' was below, the extra 'd' must be above cd abcd …

30
在不使用内置函数的情况下查找数组中的最小和最大整数
挑战 给定一个从stdin,函数参数,程序参数或其他方法接收的整数数组: 输出只在阵列中的最小和最大数目,通过一个返回值,标准输出,或其它拟合方法。 会话示例 > minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} ) -14 18 参考实施 // C++14 void minmax(std::vector<int> v) { int min = v[0]; int max = v[0]; for(auto it : v) { if (*it < min) min = *it; …

2
有没有一种方法可以缩短胖箭头功能?
从我在PPCG上所看到的时间来看,大多数涉及胖箭头功能的JavaScript条目往往是两个阵营之一: 能够作为单个语句运行并返回答案的简单示例,就像这样 x=(a,b)=>a*a+b 由于使用循环,通常比较复杂的花括号大括号,因此需要使用return语句。p=b=>{m=b;for(a=1;~-m;)--m,a*=m*m;return a%b} 以类别2的上述示例为例,使用花括号概念作为概念证明...是否有办法像这样重新投放此代码(或类似代码),以便消除花括号和return?我只是问这个问题,因为这有可能(并不是说会一直发生)从JS高尔夫球手的代码中消除8个字节。在这种情况下,可以使用任何技术吗?我尝试了递归,但是该m=b语句已被证明有点麻烦,因为我似乎无法动摇它。 对于上面的代码,return无论打高尔夫球的时间短与短,打高尔夫球如何进一步消除这种说法?

20
y的幂可以被x整除的最小正数
任务 给定整数,x并且y它们都至少是2,找到y-次幂可被整除的最小正数x。 例 给定x=96和y=2,输出应该是24因为24是最小的正n满足n^2 is divisible by 96。 测试用例 x y output 26 2 26 96 2 24 32 3 4 64 9 2 27 3 3 计分 这是代码高尔夫球。字节数最少的解决方案获胜。 参考文献 y=2:OEIS A019554 y=3:OEIS A019555 y=4:OEIS A053166 y=5:OEIS A015052 y=6:OEIS A015054

5
可视化差异金字塔
差异金字塔是一个金字塔,其中每个新对角线是最后一个对角线元素之间的差异的绝对值。例如,如果我们从数组开始 2 5 4 9 3 4 现在,我们将它们排列在对角线列中: 2 5 4 9 3 4 现在,我们填写下一个对角线。此数组的连续元素之间的绝对差异为: 3 1 5 6 1 这就是我们的下一个对角线。 2 3 5 1 4 5 9 6 3 1 4 重复直到金字塔被填满: 2 3 5 2 1 4 2 4 5 9 1 3 1 6 3 0 1 …

11
将xxd输出转换为shellcode
从xxd获取一些输出并将其手动转换为可用的shellcode并不有趣,因此您的工作是使过程自动化。 规则 您提交的内容可以是函数,lambda,脚本或任何合理的等效形式。您可以打印结果,或者如果您提交的是函数/ lambda,则还可以将其返回。 您的程序必须带有三个参数,第一个是包含xxd输出的字符串,运行时除了文件名外都没有其他参数,例如:xxd some_file。这是第一个参数的示例: 00000000: 31c0 b046 31db 31c9 cd80 eb16 5b31 c088 1..F1.1.....[1.. 00000010: 4307 895b 0889 430c b00b 8d4b 088d 530c C..[..C....K..S. 00000020: cd80 e8e5 ffff ff2f 6269 6e2f 7368 4e58 ......./bin/shNX 00000030: 5858 5859 5959 59 XXXYYYY 您需要截取包含字节的中间部分(之后的前8列:),然后通过删除所有空格将其转换为shellcode,然后\x在每个字节之前放置一个。 以下是上述输入的输出(忽略任何其他参数): \x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58\x59\x59\x59\x59 您可以假设第一个参数将始终是有效的xxd输出,并且除了文件名外都没有其他参数。 您的输出也应该是一个字符串,其中反斜杠是文字反斜杠,而不用作转义符。因此,当我说“ \ x65”时,我并不是在说字节0x65,甚至不是字母“ A”。在代码中,它将是字符串“ …

5
走迷宫
也许它不是真正的迷宫,但仍然如此。 规则: 输入是一个两行字符串,包括*,1,x和X。那根绳子是迷宫。线的长度相等。 您可以将输入作为带有,(逗号)的字符串或这两行之间的任何方便的分隔符。或者,您也可以将这两行作为函数的单独参数。 输出是退出字符串必须执行的步骤数(最后一步是将您移出字符串的步骤)。 您从左上角(较高的线)开始,在第一个符号之前。 对于每一步,您将向前移动一个符号(从第n个位置到第(n + 1)个位置)。然后,根据您所踩的角色,结果是不同的。这是每个字符的作用: *- 没有。您通常只是踩到它。 x-踩到它后,切换线路,但与起点保持相同的水平距离。例如,您踩到较高行的第三个位置,并在x此处遇到了一个小写字母。然后,您立即移至下一行,但再次移至第三位置。 X-切换线路并转到下一个位置。此处的示例相同,但您也从第三位置移至第四位置(因此,第二行位于第四位置)。 1 -向前移动另一个位置。 每个角色完成工作后,将替换为空格,不再“有效”。 示例如下。 输入: x * 如前所述,您从第一行的第一个符号开始。第一步将您移至字母上x,此字母将您切换至第二行。该字母x不再用作x,而是由代替*。在后面的示例中,这将更有意义。您现在位于底行的星号上,对您没有任何作用。 第二步是将您向前移动,然后退出弦线,因此迷宫完成了,并且花费了2个步骤。 输出 2。 输入: xX* x1* 第一步:继续前进x,这会将您移至x下一行的。这是一条规则,该规则说使用的字符替换为星号。然后,您移回第一行,但x由于它已被使用并成为星号,因此不再存在。因此,您可以安全地在该星号上移动,并且该步骤已完成(您现在位于第一行的第一个位置)。 第二步:继续前进X,它会将您推到较低的线,然后再将您向前推。您现在位于第二行的第三个位置(星号),而从未访问过第二个位置(包含1)。 第三步:向前移动,退出字符串。 输出:3。 测试用例: 输入: *1* xxx 输出:3。(因为1使您跳到第三位置)。在那里您永远不会访问第二行,但这是输入的必需部分。 输入: *X*1*x x*1xx* 输出:4。 输入: 1x1x ***X 输出:3。 输入: 1*x1xxx1*x x*x1*11X1x 输出:6。 输入: xXXXxxx111* …

3
模拟纸牌游戏“ Oorlog”中的“战斗”
让我们为纸牌游戏的一个方面构建一个模拟,我个人以荷兰语名字“ Oorlog”(译为“战争”)来知道。 “ Oorlog”如何工作? 两副纸牌(每张纸牌包括两个小丑)在玩的玩家数量之间平均分配。每个玩家随机洗牌,将其倒置在他们面前,然后所有玩家同时打开该股票的第一张牌。 “战斗”的获胜者由遵循以下规则的纸牌值决定:小丑/王牌击败金;国王击败女王;女王击败杰克;杰克击败10;10败9; ....此外,2和3都击败了Ace / Joker。最后一条规则可能会导致一个循环,其中2或3击败Ace或Joker,Ace或Joker击败某些其他牌,反过来又击败2或3。在这种情况下,2或3赢得战斗。 (在此纸牌游戏中,衣服是无关紧要的。) 当两个或两个以上的玩家拥有相等的最高卡牌时,他们就会有“战争”。这意味着他们将一张卡片倒置,然后每张卡片从库存中打开一张新卡片,再次寻找谁拥有最高的卡片。这一直持续到一个玩家赢得整个战斗为止。 (该战役的所有卡都移到赢得战斗的玩家的弃牌堆中。然后每个人都打开一张新牌。当玩家的存储卡用完时,他们将其弃牌堆倒置并继续使用此新股票。这一直持续到玩家的所有卡都用完,然后赢得最高卡数的玩家才获胜。) 具有三个玩家的“战斗”示例: 4、8,杰克: 杰克获胜。 7,王牌,女王: 王牌获胜。 10、10,国王: 国王获胜。 3,小丑,2: 3胜。 小丑王牌: 2 :2获胜。 3,女王,王牌: 3胜。 皇后区,皇后区9: 皇后区和皇后区之间有一场“战争”,因此继续使用两张新牌:4、8; 8胜。 4、4、4: 所有人都有一场“战争”,所以它继续了三张新牌:8,王牌,2; 2胜。 Jack,5岁,Jack: Jack和Jack发生了一场“战争”,因此它继续增加了两张新牌:5、5; 5和5也相等,因此“战争”再次以两张新牌继续:10,国王; 国王赢了。 小丑,小丑,王牌: 所有人都在打一场“战争”,所以它继续推出三张新牌:9、7、9; 9和9也相等,因此“战争”继续出现了两张新牌:杰克,3; 杰克赢了。 因此,面临代码挑战: 输入: 带数组的STDIN或模拟数组的字符串(您的调用-即使您的语言支持数组也是如此)。此阵列按时间顺序包含一场战斗的卡片(请参阅测试案例以更清楚地了解这一点)。 输出: STDOUT赢得战斗的玩家的索引。 您可以选择是否要零索引(即0,1或2)或一个索引的输出(即1,2,3)。 挑战规则: 输入将是单个数组/代表数组的字符串。因此,您无法使用数组数组来简化它。对于不参与战争的卡,您也不能拥有替代物品。 我们使用数字符号代替字母符号。所以Ace / …

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.