编程拼图和代码高尔夫

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

30
减号,加号,时间,幂?
这是我不久前在我们的聊天室The Ninteenth Byte中发布的CMC(聊天迷你挑战)。 挑战 给定一个正整数x,取决于的最后2位x,请执行以下操作: x & 3 == 0: 0 x & 3 == 1: x + x x & 3 == 2: x * x x & 3 == 3: x ^ x (exponentiation) 输入输出 Single Integer -> Single Integer 输出中允许尾随换行符。不允许其他空格。 测试用例 input output 1 2 2 4 …
26 code-golf  math 

28
划船划船
每个人都可能熟悉以下歌曲,这是一场音乐比赛: 背景 更少的人可能会想起尝试和几个朋友一起唱这首4人版本的歌,但失败了。抵消具有不同音调的歌曲的歌词被称为唱“回合”,这就是我们今天要使用静态输出来模拟的内容。这是某人实际表演作品的示例(链接到音频/视频,将有声音)。 挑战 面临的挑战是要完全按照以下内容输出文本: Row, row, row your boat, |-----------------------------------|-----------------------------------|----------------------------------- Gently down the stream. |Row, row, row your boat, |-----------------------------------|----------------------------------- Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat, |----------------------------------- Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your …

7
一种表达,多种价值
使用我们熟悉的数学符号:+,x,括号和任何有理数,可以轻松创建计算为某个所需数的表达式。例如:1+(2x3)=7,(1+2)+(3x6.5)=22.5依此类推。无聊。 在此挑战中,我们将使用一个新的运算符:±。采用±在表达方式,你需要通过更换来计算表达式±用的+或-在所有可能的方式,并返回集合中的所有可能的值。例如: 1±2±3 = {-4,0,2,6}因为1±2±3可以是,和中的任何一个1+2+3,并且它们的值分别是。 1+2-31-2+31-2-36,0,2,-4 (±2)x(2±3) = {-10,-2,2,10} 由于类似的原因。 现在,事实证明,给定任意一组不同的实数,就可以创建一个表达式+,x,(,),±,和实数计算结果为给定的。 任务 你的任务是写一个程序或功能在您所选择的语言,这需要一个序列(列表/阵列/任何方便的格式)的整数,并输出表达式(作为字符串)包括+,x,(,),±,和有理数计算得出给定数字的集合。 请注意,确切的字符±无关紧要;您可以使用您选择的任何其他字符,只要它可以与您使用的其他字符区分开即可。但是您必须在提交中提及正在使用的字符。 输入允许由所用有理数的十进制近似值(最高合理精度)组成。 输入和输出可以采用任何标准方式进行。 禁止出现标准漏洞。 您可以假设给定的整数将是不同的,并以递增的顺序提供。 输出中可能包含空格和换行符。 获奖标准 这是代码高尔夫球,因此以字节为单位的最短代码获胜。 例子 输入| 可能的输出 ------------- + ----------------------------- [1,2,3] | 2±0.5±0.5 [-7,-3,1,21] | (1±2)x(3±4) 想法来自城镇锦标赛,2015年秋季。

5
相同代码不同字符
注意:此挑战仅允许使用已编译语言的答案 任务 您的任务非常简单,制作两个不同的程序,这些程序在编译时会产生相同的输出。 计分 这就是乐趣所在。您的分数将是一个程序中唯一字节的数量。例如,如果您的两个程序(在IBM Code页面437中编码)是 ☻☻Program A 和 ☺Program B 完全在一个程序中的字符是 ☻☺AB 因此,分数为4。请注意,该分数☻在第一个程序中出现两次,但仅被计数一次。 您的目标是获得最高分数,最高分数可能是256。 这是一个适用于ASCII编码程序的计分程序。 规定 两个程序中的每个字节都应该能够被一个不同的字节替换,从而导致该程序无法编译成不同的结果,或者无法一起编译。删除任何字节都应这样做。 您可以使用任何编译标志,只要两个程序都使用相同的标志运行即可。 如果结果因机器而异,则表明编译应该是静态的(即,每次运行都不应改变),表明所要运行的机器。 编译的输出应逐字节相同,而不是“等效”或“足够相似”。 编译的输出应为非空 编译之间的警告/错误不必相同 如果程序或编译中包含不可打印的字符,请确保包含十六进制转储。尽管这在技术上不是必需的。

11
这个数字的精确度是-2 :(非常)硬模式
这是最近挑战的一个版本,这个数字是2的整数次幂吗?具有一系列不同的标准,这些标准旨在突出问题的有趣性质并使挑战更加艰巨。我在这里考虑了一下。 托比在链接的问题中很好地说明了这一挑战: 有很多聪明的方法可以确定整数是否为2的精确幂。这不再是一个有趣的问题,因此让我们确定给定的整数是否为-2的精确幂。例如: -2 => yes: (-2)¹ -1 => no 0 => no 1 => yes: (-2)⁰ 2 => no 3 => no 4 => yes: (-2)² 规则: 整数是64位带符号的二进制补码。这是您可以使用的唯一数据类型。 您只能使用以下操作。这些都算作一项操作。 n << k,n >> k:左/右移位n通过k比特。符号位右移扩展。 n >>> k:右移,但不扩展符号位。0移入。 a & b,a | b,a ^ b:按位AND,OR,XOR。 a + b,a - b,a …

11
曼哈顿三角距离
规则网格上的曼哈顿距离是一个人需要一个正交的步数才能到达另一个单元。正交步是穿过网格单元边缘的步(相对于拐角,这会给我们切比雪夫距离)。 我们可以在其他网格(例如三角形网格)上定义相似的距离。我们可以使用以下索引方案寻址网格中的各个单元,其中每个单元包含一x,y对: ____________________________________... /\ /\ /\ /\ /\ / \ 1,0/ \ 3,0/ \ 5,0/ \ 7,0/ \ / 0,0\ / 2,0\ / 4,0\ / 6,0\ / 8,0\ /______\/______\/______\/______\/______\... \ /\ /\ /\ /\ / \ 0,1/ \ 2,1/ \ 4,1/ \ 6,1/ \ 8,1/ \ / 1,1\ / 3,1\ …

25
鸽子洞原理和代码高尔夫
该鸽巢原理指出, 如果将N个项目放入M盒中,且N > M,则至少一个盒子必须包含一个以上的项目。 对于许多人来说,与其他数学运算相比,该原理具有特殊的地位。正如EW Dijkstra 写道, 它被一些神秘感所包围。使用它的证明通常被认为是特殊的东西,特别是巧妙的东西。 挑战 这项挑战的目的是使用ASCII艺术表示法来说明鸽洞原理。特别: 以输入N(项目数)和M(框数)N为正和非负M。N可能小于M(即使该原则在这种情况下不适用)。 随机选择可能的项目分配到框之一。每个分配都应具有非零的被选概率。 生成分配的ASCII艺术作品表示,如下所示: 有几M行,每行对应一个框。 每行以非空白字符开头,例如|。 在该字符之后是另一个非空白字符,例如#,与该框中的项目重复的次数很多。 例如考虑N = 8,M = 5。如果项盒中的所选赋值是4,1,0,3,0,表示是 |#### |# | |### | 相同程序的不同运行(导致不同的分配)可能会导致 |# |## |# |# |### 表示有一些灵活性;见下文。 具体规则 该代码应理论上任何值运行的N和M。实际上,它可能受内存大小或数据类型限制的限制。 由于观察输出不足以确定所有赋值是否具有非零概率,因此每个提交都应说明代码如何实现(如果不是很明显)。 允许以下表示形式的变化: 可以选择任何一对不同的非空白字符。它们在程序执行之间必须保持一致。 表示形式可以旋转90度。同样,选择必须是一致的。 允许尾随空格或前导空格。 以具有不同表示形式的示例为例,对于N = 15,M = 6该程序两次执行的结果可能是 VVVVVV @@@@@@ @@ @@@ @ …

24
当整数加入队列时
介绍 甲队列是其中元件被抽象数据类型加入到前面(排队)和除去从背面(出列)。这也称为FIFO(先进先出)原则。 最好用一个示例显示: 挑战 给定一个非空数组,该数组包含正整数和表示出队(删除元素)的元素,请输出队列的最终列表。 假设X在此示例中表示出队。让我们看一下以下列表: [45, X, X, 37, 20, X, 97, X, 85] 可以将其转换为以下队列伪代码: Queue Enqueue 45 -> 45 Dequeue -> Dequeue -> (dequeue on an empty queue is a no-op) Enqueue 37 -> 37 Enqueue 20 -> 20 37 Dequeue -> 20 Enqueue 97 -> 97 20 …

18
缩写数组
目标: 给定一个字符串数组,为每个字符串创建缩写版本。 规格: 对于此挑战,缩写是字符串的前N个字符。对于字符串abc:a,ab和abc都是有效的缩写,而bc和ac则不是。 给定一个字符串数组,我们想找到最短的缩写集,这样在给定输入和任何缩写的情况下,您可以确定缩写所指的输入项。 例: 输入: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] 从第一个字符串开始,我们一直在处理字符串。 星期一只是带有的项目字符串M,因此,最短的缩写是M。 星期二从开始T,星期四也是如此。这意味着我们尝试使用字符串TU。由于没有其他字符串以此开头,因此我们使用TU。 星期三是W,星期四是Th,星期五是F。 更多示例: Input: "one,two,three,four,five,six,seven" Output: "o,tw,th,fo,fi,si,se" Input: "red,orange,yellow,green,blue,purple" Output: "r,o,y,g,b,p" Input: "a,ab,abc" Output: Not valid! No abbreviation for `a` that doesn't apply to the other items. 笔记: 您可以通过任何合理的方式进行输入和输出。 您可以假设输入将始终是有效的字符串数组。 您可以假定总会有一个解决方案,这与上一个测试用例不同。 字符串仅包含可打印的ASCII(或编码中的可打印字符) 这是代码高尔夫,所以最少的字节会赢!
26 code-golf  string 

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之间的可能浮点值的数量有限,因此通常也不会给出统一的随机数。

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.