Questions tagged «code-golf»

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

6
ASCII Cayley图
在针对我正在提出的其他挑战进行一些研究时,我遇到了一个Cayley图,特别是这个图。因为我是顶级的 ascii艺术挑战者之一,所以我当然必须为此提出ASCII艺术挑战。 您的挑战是如何在两个生成器上生成自由组的Cayley图的ASCII艺术描述,如下所示: + +++ + | + ++-+-++ + | + + | + +++ | +++ + | | | + ++-+----+----+-++ + | | | + +++ | +++ + | + + | + +++ | +++ + | + | + | + ++-+-++ | …

3
生命游戏arrowlits
背景 这项挑战是为了纪念Apsiller,他们凭借自己的挑战赢得了2016年PPCG最佳影片中的“ 看起来并不那么简单”类别的奖,我的4音符音乐盒可以播放那首歌吗? 恭喜你! 在他们的“关于我”页面上,该用户有一个非常精美的模拟器,用于“ 生命游戏”蜂窝自动机。(严重,请检查一下。)另一方面,单词aspillera在西班牙语中代表“ arrowslit”。鉴于这些事实,这一挑战是关于“人生游戏”中的箭眼。 生命游戏arrowlits 在GoL中,我们将用滑翔机代表一个箭头,并用一系列方块代表一堵墙。一架滑翔机从上方接近墙壁,并试图飞过墙壁的缝隙(箭头所示)。您的任务是检查滑翔机是否穿过箭孔或撞到墙上。 输入项 您的输入是位网格,代表GoL配置。您可以采用任何合理的格式(任意两个可离散打印的ASCII字符的多行字符串,字符串列表,2D整数数组,2D布尔数组等)。为了清楚起见,下面将使用字符的多行字符串.#。 确保输入具有多个属性。首先,它的高度是2N一些Ñ≥6 ,其宽度至少是2N + 2。输入将全部为.s,除了在最上面的三行中的某个位置是滑翔机,而在中间的两行中是一堵墙。滑翔机将向西南或东南方向移动,其位置应确保如果移除了墙,则滑翔器在到达底部边缘之前不会穿过侧边缘(但可能会到达网格的某个角)。滑翔机最初与左边缘和右边缘分开至少.s 步长。它可以处于任何阶段。 墙由块组成,这些块由一列.s 隔开,但在一个地方,它们之间至少由两列.s 隔开。像滑翔机一样,最左边和最右边的块也与边缘分开.s 一步。左边缘上总是至少有一个块,而右边缘上总是有一个块。 这是有效输入网格的示例: ....#...................... ..#.#...................... ...##...................... ........................... ........................... ........................... .##.##............##.##.##. .##.##............##.##.##. ........................... ........................... ........................... ........................... ........................... ........................... 输出量 如前所述,您的任务是确定滑翔机是否撞入墙壁或使其滑到南边。出于此挑战的目的,如果配置不再由单个滑翔机和木块墙组成,则会发生崩溃,无论以后在仿真中发生什么。下图显示了东南滑翔机在两个不同的阶段中不会崩溃的最小间隙(西南滑翔机的条件是对称的)。 ...#........... .#.#........... ..##........... ............... ............... ##...........## ##...........## ...#........... ....#.......... ..###.......... ............... ............... ##...........## …

11
Anagram Quines(警察的线)
这是警察和强盗的挑战,可以在此处找到强盗的线索 您面临的挑战是编写一个程序,该程序输出其源代码的字谜,而不输出原始源代码本身。 例如以下Python程序, print`'print*2``'*2` 版画 'print*2``print*2``' 与原始来源具有相同的字符,但顺序不同。 找到这样的程序后,将其输出作为答案包括在内,而忽略生成它的程序。正如您可能已经猜到的那样,强盗会试图发现您隐藏的程序或任何符合规范的程序。您的目标是制作最强盗无法破解的程序。 规则 与大多数警察和强盗的挑战一样,如果您的答案一周都保持不变,则可以在答案中添加预期的解决方案并将其标记为“ 安全”。一旦安全,抢劫者就无法破解答案。 您不需要包括预期解决方案的语言,但是如果您不包括语言,强盗可以在挑战之前以任何一种语言破解它,而如果您指定语言,则他们只能在提供的一种语言中破解它。 适用Quines的标准规则。

11
防位翻转复合数字
有时,在编写程序时,出于某种原因(例如,密码学),您需要使用质数。我认为有时您也需要使用一个复合数字。有时,至少在PPCG上,您的程序必须能够处理任意更改。而且在方便地提出一个有趣的PPCG问题的情况下,也许甚至您使用的数字也必须能够抵御腐败…… 定义 甲合数是一个整数≥4不是素数,即它是两个较小的整数大于1更大的产物抗性bitflip复合数被定义如下:它是其中复合正整数,如果你把它写如果是二进制格式,则位数应尽可能少,您可以更改该位数中的任何一位或两位,并且该数字仍然是合成的。 例 例如,考虑数字84。在二进制中,即1010100。以下是所有相差不超过2位的数字: 0000100 4 2×2 0010000 16 4×4 0010100 20 4×5 0010101 21 3×7 0010110 22 2×11 0011100 28 4×7 0110100 52 4×13 1000000 64 8×8 1000100 68 4×17 1000101 69 3×23 1000110 70 7×10 1001100 76 4×19 1010000 80 8×10 1010001 81 9×9 1010010 82 2×41 …

8
将大括号转换为右手括号(Sad Brace)
右括号是一种代码括弧式,其中花括号和分号都对齐到文件右侧的单个点。 通常,出于多种原因,这被认为是不好的做法。 挑战 通过任何方法获取多行字符串,并将其花括号样式转换为Right Hand Brace。 对于这个挑战,您只需要它就可以在Java代码上工作,但是,从理论上讲,它应该可以在使用花括号和分号的任何代码上工作。 您必须{};连续抓取所有字符,它们之间必须有任意空格。例如。}},; } }\n\t\t}和,并通过使用空格将它们排列在文件的右侧。 例如: a { b; {c 应该成为 a { b ;{ c 或者,更抽象地说,将所有空格从所有字符的左侧推{};到右侧。 线的缩进应另作保留。字符移动后仅包含空格的行{};可以有选择地删除。 例如: a{ b{ c; } } d; 可能成为 a { b { c;}} d ; 要么 a { b { c;}} d ; 向右推是指所有{};字符对齐到不短于最长行的点。之后的任何空间都可以接受。 因此,以下所有内容都是可以接受的: a { …

30
使用恒定的随机源选择一个介于0和n之间的随机数
任务 给定的正整数n小于2^30您选择以任何方式指定的输入,您的代码应输出介于0和之间的随机整数n,包括。您生成的数字应该随机选择。也就是说,从0到的每个值都n必须以相等的概率出现(请参阅规则和警告)。 规则和警告 您的代码可以假定您的语言或标准库中内置的任何声称统一随机的随机数生成器实际上都是统一的。那就是您不必担心所使用的随机源的质量。然而, 您必须确定,如果您使用的随机源是统一的,则您的代码正确地输出了从0到的统一随机整数n。 调用内置或库随机函数时,任何参数都必须是常量。也就是说,它们必须完全独立于输入值。 您的代码可能以1的概率终止,而不是保证终止。 笔记 randInt(0,n) 是无效的,因为它将输入作为内置函数或库函数的参数。 rand()%n通常不会给出统一的随机数。作为betseg提供的示例,如果intmax == 15和n = 10,那么您获得的可能性0-5将比更高6-10。 floor(randomfloat()*(n+1)) 由于0到1之间的可能浮点值的数量有限,因此通常也不会给出统一的随机数。

21
仅包含这些数字的最小n位素数
您将需要生成带有n数字的最小素数,并且它仅包含list中指定的数字k。 例子: 输入: 4 1 2 为此,您必须生成带有4数字的最小素数,并且该素数必须仅包含数字1和2。 输出: 2111 输入: 10 0 4 7 输出: 4000000007 输入: 6 5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5 输出: 115151 您可以保证输入将始终采用您指定的格式,并且如果输入无效(例如,输入为一位n,而没有k),则可以执行任何操作。 如果不存在此类输入解决方案,则允许您的程序执行以下任一操作: 打印 banana 抛出错误 永远跑 还要别的吗 由于这是代码高尔夫,请尝试以最短的代码为目标。 输入可以是您指定的任何格式。例如,如果您希望您的输入与以下任何一种一样,那就很好。 …

3
安排泡泡
注意,挑战是从math.stackexchange询问的问题复制而来的。 最近,我掌握了一些吹泡泡的技巧。首先,我会像这样吹泡泡: 但是事情开始变得奇怪了: 一段时间后,我吹了一些怪异的气泡: 吹完数百个甚至数千个这样的气泡后,我的额头突然出现问题:给定n个气泡,您可以用几种不同的方式排列它们?例如,如果n = 1,则只有1种排列。如果n = 2,则有2种排列。如果n = 3,则有4种排列。如果n = 4,则有9种排列。 这是4个气泡的9个排列: 在吹完所有这些奇妙的泡泡之后,我决定与您分享点算他们的安排的乐趣。因此,这是您的任务: 目标 编写一个程序,函数或类似的程序,计算可以排列n气泡的方式。 输入项 n,气泡数。n> 0 输出量 排列这些气泡的方式的数量。 获奖标准 如果我们能在您的代码周围吹泡泡,那真的很酷。您编写的代码越小,执行起来就越容易。因此,使用最少字节数编写代码的人将赢得比赛。 额外的信息 信息系统

10
符号矩阵乘法
有很多不同的方法来解释矩阵乘法。我会坚持一个数字,因为我相信这里的大多数人都熟悉它(这个数字非常具有描述性)。如果您需要更多详细信息,建议您访问Wikipedia文章或WolframMathWorld上的说明。 简单说明: 假设您有两个矩阵A和B,其中A是3×2,而B是2×3。如果对矩阵AB或BA进行矩阵乘法,将得到以下结果: 挑战: 用您的语言实现符号矩阵乘法。您将采用两个矩阵作为输入,其中矩阵中的每个元素都由一个非空白ASCII字符(代码点33-126)表示。您必须输出这些矩阵的乘积。 有关输出的规则: 两个条目的乘积之间不应有任何符号。这ab不a*b,a·b,times(a,b)或者类似的东西。这aa,不是a^2。 项的总和之间应有一个空格(ASCII码点32)。这a b不a+b,plus(a,b)或者类似的东西。 这两个规则的基本原理是:矩阵中所有非空白字符都可以用作符号,因此将它们用作数学符号会很麻烦。所以,你可以正常写成a*b+c*d会ab cd。 您可以选择条款的顺序。ab cd,dc ab并cd ba在数学上来说是相同的,所以你可以在这里选择的顺序了。只要在数学上正确,顺序就不必一致。 有关矩阵格式的规则: 矩阵可以以任何您喜欢的格式输入,除了在行之间没有定界符的单个字符串(这是因为输出将被完全弄乱)。两个矩阵必须以相同的格式输入。以下所有示例都是输入和输出矩阵的有效方法。 "ab;cd" <- This will look awful, but it's still accepted. "a,b\nc,d" [[a,b],[c,d]] [a, b] [c, d] 我知道这允许许多看起来很杂乱的格式,但是挑战在于要乘以矩阵而不是格式化输出。 一般规则: 您可以假设输入有效。在给定尺寸下,矩阵乘法始终是可能的。 只有两个矩阵。 您可以假设矩阵是非空的 接受内置函数(但由于格式要求,可能有点麻烦)。 当然,如果需要,您当然可以在输入中使用转义符(\'而不是')。 任何标准的输入和输出方法都可以。 测试用例: 所示的两个输入矩阵之间有一条空线。输出显示在之后Output:。当有两个输出矩阵时,这只是显示其他可以接受的输出。 测试用例#1 Inputs: [a] [b] Output: [ab] [ba] …


28
将ASCII表重新创建为ASCII表
通常,在进行代码搜寻时,我想知道某个字符的ASCII值是什么。我最喜欢的快速查找所有可打印ASCII字符的资源之一是ASCIItable.com。这有一个非常漂亮的图像,它不仅显示可打印的ASCII字符及其值,而且还显示不可打印和扩展的字符以及十六进制,八进制和HTML的值: 当今的挑战是将ASCII表重新创建为ASCII表而不是图像。为简化起见,我们将不使用控制字符(低于32的字符),而仅显示十进制值和字符。换句话说,您面临的挑战是编写打印或返回以下文本的完整程序或函数: Dec Chr | Dec Chr | Dec Chr ---------------------------------- 32 Space | 64 @ | 96 ` 33 ! | 65 A | 97 a 34 " | 66 B | 98 b 35 # | 67 C | 99 c 36 $ | 68 D | 100 …

26
整数的数字硬度
要找到整数的数字硬度,请使用二进制表示形式,并计算可以删除前导和尾随的次数,1直到它以a开头或结尾为止0。去除的总位数是其数字硬度。 这是一个冗长的解释-因此,让我们用一个可行的例子来分解它。 在此示例中,我们将使用数字3167。在二进制文件中,这是: 110001011111 (请注意,在转换为二进制文件的过程中,应确保去除前导零) 它不是以开头或结尾0,因此我们删除了1对位: 1 1000101111 1 还有一个: 11 00010111 11 但是现在开始时有一个0,所以我们不能再删除1对了。总共4个比特我们除去,所以4是数字硬度3167。 但是,对于可以写为2 n -1表示正n的数字(即仅包含1二进制表示形式),永远不会达到0,因此可以删除所有位。这意味着硬度只是整数的位长。 挑战 您的任务是编写一个程序或函数,给定一个非负整数n >= 0,该程序或函数将确定其数字硬度。 您可以提交执行I / O的完整程序,或提交返回结果的功能。您的提交应适用n于您的语言的标准整数范围内的值。 测试用例 如果其中任何一个不正确,或者您想建议添加任何极端情况,请通知我。 0 -> 0 1 -> 1 8 -> 0 23 -> 2 31 -> 5 103 -> 4 127 -> 7 1877 -> 2 …

6
对游戏男孩的有效打字
许多旧的Game Boy游戏经常需要用户输入字符串。但是,没有键盘。这是通过向用户显示“键盘屏幕”来解决的,如下所示: 该“字符指针”将开始于字母A的用户将导航到与所需的字符d-垫的四个按钮(UP,DOWN,LEFT和RIGHT),然后按BUTTON A将其追加到最终字符串。 请注意: 网格环绕,因此UP在字母A上同时按下可将您带到T。 附加字母后,“字符指针”保持不变 挑战 上面的键盘具有更改大小写的选项,并且形状不规则。因此,为简单起见,在此挑战中,我们将使用以下键盘(右下角为ASCII char 32,一个空格): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z . 在这样的键盘上打字非常慢-因此,为了简化操作,您的任务是编写一个程序,该程序告诉用户以最快的方式键入给定字符串的方法。如果有多种最快的方法,则只需要显示一种即可。 输出密钥应为: > 对于 RIGHT < 对于 LEFT ^ 对于 UP v …

19
查找可排序的年份
2013年有一个有趣的属性:数字在排序时是连续的(0123)。让我们将这种类型的数字称为可排序数字:一个非负整数,其基数为10的数字在排序后是连续的。不幸的是,这种情况要到2031年才会再次发生,然后直到2103年才会再次发生。您的挑战是编写一个程序或函数,当通过任何标准方法给定非负整数时,该程序或函数将输出或返回下一个可排序的数字。 规则 输入和输出必须以10为底。 输出可以采用任何合理的格式(数字文字,字符串文字,单项数组等)。 您的代码必须在1分钟内为最多98764的所有输入产生正确的输出。 测试用例 0 -> 1 1 -> 2 9 -> 10 10 -> 12 11 -> 12 99 -> 102 233 -> 234 234 -> 243 243 -> 312 2016 -> 2031 2031 -> 2103 2103 -> 2130 2130 -> 2134 2134 -> 2143 9876 -> …

12
第n个分子
您可以创建所有有理数0 <r≤1的列表,方法是先按分母然后按分子顺序列出: 1 1 1 2 1 3 1 2 3 4 1 5 1 2 3 4 5 - - - - - - - - - - - - - - - - - 1 2 3 3 4 4 5 5 5 5 6 6 7 7 …

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.